From 405d6ba9f85698364e642917b1e0d17dcbe25779 Mon Sep 17 00:00:00 2001 From: thedavidmeister Date: Sun, 10 May 2026 23:04:45 +0400 Subject: [PATCH 1/9] ci: use upstream rainix-rs-static reusable MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Drops the `rainix-rs-static` matrix entry from rainix.yaml — replaced by a top-level `rainix-rs-static.yaml` calling rainlanguage/rainix/.github/workflows/rainix-rs-static.yaml@main, which runs through rainix's `rust-shell` (no chromium/sol/node). Co-Authored-By: Claude Opus 4.7 (1M context) --- .github/workflows/rainix-rs-static.yaml | 5 +++++ .github/workflows/rainix.yaml | 3 --- 2 files changed, 5 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/rainix-rs-static.yaml diff --git a/.github/workflows/rainix-rs-static.yaml b/.github/workflows/rainix-rs-static.yaml new file mode 100644 index 0000000..4ad44f5 --- /dev/null +++ b/.github/workflows/rainix-rs-static.yaml @@ -0,0 +1,5 @@ +name: rainix-rs-static +on: [push] +jobs: + rs-static: + uses: rainlanguage/rainix/.github/workflows/rainix-rs-static.yaml@main diff --git a/.github/workflows/rainix.yaml b/.github/workflows/rainix.yaml index 668c55f..6ddd83d 100644 --- a/.github/workflows/rainix.yaml +++ b/.github/workflows/rainix.yaml @@ -10,9 +10,6 @@ jobs: os: [ubuntu-latest, macos-latest] task: [rainix-rs-test] include: - # 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 From 3b1ae0620d6d61ff88a93a168175ed53c98dd6d8 Mon Sep 17 00:00:00 2001 From: thedavidmeister Date: Sun, 10 May 2026 23:39:34 +0400 Subject: [PATCH 2/9] ci: commit forge artifacts under crates/float/abi for rust consumption Decouples rust crate compilation from a live `forge build`. The rust crate's alloy::sol! macro reads from $CARGO_MANIFEST_DIR/abi/, so `cargo build` works standalone and the rs-static reusable runs through rainix's rust-shell without needing foundry/solc in scope. - script/CopyArtifacts.sol: forge script that copies out/.sol/.json into crates/float/abi/.json. - crates/float/src/lib.rs: alloy::sol! reads from $CARGO_MANIFEST_DIR/abi/.json instead of an env var. - flake.nix: drop the env-var exports + decimal-float-abi derivation. See issue for design rationale. - foundry.toml: extend fs_permissions for ./out (read) and ./crates/float/abi (read-write). - .github/workflows/copy-artifacts.yaml: regen-and-diff CI step asserting committed copies match freshly built ones (build-pointers pattern). Co-Authored-By: Claude Opus 4.7 (1M context) --- .github/workflows/copy-artifacts.yaml | 29 + crates/float/abi/DecimalFloat.json | 1742 ++++++++++++++++++++++++ crates/float/abi/TestDecimalFloat.json | 221 +++ crates/float/src/lib.rs | 4 +- flake.nix | 54 +- foundry.toml | 6 +- script/CopyArtifacts.sol | 24 + 7 files changed, 2040 insertions(+), 40 deletions(-) create mode 100644 .github/workflows/copy-artifacts.yaml create mode 100644 crates/float/abi/DecimalFloat.json create mode 100644 crates/float/abi/TestDecimalFloat.json create mode 100644 script/CopyArtifacts.sol diff --git a/.github/workflows/copy-artifacts.yaml b/.github/workflows/copy-artifacts.yaml new file mode 100644 index 0000000..49f0bcd --- /dev/null +++ b/.github/workflows/copy-artifacts.yaml @@ -0,0 +1,29 @@ +name: copy-artifacts +on: [push] +jobs: + copy-artifacts: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + 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: + 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: Build solidity artifacts + 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 + - name: Assert committed artifacts match freshly built + run: git diff --exit-code diff --git a/crates/float/abi/DecimalFloat.json b/crates/float/abi/DecimalFloat.json new file mode 100644 index 0000000..d83e593 --- /dev/null +++ b/crates/float/abi/DecimalFloat.json @@ -0,0 +1,1742 @@ +{ + "abi": [ + { "type": "constructor", "inputs": [], "stateMutability": "nonpayable" }, + { + "type": "function", + "name": "FORMAT_DEFAULT_SCIENTIFIC_MAX", + "inputs": [], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "FORMAT_DEFAULT_SCIENTIFIC_MIN", + "inputs": [], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "abs", + "inputs": [{ "name": "a", "type": "bytes32", "internalType": "Float" }], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "add", + "inputs": [ + { "name": "a", "type": "bytes32", "internalType": "Float" }, + { "name": "b", "type": "bytes32", "internalType": "Float" } + ], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "ceil", + "inputs": [{ "name": "a", "type": "bytes32", "internalType": "Float" }], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "div", + "inputs": [ + { "name": "a", "type": "bytes32", "internalType": "Float" }, + { "name": "b", "type": "bytes32", "internalType": "Float" } + ], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "e", + "inputs": [], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "eq", + "inputs": [ + { "name": "a", "type": "bytes32", "internalType": "Float" }, + { "name": "b", "type": "bytes32", "internalType": "Float" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "floor", + "inputs": [{ "name": "a", "type": "bytes32", "internalType": "Float" }], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "format", + "inputs": [ + { "name": "a", "type": "bytes32", "internalType": "Float" }, + { "name": "scientific", "type": "bool", "internalType": "bool" } + ], + "outputs": [{ "name": "", "type": "string", "internalType": "string" }], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "format", + "inputs": [{ "name": "a", "type": "bytes32", "internalType": "Float" }], + "outputs": [{ "name": "", "type": "string", "internalType": "string" }], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "format", + "inputs": [ + { "name": "a", "type": "bytes32", "internalType": "Float" }, + { "name": "scientificMin", "type": "bytes32", "internalType": "Float" }, + { "name": "scientificMax", "type": "bytes32", "internalType": "Float" } + ], + "outputs": [{ "name": "", "type": "string", "internalType": "string" }], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "frac", + "inputs": [{ "name": "a", "type": "bytes32", "internalType": "Float" }], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "fromFixedDecimalLossless", + "inputs": [ + { "name": "value", "type": "uint256", "internalType": "uint256" }, + { "name": "decimals", "type": "uint8", "internalType": "uint8" } + ], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "fromFixedDecimalLossy", + "inputs": [ + { "name": "value", "type": "uint256", "internalType": "uint256" }, + { "name": "decimals", "type": "uint8", "internalType": "uint8" } + ], + "outputs": [ + { "name": "", "type": "bytes32", "internalType": "Float" }, + { "name": "", "type": "bool", "internalType": "bool" } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "gt", + "inputs": [ + { "name": "a", "type": "bytes32", "internalType": "Float" }, + { "name": "b", "type": "bytes32", "internalType": "Float" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "gte", + "inputs": [ + { "name": "a", "type": "bytes32", "internalType": "Float" }, + { "name": "b", "type": "bytes32", "internalType": "Float" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "integer", + "inputs": [{ "name": "a", "type": "bytes32", "internalType": "Float" }], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "inv", + "inputs": [{ "name": "a", "type": "bytes32", "internalType": "Float" }], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "isZero", + "inputs": [{ "name": "a", "type": "bytes32", "internalType": "Float" }], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "log10", + "inputs": [{ "name": "a", "type": "bytes32", "internalType": "Float" }], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "lt", + "inputs": [ + { "name": "a", "type": "bytes32", "internalType": "Float" }, + { "name": "b", "type": "bytes32", "internalType": "Float" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "lte", + "inputs": [ + { "name": "a", "type": "bytes32", "internalType": "Float" }, + { "name": "b", "type": "bytes32", "internalType": "Float" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "max", + "inputs": [ + { "name": "a", "type": "bytes32", "internalType": "Float" }, + { "name": "b", "type": "bytes32", "internalType": "Float" } + ], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "maxNegativeValue", + "inputs": [], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "maxPositiveValue", + "inputs": [], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "min", + "inputs": [ + { "name": "a", "type": "bytes32", "internalType": "Float" }, + { "name": "b", "type": "bytes32", "internalType": "Float" } + ], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "minNegativeValue", + "inputs": [], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "minPositiveValue", + "inputs": [], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "minus", + "inputs": [{ "name": "a", "type": "bytes32", "internalType": "Float" }], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "mul", + "inputs": [ + { "name": "a", "type": "bytes32", "internalType": "Float" }, + { "name": "b", "type": "bytes32", "internalType": "Float" } + ], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "parse", + "inputs": [{ "name": "str", "type": "string", "internalType": "string" }], + "outputs": [ + { "name": "", "type": "bytes4", "internalType": "bytes4" }, + { "name": "", "type": "bytes32", "internalType": "Float" } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "pow", + "inputs": [ + { "name": "a", "type": "bytes32", "internalType": "Float" }, + { "name": "b", "type": "bytes32", "internalType": "Float" } + ], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pow10", + "inputs": [{ "name": "a", "type": "bytes32", "internalType": "Float" }], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "sqrt", + "inputs": [{ "name": "a", "type": "bytes32", "internalType": "Float" }], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "sub", + "inputs": [ + { "name": "a", "type": "bytes32", "internalType": "Float" }, + { "name": "b", "type": "bytes32", "internalType": "Float" } + ], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "toFixedDecimalLossless", + "inputs": [ + { "name": "float", "type": "bytes32", "internalType": "Float" }, + { "name": "decimals", "type": "uint8", "internalType": "uint8" } + ], + "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "toFixedDecimalLossy", + "inputs": [ + { "name": "float", "type": "bytes32", "internalType": "Float" }, + { "name": "decimals", "type": "uint8", "internalType": "uint8" } + ], + "outputs": [ + { "name": "", "type": "uint256", "internalType": "uint256" }, + { "name": "", "type": "bool", "internalType": "bool" } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "zero", + "inputs": [], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], + "stateMutability": "pure" + }, + { + "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": "Log10Negative", + "inputs": [ + { + "name": "signedCoefficient", + "type": "int256", + "internalType": "int256" + }, + { "name": "exponent", "type": "int256", "internalType": "int256" } + ] + }, + { "type": "error", "name": "Log10Zero", "inputs": [] }, + { + "type": "error", + "name": "LogTablesNotDeployed", + "inputs": [ + { + "name": "tablesAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "expectedCodehash", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "actualCodehash", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "error", + "name": "LossyConversionFromFloat", + "inputs": [ + { + "name": "signedCoefficient", + "type": "int256", + "internalType": "int256" + }, + { "name": "exponent", "type": "int256", "internalType": "int256" } + ] + }, + { + "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": "MulDivOverflow", + "inputs": [ + { "name": "x", "type": "uint256", "internalType": "uint256" }, + { "name": "y", "type": "uint256", "internalType": "uint256" }, + { "name": "denominator", "type": "uint256", "internalType": "uint256" } + ] + }, + { + "type": "error", + "name": "NegativeFixedDecimalConversion", + "inputs": [ + { + "name": "signedCoefficient", + "type": "int256", + "internalType": "int256" + }, + { "name": "exponent", "type": "int256", "internalType": "int256" } + ] + }, + { + "type": "error", + "name": "PowNegativeBase", + "inputs": [ + { + "name": "signedCoefficient", + "type": "int256", + "internalType": "int256" + }, + { "name": "exponent", "type": "int256", "internalType": "int256" } + ] + }, + { + "type": "error", + "name": "ScientificMinNotLessThanMax", + "inputs": [ + { "name": "scientificMin", "type": "bytes32", "internalType": "Float" }, + { "name": "scientificMax", "type": "bytes32", "internalType": "Float" } + ] + }, + { + "type": "error", + "name": "UnformatableExponent", + "inputs": [ + { "name": "exponent", "type": "int256", "internalType": "int256" } + ] + }, + { + "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": "ZeroNegativePower", + "inputs": [{ "name": "b", "type": "bytes32", "internalType": "Float" }] + }, + { "type": "error", "name": "ZeroStringStartPointer", "inputs": [] } + ], + "bytecode": { + "object": "0x6080604052348015600e575f80fd5b5060156019565b60b8565b73c51a14251b0dcf0ae24a96b7153991378938f5f53f7f2573004ac3a9ee7fc8d73654d76386f1b6b99e34cdf86a689c4691e47143420f811460b557604051630912d0ff60e31b815273c51a14251b0dcf0ae24a96b7153991378938f5f560048201527f2573004ac3a9ee7fc8d73654d76386f1b6b99e34cdf86a689c4691e47143420f60248201526044810182905260640160405180910390fd5b50565b614bb7806100c55f395ff3fe608060405234801561000f575f80fd5b506004361061029d575f3560e01c806381f7e2f511610171578063cde72ef3116100d2578063dd64691711610088578063e5526ecd1161006e578063e5526ecd1461062e578063e75f991f14610641578063ffae15ba14610654575f80fd5b8063dd64691714610608578063e0db58881461061b575f80fd5b8063d1de592a116100b8578063d1de592a146105bb578063d35273a7146105ce578063d3d6ffa8146105f5575f80fd5b8063cde72ef314610582578063d102b4d3146105a8575f80fd5b8063a19684b711610127578063bc1b392d1161010d578063bc1b392d1461050b578063bc62d8d814610511578063cb09682b1461055c575f80fd5b8063a19684b7146104d2578063a90d041a146104f8575f80fd5b806396ce1ec71161015757806396ce1ec7146104885780639b4afd991461049b578063a100a3d9146104bf575f80fd5b806381f7e2f5146104625780638dc2980714610475575f80fd5b80633447c0301161021b5780635ca0e7a4116101d1578063719cd99d116101b7578063719cd99d1461042957806373bfb2831461043c57806381a822721461044f575f80fd5b80635ca0e7a4146103f0578063602c35fc14610403575f80fd5b80633b3bd868116102015780633b3bd868146103b757806341aa0080146103ca5780635b23771d146103dd575f80fd5b80633447c03014610374578063371493ce14610397575f80fd5b80631ee62f111161027057806328fa1f011161025657806328fa1f011461033b5780633004fa411461034e5780633029740014610361575f80fd5b80631ee62f11146103155780632538835014610328575f80fd5b806304327dc5146102a1578063078b665b146102c75780630b6429bc146102da578063146e82ad14610302575b5f80fd5b6102b46102af36600461452f565b61067a565b6040519081526020015b60405180910390f35b6102b46102d5366004614546565b61068a565b6102ed6102e8366004614576565b61069c565b604080519283529015156020830152016102be565b6102b461031036600461452f565b6106b4565b6102b461032336600461452f565b6106d3565b6102b461033636600461452f565b6106f2565b6102b461034936600461452f565b610711565b6102b461035c366004614546565b61071b565b6102b461036f366004614546565b61073b565b610387610382366004614546565b610746565b60405190151581526020016102be565b6103aa6103a53660046145a0565b610751565b6040516102be91906145d2565b6102b46103c5366004614576565b61075d565b6102b46103d8366004614546565b610768565b6102b46103eb366004614576565b610773565b6102b46103fe36600461452f565b61077e565b7f80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff6102b4565b6102b461043736600461452f565b610788565b61038761044a366004614546565b610792565b6102b461045d36600461452f565b61079d565b610387610470366004614546565b6107a7565b610387610483366004614546565b6107b2565b6102b4610496366004614546565b6107bd565b6102b47c090000000000000000000000000000000000000000000000000000000181565b6103aa6104cd36600461452f565b6107c8565b7f80000000000000000000000000000000000000000000000000000000000000016102b4565b6102b4610506366004614546565b610812565b5f6102b4565b61052461051f366004614652565b61081d565b604080517fffffffff0000000000000000000000000000000000000000000000000000000090931683526020830191909152016102be565b7f7fffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffff6102b4565b7f7fffffff800000000000000000000000000000000000000000000000000000006102b4565b6103876105b6366004614546565b610836565b6102b46105c9366004614546565b610841565b6102b47ffffffffc0000000000000000000000000000000000000000000000000000000181565b6102b461060336600461452f565b61084c565b61038761061636600461452f565b610856565b6102b461062936600461452f565b61087c565b6103aa61063c36600461471b565b610886565b6102ed61064f366004614576565b61090f565b7fffffffbe19cfc6ef4f44cf88f14500d013df534fcaad48fca1d5ca47bea26fcc6102b4565b5f6106848261091b565b92915050565b5f6106958383610967565b9392505050565b5f806106a88484610983565b915091505b9250929050565b5f6106848273c51a14251b0dcf0ae24a96b7153991378938f5f56109c4565b5f6106848273c51a14251b0dcf0ae24a96b7153991378938f5f56109f0565b5f6106848273c51a14251b0dcf0ae24a96b7153991378938f5f5610a3e565b5f61068482610a71565b5f610695838373c51a14251b0dcf0ae24a96b7153991378938f5f5610ab2565b5f6106958383610d0d565b5f6106958383610d70565b60606106958383610dbe565b5f6106958383610e51565b5f6106958383610e6c565b5f6106958383610eb1565b5f61068482610ee4565b5f61068482610fa6565b5f6106958383611052565b5f610684826110a2565b5f61069583836110e7565b5f6106958383611137565b5f6106958383611186565b6060610684827ffffffffc000000000000000000000000000000000000000000000000000000017c0900000000000000000000000000000000000000000000000000000001610886565b5f61069583836111cb565b5f805f8061082a856111d6565b90969095509350505050565b5f61069583836112c4565b5f6106958383611313565b5f61068482611358565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff821615610684565b5f6106848261138a565b606061089283836112c4565b6108d7576040517f3be5bf9400000000000000000000000000000000000000000000000000000000815260048101849052602481018390526044015b60405180910390fd5b5f6108e1856110a2565b9050610906856108f183876112c4565b8061090157506109018386611137565b610dbe565b95945050505050565b5f806106a884846113cb565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d61094d828261140b565b90925090505f61095d8383611459565b5095945050505050565b5f6109728383611137565b61097c5781610695565b5090919050565b5f807bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8416601b0b60e085901d6109b782828761155f565b9350935050509250929050565b5f610695837fffffffff0000000000000000000000000000000000000000000000000000000584610ab2565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d610a238483836116ae565b90925090505f610a338383611459565b509695505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d610a2384838361181f565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d82610aa48383611b54565b9150505f610a338284611459565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff848116601b0b9060e086901d908516610aef5750600191506106959050565b5f8213610b8857815f03610b4c57610b07855f6112c4565b15610b41576040517f8be82972000000000000000000000000000000000000000000000000000000008152600481018690526024016108ce565b505f91506106959050565b6040517fcceba0f100000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016108ce565b610b93856001610d70565b8015610ba45750610ba4865f611137565b15610bb3578592505050610695565b610bbd855f6112c4565b15610be657610bdd610bce8761091b565b610bd787611358565b86610ab2565b92505050610695565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8516601b0b60e086901d5f80610c198484611b54565b915091505f610c2983855f611bbc565b905060015f8080610c608f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b9160e09190911d90565b915091505b60018510610ca75784600116600103610c8a57610c8484848484611cd3565b90945092505b600185901c9450610c9d82828484611cd3565b9092509050610c65565b5f80610cb48f8e8e61181f565b91509150610cc482828a8d611cd3565b9092509050610cd48f83836116ae565b9092509050610ce582828888611cd3565b90925090505f610cf58383611459565b509e5050505050505050505050505050509392505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686611df2565b915091505f610d618383611459565b509a9950505050505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d610db384848484612416565b979650505050505050565b60607bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d5f829003610e2e576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525092505050610684565b8315610e4757610e3e828261242d565b92505050610684565b61090682826126fd565b5f805f610e5e8585612e64565b915091506109068282612ec6565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686612f20565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d610906828286612f4a565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828112610f1b57509192915050565b5f80610f278484611b54565b915091505f84128015610f3957508015155b15610f8f57610f8a82847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4612f20565b935091505b5f610f9a8385611459565b50979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828112610fdd57509192915050565b5f80610fe98484611b54565b91509150805f03610ffe575093949350505050565b5f811315610f8f57610f8a82847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4612fa6565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d611095848484846130d6565b1315979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828212156110dc5761094d82826131aa565b5f61095d8383611459565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d61112a848484846130d6565b1215979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d61117a848484846130d6565b12979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686611cd3565b5f61097283836112c4565b80515f908190602084810191850101828080806111f3868661324d565b929650909450925090507fffffffff0000000000000000000000000000000000000000000000000000000084165f036112b557848303611285575f806112398484611459565b915091508061127457507f32b8b8be000000000000000000000000000000000000000000000000000000009a5f9a5098505050505050505050565b505f9a909950975050505050505050565b507fad384e8700000000000000000000000000000000000000000000000000000000985f98509650505050505050565b5091975f975095505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d611307848484846130d6565b13979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686612fa6565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d61094d82826131aa565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d826113bd8383611b54565b5090505f610a338284611459565b5f805f805f6113da87876136ec565b9250925092505f806113ec8585611459565b91509150818380156113fb5750815b9650965050505050509250929050565b5f806106a87f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb48686611df2565b5f601b83900b83148383826114bd577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561149d57620186a0860595506005850194505b8586601b0b146114b857600a8605955084600101945061149d565b6114d3565b855f036114d357505f9250600191506106ad9050565b848560030b1461152f575f8512156114f357505f92508291506106ad9050565b6040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016108ce565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f8512156115a5576040517f4a7d166b00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016108ce565b845f036115b757505f905060016116a6565b8460ff8416850185811215611602576040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101889052602481018790526044016108ce565b5f805f83121561166c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb3831215611643575f8095509550505050506116a6565b825f03600a0a915081848161165a5761165a614744565b04955050840290911491506116a69050565b5f83131561169b5761167f83600a6148bc565b915061168b82856148c7565b9550600194506116a69350505050565b509193506001925050505b935093915050565b5f805f8412156116ea576116c284846131aa565b90945092506116d28585856116ae565b90945092506116e1848461140b565b915091506116a6565b5f806116f68686611b54565b9092509050845f80806117098585613748565b9194509250905061270d6127106117216001826148de565b8514611738576117328d8686613837565b90925090505b83156117c3575f61174a866001614904565b90505b80848583028161175f5761175f614744565b051461177657600a84059350600a8805975061174d565b6117b7611783858861492b565b8961178e878561492b565b8f87877ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6138f0565b909d509b506117ea9050565b819b507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc9a505b5050505050866117fb84835f611bbc565b611806886001614904565b6118109190614904565b94509450505050935093915050565b5f80838361182d828261398d565b90965094505f86136118ae57855f03611872576040517f561fc7b500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5d3fd4db00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016108ce565b5050837f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000036118ec576118e283604c614904565b5f915091506116a6565b7f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000008412158061193b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb561195d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb45b5f0b8412611b18575f805f805f8561197657604b611979565b604c5b611983908a614904565b90505f80876119b0577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000006119d1565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca0000000000000000005b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff169050808c81611a0357611a03614744565b05818102955090850193507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18019050611a3c8c826139e3565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000000295508594508a8414611ac8576123278114611aa357611a7e8c826001016139e3565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000002611ac5565b7f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000005b94505b50611af8838b848c89897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb46138f0565b909a509850611b098a8a835f612fa6565b975097505050505050506116a6565b611b22858561140b565b9095509350611b3286868661181f565b9095509350611b4185856131aa565b92509250506116a6565b50935093915050565b5f805f8312611b6757508290505f6106ad565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4831215611b9957505f9050826106ad565b5f839003600a0a808581611baf57611baf614744565b0794859003959350505050565b5f818303611bcb575082610695565b82821315611c0e57828203604c811380611be557505f8113155b15611bf3575f915050610695565b80600a0a8581611c0557611c05614744565b05915050610695565b818303604c811380611c2057505f8113155b15611c68576040517f1d5d6d100000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490526064016108ce565b600a81900a85810286828281611c8057611c80614744565b0514611cc9576040517f1d5d6d100000000000000000000000000000000000000000000000000000000081526004810188905260248101879052604481018690526064016108ce565b9250610695915050565b5f8085158415178015611ceb575f92505f9150611de8565b611cf58487614904565b91505f611d0188613a6a565b90505f611d0d87613a6a565b90505f611d1a8383613ad0565b5090505f6f0785ee10d5da46d900f436a000000000821115611d4f576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a7640000821115611d7057670de0b6b3a7640000820491506012015b633b9aca00821115611d8957633b9aca00820491506009015b612710821115611d9e57612710820491506004015b8115611db257600a82049150600101611d9e565b611dbc8187614904565b9550611dde8b8a611dd88787611dd387600a6148bc565b613b0b565b89613bf0565b9097509550505050505b5094509492505050565b5f80835f03611e37576040517f7a97930f00000000000000000000000000000000000000000000000000000000815260048101879052602481018690526044016108ce565b855f03611e4857505f90508061240d565b5f805f80611e568a8a613cf7565b919b5099509150611e678888613cf7565b919950975090505f611e788b613a6a565b90505f611e848a613a6a565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c818310156122a1578415611ee257507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000009050604b612260565b6f4b3b4ca85a86c47a098a22400000000083101561200e57678ac7230489e80000831015611f72576402540be400831015611f4057620186a0831015611f305750620186a0905060056121e9565b506402540be4009050600a6121e9565b655af3107a4000831015611f5f5750655af3107a40009050600e6121e9565b50678ac7230489e80000905060136121e9565b6b204fce5e3e25026110000000831015611fc45769152d02c7e14af6800000831015611fad575069152d02c7e14af6800000905060176121e9565b506b204fce5e3e250261100000009050601c6121e9565b6d314dc6448d9338c15b0a00000000831015611ff357506d314dc6448d9338c15b0a00000000905060216121e9565b506f4b3b4ca85a86c47a098a224000000000905060266121e9565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156121065773af298d050e4395d69670b12b7f410000000000008310156120a1577172cb5bd86321e38cb6ce6682e8000000000083101561208257507172cb5bd86321e38cb6ce6682e800000000009050602b6121e9565b5073af298d050e4395d69670b12b7f41000000000000905060306121e9565b76010b46c6cdd6e3e0828f4db456ff0c8ea00000000000008310156120e2575076010b46c6cdd6e3e0828f4db456ff0c8ea0000000000000905060356121e9565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a6121e9565b7c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000083101561219c577a026e4d30eccc3215dd8f3157d27e23acbdcfe6800000000000000083101561217457507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f6121e9565b507c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000905060446121e9565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca0000000000000000008310156121e957507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b81831161221d57600a820491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016121e9565b815f03612260576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018d9052602481018c90526044016108ce565b856122a1576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018f9052602481018e90526044016108ce565b807f8000000000000000000000000000000000000000000000000000000000000000018d126122d457808d039c50612347565b7f80000000000000000000000000000000000000000000000000000000000000009c90038c015f81131561234757807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038b1361233457998a0199612347565b5f8099509950505050505050505061240d565b5f808e12801561235657505f8c135b15612393577f80000000000000000000000000000000000000000000000000000000000000008e01808d1361238b575f61238f565b808d035b9150505b8b818f010397506123b08f8e6123aa888789613b0b565b8b613bf0565b90995097505f8113156123fa57604c8113156123da575f809a509a5050505050505050505061240d565b80600a0a89816123ec576123ec614744565b059850885f036123fa575f97505b5096985094965061240d95505050505050565b94509492505050565b5f612423858585856130d6565b1495945050505050565b6060612439838361398d565b90935091505f8061246a7f161bcca7119915b50764b4abe86529797775a5f171951000000000000000000086614976565b1561249a57507f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000009050604c6124c1565b507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000009050604b5b5f6124cc8387614976565b90505f6124d984886149dd565b90505f808312156124f3575060016124f0836149f0565b92505b5f82121561250a57506001612507826149f0565b91505b60408051602081019091525f81528215612613575f8061252b600a89614a20565b90505b6125388186614976565b5f0361255d57612549600a82614a20565b90508161255581614a33565b92505061252e565b60408051602081019091525f8082525b838110156125be57816040516020016125869190614a81565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052915060010161256d565b505b6125cb600a876149dd565b5f036125e3576125dc600a87614976565b95506125c0565b806125ed87613f98565b6040516020016125fe929190614ab9565b60405160208183030381529060405293505050505b5f61261d85613f98565b90505f61262a878b614904565b90505f81156126605761263c82613f98565b60405160200161264c9190614afb565b604051602081830303815290604052612670565b60405180602001604052805f8152505b90505f8561268c5760405180602001604052805f8152506126c3565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b9050808486846040516020016126dc9493929190614b2c565b6040516020818303038152906040529a505050505050505050505092915050565b60606103e882138061271857506127156103e86149f0565b82125b15612752576040517fe44c72b0000000000000000000000000000000000000000000000000000000008152600481018390526024016108ce565b5f80841290811561276d57612766856149f0565b9050612770565b50835b5f61277a82614024565b80519091505f5b81811080156127fd57508281612798600185614b56565b6127a29190614b56565b815181106127b2576127b2614b69565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f3000000000000000000000000000000000000000000000000000000000000000145b15612814578061280c81614a33565b915050612781565b5f61281f8284614b56565b90505f61282c838a614904565b90505f876128485760405180602001604052805f81525061287f565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b90505f82126129f957815f6128948286614b96565b67ffffffffffffffff8111156128ac576128ac614625565b6040519080825280601f01601f1916602001820160405280156128d6576020820181803683370190505b5090505f5b85811015612948578881815181106128f5576128f5614b69565b602001015160f81c60f81b82828151811061291257612912614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053506001016128db565b505f5b828110156129c5577f30000000000000000000000000000000000000000000000000000000000000008261297f8389614b96565b8151811061298f5761298f614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535060010161294b565b5082816040516020016129d9929190614ba9565b6040516020818303038152906040529a5050505050505050505050610684565b5f612a03836149f0565b905080841115612c1a575f612a188286614b56565b90505f612a26866001614b96565b67ffffffffffffffff811115612a3e57612a3e614625565b6040519080825280601f01601f191660200182016040528015612a68576020820181803683370190505b5090505f5b82811015612ada57898181518110612a8757612a87614b69565b602001015160f81c60f81b828281518110612aa457612aa4614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612a6d565b507f2e00000000000000000000000000000000000000000000000000000000000000818381518110612b0e57612b0e614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5b83811015612be55789612b518285614b96565b81518110612b6157612b61614b69565b01602001517fff00000000000000000000000000000000000000000000000000000000000000168282612b95866001614b96565b612b9f9190614b96565b81518110612baf57612baf614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612b3e565b508381604051602001612bf9929190614ba9565b6040516020818303038152906040529b505050505050505050505050610684565b5f612c258583614b56565b90505f85612c34836002614b96565b612c3e9190614b96565b67ffffffffffffffff811115612c5657612c56614625565b6040519080825280601f01601f191660200182016040528015612c80576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f81518110612cb657612cb6614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f2e0000000000000000000000000000000000000000000000000000000000000081600181518110612d1857612d18614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5b82811015612dc3577f300000000000000000000000000000000000000000000000000000000000000082612d7d836002614b96565b81518110612d8d57612d8d614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612d48565b505f5b86811015612be557898181518110612de057612de0614b69565b01602001517fff00000000000000000000000000000000000000000000000000000000000000168282612e14866002614b96565b612e1e9190614b96565b81518110612e2e57612e2e614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612dc6565b5f805f805f612e7387876136ec565b92509250925080612eba576040517fc471796600000000000000000000000000000000000000000000000000000000815260048101849052602481018390526044016108ce565b50909590945092505050565b5f805f612ed38585611459565b9150915080612f18576040517f22c9f7bb00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016108ce565b509392505050565b5f80612f2c84846131aa565b9094509250612f3d86868686612fa6565b9150915094509492505050565b5f805f612f5886868661155f565b9150915080612f9d576040517f05e4767800000000000000000000000000000000000000000000000000000000815260048101879052602481018690526044016108ce565b50949350505050565b5f8085158415178015612fd257865f03612fc6578484925092505061240d565b8686925092505061240d565b612fdc878761398d565b9097509550612feb858561398d565b909550935085841315612fff579395929492935b838603604c81111561301857878793509350505061240d565b80600a0a868161302a5761302a614744565b0595505086850180881860ff90811c151589881890911c151680156130c557877f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff036130ac576040517fd556b111000000000000000000000000000000000000000000000000000000008152600481018a9052602481018990526044016108ce565b600a9687900596909805860197600197909701966130c9565b8198505b5096979596505050505050565b5f80851584151781871282861218178584141780156130fb578685925092505061240d565b505f8584131561310f575092949193919260015b8386035f8112604c8213178015613142578215613134575f899450945050505061240d565b885f9450945050505061240d565b600a82900a8981028a82828161315a5761315a614744565b0514613186578415613176575f8b96509650505050505061240d565b8a5f96509650505050505061240d565b841561319b57889650945061240d9350505050565b955087945061240d9350505050565b5f807f80000000000000000000000000000000000000000000000000000000000000008403613243577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8303613236576040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101859052602481018490526044016108ce565b600a840593508260010192505b50505f9190910391565b5f8281806132628386652000000000006140e0565b9250858314158361327c81886703ff0000000000006140e0565b94508085036132b657507f34bd20690000000000000000000000000000000000000000000000000000000094505f92508291506136e39050565b5f806132c28a88614109565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613300575095505f93508392506136e3915050565b86519095506540000000000060015f9290921a9190911b16151588871016915050801561358f57506001909301925f8461334381896703ff0000000000006140e0565b955080860361337e57507f7bfa48af0000000000000000000000000000000000000000000000000000000095505f93508392506136e3915050565b855b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018051908a1160015f9290921a9190911b6601000000000000161515166001036133ed577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613380565b818114613444575f806134008484614109565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613440575097505f95508594506136e39350505050565b9350505b5f83121561347f57507f7bfa48af0000000000000000000000000000000000000000000000000000000096505f94508493506136e392505050565b831561348b57825f0392505b80820394505f8513156134cb57507f013b2aaa0000000000000000000000000000000000000000000000000000000096505f94508493506136e392505050565b855f036134da5782955061358c565b5f859003604381111561351b57507f32b8b8be0000000000000000000000000000000000000000000000000000000097505f95508594506136e39350505050565b600a0a8681025f8883838161353257613532614744565b0514159050601b82900b82141581806135485750805b1561358457507f32b8b8be000000000000000000000000000000000000000000000000000000009a505f98508897506136e39650505050505050565b505084019650505b50505b84516c2000000020000000000000000060015f9290921a9190911b1615158786101680156136d457600190950194856135cf818a652000000000006140e0565b9650866135e5818b6703ff0000000000006140e0565b975080880361362257507f013b2aaa0000000000000000000000000000000000000000000000000000000097505f95508594506136e39350505050565b505f8061362f838a614109565b90925090507fffffffff0000000000000000000000000000000000000000000000000000000082161561366f575097505f95508594506136e39350505050565b9250508482015f8313801561368357508581125b8061369757505f8312801561369757508581135b156136d057507fd556b1110000000000000000000000000000000000000000000000000000000097505f95508594506136e39350505050565b9450505b845f036136df575f93505b5050505b92959194509250565b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86111561373757600a860460018201600a88065f1493509350935050613741565b8593509150600190505b9250925092565b5f805f837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0361378057508391505f90506001613741565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc84121561380e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb08412156137df57505f9150508215156001613741565b5f846004015f03600a0a90505f8187816137fb576137fb614744565b0594505080840286141592509050613741565b5f841261382357505f91508190506001613741565b50505060048101600a0a82025f6001613741565b5f80806064613849600a612328614a20565b613856600a612328614a20565b6138619060026148c7565b61386c906001614b96565b6138769190614b96565b6138809190614b96565b90506138c4565b5f8052600280600a8504028301601e833c5f80516107d0840193505f80526001600a8606600a6064880402018501601f853c5f5101949350505050565b6138cf858288613887565b92508315611b4b576138e5600186018288613887565b915050935093915050565b5f80888803613903575083905081613981565b5f805f806139138c8b8f8d612f20565b915091505f806139258a8a8d8c612f20565b9150915061393584848484611cd3565b8096508197505050505050505f8061394f8b8b8f8d612f20565b915091505f8061396186868686611df2565b915091505f8061397384848f8e612fa6565b909a50985050505050505050505b97509795505050505050565b5f805f805f61399c8787613cf7565b92509250925080612eba576040517f05e51ecb00000000000000000000000000000000000000000000000000000000815260048101889052602481018790526044016108ce565b5f806139f2600a612328614a20565b6139fd9060026148c7565b613a08906001614b96565b90505f613a18600a612328614a20565b90506002600a8504026001015f8052600281601e883c505f51617fff81169350618000811615613a4757918101915b505f80526001600a8506600a6064870402018301601f873c50505f510192915050565b5f80821215613ac7577f80000000000000000000000000000000000000000000000000000000000000008203613ac157507f8000000000000000000000000000000000000000000000000000000000000000919050565b505f0390565b5090565b919050565b5f807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83850993909202808410938190039390930393915050565b5f805f613b188686613ad0565b91509150815f03613b3c57838181613b3257613b32614744565b0492505050610695565b838210613b86576040517f6c59da120000000000000000000000000000000000000000000000000000000081526004810187905260248101869052604481018590526064016108ce565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f8587181215613cba577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115613ca757613c4f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001614b96565b8403613c7f57507f800000000000000000000000000000000000000000000000000000000000000090508161240d565b613c8a600a85614a20565b613c93906149f0565b613c9e846001614904565b9150915061240d565b613cb0846149f0565b839150915061240d565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115613ced57613c93600a85614a20565b508290508161240d565b5f805f845f03613d0f57505f91508190506001613741565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee800000000000000000085055f03613f23576f4b3b4ca85a86c47a098a2240000000008505158015613d7857507f80000000000000000000000000000000000000000000000000000000000000268412155b15613d99576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a000000000000008505158015613de157507f80000000000000000000000000000000000000000000000000000000000000138412155b15613dfa57678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c6400000000000000008505158015613e4657507f800000000000000000000000000000000000000000000000000000000000000a8412155b15613e5c576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e40000000000000000008505158015613eab57507f80000000000000000000000000000000000000000000000000000000000000028412155b15613ec157606485029450600284039350613e5c565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000008505158015613f1157507f80000000000000000000000000000000000000000000000000000000000000018412155b15613f2357600a850294506001840393505b600a80860290810586148015613f5957507f80000000000000000000000000000000000000000000000000000000000000018512155b15613f68578095506001850394505b50939492935050507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000008305151590565b60605f8212613fb55760405180602001604052805f815250613fec565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b613ffd60ff84901d80850118614024565b60405160200161400e929190614ba9565b6040516020818303038152906040529050919050565b60605f61403083614233565b60010190505f8167ffffffffffffffff81111561404f5761404f614625565b6040519080825280601f01601f191660200182016040528015614079576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461408357509392505050565b5f5b5f82600186515f1a1b16118385101615614101576001840193506140e2565b509192915050565b81515f90819065200000000000600191831a9190911b161515838510168085019082806141368488614314565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615614171575093505f92506106ad915050565b825f036141d4577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116141a5575f6141c7565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b955093506106ad92505050565b7f80000000000000000000000000000000000000000000000000000000000000008111614201575f614223565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95505f0393505050509250929050565b5f807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061427b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106142a7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106142c557662386f26fc10000830492506010015b6305f5e10083106142dd576305f5e100830492506008015b61271083106142f157612710830492506004015b60648310614303576064830492506002015b600a83106106845760010192915050565b5f8082841061434757507f34bd20690000000000000000000000000000000000000000000000000000000090505f6106ad565b835f03614380576040517fda6966d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60305f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501815b8782101580156143b85750604d83105b156143fb57815160018401937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90930192600a0a5f9190911a85900302016143a8565b8782106145215781515f1a849003600181111561444357507f0fdc26350000000000000000000000000000000000000000000000000000000095505f94506106ad9350505050565b600a84900a810282810183111561448657507f0fdc26350000000000000000000000000000000000000000000000000000000096505f95506106ad945050505050565b9190910190507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101905b8782106145215781515f1a603081146144f657507f0fdc26350000000000000000000000000000000000000000000000000000000095505f94506106ad9350505050565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101906144b2565b5f9890975095505050505050565b5f6020828403121561453f575f80fd5b5035919050565b5f8060408385031215614557575f80fd5b50508035926020909101359150565b803560ff81168114613acb575f80fd5b5f8060408385031215614587575f80fd5b8235915061459760208401614566565b90509250929050565b5f80604083850312156145b1575f80fd5b82359150602083013580151581146145c7575f80fd5b809150509250929050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60208284031215614662575f80fd5b813567ffffffffffffffff80821115614679575f80fd5b818401915084601f83011261468c575f80fd5b81358181111561469e5761469e614625565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156146e4576146e4614625565b816040528281528760208487010111156146fc575f80fd5b826020860160208301375f928101602001929092525095945050505050565b5f805f6060848603121561472d575f80fd5b505081359360208301359350604090920135919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b600181815b808511156147f757817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156147dd576147dd614771565b808516156147ea57918102915b93841c93908002906147a3565b509250929050565b5f8261480d57506001610684565b8161481957505f610684565b816001811461482f576002811461483957614855565b6001915050610684565b60ff84111561484a5761484a614771565b50506001821b610684565b5060208310610133831016604e8410600b8410161715614878575081810a610684565b614882838361479e565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156148b4576148b4614771565b029392505050565b5f61069583836147ff565b808202811582820484141761068457610684614771565b8181035f8312801583831316838312821617156148fd576148fd614771565b5092915050565b8082018281125f83128015821682158216171561492357614923614771565b505092915050565b8082025f82127f80000000000000000000000000000000000000000000000000000000000000008414161561496257614962614771565b818105831482151761068457610684614771565b5f8261498457614984614744565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f8000000000000000000000000000000000000000000000000000000000000000831416156149d8576149d8614771565b500590565b5f826149eb576149eb614744565b500790565b5f7f80000000000000000000000000000000000000000000000000000000000000008203613ac157613ac1614771565b5f82614a2e57614a2e614744565b500490565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a6357614a63614771565b5060010190565b5f81518060208401855e5f93019283525090919050565b5f614a8c8284614a6a565b7f300000000000000000000000000000000000000000000000000000000000000081526001019392505050565b7f2e0000000000000000000000000000000000000000000000000000000000000081525f614af3614aed6001840186614a6a565b84614a6a565b949350505050565b7f650000000000000000000000000000000000000000000000000000000000000081525f6106956001830184614a6a565b5f614b4c614aed614b46614b40858a614a6a565b88614a6a565b86614a6a565b9695505050505050565b8181038181111561068457610684614771565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b8082018082111561068457610684614771565b5f614af3614aed8386614a6a56", + "sourceMap": "525:13549:37:-:0;;;1114:77;;;;;;;;;-1:-1:-1;1138:46:37;:44;:46::i;:::-;525:13549;;2590:358:43;721:42;2673;934:66;2729:47;;2725:217;;2799:132;;-1:-1:-1;;;2799:132:43;;721:42;2799:132;;;216:51:134;934:66:43;283:18:134;;;276:34;326:18;;;319:34;;;189:18;;2799:132:43;;;;;;;2725:217;2638:310;2590:358::o;14:345:134:-;525:13549:37;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561000f575f80fd5b506004361061029d575f3560e01c806381f7e2f511610171578063cde72ef3116100d2578063dd64691711610088578063e5526ecd1161006e578063e5526ecd1461062e578063e75f991f14610641578063ffae15ba14610654575f80fd5b8063dd64691714610608578063e0db58881461061b575f80fd5b8063d1de592a116100b8578063d1de592a146105bb578063d35273a7146105ce578063d3d6ffa8146105f5575f80fd5b8063cde72ef314610582578063d102b4d3146105a8575f80fd5b8063a19684b711610127578063bc1b392d1161010d578063bc1b392d1461050b578063bc62d8d814610511578063cb09682b1461055c575f80fd5b8063a19684b7146104d2578063a90d041a146104f8575f80fd5b806396ce1ec71161015757806396ce1ec7146104885780639b4afd991461049b578063a100a3d9146104bf575f80fd5b806381f7e2f5146104625780638dc2980714610475575f80fd5b80633447c0301161021b5780635ca0e7a4116101d1578063719cd99d116101b7578063719cd99d1461042957806373bfb2831461043c57806381a822721461044f575f80fd5b80635ca0e7a4146103f0578063602c35fc14610403575f80fd5b80633b3bd868116102015780633b3bd868146103b757806341aa0080146103ca5780635b23771d146103dd575f80fd5b80633447c03014610374578063371493ce14610397575f80fd5b80631ee62f111161027057806328fa1f011161025657806328fa1f011461033b5780633004fa411461034e5780633029740014610361575f80fd5b80631ee62f11146103155780632538835014610328575f80fd5b806304327dc5146102a1578063078b665b146102c75780630b6429bc146102da578063146e82ad14610302575b5f80fd5b6102b46102af36600461452f565b61067a565b6040519081526020015b60405180910390f35b6102b46102d5366004614546565b61068a565b6102ed6102e8366004614576565b61069c565b604080519283529015156020830152016102be565b6102b461031036600461452f565b6106b4565b6102b461032336600461452f565b6106d3565b6102b461033636600461452f565b6106f2565b6102b461034936600461452f565b610711565b6102b461035c366004614546565b61071b565b6102b461036f366004614546565b61073b565b610387610382366004614546565b610746565b60405190151581526020016102be565b6103aa6103a53660046145a0565b610751565b6040516102be91906145d2565b6102b46103c5366004614576565b61075d565b6102b46103d8366004614546565b610768565b6102b46103eb366004614576565b610773565b6102b46103fe36600461452f565b61077e565b7f80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff6102b4565b6102b461043736600461452f565b610788565b61038761044a366004614546565b610792565b6102b461045d36600461452f565b61079d565b610387610470366004614546565b6107a7565b610387610483366004614546565b6107b2565b6102b4610496366004614546565b6107bd565b6102b47c090000000000000000000000000000000000000000000000000000000181565b6103aa6104cd36600461452f565b6107c8565b7f80000000000000000000000000000000000000000000000000000000000000016102b4565b6102b4610506366004614546565b610812565b5f6102b4565b61052461051f366004614652565b61081d565b604080517fffffffff0000000000000000000000000000000000000000000000000000000090931683526020830191909152016102be565b7f7fffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffff6102b4565b7f7fffffff800000000000000000000000000000000000000000000000000000006102b4565b6103876105b6366004614546565b610836565b6102b46105c9366004614546565b610841565b6102b47ffffffffc0000000000000000000000000000000000000000000000000000000181565b6102b461060336600461452f565b61084c565b61038761061636600461452f565b610856565b6102b461062936600461452f565b61087c565b6103aa61063c36600461471b565b610886565b6102ed61064f366004614576565b61090f565b7fffffffbe19cfc6ef4f44cf88f14500d013df534fcaad48fca1d5ca47bea26fcc6102b4565b5f6106848261091b565b92915050565b5f6106958383610967565b9392505050565b5f806106a88484610983565b915091505b9250929050565b5f6106848273c51a14251b0dcf0ae24a96b7153991378938f5f56109c4565b5f6106848273c51a14251b0dcf0ae24a96b7153991378938f5f56109f0565b5f6106848273c51a14251b0dcf0ae24a96b7153991378938f5f5610a3e565b5f61068482610a71565b5f610695838373c51a14251b0dcf0ae24a96b7153991378938f5f5610ab2565b5f6106958383610d0d565b5f6106958383610d70565b60606106958383610dbe565b5f6106958383610e51565b5f6106958383610e6c565b5f6106958383610eb1565b5f61068482610ee4565b5f61068482610fa6565b5f6106958383611052565b5f610684826110a2565b5f61069583836110e7565b5f6106958383611137565b5f6106958383611186565b6060610684827ffffffffc000000000000000000000000000000000000000000000000000000017c0900000000000000000000000000000000000000000000000000000001610886565b5f61069583836111cb565b5f805f8061082a856111d6565b90969095509350505050565b5f61069583836112c4565b5f6106958383611313565b5f61068482611358565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff821615610684565b5f6106848261138a565b606061089283836112c4565b6108d7576040517f3be5bf9400000000000000000000000000000000000000000000000000000000815260048101849052602481018390526044015b60405180910390fd5b5f6108e1856110a2565b9050610906856108f183876112c4565b8061090157506109018386611137565b610dbe565b95945050505050565b5f806106a884846113cb565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d61094d828261140b565b90925090505f61095d8383611459565b5095945050505050565b5f6109728383611137565b61097c5781610695565b5090919050565b5f807bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8416601b0b60e085901d6109b782828761155f565b9350935050509250929050565b5f610695837fffffffff0000000000000000000000000000000000000000000000000000000584610ab2565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d610a238483836116ae565b90925090505f610a338383611459565b509695505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d610a2384838361181f565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d82610aa48383611b54565b9150505f610a338284611459565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff848116601b0b9060e086901d908516610aef5750600191506106959050565b5f8213610b8857815f03610b4c57610b07855f6112c4565b15610b41576040517f8be82972000000000000000000000000000000000000000000000000000000008152600481018690526024016108ce565b505f91506106959050565b6040517fcceba0f100000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016108ce565b610b93856001610d70565b8015610ba45750610ba4865f611137565b15610bb3578592505050610695565b610bbd855f6112c4565b15610be657610bdd610bce8761091b565b610bd787611358565b86610ab2565b92505050610695565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8516601b0b60e086901d5f80610c198484611b54565b915091505f610c2983855f611bbc565b905060015f8080610c608f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b9160e09190911d90565b915091505b60018510610ca75784600116600103610c8a57610c8484848484611cd3565b90945092505b600185901c9450610c9d82828484611cd3565b9092509050610c65565b5f80610cb48f8e8e61181f565b91509150610cc482828a8d611cd3565b9092509050610cd48f83836116ae565b9092509050610ce582828888611cd3565b90925090505f610cf58383611459565b509e5050505050505050505050505050509392505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686611df2565b915091505f610d618383611459565b509a9950505050505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d610db384848484612416565b979650505050505050565b60607bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d5f829003610e2e576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525092505050610684565b8315610e4757610e3e828261242d565b92505050610684565b61090682826126fd565b5f805f610e5e8585612e64565b915091506109068282612ec6565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686612f20565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d610906828286612f4a565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828112610f1b57509192915050565b5f80610f278484611b54565b915091505f84128015610f3957508015155b15610f8f57610f8a82847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4612f20565b935091505b5f610f9a8385611459565b50979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828112610fdd57509192915050565b5f80610fe98484611b54565b91509150805f03610ffe575093949350505050565b5f811315610f8f57610f8a82847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4612fa6565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d611095848484846130d6565b1315979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828212156110dc5761094d82826131aa565b5f61095d8383611459565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d61112a848484846130d6565b1215979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d61117a848484846130d6565b12979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686611cd3565b5f61097283836112c4565b80515f908190602084810191850101828080806111f3868661324d565b929650909450925090507fffffffff0000000000000000000000000000000000000000000000000000000084165f036112b557848303611285575f806112398484611459565b915091508061127457507f32b8b8be000000000000000000000000000000000000000000000000000000009a5f9a5098505050505050505050565b505f9a909950975050505050505050565b507fad384e8700000000000000000000000000000000000000000000000000000000985f98509650505050505050565b5091975f975095505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d611307848484846130d6565b13979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686612fa6565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d61094d82826131aa565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d826113bd8383611b54565b5090505f610a338284611459565b5f805f805f6113da87876136ec565b9250925092505f806113ec8585611459565b91509150818380156113fb5750815b9650965050505050509250929050565b5f806106a87f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb48686611df2565b5f601b83900b83148383826114bd577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561149d57620186a0860595506005850194505b8586601b0b146114b857600a8605955084600101945061149d565b6114d3565b855f036114d357505f9250600191506106ad9050565b848560030b1461152f575f8512156114f357505f92508291506106ad9050565b6040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016108ce565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f8512156115a5576040517f4a7d166b00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016108ce565b845f036115b757505f905060016116a6565b8460ff8416850185811215611602576040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101889052602481018790526044016108ce565b5f805f83121561166c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb3831215611643575f8095509550505050506116a6565b825f03600a0a915081848161165a5761165a614744565b04955050840290911491506116a69050565b5f83131561169b5761167f83600a6148bc565b915061168b82856148c7565b9550600194506116a69350505050565b509193506001925050505b935093915050565b5f805f8412156116ea576116c284846131aa565b90945092506116d28585856116ae565b90945092506116e1848461140b565b915091506116a6565b5f806116f68686611b54565b9092509050845f80806117098585613748565b9194509250905061270d6127106117216001826148de565b8514611738576117328d8686613837565b90925090505b83156117c3575f61174a866001614904565b90505b80848583028161175f5761175f614744565b051461177657600a84059350600a8805975061174d565b6117b7611783858861492b565b8961178e878561492b565b8f87877ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6138f0565b909d509b506117ea9050565b819b507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc9a505b5050505050866117fb84835f611bbc565b611806886001614904565b6118109190614904565b94509450505050935093915050565b5f80838361182d828261398d565b90965094505f86136118ae57855f03611872576040517f561fc7b500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5d3fd4db00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016108ce565b5050837f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000036118ec576118e283604c614904565b5f915091506116a6565b7f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000008412158061193b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb561195d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb45b5f0b8412611b18575f805f805f8561197657604b611979565b604c5b611983908a614904565b90505f80876119b0577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000006119d1565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca0000000000000000005b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff169050808c81611a0357611a03614744565b05818102955090850193507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18019050611a3c8c826139e3565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000000295508594508a8414611ac8576123278114611aa357611a7e8c826001016139e3565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000002611ac5565b7f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000005b94505b50611af8838b848c89897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb46138f0565b909a509850611b098a8a835f612fa6565b975097505050505050506116a6565b611b22858561140b565b9095509350611b3286868661181f565b9095509350611b4185856131aa565b92509250506116a6565b50935093915050565b5f805f8312611b6757508290505f6106ad565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4831215611b9957505f9050826106ad565b5f839003600a0a808581611baf57611baf614744565b0794859003959350505050565b5f818303611bcb575082610695565b82821315611c0e57828203604c811380611be557505f8113155b15611bf3575f915050610695565b80600a0a8581611c0557611c05614744565b05915050610695565b818303604c811380611c2057505f8113155b15611c68576040517f1d5d6d100000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490526064016108ce565b600a81900a85810286828281611c8057611c80614744565b0514611cc9576040517f1d5d6d100000000000000000000000000000000000000000000000000000000081526004810188905260248101879052604481018690526064016108ce565b9250610695915050565b5f8085158415178015611ceb575f92505f9150611de8565b611cf58487614904565b91505f611d0188613a6a565b90505f611d0d87613a6a565b90505f611d1a8383613ad0565b5090505f6f0785ee10d5da46d900f436a000000000821115611d4f576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a7640000821115611d7057670de0b6b3a7640000820491506012015b633b9aca00821115611d8957633b9aca00820491506009015b612710821115611d9e57612710820491506004015b8115611db257600a82049150600101611d9e565b611dbc8187614904565b9550611dde8b8a611dd88787611dd387600a6148bc565b613b0b565b89613bf0565b9097509550505050505b5094509492505050565b5f80835f03611e37576040517f7a97930f00000000000000000000000000000000000000000000000000000000815260048101879052602481018690526044016108ce565b855f03611e4857505f90508061240d565b5f805f80611e568a8a613cf7565b919b5099509150611e678888613cf7565b919950975090505f611e788b613a6a565b90505f611e848a613a6a565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c818310156122a1578415611ee257507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000009050604b612260565b6f4b3b4ca85a86c47a098a22400000000083101561200e57678ac7230489e80000831015611f72576402540be400831015611f4057620186a0831015611f305750620186a0905060056121e9565b506402540be4009050600a6121e9565b655af3107a4000831015611f5f5750655af3107a40009050600e6121e9565b50678ac7230489e80000905060136121e9565b6b204fce5e3e25026110000000831015611fc45769152d02c7e14af6800000831015611fad575069152d02c7e14af6800000905060176121e9565b506b204fce5e3e250261100000009050601c6121e9565b6d314dc6448d9338c15b0a00000000831015611ff357506d314dc6448d9338c15b0a00000000905060216121e9565b506f4b3b4ca85a86c47a098a224000000000905060266121e9565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156121065773af298d050e4395d69670b12b7f410000000000008310156120a1577172cb5bd86321e38cb6ce6682e8000000000083101561208257507172cb5bd86321e38cb6ce6682e800000000009050602b6121e9565b5073af298d050e4395d69670b12b7f41000000000000905060306121e9565b76010b46c6cdd6e3e0828f4db456ff0c8ea00000000000008310156120e2575076010b46c6cdd6e3e0828f4db456ff0c8ea0000000000000905060356121e9565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a6121e9565b7c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000083101561219c577a026e4d30eccc3215dd8f3157d27e23acbdcfe6800000000000000083101561217457507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f6121e9565b507c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000905060446121e9565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca0000000000000000008310156121e957507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b81831161221d57600a820491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016121e9565b815f03612260576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018d9052602481018c90526044016108ce565b856122a1576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018f9052602481018e90526044016108ce565b807f8000000000000000000000000000000000000000000000000000000000000000018d126122d457808d039c50612347565b7f80000000000000000000000000000000000000000000000000000000000000009c90038c015f81131561234757807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038b1361233457998a0199612347565b5f8099509950505050505050505061240d565b5f808e12801561235657505f8c135b15612393577f80000000000000000000000000000000000000000000000000000000000000008e01808d1361238b575f61238f565b808d035b9150505b8b818f010397506123b08f8e6123aa888789613b0b565b8b613bf0565b90995097505f8113156123fa57604c8113156123da575f809a509a5050505050505050505061240d565b80600a0a89816123ec576123ec614744565b059850885f036123fa575f97505b5096985094965061240d95505050505050565b94509492505050565b5f612423858585856130d6565b1495945050505050565b6060612439838361398d565b90935091505f8061246a7f161bcca7119915b50764b4abe86529797775a5f171951000000000000000000086614976565b1561249a57507f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000009050604c6124c1565b507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000009050604b5b5f6124cc8387614976565b90505f6124d984886149dd565b90505f808312156124f3575060016124f0836149f0565b92505b5f82121561250a57506001612507826149f0565b91505b60408051602081019091525f81528215612613575f8061252b600a89614a20565b90505b6125388186614976565b5f0361255d57612549600a82614a20565b90508161255581614a33565b92505061252e565b60408051602081019091525f8082525b838110156125be57816040516020016125869190614a81565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052915060010161256d565b505b6125cb600a876149dd565b5f036125e3576125dc600a87614976565b95506125c0565b806125ed87613f98565b6040516020016125fe929190614ab9565b60405160208183030381529060405293505050505b5f61261d85613f98565b90505f61262a878b614904565b90505f81156126605761263c82613f98565b60405160200161264c9190614afb565b604051602081830303815290604052612670565b60405180602001604052805f8152505b90505f8561268c5760405180602001604052805f8152506126c3565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b9050808486846040516020016126dc9493929190614b2c565b6040516020818303038152906040529a505050505050505050505092915050565b60606103e882138061271857506127156103e86149f0565b82125b15612752576040517fe44c72b0000000000000000000000000000000000000000000000000000000008152600481018390526024016108ce565b5f80841290811561276d57612766856149f0565b9050612770565b50835b5f61277a82614024565b80519091505f5b81811080156127fd57508281612798600185614b56565b6127a29190614b56565b815181106127b2576127b2614b69565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f3000000000000000000000000000000000000000000000000000000000000000145b15612814578061280c81614a33565b915050612781565b5f61281f8284614b56565b90505f61282c838a614904565b90505f876128485760405180602001604052805f81525061287f565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b90505f82126129f957815f6128948286614b96565b67ffffffffffffffff8111156128ac576128ac614625565b6040519080825280601f01601f1916602001820160405280156128d6576020820181803683370190505b5090505f5b85811015612948578881815181106128f5576128f5614b69565b602001015160f81c60f81b82828151811061291257612912614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053506001016128db565b505f5b828110156129c5577f30000000000000000000000000000000000000000000000000000000000000008261297f8389614b96565b8151811061298f5761298f614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535060010161294b565b5082816040516020016129d9929190614ba9565b6040516020818303038152906040529a5050505050505050505050610684565b5f612a03836149f0565b905080841115612c1a575f612a188286614b56565b90505f612a26866001614b96565b67ffffffffffffffff811115612a3e57612a3e614625565b6040519080825280601f01601f191660200182016040528015612a68576020820181803683370190505b5090505f5b82811015612ada57898181518110612a8757612a87614b69565b602001015160f81c60f81b828281518110612aa457612aa4614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612a6d565b507f2e00000000000000000000000000000000000000000000000000000000000000818381518110612b0e57612b0e614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5b83811015612be55789612b518285614b96565b81518110612b6157612b61614b69565b01602001517fff00000000000000000000000000000000000000000000000000000000000000168282612b95866001614b96565b612b9f9190614b96565b81518110612baf57612baf614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612b3e565b508381604051602001612bf9929190614ba9565b6040516020818303038152906040529b505050505050505050505050610684565b5f612c258583614b56565b90505f85612c34836002614b96565b612c3e9190614b96565b67ffffffffffffffff811115612c5657612c56614625565b6040519080825280601f01601f191660200182016040528015612c80576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f81518110612cb657612cb6614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f2e0000000000000000000000000000000000000000000000000000000000000081600181518110612d1857612d18614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5b82811015612dc3577f300000000000000000000000000000000000000000000000000000000000000082612d7d836002614b96565b81518110612d8d57612d8d614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612d48565b505f5b86811015612be557898181518110612de057612de0614b69565b01602001517fff00000000000000000000000000000000000000000000000000000000000000168282612e14866002614b96565b612e1e9190614b96565b81518110612e2e57612e2e614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612dc6565b5f805f805f612e7387876136ec565b92509250925080612eba576040517fc471796600000000000000000000000000000000000000000000000000000000815260048101849052602481018390526044016108ce565b50909590945092505050565b5f805f612ed38585611459565b9150915080612f18576040517f22c9f7bb00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016108ce565b509392505050565b5f80612f2c84846131aa565b9094509250612f3d86868686612fa6565b9150915094509492505050565b5f805f612f5886868661155f565b9150915080612f9d576040517f05e4767800000000000000000000000000000000000000000000000000000000815260048101879052602481018690526044016108ce565b50949350505050565b5f8085158415178015612fd257865f03612fc6578484925092505061240d565b8686925092505061240d565b612fdc878761398d565b9097509550612feb858561398d565b909550935085841315612fff579395929492935b838603604c81111561301857878793509350505061240d565b80600a0a868161302a5761302a614744565b0595505086850180881860ff90811c151589881890911c151680156130c557877f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff036130ac576040517fd556b111000000000000000000000000000000000000000000000000000000008152600481018a9052602481018990526044016108ce565b600a9687900596909805860197600197909701966130c9565b8198505b5096979596505050505050565b5f80851584151781871282861218178584141780156130fb578685925092505061240d565b505f8584131561310f575092949193919260015b8386035f8112604c8213178015613142578215613134575f899450945050505061240d565b885f9450945050505061240d565b600a82900a8981028a82828161315a5761315a614744565b0514613186578415613176575f8b96509650505050505061240d565b8a5f96509650505050505061240d565b841561319b57889650945061240d9350505050565b955087945061240d9350505050565b5f807f80000000000000000000000000000000000000000000000000000000000000008403613243577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8303613236576040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101859052602481018490526044016108ce565b600a840593508260010192505b50505f9190910391565b5f8281806132628386652000000000006140e0565b9250858314158361327c81886703ff0000000000006140e0565b94508085036132b657507f34bd20690000000000000000000000000000000000000000000000000000000094505f92508291506136e39050565b5f806132c28a88614109565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613300575095505f93508392506136e3915050565b86519095506540000000000060015f9290921a9190911b16151588871016915050801561358f57506001909301925f8461334381896703ff0000000000006140e0565b955080860361337e57507f7bfa48af0000000000000000000000000000000000000000000000000000000095505f93508392506136e3915050565b855b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018051908a1160015f9290921a9190911b6601000000000000161515166001036133ed577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613380565b818114613444575f806134008484614109565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613440575097505f95508594506136e39350505050565b9350505b5f83121561347f57507f7bfa48af0000000000000000000000000000000000000000000000000000000096505f94508493506136e392505050565b831561348b57825f0392505b80820394505f8513156134cb57507f013b2aaa0000000000000000000000000000000000000000000000000000000096505f94508493506136e392505050565b855f036134da5782955061358c565b5f859003604381111561351b57507f32b8b8be0000000000000000000000000000000000000000000000000000000097505f95508594506136e39350505050565b600a0a8681025f8883838161353257613532614744565b0514159050601b82900b82141581806135485750805b1561358457507f32b8b8be000000000000000000000000000000000000000000000000000000009a505f98508897506136e39650505050505050565b505084019650505b50505b84516c2000000020000000000000000060015f9290921a9190911b1615158786101680156136d457600190950194856135cf818a652000000000006140e0565b9650866135e5818b6703ff0000000000006140e0565b975080880361362257507f013b2aaa0000000000000000000000000000000000000000000000000000000097505f95508594506136e39350505050565b505f8061362f838a614109565b90925090507fffffffff0000000000000000000000000000000000000000000000000000000082161561366f575097505f95508594506136e39350505050565b9250508482015f8313801561368357508581125b8061369757505f8312801561369757508581135b156136d057507fd556b1110000000000000000000000000000000000000000000000000000000097505f95508594506136e39350505050565b9450505b845f036136df575f93505b5050505b92959194509250565b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86111561373757600a860460018201600a88065f1493509350935050613741565b8593509150600190505b9250925092565b5f805f837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0361378057508391505f90506001613741565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc84121561380e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb08412156137df57505f9150508215156001613741565b5f846004015f03600a0a90505f8187816137fb576137fb614744565b0594505080840286141592509050613741565b5f841261382357505f91508190506001613741565b50505060048101600a0a82025f6001613741565b5f80806064613849600a612328614a20565b613856600a612328614a20565b6138619060026148c7565b61386c906001614b96565b6138769190614b96565b6138809190614b96565b90506138c4565b5f8052600280600a8504028301601e833c5f80516107d0840193505f80526001600a8606600a6064880402018501601f853c5f5101949350505050565b6138cf858288613887565b92508315611b4b576138e5600186018288613887565b915050935093915050565b5f80888803613903575083905081613981565b5f805f806139138c8b8f8d612f20565b915091505f806139258a8a8d8c612f20565b9150915061393584848484611cd3565b8096508197505050505050505f8061394f8b8b8f8d612f20565b915091505f8061396186868686611df2565b915091505f8061397384848f8e612fa6565b909a50985050505050505050505b97509795505050505050565b5f805f805f61399c8787613cf7565b92509250925080612eba576040517f05e51ecb00000000000000000000000000000000000000000000000000000000815260048101889052602481018790526044016108ce565b5f806139f2600a612328614a20565b6139fd9060026148c7565b613a08906001614b96565b90505f613a18600a612328614a20565b90506002600a8504026001015f8052600281601e883c505f51617fff81169350618000811615613a4757918101915b505f80526001600a8506600a6064870402018301601f873c50505f510192915050565b5f80821215613ac7577f80000000000000000000000000000000000000000000000000000000000000008203613ac157507f8000000000000000000000000000000000000000000000000000000000000000919050565b505f0390565b5090565b919050565b5f807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83850993909202808410938190039390930393915050565b5f805f613b188686613ad0565b91509150815f03613b3c57838181613b3257613b32614744565b0492505050610695565b838210613b86576040517f6c59da120000000000000000000000000000000000000000000000000000000081526004810187905260248101869052604481018590526064016108ce565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f8587181215613cba577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115613ca757613c4f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001614b96565b8403613c7f57507f800000000000000000000000000000000000000000000000000000000000000090508161240d565b613c8a600a85614a20565b613c93906149f0565b613c9e846001614904565b9150915061240d565b613cb0846149f0565b839150915061240d565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115613ced57613c93600a85614a20565b508290508161240d565b5f805f845f03613d0f57505f91508190506001613741565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee800000000000000000085055f03613f23576f4b3b4ca85a86c47a098a2240000000008505158015613d7857507f80000000000000000000000000000000000000000000000000000000000000268412155b15613d99576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a000000000000008505158015613de157507f80000000000000000000000000000000000000000000000000000000000000138412155b15613dfa57678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c6400000000000000008505158015613e4657507f800000000000000000000000000000000000000000000000000000000000000a8412155b15613e5c576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e40000000000000000008505158015613eab57507f80000000000000000000000000000000000000000000000000000000000000028412155b15613ec157606485029450600284039350613e5c565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000008505158015613f1157507f80000000000000000000000000000000000000000000000000000000000000018412155b15613f2357600a850294506001840393505b600a80860290810586148015613f5957507f80000000000000000000000000000000000000000000000000000000000000018512155b15613f68578095506001850394505b50939492935050507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000008305151590565b60605f8212613fb55760405180602001604052805f815250613fec565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b613ffd60ff84901d80850118614024565b60405160200161400e929190614ba9565b6040516020818303038152906040529050919050565b60605f61403083614233565b60010190505f8167ffffffffffffffff81111561404f5761404f614625565b6040519080825280601f01601f191660200182016040528015614079576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461408357509392505050565b5f5b5f82600186515f1a1b16118385101615614101576001840193506140e2565b509192915050565b81515f90819065200000000000600191831a9190911b161515838510168085019082806141368488614314565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615614171575093505f92506106ad915050565b825f036141d4577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116141a5575f6141c7565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b955093506106ad92505050565b7f80000000000000000000000000000000000000000000000000000000000000008111614201575f614223565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95505f0393505050509250929050565b5f807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061427b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106142a7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106142c557662386f26fc10000830492506010015b6305f5e10083106142dd576305f5e100830492506008015b61271083106142f157612710830492506004015b60648310614303576064830492506002015b600a83106106845760010192915050565b5f8082841061434757507f34bd20690000000000000000000000000000000000000000000000000000000090505f6106ad565b835f03614380576040517fda6966d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60305f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501815b8782101580156143b85750604d83105b156143fb57815160018401937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90930192600a0a5f9190911a85900302016143a8565b8782106145215781515f1a849003600181111561444357507f0fdc26350000000000000000000000000000000000000000000000000000000095505f94506106ad9350505050565b600a84900a810282810183111561448657507f0fdc26350000000000000000000000000000000000000000000000000000000096505f95506106ad945050505050565b9190910190507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101905b8782106145215781515f1a603081146144f657507f0fdc26350000000000000000000000000000000000000000000000000000000095505f94506106ad9350505050565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101906144b2565b5f9890975095505050505050565b5f6020828403121561453f575f80fd5b5035919050565b5f8060408385031215614557575f80fd5b50508035926020909101359150565b803560ff81168114613acb575f80fd5b5f8060408385031215614587575f80fd5b8235915061459760208401614566565b90509250929050565b5f80604083850312156145b1575f80fd5b82359150602083013580151581146145c7575f80fd5b809150509250929050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60208284031215614662575f80fd5b813567ffffffffffffffff80821115614679575f80fd5b818401915084601f83011261468c575f80fd5b81358181111561469e5761469e614625565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156146e4576146e4614625565b816040528281528760208487010111156146fc575f80fd5b826020860160208301375f928101602001929092525095945050505050565b5f805f6060848603121561472d575f80fd5b505081359360208301359350604090920135919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b600181815b808511156147f757817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156147dd576147dd614771565b808516156147ea57918102915b93841c93908002906147a3565b509250929050565b5f8261480d57506001610684565b8161481957505f610684565b816001811461482f576002811461483957614855565b6001915050610684565b60ff84111561484a5761484a614771565b50506001821b610684565b5060208310610133831016604e8410600b8410161715614878575081810a610684565b614882838361479e565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156148b4576148b4614771565b029392505050565b5f61069583836147ff565b808202811582820484141761068457610684614771565b8181035f8312801583831316838312821617156148fd576148fd614771565b5092915050565b8082018281125f83128015821682158216171561492357614923614771565b505092915050565b8082025f82127f80000000000000000000000000000000000000000000000000000000000000008414161561496257614962614771565b818105831482151761068457610684614771565b5f8261498457614984614744565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f8000000000000000000000000000000000000000000000000000000000000000831416156149d8576149d8614771565b500590565b5f826149eb576149eb614744565b500790565b5f7f80000000000000000000000000000000000000000000000000000000000000008203613ac157613ac1614771565b5f82614a2e57614a2e614744565b500490565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a6357614a63614771565b5060010190565b5f81518060208401855e5f93019283525090919050565b5f614a8c8284614a6a565b7f300000000000000000000000000000000000000000000000000000000000000081526001019392505050565b7f2e0000000000000000000000000000000000000000000000000000000000000081525f614af3614aed6001840186614a6a565b84614a6a565b949350505050565b7f650000000000000000000000000000000000000000000000000000000000000081525f6106956001830184614a6a565b5f614b4c614aed614b46614b40858a614a6a565b88614a6a565b86614a6a565b9695505050505050565b8181038181111561068457610684614771565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b8082018082111561068457610684614771565b5f614af3614aed8386614a6a56", + "sourceMap": "525:13549:37:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6819:83;;;;;;:::i;:::-;;:::i;:::-;;;399:25:134;;;387:2;372:18;6819:83:37;;;;;;;;11299:93;;;;;;:::i;:::-;;:::i;13850:222::-;;;;;;:::i;:::-;;:::i;:::-;;;;1353:25:134;;;1421:14;;1414:22;1409:2;1394:18;;1387:50;1326:18;13850:222:37;1185:258:134;10667:140:37;;;;;;:::i;:::-;;:::i;9694:142::-;;;;;;:::i;:::-;;:::i;9997:::-;;;;;;:::i;:::-;;:::i;8997:85::-;;;;;;:::i;:::-;;:::i;10353:150::-;;;;;;:::i;:::-;;:::i;6590:93::-;;;;;;:::i;:::-;;:::i;7121:90::-;;;;;;:::i;:::-;;:::i;:::-;;;1613:14:134;;1606:22;1588:41;;1576:2;1561:18;7121:90:37;1448:187:134;4526:156:37;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;12040:182::-;;;;;;:::i;:::-;;:::i;5530:93::-;;;;;;:::i;:::-;;:::i;12556:172::-;;;;;;:::i;:::-;;:::i;9229:87::-;;;;;;:::i;:::-;;:::i;1849:122::-;4788:66:42;1849:122:37;;9463:85;;;;;;:::i;:::-;;:::i;8475:92::-;;;;;;:::i;:::-;;:::i;6015:83::-;;;;;;:::i;:::-;;:::i;8125:92::-;;;;;;:::i;:::-;;:::i;7780:90::-;;;;;;:::i;:::-;;:::i;6300:93::-;;;;;;:::i;:::-;;:::i;967:140::-;;1040:66;967:140;;4894:158;;;;;;:::i;:::-;;:::i;1589:122::-;4499:66:42;1589:122:37;;11007:93;;;;;;:::i;:::-;;:::i;2375:96::-;2414:5;2375:96;;3040:211;;;;;;:::i;:::-;;:::i;:::-;;;;4336:66:134;4324:79;;;4306:98;;4435:2;4420:18;;4413:34;;;;4279:18;3040:211:37;4107:346:134;1329:122:37;4228:66:42;1329:122:37;;2109;5091:66:42;2109:122:37;;7445:90;;;;;;:::i;:::-;;:::i;5240:93::-;;;;;;:::i;:::-;;:::i;706:140::-;;779:66;706:140;;5760:87;;;;;;:::i;:::-;;:::i;11554:88::-;;;;;;:::i;:::-;;:::i;8735:91::-;;;;;;:::i;:::-;;:::i;3821:383::-;;;;;;:::i;:::-;;:::i;13202:232::-;;;;;;:::i;:::-;;:::i;2602:90::-;5335:66:42;2602:90:37;;6819:83;6864:5;6888:7;:1;:5;:7::i;:::-;6881:14;6819:83;-1:-1:-1;;6819:83:37:o;11299:93::-;11353:5;11377:8;:1;11383;11377:5;:8::i;:::-;11370:15;11299:93;-1:-1:-1;;;11299:93:37:o;13850:222::-;13931:7;13940:4;14013:52;14049:5;14056:8;14013:35;:52::i;:::-;14006:59;;;;13850:222;;;;;;:::o;10667:140::-;10713:5;10737:63;:1;721:42:43;10737:6:37;:63::i;9694:142::-;9741:5;9765:64;:1;721:42:43;9765:7:37;:64::i;9997:142::-;10044:5;10068:64;:1;721:42:43;10068:7:37;:64::i;8997:85::-;9043:5;9067:8;:1;:6;:8::i;10353:150::-;10407:5;10431:65;:1;10437;721:42:43;10431:5:37;:65::i;6590:93::-;6644:5;6668:8;:1;6674;6668:5;:8::i;7121:90::-;7174:4;7197:7;:1;7202;7197:4;:7::i;4526:156::-;4591:13;4623:52;4661:1;4664:10;4623:37;:52::i;12040:182::-;12128:5;12152:63;12199:5;12206:8;12152:46;:63::i;5530:93::-;5584:5;5608:8;:1;5614;5608:5;:8::i;12556:172::-;12640:7;12666:55;12705:5;12712:8;12666:38;:55::i;9229:87::-;9276:5;9300:9;:1;:7;:9::i;9463:85::-;9509:5;9533:8;:1;:6;:8::i;8475:92::-;8529:4;8552:8;:1;8558;8552:5;:8::i;6015:83::-;6060:5;6084:7;:1;:5;:7::i;8125:92::-;8179:4;8202:8;:1;8208;8202:5;:8::i;7780:90::-;7833:4;7856:7;:1;7861;7856:4;:7::i;6300:93::-;6354:5;6378:8;:1;6384;6378:5;:8::i;4894:158::-;4942:13;4974:71;4981:1;779:66;1040;4974:6;:71::i;11007:93::-;11061:5;11085:8;:1;11091;11085:5;:8::i;3040:211::-;3097:6;3105:5;3123:20;3145:12;3161:43;3200:3;3161:38;:43::i;:::-;3122:82;;;;-1:-1:-1;3040:211:37;-1:-1:-1;;;;3040:211:37:o;7445:90::-;7498:4;7521:7;:1;7526;7521:4;:7::i;5240:93::-;5294:5;5318:8;:1;5324;5318:5;:8::i;5760:87::-;5807:5;5831:9;:1;:7;:9::i;11554:88::-;11602:4;40930:17:42;41123:12;;41116:20;11625:10:37;40844:308:42;8735:91:37;8784:5;8808:11;:1;:9;:11::i;3821:383::-;3909:13;3939:31;:13;3956;3939:16;:31::i;:::-;3934:127;;3993:57;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;3993:57:37;;;;;;;;3934:127;4070:10;4083:7;:1;:5;:7::i;:::-;4070:20;-1:-1:-1;4107:90:37;4145:1;4148:22;4070:20;4156:13;4148:7;:22::i;:::-;:48;;;-1:-1:-1;4174:22:37;:4;4182:13;4174:7;:22::i;:::-;4107:37;:90::i;:::-;4100:97;3821:383;-1:-1:-1;;;;;3821:383:37:o;13202:232::-;13287:5;13294:4;13367:60;13411:5;13418:8;13367:43;:60::i;26308:326:42:-;26357:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;26476:62;19348:32;19405:16;26476:33;:62::i;:::-;26444:94;;-1:-1:-1;26444:94:42;-1:-1:-1;26549:12:42;26566:38;26444:94;;26566:9;:38::i;:::-;-1:-1:-1;26548:56:42;26308:326;-1:-1:-1;;;;;26308:326:42:o;40507:101::-;40561:5;40585:8;40588:1;40591;40585:2;:8::i;:::-;:16;;40600:1;40585:16;;;-1:-1:-1;40596:1:42;;40507:101;-1:-1:-1;40507:101:42:o;13558:248::-;13639:7;;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;13741:58;19348:32;19405:16;13790:8;13741:19;:58::i;:::-;13734:65;;;;;;13558:248;;;;;:::o;39808:143::-;39882:5;39906:38;39910:1;3896:66;39925:18;39906:3;:38::i;34200:484::-;34279:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;34410:84;34446:18;19348:32;19405:16;34410:35;:84::i;:::-;34366:128;;-1:-1:-1;34366:128:42;-1:-1:-1;34599:12:42;34616:38;34366:128;;34616:9;:38::i;:::-;-1:-1:-1;34598:56:42;34200:484;-1:-1:-1;;;;;;34200:484:42:o;35060:463::-;35135:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;35262:84;35298:18;19348:32;19405:16;35262:35;:84::i;31289:362::-;31339:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;31339:5;31498:66;19348:32;19405:16;31498:37;:66::i;:::-;31476:88;;;31575:12;31592:29;31602:8;31612;31592:9;:29::i;36145:3071::-;36227:5;19261:17;19363:16;;;19359:2;19348:32;;19409:4;19405:16;;;;41123:12;;36313:869;;-1:-1:-1;3744:1:42;;-1:-1:-1;36343:16:42;;-1:-1:-1;36343:16:42;36313:869;36402:1;36380:18;:23;36376:806;;36423:18;36445:1;36423:23;36419:494;;36470:16;:1;3653;36470:4;:16::i;:::-;36466:157;;;36584:20;;;;;;;;399:25:134;;;372:18;;36584:20:42;226:204:134;36466:157:42;-1:-1:-1;3653:1:42;;-1:-1:-1;36789:17:42;;-1:-1:-1;36789:17:42;36419:494;36852:46;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;36852:46:42;5150:302:134;36376:806:42;37009:15;:1;3744;37009:4;:15::i;:::-;:35;;;;-1:-1:-1;37028:16:42;:1;3653;37028:4;:16::i;:::-;37005:177;;;37067:1;37060:8;;;;;;37005:177;37089:16;:1;3653;37089:4;:16::i;:::-;37085:97;;;37128:43;37132:7;:1;:5;:7::i;:::-;37141:9;:1;:7;:9::i;:::-;37152:18;37128:3;:43::i;:::-;37121:50;;;;;;37085:97;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;37409:25;;37514:68;19348:32;19405:16;37514:37;:68::i;:::-;37476:106;;;;37593:24;37628:72;37677:8;37687:9;37698:1;37628:48;:72::i;:::-;37593:108;-1:-1:-1;37810:1:42;37752:30;;;37879:10;:1;19261:17;19363:16;;19359:2;19348:32;;19409:4;19405:16;;;;;19141:296;37879:10;37825:64;;;;37899:544;37926:1;37906:16;:21;37899:544;;37947:16;37966:4;37947:23;37974:4;37947:31;37943:263;;38042:149;38097:23;38122:14;38138:21;38161:12;38042:33;:149::i;:::-;37998:193;;-1:-1:-1;37998:193:42;-1:-1:-1;37943:263:42;38240:1;38219:22;;;;;38295:137;38346:21;38369:12;38383:21;38406:12;38295:33;:137::i;:::-;38255:177;;-1:-1:-1;38255:177:42;-1:-1:-1;37899:544:42;;;38454:25;38481:16;38513:86;38549:18;38569;38589:9;38513:35;:86::i;:::-;38453:146;;;;38656:86;38690:18;38710:9;38721;38732;38656:33;:86::i;:::-;38610:132;;-1:-1:-1;38610:132:42;-1:-1:-1;38799:86:42;38835:18;38610:132;;38799:35;:86::i;:::-;38753:132;;-1:-1:-1;38753:132:42;-1:-1:-1;38942:105:42;38753:132;;39007:23;39032:14;38942:33;:105::i;:::-;38896:151;;-1:-1:-1;38896:151:42;-1:-1:-1;39139:7:42;39151:40;38896:151;;39151:9;:40::i;:::-;-1:-1:-1;39138:53:42;-1:-1:-1;;;;;;;;;;;;;;;36145:3071:42;;;;;:::o;25374:565::-;25428:5;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;25428:5;;25639:95;19348:32;19405:16;19348:32;19405:16;25639:33;:95::i;:::-;25581:153;;;;25864:7;25876:38;25886:17;25905:8;25876:9;:38::i;:::-;-1:-1:-1;25863:51:42;25374:565;-1:-1:-1;;;;;;;;;;25374:565:42:o;26976:313::-;27029:4;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;27188:94;19348:32;19405:16;19348:32;19405:16;27188:32;:94::i;:::-;27181:101;26976:313;-1:-1:-1;;;;;;;26976:313:42:o;1412:418:44:-;1490:13;19261:17:42;19363:16;;19359:2;19348:32;19409:4;19405:16;;;1516:24:44;1604:22;;;1600:63;;1642:10;;;;;;;;;;;;;;;;;;;;;;;1600:63;1676:10;1672:90;;;1709:42;1723:17;1742:8;1709:13;:42::i;:::-;1702:49;;;;;;1672:90;1778:45;1795:17;1814:8;1778:16;:45::i;8838:263:42:-;8932:5;8950:24;8976:15;8995:41;9020:5;9027:8;8995:24;:41::i;:::-;8949:87;;;;9053:41;9066:17;9085:8;9053:12;:41::i;20749:488::-;20803:5;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;20803:5;;21016:95;19348:32;19405:16;19348:32;19405:16;21016:33;:95::i;15036:248::-;15120:7;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;15216:61;19348:32;19405:16;15268:8;15216:22;:61::i;31797:752::-;31848:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;32020:13;;;32016:56;;-1:-1:-1;32056:5:42;;31797:752;-1:-1:-1;;31797:752:42:o;32016:56::-;32082:8;32092:15;32111:66;32149:17;32168:8;32111:37;:66::i;:::-;32081:96;;;;32211:1;32191:17;:21;:38;;;;-1:-1:-1;32216:13:42;;;32191:38;32187:283;;;32402:57;32436:1;32439:8;32449:4;32455:3;32402:33;:57::i;:::-;32386:73;-1:-1:-1;32386:73:42;-1:-1:-1;32187:283:42;32480:12;32497:22;32507:1;32510:8;32497:9;:22::i;:::-;-1:-1:-1;32479:40:42;31797:752;-1:-1:-1;;;;;;;31797:752:42:o;32696:1044::-;32746:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;32918:13;;;32914:56;;-1:-1:-1;32954:5:42;;32696:1044;-1:-1:-1;;32696:1044:42:o;32914:56::-;32980:8;32990:15;33009:66;33047:17;33066:8;33009:37;:66::i;:::-;32979:96;;;;33161:8;33173:1;33161:13;33157:503;;-1:-1:-1;33197:5:42;;32696:1044;-1:-1:-1;;;;32696:1044:42:o;33157:503::-;33559:1;33548:8;:12;33544:116;;;33592:57;33626:1;33629:8;33639:4;33645:3;33592:33;:57::i;30085:431::-;30139:4;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;30346:106;19348:32;19405:16;19348:32;19405:16;30346:44;:106::i;:::-;-1:-1:-1;30469:40:42;;30085:431;-1:-1:-1;;;;;;;30085:431:42:o;22642:494::-;22691:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;22783:21;;;22779:148;;;22852:64;22888:17;22907:8;22852:35;:64::i;22779:148::-;23051:12;23068:38;23078:17;23097:8;23068:9;:38::i;29229:431::-;29283:4;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;29490:106;19348:32;19405:16;19348:32;19405:16;29490:44;:106::i;:::-;-1:-1:-1;29613:40:42;;29229:431;-1:-1:-1;;;;;;;29229:431:42:o;28393:429::-;28446:4;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;28653:106;19348:32;19405:16;19348:32;19405:16;28653:44;:106::i;:::-;-1:-1:-1;;28393:429:42;-1:-1:-1;;;;;;;28393:429:42:o;24348:527::-;24402:5;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;24402:5;;24613:95;19348:32;19405:16;19348:32;19405:16;24613:33;:95::i;40179:101::-;40233:5;40257:8;40260:1;40263;40257:2;:8::i;8905:1711:46:-;9120:10;;8974:6;;;;9084:4;9075:14;;;;9109:22;;;8974:6;;;;9246:35;9075:14;9109:22;9246:23;:35::i;:::-;9150:131;;-1:-1:-1;9150:131:46;;-1:-1:-1;9150:131:46;-1:-1:-1;9150:131:46;-1:-1:-1;9295:18:46;;;9312:1;9295:18;9291:1319;;9343:3;9333:6;:13;9329:1098;;9951:12;9965:13;9982:54;10008:17;10027:8;9982:25;:54::i;:::-;9950:86;;;;10059:8;10054:179;;-1:-1:-1;10099:34:46;;10146:1;;-1:-1:-1;8905:1711:46;-1:-1:-1;;;;;;;;;8905:1711:46:o;10054:179::-;-1:-1:-1;10204:1:46;;10207:6;;-1:-1:-1;8905:1711:46;-1:-1:-1;;;;;;;;8905:1711:46:o;9329:1098::-;-1:-1:-1;10354:42:46;;10409:1;;-1:-1:-1;8905:1711:46;-1:-1:-1;;;;;;;8905:1711:46:o;9291:1319::-;-1:-1:-1;10570:13:46;;10596:1;;-1:-1:-1;8905:1711:46;-1:-1:-1;;;;;;8905:1711:46:o;27617:430:42:-;27670:4;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;27877:106;19348:32;19405:16;19348:32;19405:16;27877:44;:106::i;:::-;-1:-1:-1;;27617:430:42;-1:-1:-1;;;;;;;27617:430:42:o;19921:481::-;19975:5;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;19975:5;;20186:95;19348:32;19405:16;19348:32;19405:16;20186:33;:95::i;21587:410::-;21638:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;21757:64;19348:32;19405:16;21757:35;:64::i;30772:350::-;30825:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;30825:5;30976:66;19348:32;19405:16;30976:37;:66::i;:::-;30962:80;;;31053:12;31070:22;31080:1;31083:8;31070:9;:22::i;7434:353::-;7525:5;7532:4;7549:24;7575:15;7592:13;7609:38;7631:5;7638:8;7609:21;:38::i;:::-;7548:99;;;;;;7658:11;7671:17;7692:38;7702:17;7721:8;7692:9;:38::i;:::-;7657:73;;;;7748:5;7755:8;:24;;;;;7767:12;7755:24;7740:40;;;;;;;;;7434:353;;;;;:::o;35535:162:45:-;35614:6;35622;35647:43;35651:4;35657:3;35662:17;35681:8;35647:3;:43::i;15810:2402:42:-;15895:11;16327:46;;;;;;15991:17;16047:8;16327:46;16651:668;;16708:4;16688:17;:24;:29;16684:135;;16762:3;16741:24;;;;16799:1;16787:13;;;;16684:135;17058:17;17036;17029:46;;;17022:151;;17120:2;17099:23;;;;17144:10;;;;;17022:151;;;16651:668;;;17215:17;17236:1;17215:22;17211:94;;-1:-1:-1;3653:1:42;;-1:-1:-1;17281:4:42;;-1:-1:-1;17261:25:42;;-1:-1:-1;17261:25:42;17211:94;17529:8;17516;17510:27;;;17506:393;;17731:1;17720:8;:12;17716:85;;;-1:-1:-1;3653:1:42;;-1:-1:-1;3653:1:42;;-1:-1:-1;17756:26:42;;-1:-1:-1;17756:26:42;17716:85;17825:59;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;17825:59:42;5150:302:134;17506:393:42;-1:-1:-1;;18046:17:42;18132:28;;18166:4;18162:19;;;18129:53;;-1:-1:-1;15810:2402:42;;;;;:::o;9946:3045::-;10081:7;10090:4;10213:1;10193:17;:21;10189:2796;;;10237:59;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;10237:59:42;5150:302:134;10189:2796:42;10395:17;10416:1;10395:22;10391:2594;;-1:-1:-1;10441:1:42;;-1:-1:-1;10444:4:42;10433:16;;10391:2594;10659:17;10940;;;10922:36;;10980:24;;;10976:123;;;11035:45;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;11035:45:42;5150:302:134;10976:123:42;11127:13;11154:20;11208:1;11192:13;:17;11188:1787;;;11486:3;11470:13;:19;11466:91;;;11525:1;11528:5;11517:17;;;;;;;;;;11466:91;11917:13;11916:14;;11902:2;:29;11894:37;;11990:5;11968:19;:27;;;;;:::i;:::-;;;-1:-1:-1;;12253:20:42;;:43;;;;-1:-1:-1;12231:66:42;;-1:-1:-1;12231:66:42;11188:1787;12356:1;12340:13;:17;12336:639;;;12502:28;12516:13;12502:2;:28;:::i;:::-;12494:36;-1:-1:-1;12563:27:42;12494:36;12563:19;:27;:::i;:::-;12548:42;-1:-1:-1;12864:4:42;;-1:-1:-1;12842:27:42;;-1:-1:-1;;;;12842:27:42;12336:639;-1:-1:-1;12934:19:42;;-1:-1:-1;12955:4:42;;-1:-1:-1;;;10391:2594:42;9946:3045;;;;;;:::o;43384:1993:45:-;43517:6;43525;43571:1;43551:17;:21;43547:271;;;43620:34;43626:17;43645:8;43620:5;:34::i;:::-;43588:66;;-1:-1:-1;43588:66:45;-1:-1:-1;43700:54:45;43706:18;43588:66;;43700:5;:54::i;:::-;43668:86;;-1:-1:-1;43668:86:45;-1:-1:-1;43775:32:45;43668:86;;43775:3;:32::i;:::-;43768:39;;;;;;43547:271;43854:21;43877:22;43903:36;43911:17;43930:8;43903:7;:36::i;:::-;43853:86;;-1:-1:-1;43853:86:45;-1:-1:-1;43981:8:45;43949:29;;;44060:36;43853:86;43981:8;44060:9;:36::i;:::-;44013:83;;-1:-1:-1;44013:83:45;-1:-1:-1;44013:83:45;-1:-1:-1;44257:4:45;44298:5;782:27:47;808:1;44298:5:45;782:27:47;:::i;:::-;44321:3:45;:29;44317:252;;44485:69;44508:18;44536:3;44542:11;44485:22;:69::i;:::-;44370:184;;-1:-1:-1;44370:184:45;-1:-1:-1;44317:252:45;44586:11;44582:664;;;44676:15;44695:7;:3;44701:1;44695:7;:::i;:::-;44676:27;;44753:154;44790:8;44781:5;44772;44761:8;:16;44760:26;;;;;:::i;:::-;;:38;44753:154;;44835:2;44826:11;;;-1:-1:-1;44882:2:45;44863:21;;;;44753:154;;;44975:153;45020:11;45026:5;45020:3;:11;:::i;:::-;45033:15;45050:16;45061:5;45050:8;:16;:::i;:::-;45068:8;45078:13;45093;45108:2;44975:23;:153::i;:::-;44943:185;;-1:-1:-1;44943:185:45;-1:-1:-1;44582:664:45;;-1:-1:-1;44582:664:45;;45187:13;45167:33;;45229:2;45218:13;;44582:664;43999:1257;;;;;45274:17;45308:61;45327:14;45343:22;45367:1;45308:18;:61::i;:::-;45293:12;45297:8;45293:1;:12;:::i;:::-;:76;;;;:::i;:::-;45266:104;;;;;;;43384:1993;;;;;;:::o;37791:5059::-;37924:6;;38000:17;38060:8;38114:41;38000:17;38060:8;38114:12;:41::i;:::-;38082:73;;-1:-1:-1;38082:73:45;-1:-1:-1;38195:1:45;38174:22;;38170:259;;38220:17;38241:1;38220:22;38216:199;;38273:11;;;;;;;;;;;;;;38216:199;38338:58;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;38338:58:45;5150:302:134;38216:199:45;37954:485;;38519:17;38540:4;38519:25;38515:81;;38568:13;:8;38579:2;38568:13;:::i;:::-;38583:1;38560:25;;;;;;38515:81;38646:4;38625:25;;;;38739:24;;38760:3;38739:24;;;38754:3;38739:24;38726:38;;:8;:38;38722:4122;;38780:20;38814;38848;38882;39533:17;39571:12;:38;;39606:2;39571:38;;;39593:2;39571:38;39553:57;;:8;:57;:::i;:::-;39533:77;;39672:11;39763:13;39779:12;:26;;39801:4;39779:26;;;39794:4;39779:26;39763:42;;;;40381:5;40354:17;:33;;;;;:::i;:::-;;40941:29;;;;-1:-1:-1;41478:29:45;;;;-1:-1:-1;40685:20:45;;;-1:-1:-1;41582:42:45;41600:18;40685:20;41582:17;:42::i;:::-;41575:4;:49;41552:73;;41663:13;41647:29;;41830:17;41813:13;:34;41809:270;;513:32:47;41891:30:45;;:165;;42009:46;42027:18;42047:3;42053:1;42047:7;42009:17;:46::i;:::-;42002:4;:53;41891:165;;;41959:4;41891:165;41875:181;;41809:270;39654:2457;42157:256;42198:13;42229:17;42264:13;42295:8;42321:13;42352;1640:3;42157:23;:256::i;:::-;42125:288;;-1:-1:-1;42125:288:45;-1:-1:-1;42434:47:45;42125:288;;42467:10;42479:1;42434:3;:47::i;:::-;42427:54;;;;;;;;;;;;38722:4122;42646:32;42650:17;42669:8;42646:3;:32::i;:::-;42614:64;;-1:-1:-1;42614:64:45;-1:-1:-1;42724:54:45;42730:18;42614:64;;42724:5;:54::i;:::-;42692:86;;-1:-1:-1;42692:86:45;-1:-1:-1;42799:34:45;42692:86;;42799:5;:34::i;:::-;42792:41;;;;;;;38722:4122;37944:4906;37791:5059;;;;;;:::o;55832:852::-;55915:14;55931:11;56120:1;56108:8;:13;56104:81;;-1:-1:-1;56149:17:45;;-1:-1:-1;56168:1:45;56141:29;;56104:81;56351:3;56340:8;:14;56336:82;;;-1:-1:-1;56382:1:45;;-1:-1:-1;56385:17:45;56374:29;;56336:82;56528:11;56563:9;;;56549:2;:24;;56595:17;56549:24;56595;;;;:::i;:::-;;56643;;;;;55832:852;-1:-1:-1;;;;55832:852:45:o;53784:1452::-;53925:6;53987:14;53975:8;:26;53971:1249;;-1:-1:-1;54028:17:45;54021:24;;53971:1249;54087:8;54070:14;:25;54066:1154;;;54137:25;;;54199:2;54184:17;;;:38;;;54221:1;54205:12;:17;;54184:38;54180:127;;;1408:1;54246:42;;;;;54180:127;54478:12;54464:2;:27;54437:17;:55;;;;;:::i;:::-;;54430:62;;;;;54066:1154;54553:25;;;54615:2;54600:17;;;:38;;;54637:1;54621:12;:17;;54600:38;54596:163;;;54669:71;;;;;;;;8664:25:134;;;8705:18;;;8698:34;;;8748:18;;;8741:34;;;8637:18;;54669:71:45;8468:313:134;54596:163:45;54904:2;:27;;;54968:25;;;:17;54904:27;54968:25;54904:27;55015:16;;;;:::i;:::-;;:37;55011:162;;55083:71;;;;;;;;8664:25:134;;;8705:18;;;8698:34;;;8748:18;;;8741:34;;;8637:18;;55083:71:45;8468:313:134;55011:162:45;55197:8;-1:-1:-1;55190:15:45;;-1:-1:-1;;55190:15:45;7193:2230;7343:24;;7473:26;;7501;;7470:58;7547:1870;;;;1408:1;7690:53;;1495:1;7757:34;;7547:1870;;;7833:21;7845:9;7833;:21;:::i;:::-;7822:32;;7989:29;8021:48;8050:18;8021:28;:48::i;:::-;7989:80;;8083:29;8115:48;8144:18;8115:28;:48::i;:::-;8083:80;;8179:13;8197:52;8204:21;8227;8197:6;:52::i;:::-;8178:71;;;8264:22;8344:4;8336:5;:12;8332:114;;;8381:4;8372:13;;;-1:-1:-1;8425:2:45;8407:20;8332:114;8475:4;8467:5;:12;8463:114;;;8512:4;8503:13;;;-1:-1:-1;8556:2:45;8538:20;8463:114;8606:3;8598:5;:11;8594:111;;;8642:3;8633:12;;;-1:-1:-1;8685:1:45;8667:19;8594:111;8734:3;8726:5;:11;8722:111;;;8770:3;8761:12;;;-1:-1:-1;8813:1:45;8795:19;8722:111;8857:9;;8850:108;;8899:2;8890:11;;;-1:-1:-1;8923:16:45;;8850:108;;;9086:34;9105:14;9086:34;;:::i;:::-;;-1:-1:-1;9167:239:45;9211:18;9247;9283:83;9290:21;9313;9336:29;9351:14;9344:2;9336:29;:::i;:::-;9283:6;:83::i;:::-;9384:8;9167:26;:239::i;:::-;9135:271;;-1:-1:-1;9135:271:45;-1:-1:-1;;;;;7547:1870:45;7390:2033;7193:2230;;;;;;;:::o;12966:8769::-;13116:6;13124;13150:18;13172:1;13150:23;13146:8583;;13196:45;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;13196:45:45;5150:302:134;13146:8583:45;13262:18;13284:1;13262:23;13258:8471;;-1:-1:-1;1408:1:45;;-1:-1:-1;1408:1:45;13301:67;;13258:8471;13399:24;13437:15;13466:10;13490;13697:39;13706:18;13726:9;13697:8;:39::i;:::-;13656:80;;-1:-1:-1;13656:80:45;-1:-1:-1;13656:80:45;-1:-1:-1;13791:39:45;13800:18;13820:9;13791:8;:39::i;:::-;13750:80;;-1:-1:-1;13750:80:45;-1:-1:-1;13750:80:45;-1:-1:-1;13965:29:45;13997:48;14026:18;13997:28;:48::i;:::-;13965:80;;14059:29;14091:48;14120:18;14091:28;:48::i;:::-;14059:80;-1:-1:-1;14170:4:45;14212:2;14663:29;;;14659:4460;;;14716:5;14712:4269;;;-1:-1:-1;14753:4:45;;-1:-1:-1;14796:2:45;14712:4269;;;14873:4;14849:21;:28;14845:3675;;;14933:4;14909:21;:28;14905:1781;;;14997:4;14973:21;:28;14969:813;;;15065:3;15041:21;:27;15037:321;;;-1:-1:-1;15116:3:45;;-1:-1:-1;15174:1:45;14845:3675;;15037:321;-1:-1:-1;15262:4:45;;-1:-1:-1;15321:2:45;14845:3675;;14969:813;15456:4;15432:21;:28;15428:324;;;-1:-1:-1;15508:4:45;;-1:-1:-1;15567:2:45;14845:3675;;15428:324;-1:-1:-1;15656:4:45;;-1:-1:-1;15715:2:45;14845:3675;;14905:1781;15872:4;15848:21;:28;15844:816;;;15940:4;15916:21;:28;15912:324;;;-1:-1:-1;15992:4:45;;-1:-1:-1;16051:2:45;14845:3675;;15912:324;-1:-1:-1;16140:4:45;;-1:-1:-1;16199:2:45;14845:3675;;15844:816;16334:4;16310:21;:28;16306:324;;;-1:-1:-1;16386:4:45;;-1:-1:-1;16445:2:45;14845:3675;;16306:324;-1:-1:-1;16534:4:45;;-1:-1:-1;16593:2:45;14845:3675;;;16768:4;16744:21;:28;16740:1758;;;16832:4;16808:21;:28;16804:816;;;16900:4;16876:21;:28;16872:324;;;-1:-1:-1;16952:4:45;;-1:-1:-1;17011:2:45;14845:3675;;16872:324;-1:-1:-1;17100:4:45;;-1:-1:-1;17159:2:45;16740:1758;;16804:816;17294:4;17270:21;:28;17266:324;;;-1:-1:-1;17346:4:45;;-1:-1:-1;17405:2:45;14845:3675;;17266:324;-1:-1:-1;17494:4:45;;-1:-1:-1;17553:2:45;16740:1758;;;17710:4;17686:21;:28;17682:790;;;17778:4;17754:21;:28;17750:324;;;-1:-1:-1;17830:4:45;;-1:-1:-1;17889:2:45;17682:790;;17750:324;-1:-1:-1;17978:4:45;;-1:-1:-1;18037:2:45;17682:790;;;18172:4;18148:21;:28;18144:298;;;-1:-1:-1;18224:4:45;;-1:-1:-1;18283:2:45;18144:298;18641:5;18616:21;:30;18609:214;;18723:2;18714:11;;;-1:-1:-1;18755:19:45;;18609:214;;;18848:5;18857:1;18848:10;18844:119;;18893:47;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;18893:47:45;5150:302:134;18844:119:45;19003:5;18998:107;;19039:47;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;19039:47:45;5150:302:134;18998:107:45;19587:14;19568:16;:33;19555:9;:46;19551:623;;19638:14;19625:27;;;;19551:623;;;19729:16;;19699:46;;;;19839:1;19822:18;;19818:338;;;19904:14;19885:16;:33;19872:9;:46;19868:266;;19950:27;;;;19868:266;;;1408:1;1495;20040:67;;;;;;;;;;;;;;19868:266;20202:26;20352:1;20340:9;:13;:30;;;;;20369:1;20357:9;:13;20340:30;20336:222;;;20424:16;20412:28;;20484:20;;;:55;;20537:1;20484:55;;;20519:8;20507:9;:20;20484:55;20462:77;;20372:186;20336:222;20621:9;20599:19;20587:9;:31;:43;20576:54;;20681:235;20729:18;20769;20809:59;20816:21;20839:5;20846:21;20809:6;:59::i;:::-;20890:8;20681:26;:235::i;:::-;20649:267;;-1:-1:-1;20649:267:45;-1:-1:-1;20961:1:45;20939:23;;20935:716;;;21012:2;20990:19;:24;20986:308;;;1408:1;1495;21204:67;;;;;;;;;;;;;;;20986:308;21479:19;21465:2;:34;21437:63;;;;;;:::i;:::-;;;;21526:17;21547:1;21526:22;21522:111;;1495:1;21576:34;;21522:111;-1:-1:-1;21676:17:45;;-1:-1:-1;21695:8:45;;-1:-1:-1;21668:36:45;;-1:-1:-1;;;;;;21668:36:45;13258:8471;12966:8769;;;;;;;:::o;34854:365::-;35003:4;35078:76;35093:18;35113:9;35124:18;35144:9;35078:14;:76::i;:::-;35172:40;;34854:365;-1:-1:-1;;;;;34854:365:45:o;2112:2562:44:-;2200:13;2257:71;2300:17;2319:8;2257:42;:71::i;:::-;2225:103;;-1:-1:-1;2225:103:44;-1:-1:-1;2339:13:44;;2397:24;2417:4;2225:103;2397:24;:::i;:::-;:29;2393:179;;-1:-1:-1;2482:4:44;;-1:-1:-1;2458:2:44;2393:179;;;-1:-1:-1;2557:4:44;;-1:-1:-1;2533:2:44;2393:179;2719:15;2737:33;2764:5;2737:17;:33;:::i;:::-;2719:51;-1:-1:-1;2917:17:44;2937:33;2964:5;2937:17;:33;:::i;:::-;2917:53;;2981:10;3024:1;3013:8;:12;3009:89;;;-1:-1:-1;3049:4:44;3078:9;3079:8;3078:9;:::i;:::-;3067:20;;3009:89;3124:1;3111:10;:14;3107:95;;;-1:-1:-1;3149:4:44;3180:11;3181:10;3180:11;:::i;:::-;3167:24;;3107:95;3212:35;;;;;;;;;:30;:35;;3261:15;;3257:819;;3292:24;;3354:10;3362:2;3354:5;:10;:::i;:::-;3334:30;;3518:128;3525:30;3545:9;3525:10;:30;:::i;:::-;3559:1;3525:35;3518:128;;3580:15;3593:2;3580:15;;:::i;:::-;;-1:-1:-1;3613:18:44;;;;:::i;:::-;;;;3518:128;;;3660:41;;;;;;;;;:36;:41;;;3715:147;3739:16;3735:1;:20;3715:147;;;3819:22;3805:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;3757:3:44;;3715:147;;;;3876:78;3883:15;3896:2;3883:10;:15;:::i;:::-;3902:1;3883:20;3876:78;;3923:16;3937:2;3923:16;;:::i;:::-;;;3876:78;;;4006:22;4030:34;4053:10;4030:22;:34::i;:::-;3987:78;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3968:97;;3278:798;;;3257:819;4086:28;4117:32;4140:8;4117:22;:32::i;:::-;4086:63;-1:-1:-1;4333:22:44;4358:32;4376:13;4358:8;:32;:::i;:::-;4333:57;-1:-1:-1;4400:28:44;4443:20;;:87;;4490:39;4513:15;4490:22;:39::i;:::-;4471:59;;;;;;;;:::i;:::-;;;;;;;;;;;;;4443:87;;;;;;;;;;;;;;;;4400:130;;4540:20;4563:5;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4540:39;;4610:6;4618:14;4634:16;4652:14;4596:71;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4589:78;;;;;;;;;;;;2112:2562;;;;:::o;5044:3560::-;5135:13;1062:4;5164:8;:38;:81;;;-1:-1:-1;5217:28:44;1062:4;5217:28;:::i;:::-;5206:8;:39;5164:81;5160:149;;;5268:30;;;;;;;;399:25:134;;;372:18;;5268:30:44;226:204:134;5160:149:44;5319:10;5332:21;;;;5388:495;;;;5626:18;5627:17;5626:18;:::i;:::-;5608:37;;5388:495;;;-1:-1:-1;5854:17:44;5388:495;5893:19;5921:25;5938:7;5921:16;:25::i;:::-;5969:13;;5893:54;;-1:-1:-1;5957:9:44;6232:106;6255:1;6239:13;:17;:57;;;;-1:-1:-1;6260:6:44;6275:13;6267:5;6271:1;6267;:5;:::i;:::-;:21;;;;:::i;:::-;6260:29;;;;;;;;:::i;:::-;;;;;;;;:36;;6239:57;6232:106;;;6312:15;;;;:::i;:::-;;;;6232:106;;;6347:12;6362:17;6366:13;6362:1;:17;:::i;:::-;6347:32;-1:-1:-1;6556:13:44;6572:32;6590:13;6572:8;:32;:::i;:::-;6556:48;;6615:20;6638:5;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6615:39;;6679:1;6669:6;:11;6665:594;;6926:6;6900:15;6976:14;6926:6;6976:4;:14;:::i;:::-;6966:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6966:25:44;;6947:44;;7010:9;7005:86;7029:4;7025:1;:8;7005:86;;;7067:6;7074:1;7067:9;;;;;;;;:::i;:::-;;;;;;;;;7058:3;7062:1;7058:6;;;;;;;;:::i;:::-;;;;:18;;;;;;;;;;-1:-1:-1;7035:3:44;;7005:86;;;;7109:9;7104:90;7128:7;7124:1;:11;7104:90;;;7160:19;:3;7164:8;7171:1;7164:4;:8;:::i;:::-;7160:13;;;;;;;;:::i;:::-;;;;:19;;;;;;;;;;-1:-1:-1;7137:3:44;;7104:90;;;;7228:6;7243:3;7214:34;;;;;;;;;:::i;:::-;;;;;;;;;;;;;7207:41;;;;;;;;;;;;;;6665:594;7472:17;7500:7;7501:6;7500:7;:::i;:::-;7472:36;;7530:9;7523:4;:16;7519:1079;;;7620:15;7638:16;7645:9;7638:4;:16;:::i;:::-;7620:34;-1:-1:-1;7668:16:44;7697:8;:4;7704:1;7697:8;:::i;:::-;7687:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7687:19:44;;7668:38;;7725:9;7720:89;7744:7;7740:1;:11;7720:89;;;7785:6;7792:1;7785:9;;;;;;;;:::i;:::-;;;;;;;;;7776:3;7780:1;7776:6;;;;;;;;:::i;:::-;;;;:18;;;;;;;;;;-1:-1:-1;7753:3:44;;7720:89;;;;7822:18;:3;7826:7;7822:12;;;;;;;;:::i;:::-;;;;:18;;;;;;;;;;;7859:9;7854:115;7878:9;7874:1;:13;7854:115;;;7935:6;7942:11;7952:1;7942:7;:11;:::i;:::-;7935:19;;;;;;;;:::i;:::-;;;;;;;7912:3;7930:1;7916:11;:7;7926:1;7916:11;:::i;:::-;:15;;;;:::i;:::-;7912:20;;;;;;;;:::i;:::-;;;;:42;;;;;;;;;;-1:-1:-1;7889:3:44;;7854:115;;;;8003:6;8018:3;7989:34;;;;;;;;;:::i;:::-;;;;;;;;;;;;;7982:41;;;;;;;;;;;;;;;7519:1079;8131:25;8159:16;8171:4;8159:9;:16;:::i;:::-;8131:44;-1:-1:-1;8189:16:44;8242:4;8218:21;8131:44;8218:1;:21;:::i;:::-;:28;;;;:::i;:::-;8208:39;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8208:39:44;;8189:58;;8261:12;:3;8265:1;8261:6;;;;;;;;:::i;:::-;;;;:12;;;;;;;;;;;8287;:3;8291:1;8287:6;;;;;;;;:::i;:::-;;;;:12;;;;;;;;;;;8318:9;8313:97;8337:17;8333:1;:21;8313:97;;;8379:16;:3;8383:5;8387:1;8383;:5;:::i;:::-;8379:10;;;;;;;;:::i;:::-;;;;:16;;;;;;;;;;-1:-1:-1;8356:3:44;;8313:97;;;;8428:9;8423:110;8447:4;8443:1;:8;8423:110;;;8509:6;8516:1;8509:9;;;;;;;;:::i;:::-;;;;;;;8476:3;8504:1;8480:21;8484:17;8480:1;:21;:::i;:::-;:25;;;;:::i;:::-;8476:30;;;;;;;;:::i;:::-;;;;:42;;;;;;;;;;-1:-1:-1;8453:3:44;;8423:110;;8131:373:42;8219:6;8227;8246:24;8272:15;8289:13;8306:38;8328:5;8335:8;8306:21;:38::i;:::-;8245:99;;;;;;8359:8;8354:98;;8390:51;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;8390:51:42;5150:302:134;8354:98:42;-1:-1:-1;8469:17:42;;;;-1:-1:-1;8131:373:42;-1:-1:-1;;;8131:373:42:o;18451:299::-;18539:5;18557:7;18566:13;18583:38;18593:17;18612:8;18583:9;:38::i;:::-;18556:65;;;;18636:8;18631:95;;18667:48;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;18667:48:42;5150:302:134;18631:95:42;-1:-1:-1;18742:1:42;18451:299;-1:-1:-1;;;18451:299:42:o;33785:339:45:-;33935:6;33943;33999:36;34005:18;34025:9;33999:5;:36::i;:::-;33965:70;;-1:-1:-1;33965:70:45;-1:-1:-1;34052:65:45;34056:18;34076:9;33965:70;;34052:3;:65::i;:::-;34045:72;;;;33785:339;;;;;;;:::o;14139:390:42:-;14277:7;14301:13;14316;14333:58;14353:17;14372:8;14382;14333:19;:58::i;:::-;14300:91;;;;14406:8;14401:100;;14437:53;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;14437:53:42;5150:302:134;14401:100:42;-1:-1:-1;14517:5:42;14139:390;-1:-1:-1;;;;14139:390:42:o;29621:3681:45:-;29771:6;;30037:26;;30065;;30034:58;30111:217;;;;30145:18;30167:1;30145:23;30141:177;;30196:18;30216:9;30188:38;;;;;;;30141:177;30273:18;30293:9;30265:38;;;;;;;30141:177;30565:43;30578:18;30598:9;30565:12;:43::i;:::-;30531:77;;-1:-1:-1;30531:77:45;-1:-1:-1;30652:43:45;30665:18;30685:9;30652:12;:43::i;:::-;30618:77;;-1:-1:-1;30618:77:45;-1:-1:-1;30816:21:45;;;30812:268;;;30919:18;;31031:9;;30866:18;;30812:268;31764:21;;;824:2;31948:45;;31944:122;;;32021:18;32041:9;32013:38;;;;;;;;31944:122;32285:21;32279:2;:27;32250:57;;;;;;:::i;:::-;;;-1:-1:-1;;32400:39:45;;;32658:26;;;32555:4;32648:37;;;32641:45;32734:18;32561:43;;;32551:54;;;32544:62;32718:35;32826:412;;;;32885:9;32865:16;:29;32861:130;;32925:47;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;32925:47:45;5150:302:134;32861:130:45;33031:2;33051:24;;;;33009;;;;33122:40;;;33093:11;;;;;;32826:412;;;33222:1;33201:22;;32826:412;-1:-1:-1;33265:18:45;;33285:9;;-1:-1:-1;;;;;;29621:3681:45:o;50744:2689::-;50905:6;;51455:26;;51483;;51452:58;51601:26;;;51629;;;51597:59;51374:308;51761:24;;;51346:461;51842:105;;;;51889:18;51909;51881:47;;;;;;;51842:105;51232:729;51975:12;52025:9;52013;:21;52009:329;;;-1:-1:-1;52124:18:45;;52248:9;;52067:18;;52319:4;52009:329;52374:21;;;52352:19;52500:20;;52540:2;52522:21;;52497:47;52571:210;;;;52610:7;52606:161;;;52649:1;52652:18;52641:30;;;;;;;;;52606:161;52726:18;52746:1;52718:30;;;;;;;;;52606:161;52914:2;:27;;;52974:26;;;:18;52914:27;52974:26;52914:27;53019:16;;;;:::i;:::-;;:38;53015:402;;53081:7;53077:161;;;53120:1;53123:18;53112:30;;;;;;;;;;;53077:161;53197:18;53217:1;53189:30;;;;;;;;;;;53015:402;53262:7;53258:159;;;53297:18;;-1:-1:-1;53317:8:45;-1:-1:-1;53289:37:45;;-1:-1:-1;;;;53289:37:45;53258:159;53373:8;-1:-1:-1;53383:18:45;;-1:-1:-1;53365:37:45;;-1:-1:-1;;;;53365:37:45;2977:541;3058:6;3066;3205:16;3184:17;:37;3180:271;;3257:16;3245:8;:28;3241:127;;3304:45;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;3304:45:45;5150:302:134;3241:127:45;3406:2;3385:23;;;;3426:10;;;;;3180:271;-1:-1:-1;;3472:18:45;;;;;;2977:541::o;1751:6678:46:-;1859:20;1987:5;1859:20;;2015:55;1987:5;2045:3;7516:41:33;2015:21:46;:55::i;:::-;2006:64;-1:-1:-1;2102:15:46;;;;2006:64;2201:53;2006:64;2231:3;20378:131:33;2201:21:46;:53::i;:::-;2192:62;;2286:8;2276:6;:18;2272:120;;-1:-1:-1;2326:32:46;;-1:-1:-1;2368:1:46;;-1:-1:-1;2368:1:46;;-1:-1:-1;2318:55:46;;-1:-1:-1;2318:55:46;2272:120;2411:37;2450:27;2501:61;2548:5;2555:6;2501:46;:61::i;:::-;2410:152;;-1:-1:-1;2410:152:46;-1:-1:-1;2584:35:46;;;;2580:135;;-1:-1:-1;2651:30:46;-1:-1:-1;2691:1:46;;-1:-1:-1;2691:1:46;;-1:-1:-1;2643:53:46;;-1:-1:-1;;2643:53:46;2580:135;1870:13:34;;2752:20:46;;-1:-1:-1;7662:41:33;1886:1:34;2801:16:46;1862:22:34;;;;1858:30;;;;1854:41;1847:49;1840:57;1823:15;;;1819:79;;-1:-1:-1;;2899:14:46;;2895:3973;;-1:-1:-1;2964:8:46;;;;;2945:1;2964:8;3043:53;2964:8;3073:3;20378:131:33;3043:21:46;:53::i;:::-;3034:62;;3128:9;3118:6;:19;3114:119;;-1:-1:-1;3169:30:46;;-1:-1:-1;3209:1:46;;-1:-1:-1;3209:1:46;;-1:-1:-1;3161:53:46;;-1:-1:-1;;3161:53:46;3114:119;3406:6;3430:125;3457:17;;;1870:13:34;;1823:15;;-1:-1:-1;1886:1:34;1688:14;1862:22;;;;1858:30;;;;7945:41:33;1854::34;1847:49;1840:57;1819:79;3496:1:46;3437:60;3430:125;;3521:15;;3430:125;;;3594:9;3577:13;:26;3573:403;;3628:24;3654:19;3701:72;3748:9;3759:13;3701:46;:72::i;:::-;3627:146;;-1:-1:-1;3627:146:46;-1:-1:-1;3799:22:46;;;;3795:117;;-1:-1:-1;3857:17:46;-1:-1:-1;3884:1:46;;-1:-1:-1;3884:1:46;;-1:-1:-1;3849:40:46;;-1:-1:-1;;;;3849:40:46;3795:117;3945:12;-1:-1:-1;;3573:403:46;4079:1;4067:9;:13;4063:113;;;-1:-1:-1;4112:30:46;;-1:-1:-1;4152:1:46;;-1:-1:-1;4152:1:46;;-1:-1:-1;4104:53:46;;-1:-1:-1;;;4104:53:46;4063:113;4197:10;4193:79;;;4244:9;4243:10;;4231:22;;4193:79;4724:13;4704:9;4697:41;4686:52;;4843:1;4832:8;:12;4828:114;;;-1:-1:-1;4876:32:46;;-1:-1:-1;4918:1:46;;-1:-1:-1;4918:1:46;;-1:-1:-1;4868:55:46;;-1:-1:-1;;;4868:55:46;4828:114;4964:17;4985:1;4964:22;4960:1894;;5030:9;5010:29;;4960:1894;;;5210:13;5234:9;;;5717:2;5709:10;;5705:122;;;-1:-1:-1;5755:34:46;;-1:-1:-1;5799:1:46;;-1:-1:-1;5799:1:46;;-1:-1:-1;5747:57:46;;-1:-1:-1;;;;5747:57:46;5705:122;5856:2;:11;6024:33;;;5998:23;6024:17;5856:11;6024:33;5856:11;6241:32;;;;:::i;:::-;;:53;;;-1:-1:-1;6556:44:46;;;;;;;6241:53;;6626:32;;;6644:14;6626:32;6622:144;;;-1:-1:-1;6694:34:46;;-1:-1:-1;6738:1:46;;-1:-1:-1;6738:1:46;;-1:-1:-1;6686:57:46;;-1:-1:-1;;;;;;;6686:57:46;6622:144;-1:-1:-1;;6807:28:46;;;-1:-1:-1;;4960:1894:46;2915:3953;;2895:3973;1870:13:34;;20571:29:33;1886:1:34;6882:13:46;1862:22:34;;;;1858:30;;;;1854:41;1847:49;1840:57;1823:15;;;1819:79;6974:11:46;;6970:1209;;7005:8;;;;;;7081:55;7005:8;7111:3;7516:41:33;7081:21:46;:55::i;:::-;7072:64;-1:-1:-1;7072:64:46;7235:53;7072:64;7265:3;20378:131:33;7235:21:46;:53::i;:::-;7226:62;;7324:11;7314:6;:21;7310:131;;-1:-1:-1;7371:32:46;;-1:-1:-1;7413:1:46;;-1:-1:-1;7413:1:46;;-1:-1:-1;7363:55:46;;-1:-1:-1;;;;7363:55:46;7310:131;7154:305;7500:21;7523:16;7567:62;7614:6;7622;7567:46;:62::i;:::-;7499:130;;-1:-1:-1;7499:130:46;-1:-1:-1;7655:19:46;;;;7651:111;;-1:-1:-1;7710:14:46;-1:-1:-1;7734:1:46;;-1:-1:-1;7734:1:46;;-1:-1:-1;7702:37:46;;-1:-1:-1;;;;7702:37:46;7651:111;7792:9;-1:-1:-1;;7881:17:46;;;7860:18;7925:10;;:36;;;;;7953:8;7939:11;:22;7925:36;7924:80;;;;7976:1;7967:6;:10;:36;;;;;7995:8;7981:11;:22;7967:36;7920:183;;;-1:-1:-1;8040:25:46;;-1:-1:-1;8075:1:46;;-1:-1:-1;8075:1:46;;-1:-1:-1;8032:48:46;;-1:-1:-1;;;;8032:48:46;7920:183;8135:11;-1:-1:-1;;6970:1209:46;8197:17;8218:1;8197:22;8193:220;;8397:1;8386:12;;8193:220;1954:6469;;;1751:6678;;;;;;;;:::o;6054:800:42:-;6139:6;;;6221:17;;;6213:26;;6386:16;6370:33;;6366:472;;;6583:2;6575:5;:10;6599:1;6588:12;;6610:2;6602:5;:10;6616:1;6602:15;6560:58;;;;;;;;;6366:472;6800:5;;-1:-1:-1;6808:8:42;-1:-1:-1;6818:4:42;;-1:-1:-1;6054:800:42;;;;;;:::o;57066:978:45:-;57151:6;57159:4;57165:6;57211:8;57223:2;57211:14;57207:821;;-1:-1:-1;57253:17:45;;-1:-1:-1;57272:5:45;;-1:-1:-1;57279:1:45;57245:36;;57207:821;57317:2;57306:8;:13;57302:726;;;57354:3;57343:8;:14;57339:98;;;-1:-1:-1;57389:1:45;;-1:-1:-1;;57392:22:45;;;57416:1;57381:37;;57339:98;57454:12;57492:8;57503:1;57492:12;57490:15;;57476:2;:30;57454:53;;57592:15;57630:5;57610:17;:25;;;;;:::i;:::-;;;-1:-1:-1;;57671:16:45;;;:37;;;;-1:-1:-1;57682:5:45;-1:-1:-1;57653:63:45;;57302:726;57753:1;57741:8;:13;57737:291;;-1:-1:-1;57782:1:45;;-1:-1:-1;57782:1:45;;-1:-1:-1;57792:1:45;57774:20;;57737:291;-1:-1:-1;;;57988:1:45;:12;;57974:2;:27;57947:55;;58004:5;58011:1;57939:74;;58539:1243;58674:20;;;1447:3:47;1145:33;1176:2;397:4;1145:33;:::i;:::-;;1176:2;397:4;1145:33;:::i;:::-;1294:23;;1316:1;1294:23;:::i;:::-;58911:24:45;;:1;:24;:::i;:::-;:46;;;;:::i;:::-;:79;;;;:::i;:::-;58890:100;;59102:477;;;59187:1;59184;59177:12;59267:1;59262;59257:2;59250:5;59246:14;59242:22;59234:6;59230:35;59226:2;59218:6;59206:63;59152:6;59312:1;59306:8;59354:24;59346:6;59342:37;59332:47;;59406:1;59403;59396:12;59509:1;59502:2;59495:5;59491:14;59486:2;59480:3;59473:5;59469:15;59465:24;59461:45;59453:6;59449:58;59445:2;59437:6;59425:86;59562:1;59556:8;59538:27;;59102:477;-1:-1:-1;;;;59102:477:45:o;:::-;59610:51;59657:3;59645:10;59625:18;59610:51;:::i;:::-;59593:68;;59677:8;59674:92;;;59705:59;59761:1;59756:3;59752:11;59740:10;59720:18;59705:59;:::i;:::-;59688:76;;59025:751;58539:1243;;;;;;:::o;60320:1618::-;60583:6;60591;60691:13;60675:12;:29;60671:93;;-1:-1:-1;60728:13:45;;-1:-1:-1;60743:9:45;60720:33;;60671:93;60773:33;60816:24;60888;60914:21;60939:54;60943:12;60957:9;60968:13;60983:9;60939:3;:54::i;:::-;60887:106;;;;61032:23;61057:20;61081:55;61085:13;61100:9;61111:13;61126:9;61081:3;:55::i;:::-;61031:105;;;;61253:71;61257:17;61276:14;61292:16;61310:13;61253:3;:71::i;:::-;61187:137;;;;;;;;60851:484;;;;61365:24;61391:21;61416:55;61420:13;61435:9;61446:13;61461:9;61416:3;:55::i;:::-;61364:107;;;;61529:33;61564:24;61604:85;61608:26;61636:17;61655;61674:14;61604:3;:85::i;:::-;61528:161;;;;61752:24;61778:15;61809:76;61813:26;61841:17;61860:13;61875:9;61809:3;:76::i;:::-;61751:134;;-1:-1:-1;61751:134:45;-1:-1:-1;;;;;;;;;60320:1618:45;;;;;;;;;;;:::o;48286:370::-;48374:6;48382;48401:27;48430:18;48450:9;48463:37;48472:17;48491:8;48463;:37::i;:::-;48400:100;;;;;;48515:4;48510:88;;48542:45;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;48542:45:45;5150:302:134;35925:1328:45;36006:14;;1145:33:47;1176:2;397:4;1145:33;:::i;:::-;1294:23;;1316:1;1294:23;:::i;:::-;36104:24:45;;36127:1;36104:24;:::i;:::-;36077:51;-1:-1:-1;36138:24:45;1145:33:47;1176:2;397:4;1145:33;:::i;:::-;36138:46:45;;36537:1;36532:2;36525:5;36521:14;36517:22;36514:1;36510:30;36563:1;36560;36553:12;36614:1;36602:10;36598:2;36590:6;36578:38;;36655:1;36649:8;36699:6;36685:12;36681:25;36671:35;;36754:6;36740:12;36736:25;36729:33;36719:136;;36802:39;;;;36719:136;;36879:1;36876;36869:12;37191:1;37184:2;37177:5;37173:14;37168:2;37162:3;37155:5;37151:15;37147:24;37143:45;37125:16;37121:68;37117:2;37109:6;37097:96;-1:-1:-1;;37234:1:45;37228:8;37216:21;;35925:1328;-1:-1:-1;;35925:1328:45:o;3731:701::-;3818:7;3885:1;3865:17;:21;3861:555;;;3931:16;3910:17;:37;3906:316;;-1:-1:-1;3978:29:45;;3731:701;-1:-1:-1;3731:701:45:o;3906:316::-;-1:-1:-1;4184:18:45;;;3731:701::o;3861:555::-;-1:-1:-1;4383:17:45;3731:701::o;3861:555::-;3731:701;;;:::o;21872:550::-;21933:12;;22319:6;22316:1;22313;22306:20;22346:9;;;;22394:11;;;22380:12;;;;22376:30;;;;;21872:550;-1:-1:-1;;21872:550:45:o;22585:4048::-;22667:14;22694:13;22709;22726:12;22733:1;22736;22726:6;:12::i;:::-;22693:45;;;;22812:5;22821:1;22812:10;22808:109;;22881:11;22873:5;:19;;;;;:::i;:::-;;22866:26;;;;;;22808:109;23024:11;23015:5;:20;23011:91;;23058:33;;;;;;;;8664:25:134;;;8705:18;;;8698:34;;;8748:18;;;8741:34;;;8637:18;;23058:33:45;8468:313:134;23011:91:45;23394:17;23553:11;23550:1;23547;23540:25;24154:1;24139:12;;:16;;24124:32;;24393:25;;;;;25554:1;25535;:15;;25534:21;;25787;;;25783:25;;25772:36;25856:21;;;25852:25;;25841:36;25926:21;;;25922:25;;25911:36;25996:21;;;25992:25;;25981:36;26066:21;;;26062:25;;26051:36;26137:21;;;26133:25;;;26122:36;24106:15;25003;;;24999:29;;;24995:37;;;23659:20;;;23648:32;;;25121:22;;;;23702:21;;;;24565:19;;;;25112:31;;;;26601:15;;-1:-1:-1;;22585:4048:45;;;;;:::o;5040:1698::-;5190:6;5198;5312:1;5307;5303;:5;5302:11;5298:1434;;;5364:16;5333:20;:48;5329:830;;;5429:29;5437:16;5457:1;5429:29;:::i;:::-;5405:20;:53;5401:529;;-1:-1:-1;5600:16:45;;-1:-1:-1;5618:8:45;5592:35;;5401:529;5870:25;5893:2;5870:20;:25;:::i;:::-;5862:34;;;:::i;:::-;5898:12;:8;5909:1;5898:12;:::i;:::-;5854:57;;;;;;5329:830;6104:29;6112:20;6104:29;:::i;:::-;6135:8;6096:48;;;;;;5298:1434;6224:16;6193:20;:48;6189:533;;;6444:25;6467:2;6444:20;:25;:::i;6189:533::-;-1:-1:-1;6675:20:45;;-1:-1:-1;6698:8:45;6660:47;;45918:1994;46002:6;46010;46018:4;46062:17;46083:1;46062:22;46058:134;;-1:-1:-1;1408:1:45;;-1:-1:-1;1408:1:45;;-1:-1:-1;46172:4:45;46104:73;;46058:134;46331:4;46311:17;:24;46339:1;46311:29;46307:1005;;46384:4;46364:17;:24;:29;:66;;;;-1:-1:-1;46409:21:45;46397:33;;;46364:66;46360:174;;;46475:4;46454:25;;;;46513:2;46501:14;;;;46360:174;46576:4;46556:17;:24;:29;:66;;;;-1:-1:-1;46601:21:45;46589:33;;;46556:66;46552:174;;;46667:4;46646:25;;;;46705:2;46693:14;;;;46552:174;46768:4;46748:17;:24;:29;:66;;;;-1:-1:-1;46793:21:45;46781:33;;;46748:66;46744:174;;;46859:4;46838:25;;;;46897:2;46885:14;;;;46744:174;46963:4;46943:17;:24;:29;:65;;;;-1:-1:-1;46988:20:45;46976:32;;;46943:65;46936:174;;;47053:3;47032:24;;;;47090:1;47078:13;;;;46936:174;;;47152:4;47132:17;:24;:29;:65;;;;-1:-1:-1;47177:20:45;47165:32;;;47132:65;47128:170;;;47242:2;47221:23;;;;47278:1;47266:13;;;;47128:170;47606:2;47586:22;;;;;47647:25;47626:17;:46;:82;;;;-1:-1:-1;47688:20:45;47676:32;;;47626:82;47622:192;;;47748:20;47728:40;;47798:1;47786:13;;;;47622:192;-1:-1:-1;47836:17:45;;47855:8;;-1:-1:-1;;;47885:4:45;47865:24;;:29;;;45918:1994::o;1985:168:2:-;2046:13;2100:1;2092:5;:9;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2114:31;2436:3:5;2431:8;;;2576;;;2575:17;2114:8:2;:31::i;:::-;2078:68;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2071:75;;1985:168;;;:::o;1251:634::-;1307:13;1356:14;1373:17;1384:5;1373:10;:17::i;:::-;1393:1;1373:21;1356:38;;1408:20;1442:6;1431:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1431:18:2;-1:-1:-1;1408:41:2;-1:-1:-1;1538:30:2;;;1554:4;1538:30;1595:247;1626:5;;1730:10;1725:2;1714:14;;1709:32;1626:5;1696:46;1786:2;1777:11;;;-1:-1:-1;1806:21:2;1595:247;1806:21;-1:-1:-1;1862:6:2;1251:634;-1:-1:-1;;;1251:634:2:o;835:346:34:-;919:7;1033:109;1107:1;1100:4;1096:1;1086:6;1080:13;1077:1;1072:22;1068:30;1064:41;1061:48;1055:3;1047:6;1044:15;1040:70;1033:109;;;1135:1;1127:6;1123:14;1113:24;;1033:109;;;-1:-1:-1;1168:6:34;;835:346;-1:-1:-1;;835:346:34:o;5044:1463:35:-;1870:13:34;;5135:6:35;;;;7516:41:33;1886:1:34;1862:22;;;1858:30;;;;1854:41;1847:49;1840:57;1823:15;;;1819:79;5304:15:35;;;;5135:6;;5374:53;5304:15;1823::34;5374:40:35;:53::i;:::-;5334:93;;-1:-1:-1;5334:93:35;-1:-1:-1;5476:26:35;;;;5472:90;;-1:-1:-1;5530:13:35;-1:-1:-1;5545:1:35;;-1:-1:-1;5522:25:35;;-1:-1:-1;;5522:25:35;5472:90;5618:5;5627:1;5618:10;5614:341;;5863:16;5847:5;:33;:77;;5922:1;5847:77;;;5883:29;5847:77;5839:101;-1:-1:-1;5933:5:35;-1:-1:-1;5839:101:35;;-1:-1:-1;;;5839:101:35;5614:341;6400:29;6392:37;;:81;;6471:1;6392:81;;;6432:29;6392:81;6384:106;-1:-1:-1;6475:14:35;;;-1:-1:-1;;;;5044:1463:35;;;;;:::o;29471:916:3:-;29524:7;;29608:8;29599:17;;29595:103;;29645:8;29636:17;;;-1:-1:-1;29681:2:3;29671:12;29595:103;29724:8;29715:5;:17;29711:103;;29761:8;29752:17;;;-1:-1:-1;29797:2:3;29787:12;29711:103;29840:8;29831:5;:17;29827:103;;29877:8;29868:17;;;-1:-1:-1;29913:2:3;29903:12;29827:103;29956:7;29947:5;:16;29943:100;;29992:7;29983:16;;;-1:-1:-1;30027:1:3;30017:11;29943:100;30069:7;30060:5;:16;30056:100;;30105:7;30096:16;;;-1:-1:-1;30140:1:3;30130:11;30056:100;30182:7;30173:5;:16;30169:100;;30218:7;30209:16;;;-1:-1:-1;30253:1:3;30243:11;30169:100;30295:7;30286:5;:16;30282:66;;30332:1;30322:11;30374:6;29471:916;-1:-1:-1;;29471:916:3:o;1114:3326:35:-;1199:6;1207:7;1263:3;1254:5;:12;1250:95;;-1:-1:-1;1294:32:35;;-1:-1:-1;1328:1:35;1286:44;;1250:95;1511:5;1520:1;1511:10;1507:80;;1548:24;;;;;;;;;;;;;;1507:80;1808:18;1778:19;1912:7;;;1778:19;2083:486;2100:5;2090:6;:15;;:32;;;;;2120:2;2109:8;:13;2090:32;2083:486;;;2434:13;;2518:10;;;;2546:8;;;;;2468:2;2464:17;2431:1;2426:22;;;;2422:40;;;2418:64;2407:76;2083:486;;;2785:5;2775:6;:15;2771:1613;;2939:13;;2832;2931:22;2927:40;;;3167:1;3159:9;;3155:393;;;-1:-1:-1;3204:29:35;;-1:-1:-1;3235:1:35;;-1:-1:-1;3196:41:35;;-1:-1:-1;;;;3196:41:35;3155:393;3318:2;:14;;;3309:24;;3363:14;;;:22;-1:-1:-1;3359:126:35;;;-1:-1:-1;3425:29:35;;-1:-1:-1;3456:1:35;;-1:-1:-1;3417:41:35;;-1:-1:-1;;;;;3417:41:35;3359:126;3510:15;;;;;-1:-1:-1;3569:8:35;;;;;3760:592;3777:5;3767:6;:15;3760:592;;4007:13;;3876:23;3999:22;4177:18;4150:46;;4146:150;;-1:-1:-1;4236:29:35;;-1:-1:-1;4267:1:35;;-1:-1:-1;4228:41:35;;-1:-1:-1;;;;4228:41:35;4146:150;-1:-1:-1;4321:8:35;;;;;3760:592;;;4413:1;;4417:5;;-1:-1:-1;1114:3326:35;-1:-1:-1;;;;;;1114:3326:35:o;14:207:134:-;100:6;153:2;141:9;132:7;128:23;124:32;121:52;;;169:1;166;159:12;121:52;-1:-1:-1;192:23:134;;14:207;-1:-1:-1;14:207:134:o;435:302::-;557:6;565;618:2;606:9;597:7;593:23;589:32;586:52;;;634:1;631;624:12;586:52;-1:-1:-1;;657:23:134;;;727:2;712:18;;;699:32;;-1:-1:-1;435:302:134:o;742:156::-;808:20;;868:4;857:16;;847:27;;837:55;;888:1;885;878:12;903:277;996:6;1004;1057:2;1045:9;1036:7;1032:23;1028:32;1025:52;;;1073:1;1070;1063:12;1025:52;1109:9;1096:23;1086:33;;1138:36;1170:2;1159:9;1155:18;1138:36;:::i;:::-;1128:46;;903:277;;;;;:::o;1640:368::-;1732:6;1740;1793:2;1781:9;1772:7;1768:23;1764:32;1761:52;;;1809:1;1806;1799:12;1761:52;1845:9;1832:23;1822:33;;1905:2;1894:9;1890:18;1877:32;1952:5;1945:13;1938:21;1931:5;1928:32;1918:60;;1974:1;1971;1964:12;1918:60;1997:5;1987:15;;;1640:368;;;;;:::o;2013:477::-;2162:2;2151:9;2144:21;2125:4;2194:6;2188:13;2237:6;2232:2;2221:9;2217:18;2210:34;2296:6;2291:2;2283:6;2279:15;2274:2;2263:9;2259:18;2253:50;2352:1;2347:2;2338:6;2327:9;2323:22;2319:31;2312:42;2481:2;2411:66;2406:2;2398:6;2394:15;2390:88;2379:9;2375:104;2371:113;2363:121;;;2013:477;;;;:::o;2932:184::-;2984:77;2981:1;2974:88;3081:4;3078:1;3071:15;3105:4;3102:1;3095:15;3121:981;3190:6;3243:2;3231:9;3222:7;3218:23;3214:32;3211:52;;;3259:1;3256;3249:12;3211:52;3299:9;3286:23;3328:18;3369:2;3361:6;3358:14;3355:34;;;3385:1;3382;3375:12;3355:34;3423:6;3412:9;3408:22;3398:32;;3468:7;3461:4;3457:2;3453:13;3449:27;3439:55;;3490:1;3487;3480:12;3439:55;3526:2;3513:16;3548:2;3544;3541:10;3538:36;;;3554:18;;:::i;:::-;3688:2;3682:9;3750:4;3742:13;;3593:66;3738:22;;;3762:2;3734:31;3730:40;3718:53;;;3786:18;;;3806:22;;;3783:46;3780:72;;;3832:18;;:::i;:::-;3872:10;3868:2;3861:22;3907:2;3899:6;3892:18;3947:7;3942:2;3937;3933;3929:11;3925:20;3922:33;3919:53;;;3968:1;3965;3958:12;3919:53;4024:2;4019;4015;4011:11;4006:2;3998:6;3994:15;3981:46;4069:1;4047:15;;;4064:2;4043:24;4036:35;;;;-1:-1:-1;4051:6:134;3121:981;-1:-1:-1;;;;;3121:981:134:o;4458:397::-;4616:6;4624;4632;4685:2;4673:9;4664:7;4660:23;4656:32;4653:52;;;4701:1;4698;4691:12;4653:52;-1:-1:-1;;4724:23:134;;;4794:2;4779:18;;4766:32;;-1:-1:-1;4845:2:134;4830:18;;;4817:32;;4458:397;-1:-1:-1;4458:397:134:o;5706:184::-;5758:77;5755:1;5748:88;5855:4;5852:1;5845:15;5879:4;5876:1;5869:15;5895:184;5947:77;5944:1;5937:88;6044:4;6041:1;6034:15;6068:4;6065:1;6058:15;6084:476;6173:1;6210:5;6173:1;6224:330;6245:7;6235:8;6232:21;6224:330;;;6364:4;6296:66;6292:77;6286:4;6283:87;6280:113;;;6373:18;;:::i;:::-;6423:7;6413:8;6409:22;6406:55;;;6443:16;;;;6406:55;6522:22;;;;6482:15;;;;6224:330;;;6228:3;6084:476;;;;;:::o;6565:866::-;6614:5;6644:8;6634:80;;-1:-1:-1;6685:1:134;6699:5;;6634:80;6733:4;6723:76;;-1:-1:-1;6770:1:134;6784:5;;6723:76;6815:4;6833:1;6828:59;;;;6901:1;6896:130;;;;6808:218;;6828:59;6858:1;6849:10;;6872:5;;;6896:130;6933:3;6923:8;6920:17;6917:43;;;6940:18;;:::i;:::-;-1:-1:-1;;6996:1:134;6982:16;;7011:5;;6808:218;;7110:2;7100:8;7097:16;7091:3;7085:4;7082:13;7078:36;7072:2;7062:8;7059:16;7054:2;7048:4;7045:12;7041:35;7038:77;7035:159;;;-1:-1:-1;7147:19:134;;;7179:5;;7035:159;7226:34;7251:8;7245:4;7226:34;:::i;:::-;7356:6;7288:66;7284:79;7275:7;7272:92;7269:118;;;7367:18;;:::i;:::-;7405:20;;6565:866;-1:-1:-1;;;6565:866:134:o;7436:131::-;7496:5;7525:36;7552:8;7546:4;7525:36;:::i;7572:168::-;7645:9;;;7676;;7693:15;;;7687:22;;7673:37;7663:71;;7714:18;;:::i;7745:200::-;7811:9;;;7784:4;7839:9;;7867:10;;7879:12;;;7863:29;7902:12;;;7894:21;;7860:56;7857:82;;;7919:18;;:::i;:::-;7857:82;7745:200;;;;:::o;7950:216::-;8014:9;;;8042:11;;;7989:3;8072:9;;8100:10;;8096:19;;8125:10;;8117:19;;8093:44;8090:70;;;8140:18;;:::i;:::-;8090:70;;7950:216;;;;:::o;8171:292::-;8243:9;;;8210:7;8268:9;;8285:66;8279:73;;8264:89;8261:115;;;8356:18;;:::i;:::-;8429:1;8420:7;8415:16;8412:1;8409:23;8405:1;8398:9;8395:38;8385:72;;8437:18;;:::i;8786:308::-;8825:1;8851;8841:35;;8856:18;;:::i;:::-;8973:66;8970:1;8967:73;8898:66;8895:1;8892:73;8888:153;8885:179;;;9044:18;;:::i;:::-;-1:-1:-1;9078:10:134;;8786:308::o;9099:112::-;9130:1;9156;9146:35;;9161:18;;:::i;:::-;-1:-1:-1;9195:10:134;;9099:112::o;9216:191::-;9251:3;9282:66;9275:5;9272:77;9269:103;;9352:18;;:::i;9412:120::-;9452:1;9478;9468:35;;9483:18;;:::i;:::-;-1:-1:-1;9517:9:134;;9412:120::o;9537:195::-;9576:3;9607:66;9600:5;9597:77;9594:103;;9677:18;;:::i;:::-;-1:-1:-1;9724:1:134;9713:13;;9537:195::o;9737:212::-;9779:3;9817:5;9811:12;9861:6;9854:4;9847:5;9843:16;9838:3;9832:36;9923:1;9887:16;;9912:13;;;-1:-1:-1;9887:16:134;;9737:212;-1:-1:-1;9737:212:134:o;9954:344::-;10175:3;10206:30;10232:3;10224:6;10206:30;:::i;:::-;10259:3;10245:18;;10290:1;10279:13;;9954:344;-1:-1:-1;;;9954:344:134:o;10303:390::-;10602:3;10597;10590:16;10572:3;10622:65;10648:38;10683:1;10678:3;10674:11;10666:6;10648:38;:::i;:::-;10640:6;10622:65;:::i;:::-;10615:72;10303:390;-1:-1:-1;;;;10303:390:134:o;10698:315::-;10949:3;10944;10937:16;10919:3;10969:38;11004:1;10999:3;10995:11;10987:6;10969:38;:::i;11018:417::-;11293:3;11318:111;11344:84;11370:57;11396:30;11422:3;11414:6;11396:30;:::i;:::-;11388:6;11370:57;:::i;:::-;11362:6;11344:84;:::i;11318:111::-;11311:118;11018:417;-1:-1:-1;;;;;;11018:417:134:o;11620:128::-;11687:9;;;11708:11;;;11705:37;;;11722:18;;:::i;11753:184::-;11805:77;11802:1;11795:88;11902:4;11899:1;11892:15;11926:4;11923:1;11916:15;11942:125;12007:9;;;12028:10;;;12025:36;;;12041:18;;:::i;12072:267::-;12251:3;12276:57;12302:30;12328:3;12320:6;12302:30;:::i", + "linkReferences": {} + }, + "methodIdentifiers": { + "FORMAT_DEFAULT_SCIENTIFIC_MAX()": "9b4afd99", + "FORMAT_DEFAULT_SCIENTIFIC_MIN()": "d35273a7", + "abs(bytes32)": "81a82272", + "add(bytes32,bytes32)": "d1de592a", + "ceil(bytes32)": "719cd99d", + "div(bytes32,bytes32)": "30297400", + "e()": "ffae15ba", + "eq(bytes32,bytes32)": "3447c030", + "floor(bytes32)": "5ca0e7a4", + "format(bytes32)": "a100a3d9", + "format(bytes32,bool)": "371493ce", + "format(bytes32,bytes32,bytes32)": "e5526ecd", + "frac(bytes32)": "28fa1f01", + "fromFixedDecimalLossless(uint256,uint8)": "3b3bd868", + "fromFixedDecimalLossy(uint256,uint8)": "e75f991f", + "gt(bytes32,bytes32)": "8dc29807", + "gte(bytes32,bytes32)": "73bfb283", + "integer(bytes32)": "e0db5888", + "inv(bytes32)": "04327dc5", + "isZero(bytes32)": "dd646917", + "log10(bytes32)": "25388350", + "lt(bytes32,bytes32)": "d102b4d3", + "lte(bytes32,bytes32)": "81f7e2f5", + "max(bytes32,bytes32)": "078b665b", + "maxNegativeValue()": "602c35fc", + "maxPositiveValue()": "cb09682b", + "min(bytes32,bytes32)": "a90d041a", + "minNegativeValue()": "cde72ef3", + "minPositiveValue()": "a19684b7", + "minus(bytes32)": "d3d6ffa8", + "mul(bytes32,bytes32)": "96ce1ec7", + "parse(string)": "bc62d8d8", + "pow(bytes32,bytes32)": "3004fa41", + "pow10(bytes32)": "1ee62f11", + "sqrt(bytes32)": "146e82ad", + "sub(bytes32,bytes32)": "41aa0080", + "toFixedDecimalLossless(bytes32,uint8)": "5b23771d", + "toFixedDecimalLossy(bytes32,uint8)": "0b6429bc", + "zero()": "bc1b392d" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"CoefficientOverflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"DivisionByZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"ExponentOverflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"Log10Negative\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Log10Zero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tablesAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"expectedCodehash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"actualCodehash\",\"type\":\"bytes32\"}],\"name\":\"LogTablesNotDeployed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"LossyConversionFromFloat\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"LossyConversionToFloat\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"MaximizeOverflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denominator\",\"type\":\"uint256\"}],\"name\":\"MulDivOverflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"NegativeFixedDecimalConversion\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"PowNegativeBase\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"scientificMin\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"scientificMax\",\"type\":\"bytes32\"}],\"name\":\"ScientificMinNotLessThanMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"UnformatableExponent\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"targetExponent\",\"type\":\"int256\"}],\"name\":\"WithTargetExponentOverflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"ZeroNegativePower\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroStringStartPointer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FORMAT_DEFAULT_SCIENTIFIC_MAX\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FORMAT_DEFAULT_SCIENTIFIC_MIN\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"abs\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"add\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"ceil\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"div\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"e\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"eq\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"floor\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"scientific\",\"type\":\"bool\"}],\"name\":\"format\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"format\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"scientificMin\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"scientificMax\",\"type\":\"bytes32\"}],\"name\":\"format\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"frac\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"name\":\"fromFixedDecimalLossless\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"name\":\"fromFixedDecimalLossy\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"gt\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"gte\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"integer\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"inv\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"isZero\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"log10\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"lt\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"lte\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"max\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxNegativeValue\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxPositiveValue\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"min\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minNegativeValue\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minPositiveValue\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"minus\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"mul\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"str\",\"type\":\"string\"}],\"name\":\"parse\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"},{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"pow\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"pow10\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"sqrt\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"sub\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"float\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"name\":\"toFixedDecimalLossless\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"float\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"name\":\"toFixedDecimalLossy\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"zero\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"CoefficientOverflow(int256,int256)\":[{\"details\":\"Thrown when a coefficient overflows.\"}],\"DivisionByZero(int256,int256)\":[{\"details\":\"Thrown when dividing by zero.\",\"params\":{\"exponent\":\"The exponent of the numerator.\",\"signedCoefficient\":\"The signed coefficient of the numerator.\"}}],\"ExponentOverflow(int256,int256)\":[{\"details\":\"Thrown when an exponent overflows.\"}],\"Log10Negative(int256,int256)\":[{\"details\":\"Thrown when attempting to calculate the log of a negative number.\"}],\"Log10Zero()\":[{\"details\":\"Thrown when attempting to calculate the log of 0.\"}],\"LogTablesNotDeployed(address,bytes32,bytes32)\":[{\"details\":\"Thrown when constructing a `DecimalFloat` on a chain where the log tables data contract is not deployed at the expected address with the expected codehash. Without this check, transcendental functions (`pow10`/`log10`/`pow`/`sqrt`) would silently `extcodecopy` zero bytes and return garbage.\",\"params\":{\"actualCodehash\":\"The codehash currently at `tablesAddress` (zero if no contract is deployed there).\",\"expectedCodehash\":\"The codehash the deployed table contract is expected to have.\",\"tablesAddress\":\"The address `DecimalFloat` was compiled to read log tables from.\"}}],\"LossyConversionFromFloat(int256,int256)\":[{\"details\":\"Thrown when converting a float to some value when the conversion is lossy.\"}],\"LossyConversionToFloat(int256,int256)\":[{\"details\":\"Thrown when converting some value to a float when the conversion is lossy.\"}],\"MaximizeOverflow(int256,int256)\":[{\"details\":\"Thrown when a maximize overflows where it is not appropriate.\"}],\"MulDivOverflow(uint256,uint256,uint256)\":[{\"details\":\"Thrown when mulDiv internal to division overflows.\"}],\"NegativeFixedDecimalConversion(int256,int256)\":[{\"details\":\"Thrown when attempting to convert a negative number to an unsigned fixed-point number.\"}],\"PowNegativeBase(int256,int256)\":[{\"details\":\"Thrown when attempting to exponentiate a negative base.\"}],\"ScientificMinNotLessThanMax(bytes32,bytes32)\":[{\"details\":\"Thrown when scientificMin is not less than scientificMax in format.\",\"params\":{\"scientificMax\":\"The maximum threshold for scientific notation.\",\"scientificMin\":\"The minimum threshold for scientific notation.\"}}],\"UnformatableExponent(int256)\":[{\"details\":\"Thrown when the exponent cannot be formatted.\",\"params\":{\"exponent\":\"The exponent that cannot be formatted.\"}}],\"WithTargetExponentOverflow(int256,int256,int256)\":[{\"details\":\"Thrown when attempting to rescale a coefficient to a target exponent\"}],\"ZeroNegativePower(bytes32)\":[{\"details\":\"Thrown when attempting to exponentiate 0^b where b is negative.\"}]},\"kind\":\"dev\",\"methods\":{\"abs(bytes32)\":{\"params\":{\"a\":\"The float to get the absolute value of.\"},\"returns\":{\"_0\":\"The absolute value of the float.\"}},\"add(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to add.\",\"b\":\"The second float to add.\"},\"returns\":{\"_0\":\"The sum of the two floats.\"}},\"ceil(bytes32)\":{\"params\":{\"a\":\"The float to get the ceiling of.\"},\"returns\":{\"_0\":\"The ceiled float.\"}},\"div(bytes32,bytes32)\":{\"params\":{\"a\":\"The dividend (numerator).\",\"b\":\"The divisor (denominator).\"},\"returns\":{\"_0\":\"The quotient of the two floats.\"}},\"e()\":{\"returns\":{\"_0\":\"The constant value of Euler's number as a Float.\"}},\"eq(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to compare.\",\"b\":\"The second float to compare.\"},\"returns\":{\"_0\":\"True if the two floats are equal, false otherwise.\"}},\"floor(bytes32)\":{\"params\":{\"a\":\"The float to get the floor of.\"},\"returns\":{\"_0\":\"The floored float.\"}},\"format(bytes32)\":{\"params\":{\"a\":\"The float to format.\"},\"returns\":{\"_0\":\"The string representation of the float.\"}},\"format(bytes32,bool)\":{\"params\":{\"a\":\"The float to format.\",\"scientific\":\"Whether to format the float in scientific notation.\"},\"returns\":{\"_0\":\"The string representation of the float.\"}},\"format(bytes32,bytes32,bytes32)\":{\"params\":{\"a\":\"The float to format. The absolute value of `a` is used to determine if scientific notation is used, this allows negative numbers to be formatted consistently with their positive counterparts.\",\"scientificMax\":\"The largest number that won't be formatted in scientific notation.\",\"scientificMin\":\"The smallest number that won't be formatted in scientific notation.\"},\"returns\":{\"_0\":\"The string representation of the float.\"}},\"frac(bytes32)\":{\"params\":{\"a\":\"The float to get the fractional part of.\"},\"returns\":{\"_0\":\"The fractional part of the float.\"}},\"fromFixedDecimalLossless(uint256,uint8)\":{\"params\":{\"decimals\":\"The number of decimals in the fixed point representation. e.g. If 1e18 represents 1 this would be 18 decimals.\",\"value\":\"The fixed point decimal value to convert.\"},\"returns\":{\"_0\":\"float The Float struct containing the signed coefficient and exponent.\"}},\"fromFixedDecimalLossy(uint256,uint8)\":{\"params\":{\"decimals\":\"The number of decimals in the fixed point representation. e.g. If 1e18 represents 1 this would be 18 decimals.\",\"value\":\"The fixed point decimal value to convert.\"},\"returns\":{\"_0\":\"float The Float struct containing the signed coefficient and exponent.\",\"_1\":\"lossless True if the conversion was lossless, false otherwise.\"}},\"gt(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to compare.\",\"b\":\"The second float to compare.\"},\"returns\":{\"_0\":\"True if the first float is greater than the second, false otherwise.\"}},\"gte(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to compare.\",\"b\":\"The second float to compare.\"},\"returns\":{\"_0\":\"True if the first float is greater than or equal to the second, false otherwise.\"}},\"integer(bytes32)\":{\"params\":{\"a\":\"The float to get the integer part of.\"},\"returns\":{\"_0\":\"The integer part of the float.\"}},\"inv(bytes32)\":{\"params\":{\"a\":\"The float to invert.\"},\"returns\":{\"_0\":\"The inverted float.\"}},\"isZero(bytes32)\":{\"params\":{\"a\":\"The float to check.\"},\"returns\":{\"_0\":\"True if the float is zero, false otherwise.\"}},\"log10(bytes32)\":{\"params\":{\"a\":\"The float to take the logarithm of.\"},\"returns\":{\"_0\":\"The logarithm of the float.\"}},\"lt(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to compare.\",\"b\":\"The second float to compare.\"},\"returns\":{\"_0\":\"True if the first float is less than the second, false otherwise.\"}},\"lte(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to compare.\",\"b\":\"The second float to compare.\"},\"returns\":{\"_0\":\"True if the first float is less than or equal to the second, false otherwise.\"}},\"max(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to compare.\",\"b\":\"The second float to compare.\"},\"returns\":{\"_0\":\"The larger of the two floats.\"}},\"maxNegativeValue()\":{\"returns\":{\"_0\":\"The maximum negative value of a Float.\"}},\"maxPositiveValue()\":{\"returns\":{\"_0\":\"The maximum positive value of a Float.\"}},\"min(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to compare.\",\"b\":\"The second float to compare.\"},\"returns\":{\"_0\":\"The smaller of the two floats.\"}},\"minNegativeValue()\":{\"returns\":{\"_0\":\"The minimum negative value of a Float.\"}},\"minPositiveValue()\":{\"returns\":{\"_0\":\"The minimum positive value of a Float.\"}},\"minus(bytes32)\":{\"params\":{\"a\":\"The float to negate.\"},\"returns\":{\"_0\":\"The negated float.\"}},\"mul(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to multiply.\",\"b\":\"The second float to multiply.\"},\"returns\":{\"_0\":\"The product of the two floats.\"}},\"parse(string)\":{\"params\":{\"str\":\"The string to parse.\"},\"returns\":{\"_0\":\"errorSelector The selector of the error if parsing failed. `0` if parsing succeeded.\",\"_1\":\"parsed The parsed float. Caller MUST check `errorSelector` to determine if parsing succeeded.\"}},\"pow(bytes32,bytes32)\":{\"params\":{\"a\":\"The base float.\",\"b\":\"The exponent float.\"},\"returns\":{\"_0\":\"The result of raising the base float to the power of the exponent\"}},\"pow10(bytes32)\":{\"params\":{\"a\":\"The exponent to raise 10 to.\"},\"returns\":{\"_0\":\"The result of 10^a.\"}},\"sqrt(bytes32)\":{\"params\":{\"a\":\"The float to take the square root of.\"},\"returns\":{\"_0\":\"The square root of the float.\"}},\"sub(bytes32,bytes32)\":{\"params\":{\"a\":\"The float to subtract from.\",\"b\":\"The float to subtract.\"},\"returns\":{\"_0\":\"The difference of the two floats.\"}},\"toFixedDecimalLossless(bytes32,uint8)\":{\"params\":{\"decimals\":\"The number of decimals in the fixed point representation. e.g. If 1e18 represents 1 this would be 18 decimals.\",\"float\":\"The Float struct to convert.\"},\"returns\":{\"_0\":\"The fixed point decimal value as a uint256.\"}},\"toFixedDecimalLossy(bytes32,uint8)\":{\"params\":{\"decimals\":\"The number of decimals in the fixed point representation. e.g. If 1e18 represents 1 this would be 18 decimals.\",\"float\":\"The Float struct to convert.\"},\"returns\":{\"_0\":\"value The fixed point decimal value as a uint256.\",\"_1\":\"lossless True if the conversion was lossless, false otherwise.\"}},\"zero()\":{\"returns\":{\"_0\":\"The zero value of a Float in its maximized representation.\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"ZeroStringStartPointer()\":[{\"notice\":\"The decimal string start pointer is zero.\"}]},\"kind\":\"user\",\"methods\":{\"FORMAT_DEFAULT_SCIENTIFIC_MAX()\":{\"notice\":\"The default maximum value for scientific formatting. 1e9\"},\"FORMAT_DEFAULT_SCIENTIFIC_MIN()\":{\"notice\":\"The default minimum value for scientific formatting. 1e-4\"},\"abs(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.abs` for offchain use.\"},\"add(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.add` for offchain use.\"},\"ceil(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.ceil` for offchain use.\"},\"div(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.div` for offchain use.\"},\"e()\":{\"notice\":\"Exposes `LibDecimalFloat.FLOAT_E` for offchain use.\"},\"eq(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.eq` for offchain use.\"},\"floor(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.floor` for offchain use.\"},\"format(bytes32)\":{\"notice\":\"Exposes `format(Float, Float, Float)` for offchain use. Provides default scientific formatting.\"},\"format(bytes32,bool)\":{\"notice\":\"Exposes `LibFormatDecimalFloat.toDecimalString` for offchain use. provides raw bool interface for custom scientific formatting.\"},\"format(bytes32,bytes32,bytes32)\":{\"notice\":\"Exposes `LibFormatDecimalFloat.toDecimalString` for offchain use.\"},\"frac(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.frac` for offchain use.\"},\"fromFixedDecimalLossless(uint256,uint8)\":{\"notice\":\"Exposes `LibDecimalFloat.fromFixedDecimalLosslessPacked` for offchain use.\"},\"fromFixedDecimalLossy(uint256,uint8)\":{\"notice\":\"Exposes `LibDecimalFloat.fromFixedDecimalLossyPacked` for offchain use.\"},\"gt(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.gt` for offchain use.\"},\"gte(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.gte` for offchain use.\"},\"integer(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.integer` for offchain use.\"},\"inv(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.inv` for offchain use.\"},\"isZero(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.isZero` for offchain use.\"},\"log10(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.log10` for offchain use.\"},\"lt(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.lt` for offchain use.\"},\"lte(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.lte` for offchain use.\"},\"max(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.max` for offchain use.\"},\"maxNegativeValue()\":{\"notice\":\"Exposes `LibDecimalFloat.FLOAT_MAX_NEGATIVE_VALUE` for offchain use.\"},\"maxPositiveValue()\":{\"notice\":\"Exposes `LibDecimalFloat.FLOAT_MAX_POSITIVE_VALUE` for offchain use.\"},\"min(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.min` for offchain use.\"},\"minNegativeValue()\":{\"notice\":\"Exposes `LibDecimalFloat.FLOAT_MIN_NEGATIVE_VALUE` for offchain use.\"},\"minPositiveValue()\":{\"notice\":\"Exposes `LibDecimalFloat.FLOAT_MIN_POSITIVE_VALUE` for offchain use.\"},\"minus(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.minus` for offchain use.\"},\"mul(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.mul` for offchain use.\"},\"parse(string)\":{\"notice\":\"Exposes `LibParseDecimalFloat.parseDecimalFloat` for offchain use.\"},\"pow(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.pow` for offchain use.\"},\"pow10(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.pow10` for offchain use.\"},\"sqrt(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.sqrt` for offchain use.\"},\"sub(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.sub` for offchain use.\"},\"toFixedDecimalLossless(bytes32,uint8)\":{\"notice\":\"Exposes `LibDecimalFloat.toFixedDecimalLossless` for offchain use.\"},\"toFixedDecimalLossy(bytes32,uint8)\":{\"notice\":\"Exposes `LibDecimalFloat.toFixedDecimalLossy` for offchain use.\"},\"zero()\":{\"notice\":\"Exposes `LibDecimalFloat.FLOAT_ZERO` for offchain use.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/concrete/DecimalFloat.sol\":\"DecimalFloat\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"appendCBOR\":false,\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[\":@openzeppelin-contracts-5.6.1/=dependencies/@openzeppelin-contracts-5.6.1/\",\":forge-std-1.16.1/=dependencies/forge-std-1.16.1/\",\":mut/=dependencies/rain-string-0.2.0/src/lib/mut/\",\":parse/=dependencies/rain-string-0.2.0/src/lib/parse/\",\":rain-datacontract-0.1.0/=dependencies/rain-datacontract-0.1.0/\",\":rain-deploy-0.1.2/=dependencies/rain-deploy-0.1.2/\",\":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/\"]},\"sources\":{\"dependencies/@openzeppelin-contracts-5.6.1/utils/Bytes.sol\":{\"keccak256\":\"0xf80e4b96b6849936ea0fabd76cf81b13d7276295fddb1e1c07afb3ddf650b0ac\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6430007255ac11c6e9c4331a418f3af52ff66fbbae959f645301d025b20aeb08\",\"dweb:/ipfs/QmQE5fjmBBRw9ndnzJuC2uskYss1gbaR7JdazoCf1FGoBj\"]},\"dependencies/@openzeppelin-contracts-5.6.1/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"dependencies/@openzeppelin-contracts-5.6.1/utils/Strings.sol\":{\"keccak256\":\"0x1fdc2de9585ab0f1c417f02a873a2b6343cd64bb7ffec6b00ffa11a4a158d9e8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ab223a3d969c6cd7610049431dd42740960c477e45878f5d8b54411f7a32bdc\",\"dweb:/ipfs/QmWumhjvhpKcwx3vDPQninsNVTc3BGvqaihkQakFkQYpaS\"]},\"dependencies/@openzeppelin-contracts-5.6.1/utils/math/Math.sol\":{\"keccak256\":\"0x59973a93b1f983f94e10529f46ca46544a9fec2b5f56fb1390bbe9e0dc79f857\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c55ef8f0b9719790c2ae6f81d80a59ffb89f2f0abe6bc065585bd79edce058c5\",\"dweb:/ipfs/QmNNmCbX9NjPXKqHJN8R1WC2rNeZSQrPZLd6FF6AKLyH5Y\"]},\"dependencies/@openzeppelin-contracts-5.6.1/utils/math/SafeCast.sol\":{\"keccak256\":\"0xc8cae21c9ae4a46e5162ff9bf5b351d6fa6a6eba72d515f3bc1bdfeda7fdf083\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce830ebcf28e31643caba318996db3763c36d52cd0f23798ba83c135355d45e9\",\"dweb:/ipfs/QmdGPcvptHN7UBCbUYBbRX3hiRVRFLRwno8b4uga6uFNif\"]},\"dependencies/@openzeppelin-contracts-5.6.1/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]},\"dependencies/rain-string-0.2.0/src/error/ErrParse.sol\":{\"keccak256\":\"0x7a69236ad67e39c20f6ade7973ec551c9a5bb5db4671c8afa95b80f35a996497\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://4731c6ea05b4e820814380dbbd6dac14f5778a1e9194b8992148cf97a99ffbb2\",\"dweb:/ipfs/QmUMnKNt2zQ42fjS4fpLqodXytiffVFzaKupAm8rNsrYVo\"]},\"dependencies/rain-string-0.2.0/src/lib/parse/LibParseCMask.sol\":{\"keccak256\":\"0x91e798a6f71aafbd4743720eaa38a7f16f74c6c0ab2992e7e4982979e9df539a\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://4782e62e0e5a5fbc7d6c757dcc90347d7ad064f25372a6c471ffa968e12b91d7\",\"dweb:/ipfs/QmPohMsVTjm19gxYwxgAsTKJQRjkK2J1Pyah63nCtYBBnt\"]},\"dependencies/rain-string-0.2.0/src/lib/parse/LibParseChar.sol\":{\"keccak256\":\"0x66c401d784e9461f709116441de3707685e08438cd83553db28fe8caf0e97238\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://e6027d0f9d558953686f6eb78ca0b2f2e7d9d38e0be6d1435ffaaa4b90919593\",\"dweb:/ipfs/QmQXDMTzmJrst2a4kHkcfjSsEdnPc4ikQs7VfGbCfe9QCc\"]},\"dependencies/rain-string-0.2.0/src/lib/parse/LibParseDecimal.sol\":{\"keccak256\":\"0x72ccc4d7e0a1245897511e1efc15ddc80d423a8eb956249be7940a8e8f4e99fe\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://3ca57acd6a7cbe16f2c03aa5a6e81ec7af1ad44078924358578560a32aead7c0\",\"dweb:/ipfs/QmNukyUMS4JrzNHAYcpLbtYsD5CwYPEjfAaADv6qMZmqs6\"]},\"src/concrete/DecimalFloat.sol\":{\"keccak256\":\"0x6326a6b5ffef0708b84712c0b891dfc7f2d88c38191628da1f40933951f2683b\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://ad99eda6cc266d5d160439700d3c89a487e8e31d51538f2ad83435a1aac9f3ae\",\"dweb:/ipfs/QmarsuZkgqG7jT9mYBh1VKNvjD5ZsVtJJTiRGbfMQAY669\"]},\"src/error/ErrDecimalFloat.sol\":{\"keccak256\":\"0x53825ff4d1af4981100de46bd7536c611625fe7930b5c21921838cfed3a92243\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://961197f4c7b6d560f71f67892bfd5b64300be0f0fdb20162058938567653643e\",\"dweb:/ipfs/QmTJzmA5CEkmYrXJ2MHnfQ3wGm1Qj6xE1vNaqAqgUpEnvA\"]},\"src/error/ErrFormat.sol\":{\"keccak256\":\"0xc760cb6018291753e7408d55d12d5e66c116f9750dc241bbc201f3b46ae33aa7\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://cbc81bb7c26c8503926b579f978902bcc3227839bee04bd3500cc924d142d28e\",\"dweb:/ipfs/QmXqMuqBCpckD1EnsBjweyLdRZxpvC2xSP9FWBZFh2vztR\"]},\"src/error/ErrParse.sol\":{\"keccak256\":\"0x7fc9fe7421d78306d252d2853fd1be943d9cbd12ff7a9c8c3f286a8164bfe357\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://7b4c434d01b53788968d185683d9633afa26d95396b1e91337a53ccaab0d44ab\",\"dweb:/ipfs/QmQHmVjR37wwrCskiQviwkg7WkeBpr9uPddjuDxqzANXeV\"]},\"src/generated/LogTables.pointers.sol\":{\"keccak256\":\"0x2325d92e3e248350a79f163fcb8738056ae4240b6a77f759ff5fcbf7b381f5ae\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://9a52674114518573de7d184094b266bc2b5208953086f8ec35a494f048deefbb\",\"dweb:/ipfs/QmTjuj1R9k4pFMBVpX6RcWG87Rdh9pRTZVHYo93SzBfmsH\"]},\"src/lib/LibDecimalFloat.sol\":{\"keccak256\":\"0x59d2dad4b7e861ed835a79c61ae42b4b0d628f9c578f3bb3ecd7796ed530f196\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://e565148a37f06299de3b6bcb3385ea0336f65c6c02c9ebfbc6f227f4e56d1c03\",\"dweb:/ipfs/Qma6UNZifZc8zsf7J6B87CdCXhiCR6Zisyg9czsfaji6yY\"]},\"src/lib/deploy/LibDecimalFloatDeploy.sol\":{\"keccak256\":\"0x79f59754c234e55420359efaa9af6ec851fadf8dfaecda6860c1ef99abcf1e64\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://8303dde773c7c613981011fe9ee5d976338b3dab9c66cd67516a82b094596343\",\"dweb:/ipfs/QmQnkeaReEwkKcFMvegAuuBoF2WyirRQmQG9CjKfdhQKnZ\"]},\"src/lib/format/LibFormatDecimalFloat.sol\":{\"keccak256\":\"0x5aac6382e7f7040e68600333c1b00b0aedb3edb6bced84b63783f6d88fe0b4f0\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://e96d30e34e1fa2cc4eb574ded30c0f6f93929dcc19cb571f555ca8c5ac32eaa7\",\"dweb:/ipfs/QmRRtk84AqEdQrRXfeTzVUAbAktJTZ92iTLqjocQV4PDx7\"]},\"src/lib/implementation/LibDecimalFloatImplementation.sol\":{\"keccak256\":\"0x47d0eeb542875548689465407162a19e4a21fb4591af5bb48d5758c0d1b93634\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://631efb796ff17f277804f8a32df7d28630c2ae5300e7d74c37aa8ed1f86b5092\",\"dweb:/ipfs/QmSfmMGQyxKYxu8UrWDEtuCggQ9HtFJy5cbMsYLPZbcTZ7\"]},\"src/lib/parse/LibParseDecimalFloat.sol\":{\"keccak256\":\"0x703d2d37d8a14639a3eb2dcd61601b36552027e16b4e8414befe51f2d0b9ed38\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://53fa45503e115a322a701a1289c5b5fcbe68090c83e0635af77d275d123f09f0\",\"dweb:/ipfs/QmTBtz8uPLYXrTue9SmHBVdgjpFJYUU41Z48PAgu1nXafn\"]},\"src/lib/table/LibLogTable.sol\":{\"keccak256\":\"0xccd2dea54cfb708c01e7e8e88c089742bbab18f5783be4632311fb4923d44c88\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://f45fb78c16b5d66d56ba0e78acdb0ca5d315eb05efa2cd7a81e191aabe7aec52\",\"dweb:/ipfs/QmQJ3TFFxTMu4HZ4qnjgmdmSNhGZLQRdCnSqAipEF1up1f\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.25+commit.b61c2a91" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "int256", + "name": "signedCoefficient", + "type": "int256" + }, + { "internalType": "int256", "name": "exponent", "type": "int256" } + ], + "type": "error", + "name": "CoefficientOverflow" + }, + { + "inputs": [ + { + "internalType": "int256", + "name": "signedCoefficient", + "type": "int256" + }, + { "internalType": "int256", "name": "exponent", "type": "int256" } + ], + "type": "error", + "name": "DivisionByZero" + }, + { + "inputs": [ + { + "internalType": "int256", + "name": "signedCoefficient", + "type": "int256" + }, + { "internalType": "int256", "name": "exponent", "type": "int256" } + ], + "type": "error", + "name": "ExponentOverflow" + }, + { + "inputs": [ + { + "internalType": "int256", + "name": "signedCoefficient", + "type": "int256" + }, + { "internalType": "int256", "name": "exponent", "type": "int256" } + ], + "type": "error", + "name": "Log10Negative" + }, + { "inputs": [], "type": "error", "name": "Log10Zero" }, + { + "inputs": [ + { + "internalType": "address", + "name": "tablesAddress", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "expectedCodehash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "actualCodehash", + "type": "bytes32" + } + ], + "type": "error", + "name": "LogTablesNotDeployed" + }, + { + "inputs": [ + { + "internalType": "int256", + "name": "signedCoefficient", + "type": "int256" + }, + { "internalType": "int256", "name": "exponent", "type": "int256" } + ], + "type": "error", + "name": "LossyConversionFromFloat" + }, + { + "inputs": [ + { + "internalType": "int256", + "name": "signedCoefficient", + "type": "int256" + }, + { "internalType": "int256", "name": "exponent", "type": "int256" } + ], + "type": "error", + "name": "LossyConversionToFloat" + }, + { + "inputs": [ + { + "internalType": "int256", + "name": "signedCoefficient", + "type": "int256" + }, + { "internalType": "int256", "name": "exponent", "type": "int256" } + ], + "type": "error", + "name": "MaximizeOverflow" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "x", "type": "uint256" }, + { "internalType": "uint256", "name": "y", "type": "uint256" }, + { + "internalType": "uint256", + "name": "denominator", + "type": "uint256" + } + ], + "type": "error", + "name": "MulDivOverflow" + }, + { + "inputs": [ + { + "internalType": "int256", + "name": "signedCoefficient", + "type": "int256" + }, + { "internalType": "int256", "name": "exponent", "type": "int256" } + ], + "type": "error", + "name": "NegativeFixedDecimalConversion" + }, + { + "inputs": [ + { + "internalType": "int256", + "name": "signedCoefficient", + "type": "int256" + }, + { "internalType": "int256", "name": "exponent", "type": "int256" } + ], + "type": "error", + "name": "PowNegativeBase" + }, + { + "inputs": [ + { + "internalType": "Float", + "name": "scientificMin", + "type": "bytes32" + }, + { + "internalType": "Float", + "name": "scientificMax", + "type": "bytes32" + } + ], + "type": "error", + "name": "ScientificMinNotLessThanMax" + }, + { + "inputs": [ + { "internalType": "int256", "name": "exponent", "type": "int256" } + ], + "type": "error", + "name": "UnformatableExponent" + }, + { + "inputs": [ + { + "internalType": "int256", + "name": "signedCoefficient", + "type": "int256" + }, + { "internalType": "int256", "name": "exponent", "type": "int256" }, + { + "internalType": "int256", + "name": "targetExponent", + "type": "int256" + } + ], + "type": "error", + "name": "WithTargetExponentOverflow" + }, + { + "inputs": [ + { "internalType": "Float", "name": "b", "type": "bytes32" } + ], + "type": "error", + "name": "ZeroNegativePower" + }, + { "inputs": [], "type": "error", "name": "ZeroStringStartPointer" }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "FORMAT_DEFAULT_SCIENTIFIC_MAX", + "outputs": [ + { "internalType": "Float", "name": "", "type": "bytes32" } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "FORMAT_DEFAULT_SCIENTIFIC_MIN", + "outputs": [ + { "internalType": "Float", "name": "", "type": "bytes32" } + ] + }, + { + "inputs": [ + { "internalType": "Float", "name": "a", "type": "bytes32" } + ], + "stateMutability": "pure", + "type": "function", + "name": "abs", + "outputs": [ + { "internalType": "Float", "name": "", "type": "bytes32" } + ] + }, + { + "inputs": [ + { "internalType": "Float", "name": "a", "type": "bytes32" }, + { "internalType": "Float", "name": "b", "type": "bytes32" } + ], + "stateMutability": "pure", + "type": "function", + "name": "add", + "outputs": [ + { "internalType": "Float", "name": "", "type": "bytes32" } + ] + }, + { + "inputs": [ + { "internalType": "Float", "name": "a", "type": "bytes32" } + ], + "stateMutability": "pure", + "type": "function", + "name": "ceil", + "outputs": [ + { "internalType": "Float", "name": "", "type": "bytes32" } + ] + }, + { + "inputs": [ + { "internalType": "Float", "name": "a", "type": "bytes32" }, + { "internalType": "Float", "name": "b", "type": "bytes32" } + ], + "stateMutability": "pure", + "type": "function", + "name": "div", + "outputs": [ + { "internalType": "Float", "name": "", "type": "bytes32" } + ] + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "e", + "outputs": [ + { "internalType": "Float", "name": "", "type": "bytes32" } + ] + }, + { + "inputs": [ + { "internalType": "Float", "name": "a", "type": "bytes32" }, + { "internalType": "Float", "name": "b", "type": "bytes32" } + ], + "stateMutability": "pure", + "type": "function", + "name": "eq", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { "internalType": "Float", "name": "a", "type": "bytes32" } + ], + "stateMutability": "pure", + "type": "function", + "name": "floor", + "outputs": [ + { "internalType": "Float", "name": "", "type": "bytes32" } + ] + }, + { + "inputs": [ + { "internalType": "Float", "name": "a", "type": "bytes32" }, + { "internalType": "bool", "name": "scientific", "type": "bool" } + ], + "stateMutability": "pure", + "type": "function", + "name": "format", + "outputs": [ + { "internalType": "string", "name": "", "type": "string" } + ] + }, + { + "inputs": [ + { "internalType": "Float", "name": "a", "type": "bytes32" } + ], + "stateMutability": "pure", + "type": "function", + "name": "format", + "outputs": [ + { "internalType": "string", "name": "", "type": "string" } + ] + }, + { + "inputs": [ + { "internalType": "Float", "name": "a", "type": "bytes32" }, + { + "internalType": "Float", + "name": "scientificMin", + "type": "bytes32" + }, + { + "internalType": "Float", + "name": "scientificMax", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function", + "name": "format", + "outputs": [ + { "internalType": "string", "name": "", "type": "string" } + ] + }, + { + "inputs": [ + { "internalType": "Float", "name": "a", "type": "bytes32" } + ], + "stateMutability": "pure", + "type": "function", + "name": "frac", + "outputs": [ + { "internalType": "Float", "name": "", "type": "bytes32" } + ] + }, + { + "inputs": [ + { "internalType": "uint256", "name": "value", "type": "uint256" }, + { "internalType": "uint8", "name": "decimals", "type": "uint8" } + ], + "stateMutability": "pure", + "type": "function", + "name": "fromFixedDecimalLossless", + "outputs": [ + { "internalType": "Float", "name": "", "type": "bytes32" } + ] + }, + { + "inputs": [ + { "internalType": "uint256", "name": "value", "type": "uint256" }, + { "internalType": "uint8", "name": "decimals", "type": "uint8" } + ], + "stateMutability": "pure", + "type": "function", + "name": "fromFixedDecimalLossy", + "outputs": [ + { "internalType": "Float", "name": "", "type": "bytes32" }, + { "internalType": "bool", "name": "", "type": "bool" } + ] + }, + { + "inputs": [ + { "internalType": "Float", "name": "a", "type": "bytes32" }, + { "internalType": "Float", "name": "b", "type": "bytes32" } + ], + "stateMutability": "pure", + "type": "function", + "name": "gt", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { "internalType": "Float", "name": "a", "type": "bytes32" }, + { "internalType": "Float", "name": "b", "type": "bytes32" } + ], + "stateMutability": "pure", + "type": "function", + "name": "gte", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { "internalType": "Float", "name": "a", "type": "bytes32" } + ], + "stateMutability": "pure", + "type": "function", + "name": "integer", + "outputs": [ + { "internalType": "Float", "name": "", "type": "bytes32" } + ] + }, + { + "inputs": [ + { "internalType": "Float", "name": "a", "type": "bytes32" } + ], + "stateMutability": "pure", + "type": "function", + "name": "inv", + "outputs": [ + { "internalType": "Float", "name": "", "type": "bytes32" } + ] + }, + { + "inputs": [ + { "internalType": "Float", "name": "a", "type": "bytes32" } + ], + "stateMutability": "pure", + "type": "function", + "name": "isZero", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { "internalType": "Float", "name": "a", "type": "bytes32" } + ], + "stateMutability": "view", + "type": "function", + "name": "log10", + "outputs": [ + { "internalType": "Float", "name": "", "type": "bytes32" } + ] + }, + { + "inputs": [ + { "internalType": "Float", "name": "a", "type": "bytes32" }, + { "internalType": "Float", "name": "b", "type": "bytes32" } + ], + "stateMutability": "pure", + "type": "function", + "name": "lt", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { "internalType": "Float", "name": "a", "type": "bytes32" }, + { "internalType": "Float", "name": "b", "type": "bytes32" } + ], + "stateMutability": "pure", + "type": "function", + "name": "lte", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { "internalType": "Float", "name": "a", "type": "bytes32" }, + { "internalType": "Float", "name": "b", "type": "bytes32" } + ], + "stateMutability": "pure", + "type": "function", + "name": "max", + "outputs": [ + { "internalType": "Float", "name": "", "type": "bytes32" } + ] + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "maxNegativeValue", + "outputs": [ + { "internalType": "Float", "name": "", "type": "bytes32" } + ] + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "maxPositiveValue", + "outputs": [ + { "internalType": "Float", "name": "", "type": "bytes32" } + ] + }, + { + "inputs": [ + { "internalType": "Float", "name": "a", "type": "bytes32" }, + { "internalType": "Float", "name": "b", "type": "bytes32" } + ], + "stateMutability": "pure", + "type": "function", + "name": "min", + "outputs": [ + { "internalType": "Float", "name": "", "type": "bytes32" } + ] + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "minNegativeValue", + "outputs": [ + { "internalType": "Float", "name": "", "type": "bytes32" } + ] + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "minPositiveValue", + "outputs": [ + { "internalType": "Float", "name": "", "type": "bytes32" } + ] + }, + { + "inputs": [ + { "internalType": "Float", "name": "a", "type": "bytes32" } + ], + "stateMutability": "pure", + "type": "function", + "name": "minus", + "outputs": [ + { "internalType": "Float", "name": "", "type": "bytes32" } + ] + }, + { + "inputs": [ + { "internalType": "Float", "name": "a", "type": "bytes32" }, + { "internalType": "Float", "name": "b", "type": "bytes32" } + ], + "stateMutability": "pure", + "type": "function", + "name": "mul", + "outputs": [ + { "internalType": "Float", "name": "", "type": "bytes32" } + ] + }, + { + "inputs": [ + { "internalType": "string", "name": "str", "type": "string" } + ], + "stateMutability": "pure", + "type": "function", + "name": "parse", + "outputs": [ + { "internalType": "bytes4", "name": "", "type": "bytes4" }, + { "internalType": "Float", "name": "", "type": "bytes32" } + ] + }, + { + "inputs": [ + { "internalType": "Float", "name": "a", "type": "bytes32" }, + { "internalType": "Float", "name": "b", "type": "bytes32" } + ], + "stateMutability": "view", + "type": "function", + "name": "pow", + "outputs": [ + { "internalType": "Float", "name": "", "type": "bytes32" } + ] + }, + { + "inputs": [ + { "internalType": "Float", "name": "a", "type": "bytes32" } + ], + "stateMutability": "view", + "type": "function", + "name": "pow10", + "outputs": [ + { "internalType": "Float", "name": "", "type": "bytes32" } + ] + }, + { + "inputs": [ + { "internalType": "Float", "name": "a", "type": "bytes32" } + ], + "stateMutability": "view", + "type": "function", + "name": "sqrt", + "outputs": [ + { "internalType": "Float", "name": "", "type": "bytes32" } + ] + }, + { + "inputs": [ + { "internalType": "Float", "name": "a", "type": "bytes32" }, + { "internalType": "Float", "name": "b", "type": "bytes32" } + ], + "stateMutability": "pure", + "type": "function", + "name": "sub", + "outputs": [ + { "internalType": "Float", "name": "", "type": "bytes32" } + ] + }, + { + "inputs": [ + { "internalType": "Float", "name": "float", "type": "bytes32" }, + { "internalType": "uint8", "name": "decimals", "type": "uint8" } + ], + "stateMutability": "pure", + "type": "function", + "name": "toFixedDecimalLossless", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ] + }, + { + "inputs": [ + { "internalType": "Float", "name": "float", "type": "bytes32" }, + { "internalType": "uint8", "name": "decimals", "type": "uint8" } + ], + "stateMutability": "pure", + "type": "function", + "name": "toFixedDecimalLossy", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" }, + { "internalType": "bool", "name": "", "type": "bool" } + ] + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "zero", + "outputs": [ + { "internalType": "Float", "name": "", "type": "bytes32" } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "abs(bytes32)": { + "params": { "a": "The float to get the absolute value of." }, + "returns": { "_0": "The absolute value of the float." } + }, + "add(bytes32,bytes32)": { + "params": { + "a": "The first float to add.", + "b": "The second float to add." + }, + "returns": { "_0": "The sum of the two floats." } + }, + "ceil(bytes32)": { + "params": { "a": "The float to get the ceiling of." }, + "returns": { "_0": "The ceiled float." } + }, + "div(bytes32,bytes32)": { + "params": { + "a": "The dividend (numerator).", + "b": "The divisor (denominator)." + }, + "returns": { "_0": "The quotient of the two floats." } + }, + "e()": { + "returns": { + "_0": "The constant value of Euler's number as a Float." + } + }, + "eq(bytes32,bytes32)": { + "params": { + "a": "The first float to compare.", + "b": "The second float to compare." + }, + "returns": { + "_0": "True if the two floats are equal, false otherwise." + } + }, + "floor(bytes32)": { + "params": { "a": "The float to get the floor of." }, + "returns": { "_0": "The floored float." } + }, + "format(bytes32)": { + "params": { "a": "The float to format." }, + "returns": { "_0": "The string representation of the float." } + }, + "format(bytes32,bool)": { + "params": { + "a": "The float to format.", + "scientific": "Whether to format the float in scientific notation." + }, + "returns": { "_0": "The string representation of the float." } + }, + "format(bytes32,bytes32,bytes32)": { + "params": { + "a": "The float to format. The absolute value of `a` is used to determine if scientific notation is used, this allows negative numbers to be formatted consistently with their positive counterparts.", + "scientificMax": "The largest number that won't be formatted in scientific notation.", + "scientificMin": "The smallest number that won't be formatted in scientific notation." + }, + "returns": { "_0": "The string representation of the float." } + }, + "frac(bytes32)": { + "params": { "a": "The float to get the fractional part of." }, + "returns": { "_0": "The fractional part of the float." } + }, + "fromFixedDecimalLossless(uint256,uint8)": { + "params": { + "decimals": "The number of decimals in the fixed point representation. e.g. If 1e18 represents 1 this would be 18 decimals.", + "value": "The fixed point decimal value to convert." + }, + "returns": { + "_0": "float The Float struct containing the signed coefficient and exponent." + } + }, + "fromFixedDecimalLossy(uint256,uint8)": { + "params": { + "decimals": "The number of decimals in the fixed point representation. e.g. If 1e18 represents 1 this would be 18 decimals.", + "value": "The fixed point decimal value to convert." + }, + "returns": { + "_0": "float The Float struct containing the signed coefficient and exponent.", + "_1": "lossless True if the conversion was lossless, false otherwise." + } + }, + "gt(bytes32,bytes32)": { + "params": { + "a": "The first float to compare.", + "b": "The second float to compare." + }, + "returns": { + "_0": "True if the first float is greater than the second, false otherwise." + } + }, + "gte(bytes32,bytes32)": { + "params": { + "a": "The first float to compare.", + "b": "The second float to compare." + }, + "returns": { + "_0": "True if the first float is greater than or equal to the second, false otherwise." + } + }, + "integer(bytes32)": { + "params": { "a": "The float to get the integer part of." }, + "returns": { "_0": "The integer part of the float." } + }, + "inv(bytes32)": { + "params": { "a": "The float to invert." }, + "returns": { "_0": "The inverted float." } + }, + "isZero(bytes32)": { + "params": { "a": "The float to check." }, + "returns": { "_0": "True if the float is zero, false otherwise." } + }, + "log10(bytes32)": { + "params": { "a": "The float to take the logarithm of." }, + "returns": { "_0": "The logarithm of the float." } + }, + "lt(bytes32,bytes32)": { + "params": { + "a": "The first float to compare.", + "b": "The second float to compare." + }, + "returns": { + "_0": "True if the first float is less than the second, false otherwise." + } + }, + "lte(bytes32,bytes32)": { + "params": { + "a": "The first float to compare.", + "b": "The second float to compare." + }, + "returns": { + "_0": "True if the first float is less than or equal to the second, false otherwise." + } + }, + "max(bytes32,bytes32)": { + "params": { + "a": "The first float to compare.", + "b": "The second float to compare." + }, + "returns": { "_0": "The larger of the two floats." } + }, + "maxNegativeValue()": { + "returns": { "_0": "The maximum negative value of a Float." } + }, + "maxPositiveValue()": { + "returns": { "_0": "The maximum positive value of a Float." } + }, + "min(bytes32,bytes32)": { + "params": { + "a": "The first float to compare.", + "b": "The second float to compare." + }, + "returns": { "_0": "The smaller of the two floats." } + }, + "minNegativeValue()": { + "returns": { "_0": "The minimum negative value of a Float." } + }, + "minPositiveValue()": { + "returns": { "_0": "The minimum positive value of a Float." } + }, + "minus(bytes32)": { + "params": { "a": "The float to negate." }, + "returns": { "_0": "The negated float." } + }, + "mul(bytes32,bytes32)": { + "params": { + "a": "The first float to multiply.", + "b": "The second float to multiply." + }, + "returns": { "_0": "The product of the two floats." } + }, + "parse(string)": { + "params": { "str": "The string to parse." }, + "returns": { + "_0": "errorSelector The selector of the error if parsing failed. `0` if parsing succeeded.", + "_1": "parsed The parsed float. Caller MUST check `errorSelector` to determine if parsing succeeded." + } + }, + "pow(bytes32,bytes32)": { + "params": { "a": "The base float.", "b": "The exponent float." }, + "returns": { + "_0": "The result of raising the base float to the power of the exponent" + } + }, + "pow10(bytes32)": { + "params": { "a": "The exponent to raise 10 to." }, + "returns": { "_0": "The result of 10^a." } + }, + "sqrt(bytes32)": { + "params": { "a": "The float to take the square root of." }, + "returns": { "_0": "The square root of the float." } + }, + "sub(bytes32,bytes32)": { + "params": { + "a": "The float to subtract from.", + "b": "The float to subtract." + }, + "returns": { "_0": "The difference of the two floats." } + }, + "toFixedDecimalLossless(bytes32,uint8)": { + "params": { + "decimals": "The number of decimals in the fixed point representation. e.g. If 1e18 represents 1 this would be 18 decimals.", + "float": "The Float struct to convert." + }, + "returns": { "_0": "The fixed point decimal value as a uint256." } + }, + "toFixedDecimalLossy(bytes32,uint8)": { + "params": { + "decimals": "The number of decimals in the fixed point representation. e.g. If 1e18 represents 1 this would be 18 decimals.", + "float": "The Float struct to convert." + }, + "returns": { + "_0": "value The fixed point decimal value as a uint256.", + "_1": "lossless True if the conversion was lossless, false otherwise." + } + }, + "zero()": { + "returns": { + "_0": "The zero value of a Float in its maximized representation." + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "FORMAT_DEFAULT_SCIENTIFIC_MAX()": { + "notice": "The default maximum value for scientific formatting. 1e9" + }, + "FORMAT_DEFAULT_SCIENTIFIC_MIN()": { + "notice": "The default minimum value for scientific formatting. 1e-4" + }, + "abs(bytes32)": { + "notice": "Exposes `LibDecimalFloat.abs` for offchain use." + }, + "add(bytes32,bytes32)": { + "notice": "Exposes `LibDecimalFloat.add` for offchain use." + }, + "ceil(bytes32)": { + "notice": "Exposes `LibDecimalFloat.ceil` for offchain use." + }, + "div(bytes32,bytes32)": { + "notice": "Exposes `LibDecimalFloat.div` for offchain use." + }, + "e()": { + "notice": "Exposes `LibDecimalFloat.FLOAT_E` for offchain use." + }, + "eq(bytes32,bytes32)": { + "notice": "Exposes `LibDecimalFloat.eq` for offchain use." + }, + "floor(bytes32)": { + "notice": "Exposes `LibDecimalFloat.floor` for offchain use." + }, + "format(bytes32)": { + "notice": "Exposes `format(Float, Float, Float)` for offchain use. Provides default scientific formatting." + }, + "format(bytes32,bool)": { + "notice": "Exposes `LibFormatDecimalFloat.toDecimalString` for offchain use. provides raw bool interface for custom scientific formatting." + }, + "format(bytes32,bytes32,bytes32)": { + "notice": "Exposes `LibFormatDecimalFloat.toDecimalString` for offchain use." + }, + "frac(bytes32)": { + "notice": "Exposes `LibDecimalFloat.frac` for offchain use." + }, + "fromFixedDecimalLossless(uint256,uint8)": { + "notice": "Exposes `LibDecimalFloat.fromFixedDecimalLosslessPacked` for offchain use." + }, + "fromFixedDecimalLossy(uint256,uint8)": { + "notice": "Exposes `LibDecimalFloat.fromFixedDecimalLossyPacked` for offchain use." + }, + "gt(bytes32,bytes32)": { + "notice": "Exposes `LibDecimalFloat.gt` for offchain use." + }, + "gte(bytes32,bytes32)": { + "notice": "Exposes `LibDecimalFloat.gte` for offchain use." + }, + "integer(bytes32)": { + "notice": "Exposes `LibDecimalFloat.integer` for offchain use." + }, + "inv(bytes32)": { + "notice": "Exposes `LibDecimalFloat.inv` for offchain use." + }, + "isZero(bytes32)": { + "notice": "Exposes `LibDecimalFloat.isZero` for offchain use." + }, + "log10(bytes32)": { + "notice": "Exposes `LibDecimalFloat.log10` for offchain use." + }, + "lt(bytes32,bytes32)": { + "notice": "Exposes `LibDecimalFloat.lt` for offchain use." + }, + "lte(bytes32,bytes32)": { + "notice": "Exposes `LibDecimalFloat.lte` for offchain use." + }, + "max(bytes32,bytes32)": { + "notice": "Exposes `LibDecimalFloat.max` for offchain use." + }, + "maxNegativeValue()": { + "notice": "Exposes `LibDecimalFloat.FLOAT_MAX_NEGATIVE_VALUE` for offchain use." + }, + "maxPositiveValue()": { + "notice": "Exposes `LibDecimalFloat.FLOAT_MAX_POSITIVE_VALUE` for offchain use." + }, + "min(bytes32,bytes32)": { + "notice": "Exposes `LibDecimalFloat.min` for offchain use." + }, + "minNegativeValue()": { + "notice": "Exposes `LibDecimalFloat.FLOAT_MIN_NEGATIVE_VALUE` for offchain use." + }, + "minPositiveValue()": { + "notice": "Exposes `LibDecimalFloat.FLOAT_MIN_POSITIVE_VALUE` for offchain use." + }, + "minus(bytes32)": { + "notice": "Exposes `LibDecimalFloat.minus` for offchain use." + }, + "mul(bytes32,bytes32)": { + "notice": "Exposes `LibDecimalFloat.mul` for offchain use." + }, + "parse(string)": { + "notice": "Exposes `LibParseDecimalFloat.parseDecimalFloat` for offchain use." + }, + "pow(bytes32,bytes32)": { + "notice": "Exposes `LibDecimalFloat.pow` for offchain use." + }, + "pow10(bytes32)": { + "notice": "Exposes `LibDecimalFloat.pow10` for offchain use." + }, + "sqrt(bytes32)": { + "notice": "Exposes `LibDecimalFloat.sqrt` for offchain use." + }, + "sub(bytes32,bytes32)": { + "notice": "Exposes `LibDecimalFloat.sub` for offchain use." + }, + "toFixedDecimalLossless(bytes32,uint8)": { + "notice": "Exposes `LibDecimalFloat.toFixedDecimalLossless` for offchain use." + }, + "toFixedDecimalLossy(bytes32,uint8)": { + "notice": "Exposes `LibDecimalFloat.toFixedDecimalLossy` for offchain use." + }, + "zero()": { + "notice": "Exposes `LibDecimalFloat.FLOAT_ZERO` for offchain use." + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin-contracts-5.6.1/=dependencies/@openzeppelin-contracts-5.6.1/", + "forge-std-1.16.1/=dependencies/forge-std-1.16.1/", + "mut/=dependencies/rain-string-0.2.0/src/lib/mut/", + "parse/=dependencies/rain-string-0.2.0/src/lib/parse/", + "rain-datacontract-0.1.0/=dependencies/rain-datacontract-0.1.0/", + "rain-deploy-0.1.2/=dependencies/rain-deploy-0.1.2/", + "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/" + ], + "optimizer": { "enabled": true, "runs": 1000000 }, + "metadata": { "bytecodeHash": "none", "appendCBOR": false }, + "compilationTarget": { "src/concrete/DecimalFloat.sol": "DecimalFloat" }, + "evmVersion": "cancun", + "libraries": {} + }, + "sources": { + "dependencies/@openzeppelin-contracts-5.6.1/utils/Bytes.sol": { + "keccak256": "0xf80e4b96b6849936ea0fabd76cf81b13d7276295fddb1e1c07afb3ddf650b0ac", + "urls": [ + "bzz-raw://6430007255ac11c6e9c4331a418f3af52ff66fbbae959f645301d025b20aeb08", + "dweb:/ipfs/QmQE5fjmBBRw9ndnzJuC2uskYss1gbaR7JdazoCf1FGoBj" + ], + "license": "MIT" + }, + "dependencies/@openzeppelin-contracts-5.6.1/utils/Panic.sol": { + "keccak256": "0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a", + "urls": [ + "bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a", + "dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG" + ], + "license": "MIT" + }, + "dependencies/@openzeppelin-contracts-5.6.1/utils/Strings.sol": { + "keccak256": "0x1fdc2de9585ab0f1c417f02a873a2b6343cd64bb7ffec6b00ffa11a4a158d9e8", + "urls": [ + "bzz-raw://1ab223a3d969c6cd7610049431dd42740960c477e45878f5d8b54411f7a32bdc", + "dweb:/ipfs/QmWumhjvhpKcwx3vDPQninsNVTc3BGvqaihkQakFkQYpaS" + ], + "license": "MIT" + }, + "dependencies/@openzeppelin-contracts-5.6.1/utils/math/Math.sol": { + "keccak256": "0x59973a93b1f983f94e10529f46ca46544a9fec2b5f56fb1390bbe9e0dc79f857", + "urls": [ + "bzz-raw://c55ef8f0b9719790c2ae6f81d80a59ffb89f2f0abe6bc065585bd79edce058c5", + "dweb:/ipfs/QmNNmCbX9NjPXKqHJN8R1WC2rNeZSQrPZLd6FF6AKLyH5Y" + ], + "license": "MIT" + }, + "dependencies/@openzeppelin-contracts-5.6.1/utils/math/SafeCast.sol": { + "keccak256": "0xc8cae21c9ae4a46e5162ff9bf5b351d6fa6a6eba72d515f3bc1bdfeda7fdf083", + "urls": [ + "bzz-raw://ce830ebcf28e31643caba318996db3763c36d52cd0f23798ba83c135355d45e9", + "dweb:/ipfs/QmdGPcvptHN7UBCbUYBbRX3hiRVRFLRwno8b4uga6uFNif" + ], + "license": "MIT" + }, + "dependencies/@openzeppelin-contracts-5.6.1/utils/math/SignedMath.sol": { + "keccak256": "0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3", + "urls": [ + "bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03", + "dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ" + ], + "license": "MIT" + }, + "dependencies/rain-string-0.2.0/src/error/ErrParse.sol": { + "keccak256": "0x7a69236ad67e39c20f6ade7973ec551c9a5bb5db4671c8afa95b80f35a996497", + "urls": [ + "bzz-raw://4731c6ea05b4e820814380dbbd6dac14f5778a1e9194b8992148cf97a99ffbb2", + "dweb:/ipfs/QmUMnKNt2zQ42fjS4fpLqodXytiffVFzaKupAm8rNsrYVo" + ], + "license": "LicenseRef-DCL-1.0" + }, + "dependencies/rain-string-0.2.0/src/lib/parse/LibParseCMask.sol": { + "keccak256": "0x91e798a6f71aafbd4743720eaa38a7f16f74c6c0ab2992e7e4982979e9df539a", + "urls": [ + "bzz-raw://4782e62e0e5a5fbc7d6c757dcc90347d7ad064f25372a6c471ffa968e12b91d7", + "dweb:/ipfs/QmPohMsVTjm19gxYwxgAsTKJQRjkK2J1Pyah63nCtYBBnt" + ], + "license": "LicenseRef-DCL-1.0" + }, + "dependencies/rain-string-0.2.0/src/lib/parse/LibParseChar.sol": { + "keccak256": "0x66c401d784e9461f709116441de3707685e08438cd83553db28fe8caf0e97238", + "urls": [ + "bzz-raw://e6027d0f9d558953686f6eb78ca0b2f2e7d9d38e0be6d1435ffaaa4b90919593", + "dweb:/ipfs/QmQXDMTzmJrst2a4kHkcfjSsEdnPc4ikQs7VfGbCfe9QCc" + ], + "license": "LicenseRef-DCL-1.0" + }, + "dependencies/rain-string-0.2.0/src/lib/parse/LibParseDecimal.sol": { + "keccak256": "0x72ccc4d7e0a1245897511e1efc15ddc80d423a8eb956249be7940a8e8f4e99fe", + "urls": [ + "bzz-raw://3ca57acd6a7cbe16f2c03aa5a6e81ec7af1ad44078924358578560a32aead7c0", + "dweb:/ipfs/QmNukyUMS4JrzNHAYcpLbtYsD5CwYPEjfAaADv6qMZmqs6" + ], + "license": "LicenseRef-DCL-1.0" + }, + "src/concrete/DecimalFloat.sol": { + "keccak256": "0x6326a6b5ffef0708b84712c0b891dfc7f2d88c38191628da1f40933951f2683b", + "urls": [ + "bzz-raw://ad99eda6cc266d5d160439700d3c89a487e8e31d51538f2ad83435a1aac9f3ae", + "dweb:/ipfs/QmarsuZkgqG7jT9mYBh1VKNvjD5ZsVtJJTiRGbfMQAY669" + ], + "license": "LicenseRef-DCL-1.0" + }, + "src/error/ErrDecimalFloat.sol": { + "keccak256": "0x53825ff4d1af4981100de46bd7536c611625fe7930b5c21921838cfed3a92243", + "urls": [ + "bzz-raw://961197f4c7b6d560f71f67892bfd5b64300be0f0fdb20162058938567653643e", + "dweb:/ipfs/QmTJzmA5CEkmYrXJ2MHnfQ3wGm1Qj6xE1vNaqAqgUpEnvA" + ], + "license": "LicenseRef-DCL-1.0" + }, + "src/error/ErrFormat.sol": { + "keccak256": "0xc760cb6018291753e7408d55d12d5e66c116f9750dc241bbc201f3b46ae33aa7", + "urls": [ + "bzz-raw://cbc81bb7c26c8503926b579f978902bcc3227839bee04bd3500cc924d142d28e", + "dweb:/ipfs/QmXqMuqBCpckD1EnsBjweyLdRZxpvC2xSP9FWBZFh2vztR" + ], + "license": "LicenseRef-DCL-1.0" + }, + "src/error/ErrParse.sol": { + "keccak256": "0x7fc9fe7421d78306d252d2853fd1be943d9cbd12ff7a9c8c3f286a8164bfe357", + "urls": [ + "bzz-raw://7b4c434d01b53788968d185683d9633afa26d95396b1e91337a53ccaab0d44ab", + "dweb:/ipfs/QmQHmVjR37wwrCskiQviwkg7WkeBpr9uPddjuDxqzANXeV" + ], + "license": "LicenseRef-DCL-1.0" + }, + "src/generated/LogTables.pointers.sol": { + "keccak256": "0x2325d92e3e248350a79f163fcb8738056ae4240b6a77f759ff5fcbf7b381f5ae", + "urls": [ + "bzz-raw://9a52674114518573de7d184094b266bc2b5208953086f8ec35a494f048deefbb", + "dweb:/ipfs/QmTjuj1R9k4pFMBVpX6RcWG87Rdh9pRTZVHYo93SzBfmsH" + ], + "license": "LicenseRef-DCL-1.0" + }, + "src/lib/LibDecimalFloat.sol": { + "keccak256": "0x59d2dad4b7e861ed835a79c61ae42b4b0d628f9c578f3bb3ecd7796ed530f196", + "urls": [ + "bzz-raw://e565148a37f06299de3b6bcb3385ea0336f65c6c02c9ebfbc6f227f4e56d1c03", + "dweb:/ipfs/Qma6UNZifZc8zsf7J6B87CdCXhiCR6Zisyg9czsfaji6yY" + ], + "license": "LicenseRef-DCL-1.0" + }, + "src/lib/deploy/LibDecimalFloatDeploy.sol": { + "keccak256": "0x79f59754c234e55420359efaa9af6ec851fadf8dfaecda6860c1ef99abcf1e64", + "urls": [ + "bzz-raw://8303dde773c7c613981011fe9ee5d976338b3dab9c66cd67516a82b094596343", + "dweb:/ipfs/QmQnkeaReEwkKcFMvegAuuBoF2WyirRQmQG9CjKfdhQKnZ" + ], + "license": "LicenseRef-DCL-1.0" + }, + "src/lib/format/LibFormatDecimalFloat.sol": { + "keccak256": "0x5aac6382e7f7040e68600333c1b00b0aedb3edb6bced84b63783f6d88fe0b4f0", + "urls": [ + "bzz-raw://e96d30e34e1fa2cc4eb574ded30c0f6f93929dcc19cb571f555ca8c5ac32eaa7", + "dweb:/ipfs/QmRRtk84AqEdQrRXfeTzVUAbAktJTZ92iTLqjocQV4PDx7" + ], + "license": "LicenseRef-DCL-1.0" + }, + "src/lib/implementation/LibDecimalFloatImplementation.sol": { + "keccak256": "0x47d0eeb542875548689465407162a19e4a21fb4591af5bb48d5758c0d1b93634", + "urls": [ + "bzz-raw://631efb796ff17f277804f8a32df7d28630c2ae5300e7d74c37aa8ed1f86b5092", + "dweb:/ipfs/QmSfmMGQyxKYxu8UrWDEtuCggQ9HtFJy5cbMsYLPZbcTZ7" + ], + "license": "LicenseRef-DCL-1.0" + }, + "src/lib/parse/LibParseDecimalFloat.sol": { + "keccak256": "0x703d2d37d8a14639a3eb2dcd61601b36552027e16b4e8414befe51f2d0b9ed38", + "urls": [ + "bzz-raw://53fa45503e115a322a701a1289c5b5fcbe68090c83e0635af77d275d123f09f0", + "dweb:/ipfs/QmTBtz8uPLYXrTue9SmHBVdgjpFJYUU41Z48PAgu1nXafn" + ], + "license": "LicenseRef-DCL-1.0" + }, + "src/lib/table/LibLogTable.sol": { + "keccak256": "0xccd2dea54cfb708c01e7e8e88c089742bbab18f5783be4632311fb4923d44c88", + "urls": [ + "bzz-raw://f45fb78c16b5d66d56ba0e78acdb0ca5d315eb05efa2cd7a81e191aabe7aec52", + "dweb:/ipfs/QmQJ3TFFxTMu4HZ4qnjgmdmSNhGZLQRdCnSqAipEF1up1f" + ], + "license": "LicenseRef-DCL-1.0" + } + }, + "version": 1 + }, + "id": 37 +} diff --git a/crates/float/abi/TestDecimalFloat.json b/crates/float/abi/TestDecimalFloat.json new file mode 100644 index 0000000..d4c8502 --- /dev/null +++ b/crates/float/abi/TestDecimalFloat.json @@ -0,0 +1,221 @@ +{ + "abi": [ + { + "type": "function", + "name": "packLossless", + "inputs": [ + { "name": "coefficient", "type": "int224", "internalType": "int224" }, + { "name": "exponent", "type": "int32", "internalType": "int32" } + ], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "unpack", + "inputs": [ + { "name": "float", "type": "bytes32", "internalType": "Float" } + ], + "outputs": [ + { "name": "", "type": "int256", "internalType": "int256" }, + { "name": "", "type": "int256", "internalType": "int256" } + ], + "stateMutability": "pure" + }, + { + "type": "error", + "name": "CoefficientOverflow", + "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" } + ] + } + ], + "bytecode": { + "object": "0x6080604052348015600e575f80fd5b506102848061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610034575f3560e01c806371516dd914610038578063b702fecd1461008c575b5f80fd5b61007261004636600461022b565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b9160e09190911d90565b604080519283526020830191909152015b60405180910390f35b61009f61009a366004610242565b6100ad565b604051908152602001610083565b5f6100be83601b0b8360030b6100c5565b9392505050565b5f805f6100d28585610124565b915091508061011c576040517f22c9f7bb00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044015b60405180910390fd5b509392505050565b5f601b83900b8314838382610188577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561016857620186a0860595506005850194505b8586601b0b1461018357600a86059550846001019450610168565b61019e565b855f0361019e57505f9250600191506102249050565b848560030b146101fa575f8512156101be57505f92508291506102249050565b6040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610113565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791505b9250929050565b5f6020828403121561023b575f80fd5b5035919050565b5f8060408385031215610253575f80fd5b823580601b0b8114610263575f80fd5b91506020830135600381900b8114610279575f80fd5b80915050925092905056", + "sourceMap": "332:770:50:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561000f575f80fd5b5060043610610034575f3560e01c806371516dd914610038578063b702fecd1461008c575b5f80fd5b61007261004636600461022b565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b9160e09190911d90565b604080519283526020830191909152015b60405180910390f35b61009f61009a366004610242565b6100ad565b604051908152602001610083565b5f6100be83601b0b8360030b6100c5565b9392505050565b5f805f6100d28585610124565b915091508061011c576040517f22c9f7bb00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044015b60405180910390fd5b509392505050565b5f601b83900b8314838382610188577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561016857620186a0860595506005850194505b8586601b0b1461018357600a86059550846001019450610168565b61019e565b855f0361019e57505f9250600191506102249050565b848560030b146101fa575f8512156101be57505f92508291506102249050565b6040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610113565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791505b9250929050565b5f6020828403121561023b575f80fd5b5035919050565b5f8060408385031215610253575f80fd5b823580601b0b8114610263575f80fd5b91506020830135600381900b8114610279575f80fd5b80915050925092905056", + "sourceMap": "332:770:50:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;979:121;;;;;;:::i;:::-;19261:17:42;19363:16;;19359:2;19348:32;;19409:4;19405:16;;;;;979:121:50;;;;;396:25:134;;;452:2;437:18;;430:34;;;;369:18;979:121:50;;;;;;;;599:163;;;;;;:::i;:::-;;:::i;:::-;;;1097:25:134;;;1085:2;1070:18;599:163:50;924:204:134;599:163:50;680:5;704:51;733:11;704:51;;746:8;704:51;;:28;:51::i;:::-;697:58;599:163;-1:-1:-1;;;599:163:50:o;18451:299:42:-;18539:5;18557:7;18566:13;18583:38;18593:17;18612:8;18583:9;:38::i;:::-;18556:65;;;;18636:8;18631:95;;18667:48;;;;;;;;396:25:134;;;437:18;;;430:34;;;369:18;;18667:48:42;;;;;;;;18631:95;-1:-1:-1;18742:1:42;18451:299;-1:-1:-1;;;18451:299:42:o;15810:2402::-;15895:11;16327:46;;;;;;15991:17;16047:8;16327:46;16651:668;;16708:4;16688:17;:24;:29;16684:135;;16762:3;16741:24;;;;16799:1;16787:13;;;;16684:135;17058:17;17036;17029:46;;;17022:151;;17120:2;17099:23;;;;17144:10;;;;;17022:151;;;16651:668;;;17215:17;17236:1;17215:22;17211:94;;-1:-1:-1;3653:1:42;;-1:-1:-1;17281:4:42;;-1:-1:-1;17261:25:42;;-1:-1:-1;17261:25:42;17211:94;17529:8;17516;17510:27;;;17506:393;;17731:1;17720:8;:12;17716:85;;;-1:-1:-1;3653:1:42;;-1:-1:-1;3653:1:42;;-1:-1:-1;17756:26:42;;-1:-1:-1;17756:26:42;17716:85;17825:59;;;;;;;;396:25:134;;;437:18;;;430:34;;;369:18;;17825:59:42;226:244:134;17506:393:42;-1:-1:-1;;18046:17:42;18132:28;;18166:4;18162:19;;;18129:53;;-1:-1:-1;15810:2402:42;;;;;;:::o;14:207:134:-;100:6;153:2;141:9;132:7;128:23;124:32;121:52;;;169:1;166;159:12;121:52;-1:-1:-1;192:23:134;;14:207;-1:-1:-1;14:207:134:o;475:444::-;540:6;548;601:2;589:9;580:7;576:23;572:32;569:52;;;617:1;614;607:12;569:52;656:9;643:23;710:5;706:2;695:21;688:5;685:32;675:60;;731:1;728;721:12;675:60;754:5;-1:-1:-1;811:2:134;796:18;;783:32;857:1;846:22;;;834:35;;824:63;;883:1;880;873:12;824:63;906:7;896:17;;;475:444;;;;;:::o", + "linkReferences": {} + }, + "methodIdentifiers": { + "packLossless(int224,int32)": "b702fecd", + "unpack(bytes32)": "71516dd9" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"CoefficientOverflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"ExponentOverflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int224\",\"name\":\"coefficient\",\"type\":\"int224\"},{\"internalType\":\"int32\",\"name\":\"exponent\",\"type\":\"int32\"}],\"name\":\"packLossless\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"float\",\"type\":\"bytes32\"}],\"name\":\"unpack\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"CoefficientOverflow(int256,int256)\":[{\"details\":\"Thrown when a coefficient overflows.\"}],\"ExponentOverflow(int256,int256)\":[{\"details\":\"Thrown when an exponent overflows.\"}]},\"kind\":\"dev\",\"methods\":{\"packLossless(int224,int32)\":{\"params\":{\"coefficient\":\"The coefficient to pack.\",\"exponent\":\"The exponent to pack.\"},\"returns\":{\"_0\":\"The packed float.\"}},\"unpack(bytes32)\":{\"params\":{\"float\":\"The float to unpack.\"},\"returns\":{\"_0\":\"coefficient The coefficient of the float.\",\"_1\":\"exponent The exponent of the float.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"packLossless(int224,int32)\":{\"notice\":\"Exposes `LibDecimalFloat.packLossless` for offchain use.\"},\"unpack(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.unpack` for offchain use.\"}},\"notice\":\"Additional exposed functions for testing the internals of floats from downstream environments, e.g. rust.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/concrete/TestDecimalFloat.sol\":\"TestDecimalFloat\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"appendCBOR\":false,\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[\":@openzeppelin-contracts-5.6.1/=dependencies/@openzeppelin-contracts-5.6.1/\",\":forge-std-1.16.1/=dependencies/forge-std-1.16.1/\",\":mut/=dependencies/rain-string-0.2.0/src/lib/mut/\",\":parse/=dependencies/rain-string-0.2.0/src/lib/parse/\",\":rain-datacontract-0.1.0/=dependencies/rain-datacontract-0.1.0/\",\":rain-deploy-0.1.2/=dependencies/rain-deploy-0.1.2/\",\":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/\"]},\"sources\":{\"src/error/ErrDecimalFloat.sol\":{\"keccak256\":\"0x53825ff4d1af4981100de46bd7536c611625fe7930b5c21921838cfed3a92243\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://961197f4c7b6d560f71f67892bfd5b64300be0f0fdb20162058938567653643e\",\"dweb:/ipfs/QmTJzmA5CEkmYrXJ2MHnfQ3wGm1Qj6xE1vNaqAqgUpEnvA\"]},\"src/lib/LibDecimalFloat.sol\":{\"keccak256\":\"0x59d2dad4b7e861ed835a79c61ae42b4b0d628f9c578f3bb3ecd7796ed530f196\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://e565148a37f06299de3b6bcb3385ea0336f65c6c02c9ebfbc6f227f4e56d1c03\",\"dweb:/ipfs/Qma6UNZifZc8zsf7J6B87CdCXhiCR6Zisyg9czsfaji6yY\"]},\"src/lib/implementation/LibDecimalFloatImplementation.sol\":{\"keccak256\":\"0x47d0eeb542875548689465407162a19e4a21fb4591af5bb48d5758c0d1b93634\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://631efb796ff17f277804f8a32df7d28630c2ae5300e7d74c37aa8ed1f86b5092\",\"dweb:/ipfs/QmSfmMGQyxKYxu8UrWDEtuCggQ9HtFJy5cbMsYLPZbcTZ7\"]},\"src/lib/table/LibLogTable.sol\":{\"keccak256\":\"0xccd2dea54cfb708c01e7e8e88c089742bbab18f5783be4632311fb4923d44c88\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://f45fb78c16b5d66d56ba0e78acdb0ca5d315eb05efa2cd7a81e191aabe7aec52\",\"dweb:/ipfs/QmQJ3TFFxTMu4HZ4qnjgmdmSNhGZLQRdCnSqAipEF1up1f\"]},\"test/concrete/TestDecimalFloat.sol\":{\"keccak256\":\"0x4cb7ac6a794d06ffcc482d9f0451e57de56d4b434411e70d61949634c56c36c7\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://c1776ad378af67be27a7c98225c58b70a33b0e6ffc4c68d69e23dcf303e8a929\",\"dweb:/ipfs/QmfK9C9g5ncMkHFvSvGFAru8bvPTY9qxTzB3KPgGAn1EyG\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.25+commit.b61c2a91" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "int256", + "name": "signedCoefficient", + "type": "int256" + }, + { "internalType": "int256", "name": "exponent", "type": "int256" } + ], + "type": "error", + "name": "CoefficientOverflow" + }, + { + "inputs": [ + { + "internalType": "int256", + "name": "signedCoefficient", + "type": "int256" + }, + { "internalType": "int256", "name": "exponent", "type": "int256" } + ], + "type": "error", + "name": "ExponentOverflow" + }, + { + "inputs": [ + { + "internalType": "int224", + "name": "coefficient", + "type": "int224" + }, + { "internalType": "int32", "name": "exponent", "type": "int32" } + ], + "stateMutability": "pure", + "type": "function", + "name": "packLossless", + "outputs": [ + { "internalType": "Float", "name": "", "type": "bytes32" } + ] + }, + { + "inputs": [ + { "internalType": "Float", "name": "float", "type": "bytes32" } + ], + "stateMutability": "pure", + "type": "function", + "name": "unpack", + "outputs": [ + { "internalType": "int256", "name": "", "type": "int256" }, + { "internalType": "int256", "name": "", "type": "int256" } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "packLossless(int224,int32)": { + "params": { + "coefficient": "The coefficient to pack.", + "exponent": "The exponent to pack." + }, + "returns": { "_0": "The packed float." } + }, + "unpack(bytes32)": { + "params": { "float": "The float to unpack." }, + "returns": { + "_0": "coefficient The coefficient of the float.", + "_1": "exponent The exponent of the float." + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "packLossless(int224,int32)": { + "notice": "Exposes `LibDecimalFloat.packLossless` for offchain use." + }, + "unpack(bytes32)": { + "notice": "Exposes `LibDecimalFloat.unpack` for offchain use." + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin-contracts-5.6.1/=dependencies/@openzeppelin-contracts-5.6.1/", + "forge-std-1.16.1/=dependencies/forge-std-1.16.1/", + "mut/=dependencies/rain-string-0.2.0/src/lib/mut/", + "parse/=dependencies/rain-string-0.2.0/src/lib/parse/", + "rain-datacontract-0.1.0/=dependencies/rain-datacontract-0.1.0/", + "rain-deploy-0.1.2/=dependencies/rain-deploy-0.1.2/", + "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/" + ], + "optimizer": { "enabled": true, "runs": 1000000 }, + "metadata": { "bytecodeHash": "none", "appendCBOR": false }, + "compilationTarget": { + "test/concrete/TestDecimalFloat.sol": "TestDecimalFloat" + }, + "evmVersion": "cancun", + "libraries": {} + }, + "sources": { + "src/error/ErrDecimalFloat.sol": { + "keccak256": "0x53825ff4d1af4981100de46bd7536c611625fe7930b5c21921838cfed3a92243", + "urls": [ + "bzz-raw://961197f4c7b6d560f71f67892bfd5b64300be0f0fdb20162058938567653643e", + "dweb:/ipfs/QmTJzmA5CEkmYrXJ2MHnfQ3wGm1Qj6xE1vNaqAqgUpEnvA" + ], + "license": "LicenseRef-DCL-1.0" + }, + "src/lib/LibDecimalFloat.sol": { + "keccak256": "0x59d2dad4b7e861ed835a79c61ae42b4b0d628f9c578f3bb3ecd7796ed530f196", + "urls": [ + "bzz-raw://e565148a37f06299de3b6bcb3385ea0336f65c6c02c9ebfbc6f227f4e56d1c03", + "dweb:/ipfs/Qma6UNZifZc8zsf7J6B87CdCXhiCR6Zisyg9czsfaji6yY" + ], + "license": "LicenseRef-DCL-1.0" + }, + "src/lib/implementation/LibDecimalFloatImplementation.sol": { + "keccak256": "0x47d0eeb542875548689465407162a19e4a21fb4591af5bb48d5758c0d1b93634", + "urls": [ + "bzz-raw://631efb796ff17f277804f8a32df7d28630c2ae5300e7d74c37aa8ed1f86b5092", + "dweb:/ipfs/QmSfmMGQyxKYxu8UrWDEtuCggQ9HtFJy5cbMsYLPZbcTZ7" + ], + "license": "LicenseRef-DCL-1.0" + }, + "src/lib/table/LibLogTable.sol": { + "keccak256": "0xccd2dea54cfb708c01e7e8e88c089742bbab18f5783be4632311fb4923d44c88", + "urls": [ + "bzz-raw://f45fb78c16b5d66d56ba0e78acdb0ca5d315eb05efa2cd7a81e191aabe7aec52", + "dweb:/ipfs/QmQJ3TFFxTMu4HZ4qnjgmdmSNhGZLQRdCnSqAipEF1up1f" + ], + "license": "LicenseRef-DCL-1.0" + }, + "test/concrete/TestDecimalFloat.sol": { + "keccak256": "0x4cb7ac6a794d06ffcc482d9f0451e57de56d4b434411e70d61949634c56c36c7", + "urls": [ + "bzz-raw://c1776ad378af67be27a7c98225c58b70a33b0e6ffc4c68d69e23dcf303e8a929", + "dweb:/ipfs/QmfK9C9g5ncMkHFvSvGFAru8bvPTY9qxTzB3KPgGAn1EyG" + ], + "license": "LicenseRef-DCL-1.0" + } + }, + "version": 1 + }, + "id": 50 +} diff --git a/crates/float/src/lib.rs b/crates/float/src/lib.rs index 26638ac..4bc38a1 100644 --- a/crates/float/src/lib.rs +++ b/crates/float/src/lib.rs @@ -24,14 +24,14 @@ use evm::execute_test_call; sol!( #![sol(all_derives)] DecimalFloat, - env!("RAIN_MATH_FLOAT_DECIMAL_FLOAT_ABI") + concat!(env!("CARGO_MANIFEST_DIR"), "/abi/DecimalFloat.json") ); #[cfg(test)] sol!( #![sol(all_derives)] TestDecimalFloat, - env!("RAIN_MATH_FLOAT_TEST_DECIMAL_FLOAT_ABI") + concat!(env!("CARGO_MANIFEST_DIR"), "/abi/TestDecimalFloat.json") ); #[derive(Debug, Copy, Clone, Default, Serialize, Deserialize, Hash)] diff --git a/flake.nix b/flake.nix index 55d630e..3adf461 100644 --- a/flake.nix +++ b/flake.nix @@ -6,40 +6,19 @@ flake-utils.url = "github:numtide/flake-utils"; }; - outputs = { self, flake-utils, rainix }: - flake-utils.lib.eachDefaultSystem (system: + outputs = + { + flake-utils, + rainix, + ... + }: + flake-utils.lib.eachDefaultSystem ( + system: let pkgs = rainix.pkgs.${system}; - - decimal-float-abi = pkgs.stdenvNoCC.mkDerivation { - pname = "rain-math-float-abi"; - version = "0.1.0"; - src = ./.; - - nativeBuildInputs = [ pkgs.foundry-bin pkgs.solc_0_8_25 ]; - - FOUNDRY_SOLC = "${pkgs.solc_0_8_25}/bin/solc-0.8.25"; - FOUNDRY_OFFLINE = "true"; - - buildPhase = '' - runHook preBuild - export HOME="$TMPDIR" - forge build - runHook postBuild - ''; - - installPhase = '' - runHook preInstall - mkdir -p $out - cp out/DecimalFloat.sol/DecimalFloat.json $out/DecimalFloat.json - cp out/TestDecimalFloat.sol/TestDecimalFloat.json $out/TestDecimalFloat.json - runHook postInstall - ''; - }; - in rec { + in + rec { packages = rainix.packages.${system} // { - inherit decimal-float-abi; - test-wasm-build = rainix.mkTask.${system} { name = "test-wasm-build"; body = '' @@ -60,12 +39,13 @@ }; devShells.default = pkgs.mkShell { - shellHook = rainix.devShells.${system}.default.shellHook + '' - export RAIN_MATH_FLOAT_DECIMAL_FLOAT_ABI="$PWD/out/DecimalFloat.sol/DecimalFloat.json" - export RAIN_MATH_FLOAT_TEST_DECIMAL_FLOAT_ABI="$PWD/out/TestDecimalFloat.sol/TestDecimalFloat.json" - ''; - packages = [ packages.test-wasm-build packages.test-js-bindings ]; + inherit (rainix.devShells.${system}.default) shellHook; + packages = [ + packages.test-wasm-build + packages.test-js-bindings + ]; inputsFrom = [ rainix.devShells.${system}.default ]; }; - }); + } + ); } diff --git a/foundry.toml b/foundry.toml index 75f5f64..0122f9a 100644 --- a/foundry.toml +++ b/foundry.toml @@ -23,7 +23,11 @@ evm_version = "cancun" bytecode_hash = "none" cbor_metadata = false -fs_permissions = [{ access = "read-write", path = "./src/generated" }] +fs_permissions = [ + { access = "read-write", path = "./src/generated" }, + { access = "read", path = "./out" }, + { access = "read-write", path = "./crates/float/abi" }, +] [fuzz] runs = 5096 diff --git a/script/CopyArtifacts.sol b/script/CopyArtifacts.sol new file mode 100644 index 0000000..98f0a71 --- /dev/null +++ b/script/CopyArtifacts.sol @@ -0,0 +1,24 @@ +// 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"; + +contract CopyArtifacts is Script { + function run() external { + _copyArtifact("DecimalFloat"); + _copyArtifact("TestDecimalFloat"); + } + + function _copyArtifact(string memory contractName) internal { + string memory src = string.concat("out/", contractName, ".sol/", contractName, ".json"); + string memory dst = string.concat("crates/float/abi/", contractName, ".json"); + string memory contents = vm.readFile(src); + if (vm.exists(dst)) { + //forge-lint: disable-next-line(unsafe-cheatcode) + vm.removeFile(dst); + } + //forge-lint: disable-next-line(unsafe-cheatcode) + vm.writeFile(dst, contents); + } +} From 5ecbf04f4aac438683cee4f4193e0fc421053236 Mon Sep 17 00:00:00 2001 From: thedavidmeister Date: Sun, 10 May 2026 23:46:48 +0400 Subject: [PATCH 3/9] ci: skip prettier on committed forge artifacts; drop unused doc comment - .prettierignore: skip crates/float/abi/. Forge writes single-line JSON; prettier-rainix was reformatting committed copies to multiline, causing copy-artifacts.yaml diff failures (CI's freshly built copies are single-line and don't match the pretty-printed committed copies). - crates/float/abi/*.json: re-seed in raw forge form. - crates/float/src/fuzz_ops.rs: change /// to // before prop_compose! macro invocation; rustc warns that doc comments don't attach to macro-generated items. Co-Authored-By: Claude Opus 4.7 (1M context) --- .prettierignore | 1 + crates/float/abi/DecimalFloat.json | 1743 +----------------------- crates/float/abi/TestDecimalFloat.json | 222 +-- crates/float/src/fuzz_ops.rs | 6 +- 4 files changed, 6 insertions(+), 1966 deletions(-) create mode 100644 .prettierignore diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..84db745 --- /dev/null +++ b/.prettierignore @@ -0,0 +1 @@ +crates/float/abi/ diff --git a/crates/float/abi/DecimalFloat.json b/crates/float/abi/DecimalFloat.json index d83e593..ee5ee0c 100644 --- a/crates/float/abi/DecimalFloat.json +++ b/crates/float/abi/DecimalFloat.json @@ -1,1742 +1 @@ -{ - "abi": [ - { "type": "constructor", "inputs": [], "stateMutability": "nonpayable" }, - { - "type": "function", - "name": "FORMAT_DEFAULT_SCIENTIFIC_MAX", - "inputs": [], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "FORMAT_DEFAULT_SCIENTIFIC_MIN", - "inputs": [], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "abs", - "inputs": [{ "name": "a", "type": "bytes32", "internalType": "Float" }], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "add", - "inputs": [ - { "name": "a", "type": "bytes32", "internalType": "Float" }, - { "name": "b", "type": "bytes32", "internalType": "Float" } - ], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "ceil", - "inputs": [{ "name": "a", "type": "bytes32", "internalType": "Float" }], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "div", - "inputs": [ - { "name": "a", "type": "bytes32", "internalType": "Float" }, - { "name": "b", "type": "bytes32", "internalType": "Float" } - ], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "e", - "inputs": [], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "eq", - "inputs": [ - { "name": "a", "type": "bytes32", "internalType": "Float" }, - { "name": "b", "type": "bytes32", "internalType": "Float" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "floor", - "inputs": [{ "name": "a", "type": "bytes32", "internalType": "Float" }], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "format", - "inputs": [ - { "name": "a", "type": "bytes32", "internalType": "Float" }, - { "name": "scientific", "type": "bool", "internalType": "bool" } - ], - "outputs": [{ "name": "", "type": "string", "internalType": "string" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "format", - "inputs": [{ "name": "a", "type": "bytes32", "internalType": "Float" }], - "outputs": [{ "name": "", "type": "string", "internalType": "string" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "format", - "inputs": [ - { "name": "a", "type": "bytes32", "internalType": "Float" }, - { "name": "scientificMin", "type": "bytes32", "internalType": "Float" }, - { "name": "scientificMax", "type": "bytes32", "internalType": "Float" } - ], - "outputs": [{ "name": "", "type": "string", "internalType": "string" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "frac", - "inputs": [{ "name": "a", "type": "bytes32", "internalType": "Float" }], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "fromFixedDecimalLossless", - "inputs": [ - { "name": "value", "type": "uint256", "internalType": "uint256" }, - { "name": "decimals", "type": "uint8", "internalType": "uint8" } - ], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "fromFixedDecimalLossy", - "inputs": [ - { "name": "value", "type": "uint256", "internalType": "uint256" }, - { "name": "decimals", "type": "uint8", "internalType": "uint8" } - ], - "outputs": [ - { "name": "", "type": "bytes32", "internalType": "Float" }, - { "name": "", "type": "bool", "internalType": "bool" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "gt", - "inputs": [ - { "name": "a", "type": "bytes32", "internalType": "Float" }, - { "name": "b", "type": "bytes32", "internalType": "Float" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "gte", - "inputs": [ - { "name": "a", "type": "bytes32", "internalType": "Float" }, - { "name": "b", "type": "bytes32", "internalType": "Float" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "integer", - "inputs": [{ "name": "a", "type": "bytes32", "internalType": "Float" }], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "inv", - "inputs": [{ "name": "a", "type": "bytes32", "internalType": "Float" }], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "isZero", - "inputs": [{ "name": "a", "type": "bytes32", "internalType": "Float" }], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "log10", - "inputs": [{ "name": "a", "type": "bytes32", "internalType": "Float" }], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "lt", - "inputs": [ - { "name": "a", "type": "bytes32", "internalType": "Float" }, - { "name": "b", "type": "bytes32", "internalType": "Float" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "lte", - "inputs": [ - { "name": "a", "type": "bytes32", "internalType": "Float" }, - { "name": "b", "type": "bytes32", "internalType": "Float" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "max", - "inputs": [ - { "name": "a", "type": "bytes32", "internalType": "Float" }, - { "name": "b", "type": "bytes32", "internalType": "Float" } - ], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "maxNegativeValue", - "inputs": [], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "maxPositiveValue", - "inputs": [], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "min", - "inputs": [ - { "name": "a", "type": "bytes32", "internalType": "Float" }, - { "name": "b", "type": "bytes32", "internalType": "Float" } - ], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "minNegativeValue", - "inputs": [], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "minPositiveValue", - "inputs": [], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "minus", - "inputs": [{ "name": "a", "type": "bytes32", "internalType": "Float" }], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "mul", - "inputs": [ - { "name": "a", "type": "bytes32", "internalType": "Float" }, - { "name": "b", "type": "bytes32", "internalType": "Float" } - ], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "parse", - "inputs": [{ "name": "str", "type": "string", "internalType": "string" }], - "outputs": [ - { "name": "", "type": "bytes4", "internalType": "bytes4" }, - { "name": "", "type": "bytes32", "internalType": "Float" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "pow", - "inputs": [ - { "name": "a", "type": "bytes32", "internalType": "Float" }, - { "name": "b", "type": "bytes32", "internalType": "Float" } - ], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "pow10", - "inputs": [{ "name": "a", "type": "bytes32", "internalType": "Float" }], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "sqrt", - "inputs": [{ "name": "a", "type": "bytes32", "internalType": "Float" }], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "sub", - "inputs": [ - { "name": "a", "type": "bytes32", "internalType": "Float" }, - { "name": "b", "type": "bytes32", "internalType": "Float" } - ], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "toFixedDecimalLossless", - "inputs": [ - { "name": "float", "type": "bytes32", "internalType": "Float" }, - { "name": "decimals", "type": "uint8", "internalType": "uint8" } - ], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "toFixedDecimalLossy", - "inputs": [ - { "name": "float", "type": "bytes32", "internalType": "Float" }, - { "name": "decimals", "type": "uint8", "internalType": "uint8" } - ], - "outputs": [ - { "name": "", "type": "uint256", "internalType": "uint256" }, - { "name": "", "type": "bool", "internalType": "bool" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "zero", - "inputs": [], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], - "stateMutability": "pure" - }, - { - "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": "Log10Negative", - "inputs": [ - { - "name": "signedCoefficient", - "type": "int256", - "internalType": "int256" - }, - { "name": "exponent", "type": "int256", "internalType": "int256" } - ] - }, - { "type": "error", "name": "Log10Zero", "inputs": [] }, - { - "type": "error", - "name": "LogTablesNotDeployed", - "inputs": [ - { - "name": "tablesAddress", - "type": "address", - "internalType": "address" - }, - { - "name": "expectedCodehash", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "actualCodehash", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "type": "error", - "name": "LossyConversionFromFloat", - "inputs": [ - { - "name": "signedCoefficient", - "type": "int256", - "internalType": "int256" - }, - { "name": "exponent", "type": "int256", "internalType": "int256" } - ] - }, - { - "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": "MulDivOverflow", - "inputs": [ - { "name": "x", "type": "uint256", "internalType": "uint256" }, - { "name": "y", "type": "uint256", "internalType": "uint256" }, - { "name": "denominator", "type": "uint256", "internalType": "uint256" } - ] - }, - { - "type": "error", - "name": "NegativeFixedDecimalConversion", - "inputs": [ - { - "name": "signedCoefficient", - "type": "int256", - "internalType": "int256" - }, - { "name": "exponent", "type": "int256", "internalType": "int256" } - ] - }, - { - "type": "error", - "name": "PowNegativeBase", - "inputs": [ - { - "name": "signedCoefficient", - "type": "int256", - "internalType": "int256" - }, - { "name": "exponent", "type": "int256", "internalType": "int256" } - ] - }, - { - "type": "error", - "name": "ScientificMinNotLessThanMax", - "inputs": [ - { "name": "scientificMin", "type": "bytes32", "internalType": "Float" }, - { "name": "scientificMax", "type": "bytes32", "internalType": "Float" } - ] - }, - { - "type": "error", - "name": "UnformatableExponent", - "inputs": [ - { "name": "exponent", "type": "int256", "internalType": "int256" } - ] - }, - { - "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": "ZeroNegativePower", - "inputs": [{ "name": "b", "type": "bytes32", "internalType": "Float" }] - }, - { "type": "error", "name": "ZeroStringStartPointer", "inputs": [] } - ], - "bytecode": { - "object": "0x6080604052348015600e575f80fd5b5060156019565b60b8565b73c51a14251b0dcf0ae24a96b7153991378938f5f53f7f2573004ac3a9ee7fc8d73654d76386f1b6b99e34cdf86a689c4691e47143420f811460b557604051630912d0ff60e31b815273c51a14251b0dcf0ae24a96b7153991378938f5f560048201527f2573004ac3a9ee7fc8d73654d76386f1b6b99e34cdf86a689c4691e47143420f60248201526044810182905260640160405180910390fd5b50565b614bb7806100c55f395ff3fe608060405234801561000f575f80fd5b506004361061029d575f3560e01c806381f7e2f511610171578063cde72ef3116100d2578063dd64691711610088578063e5526ecd1161006e578063e5526ecd1461062e578063e75f991f14610641578063ffae15ba14610654575f80fd5b8063dd64691714610608578063e0db58881461061b575f80fd5b8063d1de592a116100b8578063d1de592a146105bb578063d35273a7146105ce578063d3d6ffa8146105f5575f80fd5b8063cde72ef314610582578063d102b4d3146105a8575f80fd5b8063a19684b711610127578063bc1b392d1161010d578063bc1b392d1461050b578063bc62d8d814610511578063cb09682b1461055c575f80fd5b8063a19684b7146104d2578063a90d041a146104f8575f80fd5b806396ce1ec71161015757806396ce1ec7146104885780639b4afd991461049b578063a100a3d9146104bf575f80fd5b806381f7e2f5146104625780638dc2980714610475575f80fd5b80633447c0301161021b5780635ca0e7a4116101d1578063719cd99d116101b7578063719cd99d1461042957806373bfb2831461043c57806381a822721461044f575f80fd5b80635ca0e7a4146103f0578063602c35fc14610403575f80fd5b80633b3bd868116102015780633b3bd868146103b757806341aa0080146103ca5780635b23771d146103dd575f80fd5b80633447c03014610374578063371493ce14610397575f80fd5b80631ee62f111161027057806328fa1f011161025657806328fa1f011461033b5780633004fa411461034e5780633029740014610361575f80fd5b80631ee62f11146103155780632538835014610328575f80fd5b806304327dc5146102a1578063078b665b146102c75780630b6429bc146102da578063146e82ad14610302575b5f80fd5b6102b46102af36600461452f565b61067a565b6040519081526020015b60405180910390f35b6102b46102d5366004614546565b61068a565b6102ed6102e8366004614576565b61069c565b604080519283529015156020830152016102be565b6102b461031036600461452f565b6106b4565b6102b461032336600461452f565b6106d3565b6102b461033636600461452f565b6106f2565b6102b461034936600461452f565b610711565b6102b461035c366004614546565b61071b565b6102b461036f366004614546565b61073b565b610387610382366004614546565b610746565b60405190151581526020016102be565b6103aa6103a53660046145a0565b610751565b6040516102be91906145d2565b6102b46103c5366004614576565b61075d565b6102b46103d8366004614546565b610768565b6102b46103eb366004614576565b610773565b6102b46103fe36600461452f565b61077e565b7f80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff6102b4565b6102b461043736600461452f565b610788565b61038761044a366004614546565b610792565b6102b461045d36600461452f565b61079d565b610387610470366004614546565b6107a7565b610387610483366004614546565b6107b2565b6102b4610496366004614546565b6107bd565b6102b47c090000000000000000000000000000000000000000000000000000000181565b6103aa6104cd36600461452f565b6107c8565b7f80000000000000000000000000000000000000000000000000000000000000016102b4565b6102b4610506366004614546565b610812565b5f6102b4565b61052461051f366004614652565b61081d565b604080517fffffffff0000000000000000000000000000000000000000000000000000000090931683526020830191909152016102be565b7f7fffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffff6102b4565b7f7fffffff800000000000000000000000000000000000000000000000000000006102b4565b6103876105b6366004614546565b610836565b6102b46105c9366004614546565b610841565b6102b47ffffffffc0000000000000000000000000000000000000000000000000000000181565b6102b461060336600461452f565b61084c565b61038761061636600461452f565b610856565b6102b461062936600461452f565b61087c565b6103aa61063c36600461471b565b610886565b6102ed61064f366004614576565b61090f565b7fffffffbe19cfc6ef4f44cf88f14500d013df534fcaad48fca1d5ca47bea26fcc6102b4565b5f6106848261091b565b92915050565b5f6106958383610967565b9392505050565b5f806106a88484610983565b915091505b9250929050565b5f6106848273c51a14251b0dcf0ae24a96b7153991378938f5f56109c4565b5f6106848273c51a14251b0dcf0ae24a96b7153991378938f5f56109f0565b5f6106848273c51a14251b0dcf0ae24a96b7153991378938f5f5610a3e565b5f61068482610a71565b5f610695838373c51a14251b0dcf0ae24a96b7153991378938f5f5610ab2565b5f6106958383610d0d565b5f6106958383610d70565b60606106958383610dbe565b5f6106958383610e51565b5f6106958383610e6c565b5f6106958383610eb1565b5f61068482610ee4565b5f61068482610fa6565b5f6106958383611052565b5f610684826110a2565b5f61069583836110e7565b5f6106958383611137565b5f6106958383611186565b6060610684827ffffffffc000000000000000000000000000000000000000000000000000000017c0900000000000000000000000000000000000000000000000000000001610886565b5f61069583836111cb565b5f805f8061082a856111d6565b90969095509350505050565b5f61069583836112c4565b5f6106958383611313565b5f61068482611358565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff821615610684565b5f6106848261138a565b606061089283836112c4565b6108d7576040517f3be5bf9400000000000000000000000000000000000000000000000000000000815260048101849052602481018390526044015b60405180910390fd5b5f6108e1856110a2565b9050610906856108f183876112c4565b8061090157506109018386611137565b610dbe565b95945050505050565b5f806106a884846113cb565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d61094d828261140b565b90925090505f61095d8383611459565b5095945050505050565b5f6109728383611137565b61097c5781610695565b5090919050565b5f807bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8416601b0b60e085901d6109b782828761155f565b9350935050509250929050565b5f610695837fffffffff0000000000000000000000000000000000000000000000000000000584610ab2565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d610a238483836116ae565b90925090505f610a338383611459565b509695505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d610a2384838361181f565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d82610aa48383611b54565b9150505f610a338284611459565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff848116601b0b9060e086901d908516610aef5750600191506106959050565b5f8213610b8857815f03610b4c57610b07855f6112c4565b15610b41576040517f8be82972000000000000000000000000000000000000000000000000000000008152600481018690526024016108ce565b505f91506106959050565b6040517fcceba0f100000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016108ce565b610b93856001610d70565b8015610ba45750610ba4865f611137565b15610bb3578592505050610695565b610bbd855f6112c4565b15610be657610bdd610bce8761091b565b610bd787611358565b86610ab2565b92505050610695565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8516601b0b60e086901d5f80610c198484611b54565b915091505f610c2983855f611bbc565b905060015f8080610c608f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b9160e09190911d90565b915091505b60018510610ca75784600116600103610c8a57610c8484848484611cd3565b90945092505b600185901c9450610c9d82828484611cd3565b9092509050610c65565b5f80610cb48f8e8e61181f565b91509150610cc482828a8d611cd3565b9092509050610cd48f83836116ae565b9092509050610ce582828888611cd3565b90925090505f610cf58383611459565b509e5050505050505050505050505050509392505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686611df2565b915091505f610d618383611459565b509a9950505050505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d610db384848484612416565b979650505050505050565b60607bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d5f829003610e2e576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525092505050610684565b8315610e4757610e3e828261242d565b92505050610684565b61090682826126fd565b5f805f610e5e8585612e64565b915091506109068282612ec6565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686612f20565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d610906828286612f4a565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828112610f1b57509192915050565b5f80610f278484611b54565b915091505f84128015610f3957508015155b15610f8f57610f8a82847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4612f20565b935091505b5f610f9a8385611459565b50979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828112610fdd57509192915050565b5f80610fe98484611b54565b91509150805f03610ffe575093949350505050565b5f811315610f8f57610f8a82847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4612fa6565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d611095848484846130d6565b1315979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828212156110dc5761094d82826131aa565b5f61095d8383611459565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d61112a848484846130d6565b1215979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d61117a848484846130d6565b12979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686611cd3565b5f61097283836112c4565b80515f908190602084810191850101828080806111f3868661324d565b929650909450925090507fffffffff0000000000000000000000000000000000000000000000000000000084165f036112b557848303611285575f806112398484611459565b915091508061127457507f32b8b8be000000000000000000000000000000000000000000000000000000009a5f9a5098505050505050505050565b505f9a909950975050505050505050565b507fad384e8700000000000000000000000000000000000000000000000000000000985f98509650505050505050565b5091975f975095505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d611307848484846130d6565b13979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686612fa6565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d61094d82826131aa565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d826113bd8383611b54565b5090505f610a338284611459565b5f805f805f6113da87876136ec565b9250925092505f806113ec8585611459565b91509150818380156113fb5750815b9650965050505050509250929050565b5f806106a87f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb48686611df2565b5f601b83900b83148383826114bd577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561149d57620186a0860595506005850194505b8586601b0b146114b857600a8605955084600101945061149d565b6114d3565b855f036114d357505f9250600191506106ad9050565b848560030b1461152f575f8512156114f357505f92508291506106ad9050565b6040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016108ce565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f8512156115a5576040517f4a7d166b00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016108ce565b845f036115b757505f905060016116a6565b8460ff8416850185811215611602576040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101889052602481018790526044016108ce565b5f805f83121561166c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb3831215611643575f8095509550505050506116a6565b825f03600a0a915081848161165a5761165a614744565b04955050840290911491506116a69050565b5f83131561169b5761167f83600a6148bc565b915061168b82856148c7565b9550600194506116a69350505050565b509193506001925050505b935093915050565b5f805f8412156116ea576116c284846131aa565b90945092506116d28585856116ae565b90945092506116e1848461140b565b915091506116a6565b5f806116f68686611b54565b9092509050845f80806117098585613748565b9194509250905061270d6127106117216001826148de565b8514611738576117328d8686613837565b90925090505b83156117c3575f61174a866001614904565b90505b80848583028161175f5761175f614744565b051461177657600a84059350600a8805975061174d565b6117b7611783858861492b565b8961178e878561492b565b8f87877ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6138f0565b909d509b506117ea9050565b819b507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc9a505b5050505050866117fb84835f611bbc565b611806886001614904565b6118109190614904565b94509450505050935093915050565b5f80838361182d828261398d565b90965094505f86136118ae57855f03611872576040517f561fc7b500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5d3fd4db00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016108ce565b5050837f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000036118ec576118e283604c614904565b5f915091506116a6565b7f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000008412158061193b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb561195d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb45b5f0b8412611b18575f805f805f8561197657604b611979565b604c5b611983908a614904565b90505f80876119b0577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000006119d1565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca0000000000000000005b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff169050808c81611a0357611a03614744565b05818102955090850193507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18019050611a3c8c826139e3565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000000295508594508a8414611ac8576123278114611aa357611a7e8c826001016139e3565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000002611ac5565b7f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000005b94505b50611af8838b848c89897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb46138f0565b909a509850611b098a8a835f612fa6565b975097505050505050506116a6565b611b22858561140b565b9095509350611b3286868661181f565b9095509350611b4185856131aa565b92509250506116a6565b50935093915050565b5f805f8312611b6757508290505f6106ad565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4831215611b9957505f9050826106ad565b5f839003600a0a808581611baf57611baf614744565b0794859003959350505050565b5f818303611bcb575082610695565b82821315611c0e57828203604c811380611be557505f8113155b15611bf3575f915050610695565b80600a0a8581611c0557611c05614744565b05915050610695565b818303604c811380611c2057505f8113155b15611c68576040517f1d5d6d100000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490526064016108ce565b600a81900a85810286828281611c8057611c80614744565b0514611cc9576040517f1d5d6d100000000000000000000000000000000000000000000000000000000081526004810188905260248101879052604481018690526064016108ce565b9250610695915050565b5f8085158415178015611ceb575f92505f9150611de8565b611cf58487614904565b91505f611d0188613a6a565b90505f611d0d87613a6a565b90505f611d1a8383613ad0565b5090505f6f0785ee10d5da46d900f436a000000000821115611d4f576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a7640000821115611d7057670de0b6b3a7640000820491506012015b633b9aca00821115611d8957633b9aca00820491506009015b612710821115611d9e57612710820491506004015b8115611db257600a82049150600101611d9e565b611dbc8187614904565b9550611dde8b8a611dd88787611dd387600a6148bc565b613b0b565b89613bf0565b9097509550505050505b5094509492505050565b5f80835f03611e37576040517f7a97930f00000000000000000000000000000000000000000000000000000000815260048101879052602481018690526044016108ce565b855f03611e4857505f90508061240d565b5f805f80611e568a8a613cf7565b919b5099509150611e678888613cf7565b919950975090505f611e788b613a6a565b90505f611e848a613a6a565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c818310156122a1578415611ee257507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000009050604b612260565b6f4b3b4ca85a86c47a098a22400000000083101561200e57678ac7230489e80000831015611f72576402540be400831015611f4057620186a0831015611f305750620186a0905060056121e9565b506402540be4009050600a6121e9565b655af3107a4000831015611f5f5750655af3107a40009050600e6121e9565b50678ac7230489e80000905060136121e9565b6b204fce5e3e25026110000000831015611fc45769152d02c7e14af6800000831015611fad575069152d02c7e14af6800000905060176121e9565b506b204fce5e3e250261100000009050601c6121e9565b6d314dc6448d9338c15b0a00000000831015611ff357506d314dc6448d9338c15b0a00000000905060216121e9565b506f4b3b4ca85a86c47a098a224000000000905060266121e9565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156121065773af298d050e4395d69670b12b7f410000000000008310156120a1577172cb5bd86321e38cb6ce6682e8000000000083101561208257507172cb5bd86321e38cb6ce6682e800000000009050602b6121e9565b5073af298d050e4395d69670b12b7f41000000000000905060306121e9565b76010b46c6cdd6e3e0828f4db456ff0c8ea00000000000008310156120e2575076010b46c6cdd6e3e0828f4db456ff0c8ea0000000000000905060356121e9565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a6121e9565b7c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000083101561219c577a026e4d30eccc3215dd8f3157d27e23acbdcfe6800000000000000083101561217457507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f6121e9565b507c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000905060446121e9565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca0000000000000000008310156121e957507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b81831161221d57600a820491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016121e9565b815f03612260576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018d9052602481018c90526044016108ce565b856122a1576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018f9052602481018e90526044016108ce565b807f8000000000000000000000000000000000000000000000000000000000000000018d126122d457808d039c50612347565b7f80000000000000000000000000000000000000000000000000000000000000009c90038c015f81131561234757807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038b1361233457998a0199612347565b5f8099509950505050505050505061240d565b5f808e12801561235657505f8c135b15612393577f80000000000000000000000000000000000000000000000000000000000000008e01808d1361238b575f61238f565b808d035b9150505b8b818f010397506123b08f8e6123aa888789613b0b565b8b613bf0565b90995097505f8113156123fa57604c8113156123da575f809a509a5050505050505050505061240d565b80600a0a89816123ec576123ec614744565b059850885f036123fa575f97505b5096985094965061240d95505050505050565b94509492505050565b5f612423858585856130d6565b1495945050505050565b6060612439838361398d565b90935091505f8061246a7f161bcca7119915b50764b4abe86529797775a5f171951000000000000000000086614976565b1561249a57507f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000009050604c6124c1565b507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000009050604b5b5f6124cc8387614976565b90505f6124d984886149dd565b90505f808312156124f3575060016124f0836149f0565b92505b5f82121561250a57506001612507826149f0565b91505b60408051602081019091525f81528215612613575f8061252b600a89614a20565b90505b6125388186614976565b5f0361255d57612549600a82614a20565b90508161255581614a33565b92505061252e565b60408051602081019091525f8082525b838110156125be57816040516020016125869190614a81565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052915060010161256d565b505b6125cb600a876149dd565b5f036125e3576125dc600a87614976565b95506125c0565b806125ed87613f98565b6040516020016125fe929190614ab9565b60405160208183030381529060405293505050505b5f61261d85613f98565b90505f61262a878b614904565b90505f81156126605761263c82613f98565b60405160200161264c9190614afb565b604051602081830303815290604052612670565b60405180602001604052805f8152505b90505f8561268c5760405180602001604052805f8152506126c3565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b9050808486846040516020016126dc9493929190614b2c565b6040516020818303038152906040529a505050505050505050505092915050565b60606103e882138061271857506127156103e86149f0565b82125b15612752576040517fe44c72b0000000000000000000000000000000000000000000000000000000008152600481018390526024016108ce565b5f80841290811561276d57612766856149f0565b9050612770565b50835b5f61277a82614024565b80519091505f5b81811080156127fd57508281612798600185614b56565b6127a29190614b56565b815181106127b2576127b2614b69565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f3000000000000000000000000000000000000000000000000000000000000000145b15612814578061280c81614a33565b915050612781565b5f61281f8284614b56565b90505f61282c838a614904565b90505f876128485760405180602001604052805f81525061287f565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b90505f82126129f957815f6128948286614b96565b67ffffffffffffffff8111156128ac576128ac614625565b6040519080825280601f01601f1916602001820160405280156128d6576020820181803683370190505b5090505f5b85811015612948578881815181106128f5576128f5614b69565b602001015160f81c60f81b82828151811061291257612912614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053506001016128db565b505f5b828110156129c5577f30000000000000000000000000000000000000000000000000000000000000008261297f8389614b96565b8151811061298f5761298f614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535060010161294b565b5082816040516020016129d9929190614ba9565b6040516020818303038152906040529a5050505050505050505050610684565b5f612a03836149f0565b905080841115612c1a575f612a188286614b56565b90505f612a26866001614b96565b67ffffffffffffffff811115612a3e57612a3e614625565b6040519080825280601f01601f191660200182016040528015612a68576020820181803683370190505b5090505f5b82811015612ada57898181518110612a8757612a87614b69565b602001015160f81c60f81b828281518110612aa457612aa4614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612a6d565b507f2e00000000000000000000000000000000000000000000000000000000000000818381518110612b0e57612b0e614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5b83811015612be55789612b518285614b96565b81518110612b6157612b61614b69565b01602001517fff00000000000000000000000000000000000000000000000000000000000000168282612b95866001614b96565b612b9f9190614b96565b81518110612baf57612baf614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612b3e565b508381604051602001612bf9929190614ba9565b6040516020818303038152906040529b505050505050505050505050610684565b5f612c258583614b56565b90505f85612c34836002614b96565b612c3e9190614b96565b67ffffffffffffffff811115612c5657612c56614625565b6040519080825280601f01601f191660200182016040528015612c80576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f81518110612cb657612cb6614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f2e0000000000000000000000000000000000000000000000000000000000000081600181518110612d1857612d18614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5b82811015612dc3577f300000000000000000000000000000000000000000000000000000000000000082612d7d836002614b96565b81518110612d8d57612d8d614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612d48565b505f5b86811015612be557898181518110612de057612de0614b69565b01602001517fff00000000000000000000000000000000000000000000000000000000000000168282612e14866002614b96565b612e1e9190614b96565b81518110612e2e57612e2e614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612dc6565b5f805f805f612e7387876136ec565b92509250925080612eba576040517fc471796600000000000000000000000000000000000000000000000000000000815260048101849052602481018390526044016108ce565b50909590945092505050565b5f805f612ed38585611459565b9150915080612f18576040517f22c9f7bb00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016108ce565b509392505050565b5f80612f2c84846131aa565b9094509250612f3d86868686612fa6565b9150915094509492505050565b5f805f612f5886868661155f565b9150915080612f9d576040517f05e4767800000000000000000000000000000000000000000000000000000000815260048101879052602481018690526044016108ce565b50949350505050565b5f8085158415178015612fd257865f03612fc6578484925092505061240d565b8686925092505061240d565b612fdc878761398d565b9097509550612feb858561398d565b909550935085841315612fff579395929492935b838603604c81111561301857878793509350505061240d565b80600a0a868161302a5761302a614744565b0595505086850180881860ff90811c151589881890911c151680156130c557877f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff036130ac576040517fd556b111000000000000000000000000000000000000000000000000000000008152600481018a9052602481018990526044016108ce565b600a9687900596909805860197600197909701966130c9565b8198505b5096979596505050505050565b5f80851584151781871282861218178584141780156130fb578685925092505061240d565b505f8584131561310f575092949193919260015b8386035f8112604c8213178015613142578215613134575f899450945050505061240d565b885f9450945050505061240d565b600a82900a8981028a82828161315a5761315a614744565b0514613186578415613176575f8b96509650505050505061240d565b8a5f96509650505050505061240d565b841561319b57889650945061240d9350505050565b955087945061240d9350505050565b5f807f80000000000000000000000000000000000000000000000000000000000000008403613243577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8303613236576040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101859052602481018490526044016108ce565b600a840593508260010192505b50505f9190910391565b5f8281806132628386652000000000006140e0565b9250858314158361327c81886703ff0000000000006140e0565b94508085036132b657507f34bd20690000000000000000000000000000000000000000000000000000000094505f92508291506136e39050565b5f806132c28a88614109565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613300575095505f93508392506136e3915050565b86519095506540000000000060015f9290921a9190911b16151588871016915050801561358f57506001909301925f8461334381896703ff0000000000006140e0565b955080860361337e57507f7bfa48af0000000000000000000000000000000000000000000000000000000095505f93508392506136e3915050565b855b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018051908a1160015f9290921a9190911b6601000000000000161515166001036133ed577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613380565b818114613444575f806134008484614109565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613440575097505f95508594506136e39350505050565b9350505b5f83121561347f57507f7bfa48af0000000000000000000000000000000000000000000000000000000096505f94508493506136e392505050565b831561348b57825f0392505b80820394505f8513156134cb57507f013b2aaa0000000000000000000000000000000000000000000000000000000096505f94508493506136e392505050565b855f036134da5782955061358c565b5f859003604381111561351b57507f32b8b8be0000000000000000000000000000000000000000000000000000000097505f95508594506136e39350505050565b600a0a8681025f8883838161353257613532614744565b0514159050601b82900b82141581806135485750805b1561358457507f32b8b8be000000000000000000000000000000000000000000000000000000009a505f98508897506136e39650505050505050565b505084019650505b50505b84516c2000000020000000000000000060015f9290921a9190911b1615158786101680156136d457600190950194856135cf818a652000000000006140e0565b9650866135e5818b6703ff0000000000006140e0565b975080880361362257507f013b2aaa0000000000000000000000000000000000000000000000000000000097505f95508594506136e39350505050565b505f8061362f838a614109565b90925090507fffffffff0000000000000000000000000000000000000000000000000000000082161561366f575097505f95508594506136e39350505050565b9250508482015f8313801561368357508581125b8061369757505f8312801561369757508581135b156136d057507fd556b1110000000000000000000000000000000000000000000000000000000097505f95508594506136e39350505050565b9450505b845f036136df575f93505b5050505b92959194509250565b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86111561373757600a860460018201600a88065f1493509350935050613741565b8593509150600190505b9250925092565b5f805f837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0361378057508391505f90506001613741565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc84121561380e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb08412156137df57505f9150508215156001613741565b5f846004015f03600a0a90505f8187816137fb576137fb614744565b0594505080840286141592509050613741565b5f841261382357505f91508190506001613741565b50505060048101600a0a82025f6001613741565b5f80806064613849600a612328614a20565b613856600a612328614a20565b6138619060026148c7565b61386c906001614b96565b6138769190614b96565b6138809190614b96565b90506138c4565b5f8052600280600a8504028301601e833c5f80516107d0840193505f80526001600a8606600a6064880402018501601f853c5f5101949350505050565b6138cf858288613887565b92508315611b4b576138e5600186018288613887565b915050935093915050565b5f80888803613903575083905081613981565b5f805f806139138c8b8f8d612f20565b915091505f806139258a8a8d8c612f20565b9150915061393584848484611cd3565b8096508197505050505050505f8061394f8b8b8f8d612f20565b915091505f8061396186868686611df2565b915091505f8061397384848f8e612fa6565b909a50985050505050505050505b97509795505050505050565b5f805f805f61399c8787613cf7565b92509250925080612eba576040517f05e51ecb00000000000000000000000000000000000000000000000000000000815260048101889052602481018790526044016108ce565b5f806139f2600a612328614a20565b6139fd9060026148c7565b613a08906001614b96565b90505f613a18600a612328614a20565b90506002600a8504026001015f8052600281601e883c505f51617fff81169350618000811615613a4757918101915b505f80526001600a8506600a6064870402018301601f873c50505f510192915050565b5f80821215613ac7577f80000000000000000000000000000000000000000000000000000000000000008203613ac157507f8000000000000000000000000000000000000000000000000000000000000000919050565b505f0390565b5090565b919050565b5f807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83850993909202808410938190039390930393915050565b5f805f613b188686613ad0565b91509150815f03613b3c57838181613b3257613b32614744565b0492505050610695565b838210613b86576040517f6c59da120000000000000000000000000000000000000000000000000000000081526004810187905260248101869052604481018590526064016108ce565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f8587181215613cba577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115613ca757613c4f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001614b96565b8403613c7f57507f800000000000000000000000000000000000000000000000000000000000000090508161240d565b613c8a600a85614a20565b613c93906149f0565b613c9e846001614904565b9150915061240d565b613cb0846149f0565b839150915061240d565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115613ced57613c93600a85614a20565b508290508161240d565b5f805f845f03613d0f57505f91508190506001613741565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee800000000000000000085055f03613f23576f4b3b4ca85a86c47a098a2240000000008505158015613d7857507f80000000000000000000000000000000000000000000000000000000000000268412155b15613d99576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a000000000000008505158015613de157507f80000000000000000000000000000000000000000000000000000000000000138412155b15613dfa57678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c6400000000000000008505158015613e4657507f800000000000000000000000000000000000000000000000000000000000000a8412155b15613e5c576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e40000000000000000008505158015613eab57507f80000000000000000000000000000000000000000000000000000000000000028412155b15613ec157606485029450600284039350613e5c565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000008505158015613f1157507f80000000000000000000000000000000000000000000000000000000000000018412155b15613f2357600a850294506001840393505b600a80860290810586148015613f5957507f80000000000000000000000000000000000000000000000000000000000000018512155b15613f68578095506001850394505b50939492935050507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000008305151590565b60605f8212613fb55760405180602001604052805f815250613fec565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b613ffd60ff84901d80850118614024565b60405160200161400e929190614ba9565b6040516020818303038152906040529050919050565b60605f61403083614233565b60010190505f8167ffffffffffffffff81111561404f5761404f614625565b6040519080825280601f01601f191660200182016040528015614079576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461408357509392505050565b5f5b5f82600186515f1a1b16118385101615614101576001840193506140e2565b509192915050565b81515f90819065200000000000600191831a9190911b161515838510168085019082806141368488614314565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615614171575093505f92506106ad915050565b825f036141d4577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116141a5575f6141c7565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b955093506106ad92505050565b7f80000000000000000000000000000000000000000000000000000000000000008111614201575f614223565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95505f0393505050509250929050565b5f807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061427b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106142a7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106142c557662386f26fc10000830492506010015b6305f5e10083106142dd576305f5e100830492506008015b61271083106142f157612710830492506004015b60648310614303576064830492506002015b600a83106106845760010192915050565b5f8082841061434757507f34bd20690000000000000000000000000000000000000000000000000000000090505f6106ad565b835f03614380576040517fda6966d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60305f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501815b8782101580156143b85750604d83105b156143fb57815160018401937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90930192600a0a5f9190911a85900302016143a8565b8782106145215781515f1a849003600181111561444357507f0fdc26350000000000000000000000000000000000000000000000000000000095505f94506106ad9350505050565b600a84900a810282810183111561448657507f0fdc26350000000000000000000000000000000000000000000000000000000096505f95506106ad945050505050565b9190910190507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101905b8782106145215781515f1a603081146144f657507f0fdc26350000000000000000000000000000000000000000000000000000000095505f94506106ad9350505050565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101906144b2565b5f9890975095505050505050565b5f6020828403121561453f575f80fd5b5035919050565b5f8060408385031215614557575f80fd5b50508035926020909101359150565b803560ff81168114613acb575f80fd5b5f8060408385031215614587575f80fd5b8235915061459760208401614566565b90509250929050565b5f80604083850312156145b1575f80fd5b82359150602083013580151581146145c7575f80fd5b809150509250929050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60208284031215614662575f80fd5b813567ffffffffffffffff80821115614679575f80fd5b818401915084601f83011261468c575f80fd5b81358181111561469e5761469e614625565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156146e4576146e4614625565b816040528281528760208487010111156146fc575f80fd5b826020860160208301375f928101602001929092525095945050505050565b5f805f6060848603121561472d575f80fd5b505081359360208301359350604090920135919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b600181815b808511156147f757817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156147dd576147dd614771565b808516156147ea57918102915b93841c93908002906147a3565b509250929050565b5f8261480d57506001610684565b8161481957505f610684565b816001811461482f576002811461483957614855565b6001915050610684565b60ff84111561484a5761484a614771565b50506001821b610684565b5060208310610133831016604e8410600b8410161715614878575081810a610684565b614882838361479e565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156148b4576148b4614771565b029392505050565b5f61069583836147ff565b808202811582820484141761068457610684614771565b8181035f8312801583831316838312821617156148fd576148fd614771565b5092915050565b8082018281125f83128015821682158216171561492357614923614771565b505092915050565b8082025f82127f80000000000000000000000000000000000000000000000000000000000000008414161561496257614962614771565b818105831482151761068457610684614771565b5f8261498457614984614744565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f8000000000000000000000000000000000000000000000000000000000000000831416156149d8576149d8614771565b500590565b5f826149eb576149eb614744565b500790565b5f7f80000000000000000000000000000000000000000000000000000000000000008203613ac157613ac1614771565b5f82614a2e57614a2e614744565b500490565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a6357614a63614771565b5060010190565b5f81518060208401855e5f93019283525090919050565b5f614a8c8284614a6a565b7f300000000000000000000000000000000000000000000000000000000000000081526001019392505050565b7f2e0000000000000000000000000000000000000000000000000000000000000081525f614af3614aed6001840186614a6a565b84614a6a565b949350505050565b7f650000000000000000000000000000000000000000000000000000000000000081525f6106956001830184614a6a565b5f614b4c614aed614b46614b40858a614a6a565b88614a6a565b86614a6a565b9695505050505050565b8181038181111561068457610684614771565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b8082018082111561068457610684614771565b5f614af3614aed8386614a6a56", - "sourceMap": "525:13549:37:-:0;;;1114:77;;;;;;;;;-1:-1:-1;1138:46:37;:44;:46::i;:::-;525:13549;;2590:358:43;721:42;2673;934:66;2729:47;;2725:217;;2799:132;;-1:-1:-1;;;2799:132:43;;721:42;2799:132;;;216:51:134;934:66:43;283:18:134;;;276:34;326:18;;;319:34;;;189:18;;2799:132:43;;;;;;;2725:217;2638:310;2590:358::o;14:345:134:-;525:13549:37;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x608060405234801561000f575f80fd5b506004361061029d575f3560e01c806381f7e2f511610171578063cde72ef3116100d2578063dd64691711610088578063e5526ecd1161006e578063e5526ecd1461062e578063e75f991f14610641578063ffae15ba14610654575f80fd5b8063dd64691714610608578063e0db58881461061b575f80fd5b8063d1de592a116100b8578063d1de592a146105bb578063d35273a7146105ce578063d3d6ffa8146105f5575f80fd5b8063cde72ef314610582578063d102b4d3146105a8575f80fd5b8063a19684b711610127578063bc1b392d1161010d578063bc1b392d1461050b578063bc62d8d814610511578063cb09682b1461055c575f80fd5b8063a19684b7146104d2578063a90d041a146104f8575f80fd5b806396ce1ec71161015757806396ce1ec7146104885780639b4afd991461049b578063a100a3d9146104bf575f80fd5b806381f7e2f5146104625780638dc2980714610475575f80fd5b80633447c0301161021b5780635ca0e7a4116101d1578063719cd99d116101b7578063719cd99d1461042957806373bfb2831461043c57806381a822721461044f575f80fd5b80635ca0e7a4146103f0578063602c35fc14610403575f80fd5b80633b3bd868116102015780633b3bd868146103b757806341aa0080146103ca5780635b23771d146103dd575f80fd5b80633447c03014610374578063371493ce14610397575f80fd5b80631ee62f111161027057806328fa1f011161025657806328fa1f011461033b5780633004fa411461034e5780633029740014610361575f80fd5b80631ee62f11146103155780632538835014610328575f80fd5b806304327dc5146102a1578063078b665b146102c75780630b6429bc146102da578063146e82ad14610302575b5f80fd5b6102b46102af36600461452f565b61067a565b6040519081526020015b60405180910390f35b6102b46102d5366004614546565b61068a565b6102ed6102e8366004614576565b61069c565b604080519283529015156020830152016102be565b6102b461031036600461452f565b6106b4565b6102b461032336600461452f565b6106d3565b6102b461033636600461452f565b6106f2565b6102b461034936600461452f565b610711565b6102b461035c366004614546565b61071b565b6102b461036f366004614546565b61073b565b610387610382366004614546565b610746565b60405190151581526020016102be565b6103aa6103a53660046145a0565b610751565b6040516102be91906145d2565b6102b46103c5366004614576565b61075d565b6102b46103d8366004614546565b610768565b6102b46103eb366004614576565b610773565b6102b46103fe36600461452f565b61077e565b7f80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff6102b4565b6102b461043736600461452f565b610788565b61038761044a366004614546565b610792565b6102b461045d36600461452f565b61079d565b610387610470366004614546565b6107a7565b610387610483366004614546565b6107b2565b6102b4610496366004614546565b6107bd565b6102b47c090000000000000000000000000000000000000000000000000000000181565b6103aa6104cd36600461452f565b6107c8565b7f80000000000000000000000000000000000000000000000000000000000000016102b4565b6102b4610506366004614546565b610812565b5f6102b4565b61052461051f366004614652565b61081d565b604080517fffffffff0000000000000000000000000000000000000000000000000000000090931683526020830191909152016102be565b7f7fffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffff6102b4565b7f7fffffff800000000000000000000000000000000000000000000000000000006102b4565b6103876105b6366004614546565b610836565b6102b46105c9366004614546565b610841565b6102b47ffffffffc0000000000000000000000000000000000000000000000000000000181565b6102b461060336600461452f565b61084c565b61038761061636600461452f565b610856565b6102b461062936600461452f565b61087c565b6103aa61063c36600461471b565b610886565b6102ed61064f366004614576565b61090f565b7fffffffbe19cfc6ef4f44cf88f14500d013df534fcaad48fca1d5ca47bea26fcc6102b4565b5f6106848261091b565b92915050565b5f6106958383610967565b9392505050565b5f806106a88484610983565b915091505b9250929050565b5f6106848273c51a14251b0dcf0ae24a96b7153991378938f5f56109c4565b5f6106848273c51a14251b0dcf0ae24a96b7153991378938f5f56109f0565b5f6106848273c51a14251b0dcf0ae24a96b7153991378938f5f5610a3e565b5f61068482610a71565b5f610695838373c51a14251b0dcf0ae24a96b7153991378938f5f5610ab2565b5f6106958383610d0d565b5f6106958383610d70565b60606106958383610dbe565b5f6106958383610e51565b5f6106958383610e6c565b5f6106958383610eb1565b5f61068482610ee4565b5f61068482610fa6565b5f6106958383611052565b5f610684826110a2565b5f61069583836110e7565b5f6106958383611137565b5f6106958383611186565b6060610684827ffffffffc000000000000000000000000000000000000000000000000000000017c0900000000000000000000000000000000000000000000000000000001610886565b5f61069583836111cb565b5f805f8061082a856111d6565b90969095509350505050565b5f61069583836112c4565b5f6106958383611313565b5f61068482611358565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff821615610684565b5f6106848261138a565b606061089283836112c4565b6108d7576040517f3be5bf9400000000000000000000000000000000000000000000000000000000815260048101849052602481018390526044015b60405180910390fd5b5f6108e1856110a2565b9050610906856108f183876112c4565b8061090157506109018386611137565b610dbe565b95945050505050565b5f806106a884846113cb565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d61094d828261140b565b90925090505f61095d8383611459565b5095945050505050565b5f6109728383611137565b61097c5781610695565b5090919050565b5f807bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8416601b0b60e085901d6109b782828761155f565b9350935050509250929050565b5f610695837fffffffff0000000000000000000000000000000000000000000000000000000584610ab2565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d610a238483836116ae565b90925090505f610a338383611459565b509695505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d610a2384838361181f565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d82610aa48383611b54565b9150505f610a338284611459565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff848116601b0b9060e086901d908516610aef5750600191506106959050565b5f8213610b8857815f03610b4c57610b07855f6112c4565b15610b41576040517f8be82972000000000000000000000000000000000000000000000000000000008152600481018690526024016108ce565b505f91506106959050565b6040517fcceba0f100000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016108ce565b610b93856001610d70565b8015610ba45750610ba4865f611137565b15610bb3578592505050610695565b610bbd855f6112c4565b15610be657610bdd610bce8761091b565b610bd787611358565b86610ab2565b92505050610695565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8516601b0b60e086901d5f80610c198484611b54565b915091505f610c2983855f611bbc565b905060015f8080610c608f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b9160e09190911d90565b915091505b60018510610ca75784600116600103610c8a57610c8484848484611cd3565b90945092505b600185901c9450610c9d82828484611cd3565b9092509050610c65565b5f80610cb48f8e8e61181f565b91509150610cc482828a8d611cd3565b9092509050610cd48f83836116ae565b9092509050610ce582828888611cd3565b90925090505f610cf58383611459565b509e5050505050505050505050505050509392505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686611df2565b915091505f610d618383611459565b509a9950505050505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d610db384848484612416565b979650505050505050565b60607bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d5f829003610e2e576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525092505050610684565b8315610e4757610e3e828261242d565b92505050610684565b61090682826126fd565b5f805f610e5e8585612e64565b915091506109068282612ec6565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686612f20565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d610906828286612f4a565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828112610f1b57509192915050565b5f80610f278484611b54565b915091505f84128015610f3957508015155b15610f8f57610f8a82847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4612f20565b935091505b5f610f9a8385611459565b50979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828112610fdd57509192915050565b5f80610fe98484611b54565b91509150805f03610ffe575093949350505050565b5f811315610f8f57610f8a82847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4612fa6565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d611095848484846130d6565b1315979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828212156110dc5761094d82826131aa565b5f61095d8383611459565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d61112a848484846130d6565b1215979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d61117a848484846130d6565b12979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686611cd3565b5f61097283836112c4565b80515f908190602084810191850101828080806111f3868661324d565b929650909450925090507fffffffff0000000000000000000000000000000000000000000000000000000084165f036112b557848303611285575f806112398484611459565b915091508061127457507f32b8b8be000000000000000000000000000000000000000000000000000000009a5f9a5098505050505050505050565b505f9a909950975050505050505050565b507fad384e8700000000000000000000000000000000000000000000000000000000985f98509650505050505050565b5091975f975095505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d611307848484846130d6565b13979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686612fa6565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d61094d82826131aa565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d826113bd8383611b54565b5090505f610a338284611459565b5f805f805f6113da87876136ec565b9250925092505f806113ec8585611459565b91509150818380156113fb5750815b9650965050505050509250929050565b5f806106a87f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb48686611df2565b5f601b83900b83148383826114bd577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561149d57620186a0860595506005850194505b8586601b0b146114b857600a8605955084600101945061149d565b6114d3565b855f036114d357505f9250600191506106ad9050565b848560030b1461152f575f8512156114f357505f92508291506106ad9050565b6040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016108ce565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f8512156115a5576040517f4a7d166b00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016108ce565b845f036115b757505f905060016116a6565b8460ff8416850185811215611602576040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101889052602481018790526044016108ce565b5f805f83121561166c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb3831215611643575f8095509550505050506116a6565b825f03600a0a915081848161165a5761165a614744565b04955050840290911491506116a69050565b5f83131561169b5761167f83600a6148bc565b915061168b82856148c7565b9550600194506116a69350505050565b509193506001925050505b935093915050565b5f805f8412156116ea576116c284846131aa565b90945092506116d28585856116ae565b90945092506116e1848461140b565b915091506116a6565b5f806116f68686611b54565b9092509050845f80806117098585613748565b9194509250905061270d6127106117216001826148de565b8514611738576117328d8686613837565b90925090505b83156117c3575f61174a866001614904565b90505b80848583028161175f5761175f614744565b051461177657600a84059350600a8805975061174d565b6117b7611783858861492b565b8961178e878561492b565b8f87877ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6138f0565b909d509b506117ea9050565b819b507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc9a505b5050505050866117fb84835f611bbc565b611806886001614904565b6118109190614904565b94509450505050935093915050565b5f80838361182d828261398d565b90965094505f86136118ae57855f03611872576040517f561fc7b500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5d3fd4db00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016108ce565b5050837f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000036118ec576118e283604c614904565b5f915091506116a6565b7f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000008412158061193b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb561195d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb45b5f0b8412611b18575f805f805f8561197657604b611979565b604c5b611983908a614904565b90505f80876119b0577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000006119d1565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca0000000000000000005b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff169050808c81611a0357611a03614744565b05818102955090850193507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18019050611a3c8c826139e3565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000000295508594508a8414611ac8576123278114611aa357611a7e8c826001016139e3565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000002611ac5565b7f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000005b94505b50611af8838b848c89897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb46138f0565b909a509850611b098a8a835f612fa6565b975097505050505050506116a6565b611b22858561140b565b9095509350611b3286868661181f565b9095509350611b4185856131aa565b92509250506116a6565b50935093915050565b5f805f8312611b6757508290505f6106ad565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4831215611b9957505f9050826106ad565b5f839003600a0a808581611baf57611baf614744565b0794859003959350505050565b5f818303611bcb575082610695565b82821315611c0e57828203604c811380611be557505f8113155b15611bf3575f915050610695565b80600a0a8581611c0557611c05614744565b05915050610695565b818303604c811380611c2057505f8113155b15611c68576040517f1d5d6d100000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490526064016108ce565b600a81900a85810286828281611c8057611c80614744565b0514611cc9576040517f1d5d6d100000000000000000000000000000000000000000000000000000000081526004810188905260248101879052604481018690526064016108ce565b9250610695915050565b5f8085158415178015611ceb575f92505f9150611de8565b611cf58487614904565b91505f611d0188613a6a565b90505f611d0d87613a6a565b90505f611d1a8383613ad0565b5090505f6f0785ee10d5da46d900f436a000000000821115611d4f576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a7640000821115611d7057670de0b6b3a7640000820491506012015b633b9aca00821115611d8957633b9aca00820491506009015b612710821115611d9e57612710820491506004015b8115611db257600a82049150600101611d9e565b611dbc8187614904565b9550611dde8b8a611dd88787611dd387600a6148bc565b613b0b565b89613bf0565b9097509550505050505b5094509492505050565b5f80835f03611e37576040517f7a97930f00000000000000000000000000000000000000000000000000000000815260048101879052602481018690526044016108ce565b855f03611e4857505f90508061240d565b5f805f80611e568a8a613cf7565b919b5099509150611e678888613cf7565b919950975090505f611e788b613a6a565b90505f611e848a613a6a565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c818310156122a1578415611ee257507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000009050604b612260565b6f4b3b4ca85a86c47a098a22400000000083101561200e57678ac7230489e80000831015611f72576402540be400831015611f4057620186a0831015611f305750620186a0905060056121e9565b506402540be4009050600a6121e9565b655af3107a4000831015611f5f5750655af3107a40009050600e6121e9565b50678ac7230489e80000905060136121e9565b6b204fce5e3e25026110000000831015611fc45769152d02c7e14af6800000831015611fad575069152d02c7e14af6800000905060176121e9565b506b204fce5e3e250261100000009050601c6121e9565b6d314dc6448d9338c15b0a00000000831015611ff357506d314dc6448d9338c15b0a00000000905060216121e9565b506f4b3b4ca85a86c47a098a224000000000905060266121e9565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156121065773af298d050e4395d69670b12b7f410000000000008310156120a1577172cb5bd86321e38cb6ce6682e8000000000083101561208257507172cb5bd86321e38cb6ce6682e800000000009050602b6121e9565b5073af298d050e4395d69670b12b7f41000000000000905060306121e9565b76010b46c6cdd6e3e0828f4db456ff0c8ea00000000000008310156120e2575076010b46c6cdd6e3e0828f4db456ff0c8ea0000000000000905060356121e9565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a6121e9565b7c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000083101561219c577a026e4d30eccc3215dd8f3157d27e23acbdcfe6800000000000000083101561217457507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f6121e9565b507c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000905060446121e9565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca0000000000000000008310156121e957507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b81831161221d57600a820491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016121e9565b815f03612260576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018d9052602481018c90526044016108ce565b856122a1576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018f9052602481018e90526044016108ce565b807f8000000000000000000000000000000000000000000000000000000000000000018d126122d457808d039c50612347565b7f80000000000000000000000000000000000000000000000000000000000000009c90038c015f81131561234757807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038b1361233457998a0199612347565b5f8099509950505050505050505061240d565b5f808e12801561235657505f8c135b15612393577f80000000000000000000000000000000000000000000000000000000000000008e01808d1361238b575f61238f565b808d035b9150505b8b818f010397506123b08f8e6123aa888789613b0b565b8b613bf0565b90995097505f8113156123fa57604c8113156123da575f809a509a5050505050505050505061240d565b80600a0a89816123ec576123ec614744565b059850885f036123fa575f97505b5096985094965061240d95505050505050565b94509492505050565b5f612423858585856130d6565b1495945050505050565b6060612439838361398d565b90935091505f8061246a7f161bcca7119915b50764b4abe86529797775a5f171951000000000000000000086614976565b1561249a57507f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000009050604c6124c1565b507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000009050604b5b5f6124cc8387614976565b90505f6124d984886149dd565b90505f808312156124f3575060016124f0836149f0565b92505b5f82121561250a57506001612507826149f0565b91505b60408051602081019091525f81528215612613575f8061252b600a89614a20565b90505b6125388186614976565b5f0361255d57612549600a82614a20565b90508161255581614a33565b92505061252e565b60408051602081019091525f8082525b838110156125be57816040516020016125869190614a81565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052915060010161256d565b505b6125cb600a876149dd565b5f036125e3576125dc600a87614976565b95506125c0565b806125ed87613f98565b6040516020016125fe929190614ab9565b60405160208183030381529060405293505050505b5f61261d85613f98565b90505f61262a878b614904565b90505f81156126605761263c82613f98565b60405160200161264c9190614afb565b604051602081830303815290604052612670565b60405180602001604052805f8152505b90505f8561268c5760405180602001604052805f8152506126c3565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b9050808486846040516020016126dc9493929190614b2c565b6040516020818303038152906040529a505050505050505050505092915050565b60606103e882138061271857506127156103e86149f0565b82125b15612752576040517fe44c72b0000000000000000000000000000000000000000000000000000000008152600481018390526024016108ce565b5f80841290811561276d57612766856149f0565b9050612770565b50835b5f61277a82614024565b80519091505f5b81811080156127fd57508281612798600185614b56565b6127a29190614b56565b815181106127b2576127b2614b69565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f3000000000000000000000000000000000000000000000000000000000000000145b15612814578061280c81614a33565b915050612781565b5f61281f8284614b56565b90505f61282c838a614904565b90505f876128485760405180602001604052805f81525061287f565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b90505f82126129f957815f6128948286614b96565b67ffffffffffffffff8111156128ac576128ac614625565b6040519080825280601f01601f1916602001820160405280156128d6576020820181803683370190505b5090505f5b85811015612948578881815181106128f5576128f5614b69565b602001015160f81c60f81b82828151811061291257612912614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053506001016128db565b505f5b828110156129c5577f30000000000000000000000000000000000000000000000000000000000000008261297f8389614b96565b8151811061298f5761298f614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535060010161294b565b5082816040516020016129d9929190614ba9565b6040516020818303038152906040529a5050505050505050505050610684565b5f612a03836149f0565b905080841115612c1a575f612a188286614b56565b90505f612a26866001614b96565b67ffffffffffffffff811115612a3e57612a3e614625565b6040519080825280601f01601f191660200182016040528015612a68576020820181803683370190505b5090505f5b82811015612ada57898181518110612a8757612a87614b69565b602001015160f81c60f81b828281518110612aa457612aa4614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612a6d565b507f2e00000000000000000000000000000000000000000000000000000000000000818381518110612b0e57612b0e614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5b83811015612be55789612b518285614b96565b81518110612b6157612b61614b69565b01602001517fff00000000000000000000000000000000000000000000000000000000000000168282612b95866001614b96565b612b9f9190614b96565b81518110612baf57612baf614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612b3e565b508381604051602001612bf9929190614ba9565b6040516020818303038152906040529b505050505050505050505050610684565b5f612c258583614b56565b90505f85612c34836002614b96565b612c3e9190614b96565b67ffffffffffffffff811115612c5657612c56614625565b6040519080825280601f01601f191660200182016040528015612c80576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f81518110612cb657612cb6614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f2e0000000000000000000000000000000000000000000000000000000000000081600181518110612d1857612d18614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5b82811015612dc3577f300000000000000000000000000000000000000000000000000000000000000082612d7d836002614b96565b81518110612d8d57612d8d614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612d48565b505f5b86811015612be557898181518110612de057612de0614b69565b01602001517fff00000000000000000000000000000000000000000000000000000000000000168282612e14866002614b96565b612e1e9190614b96565b81518110612e2e57612e2e614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612dc6565b5f805f805f612e7387876136ec565b92509250925080612eba576040517fc471796600000000000000000000000000000000000000000000000000000000815260048101849052602481018390526044016108ce565b50909590945092505050565b5f805f612ed38585611459565b9150915080612f18576040517f22c9f7bb00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016108ce565b509392505050565b5f80612f2c84846131aa565b9094509250612f3d86868686612fa6565b9150915094509492505050565b5f805f612f5886868661155f565b9150915080612f9d576040517f05e4767800000000000000000000000000000000000000000000000000000000815260048101879052602481018690526044016108ce565b50949350505050565b5f8085158415178015612fd257865f03612fc6578484925092505061240d565b8686925092505061240d565b612fdc878761398d565b9097509550612feb858561398d565b909550935085841315612fff579395929492935b838603604c81111561301857878793509350505061240d565b80600a0a868161302a5761302a614744565b0595505086850180881860ff90811c151589881890911c151680156130c557877f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff036130ac576040517fd556b111000000000000000000000000000000000000000000000000000000008152600481018a9052602481018990526044016108ce565b600a9687900596909805860197600197909701966130c9565b8198505b5096979596505050505050565b5f80851584151781871282861218178584141780156130fb578685925092505061240d565b505f8584131561310f575092949193919260015b8386035f8112604c8213178015613142578215613134575f899450945050505061240d565b885f9450945050505061240d565b600a82900a8981028a82828161315a5761315a614744565b0514613186578415613176575f8b96509650505050505061240d565b8a5f96509650505050505061240d565b841561319b57889650945061240d9350505050565b955087945061240d9350505050565b5f807f80000000000000000000000000000000000000000000000000000000000000008403613243577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8303613236576040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101859052602481018490526044016108ce565b600a840593508260010192505b50505f9190910391565b5f8281806132628386652000000000006140e0565b9250858314158361327c81886703ff0000000000006140e0565b94508085036132b657507f34bd20690000000000000000000000000000000000000000000000000000000094505f92508291506136e39050565b5f806132c28a88614109565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613300575095505f93508392506136e3915050565b86519095506540000000000060015f9290921a9190911b16151588871016915050801561358f57506001909301925f8461334381896703ff0000000000006140e0565b955080860361337e57507f7bfa48af0000000000000000000000000000000000000000000000000000000095505f93508392506136e3915050565b855b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018051908a1160015f9290921a9190911b6601000000000000161515166001036133ed577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613380565b818114613444575f806134008484614109565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613440575097505f95508594506136e39350505050565b9350505b5f83121561347f57507f7bfa48af0000000000000000000000000000000000000000000000000000000096505f94508493506136e392505050565b831561348b57825f0392505b80820394505f8513156134cb57507f013b2aaa0000000000000000000000000000000000000000000000000000000096505f94508493506136e392505050565b855f036134da5782955061358c565b5f859003604381111561351b57507f32b8b8be0000000000000000000000000000000000000000000000000000000097505f95508594506136e39350505050565b600a0a8681025f8883838161353257613532614744565b0514159050601b82900b82141581806135485750805b1561358457507f32b8b8be000000000000000000000000000000000000000000000000000000009a505f98508897506136e39650505050505050565b505084019650505b50505b84516c2000000020000000000000000060015f9290921a9190911b1615158786101680156136d457600190950194856135cf818a652000000000006140e0565b9650866135e5818b6703ff0000000000006140e0565b975080880361362257507f013b2aaa0000000000000000000000000000000000000000000000000000000097505f95508594506136e39350505050565b505f8061362f838a614109565b90925090507fffffffff0000000000000000000000000000000000000000000000000000000082161561366f575097505f95508594506136e39350505050565b9250508482015f8313801561368357508581125b8061369757505f8312801561369757508581135b156136d057507fd556b1110000000000000000000000000000000000000000000000000000000097505f95508594506136e39350505050565b9450505b845f036136df575f93505b5050505b92959194509250565b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86111561373757600a860460018201600a88065f1493509350935050613741565b8593509150600190505b9250925092565b5f805f837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0361378057508391505f90506001613741565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc84121561380e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb08412156137df57505f9150508215156001613741565b5f846004015f03600a0a90505f8187816137fb576137fb614744565b0594505080840286141592509050613741565b5f841261382357505f91508190506001613741565b50505060048101600a0a82025f6001613741565b5f80806064613849600a612328614a20565b613856600a612328614a20565b6138619060026148c7565b61386c906001614b96565b6138769190614b96565b6138809190614b96565b90506138c4565b5f8052600280600a8504028301601e833c5f80516107d0840193505f80526001600a8606600a6064880402018501601f853c5f5101949350505050565b6138cf858288613887565b92508315611b4b576138e5600186018288613887565b915050935093915050565b5f80888803613903575083905081613981565b5f805f806139138c8b8f8d612f20565b915091505f806139258a8a8d8c612f20565b9150915061393584848484611cd3565b8096508197505050505050505f8061394f8b8b8f8d612f20565b915091505f8061396186868686611df2565b915091505f8061397384848f8e612fa6565b909a50985050505050505050505b97509795505050505050565b5f805f805f61399c8787613cf7565b92509250925080612eba576040517f05e51ecb00000000000000000000000000000000000000000000000000000000815260048101889052602481018790526044016108ce565b5f806139f2600a612328614a20565b6139fd9060026148c7565b613a08906001614b96565b90505f613a18600a612328614a20565b90506002600a8504026001015f8052600281601e883c505f51617fff81169350618000811615613a4757918101915b505f80526001600a8506600a6064870402018301601f873c50505f510192915050565b5f80821215613ac7577f80000000000000000000000000000000000000000000000000000000000000008203613ac157507f8000000000000000000000000000000000000000000000000000000000000000919050565b505f0390565b5090565b919050565b5f807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83850993909202808410938190039390930393915050565b5f805f613b188686613ad0565b91509150815f03613b3c57838181613b3257613b32614744565b0492505050610695565b838210613b86576040517f6c59da120000000000000000000000000000000000000000000000000000000081526004810187905260248101869052604481018590526064016108ce565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f8587181215613cba577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115613ca757613c4f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001614b96565b8403613c7f57507f800000000000000000000000000000000000000000000000000000000000000090508161240d565b613c8a600a85614a20565b613c93906149f0565b613c9e846001614904565b9150915061240d565b613cb0846149f0565b839150915061240d565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115613ced57613c93600a85614a20565b508290508161240d565b5f805f845f03613d0f57505f91508190506001613741565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee800000000000000000085055f03613f23576f4b3b4ca85a86c47a098a2240000000008505158015613d7857507f80000000000000000000000000000000000000000000000000000000000000268412155b15613d99576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a000000000000008505158015613de157507f80000000000000000000000000000000000000000000000000000000000000138412155b15613dfa57678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c6400000000000000008505158015613e4657507f800000000000000000000000000000000000000000000000000000000000000a8412155b15613e5c576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e40000000000000000008505158015613eab57507f80000000000000000000000000000000000000000000000000000000000000028412155b15613ec157606485029450600284039350613e5c565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000008505158015613f1157507f80000000000000000000000000000000000000000000000000000000000000018412155b15613f2357600a850294506001840393505b600a80860290810586148015613f5957507f80000000000000000000000000000000000000000000000000000000000000018512155b15613f68578095506001850394505b50939492935050507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000008305151590565b60605f8212613fb55760405180602001604052805f815250613fec565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b613ffd60ff84901d80850118614024565b60405160200161400e929190614ba9565b6040516020818303038152906040529050919050565b60605f61403083614233565b60010190505f8167ffffffffffffffff81111561404f5761404f614625565b6040519080825280601f01601f191660200182016040528015614079576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461408357509392505050565b5f5b5f82600186515f1a1b16118385101615614101576001840193506140e2565b509192915050565b81515f90819065200000000000600191831a9190911b161515838510168085019082806141368488614314565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615614171575093505f92506106ad915050565b825f036141d4577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116141a5575f6141c7565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b955093506106ad92505050565b7f80000000000000000000000000000000000000000000000000000000000000008111614201575f614223565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95505f0393505050509250929050565b5f807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061427b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106142a7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106142c557662386f26fc10000830492506010015b6305f5e10083106142dd576305f5e100830492506008015b61271083106142f157612710830492506004015b60648310614303576064830492506002015b600a83106106845760010192915050565b5f8082841061434757507f34bd20690000000000000000000000000000000000000000000000000000000090505f6106ad565b835f03614380576040517fda6966d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60305f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501815b8782101580156143b85750604d83105b156143fb57815160018401937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90930192600a0a5f9190911a85900302016143a8565b8782106145215781515f1a849003600181111561444357507f0fdc26350000000000000000000000000000000000000000000000000000000095505f94506106ad9350505050565b600a84900a810282810183111561448657507f0fdc26350000000000000000000000000000000000000000000000000000000096505f95506106ad945050505050565b9190910190507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101905b8782106145215781515f1a603081146144f657507f0fdc26350000000000000000000000000000000000000000000000000000000095505f94506106ad9350505050565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101906144b2565b5f9890975095505050505050565b5f6020828403121561453f575f80fd5b5035919050565b5f8060408385031215614557575f80fd5b50508035926020909101359150565b803560ff81168114613acb575f80fd5b5f8060408385031215614587575f80fd5b8235915061459760208401614566565b90509250929050565b5f80604083850312156145b1575f80fd5b82359150602083013580151581146145c7575f80fd5b809150509250929050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60208284031215614662575f80fd5b813567ffffffffffffffff80821115614679575f80fd5b818401915084601f83011261468c575f80fd5b81358181111561469e5761469e614625565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156146e4576146e4614625565b816040528281528760208487010111156146fc575f80fd5b826020860160208301375f928101602001929092525095945050505050565b5f805f6060848603121561472d575f80fd5b505081359360208301359350604090920135919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b600181815b808511156147f757817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156147dd576147dd614771565b808516156147ea57918102915b93841c93908002906147a3565b509250929050565b5f8261480d57506001610684565b8161481957505f610684565b816001811461482f576002811461483957614855565b6001915050610684565b60ff84111561484a5761484a614771565b50506001821b610684565b5060208310610133831016604e8410600b8410161715614878575081810a610684565b614882838361479e565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156148b4576148b4614771565b029392505050565b5f61069583836147ff565b808202811582820484141761068457610684614771565b8181035f8312801583831316838312821617156148fd576148fd614771565b5092915050565b8082018281125f83128015821682158216171561492357614923614771565b505092915050565b8082025f82127f80000000000000000000000000000000000000000000000000000000000000008414161561496257614962614771565b818105831482151761068457610684614771565b5f8261498457614984614744565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f8000000000000000000000000000000000000000000000000000000000000000831416156149d8576149d8614771565b500590565b5f826149eb576149eb614744565b500790565b5f7f80000000000000000000000000000000000000000000000000000000000000008203613ac157613ac1614771565b5f82614a2e57614a2e614744565b500490565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a6357614a63614771565b5060010190565b5f81518060208401855e5f93019283525090919050565b5f614a8c8284614a6a565b7f300000000000000000000000000000000000000000000000000000000000000081526001019392505050565b7f2e0000000000000000000000000000000000000000000000000000000000000081525f614af3614aed6001840186614a6a565b84614a6a565b949350505050565b7f650000000000000000000000000000000000000000000000000000000000000081525f6106956001830184614a6a565b5f614b4c614aed614b46614b40858a614a6a565b88614a6a565b86614a6a565b9695505050505050565b8181038181111561068457610684614771565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b8082018082111561068457610684614771565b5f614af3614aed8386614a6a56", - "sourceMap": "525:13549:37:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6819:83;;;;;;:::i;:::-;;:::i;:::-;;;399:25:134;;;387:2;372:18;6819:83:37;;;;;;;;11299:93;;;;;;:::i;:::-;;:::i;13850:222::-;;;;;;:::i;:::-;;:::i;:::-;;;;1353:25:134;;;1421:14;;1414:22;1409:2;1394:18;;1387:50;1326:18;13850:222:37;1185:258:134;10667:140:37;;;;;;:::i;:::-;;:::i;9694:142::-;;;;;;:::i;:::-;;:::i;9997:::-;;;;;;:::i;:::-;;:::i;8997:85::-;;;;;;:::i;:::-;;:::i;10353:150::-;;;;;;:::i;:::-;;:::i;6590:93::-;;;;;;:::i;:::-;;:::i;7121:90::-;;;;;;:::i;:::-;;:::i;:::-;;;1613:14:134;;1606:22;1588:41;;1576:2;1561:18;7121:90:37;1448:187:134;4526:156:37;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;12040:182::-;;;;;;:::i;:::-;;:::i;5530:93::-;;;;;;:::i;:::-;;:::i;12556:172::-;;;;;;:::i;:::-;;:::i;9229:87::-;;;;;;:::i;:::-;;:::i;1849:122::-;4788:66:42;1849:122:37;;9463:85;;;;;;:::i;:::-;;:::i;8475:92::-;;;;;;:::i;:::-;;:::i;6015:83::-;;;;;;:::i;:::-;;:::i;8125:92::-;;;;;;:::i;:::-;;:::i;7780:90::-;;;;;;:::i;:::-;;:::i;6300:93::-;;;;;;:::i;:::-;;:::i;967:140::-;;1040:66;967:140;;4894:158;;;;;;:::i;:::-;;:::i;1589:122::-;4499:66:42;1589:122:37;;11007:93;;;;;;:::i;:::-;;:::i;2375:96::-;2414:5;2375:96;;3040:211;;;;;;:::i;:::-;;:::i;:::-;;;;4336:66:134;4324:79;;;4306:98;;4435:2;4420:18;;4413:34;;;;4279:18;3040:211:37;4107:346:134;1329:122:37;4228:66:42;1329:122:37;;2109;5091:66:42;2109:122:37;;7445:90;;;;;;:::i;:::-;;:::i;5240:93::-;;;;;;:::i;:::-;;:::i;706:140::-;;779:66;706:140;;5760:87;;;;;;:::i;:::-;;:::i;11554:88::-;;;;;;:::i;:::-;;:::i;8735:91::-;;;;;;:::i;:::-;;:::i;3821:383::-;;;;;;:::i;:::-;;:::i;13202:232::-;;;;;;:::i;:::-;;:::i;2602:90::-;5335:66:42;2602:90:37;;6819:83;6864:5;6888:7;:1;:5;:7::i;:::-;6881:14;6819:83;-1:-1:-1;;6819:83:37:o;11299:93::-;11353:5;11377:8;:1;11383;11377:5;:8::i;:::-;11370:15;11299:93;-1:-1:-1;;;11299:93:37:o;13850:222::-;13931:7;13940:4;14013:52;14049:5;14056:8;14013:35;:52::i;:::-;14006:59;;;;13850:222;;;;;;:::o;10667:140::-;10713:5;10737:63;:1;721:42:43;10737:6:37;:63::i;9694:142::-;9741:5;9765:64;:1;721:42:43;9765:7:37;:64::i;9997:142::-;10044:5;10068:64;:1;721:42:43;10068:7:37;:64::i;8997:85::-;9043:5;9067:8;:1;:6;:8::i;10353:150::-;10407:5;10431:65;:1;10437;721:42:43;10431:5:37;:65::i;6590:93::-;6644:5;6668:8;:1;6674;6668:5;:8::i;7121:90::-;7174:4;7197:7;:1;7202;7197:4;:7::i;4526:156::-;4591:13;4623:52;4661:1;4664:10;4623:37;:52::i;12040:182::-;12128:5;12152:63;12199:5;12206:8;12152:46;:63::i;5530:93::-;5584:5;5608:8;:1;5614;5608:5;:8::i;12556:172::-;12640:7;12666:55;12705:5;12712:8;12666:38;:55::i;9229:87::-;9276:5;9300:9;:1;:7;:9::i;9463:85::-;9509:5;9533:8;:1;:6;:8::i;8475:92::-;8529:4;8552:8;:1;8558;8552:5;:8::i;6015:83::-;6060:5;6084:7;:1;:5;:7::i;8125:92::-;8179:4;8202:8;:1;8208;8202:5;:8::i;7780:90::-;7833:4;7856:7;:1;7861;7856:4;:7::i;6300:93::-;6354:5;6378:8;:1;6384;6378:5;:8::i;4894:158::-;4942:13;4974:71;4981:1;779:66;1040;4974:6;:71::i;11007:93::-;11061:5;11085:8;:1;11091;11085:5;:8::i;3040:211::-;3097:6;3105:5;3123:20;3145:12;3161:43;3200:3;3161:38;:43::i;:::-;3122:82;;;;-1:-1:-1;3040:211:37;-1:-1:-1;;;;3040:211:37:o;7445:90::-;7498:4;7521:7;:1;7526;7521:4;:7::i;5240:93::-;5294:5;5318:8;:1;5324;5318:5;:8::i;5760:87::-;5807:5;5831:9;:1;:7;:9::i;11554:88::-;11602:4;40930:17:42;41123:12;;41116:20;11625:10:37;40844:308:42;8735:91:37;8784:5;8808:11;:1;:9;:11::i;3821:383::-;3909:13;3939:31;:13;3956;3939:16;:31::i;:::-;3934:127;;3993:57;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;3993:57:37;;;;;;;;3934:127;4070:10;4083:7;:1;:5;:7::i;:::-;4070:20;-1:-1:-1;4107:90:37;4145:1;4148:22;4070:20;4156:13;4148:7;:22::i;:::-;:48;;;-1:-1:-1;4174:22:37;:4;4182:13;4174:7;:22::i;:::-;4107:37;:90::i;:::-;4100:97;3821:383;-1:-1:-1;;;;;3821:383:37:o;13202:232::-;13287:5;13294:4;13367:60;13411:5;13418:8;13367:43;:60::i;26308:326:42:-;26357:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;26476:62;19348:32;19405:16;26476:33;:62::i;:::-;26444:94;;-1:-1:-1;26444:94:42;-1:-1:-1;26549:12:42;26566:38;26444:94;;26566:9;:38::i;:::-;-1:-1:-1;26548:56:42;26308:326;-1:-1:-1;;;;;26308:326:42:o;40507:101::-;40561:5;40585:8;40588:1;40591;40585:2;:8::i;:::-;:16;;40600:1;40585:16;;;-1:-1:-1;40596:1:42;;40507:101;-1:-1:-1;40507:101:42:o;13558:248::-;13639:7;;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;13741:58;19348:32;19405:16;13790:8;13741:19;:58::i;:::-;13734:65;;;;;;13558:248;;;;;:::o;39808:143::-;39882:5;39906:38;39910:1;3896:66;39925:18;39906:3;:38::i;34200:484::-;34279:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;34410:84;34446:18;19348:32;19405:16;34410:35;:84::i;:::-;34366:128;;-1:-1:-1;34366:128:42;-1:-1:-1;34599:12:42;34616:38;34366:128;;34616:9;:38::i;:::-;-1:-1:-1;34598:56:42;34200:484;-1:-1:-1;;;;;;34200:484:42:o;35060:463::-;35135:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;35262:84;35298:18;19348:32;19405:16;35262:35;:84::i;31289:362::-;31339:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;31339:5;31498:66;19348:32;19405:16;31498:37;:66::i;:::-;31476:88;;;31575:12;31592:29;31602:8;31612;31592:9;:29::i;36145:3071::-;36227:5;19261:17;19363:16;;;19359:2;19348:32;;19409:4;19405:16;;;;41123:12;;36313:869;;-1:-1:-1;3744:1:42;;-1:-1:-1;36343:16:42;;-1:-1:-1;36343:16:42;36313:869;36402:1;36380:18;:23;36376:806;;36423:18;36445:1;36423:23;36419:494;;36470:16;:1;3653;36470:4;:16::i;:::-;36466:157;;;36584:20;;;;;;;;399:25:134;;;372:18;;36584:20:42;226:204:134;36466:157:42;-1:-1:-1;3653:1:42;;-1:-1:-1;36789:17:42;;-1:-1:-1;36789:17:42;36419:494;36852:46;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;36852:46:42;5150:302:134;36376:806:42;37009:15;:1;3744;37009:4;:15::i;:::-;:35;;;;-1:-1:-1;37028:16:42;:1;3653;37028:4;:16::i;:::-;37005:177;;;37067:1;37060:8;;;;;;37005:177;37089:16;:1;3653;37089:4;:16::i;:::-;37085:97;;;37128:43;37132:7;:1;:5;:7::i;:::-;37141:9;:1;:7;:9::i;:::-;37152:18;37128:3;:43::i;:::-;37121:50;;;;;;37085:97;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;37409:25;;37514:68;19348:32;19405:16;37514:37;:68::i;:::-;37476:106;;;;37593:24;37628:72;37677:8;37687:9;37698:1;37628:48;:72::i;:::-;37593:108;-1:-1:-1;37810:1:42;37752:30;;;37879:10;:1;19261:17;19363:16;;19359:2;19348:32;;19409:4;19405:16;;;;;19141:296;37879:10;37825:64;;;;37899:544;37926:1;37906:16;:21;37899:544;;37947:16;37966:4;37947:23;37974:4;37947:31;37943:263;;38042:149;38097:23;38122:14;38138:21;38161:12;38042:33;:149::i;:::-;37998:193;;-1:-1:-1;37998:193:42;-1:-1:-1;37943:263:42;38240:1;38219:22;;;;;38295:137;38346:21;38369:12;38383:21;38406:12;38295:33;:137::i;:::-;38255:177;;-1:-1:-1;38255:177:42;-1:-1:-1;37899:544:42;;;38454:25;38481:16;38513:86;38549:18;38569;38589:9;38513:35;:86::i;:::-;38453:146;;;;38656:86;38690:18;38710:9;38721;38732;38656:33;:86::i;:::-;38610:132;;-1:-1:-1;38610:132:42;-1:-1:-1;38799:86:42;38835:18;38610:132;;38799:35;:86::i;:::-;38753:132;;-1:-1:-1;38753:132:42;-1:-1:-1;38942:105:42;38753:132;;39007:23;39032:14;38942:33;:105::i;:::-;38896:151;;-1:-1:-1;38896:151:42;-1:-1:-1;39139:7:42;39151:40;38896:151;;39151:9;:40::i;:::-;-1:-1:-1;39138:53:42;-1:-1:-1;;;;;;;;;;;;;;;36145:3071:42;;;;;:::o;25374:565::-;25428:5;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;25428:5;;25639:95;19348:32;19405:16;19348:32;19405:16;25639:33;:95::i;:::-;25581:153;;;;25864:7;25876:38;25886:17;25905:8;25876:9;:38::i;:::-;-1:-1:-1;25863:51:42;25374:565;-1:-1:-1;;;;;;;;;;25374:565:42:o;26976:313::-;27029:4;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;27188:94;19348:32;19405:16;19348:32;19405:16;27188:32;:94::i;:::-;27181:101;26976:313;-1:-1:-1;;;;;;;26976:313:42:o;1412:418:44:-;1490:13;19261:17:42;19363:16;;19359:2;19348:32;19409:4;19405:16;;;1516:24:44;1604:22;;;1600:63;;1642:10;;;;;;;;;;;;;;;;;;;;;;;1600:63;1676:10;1672:90;;;1709:42;1723:17;1742:8;1709:13;:42::i;:::-;1702:49;;;;;;1672:90;1778:45;1795:17;1814:8;1778:16;:45::i;8838:263:42:-;8932:5;8950:24;8976:15;8995:41;9020:5;9027:8;8995:24;:41::i;:::-;8949:87;;;;9053:41;9066:17;9085:8;9053:12;:41::i;20749:488::-;20803:5;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;20803:5;;21016:95;19348:32;19405:16;19348:32;19405:16;21016:33;:95::i;15036:248::-;15120:7;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;15216:61;19348:32;19405:16;15268:8;15216:22;:61::i;31797:752::-;31848:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;32020:13;;;32016:56;;-1:-1:-1;32056:5:42;;31797:752;-1:-1:-1;;31797:752:42:o;32016:56::-;32082:8;32092:15;32111:66;32149:17;32168:8;32111:37;:66::i;:::-;32081:96;;;;32211:1;32191:17;:21;:38;;;;-1:-1:-1;32216:13:42;;;32191:38;32187:283;;;32402:57;32436:1;32439:8;32449:4;32455:3;32402:33;:57::i;:::-;32386:73;-1:-1:-1;32386:73:42;-1:-1:-1;32187:283:42;32480:12;32497:22;32507:1;32510:8;32497:9;:22::i;:::-;-1:-1:-1;32479:40:42;31797:752;-1:-1:-1;;;;;;;31797:752:42:o;32696:1044::-;32746:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;32918:13;;;32914:56;;-1:-1:-1;32954:5:42;;32696:1044;-1:-1:-1;;32696:1044:42:o;32914:56::-;32980:8;32990:15;33009:66;33047:17;33066:8;33009:37;:66::i;:::-;32979:96;;;;33161:8;33173:1;33161:13;33157:503;;-1:-1:-1;33197:5:42;;32696:1044;-1:-1:-1;;;;32696:1044:42:o;33157:503::-;33559:1;33548:8;:12;33544:116;;;33592:57;33626:1;33629:8;33639:4;33645:3;33592:33;:57::i;30085:431::-;30139:4;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;30346:106;19348:32;19405:16;19348:32;19405:16;30346:44;:106::i;:::-;-1:-1:-1;30469:40:42;;30085:431;-1:-1:-1;;;;;;;30085:431:42:o;22642:494::-;22691:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;22783:21;;;22779:148;;;22852:64;22888:17;22907:8;22852:35;:64::i;22779:148::-;23051:12;23068:38;23078:17;23097:8;23068:9;:38::i;29229:431::-;29283:4;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;29490:106;19348:32;19405:16;19348:32;19405:16;29490:44;:106::i;:::-;-1:-1:-1;29613:40:42;;29229:431;-1:-1:-1;;;;;;;29229:431:42:o;28393:429::-;28446:4;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;28653:106;19348:32;19405:16;19348:32;19405:16;28653:44;:106::i;:::-;-1:-1:-1;;28393:429:42;-1:-1:-1;;;;;;;28393:429:42:o;24348:527::-;24402:5;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;24402:5;;24613:95;19348:32;19405:16;19348:32;19405:16;24613:33;:95::i;40179:101::-;40233:5;40257:8;40260:1;40263;40257:2;:8::i;8905:1711:46:-;9120:10;;8974:6;;;;9084:4;9075:14;;;;9109:22;;;8974:6;;;;9246:35;9075:14;9109:22;9246:23;:35::i;:::-;9150:131;;-1:-1:-1;9150:131:46;;-1:-1:-1;9150:131:46;-1:-1:-1;9150:131:46;-1:-1:-1;9295:18:46;;;9312:1;9295:18;9291:1319;;9343:3;9333:6;:13;9329:1098;;9951:12;9965:13;9982:54;10008:17;10027:8;9982:25;:54::i;:::-;9950:86;;;;10059:8;10054:179;;-1:-1:-1;10099:34:46;;10146:1;;-1:-1:-1;8905:1711:46;-1:-1:-1;;;;;;;;;8905:1711:46:o;10054:179::-;-1:-1:-1;10204:1:46;;10207:6;;-1:-1:-1;8905:1711:46;-1:-1:-1;;;;;;;;8905:1711:46:o;9329:1098::-;-1:-1:-1;10354:42:46;;10409:1;;-1:-1:-1;8905:1711:46;-1:-1:-1;;;;;;;8905:1711:46:o;9291:1319::-;-1:-1:-1;10570:13:46;;10596:1;;-1:-1:-1;8905:1711:46;-1:-1:-1;;;;;;8905:1711:46:o;27617:430:42:-;27670:4;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;27877:106;19348:32;19405:16;19348:32;19405:16;27877:44;:106::i;:::-;-1:-1:-1;;27617:430:42;-1:-1:-1;;;;;;;27617:430:42:o;19921:481::-;19975:5;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;19975:5;;20186:95;19348:32;19405:16;19348:32;19405:16;20186:33;:95::i;21587:410::-;21638:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;21757:64;19348:32;19405:16;21757:35;:64::i;30772:350::-;30825:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;30825:5;30976:66;19348:32;19405:16;30976:37;:66::i;:::-;30962:80;;;31053:12;31070:22;31080:1;31083:8;31070:9;:22::i;7434:353::-;7525:5;7532:4;7549:24;7575:15;7592:13;7609:38;7631:5;7638:8;7609:21;:38::i;:::-;7548:99;;;;;;7658:11;7671:17;7692:38;7702:17;7721:8;7692:9;:38::i;:::-;7657:73;;;;7748:5;7755:8;:24;;;;;7767:12;7755:24;7740:40;;;;;;;;;7434:353;;;;;:::o;35535:162:45:-;35614:6;35622;35647:43;35651:4;35657:3;35662:17;35681:8;35647:3;:43::i;15810:2402:42:-;15895:11;16327:46;;;;;;15991:17;16047:8;16327:46;16651:668;;16708:4;16688:17;:24;:29;16684:135;;16762:3;16741:24;;;;16799:1;16787:13;;;;16684:135;17058:17;17036;17029:46;;;17022:151;;17120:2;17099:23;;;;17144:10;;;;;17022:151;;;16651:668;;;17215:17;17236:1;17215:22;17211:94;;-1:-1:-1;3653:1:42;;-1:-1:-1;17281:4:42;;-1:-1:-1;17261:25:42;;-1:-1:-1;17261:25:42;17211:94;17529:8;17516;17510:27;;;17506:393;;17731:1;17720:8;:12;17716:85;;;-1:-1:-1;3653:1:42;;-1:-1:-1;3653:1:42;;-1:-1:-1;17756:26:42;;-1:-1:-1;17756:26:42;17716:85;17825:59;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;17825:59:42;5150:302:134;17506:393:42;-1:-1:-1;;18046:17:42;18132:28;;18166:4;18162:19;;;18129:53;;-1:-1:-1;15810:2402:42;;;;;:::o;9946:3045::-;10081:7;10090:4;10213:1;10193:17;:21;10189:2796;;;10237:59;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;10237:59:42;5150:302:134;10189:2796:42;10395:17;10416:1;10395:22;10391:2594;;-1:-1:-1;10441:1:42;;-1:-1:-1;10444:4:42;10433:16;;10391:2594;10659:17;10940;;;10922:36;;10980:24;;;10976:123;;;11035:45;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;11035:45:42;5150:302:134;10976:123:42;11127:13;11154:20;11208:1;11192:13;:17;11188:1787;;;11486:3;11470:13;:19;11466:91;;;11525:1;11528:5;11517:17;;;;;;;;;;11466:91;11917:13;11916:14;;11902:2;:29;11894:37;;11990:5;11968:19;:27;;;;;:::i;:::-;;;-1:-1:-1;;12253:20:42;;:43;;;;-1:-1:-1;12231:66:42;;-1:-1:-1;12231:66:42;11188:1787;12356:1;12340:13;:17;12336:639;;;12502:28;12516:13;12502:2;:28;:::i;:::-;12494:36;-1:-1:-1;12563:27:42;12494:36;12563:19;:27;:::i;:::-;12548:42;-1:-1:-1;12864:4:42;;-1:-1:-1;12842:27:42;;-1:-1:-1;;;;12842:27:42;12336:639;-1:-1:-1;12934:19:42;;-1:-1:-1;12955:4:42;;-1:-1:-1;;;10391:2594:42;9946:3045;;;;;;:::o;43384:1993:45:-;43517:6;43525;43571:1;43551:17;:21;43547:271;;;43620:34;43626:17;43645:8;43620:5;:34::i;:::-;43588:66;;-1:-1:-1;43588:66:45;-1:-1:-1;43700:54:45;43706:18;43588:66;;43700:5;:54::i;:::-;43668:86;;-1:-1:-1;43668:86:45;-1:-1:-1;43775:32:45;43668:86;;43775:3;:32::i;:::-;43768:39;;;;;;43547:271;43854:21;43877:22;43903:36;43911:17;43930:8;43903:7;:36::i;:::-;43853:86;;-1:-1:-1;43853:86:45;-1:-1:-1;43981:8:45;43949:29;;;44060:36;43853:86;43981:8;44060:9;:36::i;:::-;44013:83;;-1:-1:-1;44013:83:45;-1:-1:-1;44013:83:45;-1:-1:-1;44257:4:45;44298:5;782:27:47;808:1;44298:5:45;782:27:47;:::i;:::-;44321:3:45;:29;44317:252;;44485:69;44508:18;44536:3;44542:11;44485:22;:69::i;:::-;44370:184;;-1:-1:-1;44370:184:45;-1:-1:-1;44317:252:45;44586:11;44582:664;;;44676:15;44695:7;:3;44701:1;44695:7;:::i;:::-;44676:27;;44753:154;44790:8;44781:5;44772;44761:8;:16;44760:26;;;;;:::i;:::-;;:38;44753:154;;44835:2;44826:11;;;-1:-1:-1;44882:2:45;44863:21;;;;44753:154;;;44975:153;45020:11;45026:5;45020:3;:11;:::i;:::-;45033:15;45050:16;45061:5;45050:8;:16;:::i;:::-;45068:8;45078:13;45093;45108:2;44975:23;:153::i;:::-;44943:185;;-1:-1:-1;44943:185:45;-1:-1:-1;44582:664:45;;-1:-1:-1;44582:664:45;;45187:13;45167:33;;45229:2;45218:13;;44582:664;43999:1257;;;;;45274:17;45308:61;45327:14;45343:22;45367:1;45308:18;:61::i;:::-;45293:12;45297:8;45293:1;:12;:::i;:::-;:76;;;;:::i;:::-;45266:104;;;;;;;43384:1993;;;;;;:::o;37791:5059::-;37924:6;;38000:17;38060:8;38114:41;38000:17;38060:8;38114:12;:41::i;:::-;38082:73;;-1:-1:-1;38082:73:45;-1:-1:-1;38195:1:45;38174:22;;38170:259;;38220:17;38241:1;38220:22;38216:199;;38273:11;;;;;;;;;;;;;;38216:199;38338:58;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;38338:58:45;5150:302:134;38216:199:45;37954:485;;38519:17;38540:4;38519:25;38515:81;;38568:13;:8;38579:2;38568:13;:::i;:::-;38583:1;38560:25;;;;;;38515:81;38646:4;38625:25;;;;38739:24;;38760:3;38739:24;;;38754:3;38739:24;38726:38;;:8;:38;38722:4122;;38780:20;38814;38848;38882;39533:17;39571:12;:38;;39606:2;39571:38;;;39593:2;39571:38;39553:57;;:8;:57;:::i;:::-;39533:77;;39672:11;39763:13;39779:12;:26;;39801:4;39779:26;;;39794:4;39779:26;39763:42;;;;40381:5;40354:17;:33;;;;;:::i;:::-;;40941:29;;;;-1:-1:-1;41478:29:45;;;;-1:-1:-1;40685:20:45;;;-1:-1:-1;41582:42:45;41600:18;40685:20;41582:17;:42::i;:::-;41575:4;:49;41552:73;;41663:13;41647:29;;41830:17;41813:13;:34;41809:270;;513:32:47;41891:30:45;;:165;;42009:46;42027:18;42047:3;42053:1;42047:7;42009:17;:46::i;:::-;42002:4;:53;41891:165;;;41959:4;41891:165;41875:181;;41809:270;39654:2457;42157:256;42198:13;42229:17;42264:13;42295:8;42321:13;42352;1640:3;42157:23;:256::i;:::-;42125:288;;-1:-1:-1;42125:288:45;-1:-1:-1;42434:47:45;42125:288;;42467:10;42479:1;42434:3;:47::i;:::-;42427:54;;;;;;;;;;;;38722:4122;42646:32;42650:17;42669:8;42646:3;:32::i;:::-;42614:64;;-1:-1:-1;42614:64:45;-1:-1:-1;42724:54:45;42730:18;42614:64;;42724:5;:54::i;:::-;42692:86;;-1:-1:-1;42692:86:45;-1:-1:-1;42799:34:45;42692:86;;42799:5;:34::i;:::-;42792:41;;;;;;;38722:4122;37944:4906;37791:5059;;;;;;:::o;55832:852::-;55915:14;55931:11;56120:1;56108:8;:13;56104:81;;-1:-1:-1;56149:17:45;;-1:-1:-1;56168:1:45;56141:29;;56104:81;56351:3;56340:8;:14;56336:82;;;-1:-1:-1;56382:1:45;;-1:-1:-1;56385:17:45;56374:29;;56336:82;56528:11;56563:9;;;56549:2;:24;;56595:17;56549:24;56595;;;;:::i;:::-;;56643;;;;;55832:852;-1:-1:-1;;;;55832:852:45:o;53784:1452::-;53925:6;53987:14;53975:8;:26;53971:1249;;-1:-1:-1;54028:17:45;54021:24;;53971:1249;54087:8;54070:14;:25;54066:1154;;;54137:25;;;54199:2;54184:17;;;:38;;;54221:1;54205:12;:17;;54184:38;54180:127;;;1408:1;54246:42;;;;;54180:127;54478:12;54464:2;:27;54437:17;:55;;;;;:::i;:::-;;54430:62;;;;;54066:1154;54553:25;;;54615:2;54600:17;;;:38;;;54637:1;54621:12;:17;;54600:38;54596:163;;;54669:71;;;;;;;;8664:25:134;;;8705:18;;;8698:34;;;8748:18;;;8741:34;;;8637:18;;54669:71:45;8468:313:134;54596:163:45;54904:2;:27;;;54968:25;;;:17;54904:27;54968:25;54904:27;55015:16;;;;:::i;:::-;;:37;55011:162;;55083:71;;;;;;;;8664:25:134;;;8705:18;;;8698:34;;;8748:18;;;8741:34;;;8637:18;;55083:71:45;8468:313:134;55011:162:45;55197:8;-1:-1:-1;55190:15:45;;-1:-1:-1;;55190:15:45;7193:2230;7343:24;;7473:26;;7501;;7470:58;7547:1870;;;;1408:1;7690:53;;1495:1;7757:34;;7547:1870;;;7833:21;7845:9;7833;:21;:::i;:::-;7822:32;;7989:29;8021:48;8050:18;8021:28;:48::i;:::-;7989:80;;8083:29;8115:48;8144:18;8115:28;:48::i;:::-;8083:80;;8179:13;8197:52;8204:21;8227;8197:6;:52::i;:::-;8178:71;;;8264:22;8344:4;8336:5;:12;8332:114;;;8381:4;8372:13;;;-1:-1:-1;8425:2:45;8407:20;8332:114;8475:4;8467:5;:12;8463:114;;;8512:4;8503:13;;;-1:-1:-1;8556:2:45;8538:20;8463:114;8606:3;8598:5;:11;8594:111;;;8642:3;8633:12;;;-1:-1:-1;8685:1:45;8667:19;8594:111;8734:3;8726:5;:11;8722:111;;;8770:3;8761:12;;;-1:-1:-1;8813:1:45;8795:19;8722:111;8857:9;;8850:108;;8899:2;8890:11;;;-1:-1:-1;8923:16:45;;8850:108;;;9086:34;9105:14;9086:34;;:::i;:::-;;-1:-1:-1;9167:239:45;9211:18;9247;9283:83;9290:21;9313;9336:29;9351:14;9344:2;9336:29;:::i;:::-;9283:6;:83::i;:::-;9384:8;9167:26;:239::i;:::-;9135:271;;-1:-1:-1;9135:271:45;-1:-1:-1;;;;;7547:1870:45;7390:2033;7193:2230;;;;;;;:::o;12966:8769::-;13116:6;13124;13150:18;13172:1;13150:23;13146:8583;;13196:45;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;13196:45:45;5150:302:134;13146:8583:45;13262:18;13284:1;13262:23;13258:8471;;-1:-1:-1;1408:1:45;;-1:-1:-1;1408:1:45;13301:67;;13258:8471;13399:24;13437:15;13466:10;13490;13697:39;13706:18;13726:9;13697:8;:39::i;:::-;13656:80;;-1:-1:-1;13656:80:45;-1:-1:-1;13656:80:45;-1:-1:-1;13791:39:45;13800:18;13820:9;13791:8;:39::i;:::-;13750:80;;-1:-1:-1;13750:80:45;-1:-1:-1;13750:80:45;-1:-1:-1;13965:29:45;13997:48;14026:18;13997:28;:48::i;:::-;13965:80;;14059:29;14091:48;14120:18;14091:28;:48::i;:::-;14059:80;-1:-1:-1;14170:4:45;14212:2;14663:29;;;14659:4460;;;14716:5;14712:4269;;;-1:-1:-1;14753:4:45;;-1:-1:-1;14796:2:45;14712:4269;;;14873:4;14849:21;:28;14845:3675;;;14933:4;14909:21;:28;14905:1781;;;14997:4;14973:21;:28;14969:813;;;15065:3;15041:21;:27;15037:321;;;-1:-1:-1;15116:3:45;;-1:-1:-1;15174:1:45;14845:3675;;15037:321;-1:-1:-1;15262:4:45;;-1:-1:-1;15321:2:45;14845:3675;;14969:813;15456:4;15432:21;:28;15428:324;;;-1:-1:-1;15508:4:45;;-1:-1:-1;15567:2:45;14845:3675;;15428:324;-1:-1:-1;15656:4:45;;-1:-1:-1;15715:2:45;14845:3675;;14905:1781;15872:4;15848:21;:28;15844:816;;;15940:4;15916:21;:28;15912:324;;;-1:-1:-1;15992:4:45;;-1:-1:-1;16051:2:45;14845:3675;;15912:324;-1:-1:-1;16140:4:45;;-1:-1:-1;16199:2:45;14845:3675;;15844:816;16334:4;16310:21;:28;16306:324;;;-1:-1:-1;16386:4:45;;-1:-1:-1;16445:2:45;14845:3675;;16306:324;-1:-1:-1;16534:4:45;;-1:-1:-1;16593:2:45;14845:3675;;;16768:4;16744:21;:28;16740:1758;;;16832:4;16808:21;:28;16804:816;;;16900:4;16876:21;:28;16872:324;;;-1:-1:-1;16952:4:45;;-1:-1:-1;17011:2:45;14845:3675;;16872:324;-1:-1:-1;17100:4:45;;-1:-1:-1;17159:2:45;16740:1758;;16804:816;17294:4;17270:21;:28;17266:324;;;-1:-1:-1;17346:4:45;;-1:-1:-1;17405:2:45;14845:3675;;17266:324;-1:-1:-1;17494:4:45;;-1:-1:-1;17553:2:45;16740:1758;;;17710:4;17686:21;:28;17682:790;;;17778:4;17754:21;:28;17750:324;;;-1:-1:-1;17830:4:45;;-1:-1:-1;17889:2:45;17682:790;;17750:324;-1:-1:-1;17978:4:45;;-1:-1:-1;18037:2:45;17682:790;;;18172:4;18148:21;:28;18144:298;;;-1:-1:-1;18224:4:45;;-1:-1:-1;18283:2:45;18144:298;18641:5;18616:21;:30;18609:214;;18723:2;18714:11;;;-1:-1:-1;18755:19:45;;18609:214;;;18848:5;18857:1;18848:10;18844:119;;18893:47;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;18893:47:45;5150:302:134;18844:119:45;19003:5;18998:107;;19039:47;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;19039:47:45;5150:302:134;18998:107:45;19587:14;19568:16;:33;19555:9;:46;19551:623;;19638:14;19625:27;;;;19551:623;;;19729:16;;19699:46;;;;19839:1;19822:18;;19818:338;;;19904:14;19885:16;:33;19872:9;:46;19868:266;;19950:27;;;;19868:266;;;1408:1;1495;20040:67;;;;;;;;;;;;;;19868:266;20202:26;20352:1;20340:9;:13;:30;;;;;20369:1;20357:9;:13;20340:30;20336:222;;;20424:16;20412:28;;20484:20;;;:55;;20537:1;20484:55;;;20519:8;20507:9;:20;20484:55;20462:77;;20372:186;20336:222;20621:9;20599:19;20587:9;:31;:43;20576:54;;20681:235;20729:18;20769;20809:59;20816:21;20839:5;20846:21;20809:6;:59::i;:::-;20890:8;20681:26;:235::i;:::-;20649:267;;-1:-1:-1;20649:267:45;-1:-1:-1;20961:1:45;20939:23;;20935:716;;;21012:2;20990:19;:24;20986:308;;;1408:1;1495;21204:67;;;;;;;;;;;;;;;20986:308;21479:19;21465:2;:34;21437:63;;;;;;:::i;:::-;;;;21526:17;21547:1;21526:22;21522:111;;1495:1;21576:34;;21522:111;-1:-1:-1;21676:17:45;;-1:-1:-1;21695:8:45;;-1:-1:-1;21668:36:45;;-1:-1:-1;;;;;;21668:36:45;13258:8471;12966:8769;;;;;;;:::o;34854:365::-;35003:4;35078:76;35093:18;35113:9;35124:18;35144:9;35078:14;:76::i;:::-;35172:40;;34854:365;-1:-1:-1;;;;;34854:365:45:o;2112:2562:44:-;2200:13;2257:71;2300:17;2319:8;2257:42;:71::i;:::-;2225:103;;-1:-1:-1;2225:103:44;-1:-1:-1;2339:13:44;;2397:24;2417:4;2225:103;2397:24;:::i;:::-;:29;2393:179;;-1:-1:-1;2482:4:44;;-1:-1:-1;2458:2:44;2393:179;;;-1:-1:-1;2557:4:44;;-1:-1:-1;2533:2:44;2393:179;2719:15;2737:33;2764:5;2737:17;:33;:::i;:::-;2719:51;-1:-1:-1;2917:17:44;2937:33;2964:5;2937:17;:33;:::i;:::-;2917:53;;2981:10;3024:1;3013:8;:12;3009:89;;;-1:-1:-1;3049:4:44;3078:9;3079:8;3078:9;:::i;:::-;3067:20;;3009:89;3124:1;3111:10;:14;3107:95;;;-1:-1:-1;3149:4:44;3180:11;3181:10;3180:11;:::i;:::-;3167:24;;3107:95;3212:35;;;;;;;;;:30;:35;;3261:15;;3257:819;;3292:24;;3354:10;3362:2;3354:5;:10;:::i;:::-;3334:30;;3518:128;3525:30;3545:9;3525:10;:30;:::i;:::-;3559:1;3525:35;3518:128;;3580:15;3593:2;3580:15;;:::i;:::-;;-1:-1:-1;3613:18:44;;;;:::i;:::-;;;;3518:128;;;3660:41;;;;;;;;;:36;:41;;;3715:147;3739:16;3735:1;:20;3715:147;;;3819:22;3805:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;3757:3:44;;3715:147;;;;3876:78;3883:15;3896:2;3883:10;:15;:::i;:::-;3902:1;3883:20;3876:78;;3923:16;3937:2;3923:16;;:::i;:::-;;;3876:78;;;4006:22;4030:34;4053:10;4030:22;:34::i;:::-;3987:78;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3968:97;;3278:798;;;3257:819;4086:28;4117:32;4140:8;4117:22;:32::i;:::-;4086:63;-1:-1:-1;4333:22:44;4358:32;4376:13;4358:8;:32;:::i;:::-;4333:57;-1:-1:-1;4400:28:44;4443:20;;:87;;4490:39;4513:15;4490:22;:39::i;:::-;4471:59;;;;;;;;:::i;:::-;;;;;;;;;;;;;4443:87;;;;;;;;;;;;;;;;4400:130;;4540:20;4563:5;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4540:39;;4610:6;4618:14;4634:16;4652:14;4596:71;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4589:78;;;;;;;;;;;;2112:2562;;;;:::o;5044:3560::-;5135:13;1062:4;5164:8;:38;:81;;;-1:-1:-1;5217:28:44;1062:4;5217:28;:::i;:::-;5206:8;:39;5164:81;5160:149;;;5268:30;;;;;;;;399:25:134;;;372:18;;5268:30:44;226:204:134;5160:149:44;5319:10;5332:21;;;;5388:495;;;;5626:18;5627:17;5626:18;:::i;:::-;5608:37;;5388:495;;;-1:-1:-1;5854:17:44;5388:495;5893:19;5921:25;5938:7;5921:16;:25::i;:::-;5969:13;;5893:54;;-1:-1:-1;5957:9:44;6232:106;6255:1;6239:13;:17;:57;;;;-1:-1:-1;6260:6:44;6275:13;6267:5;6271:1;6267;:5;:::i;:::-;:21;;;;:::i;:::-;6260:29;;;;;;;;:::i;:::-;;;;;;;;:36;;6239:57;6232:106;;;6312:15;;;;:::i;:::-;;;;6232:106;;;6347:12;6362:17;6366:13;6362:1;:17;:::i;:::-;6347:32;-1:-1:-1;6556:13:44;6572:32;6590:13;6572:8;:32;:::i;:::-;6556:48;;6615:20;6638:5;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6615:39;;6679:1;6669:6;:11;6665:594;;6926:6;6900:15;6976:14;6926:6;6976:4;:14;:::i;:::-;6966:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6966:25:44;;6947:44;;7010:9;7005:86;7029:4;7025:1;:8;7005:86;;;7067:6;7074:1;7067:9;;;;;;;;:::i;:::-;;;;;;;;;7058:3;7062:1;7058:6;;;;;;;;:::i;:::-;;;;:18;;;;;;;;;;-1:-1:-1;7035:3:44;;7005:86;;;;7109:9;7104:90;7128:7;7124:1;:11;7104:90;;;7160:19;:3;7164:8;7171:1;7164:4;:8;:::i;:::-;7160:13;;;;;;;;:::i;:::-;;;;:19;;;;;;;;;;-1:-1:-1;7137:3:44;;7104:90;;;;7228:6;7243:3;7214:34;;;;;;;;;:::i;:::-;;;;;;;;;;;;;7207:41;;;;;;;;;;;;;;6665:594;7472:17;7500:7;7501:6;7500:7;:::i;:::-;7472:36;;7530:9;7523:4;:16;7519:1079;;;7620:15;7638:16;7645:9;7638:4;:16;:::i;:::-;7620:34;-1:-1:-1;7668:16:44;7697:8;:4;7704:1;7697:8;:::i;:::-;7687:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7687:19:44;;7668:38;;7725:9;7720:89;7744:7;7740:1;:11;7720:89;;;7785:6;7792:1;7785:9;;;;;;;;:::i;:::-;;;;;;;;;7776:3;7780:1;7776:6;;;;;;;;:::i;:::-;;;;:18;;;;;;;;;;-1:-1:-1;7753:3:44;;7720:89;;;;7822:18;:3;7826:7;7822:12;;;;;;;;:::i;:::-;;;;:18;;;;;;;;;;;7859:9;7854:115;7878:9;7874:1;:13;7854:115;;;7935:6;7942:11;7952:1;7942:7;:11;:::i;:::-;7935:19;;;;;;;;:::i;:::-;;;;;;;7912:3;7930:1;7916:11;:7;7926:1;7916:11;:::i;:::-;:15;;;;:::i;:::-;7912:20;;;;;;;;:::i;:::-;;;;:42;;;;;;;;;;-1:-1:-1;7889:3:44;;7854:115;;;;8003:6;8018:3;7989:34;;;;;;;;;:::i;:::-;;;;;;;;;;;;;7982:41;;;;;;;;;;;;;;;7519:1079;8131:25;8159:16;8171:4;8159:9;:16;:::i;:::-;8131:44;-1:-1:-1;8189:16:44;8242:4;8218:21;8131:44;8218:1;:21;:::i;:::-;:28;;;;:::i;:::-;8208:39;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8208:39:44;;8189:58;;8261:12;:3;8265:1;8261:6;;;;;;;;:::i;:::-;;;;:12;;;;;;;;;;;8287;:3;8291:1;8287:6;;;;;;;;:::i;:::-;;;;:12;;;;;;;;;;;8318:9;8313:97;8337:17;8333:1;:21;8313:97;;;8379:16;:3;8383:5;8387:1;8383;:5;:::i;:::-;8379:10;;;;;;;;:::i;:::-;;;;:16;;;;;;;;;;-1:-1:-1;8356:3:44;;8313:97;;;;8428:9;8423:110;8447:4;8443:1;:8;8423:110;;;8509:6;8516:1;8509:9;;;;;;;;:::i;:::-;;;;;;;8476:3;8504:1;8480:21;8484:17;8480:1;:21;:::i;:::-;:25;;;;:::i;:::-;8476:30;;;;;;;;:::i;:::-;;;;:42;;;;;;;;;;-1:-1:-1;8453:3:44;;8423:110;;8131:373:42;8219:6;8227;8246:24;8272:15;8289:13;8306:38;8328:5;8335:8;8306:21;:38::i;:::-;8245:99;;;;;;8359:8;8354:98;;8390:51;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;8390:51:42;5150:302:134;8354:98:42;-1:-1:-1;8469:17:42;;;;-1:-1:-1;8131:373:42;-1:-1:-1;;;8131:373:42:o;18451:299::-;18539:5;18557:7;18566:13;18583:38;18593:17;18612:8;18583:9;:38::i;:::-;18556:65;;;;18636:8;18631:95;;18667:48;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;18667:48:42;5150:302:134;18631:95:42;-1:-1:-1;18742:1:42;18451:299;-1:-1:-1;;;18451:299:42:o;33785:339:45:-;33935:6;33943;33999:36;34005:18;34025:9;33999:5;:36::i;:::-;33965:70;;-1:-1:-1;33965:70:45;-1:-1:-1;34052:65:45;34056:18;34076:9;33965:70;;34052:3;:65::i;:::-;34045:72;;;;33785:339;;;;;;;:::o;14139:390:42:-;14277:7;14301:13;14316;14333:58;14353:17;14372:8;14382;14333:19;:58::i;:::-;14300:91;;;;14406:8;14401:100;;14437:53;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;14437:53:42;5150:302:134;14401:100:42;-1:-1:-1;14517:5:42;14139:390;-1:-1:-1;;;;14139:390:42:o;29621:3681:45:-;29771:6;;30037:26;;30065;;30034:58;30111:217;;;;30145:18;30167:1;30145:23;30141:177;;30196:18;30216:9;30188:38;;;;;;;30141:177;30273:18;30293:9;30265:38;;;;;;;30141:177;30565:43;30578:18;30598:9;30565:12;:43::i;:::-;30531:77;;-1:-1:-1;30531:77:45;-1:-1:-1;30652:43:45;30665:18;30685:9;30652:12;:43::i;:::-;30618:77;;-1:-1:-1;30618:77:45;-1:-1:-1;30816:21:45;;;30812:268;;;30919:18;;31031:9;;30866:18;;30812:268;31764:21;;;824:2;31948:45;;31944:122;;;32021:18;32041:9;32013:38;;;;;;;;31944:122;32285:21;32279:2;:27;32250:57;;;;;;:::i;:::-;;;-1:-1:-1;;32400:39:45;;;32658:26;;;32555:4;32648:37;;;32641:45;32734:18;32561:43;;;32551:54;;;32544:62;32718:35;32826:412;;;;32885:9;32865:16;:29;32861:130;;32925:47;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;32925:47:45;5150:302:134;32861:130:45;33031:2;33051:24;;;;33009;;;;33122:40;;;33093:11;;;;;;32826:412;;;33222:1;33201:22;;32826:412;-1:-1:-1;33265:18:45;;33285:9;;-1:-1:-1;;;;;;29621:3681:45:o;50744:2689::-;50905:6;;51455:26;;51483;;51452:58;51601:26;;;51629;;;51597:59;51374:308;51761:24;;;51346:461;51842:105;;;;51889:18;51909;51881:47;;;;;;;51842:105;51232:729;51975:12;52025:9;52013;:21;52009:329;;;-1:-1:-1;52124:18:45;;52248:9;;52067:18;;52319:4;52009:329;52374:21;;;52352:19;52500:20;;52540:2;52522:21;;52497:47;52571:210;;;;52610:7;52606:161;;;52649:1;52652:18;52641:30;;;;;;;;;52606:161;52726:18;52746:1;52718:30;;;;;;;;;52606:161;52914:2;:27;;;52974:26;;;:18;52914:27;52974:26;52914:27;53019:16;;;;:::i;:::-;;:38;53015:402;;53081:7;53077:161;;;53120:1;53123:18;53112:30;;;;;;;;;;;53077:161;53197:18;53217:1;53189:30;;;;;;;;;;;53015:402;53262:7;53258:159;;;53297:18;;-1:-1:-1;53317:8:45;-1:-1:-1;53289:37:45;;-1:-1:-1;;;;53289:37:45;53258:159;53373:8;-1:-1:-1;53383:18:45;;-1:-1:-1;53365:37:45;;-1:-1:-1;;;;53365:37:45;2977:541;3058:6;3066;3205:16;3184:17;:37;3180:271;;3257:16;3245:8;:28;3241:127;;3304:45;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;3304:45:45;5150:302:134;3241:127:45;3406:2;3385:23;;;;3426:10;;;;;3180:271;-1:-1:-1;;3472:18:45;;;;;;2977:541::o;1751:6678:46:-;1859:20;1987:5;1859:20;;2015:55;1987:5;2045:3;7516:41:33;2015:21:46;:55::i;:::-;2006:64;-1:-1:-1;2102:15:46;;;;2006:64;2201:53;2006:64;2231:3;20378:131:33;2201:21:46;:53::i;:::-;2192:62;;2286:8;2276:6;:18;2272:120;;-1:-1:-1;2326:32:46;;-1:-1:-1;2368:1:46;;-1:-1:-1;2368:1:46;;-1:-1:-1;2318:55:46;;-1:-1:-1;2318:55:46;2272:120;2411:37;2450:27;2501:61;2548:5;2555:6;2501:46;:61::i;:::-;2410:152;;-1:-1:-1;2410:152:46;-1:-1:-1;2584:35:46;;;;2580:135;;-1:-1:-1;2651:30:46;-1:-1:-1;2691:1:46;;-1:-1:-1;2691:1:46;;-1:-1:-1;2643:53:46;;-1:-1:-1;;2643:53:46;2580:135;1870:13:34;;2752:20:46;;-1:-1:-1;7662:41:33;1886:1:34;2801:16:46;1862:22:34;;;;1858:30;;;;1854:41;1847:49;1840:57;1823:15;;;1819:79;;-1:-1:-1;;2899:14:46;;2895:3973;;-1:-1:-1;2964:8:46;;;;;2945:1;2964:8;3043:53;2964:8;3073:3;20378:131:33;3043:21:46;:53::i;:::-;3034:62;;3128:9;3118:6;:19;3114:119;;-1:-1:-1;3169:30:46;;-1:-1:-1;3209:1:46;;-1:-1:-1;3209:1:46;;-1:-1:-1;3161:53:46;;-1:-1:-1;;3161:53:46;3114:119;3406:6;3430:125;3457:17;;;1870:13:34;;1823:15;;-1:-1:-1;1886:1:34;1688:14;1862:22;;;;1858:30;;;;7945:41:33;1854::34;1847:49;1840:57;1819:79;3496:1:46;3437:60;3430:125;;3521:15;;3430:125;;;3594:9;3577:13;:26;3573:403;;3628:24;3654:19;3701:72;3748:9;3759:13;3701:46;:72::i;:::-;3627:146;;-1:-1:-1;3627:146:46;-1:-1:-1;3799:22:46;;;;3795:117;;-1:-1:-1;3857:17:46;-1:-1:-1;3884:1:46;;-1:-1:-1;3884:1:46;;-1:-1:-1;3849:40:46;;-1:-1:-1;;;;3849:40:46;3795:117;3945:12;-1:-1:-1;;3573:403:46;4079:1;4067:9;:13;4063:113;;;-1:-1:-1;4112:30:46;;-1:-1:-1;4152:1:46;;-1:-1:-1;4152:1:46;;-1:-1:-1;4104:53:46;;-1:-1:-1;;;4104:53:46;4063:113;4197:10;4193:79;;;4244:9;4243:10;;4231:22;;4193:79;4724:13;4704:9;4697:41;4686:52;;4843:1;4832:8;:12;4828:114;;;-1:-1:-1;4876:32:46;;-1:-1:-1;4918:1:46;;-1:-1:-1;4918:1:46;;-1:-1:-1;4868:55:46;;-1:-1:-1;;;4868:55:46;4828:114;4964:17;4985:1;4964:22;4960:1894;;5030:9;5010:29;;4960:1894;;;5210:13;5234:9;;;5717:2;5709:10;;5705:122;;;-1:-1:-1;5755:34:46;;-1:-1:-1;5799:1:46;;-1:-1:-1;5799:1:46;;-1:-1:-1;5747:57:46;;-1:-1:-1;;;;5747:57:46;5705:122;5856:2;:11;6024:33;;;5998:23;6024:17;5856:11;6024:33;5856:11;6241:32;;;;:::i;:::-;;:53;;;-1:-1:-1;6556:44:46;;;;;;;6241:53;;6626:32;;;6644:14;6626:32;6622:144;;;-1:-1:-1;6694:34:46;;-1:-1:-1;6738:1:46;;-1:-1:-1;6738:1:46;;-1:-1:-1;6686:57:46;;-1:-1:-1;;;;;;;6686:57:46;6622:144;-1:-1:-1;;6807:28:46;;;-1:-1:-1;;4960:1894:46;2915:3953;;2895:3973;1870:13:34;;20571:29:33;1886:1:34;6882:13:46;1862:22:34;;;;1858:30;;;;1854:41;1847:49;1840:57;1823:15;;;1819:79;6974:11:46;;6970:1209;;7005:8;;;;;;7081:55;7005:8;7111:3;7516:41:33;7081:21:46;:55::i;:::-;7072:64;-1:-1:-1;7072:64:46;7235:53;7072:64;7265:3;20378:131:33;7235:21:46;:53::i;:::-;7226:62;;7324:11;7314:6;:21;7310:131;;-1:-1:-1;7371:32:46;;-1:-1:-1;7413:1:46;;-1:-1:-1;7413:1:46;;-1:-1:-1;7363:55:46;;-1:-1:-1;;;;7363:55:46;7310:131;7154:305;7500:21;7523:16;7567:62;7614:6;7622;7567:46;:62::i;:::-;7499:130;;-1:-1:-1;7499:130:46;-1:-1:-1;7655:19:46;;;;7651:111;;-1:-1:-1;7710:14:46;-1:-1:-1;7734:1:46;;-1:-1:-1;7734:1:46;;-1:-1:-1;7702:37:46;;-1:-1:-1;;;;7702:37:46;7651:111;7792:9;-1:-1:-1;;7881:17:46;;;7860:18;7925:10;;:36;;;;;7953:8;7939:11;:22;7925:36;7924:80;;;;7976:1;7967:6;:10;:36;;;;;7995:8;7981:11;:22;7967:36;7920:183;;;-1:-1:-1;8040:25:46;;-1:-1:-1;8075:1:46;;-1:-1:-1;8075:1:46;;-1:-1:-1;8032:48:46;;-1:-1:-1;;;;8032:48:46;7920:183;8135:11;-1:-1:-1;;6970:1209:46;8197:17;8218:1;8197:22;8193:220;;8397:1;8386:12;;8193:220;1954:6469;;;1751:6678;;;;;;;;:::o;6054:800:42:-;6139:6;;;6221:17;;;6213:26;;6386:16;6370:33;;6366:472;;;6583:2;6575:5;:10;6599:1;6588:12;;6610:2;6602:5;:10;6616:1;6602:15;6560:58;;;;;;;;;6366:472;6800:5;;-1:-1:-1;6808:8:42;-1:-1:-1;6818:4:42;;-1:-1:-1;6054:800:42;;;;;;:::o;57066:978:45:-;57151:6;57159:4;57165:6;57211:8;57223:2;57211:14;57207:821;;-1:-1:-1;57253:17:45;;-1:-1:-1;57272:5:45;;-1:-1:-1;57279:1:45;57245:36;;57207:821;57317:2;57306:8;:13;57302:726;;;57354:3;57343:8;:14;57339:98;;;-1:-1:-1;57389:1:45;;-1:-1:-1;;57392:22:45;;;57416:1;57381:37;;57339:98;57454:12;57492:8;57503:1;57492:12;57490:15;;57476:2;:30;57454:53;;57592:15;57630:5;57610:17;:25;;;;;:::i;:::-;;;-1:-1:-1;;57671:16:45;;;:37;;;;-1:-1:-1;57682:5:45;-1:-1:-1;57653:63:45;;57302:726;57753:1;57741:8;:13;57737:291;;-1:-1:-1;57782:1:45;;-1:-1:-1;57782:1:45;;-1:-1:-1;57792:1:45;57774:20;;57737:291;-1:-1:-1;;;57988:1:45;:12;;57974:2;:27;57947:55;;58004:5;58011:1;57939:74;;58539:1243;58674:20;;;1447:3:47;1145:33;1176:2;397:4;1145:33;:::i;:::-;;1176:2;397:4;1145:33;:::i;:::-;1294:23;;1316:1;1294:23;:::i;:::-;58911:24:45;;:1;:24;:::i;:::-;:46;;;;:::i;:::-;:79;;;;:::i;:::-;58890:100;;59102:477;;;59187:1;59184;59177:12;59267:1;59262;59257:2;59250:5;59246:14;59242:22;59234:6;59230:35;59226:2;59218:6;59206:63;59152:6;59312:1;59306:8;59354:24;59346:6;59342:37;59332:47;;59406:1;59403;59396:12;59509:1;59502:2;59495:5;59491:14;59486:2;59480:3;59473:5;59469:15;59465:24;59461:45;59453:6;59449:58;59445:2;59437:6;59425:86;59562:1;59556:8;59538:27;;59102:477;-1:-1:-1;;;;59102:477:45:o;:::-;59610:51;59657:3;59645:10;59625:18;59610:51;:::i;:::-;59593:68;;59677:8;59674:92;;;59705:59;59761:1;59756:3;59752:11;59740:10;59720:18;59705:59;:::i;:::-;59688:76;;59025:751;58539:1243;;;;;;:::o;60320:1618::-;60583:6;60591;60691:13;60675:12;:29;60671:93;;-1:-1:-1;60728:13:45;;-1:-1:-1;60743:9:45;60720:33;;60671:93;60773:33;60816:24;60888;60914:21;60939:54;60943:12;60957:9;60968:13;60983:9;60939:3;:54::i;:::-;60887:106;;;;61032:23;61057:20;61081:55;61085:13;61100:9;61111:13;61126:9;61081:3;:55::i;:::-;61031:105;;;;61253:71;61257:17;61276:14;61292:16;61310:13;61253:3;:71::i;:::-;61187:137;;;;;;;;60851:484;;;;61365:24;61391:21;61416:55;61420:13;61435:9;61446:13;61461:9;61416:3;:55::i;:::-;61364:107;;;;61529:33;61564:24;61604:85;61608:26;61636:17;61655;61674:14;61604:3;:85::i;:::-;61528:161;;;;61752:24;61778:15;61809:76;61813:26;61841:17;61860:13;61875:9;61809:3;:76::i;:::-;61751:134;;-1:-1:-1;61751:134:45;-1:-1:-1;;;;;;;;;60320:1618:45;;;;;;;;;;;:::o;48286:370::-;48374:6;48382;48401:27;48430:18;48450:9;48463:37;48472:17;48491:8;48463;:37::i;:::-;48400:100;;;;;;48515:4;48510:88;;48542:45;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;48542:45:45;5150:302:134;35925:1328:45;36006:14;;1145:33:47;1176:2;397:4;1145:33;:::i;:::-;1294:23;;1316:1;1294:23;:::i;:::-;36104:24:45;;36127:1;36104:24;:::i;:::-;36077:51;-1:-1:-1;36138:24:45;1145:33:47;1176:2;397:4;1145:33;:::i;:::-;36138:46:45;;36537:1;36532:2;36525:5;36521:14;36517:22;36514:1;36510:30;36563:1;36560;36553:12;36614:1;36602:10;36598:2;36590:6;36578:38;;36655:1;36649:8;36699:6;36685:12;36681:25;36671:35;;36754:6;36740:12;36736:25;36729:33;36719:136;;36802:39;;;;36719:136;;36879:1;36876;36869:12;37191:1;37184:2;37177:5;37173:14;37168:2;37162:3;37155:5;37151:15;37147:24;37143:45;37125:16;37121:68;37117:2;37109:6;37097:96;-1:-1:-1;;37234:1:45;37228:8;37216:21;;35925:1328;-1:-1:-1;;35925:1328:45:o;3731:701::-;3818:7;3885:1;3865:17;:21;3861:555;;;3931:16;3910:17;:37;3906:316;;-1:-1:-1;3978:29:45;;3731:701;-1:-1:-1;3731:701:45:o;3906:316::-;-1:-1:-1;4184:18:45;;;3731:701::o;3861:555::-;-1:-1:-1;4383:17:45;3731:701::o;3861:555::-;3731:701;;;:::o;21872:550::-;21933:12;;22319:6;22316:1;22313;22306:20;22346:9;;;;22394:11;;;22380:12;;;;22376:30;;;;;21872:550;-1:-1:-1;;21872:550:45:o;22585:4048::-;22667:14;22694:13;22709;22726:12;22733:1;22736;22726:6;:12::i;:::-;22693:45;;;;22812:5;22821:1;22812:10;22808:109;;22881:11;22873:5;:19;;;;;:::i;:::-;;22866:26;;;;;;22808:109;23024:11;23015:5;:20;23011:91;;23058:33;;;;;;;;8664:25:134;;;8705:18;;;8698:34;;;8748:18;;;8741:34;;;8637:18;;23058:33:45;8468:313:134;23011:91:45;23394:17;23553:11;23550:1;23547;23540:25;24154:1;24139:12;;:16;;24124:32;;24393:25;;;;;25554:1;25535;:15;;25534:21;;25787;;;25783:25;;25772:36;25856:21;;;25852:25;;25841:36;25926:21;;;25922:25;;25911:36;25996:21;;;25992:25;;25981:36;26066:21;;;26062:25;;26051:36;26137:21;;;26133:25;;;26122:36;24106:15;25003;;;24999:29;;;24995:37;;;23659:20;;;23648:32;;;25121:22;;;;23702:21;;;;24565:19;;;;25112:31;;;;26601:15;;-1:-1:-1;;22585:4048:45;;;;;:::o;5040:1698::-;5190:6;5198;5312:1;5307;5303;:5;5302:11;5298:1434;;;5364:16;5333:20;:48;5329:830;;;5429:29;5437:16;5457:1;5429:29;:::i;:::-;5405:20;:53;5401:529;;-1:-1:-1;5600:16:45;;-1:-1:-1;5618:8:45;5592:35;;5401:529;5870:25;5893:2;5870:20;:25;:::i;:::-;5862:34;;;:::i;:::-;5898:12;:8;5909:1;5898:12;:::i;:::-;5854:57;;;;;;5329:830;6104:29;6112:20;6104:29;:::i;:::-;6135:8;6096:48;;;;;;5298:1434;6224:16;6193:20;:48;6189:533;;;6444:25;6467:2;6444:20;:25;:::i;6189:533::-;-1:-1:-1;6675:20:45;;-1:-1:-1;6698:8:45;6660:47;;45918:1994;46002:6;46010;46018:4;46062:17;46083:1;46062:22;46058:134;;-1:-1:-1;1408:1:45;;-1:-1:-1;1408:1:45;;-1:-1:-1;46172:4:45;46104:73;;46058:134;46331:4;46311:17;:24;46339:1;46311:29;46307:1005;;46384:4;46364:17;:24;:29;:66;;;;-1:-1:-1;46409:21:45;46397:33;;;46364:66;46360:174;;;46475:4;46454:25;;;;46513:2;46501:14;;;;46360:174;46576:4;46556:17;:24;:29;:66;;;;-1:-1:-1;46601:21:45;46589:33;;;46556:66;46552:174;;;46667:4;46646:25;;;;46705:2;46693:14;;;;46552:174;46768:4;46748:17;:24;:29;:66;;;;-1:-1:-1;46793:21:45;46781:33;;;46748:66;46744:174;;;46859:4;46838:25;;;;46897:2;46885:14;;;;46744:174;46963:4;46943:17;:24;:29;:65;;;;-1:-1:-1;46988:20:45;46976:32;;;46943:65;46936:174;;;47053:3;47032:24;;;;47090:1;47078:13;;;;46936:174;;;47152:4;47132:17;:24;:29;:65;;;;-1:-1:-1;47177:20:45;47165:32;;;47132:65;47128:170;;;47242:2;47221:23;;;;47278:1;47266:13;;;;47128:170;47606:2;47586:22;;;;;47647:25;47626:17;:46;:82;;;;-1:-1:-1;47688:20:45;47676:32;;;47626:82;47622:192;;;47748:20;47728:40;;47798:1;47786:13;;;;47622:192;-1:-1:-1;47836:17:45;;47855:8;;-1:-1:-1;;;47885:4:45;47865:24;;:29;;;45918:1994::o;1985:168:2:-;2046:13;2100:1;2092:5;:9;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2114:31;2436:3:5;2431:8;;;2576;;;2575:17;2114:8:2;:31::i;:::-;2078:68;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2071:75;;1985:168;;;:::o;1251:634::-;1307:13;1356:14;1373:17;1384:5;1373:10;:17::i;:::-;1393:1;1373:21;1356:38;;1408:20;1442:6;1431:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1431:18:2;-1:-1:-1;1408:41:2;-1:-1:-1;1538:30:2;;;1554:4;1538:30;1595:247;1626:5;;1730:10;1725:2;1714:14;;1709:32;1626:5;1696:46;1786:2;1777:11;;;-1:-1:-1;1806:21:2;1595:247;1806:21;-1:-1:-1;1862:6:2;1251:634;-1:-1:-1;;;1251:634:2:o;835:346:34:-;919:7;1033:109;1107:1;1100:4;1096:1;1086:6;1080:13;1077:1;1072:22;1068:30;1064:41;1061:48;1055:3;1047:6;1044:15;1040:70;1033:109;;;1135:1;1127:6;1123:14;1113:24;;1033:109;;;-1:-1:-1;1168:6:34;;835:346;-1:-1:-1;;835:346:34:o;5044:1463:35:-;1870:13:34;;5135:6:35;;;;7516:41:33;1886:1:34;1862:22;;;1858:30;;;;1854:41;1847:49;1840:57;1823:15;;;1819:79;5304:15:35;;;;5135:6;;5374:53;5304:15;1823::34;5374:40:35;:53::i;:::-;5334:93;;-1:-1:-1;5334:93:35;-1:-1:-1;5476:26:35;;;;5472:90;;-1:-1:-1;5530:13:35;-1:-1:-1;5545:1:35;;-1:-1:-1;5522:25:35;;-1:-1:-1;;5522:25:35;5472:90;5618:5;5627:1;5618:10;5614:341;;5863:16;5847:5;:33;:77;;5922:1;5847:77;;;5883:29;5847:77;5839:101;-1:-1:-1;5933:5:35;-1:-1:-1;5839:101:35;;-1:-1:-1;;;5839:101:35;5614:341;6400:29;6392:37;;:81;;6471:1;6392:81;;;6432:29;6392:81;6384:106;-1:-1:-1;6475:14:35;;;-1:-1:-1;;;;5044:1463:35;;;;;:::o;29471:916:3:-;29524:7;;29608:8;29599:17;;29595:103;;29645:8;29636:17;;;-1:-1:-1;29681:2:3;29671:12;29595:103;29724:8;29715:5;:17;29711:103;;29761:8;29752:17;;;-1:-1:-1;29797:2:3;29787:12;29711:103;29840:8;29831:5;:17;29827:103;;29877:8;29868:17;;;-1:-1:-1;29913:2:3;29903:12;29827:103;29956:7;29947:5;:16;29943:100;;29992:7;29983:16;;;-1:-1:-1;30027:1:3;30017:11;29943:100;30069:7;30060:5;:16;30056:100;;30105:7;30096:16;;;-1:-1:-1;30140:1:3;30130:11;30056:100;30182:7;30173:5;:16;30169:100;;30218:7;30209:16;;;-1:-1:-1;30253:1:3;30243:11;30169:100;30295:7;30286:5;:16;30282:66;;30332:1;30322:11;30374:6;29471:916;-1:-1:-1;;29471:916:3:o;1114:3326:35:-;1199:6;1207:7;1263:3;1254:5;:12;1250:95;;-1:-1:-1;1294:32:35;;-1:-1:-1;1328:1:35;1286:44;;1250:95;1511:5;1520:1;1511:10;1507:80;;1548:24;;;;;;;;;;;;;;1507:80;1808:18;1778:19;1912:7;;;1778:19;2083:486;2100:5;2090:6;:15;;:32;;;;;2120:2;2109:8;:13;2090:32;2083:486;;;2434:13;;2518:10;;;;2546:8;;;;;2468:2;2464:17;2431:1;2426:22;;;;2422:40;;;2418:64;2407:76;2083:486;;;2785:5;2775:6;:15;2771:1613;;2939:13;;2832;2931:22;2927:40;;;3167:1;3159:9;;3155:393;;;-1:-1:-1;3204:29:35;;-1:-1:-1;3235:1:35;;-1:-1:-1;3196:41:35;;-1:-1:-1;;;;3196:41:35;3155:393;3318:2;:14;;;3309:24;;3363:14;;;:22;-1:-1:-1;3359:126:35;;;-1:-1:-1;3425:29:35;;-1:-1:-1;3456:1:35;;-1:-1:-1;3417:41:35;;-1:-1:-1;;;;;3417:41:35;3359:126;3510:15;;;;;-1:-1:-1;3569:8:35;;;;;3760:592;3777:5;3767:6;:15;3760:592;;4007:13;;3876:23;3999:22;4177:18;4150:46;;4146:150;;-1:-1:-1;4236:29:35;;-1:-1:-1;4267:1:35;;-1:-1:-1;4228:41:35;;-1:-1:-1;;;;4228:41:35;4146:150;-1:-1:-1;4321:8:35;;;;;3760:592;;;4413:1;;4417:5;;-1:-1:-1;1114:3326:35;-1:-1:-1;;;;;;1114:3326:35:o;14:207:134:-;100:6;153:2;141:9;132:7;128:23;124:32;121:52;;;169:1;166;159:12;121:52;-1:-1:-1;192:23:134;;14:207;-1:-1:-1;14:207:134:o;435:302::-;557:6;565;618:2;606:9;597:7;593:23;589:32;586:52;;;634:1;631;624:12;586:52;-1:-1:-1;;657:23:134;;;727:2;712:18;;;699:32;;-1:-1:-1;435:302:134:o;742:156::-;808:20;;868:4;857:16;;847:27;;837:55;;888:1;885;878:12;903:277;996:6;1004;1057:2;1045:9;1036:7;1032:23;1028:32;1025:52;;;1073:1;1070;1063:12;1025:52;1109:9;1096:23;1086:33;;1138:36;1170:2;1159:9;1155:18;1138:36;:::i;:::-;1128:46;;903:277;;;;;:::o;1640:368::-;1732:6;1740;1793:2;1781:9;1772:7;1768:23;1764:32;1761:52;;;1809:1;1806;1799:12;1761:52;1845:9;1832:23;1822:33;;1905:2;1894:9;1890:18;1877:32;1952:5;1945:13;1938:21;1931:5;1928:32;1918:60;;1974:1;1971;1964:12;1918:60;1997:5;1987:15;;;1640:368;;;;;:::o;2013:477::-;2162:2;2151:9;2144:21;2125:4;2194:6;2188:13;2237:6;2232:2;2221:9;2217:18;2210:34;2296:6;2291:2;2283:6;2279:15;2274:2;2263:9;2259:18;2253:50;2352:1;2347:2;2338:6;2327:9;2323:22;2319:31;2312:42;2481:2;2411:66;2406:2;2398:6;2394:15;2390:88;2379:9;2375:104;2371:113;2363:121;;;2013:477;;;;:::o;2932:184::-;2984:77;2981:1;2974:88;3081:4;3078:1;3071:15;3105:4;3102:1;3095:15;3121:981;3190:6;3243:2;3231:9;3222:7;3218:23;3214:32;3211:52;;;3259:1;3256;3249:12;3211:52;3299:9;3286:23;3328:18;3369:2;3361:6;3358:14;3355:34;;;3385:1;3382;3375:12;3355:34;3423:6;3412:9;3408:22;3398:32;;3468:7;3461:4;3457:2;3453:13;3449:27;3439:55;;3490:1;3487;3480:12;3439:55;3526:2;3513:16;3548:2;3544;3541:10;3538:36;;;3554:18;;:::i;:::-;3688:2;3682:9;3750:4;3742:13;;3593:66;3738:22;;;3762:2;3734:31;3730:40;3718:53;;;3786:18;;;3806:22;;;3783:46;3780:72;;;3832:18;;:::i;:::-;3872:10;3868:2;3861:22;3907:2;3899:6;3892:18;3947:7;3942:2;3937;3933;3929:11;3925:20;3922:33;3919:53;;;3968:1;3965;3958:12;3919:53;4024:2;4019;4015;4011:11;4006:2;3998:6;3994:15;3981:46;4069:1;4047:15;;;4064:2;4043:24;4036:35;;;;-1:-1:-1;4051:6:134;3121:981;-1:-1:-1;;;;;3121:981:134:o;4458:397::-;4616:6;4624;4632;4685:2;4673:9;4664:7;4660:23;4656:32;4653:52;;;4701:1;4698;4691:12;4653:52;-1:-1:-1;;4724:23:134;;;4794:2;4779:18;;4766:32;;-1:-1:-1;4845:2:134;4830:18;;;4817:32;;4458:397;-1:-1:-1;4458:397:134:o;5706:184::-;5758:77;5755:1;5748:88;5855:4;5852:1;5845:15;5879:4;5876:1;5869:15;5895:184;5947:77;5944:1;5937:88;6044:4;6041:1;6034:15;6068:4;6065:1;6058:15;6084:476;6173:1;6210:5;6173:1;6224:330;6245:7;6235:8;6232:21;6224:330;;;6364:4;6296:66;6292:77;6286:4;6283:87;6280:113;;;6373:18;;:::i;:::-;6423:7;6413:8;6409:22;6406:55;;;6443:16;;;;6406:55;6522:22;;;;6482:15;;;;6224:330;;;6228:3;6084:476;;;;;:::o;6565:866::-;6614:5;6644:8;6634:80;;-1:-1:-1;6685:1:134;6699:5;;6634:80;6733:4;6723:76;;-1:-1:-1;6770:1:134;6784:5;;6723:76;6815:4;6833:1;6828:59;;;;6901:1;6896:130;;;;6808:218;;6828:59;6858:1;6849:10;;6872:5;;;6896:130;6933:3;6923:8;6920:17;6917:43;;;6940:18;;:::i;:::-;-1:-1:-1;;6996:1:134;6982:16;;7011:5;;6808:218;;7110:2;7100:8;7097:16;7091:3;7085:4;7082:13;7078:36;7072:2;7062:8;7059:16;7054:2;7048:4;7045:12;7041:35;7038:77;7035:159;;;-1:-1:-1;7147:19:134;;;7179:5;;7035:159;7226:34;7251:8;7245:4;7226:34;:::i;:::-;7356:6;7288:66;7284:79;7275:7;7272:92;7269:118;;;7367:18;;:::i;:::-;7405:20;;6565:866;-1:-1:-1;;;6565:866:134:o;7436:131::-;7496:5;7525:36;7552:8;7546:4;7525:36;:::i;7572:168::-;7645:9;;;7676;;7693:15;;;7687:22;;7673:37;7663:71;;7714:18;;:::i;7745:200::-;7811:9;;;7784:4;7839:9;;7867:10;;7879:12;;;7863:29;7902:12;;;7894:21;;7860:56;7857:82;;;7919:18;;:::i;:::-;7857:82;7745:200;;;;:::o;7950:216::-;8014:9;;;8042:11;;;7989:3;8072:9;;8100:10;;8096:19;;8125:10;;8117:19;;8093:44;8090:70;;;8140:18;;:::i;:::-;8090:70;;7950:216;;;;:::o;8171:292::-;8243:9;;;8210:7;8268:9;;8285:66;8279:73;;8264:89;8261:115;;;8356:18;;:::i;:::-;8429:1;8420:7;8415:16;8412:1;8409:23;8405:1;8398:9;8395:38;8385:72;;8437:18;;:::i;8786:308::-;8825:1;8851;8841:35;;8856:18;;:::i;:::-;8973:66;8970:1;8967:73;8898:66;8895:1;8892:73;8888:153;8885:179;;;9044:18;;:::i;:::-;-1:-1:-1;9078:10:134;;8786:308::o;9099:112::-;9130:1;9156;9146:35;;9161:18;;:::i;:::-;-1:-1:-1;9195:10:134;;9099:112::o;9216:191::-;9251:3;9282:66;9275:5;9272:77;9269:103;;9352:18;;:::i;9412:120::-;9452:1;9478;9468:35;;9483:18;;:::i;:::-;-1:-1:-1;9517:9:134;;9412:120::o;9537:195::-;9576:3;9607:66;9600:5;9597:77;9594:103;;9677:18;;:::i;:::-;-1:-1:-1;9724:1:134;9713:13;;9537:195::o;9737:212::-;9779:3;9817:5;9811:12;9861:6;9854:4;9847:5;9843:16;9838:3;9832:36;9923:1;9887:16;;9912:13;;;-1:-1:-1;9887:16:134;;9737:212;-1:-1:-1;9737:212:134:o;9954:344::-;10175:3;10206:30;10232:3;10224:6;10206:30;:::i;:::-;10259:3;10245:18;;10290:1;10279:13;;9954:344;-1:-1:-1;;;9954:344:134:o;10303:390::-;10602:3;10597;10590:16;10572:3;10622:65;10648:38;10683:1;10678:3;10674:11;10666:6;10648:38;:::i;:::-;10640:6;10622:65;:::i;:::-;10615:72;10303:390;-1:-1:-1;;;;10303:390:134:o;10698:315::-;10949:3;10944;10937:16;10919:3;10969:38;11004:1;10999:3;10995:11;10987:6;10969:38;:::i;11018:417::-;11293:3;11318:111;11344:84;11370:57;11396:30;11422:3;11414:6;11396:30;:::i;:::-;11388:6;11370:57;:::i;:::-;11362:6;11344:84;:::i;11318:111::-;11311:118;11018:417;-1:-1:-1;;;;;;11018:417:134:o;11620:128::-;11687:9;;;11708:11;;;11705:37;;;11722:18;;:::i;11753:184::-;11805:77;11802:1;11795:88;11902:4;11899:1;11892:15;11926:4;11923:1;11916:15;11942:125;12007:9;;;12028:10;;;12025:36;;;12041:18;;:::i;12072:267::-;12251:3;12276:57;12302:30;12328:3;12320:6;12302:30;:::i", - "linkReferences": {} - }, - "methodIdentifiers": { - "FORMAT_DEFAULT_SCIENTIFIC_MAX()": "9b4afd99", - "FORMAT_DEFAULT_SCIENTIFIC_MIN()": "d35273a7", - "abs(bytes32)": "81a82272", - "add(bytes32,bytes32)": "d1de592a", - "ceil(bytes32)": "719cd99d", - "div(bytes32,bytes32)": "30297400", - "e()": "ffae15ba", - "eq(bytes32,bytes32)": "3447c030", - "floor(bytes32)": "5ca0e7a4", - "format(bytes32)": "a100a3d9", - "format(bytes32,bool)": "371493ce", - "format(bytes32,bytes32,bytes32)": "e5526ecd", - "frac(bytes32)": "28fa1f01", - "fromFixedDecimalLossless(uint256,uint8)": "3b3bd868", - "fromFixedDecimalLossy(uint256,uint8)": "e75f991f", - "gt(bytes32,bytes32)": "8dc29807", - "gte(bytes32,bytes32)": "73bfb283", - "integer(bytes32)": "e0db5888", - "inv(bytes32)": "04327dc5", - "isZero(bytes32)": "dd646917", - "log10(bytes32)": "25388350", - "lt(bytes32,bytes32)": "d102b4d3", - "lte(bytes32,bytes32)": "81f7e2f5", - "max(bytes32,bytes32)": "078b665b", - "maxNegativeValue()": "602c35fc", - "maxPositiveValue()": "cb09682b", - "min(bytes32,bytes32)": "a90d041a", - "minNegativeValue()": "cde72ef3", - "minPositiveValue()": "a19684b7", - "minus(bytes32)": "d3d6ffa8", - "mul(bytes32,bytes32)": "96ce1ec7", - "parse(string)": "bc62d8d8", - "pow(bytes32,bytes32)": "3004fa41", - "pow10(bytes32)": "1ee62f11", - "sqrt(bytes32)": "146e82ad", - "sub(bytes32,bytes32)": "41aa0080", - "toFixedDecimalLossless(bytes32,uint8)": "5b23771d", - "toFixedDecimalLossy(bytes32,uint8)": "0b6429bc", - "zero()": "bc1b392d" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"CoefficientOverflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"DivisionByZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"ExponentOverflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"Log10Negative\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Log10Zero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tablesAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"expectedCodehash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"actualCodehash\",\"type\":\"bytes32\"}],\"name\":\"LogTablesNotDeployed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"LossyConversionFromFloat\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"LossyConversionToFloat\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"MaximizeOverflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denominator\",\"type\":\"uint256\"}],\"name\":\"MulDivOverflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"NegativeFixedDecimalConversion\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"PowNegativeBase\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"scientificMin\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"scientificMax\",\"type\":\"bytes32\"}],\"name\":\"ScientificMinNotLessThanMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"UnformatableExponent\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"targetExponent\",\"type\":\"int256\"}],\"name\":\"WithTargetExponentOverflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"ZeroNegativePower\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroStringStartPointer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FORMAT_DEFAULT_SCIENTIFIC_MAX\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FORMAT_DEFAULT_SCIENTIFIC_MIN\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"abs\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"add\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"ceil\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"div\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"e\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"eq\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"floor\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"scientific\",\"type\":\"bool\"}],\"name\":\"format\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"format\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"scientificMin\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"scientificMax\",\"type\":\"bytes32\"}],\"name\":\"format\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"frac\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"name\":\"fromFixedDecimalLossless\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"name\":\"fromFixedDecimalLossy\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"gt\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"gte\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"integer\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"inv\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"isZero\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"log10\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"lt\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"lte\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"max\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxNegativeValue\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxPositiveValue\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"min\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minNegativeValue\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minPositiveValue\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"minus\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"mul\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"str\",\"type\":\"string\"}],\"name\":\"parse\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"},{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"pow\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"pow10\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"sqrt\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"sub\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"float\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"name\":\"toFixedDecimalLossless\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"float\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"name\":\"toFixedDecimalLossy\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"zero\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"CoefficientOverflow(int256,int256)\":[{\"details\":\"Thrown when a coefficient overflows.\"}],\"DivisionByZero(int256,int256)\":[{\"details\":\"Thrown when dividing by zero.\",\"params\":{\"exponent\":\"The exponent of the numerator.\",\"signedCoefficient\":\"The signed coefficient of the numerator.\"}}],\"ExponentOverflow(int256,int256)\":[{\"details\":\"Thrown when an exponent overflows.\"}],\"Log10Negative(int256,int256)\":[{\"details\":\"Thrown when attempting to calculate the log of a negative number.\"}],\"Log10Zero()\":[{\"details\":\"Thrown when attempting to calculate the log of 0.\"}],\"LogTablesNotDeployed(address,bytes32,bytes32)\":[{\"details\":\"Thrown when constructing a `DecimalFloat` on a chain where the log tables data contract is not deployed at the expected address with the expected codehash. Without this check, transcendental functions (`pow10`/`log10`/`pow`/`sqrt`) would silently `extcodecopy` zero bytes and return garbage.\",\"params\":{\"actualCodehash\":\"The codehash currently at `tablesAddress` (zero if no contract is deployed there).\",\"expectedCodehash\":\"The codehash the deployed table contract is expected to have.\",\"tablesAddress\":\"The address `DecimalFloat` was compiled to read log tables from.\"}}],\"LossyConversionFromFloat(int256,int256)\":[{\"details\":\"Thrown when converting a float to some value when the conversion is lossy.\"}],\"LossyConversionToFloat(int256,int256)\":[{\"details\":\"Thrown when converting some value to a float when the conversion is lossy.\"}],\"MaximizeOverflow(int256,int256)\":[{\"details\":\"Thrown when a maximize overflows where it is not appropriate.\"}],\"MulDivOverflow(uint256,uint256,uint256)\":[{\"details\":\"Thrown when mulDiv internal to division overflows.\"}],\"NegativeFixedDecimalConversion(int256,int256)\":[{\"details\":\"Thrown when attempting to convert a negative number to an unsigned fixed-point number.\"}],\"PowNegativeBase(int256,int256)\":[{\"details\":\"Thrown when attempting to exponentiate a negative base.\"}],\"ScientificMinNotLessThanMax(bytes32,bytes32)\":[{\"details\":\"Thrown when scientificMin is not less than scientificMax in format.\",\"params\":{\"scientificMax\":\"The maximum threshold for scientific notation.\",\"scientificMin\":\"The minimum threshold for scientific notation.\"}}],\"UnformatableExponent(int256)\":[{\"details\":\"Thrown when the exponent cannot be formatted.\",\"params\":{\"exponent\":\"The exponent that cannot be formatted.\"}}],\"WithTargetExponentOverflow(int256,int256,int256)\":[{\"details\":\"Thrown when attempting to rescale a coefficient to a target exponent\"}],\"ZeroNegativePower(bytes32)\":[{\"details\":\"Thrown when attempting to exponentiate 0^b where b is negative.\"}]},\"kind\":\"dev\",\"methods\":{\"abs(bytes32)\":{\"params\":{\"a\":\"The float to get the absolute value of.\"},\"returns\":{\"_0\":\"The absolute value of the float.\"}},\"add(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to add.\",\"b\":\"The second float to add.\"},\"returns\":{\"_0\":\"The sum of the two floats.\"}},\"ceil(bytes32)\":{\"params\":{\"a\":\"The float to get the ceiling of.\"},\"returns\":{\"_0\":\"The ceiled float.\"}},\"div(bytes32,bytes32)\":{\"params\":{\"a\":\"The dividend (numerator).\",\"b\":\"The divisor (denominator).\"},\"returns\":{\"_0\":\"The quotient of the two floats.\"}},\"e()\":{\"returns\":{\"_0\":\"The constant value of Euler's number as a Float.\"}},\"eq(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to compare.\",\"b\":\"The second float to compare.\"},\"returns\":{\"_0\":\"True if the two floats are equal, false otherwise.\"}},\"floor(bytes32)\":{\"params\":{\"a\":\"The float to get the floor of.\"},\"returns\":{\"_0\":\"The floored float.\"}},\"format(bytes32)\":{\"params\":{\"a\":\"The float to format.\"},\"returns\":{\"_0\":\"The string representation of the float.\"}},\"format(bytes32,bool)\":{\"params\":{\"a\":\"The float to format.\",\"scientific\":\"Whether to format the float in scientific notation.\"},\"returns\":{\"_0\":\"The string representation of the float.\"}},\"format(bytes32,bytes32,bytes32)\":{\"params\":{\"a\":\"The float to format. The absolute value of `a` is used to determine if scientific notation is used, this allows negative numbers to be formatted consistently with their positive counterparts.\",\"scientificMax\":\"The largest number that won't be formatted in scientific notation.\",\"scientificMin\":\"The smallest number that won't be formatted in scientific notation.\"},\"returns\":{\"_0\":\"The string representation of the float.\"}},\"frac(bytes32)\":{\"params\":{\"a\":\"The float to get the fractional part of.\"},\"returns\":{\"_0\":\"The fractional part of the float.\"}},\"fromFixedDecimalLossless(uint256,uint8)\":{\"params\":{\"decimals\":\"The number of decimals in the fixed point representation. e.g. If 1e18 represents 1 this would be 18 decimals.\",\"value\":\"The fixed point decimal value to convert.\"},\"returns\":{\"_0\":\"float The Float struct containing the signed coefficient and exponent.\"}},\"fromFixedDecimalLossy(uint256,uint8)\":{\"params\":{\"decimals\":\"The number of decimals in the fixed point representation. e.g. If 1e18 represents 1 this would be 18 decimals.\",\"value\":\"The fixed point decimal value to convert.\"},\"returns\":{\"_0\":\"float The Float struct containing the signed coefficient and exponent.\",\"_1\":\"lossless True if the conversion was lossless, false otherwise.\"}},\"gt(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to compare.\",\"b\":\"The second float to compare.\"},\"returns\":{\"_0\":\"True if the first float is greater than the second, false otherwise.\"}},\"gte(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to compare.\",\"b\":\"The second float to compare.\"},\"returns\":{\"_0\":\"True if the first float is greater than or equal to the second, false otherwise.\"}},\"integer(bytes32)\":{\"params\":{\"a\":\"The float to get the integer part of.\"},\"returns\":{\"_0\":\"The integer part of the float.\"}},\"inv(bytes32)\":{\"params\":{\"a\":\"The float to invert.\"},\"returns\":{\"_0\":\"The inverted float.\"}},\"isZero(bytes32)\":{\"params\":{\"a\":\"The float to check.\"},\"returns\":{\"_0\":\"True if the float is zero, false otherwise.\"}},\"log10(bytes32)\":{\"params\":{\"a\":\"The float to take the logarithm of.\"},\"returns\":{\"_0\":\"The logarithm of the float.\"}},\"lt(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to compare.\",\"b\":\"The second float to compare.\"},\"returns\":{\"_0\":\"True if the first float is less than the second, false otherwise.\"}},\"lte(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to compare.\",\"b\":\"The second float to compare.\"},\"returns\":{\"_0\":\"True if the first float is less than or equal to the second, false otherwise.\"}},\"max(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to compare.\",\"b\":\"The second float to compare.\"},\"returns\":{\"_0\":\"The larger of the two floats.\"}},\"maxNegativeValue()\":{\"returns\":{\"_0\":\"The maximum negative value of a Float.\"}},\"maxPositiveValue()\":{\"returns\":{\"_0\":\"The maximum positive value of a Float.\"}},\"min(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to compare.\",\"b\":\"The second float to compare.\"},\"returns\":{\"_0\":\"The smaller of the two floats.\"}},\"minNegativeValue()\":{\"returns\":{\"_0\":\"The minimum negative value of a Float.\"}},\"minPositiveValue()\":{\"returns\":{\"_0\":\"The minimum positive value of a Float.\"}},\"minus(bytes32)\":{\"params\":{\"a\":\"The float to negate.\"},\"returns\":{\"_0\":\"The negated float.\"}},\"mul(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to multiply.\",\"b\":\"The second float to multiply.\"},\"returns\":{\"_0\":\"The product of the two floats.\"}},\"parse(string)\":{\"params\":{\"str\":\"The string to parse.\"},\"returns\":{\"_0\":\"errorSelector The selector of the error if parsing failed. `0` if parsing succeeded.\",\"_1\":\"parsed The parsed float. Caller MUST check `errorSelector` to determine if parsing succeeded.\"}},\"pow(bytes32,bytes32)\":{\"params\":{\"a\":\"The base float.\",\"b\":\"The exponent float.\"},\"returns\":{\"_0\":\"The result of raising the base float to the power of the exponent\"}},\"pow10(bytes32)\":{\"params\":{\"a\":\"The exponent to raise 10 to.\"},\"returns\":{\"_0\":\"The result of 10^a.\"}},\"sqrt(bytes32)\":{\"params\":{\"a\":\"The float to take the square root of.\"},\"returns\":{\"_0\":\"The square root of the float.\"}},\"sub(bytes32,bytes32)\":{\"params\":{\"a\":\"The float to subtract from.\",\"b\":\"The float to subtract.\"},\"returns\":{\"_0\":\"The difference of the two floats.\"}},\"toFixedDecimalLossless(bytes32,uint8)\":{\"params\":{\"decimals\":\"The number of decimals in the fixed point representation. e.g. If 1e18 represents 1 this would be 18 decimals.\",\"float\":\"The Float struct to convert.\"},\"returns\":{\"_0\":\"The fixed point decimal value as a uint256.\"}},\"toFixedDecimalLossy(bytes32,uint8)\":{\"params\":{\"decimals\":\"The number of decimals in the fixed point representation. e.g. If 1e18 represents 1 this would be 18 decimals.\",\"float\":\"The Float struct to convert.\"},\"returns\":{\"_0\":\"value The fixed point decimal value as a uint256.\",\"_1\":\"lossless True if the conversion was lossless, false otherwise.\"}},\"zero()\":{\"returns\":{\"_0\":\"The zero value of a Float in its maximized representation.\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"ZeroStringStartPointer()\":[{\"notice\":\"The decimal string start pointer is zero.\"}]},\"kind\":\"user\",\"methods\":{\"FORMAT_DEFAULT_SCIENTIFIC_MAX()\":{\"notice\":\"The default maximum value for scientific formatting. 1e9\"},\"FORMAT_DEFAULT_SCIENTIFIC_MIN()\":{\"notice\":\"The default minimum value for scientific formatting. 1e-4\"},\"abs(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.abs` for offchain use.\"},\"add(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.add` for offchain use.\"},\"ceil(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.ceil` for offchain use.\"},\"div(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.div` for offchain use.\"},\"e()\":{\"notice\":\"Exposes `LibDecimalFloat.FLOAT_E` for offchain use.\"},\"eq(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.eq` for offchain use.\"},\"floor(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.floor` for offchain use.\"},\"format(bytes32)\":{\"notice\":\"Exposes `format(Float, Float, Float)` for offchain use. Provides default scientific formatting.\"},\"format(bytes32,bool)\":{\"notice\":\"Exposes `LibFormatDecimalFloat.toDecimalString` for offchain use. provides raw bool interface for custom scientific formatting.\"},\"format(bytes32,bytes32,bytes32)\":{\"notice\":\"Exposes `LibFormatDecimalFloat.toDecimalString` for offchain use.\"},\"frac(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.frac` for offchain use.\"},\"fromFixedDecimalLossless(uint256,uint8)\":{\"notice\":\"Exposes `LibDecimalFloat.fromFixedDecimalLosslessPacked` for offchain use.\"},\"fromFixedDecimalLossy(uint256,uint8)\":{\"notice\":\"Exposes `LibDecimalFloat.fromFixedDecimalLossyPacked` for offchain use.\"},\"gt(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.gt` for offchain use.\"},\"gte(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.gte` for offchain use.\"},\"integer(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.integer` for offchain use.\"},\"inv(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.inv` for offchain use.\"},\"isZero(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.isZero` for offchain use.\"},\"log10(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.log10` for offchain use.\"},\"lt(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.lt` for offchain use.\"},\"lte(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.lte` for offchain use.\"},\"max(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.max` for offchain use.\"},\"maxNegativeValue()\":{\"notice\":\"Exposes `LibDecimalFloat.FLOAT_MAX_NEGATIVE_VALUE` for offchain use.\"},\"maxPositiveValue()\":{\"notice\":\"Exposes `LibDecimalFloat.FLOAT_MAX_POSITIVE_VALUE` for offchain use.\"},\"min(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.min` for offchain use.\"},\"minNegativeValue()\":{\"notice\":\"Exposes `LibDecimalFloat.FLOAT_MIN_NEGATIVE_VALUE` for offchain use.\"},\"minPositiveValue()\":{\"notice\":\"Exposes `LibDecimalFloat.FLOAT_MIN_POSITIVE_VALUE` for offchain use.\"},\"minus(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.minus` for offchain use.\"},\"mul(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.mul` for offchain use.\"},\"parse(string)\":{\"notice\":\"Exposes `LibParseDecimalFloat.parseDecimalFloat` for offchain use.\"},\"pow(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.pow` for offchain use.\"},\"pow10(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.pow10` for offchain use.\"},\"sqrt(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.sqrt` for offchain use.\"},\"sub(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.sub` for offchain use.\"},\"toFixedDecimalLossless(bytes32,uint8)\":{\"notice\":\"Exposes `LibDecimalFloat.toFixedDecimalLossless` for offchain use.\"},\"toFixedDecimalLossy(bytes32,uint8)\":{\"notice\":\"Exposes `LibDecimalFloat.toFixedDecimalLossy` for offchain use.\"},\"zero()\":{\"notice\":\"Exposes `LibDecimalFloat.FLOAT_ZERO` for offchain use.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/concrete/DecimalFloat.sol\":\"DecimalFloat\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"appendCBOR\":false,\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[\":@openzeppelin-contracts-5.6.1/=dependencies/@openzeppelin-contracts-5.6.1/\",\":forge-std-1.16.1/=dependencies/forge-std-1.16.1/\",\":mut/=dependencies/rain-string-0.2.0/src/lib/mut/\",\":parse/=dependencies/rain-string-0.2.0/src/lib/parse/\",\":rain-datacontract-0.1.0/=dependencies/rain-datacontract-0.1.0/\",\":rain-deploy-0.1.2/=dependencies/rain-deploy-0.1.2/\",\":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/\"]},\"sources\":{\"dependencies/@openzeppelin-contracts-5.6.1/utils/Bytes.sol\":{\"keccak256\":\"0xf80e4b96b6849936ea0fabd76cf81b13d7276295fddb1e1c07afb3ddf650b0ac\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6430007255ac11c6e9c4331a418f3af52ff66fbbae959f645301d025b20aeb08\",\"dweb:/ipfs/QmQE5fjmBBRw9ndnzJuC2uskYss1gbaR7JdazoCf1FGoBj\"]},\"dependencies/@openzeppelin-contracts-5.6.1/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"dependencies/@openzeppelin-contracts-5.6.1/utils/Strings.sol\":{\"keccak256\":\"0x1fdc2de9585ab0f1c417f02a873a2b6343cd64bb7ffec6b00ffa11a4a158d9e8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ab223a3d969c6cd7610049431dd42740960c477e45878f5d8b54411f7a32bdc\",\"dweb:/ipfs/QmWumhjvhpKcwx3vDPQninsNVTc3BGvqaihkQakFkQYpaS\"]},\"dependencies/@openzeppelin-contracts-5.6.1/utils/math/Math.sol\":{\"keccak256\":\"0x59973a93b1f983f94e10529f46ca46544a9fec2b5f56fb1390bbe9e0dc79f857\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c55ef8f0b9719790c2ae6f81d80a59ffb89f2f0abe6bc065585bd79edce058c5\",\"dweb:/ipfs/QmNNmCbX9NjPXKqHJN8R1WC2rNeZSQrPZLd6FF6AKLyH5Y\"]},\"dependencies/@openzeppelin-contracts-5.6.1/utils/math/SafeCast.sol\":{\"keccak256\":\"0xc8cae21c9ae4a46e5162ff9bf5b351d6fa6a6eba72d515f3bc1bdfeda7fdf083\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce830ebcf28e31643caba318996db3763c36d52cd0f23798ba83c135355d45e9\",\"dweb:/ipfs/QmdGPcvptHN7UBCbUYBbRX3hiRVRFLRwno8b4uga6uFNif\"]},\"dependencies/@openzeppelin-contracts-5.6.1/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]},\"dependencies/rain-string-0.2.0/src/error/ErrParse.sol\":{\"keccak256\":\"0x7a69236ad67e39c20f6ade7973ec551c9a5bb5db4671c8afa95b80f35a996497\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://4731c6ea05b4e820814380dbbd6dac14f5778a1e9194b8992148cf97a99ffbb2\",\"dweb:/ipfs/QmUMnKNt2zQ42fjS4fpLqodXytiffVFzaKupAm8rNsrYVo\"]},\"dependencies/rain-string-0.2.0/src/lib/parse/LibParseCMask.sol\":{\"keccak256\":\"0x91e798a6f71aafbd4743720eaa38a7f16f74c6c0ab2992e7e4982979e9df539a\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://4782e62e0e5a5fbc7d6c757dcc90347d7ad064f25372a6c471ffa968e12b91d7\",\"dweb:/ipfs/QmPohMsVTjm19gxYwxgAsTKJQRjkK2J1Pyah63nCtYBBnt\"]},\"dependencies/rain-string-0.2.0/src/lib/parse/LibParseChar.sol\":{\"keccak256\":\"0x66c401d784e9461f709116441de3707685e08438cd83553db28fe8caf0e97238\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://e6027d0f9d558953686f6eb78ca0b2f2e7d9d38e0be6d1435ffaaa4b90919593\",\"dweb:/ipfs/QmQXDMTzmJrst2a4kHkcfjSsEdnPc4ikQs7VfGbCfe9QCc\"]},\"dependencies/rain-string-0.2.0/src/lib/parse/LibParseDecimal.sol\":{\"keccak256\":\"0x72ccc4d7e0a1245897511e1efc15ddc80d423a8eb956249be7940a8e8f4e99fe\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://3ca57acd6a7cbe16f2c03aa5a6e81ec7af1ad44078924358578560a32aead7c0\",\"dweb:/ipfs/QmNukyUMS4JrzNHAYcpLbtYsD5CwYPEjfAaADv6qMZmqs6\"]},\"src/concrete/DecimalFloat.sol\":{\"keccak256\":\"0x6326a6b5ffef0708b84712c0b891dfc7f2d88c38191628da1f40933951f2683b\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://ad99eda6cc266d5d160439700d3c89a487e8e31d51538f2ad83435a1aac9f3ae\",\"dweb:/ipfs/QmarsuZkgqG7jT9mYBh1VKNvjD5ZsVtJJTiRGbfMQAY669\"]},\"src/error/ErrDecimalFloat.sol\":{\"keccak256\":\"0x53825ff4d1af4981100de46bd7536c611625fe7930b5c21921838cfed3a92243\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://961197f4c7b6d560f71f67892bfd5b64300be0f0fdb20162058938567653643e\",\"dweb:/ipfs/QmTJzmA5CEkmYrXJ2MHnfQ3wGm1Qj6xE1vNaqAqgUpEnvA\"]},\"src/error/ErrFormat.sol\":{\"keccak256\":\"0xc760cb6018291753e7408d55d12d5e66c116f9750dc241bbc201f3b46ae33aa7\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://cbc81bb7c26c8503926b579f978902bcc3227839bee04bd3500cc924d142d28e\",\"dweb:/ipfs/QmXqMuqBCpckD1EnsBjweyLdRZxpvC2xSP9FWBZFh2vztR\"]},\"src/error/ErrParse.sol\":{\"keccak256\":\"0x7fc9fe7421d78306d252d2853fd1be943d9cbd12ff7a9c8c3f286a8164bfe357\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://7b4c434d01b53788968d185683d9633afa26d95396b1e91337a53ccaab0d44ab\",\"dweb:/ipfs/QmQHmVjR37wwrCskiQviwkg7WkeBpr9uPddjuDxqzANXeV\"]},\"src/generated/LogTables.pointers.sol\":{\"keccak256\":\"0x2325d92e3e248350a79f163fcb8738056ae4240b6a77f759ff5fcbf7b381f5ae\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://9a52674114518573de7d184094b266bc2b5208953086f8ec35a494f048deefbb\",\"dweb:/ipfs/QmTjuj1R9k4pFMBVpX6RcWG87Rdh9pRTZVHYo93SzBfmsH\"]},\"src/lib/LibDecimalFloat.sol\":{\"keccak256\":\"0x59d2dad4b7e861ed835a79c61ae42b4b0d628f9c578f3bb3ecd7796ed530f196\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://e565148a37f06299de3b6bcb3385ea0336f65c6c02c9ebfbc6f227f4e56d1c03\",\"dweb:/ipfs/Qma6UNZifZc8zsf7J6B87CdCXhiCR6Zisyg9czsfaji6yY\"]},\"src/lib/deploy/LibDecimalFloatDeploy.sol\":{\"keccak256\":\"0x79f59754c234e55420359efaa9af6ec851fadf8dfaecda6860c1ef99abcf1e64\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://8303dde773c7c613981011fe9ee5d976338b3dab9c66cd67516a82b094596343\",\"dweb:/ipfs/QmQnkeaReEwkKcFMvegAuuBoF2WyirRQmQG9CjKfdhQKnZ\"]},\"src/lib/format/LibFormatDecimalFloat.sol\":{\"keccak256\":\"0x5aac6382e7f7040e68600333c1b00b0aedb3edb6bced84b63783f6d88fe0b4f0\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://e96d30e34e1fa2cc4eb574ded30c0f6f93929dcc19cb571f555ca8c5ac32eaa7\",\"dweb:/ipfs/QmRRtk84AqEdQrRXfeTzVUAbAktJTZ92iTLqjocQV4PDx7\"]},\"src/lib/implementation/LibDecimalFloatImplementation.sol\":{\"keccak256\":\"0x47d0eeb542875548689465407162a19e4a21fb4591af5bb48d5758c0d1b93634\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://631efb796ff17f277804f8a32df7d28630c2ae5300e7d74c37aa8ed1f86b5092\",\"dweb:/ipfs/QmSfmMGQyxKYxu8UrWDEtuCggQ9HtFJy5cbMsYLPZbcTZ7\"]},\"src/lib/parse/LibParseDecimalFloat.sol\":{\"keccak256\":\"0x703d2d37d8a14639a3eb2dcd61601b36552027e16b4e8414befe51f2d0b9ed38\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://53fa45503e115a322a701a1289c5b5fcbe68090c83e0635af77d275d123f09f0\",\"dweb:/ipfs/QmTBtz8uPLYXrTue9SmHBVdgjpFJYUU41Z48PAgu1nXafn\"]},\"src/lib/table/LibLogTable.sol\":{\"keccak256\":\"0xccd2dea54cfb708c01e7e8e88c089742bbab18f5783be4632311fb4923d44c88\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://f45fb78c16b5d66d56ba0e78acdb0ca5d315eb05efa2cd7a81e191aabe7aec52\",\"dweb:/ipfs/QmQJ3TFFxTMu4HZ4qnjgmdmSNhGZLQRdCnSqAipEF1up1f\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.25+commit.b61c2a91" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "int256", - "name": "signedCoefficient", - "type": "int256" - }, - { "internalType": "int256", "name": "exponent", "type": "int256" } - ], - "type": "error", - "name": "CoefficientOverflow" - }, - { - "inputs": [ - { - "internalType": "int256", - "name": "signedCoefficient", - "type": "int256" - }, - { "internalType": "int256", "name": "exponent", "type": "int256" } - ], - "type": "error", - "name": "DivisionByZero" - }, - { - "inputs": [ - { - "internalType": "int256", - "name": "signedCoefficient", - "type": "int256" - }, - { "internalType": "int256", "name": "exponent", "type": "int256" } - ], - "type": "error", - "name": "ExponentOverflow" - }, - { - "inputs": [ - { - "internalType": "int256", - "name": "signedCoefficient", - "type": "int256" - }, - { "internalType": "int256", "name": "exponent", "type": "int256" } - ], - "type": "error", - "name": "Log10Negative" - }, - { "inputs": [], "type": "error", "name": "Log10Zero" }, - { - "inputs": [ - { - "internalType": "address", - "name": "tablesAddress", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "expectedCodehash", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "actualCodehash", - "type": "bytes32" - } - ], - "type": "error", - "name": "LogTablesNotDeployed" - }, - { - "inputs": [ - { - "internalType": "int256", - "name": "signedCoefficient", - "type": "int256" - }, - { "internalType": "int256", "name": "exponent", "type": "int256" } - ], - "type": "error", - "name": "LossyConversionFromFloat" - }, - { - "inputs": [ - { - "internalType": "int256", - "name": "signedCoefficient", - "type": "int256" - }, - { "internalType": "int256", "name": "exponent", "type": "int256" } - ], - "type": "error", - "name": "LossyConversionToFloat" - }, - { - "inputs": [ - { - "internalType": "int256", - "name": "signedCoefficient", - "type": "int256" - }, - { "internalType": "int256", "name": "exponent", "type": "int256" } - ], - "type": "error", - "name": "MaximizeOverflow" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "x", "type": "uint256" }, - { "internalType": "uint256", "name": "y", "type": "uint256" }, - { - "internalType": "uint256", - "name": "denominator", - "type": "uint256" - } - ], - "type": "error", - "name": "MulDivOverflow" - }, - { - "inputs": [ - { - "internalType": "int256", - "name": "signedCoefficient", - "type": "int256" - }, - { "internalType": "int256", "name": "exponent", "type": "int256" } - ], - "type": "error", - "name": "NegativeFixedDecimalConversion" - }, - { - "inputs": [ - { - "internalType": "int256", - "name": "signedCoefficient", - "type": "int256" - }, - { "internalType": "int256", "name": "exponent", "type": "int256" } - ], - "type": "error", - "name": "PowNegativeBase" - }, - { - "inputs": [ - { - "internalType": "Float", - "name": "scientificMin", - "type": "bytes32" - }, - { - "internalType": "Float", - "name": "scientificMax", - "type": "bytes32" - } - ], - "type": "error", - "name": "ScientificMinNotLessThanMax" - }, - { - "inputs": [ - { "internalType": "int256", "name": "exponent", "type": "int256" } - ], - "type": "error", - "name": "UnformatableExponent" - }, - { - "inputs": [ - { - "internalType": "int256", - "name": "signedCoefficient", - "type": "int256" - }, - { "internalType": "int256", "name": "exponent", "type": "int256" }, - { - "internalType": "int256", - "name": "targetExponent", - "type": "int256" - } - ], - "type": "error", - "name": "WithTargetExponentOverflow" - }, - { - "inputs": [ - { "internalType": "Float", "name": "b", "type": "bytes32" } - ], - "type": "error", - "name": "ZeroNegativePower" - }, - { "inputs": [], "type": "error", "name": "ZeroStringStartPointer" }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "FORMAT_DEFAULT_SCIENTIFIC_MAX", - "outputs": [ - { "internalType": "Float", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "FORMAT_DEFAULT_SCIENTIFIC_MIN", - "outputs": [ - { "internalType": "Float", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [ - { "internalType": "Float", "name": "a", "type": "bytes32" } - ], - "stateMutability": "pure", - "type": "function", - "name": "abs", - "outputs": [ - { "internalType": "Float", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [ - { "internalType": "Float", "name": "a", "type": "bytes32" }, - { "internalType": "Float", "name": "b", "type": "bytes32" } - ], - "stateMutability": "pure", - "type": "function", - "name": "add", - "outputs": [ - { "internalType": "Float", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [ - { "internalType": "Float", "name": "a", "type": "bytes32" } - ], - "stateMutability": "pure", - "type": "function", - "name": "ceil", - "outputs": [ - { "internalType": "Float", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [ - { "internalType": "Float", "name": "a", "type": "bytes32" }, - { "internalType": "Float", "name": "b", "type": "bytes32" } - ], - "stateMutability": "pure", - "type": "function", - "name": "div", - "outputs": [ - { "internalType": "Float", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [], - "stateMutability": "pure", - "type": "function", - "name": "e", - "outputs": [ - { "internalType": "Float", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [ - { "internalType": "Float", "name": "a", "type": "bytes32" }, - { "internalType": "Float", "name": "b", "type": "bytes32" } - ], - "stateMutability": "pure", - "type": "function", - "name": "eq", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "Float", "name": "a", "type": "bytes32" } - ], - "stateMutability": "pure", - "type": "function", - "name": "floor", - "outputs": [ - { "internalType": "Float", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [ - { "internalType": "Float", "name": "a", "type": "bytes32" }, - { "internalType": "bool", "name": "scientific", "type": "bool" } - ], - "stateMutability": "pure", - "type": "function", - "name": "format", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "Float", "name": "a", "type": "bytes32" } - ], - "stateMutability": "pure", - "type": "function", - "name": "format", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "Float", "name": "a", "type": "bytes32" }, - { - "internalType": "Float", - "name": "scientificMin", - "type": "bytes32" - }, - { - "internalType": "Float", - "name": "scientificMax", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function", - "name": "format", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "Float", "name": "a", "type": "bytes32" } - ], - "stateMutability": "pure", - "type": "function", - "name": "frac", - "outputs": [ - { "internalType": "Float", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [ - { "internalType": "uint256", "name": "value", "type": "uint256" }, - { "internalType": "uint8", "name": "decimals", "type": "uint8" } - ], - "stateMutability": "pure", - "type": "function", - "name": "fromFixedDecimalLossless", - "outputs": [ - { "internalType": "Float", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [ - { "internalType": "uint256", "name": "value", "type": "uint256" }, - { "internalType": "uint8", "name": "decimals", "type": "uint8" } - ], - "stateMutability": "pure", - "type": "function", - "name": "fromFixedDecimalLossy", - "outputs": [ - { "internalType": "Float", "name": "", "type": "bytes32" }, - { "internalType": "bool", "name": "", "type": "bool" } - ] - }, - { - "inputs": [ - { "internalType": "Float", "name": "a", "type": "bytes32" }, - { "internalType": "Float", "name": "b", "type": "bytes32" } - ], - "stateMutability": "pure", - "type": "function", - "name": "gt", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "Float", "name": "a", "type": "bytes32" }, - { "internalType": "Float", "name": "b", "type": "bytes32" } - ], - "stateMutability": "pure", - "type": "function", - "name": "gte", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "Float", "name": "a", "type": "bytes32" } - ], - "stateMutability": "pure", - "type": "function", - "name": "integer", - "outputs": [ - { "internalType": "Float", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [ - { "internalType": "Float", "name": "a", "type": "bytes32" } - ], - "stateMutability": "pure", - "type": "function", - "name": "inv", - "outputs": [ - { "internalType": "Float", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [ - { "internalType": "Float", "name": "a", "type": "bytes32" } - ], - "stateMutability": "pure", - "type": "function", - "name": "isZero", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "Float", "name": "a", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function", - "name": "log10", - "outputs": [ - { "internalType": "Float", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [ - { "internalType": "Float", "name": "a", "type": "bytes32" }, - { "internalType": "Float", "name": "b", "type": "bytes32" } - ], - "stateMutability": "pure", - "type": "function", - "name": "lt", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "Float", "name": "a", "type": "bytes32" }, - { "internalType": "Float", "name": "b", "type": "bytes32" } - ], - "stateMutability": "pure", - "type": "function", - "name": "lte", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "Float", "name": "a", "type": "bytes32" }, - { "internalType": "Float", "name": "b", "type": "bytes32" } - ], - "stateMutability": "pure", - "type": "function", - "name": "max", - "outputs": [ - { "internalType": "Float", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [], - "stateMutability": "pure", - "type": "function", - "name": "maxNegativeValue", - "outputs": [ - { "internalType": "Float", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [], - "stateMutability": "pure", - "type": "function", - "name": "maxPositiveValue", - "outputs": [ - { "internalType": "Float", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [ - { "internalType": "Float", "name": "a", "type": "bytes32" }, - { "internalType": "Float", "name": "b", "type": "bytes32" } - ], - "stateMutability": "pure", - "type": "function", - "name": "min", - "outputs": [ - { "internalType": "Float", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [], - "stateMutability": "pure", - "type": "function", - "name": "minNegativeValue", - "outputs": [ - { "internalType": "Float", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [], - "stateMutability": "pure", - "type": "function", - "name": "minPositiveValue", - "outputs": [ - { "internalType": "Float", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [ - { "internalType": "Float", "name": "a", "type": "bytes32" } - ], - "stateMutability": "pure", - "type": "function", - "name": "minus", - "outputs": [ - { "internalType": "Float", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [ - { "internalType": "Float", "name": "a", "type": "bytes32" }, - { "internalType": "Float", "name": "b", "type": "bytes32" } - ], - "stateMutability": "pure", - "type": "function", - "name": "mul", - "outputs": [ - { "internalType": "Float", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "str", "type": "string" } - ], - "stateMutability": "pure", - "type": "function", - "name": "parse", - "outputs": [ - { "internalType": "bytes4", "name": "", "type": "bytes4" }, - { "internalType": "Float", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [ - { "internalType": "Float", "name": "a", "type": "bytes32" }, - { "internalType": "Float", "name": "b", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function", - "name": "pow", - "outputs": [ - { "internalType": "Float", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [ - { "internalType": "Float", "name": "a", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function", - "name": "pow10", - "outputs": [ - { "internalType": "Float", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [ - { "internalType": "Float", "name": "a", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function", - "name": "sqrt", - "outputs": [ - { "internalType": "Float", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [ - { "internalType": "Float", "name": "a", "type": "bytes32" }, - { "internalType": "Float", "name": "b", "type": "bytes32" } - ], - "stateMutability": "pure", - "type": "function", - "name": "sub", - "outputs": [ - { "internalType": "Float", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [ - { "internalType": "Float", "name": "float", "type": "bytes32" }, - { "internalType": "uint8", "name": "decimals", "type": "uint8" } - ], - "stateMutability": "pure", - "type": "function", - "name": "toFixedDecimalLossless", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "Float", "name": "float", "type": "bytes32" }, - { "internalType": "uint8", "name": "decimals", "type": "uint8" } - ], - "stateMutability": "pure", - "type": "function", - "name": "toFixedDecimalLossy", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" }, - { "internalType": "bool", "name": "", "type": "bool" } - ] - }, - { - "inputs": [], - "stateMutability": "pure", - "type": "function", - "name": "zero", - "outputs": [ - { "internalType": "Float", "name": "", "type": "bytes32" } - ] - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "abs(bytes32)": { - "params": { "a": "The float to get the absolute value of." }, - "returns": { "_0": "The absolute value of the float." } - }, - "add(bytes32,bytes32)": { - "params": { - "a": "The first float to add.", - "b": "The second float to add." - }, - "returns": { "_0": "The sum of the two floats." } - }, - "ceil(bytes32)": { - "params": { "a": "The float to get the ceiling of." }, - "returns": { "_0": "The ceiled float." } - }, - "div(bytes32,bytes32)": { - "params": { - "a": "The dividend (numerator).", - "b": "The divisor (denominator)." - }, - "returns": { "_0": "The quotient of the two floats." } - }, - "e()": { - "returns": { - "_0": "The constant value of Euler's number as a Float." - } - }, - "eq(bytes32,bytes32)": { - "params": { - "a": "The first float to compare.", - "b": "The second float to compare." - }, - "returns": { - "_0": "True if the two floats are equal, false otherwise." - } - }, - "floor(bytes32)": { - "params": { "a": "The float to get the floor of." }, - "returns": { "_0": "The floored float." } - }, - "format(bytes32)": { - "params": { "a": "The float to format." }, - "returns": { "_0": "The string representation of the float." } - }, - "format(bytes32,bool)": { - "params": { - "a": "The float to format.", - "scientific": "Whether to format the float in scientific notation." - }, - "returns": { "_0": "The string representation of the float." } - }, - "format(bytes32,bytes32,bytes32)": { - "params": { - "a": "The float to format. The absolute value of `a` is used to determine if scientific notation is used, this allows negative numbers to be formatted consistently with their positive counterparts.", - "scientificMax": "The largest number that won't be formatted in scientific notation.", - "scientificMin": "The smallest number that won't be formatted in scientific notation." - }, - "returns": { "_0": "The string representation of the float." } - }, - "frac(bytes32)": { - "params": { "a": "The float to get the fractional part of." }, - "returns": { "_0": "The fractional part of the float." } - }, - "fromFixedDecimalLossless(uint256,uint8)": { - "params": { - "decimals": "The number of decimals in the fixed point representation. e.g. If 1e18 represents 1 this would be 18 decimals.", - "value": "The fixed point decimal value to convert." - }, - "returns": { - "_0": "float The Float struct containing the signed coefficient and exponent." - } - }, - "fromFixedDecimalLossy(uint256,uint8)": { - "params": { - "decimals": "The number of decimals in the fixed point representation. e.g. If 1e18 represents 1 this would be 18 decimals.", - "value": "The fixed point decimal value to convert." - }, - "returns": { - "_0": "float The Float struct containing the signed coefficient and exponent.", - "_1": "lossless True if the conversion was lossless, false otherwise." - } - }, - "gt(bytes32,bytes32)": { - "params": { - "a": "The first float to compare.", - "b": "The second float to compare." - }, - "returns": { - "_0": "True if the first float is greater than the second, false otherwise." - } - }, - "gte(bytes32,bytes32)": { - "params": { - "a": "The first float to compare.", - "b": "The second float to compare." - }, - "returns": { - "_0": "True if the first float is greater than or equal to the second, false otherwise." - } - }, - "integer(bytes32)": { - "params": { "a": "The float to get the integer part of." }, - "returns": { "_0": "The integer part of the float." } - }, - "inv(bytes32)": { - "params": { "a": "The float to invert." }, - "returns": { "_0": "The inverted float." } - }, - "isZero(bytes32)": { - "params": { "a": "The float to check." }, - "returns": { "_0": "True if the float is zero, false otherwise." } - }, - "log10(bytes32)": { - "params": { "a": "The float to take the logarithm of." }, - "returns": { "_0": "The logarithm of the float." } - }, - "lt(bytes32,bytes32)": { - "params": { - "a": "The first float to compare.", - "b": "The second float to compare." - }, - "returns": { - "_0": "True if the first float is less than the second, false otherwise." - } - }, - "lte(bytes32,bytes32)": { - "params": { - "a": "The first float to compare.", - "b": "The second float to compare." - }, - "returns": { - "_0": "True if the first float is less than or equal to the second, false otherwise." - } - }, - "max(bytes32,bytes32)": { - "params": { - "a": "The first float to compare.", - "b": "The second float to compare." - }, - "returns": { "_0": "The larger of the two floats." } - }, - "maxNegativeValue()": { - "returns": { "_0": "The maximum negative value of a Float." } - }, - "maxPositiveValue()": { - "returns": { "_0": "The maximum positive value of a Float." } - }, - "min(bytes32,bytes32)": { - "params": { - "a": "The first float to compare.", - "b": "The second float to compare." - }, - "returns": { "_0": "The smaller of the two floats." } - }, - "minNegativeValue()": { - "returns": { "_0": "The minimum negative value of a Float." } - }, - "minPositiveValue()": { - "returns": { "_0": "The minimum positive value of a Float." } - }, - "minus(bytes32)": { - "params": { "a": "The float to negate." }, - "returns": { "_0": "The negated float." } - }, - "mul(bytes32,bytes32)": { - "params": { - "a": "The first float to multiply.", - "b": "The second float to multiply." - }, - "returns": { "_0": "The product of the two floats." } - }, - "parse(string)": { - "params": { "str": "The string to parse." }, - "returns": { - "_0": "errorSelector The selector of the error if parsing failed. `0` if parsing succeeded.", - "_1": "parsed The parsed float. Caller MUST check `errorSelector` to determine if parsing succeeded." - } - }, - "pow(bytes32,bytes32)": { - "params": { "a": "The base float.", "b": "The exponent float." }, - "returns": { - "_0": "The result of raising the base float to the power of the exponent" - } - }, - "pow10(bytes32)": { - "params": { "a": "The exponent to raise 10 to." }, - "returns": { "_0": "The result of 10^a." } - }, - "sqrt(bytes32)": { - "params": { "a": "The float to take the square root of." }, - "returns": { "_0": "The square root of the float." } - }, - "sub(bytes32,bytes32)": { - "params": { - "a": "The float to subtract from.", - "b": "The float to subtract." - }, - "returns": { "_0": "The difference of the two floats." } - }, - "toFixedDecimalLossless(bytes32,uint8)": { - "params": { - "decimals": "The number of decimals in the fixed point representation. e.g. If 1e18 represents 1 this would be 18 decimals.", - "float": "The Float struct to convert." - }, - "returns": { "_0": "The fixed point decimal value as a uint256." } - }, - "toFixedDecimalLossy(bytes32,uint8)": { - "params": { - "decimals": "The number of decimals in the fixed point representation. e.g. If 1e18 represents 1 this would be 18 decimals.", - "float": "The Float struct to convert." - }, - "returns": { - "_0": "value The fixed point decimal value as a uint256.", - "_1": "lossless True if the conversion was lossless, false otherwise." - } - }, - "zero()": { - "returns": { - "_0": "The zero value of a Float in its maximized representation." - } - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": { - "FORMAT_DEFAULT_SCIENTIFIC_MAX()": { - "notice": "The default maximum value for scientific formatting. 1e9" - }, - "FORMAT_DEFAULT_SCIENTIFIC_MIN()": { - "notice": "The default minimum value for scientific formatting. 1e-4" - }, - "abs(bytes32)": { - "notice": "Exposes `LibDecimalFloat.abs` for offchain use." - }, - "add(bytes32,bytes32)": { - "notice": "Exposes `LibDecimalFloat.add` for offchain use." - }, - "ceil(bytes32)": { - "notice": "Exposes `LibDecimalFloat.ceil` for offchain use." - }, - "div(bytes32,bytes32)": { - "notice": "Exposes `LibDecimalFloat.div` for offchain use." - }, - "e()": { - "notice": "Exposes `LibDecimalFloat.FLOAT_E` for offchain use." - }, - "eq(bytes32,bytes32)": { - "notice": "Exposes `LibDecimalFloat.eq` for offchain use." - }, - "floor(bytes32)": { - "notice": "Exposes `LibDecimalFloat.floor` for offchain use." - }, - "format(bytes32)": { - "notice": "Exposes `format(Float, Float, Float)` for offchain use. Provides default scientific formatting." - }, - "format(bytes32,bool)": { - "notice": "Exposes `LibFormatDecimalFloat.toDecimalString` for offchain use. provides raw bool interface for custom scientific formatting." - }, - "format(bytes32,bytes32,bytes32)": { - "notice": "Exposes `LibFormatDecimalFloat.toDecimalString` for offchain use." - }, - "frac(bytes32)": { - "notice": "Exposes `LibDecimalFloat.frac` for offchain use." - }, - "fromFixedDecimalLossless(uint256,uint8)": { - "notice": "Exposes `LibDecimalFloat.fromFixedDecimalLosslessPacked` for offchain use." - }, - "fromFixedDecimalLossy(uint256,uint8)": { - "notice": "Exposes `LibDecimalFloat.fromFixedDecimalLossyPacked` for offchain use." - }, - "gt(bytes32,bytes32)": { - "notice": "Exposes `LibDecimalFloat.gt` for offchain use." - }, - "gte(bytes32,bytes32)": { - "notice": "Exposes `LibDecimalFloat.gte` for offchain use." - }, - "integer(bytes32)": { - "notice": "Exposes `LibDecimalFloat.integer` for offchain use." - }, - "inv(bytes32)": { - "notice": "Exposes `LibDecimalFloat.inv` for offchain use." - }, - "isZero(bytes32)": { - "notice": "Exposes `LibDecimalFloat.isZero` for offchain use." - }, - "log10(bytes32)": { - "notice": "Exposes `LibDecimalFloat.log10` for offchain use." - }, - "lt(bytes32,bytes32)": { - "notice": "Exposes `LibDecimalFloat.lt` for offchain use." - }, - "lte(bytes32,bytes32)": { - "notice": "Exposes `LibDecimalFloat.lte` for offchain use." - }, - "max(bytes32,bytes32)": { - "notice": "Exposes `LibDecimalFloat.max` for offchain use." - }, - "maxNegativeValue()": { - "notice": "Exposes `LibDecimalFloat.FLOAT_MAX_NEGATIVE_VALUE` for offchain use." - }, - "maxPositiveValue()": { - "notice": "Exposes `LibDecimalFloat.FLOAT_MAX_POSITIVE_VALUE` for offchain use." - }, - "min(bytes32,bytes32)": { - "notice": "Exposes `LibDecimalFloat.min` for offchain use." - }, - "minNegativeValue()": { - "notice": "Exposes `LibDecimalFloat.FLOAT_MIN_NEGATIVE_VALUE` for offchain use." - }, - "minPositiveValue()": { - "notice": "Exposes `LibDecimalFloat.FLOAT_MIN_POSITIVE_VALUE` for offchain use." - }, - "minus(bytes32)": { - "notice": "Exposes `LibDecimalFloat.minus` for offchain use." - }, - "mul(bytes32,bytes32)": { - "notice": "Exposes `LibDecimalFloat.mul` for offchain use." - }, - "parse(string)": { - "notice": "Exposes `LibParseDecimalFloat.parseDecimalFloat` for offchain use." - }, - "pow(bytes32,bytes32)": { - "notice": "Exposes `LibDecimalFloat.pow` for offchain use." - }, - "pow10(bytes32)": { - "notice": "Exposes `LibDecimalFloat.pow10` for offchain use." - }, - "sqrt(bytes32)": { - "notice": "Exposes `LibDecimalFloat.sqrt` for offchain use." - }, - "sub(bytes32,bytes32)": { - "notice": "Exposes `LibDecimalFloat.sub` for offchain use." - }, - "toFixedDecimalLossless(bytes32,uint8)": { - "notice": "Exposes `LibDecimalFloat.toFixedDecimalLossless` for offchain use." - }, - "toFixedDecimalLossy(bytes32,uint8)": { - "notice": "Exposes `LibDecimalFloat.toFixedDecimalLossy` for offchain use." - }, - "zero()": { - "notice": "Exposes `LibDecimalFloat.FLOAT_ZERO` for offchain use." - } - }, - "version": 1 - } - }, - "settings": { - "remappings": [ - "@openzeppelin-contracts-5.6.1/=dependencies/@openzeppelin-contracts-5.6.1/", - "forge-std-1.16.1/=dependencies/forge-std-1.16.1/", - "mut/=dependencies/rain-string-0.2.0/src/lib/mut/", - "parse/=dependencies/rain-string-0.2.0/src/lib/parse/", - "rain-datacontract-0.1.0/=dependencies/rain-datacontract-0.1.0/", - "rain-deploy-0.1.2/=dependencies/rain-deploy-0.1.2/", - "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/" - ], - "optimizer": { "enabled": true, "runs": 1000000 }, - "metadata": { "bytecodeHash": "none", "appendCBOR": false }, - "compilationTarget": { "src/concrete/DecimalFloat.sol": "DecimalFloat" }, - "evmVersion": "cancun", - "libraries": {} - }, - "sources": { - "dependencies/@openzeppelin-contracts-5.6.1/utils/Bytes.sol": { - "keccak256": "0xf80e4b96b6849936ea0fabd76cf81b13d7276295fddb1e1c07afb3ddf650b0ac", - "urls": [ - "bzz-raw://6430007255ac11c6e9c4331a418f3af52ff66fbbae959f645301d025b20aeb08", - "dweb:/ipfs/QmQE5fjmBBRw9ndnzJuC2uskYss1gbaR7JdazoCf1FGoBj" - ], - "license": "MIT" - }, - "dependencies/@openzeppelin-contracts-5.6.1/utils/Panic.sol": { - "keccak256": "0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a", - "urls": [ - "bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a", - "dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG" - ], - "license": "MIT" - }, - "dependencies/@openzeppelin-contracts-5.6.1/utils/Strings.sol": { - "keccak256": "0x1fdc2de9585ab0f1c417f02a873a2b6343cd64bb7ffec6b00ffa11a4a158d9e8", - "urls": [ - "bzz-raw://1ab223a3d969c6cd7610049431dd42740960c477e45878f5d8b54411f7a32bdc", - "dweb:/ipfs/QmWumhjvhpKcwx3vDPQninsNVTc3BGvqaihkQakFkQYpaS" - ], - "license": "MIT" - }, - "dependencies/@openzeppelin-contracts-5.6.1/utils/math/Math.sol": { - "keccak256": "0x59973a93b1f983f94e10529f46ca46544a9fec2b5f56fb1390bbe9e0dc79f857", - "urls": [ - "bzz-raw://c55ef8f0b9719790c2ae6f81d80a59ffb89f2f0abe6bc065585bd79edce058c5", - "dweb:/ipfs/QmNNmCbX9NjPXKqHJN8R1WC2rNeZSQrPZLd6FF6AKLyH5Y" - ], - "license": "MIT" - }, - "dependencies/@openzeppelin-contracts-5.6.1/utils/math/SafeCast.sol": { - "keccak256": "0xc8cae21c9ae4a46e5162ff9bf5b351d6fa6a6eba72d515f3bc1bdfeda7fdf083", - "urls": [ - "bzz-raw://ce830ebcf28e31643caba318996db3763c36d52cd0f23798ba83c135355d45e9", - "dweb:/ipfs/QmdGPcvptHN7UBCbUYBbRX3hiRVRFLRwno8b4uga6uFNif" - ], - "license": "MIT" - }, - "dependencies/@openzeppelin-contracts-5.6.1/utils/math/SignedMath.sol": { - "keccak256": "0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3", - "urls": [ - "bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03", - "dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ" - ], - "license": "MIT" - }, - "dependencies/rain-string-0.2.0/src/error/ErrParse.sol": { - "keccak256": "0x7a69236ad67e39c20f6ade7973ec551c9a5bb5db4671c8afa95b80f35a996497", - "urls": [ - "bzz-raw://4731c6ea05b4e820814380dbbd6dac14f5778a1e9194b8992148cf97a99ffbb2", - "dweb:/ipfs/QmUMnKNt2zQ42fjS4fpLqodXytiffVFzaKupAm8rNsrYVo" - ], - "license": "LicenseRef-DCL-1.0" - }, - "dependencies/rain-string-0.2.0/src/lib/parse/LibParseCMask.sol": { - "keccak256": "0x91e798a6f71aafbd4743720eaa38a7f16f74c6c0ab2992e7e4982979e9df539a", - "urls": [ - "bzz-raw://4782e62e0e5a5fbc7d6c757dcc90347d7ad064f25372a6c471ffa968e12b91d7", - "dweb:/ipfs/QmPohMsVTjm19gxYwxgAsTKJQRjkK2J1Pyah63nCtYBBnt" - ], - "license": "LicenseRef-DCL-1.0" - }, - "dependencies/rain-string-0.2.0/src/lib/parse/LibParseChar.sol": { - "keccak256": "0x66c401d784e9461f709116441de3707685e08438cd83553db28fe8caf0e97238", - "urls": [ - "bzz-raw://e6027d0f9d558953686f6eb78ca0b2f2e7d9d38e0be6d1435ffaaa4b90919593", - "dweb:/ipfs/QmQXDMTzmJrst2a4kHkcfjSsEdnPc4ikQs7VfGbCfe9QCc" - ], - "license": "LicenseRef-DCL-1.0" - }, - "dependencies/rain-string-0.2.0/src/lib/parse/LibParseDecimal.sol": { - "keccak256": "0x72ccc4d7e0a1245897511e1efc15ddc80d423a8eb956249be7940a8e8f4e99fe", - "urls": [ - "bzz-raw://3ca57acd6a7cbe16f2c03aa5a6e81ec7af1ad44078924358578560a32aead7c0", - "dweb:/ipfs/QmNukyUMS4JrzNHAYcpLbtYsD5CwYPEjfAaADv6qMZmqs6" - ], - "license": "LicenseRef-DCL-1.0" - }, - "src/concrete/DecimalFloat.sol": { - "keccak256": "0x6326a6b5ffef0708b84712c0b891dfc7f2d88c38191628da1f40933951f2683b", - "urls": [ - "bzz-raw://ad99eda6cc266d5d160439700d3c89a487e8e31d51538f2ad83435a1aac9f3ae", - "dweb:/ipfs/QmarsuZkgqG7jT9mYBh1VKNvjD5ZsVtJJTiRGbfMQAY669" - ], - "license": "LicenseRef-DCL-1.0" - }, - "src/error/ErrDecimalFloat.sol": { - "keccak256": "0x53825ff4d1af4981100de46bd7536c611625fe7930b5c21921838cfed3a92243", - "urls": [ - "bzz-raw://961197f4c7b6d560f71f67892bfd5b64300be0f0fdb20162058938567653643e", - "dweb:/ipfs/QmTJzmA5CEkmYrXJ2MHnfQ3wGm1Qj6xE1vNaqAqgUpEnvA" - ], - "license": "LicenseRef-DCL-1.0" - }, - "src/error/ErrFormat.sol": { - "keccak256": "0xc760cb6018291753e7408d55d12d5e66c116f9750dc241bbc201f3b46ae33aa7", - "urls": [ - "bzz-raw://cbc81bb7c26c8503926b579f978902bcc3227839bee04bd3500cc924d142d28e", - "dweb:/ipfs/QmXqMuqBCpckD1EnsBjweyLdRZxpvC2xSP9FWBZFh2vztR" - ], - "license": "LicenseRef-DCL-1.0" - }, - "src/error/ErrParse.sol": { - "keccak256": "0x7fc9fe7421d78306d252d2853fd1be943d9cbd12ff7a9c8c3f286a8164bfe357", - "urls": [ - "bzz-raw://7b4c434d01b53788968d185683d9633afa26d95396b1e91337a53ccaab0d44ab", - "dweb:/ipfs/QmQHmVjR37wwrCskiQviwkg7WkeBpr9uPddjuDxqzANXeV" - ], - "license": "LicenseRef-DCL-1.0" - }, - "src/generated/LogTables.pointers.sol": { - "keccak256": "0x2325d92e3e248350a79f163fcb8738056ae4240b6a77f759ff5fcbf7b381f5ae", - "urls": [ - "bzz-raw://9a52674114518573de7d184094b266bc2b5208953086f8ec35a494f048deefbb", - "dweb:/ipfs/QmTjuj1R9k4pFMBVpX6RcWG87Rdh9pRTZVHYo93SzBfmsH" - ], - "license": "LicenseRef-DCL-1.0" - }, - "src/lib/LibDecimalFloat.sol": { - "keccak256": "0x59d2dad4b7e861ed835a79c61ae42b4b0d628f9c578f3bb3ecd7796ed530f196", - "urls": [ - "bzz-raw://e565148a37f06299de3b6bcb3385ea0336f65c6c02c9ebfbc6f227f4e56d1c03", - "dweb:/ipfs/Qma6UNZifZc8zsf7J6B87CdCXhiCR6Zisyg9czsfaji6yY" - ], - "license": "LicenseRef-DCL-1.0" - }, - "src/lib/deploy/LibDecimalFloatDeploy.sol": { - "keccak256": "0x79f59754c234e55420359efaa9af6ec851fadf8dfaecda6860c1ef99abcf1e64", - "urls": [ - "bzz-raw://8303dde773c7c613981011fe9ee5d976338b3dab9c66cd67516a82b094596343", - "dweb:/ipfs/QmQnkeaReEwkKcFMvegAuuBoF2WyirRQmQG9CjKfdhQKnZ" - ], - "license": "LicenseRef-DCL-1.0" - }, - "src/lib/format/LibFormatDecimalFloat.sol": { - "keccak256": "0x5aac6382e7f7040e68600333c1b00b0aedb3edb6bced84b63783f6d88fe0b4f0", - "urls": [ - "bzz-raw://e96d30e34e1fa2cc4eb574ded30c0f6f93929dcc19cb571f555ca8c5ac32eaa7", - "dweb:/ipfs/QmRRtk84AqEdQrRXfeTzVUAbAktJTZ92iTLqjocQV4PDx7" - ], - "license": "LicenseRef-DCL-1.0" - }, - "src/lib/implementation/LibDecimalFloatImplementation.sol": { - "keccak256": "0x47d0eeb542875548689465407162a19e4a21fb4591af5bb48d5758c0d1b93634", - "urls": [ - "bzz-raw://631efb796ff17f277804f8a32df7d28630c2ae5300e7d74c37aa8ed1f86b5092", - "dweb:/ipfs/QmSfmMGQyxKYxu8UrWDEtuCggQ9HtFJy5cbMsYLPZbcTZ7" - ], - "license": "LicenseRef-DCL-1.0" - }, - "src/lib/parse/LibParseDecimalFloat.sol": { - "keccak256": "0x703d2d37d8a14639a3eb2dcd61601b36552027e16b4e8414befe51f2d0b9ed38", - "urls": [ - "bzz-raw://53fa45503e115a322a701a1289c5b5fcbe68090c83e0635af77d275d123f09f0", - "dweb:/ipfs/QmTBtz8uPLYXrTue9SmHBVdgjpFJYUU41Z48PAgu1nXafn" - ], - "license": "LicenseRef-DCL-1.0" - }, - "src/lib/table/LibLogTable.sol": { - "keccak256": "0xccd2dea54cfb708c01e7e8e88c089742bbab18f5783be4632311fb4923d44c88", - "urls": [ - "bzz-raw://f45fb78c16b5d66d56ba0e78acdb0ca5d315eb05efa2cd7a81e191aabe7aec52", - "dweb:/ipfs/QmQJ3TFFxTMu4HZ4qnjgmdmSNhGZLQRdCnSqAipEF1up1f" - ], - "license": "LicenseRef-DCL-1.0" - } - }, - "version": 1 - }, - "id": 37 -} +{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"FORMAT_DEFAULT_SCIENTIFIC_MAX","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"view"},{"type":"function","name":"FORMAT_DEFAULT_SCIENTIFIC_MIN","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"view"},{"type":"function","name":"abs","inputs":[{"name":"a","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"add","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"b","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"ceil","inputs":[{"name":"a","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"div","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"b","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"e","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"eq","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"b","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"floor","inputs":[{"name":"a","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"format","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"scientific","type":"bool","internalType":"bool"}],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"format","inputs":[{"name":"a","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"format","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"scientificMin","type":"bytes32","internalType":"Float"},{"name":"scientificMax","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"frac","inputs":[{"name":"a","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"fromFixedDecimalLossless","inputs":[{"name":"value","type":"uint256","internalType":"uint256"},{"name":"decimals","type":"uint8","internalType":"uint8"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"fromFixedDecimalLossy","inputs":[{"name":"value","type":"uint256","internalType":"uint256"},{"name":"decimals","type":"uint8","internalType":"uint8"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"},{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"gt","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"b","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"gte","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"b","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"integer","inputs":[{"name":"a","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"inv","inputs":[{"name":"a","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"isZero","inputs":[{"name":"a","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"log10","inputs":[{"name":"a","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"view"},{"type":"function","name":"lt","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"b","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"lte","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"b","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"max","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"b","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"maxNegativeValue","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"maxPositiveValue","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"min","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"b","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"minNegativeValue","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"minPositiveValue","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"minus","inputs":[{"name":"a","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"mul","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"b","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"parse","inputs":[{"name":"str","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"},{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"pow","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"b","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"view"},{"type":"function","name":"pow10","inputs":[{"name":"a","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"view"},{"type":"function","name":"sqrt","inputs":[{"name":"a","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"view"},{"type":"function","name":"sub","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"b","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"toFixedDecimalLossless","inputs":[{"name":"float","type":"bytes32","internalType":"Float"},{"name":"decimals","type":"uint8","internalType":"uint8"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"toFixedDecimalLossy","inputs":[{"name":"float","type":"bytes32","internalType":"Float"},{"name":"decimals","type":"uint8","internalType":"uint8"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"zero","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"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":"Log10Negative","inputs":[{"name":"signedCoefficient","type":"int256","internalType":"int256"},{"name":"exponent","type":"int256","internalType":"int256"}]},{"type":"error","name":"Log10Zero","inputs":[]},{"type":"error","name":"LogTablesNotDeployed","inputs":[{"name":"tablesAddress","type":"address","internalType":"address"},{"name":"expectedCodehash","type":"bytes32","internalType":"bytes32"},{"name":"actualCodehash","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"LossyConversionFromFloat","inputs":[{"name":"signedCoefficient","type":"int256","internalType":"int256"},{"name":"exponent","type":"int256","internalType":"int256"}]},{"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":"MulDivOverflow","inputs":[{"name":"x","type":"uint256","internalType":"uint256"},{"name":"y","type":"uint256","internalType":"uint256"},{"name":"denominator","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"NegativeFixedDecimalConversion","inputs":[{"name":"signedCoefficient","type":"int256","internalType":"int256"},{"name":"exponent","type":"int256","internalType":"int256"}]},{"type":"error","name":"PowNegativeBase","inputs":[{"name":"signedCoefficient","type":"int256","internalType":"int256"},{"name":"exponent","type":"int256","internalType":"int256"}]},{"type":"error","name":"ScientificMinNotLessThanMax","inputs":[{"name":"scientificMin","type":"bytes32","internalType":"Float"},{"name":"scientificMax","type":"bytes32","internalType":"Float"}]},{"type":"error","name":"UnformatableExponent","inputs":[{"name":"exponent","type":"int256","internalType":"int256"}]},{"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":"ZeroNegativePower","inputs":[{"name":"b","type":"bytes32","internalType":"Float"}]},{"type":"error","name":"ZeroStringStartPointer","inputs":[]}],"bytecode":{"object":"0x6080604052348015600e575f80fd5b5060156019565b60b8565b73c51a14251b0dcf0ae24a96b7153991378938f5f53f7f2573004ac3a9ee7fc8d73654d76386f1b6b99e34cdf86a689c4691e47143420f811460b557604051630912d0ff60e31b815273c51a14251b0dcf0ae24a96b7153991378938f5f560048201527f2573004ac3a9ee7fc8d73654d76386f1b6b99e34cdf86a689c4691e47143420f60248201526044810182905260640160405180910390fd5b50565b614bb7806100c55f395ff3fe608060405234801561000f575f80fd5b506004361061029d575f3560e01c806381f7e2f511610171578063cde72ef3116100d2578063dd64691711610088578063e5526ecd1161006e578063e5526ecd1461062e578063e75f991f14610641578063ffae15ba14610654575f80fd5b8063dd64691714610608578063e0db58881461061b575f80fd5b8063d1de592a116100b8578063d1de592a146105bb578063d35273a7146105ce578063d3d6ffa8146105f5575f80fd5b8063cde72ef314610582578063d102b4d3146105a8575f80fd5b8063a19684b711610127578063bc1b392d1161010d578063bc1b392d1461050b578063bc62d8d814610511578063cb09682b1461055c575f80fd5b8063a19684b7146104d2578063a90d041a146104f8575f80fd5b806396ce1ec71161015757806396ce1ec7146104885780639b4afd991461049b578063a100a3d9146104bf575f80fd5b806381f7e2f5146104625780638dc2980714610475575f80fd5b80633447c0301161021b5780635ca0e7a4116101d1578063719cd99d116101b7578063719cd99d1461042957806373bfb2831461043c57806381a822721461044f575f80fd5b80635ca0e7a4146103f0578063602c35fc14610403575f80fd5b80633b3bd868116102015780633b3bd868146103b757806341aa0080146103ca5780635b23771d146103dd575f80fd5b80633447c03014610374578063371493ce14610397575f80fd5b80631ee62f111161027057806328fa1f011161025657806328fa1f011461033b5780633004fa411461034e5780633029740014610361575f80fd5b80631ee62f11146103155780632538835014610328575f80fd5b806304327dc5146102a1578063078b665b146102c75780630b6429bc146102da578063146e82ad14610302575b5f80fd5b6102b46102af36600461452f565b61067a565b6040519081526020015b60405180910390f35b6102b46102d5366004614546565b61068a565b6102ed6102e8366004614576565b61069c565b604080519283529015156020830152016102be565b6102b461031036600461452f565b6106b4565b6102b461032336600461452f565b6106d3565b6102b461033636600461452f565b6106f2565b6102b461034936600461452f565b610711565b6102b461035c366004614546565b61071b565b6102b461036f366004614546565b61073b565b610387610382366004614546565b610746565b60405190151581526020016102be565b6103aa6103a53660046145a0565b610751565b6040516102be91906145d2565b6102b46103c5366004614576565b61075d565b6102b46103d8366004614546565b610768565b6102b46103eb366004614576565b610773565b6102b46103fe36600461452f565b61077e565b7f80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff6102b4565b6102b461043736600461452f565b610788565b61038761044a366004614546565b610792565b6102b461045d36600461452f565b61079d565b610387610470366004614546565b6107a7565b610387610483366004614546565b6107b2565b6102b4610496366004614546565b6107bd565b6102b47c090000000000000000000000000000000000000000000000000000000181565b6103aa6104cd36600461452f565b6107c8565b7f80000000000000000000000000000000000000000000000000000000000000016102b4565b6102b4610506366004614546565b610812565b5f6102b4565b61052461051f366004614652565b61081d565b604080517fffffffff0000000000000000000000000000000000000000000000000000000090931683526020830191909152016102be565b7f7fffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffff6102b4565b7f7fffffff800000000000000000000000000000000000000000000000000000006102b4565b6103876105b6366004614546565b610836565b6102b46105c9366004614546565b610841565b6102b47ffffffffc0000000000000000000000000000000000000000000000000000000181565b6102b461060336600461452f565b61084c565b61038761061636600461452f565b610856565b6102b461062936600461452f565b61087c565b6103aa61063c36600461471b565b610886565b6102ed61064f366004614576565b61090f565b7fffffffbe19cfc6ef4f44cf88f14500d013df534fcaad48fca1d5ca47bea26fcc6102b4565b5f6106848261091b565b92915050565b5f6106958383610967565b9392505050565b5f806106a88484610983565b915091505b9250929050565b5f6106848273c51a14251b0dcf0ae24a96b7153991378938f5f56109c4565b5f6106848273c51a14251b0dcf0ae24a96b7153991378938f5f56109f0565b5f6106848273c51a14251b0dcf0ae24a96b7153991378938f5f5610a3e565b5f61068482610a71565b5f610695838373c51a14251b0dcf0ae24a96b7153991378938f5f5610ab2565b5f6106958383610d0d565b5f6106958383610d70565b60606106958383610dbe565b5f6106958383610e51565b5f6106958383610e6c565b5f6106958383610eb1565b5f61068482610ee4565b5f61068482610fa6565b5f6106958383611052565b5f610684826110a2565b5f61069583836110e7565b5f6106958383611137565b5f6106958383611186565b6060610684827ffffffffc000000000000000000000000000000000000000000000000000000017c0900000000000000000000000000000000000000000000000000000001610886565b5f61069583836111cb565b5f805f8061082a856111d6565b90969095509350505050565b5f61069583836112c4565b5f6106958383611313565b5f61068482611358565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff821615610684565b5f6106848261138a565b606061089283836112c4565b6108d7576040517f3be5bf9400000000000000000000000000000000000000000000000000000000815260048101849052602481018390526044015b60405180910390fd5b5f6108e1856110a2565b9050610906856108f183876112c4565b8061090157506109018386611137565b610dbe565b95945050505050565b5f806106a884846113cb565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d61094d828261140b565b90925090505f61095d8383611459565b5095945050505050565b5f6109728383611137565b61097c5781610695565b5090919050565b5f807bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8416601b0b60e085901d6109b782828761155f565b9350935050509250929050565b5f610695837fffffffff0000000000000000000000000000000000000000000000000000000584610ab2565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d610a238483836116ae565b90925090505f610a338383611459565b509695505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d610a2384838361181f565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d82610aa48383611b54565b9150505f610a338284611459565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff848116601b0b9060e086901d908516610aef5750600191506106959050565b5f8213610b8857815f03610b4c57610b07855f6112c4565b15610b41576040517f8be82972000000000000000000000000000000000000000000000000000000008152600481018690526024016108ce565b505f91506106959050565b6040517fcceba0f100000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016108ce565b610b93856001610d70565b8015610ba45750610ba4865f611137565b15610bb3578592505050610695565b610bbd855f6112c4565b15610be657610bdd610bce8761091b565b610bd787611358565b86610ab2565b92505050610695565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8516601b0b60e086901d5f80610c198484611b54565b915091505f610c2983855f611bbc565b905060015f8080610c608f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b9160e09190911d90565b915091505b60018510610ca75784600116600103610c8a57610c8484848484611cd3565b90945092505b600185901c9450610c9d82828484611cd3565b9092509050610c65565b5f80610cb48f8e8e61181f565b91509150610cc482828a8d611cd3565b9092509050610cd48f83836116ae565b9092509050610ce582828888611cd3565b90925090505f610cf58383611459565b509e5050505050505050505050505050509392505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686611df2565b915091505f610d618383611459565b509a9950505050505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d610db384848484612416565b979650505050505050565b60607bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d5f829003610e2e576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525092505050610684565b8315610e4757610e3e828261242d565b92505050610684565b61090682826126fd565b5f805f610e5e8585612e64565b915091506109068282612ec6565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686612f20565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d610906828286612f4a565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828112610f1b57509192915050565b5f80610f278484611b54565b915091505f84128015610f3957508015155b15610f8f57610f8a82847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4612f20565b935091505b5f610f9a8385611459565b50979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828112610fdd57509192915050565b5f80610fe98484611b54565b91509150805f03610ffe575093949350505050565b5f811315610f8f57610f8a82847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4612fa6565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d611095848484846130d6565b1315979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828212156110dc5761094d82826131aa565b5f61095d8383611459565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d61112a848484846130d6565b1215979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d61117a848484846130d6565b12979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686611cd3565b5f61097283836112c4565b80515f908190602084810191850101828080806111f3868661324d565b929650909450925090507fffffffff0000000000000000000000000000000000000000000000000000000084165f036112b557848303611285575f806112398484611459565b915091508061127457507f32b8b8be000000000000000000000000000000000000000000000000000000009a5f9a5098505050505050505050565b505f9a909950975050505050505050565b507fad384e8700000000000000000000000000000000000000000000000000000000985f98509650505050505050565b5091975f975095505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d611307848484846130d6565b13979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686612fa6565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d61094d82826131aa565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d826113bd8383611b54565b5090505f610a338284611459565b5f805f805f6113da87876136ec565b9250925092505f806113ec8585611459565b91509150818380156113fb5750815b9650965050505050509250929050565b5f806106a87f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb48686611df2565b5f601b83900b83148383826114bd577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561149d57620186a0860595506005850194505b8586601b0b146114b857600a8605955084600101945061149d565b6114d3565b855f036114d357505f9250600191506106ad9050565b848560030b1461152f575f8512156114f357505f92508291506106ad9050565b6040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016108ce565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f8512156115a5576040517f4a7d166b00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016108ce565b845f036115b757505f905060016116a6565b8460ff8416850185811215611602576040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101889052602481018790526044016108ce565b5f805f83121561166c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb3831215611643575f8095509550505050506116a6565b825f03600a0a915081848161165a5761165a614744565b04955050840290911491506116a69050565b5f83131561169b5761167f83600a6148bc565b915061168b82856148c7565b9550600194506116a69350505050565b509193506001925050505b935093915050565b5f805f8412156116ea576116c284846131aa565b90945092506116d28585856116ae565b90945092506116e1848461140b565b915091506116a6565b5f806116f68686611b54565b9092509050845f80806117098585613748565b9194509250905061270d6127106117216001826148de565b8514611738576117328d8686613837565b90925090505b83156117c3575f61174a866001614904565b90505b80848583028161175f5761175f614744565b051461177657600a84059350600a8805975061174d565b6117b7611783858861492b565b8961178e878561492b565b8f87877ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6138f0565b909d509b506117ea9050565b819b507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc9a505b5050505050866117fb84835f611bbc565b611806886001614904565b6118109190614904565b94509450505050935093915050565b5f80838361182d828261398d565b90965094505f86136118ae57855f03611872576040517f561fc7b500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5d3fd4db00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016108ce565b5050837f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000036118ec576118e283604c614904565b5f915091506116a6565b7f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000008412158061193b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb561195d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb45b5f0b8412611b18575f805f805f8561197657604b611979565b604c5b611983908a614904565b90505f80876119b0577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000006119d1565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca0000000000000000005b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff169050808c81611a0357611a03614744565b05818102955090850193507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18019050611a3c8c826139e3565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000000295508594508a8414611ac8576123278114611aa357611a7e8c826001016139e3565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000002611ac5565b7f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000005b94505b50611af8838b848c89897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb46138f0565b909a509850611b098a8a835f612fa6565b975097505050505050506116a6565b611b22858561140b565b9095509350611b3286868661181f565b9095509350611b4185856131aa565b92509250506116a6565b50935093915050565b5f805f8312611b6757508290505f6106ad565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4831215611b9957505f9050826106ad565b5f839003600a0a808581611baf57611baf614744565b0794859003959350505050565b5f818303611bcb575082610695565b82821315611c0e57828203604c811380611be557505f8113155b15611bf3575f915050610695565b80600a0a8581611c0557611c05614744565b05915050610695565b818303604c811380611c2057505f8113155b15611c68576040517f1d5d6d100000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490526064016108ce565b600a81900a85810286828281611c8057611c80614744565b0514611cc9576040517f1d5d6d100000000000000000000000000000000000000000000000000000000081526004810188905260248101879052604481018690526064016108ce565b9250610695915050565b5f8085158415178015611ceb575f92505f9150611de8565b611cf58487614904565b91505f611d0188613a6a565b90505f611d0d87613a6a565b90505f611d1a8383613ad0565b5090505f6f0785ee10d5da46d900f436a000000000821115611d4f576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a7640000821115611d7057670de0b6b3a7640000820491506012015b633b9aca00821115611d8957633b9aca00820491506009015b612710821115611d9e57612710820491506004015b8115611db257600a82049150600101611d9e565b611dbc8187614904565b9550611dde8b8a611dd88787611dd387600a6148bc565b613b0b565b89613bf0565b9097509550505050505b5094509492505050565b5f80835f03611e37576040517f7a97930f00000000000000000000000000000000000000000000000000000000815260048101879052602481018690526044016108ce565b855f03611e4857505f90508061240d565b5f805f80611e568a8a613cf7565b919b5099509150611e678888613cf7565b919950975090505f611e788b613a6a565b90505f611e848a613a6a565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c818310156122a1578415611ee257507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000009050604b612260565b6f4b3b4ca85a86c47a098a22400000000083101561200e57678ac7230489e80000831015611f72576402540be400831015611f4057620186a0831015611f305750620186a0905060056121e9565b506402540be4009050600a6121e9565b655af3107a4000831015611f5f5750655af3107a40009050600e6121e9565b50678ac7230489e80000905060136121e9565b6b204fce5e3e25026110000000831015611fc45769152d02c7e14af6800000831015611fad575069152d02c7e14af6800000905060176121e9565b506b204fce5e3e250261100000009050601c6121e9565b6d314dc6448d9338c15b0a00000000831015611ff357506d314dc6448d9338c15b0a00000000905060216121e9565b506f4b3b4ca85a86c47a098a224000000000905060266121e9565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156121065773af298d050e4395d69670b12b7f410000000000008310156120a1577172cb5bd86321e38cb6ce6682e8000000000083101561208257507172cb5bd86321e38cb6ce6682e800000000009050602b6121e9565b5073af298d050e4395d69670b12b7f41000000000000905060306121e9565b76010b46c6cdd6e3e0828f4db456ff0c8ea00000000000008310156120e2575076010b46c6cdd6e3e0828f4db456ff0c8ea0000000000000905060356121e9565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a6121e9565b7c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000083101561219c577a026e4d30eccc3215dd8f3157d27e23acbdcfe6800000000000000083101561217457507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f6121e9565b507c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000905060446121e9565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca0000000000000000008310156121e957507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b81831161221d57600a820491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016121e9565b815f03612260576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018d9052602481018c90526044016108ce565b856122a1576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018f9052602481018e90526044016108ce565b807f8000000000000000000000000000000000000000000000000000000000000000018d126122d457808d039c50612347565b7f80000000000000000000000000000000000000000000000000000000000000009c90038c015f81131561234757807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038b1361233457998a0199612347565b5f8099509950505050505050505061240d565b5f808e12801561235657505f8c135b15612393577f80000000000000000000000000000000000000000000000000000000000000008e01808d1361238b575f61238f565b808d035b9150505b8b818f010397506123b08f8e6123aa888789613b0b565b8b613bf0565b90995097505f8113156123fa57604c8113156123da575f809a509a5050505050505050505061240d565b80600a0a89816123ec576123ec614744565b059850885f036123fa575f97505b5096985094965061240d95505050505050565b94509492505050565b5f612423858585856130d6565b1495945050505050565b6060612439838361398d565b90935091505f8061246a7f161bcca7119915b50764b4abe86529797775a5f171951000000000000000000086614976565b1561249a57507f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000009050604c6124c1565b507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000009050604b5b5f6124cc8387614976565b90505f6124d984886149dd565b90505f808312156124f3575060016124f0836149f0565b92505b5f82121561250a57506001612507826149f0565b91505b60408051602081019091525f81528215612613575f8061252b600a89614a20565b90505b6125388186614976565b5f0361255d57612549600a82614a20565b90508161255581614a33565b92505061252e565b60408051602081019091525f8082525b838110156125be57816040516020016125869190614a81565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052915060010161256d565b505b6125cb600a876149dd565b5f036125e3576125dc600a87614976565b95506125c0565b806125ed87613f98565b6040516020016125fe929190614ab9565b60405160208183030381529060405293505050505b5f61261d85613f98565b90505f61262a878b614904565b90505f81156126605761263c82613f98565b60405160200161264c9190614afb565b604051602081830303815290604052612670565b60405180602001604052805f8152505b90505f8561268c5760405180602001604052805f8152506126c3565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b9050808486846040516020016126dc9493929190614b2c565b6040516020818303038152906040529a505050505050505050505092915050565b60606103e882138061271857506127156103e86149f0565b82125b15612752576040517fe44c72b0000000000000000000000000000000000000000000000000000000008152600481018390526024016108ce565b5f80841290811561276d57612766856149f0565b9050612770565b50835b5f61277a82614024565b80519091505f5b81811080156127fd57508281612798600185614b56565b6127a29190614b56565b815181106127b2576127b2614b69565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f3000000000000000000000000000000000000000000000000000000000000000145b15612814578061280c81614a33565b915050612781565b5f61281f8284614b56565b90505f61282c838a614904565b90505f876128485760405180602001604052805f81525061287f565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b90505f82126129f957815f6128948286614b96565b67ffffffffffffffff8111156128ac576128ac614625565b6040519080825280601f01601f1916602001820160405280156128d6576020820181803683370190505b5090505f5b85811015612948578881815181106128f5576128f5614b69565b602001015160f81c60f81b82828151811061291257612912614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053506001016128db565b505f5b828110156129c5577f30000000000000000000000000000000000000000000000000000000000000008261297f8389614b96565b8151811061298f5761298f614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535060010161294b565b5082816040516020016129d9929190614ba9565b6040516020818303038152906040529a5050505050505050505050610684565b5f612a03836149f0565b905080841115612c1a575f612a188286614b56565b90505f612a26866001614b96565b67ffffffffffffffff811115612a3e57612a3e614625565b6040519080825280601f01601f191660200182016040528015612a68576020820181803683370190505b5090505f5b82811015612ada57898181518110612a8757612a87614b69565b602001015160f81c60f81b828281518110612aa457612aa4614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612a6d565b507f2e00000000000000000000000000000000000000000000000000000000000000818381518110612b0e57612b0e614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5b83811015612be55789612b518285614b96565b81518110612b6157612b61614b69565b01602001517fff00000000000000000000000000000000000000000000000000000000000000168282612b95866001614b96565b612b9f9190614b96565b81518110612baf57612baf614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612b3e565b508381604051602001612bf9929190614ba9565b6040516020818303038152906040529b505050505050505050505050610684565b5f612c258583614b56565b90505f85612c34836002614b96565b612c3e9190614b96565b67ffffffffffffffff811115612c5657612c56614625565b6040519080825280601f01601f191660200182016040528015612c80576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f81518110612cb657612cb6614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f2e0000000000000000000000000000000000000000000000000000000000000081600181518110612d1857612d18614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5b82811015612dc3577f300000000000000000000000000000000000000000000000000000000000000082612d7d836002614b96565b81518110612d8d57612d8d614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612d48565b505f5b86811015612be557898181518110612de057612de0614b69565b01602001517fff00000000000000000000000000000000000000000000000000000000000000168282612e14866002614b96565b612e1e9190614b96565b81518110612e2e57612e2e614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612dc6565b5f805f805f612e7387876136ec565b92509250925080612eba576040517fc471796600000000000000000000000000000000000000000000000000000000815260048101849052602481018390526044016108ce565b50909590945092505050565b5f805f612ed38585611459565b9150915080612f18576040517f22c9f7bb00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016108ce565b509392505050565b5f80612f2c84846131aa565b9094509250612f3d86868686612fa6565b9150915094509492505050565b5f805f612f5886868661155f565b9150915080612f9d576040517f05e4767800000000000000000000000000000000000000000000000000000000815260048101879052602481018690526044016108ce565b50949350505050565b5f8085158415178015612fd257865f03612fc6578484925092505061240d565b8686925092505061240d565b612fdc878761398d565b9097509550612feb858561398d565b909550935085841315612fff579395929492935b838603604c81111561301857878793509350505061240d565b80600a0a868161302a5761302a614744565b0595505086850180881860ff90811c151589881890911c151680156130c557877f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff036130ac576040517fd556b111000000000000000000000000000000000000000000000000000000008152600481018a9052602481018990526044016108ce565b600a9687900596909805860197600197909701966130c9565b8198505b5096979596505050505050565b5f80851584151781871282861218178584141780156130fb578685925092505061240d565b505f8584131561310f575092949193919260015b8386035f8112604c8213178015613142578215613134575f899450945050505061240d565b885f9450945050505061240d565b600a82900a8981028a82828161315a5761315a614744565b0514613186578415613176575f8b96509650505050505061240d565b8a5f96509650505050505061240d565b841561319b57889650945061240d9350505050565b955087945061240d9350505050565b5f807f80000000000000000000000000000000000000000000000000000000000000008403613243577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8303613236576040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101859052602481018490526044016108ce565b600a840593508260010192505b50505f9190910391565b5f8281806132628386652000000000006140e0565b9250858314158361327c81886703ff0000000000006140e0565b94508085036132b657507f34bd20690000000000000000000000000000000000000000000000000000000094505f92508291506136e39050565b5f806132c28a88614109565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613300575095505f93508392506136e3915050565b86519095506540000000000060015f9290921a9190911b16151588871016915050801561358f57506001909301925f8461334381896703ff0000000000006140e0565b955080860361337e57507f7bfa48af0000000000000000000000000000000000000000000000000000000095505f93508392506136e3915050565b855b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018051908a1160015f9290921a9190911b6601000000000000161515166001036133ed577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613380565b818114613444575f806134008484614109565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613440575097505f95508594506136e39350505050565b9350505b5f83121561347f57507f7bfa48af0000000000000000000000000000000000000000000000000000000096505f94508493506136e392505050565b831561348b57825f0392505b80820394505f8513156134cb57507f013b2aaa0000000000000000000000000000000000000000000000000000000096505f94508493506136e392505050565b855f036134da5782955061358c565b5f859003604381111561351b57507f32b8b8be0000000000000000000000000000000000000000000000000000000097505f95508594506136e39350505050565b600a0a8681025f8883838161353257613532614744565b0514159050601b82900b82141581806135485750805b1561358457507f32b8b8be000000000000000000000000000000000000000000000000000000009a505f98508897506136e39650505050505050565b505084019650505b50505b84516c2000000020000000000000000060015f9290921a9190911b1615158786101680156136d457600190950194856135cf818a652000000000006140e0565b9650866135e5818b6703ff0000000000006140e0565b975080880361362257507f013b2aaa0000000000000000000000000000000000000000000000000000000097505f95508594506136e39350505050565b505f8061362f838a614109565b90925090507fffffffff0000000000000000000000000000000000000000000000000000000082161561366f575097505f95508594506136e39350505050565b9250508482015f8313801561368357508581125b8061369757505f8312801561369757508581135b156136d057507fd556b1110000000000000000000000000000000000000000000000000000000097505f95508594506136e39350505050565b9450505b845f036136df575f93505b5050505b92959194509250565b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86111561373757600a860460018201600a88065f1493509350935050613741565b8593509150600190505b9250925092565b5f805f837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0361378057508391505f90506001613741565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc84121561380e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb08412156137df57505f9150508215156001613741565b5f846004015f03600a0a90505f8187816137fb576137fb614744565b0594505080840286141592509050613741565b5f841261382357505f91508190506001613741565b50505060048101600a0a82025f6001613741565b5f80806064613849600a612328614a20565b613856600a612328614a20565b6138619060026148c7565b61386c906001614b96565b6138769190614b96565b6138809190614b96565b90506138c4565b5f8052600280600a8504028301601e833c5f80516107d0840193505f80526001600a8606600a6064880402018501601f853c5f5101949350505050565b6138cf858288613887565b92508315611b4b576138e5600186018288613887565b915050935093915050565b5f80888803613903575083905081613981565b5f805f806139138c8b8f8d612f20565b915091505f806139258a8a8d8c612f20565b9150915061393584848484611cd3565b8096508197505050505050505f8061394f8b8b8f8d612f20565b915091505f8061396186868686611df2565b915091505f8061397384848f8e612fa6565b909a50985050505050505050505b97509795505050505050565b5f805f805f61399c8787613cf7565b92509250925080612eba576040517f05e51ecb00000000000000000000000000000000000000000000000000000000815260048101889052602481018790526044016108ce565b5f806139f2600a612328614a20565b6139fd9060026148c7565b613a08906001614b96565b90505f613a18600a612328614a20565b90506002600a8504026001015f8052600281601e883c505f51617fff81169350618000811615613a4757918101915b505f80526001600a8506600a6064870402018301601f873c50505f510192915050565b5f80821215613ac7577f80000000000000000000000000000000000000000000000000000000000000008203613ac157507f8000000000000000000000000000000000000000000000000000000000000000919050565b505f0390565b5090565b919050565b5f807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83850993909202808410938190039390930393915050565b5f805f613b188686613ad0565b91509150815f03613b3c57838181613b3257613b32614744565b0492505050610695565b838210613b86576040517f6c59da120000000000000000000000000000000000000000000000000000000081526004810187905260248101869052604481018590526064016108ce565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f8587181215613cba577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115613ca757613c4f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001614b96565b8403613c7f57507f800000000000000000000000000000000000000000000000000000000000000090508161240d565b613c8a600a85614a20565b613c93906149f0565b613c9e846001614904565b9150915061240d565b613cb0846149f0565b839150915061240d565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115613ced57613c93600a85614a20565b508290508161240d565b5f805f845f03613d0f57505f91508190506001613741565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee800000000000000000085055f03613f23576f4b3b4ca85a86c47a098a2240000000008505158015613d7857507f80000000000000000000000000000000000000000000000000000000000000268412155b15613d99576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a000000000000008505158015613de157507f80000000000000000000000000000000000000000000000000000000000000138412155b15613dfa57678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c6400000000000000008505158015613e4657507f800000000000000000000000000000000000000000000000000000000000000a8412155b15613e5c576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e40000000000000000008505158015613eab57507f80000000000000000000000000000000000000000000000000000000000000028412155b15613ec157606485029450600284039350613e5c565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000008505158015613f1157507f80000000000000000000000000000000000000000000000000000000000000018412155b15613f2357600a850294506001840393505b600a80860290810586148015613f5957507f80000000000000000000000000000000000000000000000000000000000000018512155b15613f68578095506001850394505b50939492935050507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000008305151590565b60605f8212613fb55760405180602001604052805f815250613fec565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b613ffd60ff84901d80850118614024565b60405160200161400e929190614ba9565b6040516020818303038152906040529050919050565b60605f61403083614233565b60010190505f8167ffffffffffffffff81111561404f5761404f614625565b6040519080825280601f01601f191660200182016040528015614079576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461408357509392505050565b5f5b5f82600186515f1a1b16118385101615614101576001840193506140e2565b509192915050565b81515f90819065200000000000600191831a9190911b161515838510168085019082806141368488614314565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615614171575093505f92506106ad915050565b825f036141d4577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116141a5575f6141c7565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b955093506106ad92505050565b7f80000000000000000000000000000000000000000000000000000000000000008111614201575f614223565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95505f0393505050509250929050565b5f807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061427b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106142a7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106142c557662386f26fc10000830492506010015b6305f5e10083106142dd576305f5e100830492506008015b61271083106142f157612710830492506004015b60648310614303576064830492506002015b600a83106106845760010192915050565b5f8082841061434757507f34bd20690000000000000000000000000000000000000000000000000000000090505f6106ad565b835f03614380576040517fda6966d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60305f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501815b8782101580156143b85750604d83105b156143fb57815160018401937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90930192600a0a5f9190911a85900302016143a8565b8782106145215781515f1a849003600181111561444357507f0fdc26350000000000000000000000000000000000000000000000000000000095505f94506106ad9350505050565b600a84900a810282810183111561448657507f0fdc26350000000000000000000000000000000000000000000000000000000096505f95506106ad945050505050565b9190910190507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101905b8782106145215781515f1a603081146144f657507f0fdc26350000000000000000000000000000000000000000000000000000000095505f94506106ad9350505050565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101906144b2565b5f9890975095505050505050565b5f6020828403121561453f575f80fd5b5035919050565b5f8060408385031215614557575f80fd5b50508035926020909101359150565b803560ff81168114613acb575f80fd5b5f8060408385031215614587575f80fd5b8235915061459760208401614566565b90509250929050565b5f80604083850312156145b1575f80fd5b82359150602083013580151581146145c7575f80fd5b809150509250929050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60208284031215614662575f80fd5b813567ffffffffffffffff80821115614679575f80fd5b818401915084601f83011261468c575f80fd5b81358181111561469e5761469e614625565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156146e4576146e4614625565b816040528281528760208487010111156146fc575f80fd5b826020860160208301375f928101602001929092525095945050505050565b5f805f6060848603121561472d575f80fd5b505081359360208301359350604090920135919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b600181815b808511156147f757817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156147dd576147dd614771565b808516156147ea57918102915b93841c93908002906147a3565b509250929050565b5f8261480d57506001610684565b8161481957505f610684565b816001811461482f576002811461483957614855565b6001915050610684565b60ff84111561484a5761484a614771565b50506001821b610684565b5060208310610133831016604e8410600b8410161715614878575081810a610684565b614882838361479e565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156148b4576148b4614771565b029392505050565b5f61069583836147ff565b808202811582820484141761068457610684614771565b8181035f8312801583831316838312821617156148fd576148fd614771565b5092915050565b8082018281125f83128015821682158216171561492357614923614771565b505092915050565b8082025f82127f80000000000000000000000000000000000000000000000000000000000000008414161561496257614962614771565b818105831482151761068457610684614771565b5f8261498457614984614744565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f8000000000000000000000000000000000000000000000000000000000000000831416156149d8576149d8614771565b500590565b5f826149eb576149eb614744565b500790565b5f7f80000000000000000000000000000000000000000000000000000000000000008203613ac157613ac1614771565b5f82614a2e57614a2e614744565b500490565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a6357614a63614771565b5060010190565b5f81518060208401855e5f93019283525090919050565b5f614a8c8284614a6a565b7f300000000000000000000000000000000000000000000000000000000000000081526001019392505050565b7f2e0000000000000000000000000000000000000000000000000000000000000081525f614af3614aed6001840186614a6a565b84614a6a565b949350505050565b7f650000000000000000000000000000000000000000000000000000000000000081525f6106956001830184614a6a565b5f614b4c614aed614b46614b40858a614a6a565b88614a6a565b86614a6a565b9695505050505050565b8181038181111561068457610684614771565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b8082018082111561068457610684614771565b5f614af3614aed8386614a6a56","sourceMap":"525:13549:37:-:0;;;1114:77;;;;;;;;;-1:-1:-1;1138:46:37;:44;:46::i;:::-;525:13549;;2590:358:43;721:42;2673;934:66;2729:47;;2725:217;;2799:132;;-1:-1:-1;;;2799:132:43;;721:42;2799:132;;;216:51:134;934:66:43;283:18:134;;;276:34;326:18;;;319:34;;;189:18;;2799:132:43;;;;;;;2725:217;2638:310;2590:358::o;14:345:134:-;525:13549:37;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561000f575f80fd5b506004361061029d575f3560e01c806381f7e2f511610171578063cde72ef3116100d2578063dd64691711610088578063e5526ecd1161006e578063e5526ecd1461062e578063e75f991f14610641578063ffae15ba14610654575f80fd5b8063dd64691714610608578063e0db58881461061b575f80fd5b8063d1de592a116100b8578063d1de592a146105bb578063d35273a7146105ce578063d3d6ffa8146105f5575f80fd5b8063cde72ef314610582578063d102b4d3146105a8575f80fd5b8063a19684b711610127578063bc1b392d1161010d578063bc1b392d1461050b578063bc62d8d814610511578063cb09682b1461055c575f80fd5b8063a19684b7146104d2578063a90d041a146104f8575f80fd5b806396ce1ec71161015757806396ce1ec7146104885780639b4afd991461049b578063a100a3d9146104bf575f80fd5b806381f7e2f5146104625780638dc2980714610475575f80fd5b80633447c0301161021b5780635ca0e7a4116101d1578063719cd99d116101b7578063719cd99d1461042957806373bfb2831461043c57806381a822721461044f575f80fd5b80635ca0e7a4146103f0578063602c35fc14610403575f80fd5b80633b3bd868116102015780633b3bd868146103b757806341aa0080146103ca5780635b23771d146103dd575f80fd5b80633447c03014610374578063371493ce14610397575f80fd5b80631ee62f111161027057806328fa1f011161025657806328fa1f011461033b5780633004fa411461034e5780633029740014610361575f80fd5b80631ee62f11146103155780632538835014610328575f80fd5b806304327dc5146102a1578063078b665b146102c75780630b6429bc146102da578063146e82ad14610302575b5f80fd5b6102b46102af36600461452f565b61067a565b6040519081526020015b60405180910390f35b6102b46102d5366004614546565b61068a565b6102ed6102e8366004614576565b61069c565b604080519283529015156020830152016102be565b6102b461031036600461452f565b6106b4565b6102b461032336600461452f565b6106d3565b6102b461033636600461452f565b6106f2565b6102b461034936600461452f565b610711565b6102b461035c366004614546565b61071b565b6102b461036f366004614546565b61073b565b610387610382366004614546565b610746565b60405190151581526020016102be565b6103aa6103a53660046145a0565b610751565b6040516102be91906145d2565b6102b46103c5366004614576565b61075d565b6102b46103d8366004614546565b610768565b6102b46103eb366004614576565b610773565b6102b46103fe36600461452f565b61077e565b7f80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff6102b4565b6102b461043736600461452f565b610788565b61038761044a366004614546565b610792565b6102b461045d36600461452f565b61079d565b610387610470366004614546565b6107a7565b610387610483366004614546565b6107b2565b6102b4610496366004614546565b6107bd565b6102b47c090000000000000000000000000000000000000000000000000000000181565b6103aa6104cd36600461452f565b6107c8565b7f80000000000000000000000000000000000000000000000000000000000000016102b4565b6102b4610506366004614546565b610812565b5f6102b4565b61052461051f366004614652565b61081d565b604080517fffffffff0000000000000000000000000000000000000000000000000000000090931683526020830191909152016102be565b7f7fffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffff6102b4565b7f7fffffff800000000000000000000000000000000000000000000000000000006102b4565b6103876105b6366004614546565b610836565b6102b46105c9366004614546565b610841565b6102b47ffffffffc0000000000000000000000000000000000000000000000000000000181565b6102b461060336600461452f565b61084c565b61038761061636600461452f565b610856565b6102b461062936600461452f565b61087c565b6103aa61063c36600461471b565b610886565b6102ed61064f366004614576565b61090f565b7fffffffbe19cfc6ef4f44cf88f14500d013df534fcaad48fca1d5ca47bea26fcc6102b4565b5f6106848261091b565b92915050565b5f6106958383610967565b9392505050565b5f806106a88484610983565b915091505b9250929050565b5f6106848273c51a14251b0dcf0ae24a96b7153991378938f5f56109c4565b5f6106848273c51a14251b0dcf0ae24a96b7153991378938f5f56109f0565b5f6106848273c51a14251b0dcf0ae24a96b7153991378938f5f5610a3e565b5f61068482610a71565b5f610695838373c51a14251b0dcf0ae24a96b7153991378938f5f5610ab2565b5f6106958383610d0d565b5f6106958383610d70565b60606106958383610dbe565b5f6106958383610e51565b5f6106958383610e6c565b5f6106958383610eb1565b5f61068482610ee4565b5f61068482610fa6565b5f6106958383611052565b5f610684826110a2565b5f61069583836110e7565b5f6106958383611137565b5f6106958383611186565b6060610684827ffffffffc000000000000000000000000000000000000000000000000000000017c0900000000000000000000000000000000000000000000000000000001610886565b5f61069583836111cb565b5f805f8061082a856111d6565b90969095509350505050565b5f61069583836112c4565b5f6106958383611313565b5f61068482611358565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff821615610684565b5f6106848261138a565b606061089283836112c4565b6108d7576040517f3be5bf9400000000000000000000000000000000000000000000000000000000815260048101849052602481018390526044015b60405180910390fd5b5f6108e1856110a2565b9050610906856108f183876112c4565b8061090157506109018386611137565b610dbe565b95945050505050565b5f806106a884846113cb565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d61094d828261140b565b90925090505f61095d8383611459565b5095945050505050565b5f6109728383611137565b61097c5781610695565b5090919050565b5f807bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8416601b0b60e085901d6109b782828761155f565b9350935050509250929050565b5f610695837fffffffff0000000000000000000000000000000000000000000000000000000584610ab2565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d610a238483836116ae565b90925090505f610a338383611459565b509695505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d610a2384838361181f565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d82610aa48383611b54565b9150505f610a338284611459565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff848116601b0b9060e086901d908516610aef5750600191506106959050565b5f8213610b8857815f03610b4c57610b07855f6112c4565b15610b41576040517f8be82972000000000000000000000000000000000000000000000000000000008152600481018690526024016108ce565b505f91506106959050565b6040517fcceba0f100000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016108ce565b610b93856001610d70565b8015610ba45750610ba4865f611137565b15610bb3578592505050610695565b610bbd855f6112c4565b15610be657610bdd610bce8761091b565b610bd787611358565b86610ab2565b92505050610695565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8516601b0b60e086901d5f80610c198484611b54565b915091505f610c2983855f611bbc565b905060015f8080610c608f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b9160e09190911d90565b915091505b60018510610ca75784600116600103610c8a57610c8484848484611cd3565b90945092505b600185901c9450610c9d82828484611cd3565b9092509050610c65565b5f80610cb48f8e8e61181f565b91509150610cc482828a8d611cd3565b9092509050610cd48f83836116ae565b9092509050610ce582828888611cd3565b90925090505f610cf58383611459565b509e5050505050505050505050505050509392505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686611df2565b915091505f610d618383611459565b509a9950505050505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d610db384848484612416565b979650505050505050565b60607bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d5f829003610e2e576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525092505050610684565b8315610e4757610e3e828261242d565b92505050610684565b61090682826126fd565b5f805f610e5e8585612e64565b915091506109068282612ec6565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686612f20565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d610906828286612f4a565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828112610f1b57509192915050565b5f80610f278484611b54565b915091505f84128015610f3957508015155b15610f8f57610f8a82847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4612f20565b935091505b5f610f9a8385611459565b50979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828112610fdd57509192915050565b5f80610fe98484611b54565b91509150805f03610ffe575093949350505050565b5f811315610f8f57610f8a82847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4612fa6565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d611095848484846130d6565b1315979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828212156110dc5761094d82826131aa565b5f61095d8383611459565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d61112a848484846130d6565b1215979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d61117a848484846130d6565b12979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686611cd3565b5f61097283836112c4565b80515f908190602084810191850101828080806111f3868661324d565b929650909450925090507fffffffff0000000000000000000000000000000000000000000000000000000084165f036112b557848303611285575f806112398484611459565b915091508061127457507f32b8b8be000000000000000000000000000000000000000000000000000000009a5f9a5098505050505050505050565b505f9a909950975050505050505050565b507fad384e8700000000000000000000000000000000000000000000000000000000985f98509650505050505050565b5091975f975095505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d611307848484846130d6565b13979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686612fa6565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d61094d82826131aa565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d826113bd8383611b54565b5090505f610a338284611459565b5f805f805f6113da87876136ec565b9250925092505f806113ec8585611459565b91509150818380156113fb5750815b9650965050505050509250929050565b5f806106a87f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb48686611df2565b5f601b83900b83148383826114bd577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561149d57620186a0860595506005850194505b8586601b0b146114b857600a8605955084600101945061149d565b6114d3565b855f036114d357505f9250600191506106ad9050565b848560030b1461152f575f8512156114f357505f92508291506106ad9050565b6040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016108ce565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f8512156115a5576040517f4a7d166b00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016108ce565b845f036115b757505f905060016116a6565b8460ff8416850185811215611602576040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101889052602481018790526044016108ce565b5f805f83121561166c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb3831215611643575f8095509550505050506116a6565b825f03600a0a915081848161165a5761165a614744565b04955050840290911491506116a69050565b5f83131561169b5761167f83600a6148bc565b915061168b82856148c7565b9550600194506116a69350505050565b509193506001925050505b935093915050565b5f805f8412156116ea576116c284846131aa565b90945092506116d28585856116ae565b90945092506116e1848461140b565b915091506116a6565b5f806116f68686611b54565b9092509050845f80806117098585613748565b9194509250905061270d6127106117216001826148de565b8514611738576117328d8686613837565b90925090505b83156117c3575f61174a866001614904565b90505b80848583028161175f5761175f614744565b051461177657600a84059350600a8805975061174d565b6117b7611783858861492b565b8961178e878561492b565b8f87877ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6138f0565b909d509b506117ea9050565b819b507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc9a505b5050505050866117fb84835f611bbc565b611806886001614904565b6118109190614904565b94509450505050935093915050565b5f80838361182d828261398d565b90965094505f86136118ae57855f03611872576040517f561fc7b500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5d3fd4db00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016108ce565b5050837f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000036118ec576118e283604c614904565b5f915091506116a6565b7f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000008412158061193b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb561195d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb45b5f0b8412611b18575f805f805f8561197657604b611979565b604c5b611983908a614904565b90505f80876119b0577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000006119d1565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca0000000000000000005b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff169050808c81611a0357611a03614744565b05818102955090850193507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18019050611a3c8c826139e3565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000000295508594508a8414611ac8576123278114611aa357611a7e8c826001016139e3565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000002611ac5565b7f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000005b94505b50611af8838b848c89897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb46138f0565b909a509850611b098a8a835f612fa6565b975097505050505050506116a6565b611b22858561140b565b9095509350611b3286868661181f565b9095509350611b4185856131aa565b92509250506116a6565b50935093915050565b5f805f8312611b6757508290505f6106ad565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4831215611b9957505f9050826106ad565b5f839003600a0a808581611baf57611baf614744565b0794859003959350505050565b5f818303611bcb575082610695565b82821315611c0e57828203604c811380611be557505f8113155b15611bf3575f915050610695565b80600a0a8581611c0557611c05614744565b05915050610695565b818303604c811380611c2057505f8113155b15611c68576040517f1d5d6d100000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490526064016108ce565b600a81900a85810286828281611c8057611c80614744565b0514611cc9576040517f1d5d6d100000000000000000000000000000000000000000000000000000000081526004810188905260248101879052604481018690526064016108ce565b9250610695915050565b5f8085158415178015611ceb575f92505f9150611de8565b611cf58487614904565b91505f611d0188613a6a565b90505f611d0d87613a6a565b90505f611d1a8383613ad0565b5090505f6f0785ee10d5da46d900f436a000000000821115611d4f576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a7640000821115611d7057670de0b6b3a7640000820491506012015b633b9aca00821115611d8957633b9aca00820491506009015b612710821115611d9e57612710820491506004015b8115611db257600a82049150600101611d9e565b611dbc8187614904565b9550611dde8b8a611dd88787611dd387600a6148bc565b613b0b565b89613bf0565b9097509550505050505b5094509492505050565b5f80835f03611e37576040517f7a97930f00000000000000000000000000000000000000000000000000000000815260048101879052602481018690526044016108ce565b855f03611e4857505f90508061240d565b5f805f80611e568a8a613cf7565b919b5099509150611e678888613cf7565b919950975090505f611e788b613a6a565b90505f611e848a613a6a565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c818310156122a1578415611ee257507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000009050604b612260565b6f4b3b4ca85a86c47a098a22400000000083101561200e57678ac7230489e80000831015611f72576402540be400831015611f4057620186a0831015611f305750620186a0905060056121e9565b506402540be4009050600a6121e9565b655af3107a4000831015611f5f5750655af3107a40009050600e6121e9565b50678ac7230489e80000905060136121e9565b6b204fce5e3e25026110000000831015611fc45769152d02c7e14af6800000831015611fad575069152d02c7e14af6800000905060176121e9565b506b204fce5e3e250261100000009050601c6121e9565b6d314dc6448d9338c15b0a00000000831015611ff357506d314dc6448d9338c15b0a00000000905060216121e9565b506f4b3b4ca85a86c47a098a224000000000905060266121e9565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156121065773af298d050e4395d69670b12b7f410000000000008310156120a1577172cb5bd86321e38cb6ce6682e8000000000083101561208257507172cb5bd86321e38cb6ce6682e800000000009050602b6121e9565b5073af298d050e4395d69670b12b7f41000000000000905060306121e9565b76010b46c6cdd6e3e0828f4db456ff0c8ea00000000000008310156120e2575076010b46c6cdd6e3e0828f4db456ff0c8ea0000000000000905060356121e9565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a6121e9565b7c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000083101561219c577a026e4d30eccc3215dd8f3157d27e23acbdcfe6800000000000000083101561217457507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f6121e9565b507c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000905060446121e9565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca0000000000000000008310156121e957507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b81831161221d57600a820491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016121e9565b815f03612260576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018d9052602481018c90526044016108ce565b856122a1576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018f9052602481018e90526044016108ce565b807f8000000000000000000000000000000000000000000000000000000000000000018d126122d457808d039c50612347565b7f80000000000000000000000000000000000000000000000000000000000000009c90038c015f81131561234757807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038b1361233457998a0199612347565b5f8099509950505050505050505061240d565b5f808e12801561235657505f8c135b15612393577f80000000000000000000000000000000000000000000000000000000000000008e01808d1361238b575f61238f565b808d035b9150505b8b818f010397506123b08f8e6123aa888789613b0b565b8b613bf0565b90995097505f8113156123fa57604c8113156123da575f809a509a5050505050505050505061240d565b80600a0a89816123ec576123ec614744565b059850885f036123fa575f97505b5096985094965061240d95505050505050565b94509492505050565b5f612423858585856130d6565b1495945050505050565b6060612439838361398d565b90935091505f8061246a7f161bcca7119915b50764b4abe86529797775a5f171951000000000000000000086614976565b1561249a57507f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000009050604c6124c1565b507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000009050604b5b5f6124cc8387614976565b90505f6124d984886149dd565b90505f808312156124f3575060016124f0836149f0565b92505b5f82121561250a57506001612507826149f0565b91505b60408051602081019091525f81528215612613575f8061252b600a89614a20565b90505b6125388186614976565b5f0361255d57612549600a82614a20565b90508161255581614a33565b92505061252e565b60408051602081019091525f8082525b838110156125be57816040516020016125869190614a81565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052915060010161256d565b505b6125cb600a876149dd565b5f036125e3576125dc600a87614976565b95506125c0565b806125ed87613f98565b6040516020016125fe929190614ab9565b60405160208183030381529060405293505050505b5f61261d85613f98565b90505f61262a878b614904565b90505f81156126605761263c82613f98565b60405160200161264c9190614afb565b604051602081830303815290604052612670565b60405180602001604052805f8152505b90505f8561268c5760405180602001604052805f8152506126c3565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b9050808486846040516020016126dc9493929190614b2c565b6040516020818303038152906040529a505050505050505050505092915050565b60606103e882138061271857506127156103e86149f0565b82125b15612752576040517fe44c72b0000000000000000000000000000000000000000000000000000000008152600481018390526024016108ce565b5f80841290811561276d57612766856149f0565b9050612770565b50835b5f61277a82614024565b80519091505f5b81811080156127fd57508281612798600185614b56565b6127a29190614b56565b815181106127b2576127b2614b69565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f3000000000000000000000000000000000000000000000000000000000000000145b15612814578061280c81614a33565b915050612781565b5f61281f8284614b56565b90505f61282c838a614904565b90505f876128485760405180602001604052805f81525061287f565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b90505f82126129f957815f6128948286614b96565b67ffffffffffffffff8111156128ac576128ac614625565b6040519080825280601f01601f1916602001820160405280156128d6576020820181803683370190505b5090505f5b85811015612948578881815181106128f5576128f5614b69565b602001015160f81c60f81b82828151811061291257612912614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053506001016128db565b505f5b828110156129c5577f30000000000000000000000000000000000000000000000000000000000000008261297f8389614b96565b8151811061298f5761298f614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535060010161294b565b5082816040516020016129d9929190614ba9565b6040516020818303038152906040529a5050505050505050505050610684565b5f612a03836149f0565b905080841115612c1a575f612a188286614b56565b90505f612a26866001614b96565b67ffffffffffffffff811115612a3e57612a3e614625565b6040519080825280601f01601f191660200182016040528015612a68576020820181803683370190505b5090505f5b82811015612ada57898181518110612a8757612a87614b69565b602001015160f81c60f81b828281518110612aa457612aa4614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612a6d565b507f2e00000000000000000000000000000000000000000000000000000000000000818381518110612b0e57612b0e614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5b83811015612be55789612b518285614b96565b81518110612b6157612b61614b69565b01602001517fff00000000000000000000000000000000000000000000000000000000000000168282612b95866001614b96565b612b9f9190614b96565b81518110612baf57612baf614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612b3e565b508381604051602001612bf9929190614ba9565b6040516020818303038152906040529b505050505050505050505050610684565b5f612c258583614b56565b90505f85612c34836002614b96565b612c3e9190614b96565b67ffffffffffffffff811115612c5657612c56614625565b6040519080825280601f01601f191660200182016040528015612c80576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f81518110612cb657612cb6614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f2e0000000000000000000000000000000000000000000000000000000000000081600181518110612d1857612d18614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5b82811015612dc3577f300000000000000000000000000000000000000000000000000000000000000082612d7d836002614b96565b81518110612d8d57612d8d614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612d48565b505f5b86811015612be557898181518110612de057612de0614b69565b01602001517fff00000000000000000000000000000000000000000000000000000000000000168282612e14866002614b96565b612e1e9190614b96565b81518110612e2e57612e2e614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612dc6565b5f805f805f612e7387876136ec565b92509250925080612eba576040517fc471796600000000000000000000000000000000000000000000000000000000815260048101849052602481018390526044016108ce565b50909590945092505050565b5f805f612ed38585611459565b9150915080612f18576040517f22c9f7bb00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016108ce565b509392505050565b5f80612f2c84846131aa565b9094509250612f3d86868686612fa6565b9150915094509492505050565b5f805f612f5886868661155f565b9150915080612f9d576040517f05e4767800000000000000000000000000000000000000000000000000000000815260048101879052602481018690526044016108ce565b50949350505050565b5f8085158415178015612fd257865f03612fc6578484925092505061240d565b8686925092505061240d565b612fdc878761398d565b9097509550612feb858561398d565b909550935085841315612fff579395929492935b838603604c81111561301857878793509350505061240d565b80600a0a868161302a5761302a614744565b0595505086850180881860ff90811c151589881890911c151680156130c557877f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff036130ac576040517fd556b111000000000000000000000000000000000000000000000000000000008152600481018a9052602481018990526044016108ce565b600a9687900596909805860197600197909701966130c9565b8198505b5096979596505050505050565b5f80851584151781871282861218178584141780156130fb578685925092505061240d565b505f8584131561310f575092949193919260015b8386035f8112604c8213178015613142578215613134575f899450945050505061240d565b885f9450945050505061240d565b600a82900a8981028a82828161315a5761315a614744565b0514613186578415613176575f8b96509650505050505061240d565b8a5f96509650505050505061240d565b841561319b57889650945061240d9350505050565b955087945061240d9350505050565b5f807f80000000000000000000000000000000000000000000000000000000000000008403613243577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8303613236576040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101859052602481018490526044016108ce565b600a840593508260010192505b50505f9190910391565b5f8281806132628386652000000000006140e0565b9250858314158361327c81886703ff0000000000006140e0565b94508085036132b657507f34bd20690000000000000000000000000000000000000000000000000000000094505f92508291506136e39050565b5f806132c28a88614109565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613300575095505f93508392506136e3915050565b86519095506540000000000060015f9290921a9190911b16151588871016915050801561358f57506001909301925f8461334381896703ff0000000000006140e0565b955080860361337e57507f7bfa48af0000000000000000000000000000000000000000000000000000000095505f93508392506136e3915050565b855b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018051908a1160015f9290921a9190911b6601000000000000161515166001036133ed577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613380565b818114613444575f806134008484614109565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613440575097505f95508594506136e39350505050565b9350505b5f83121561347f57507f7bfa48af0000000000000000000000000000000000000000000000000000000096505f94508493506136e392505050565b831561348b57825f0392505b80820394505f8513156134cb57507f013b2aaa0000000000000000000000000000000000000000000000000000000096505f94508493506136e392505050565b855f036134da5782955061358c565b5f859003604381111561351b57507f32b8b8be0000000000000000000000000000000000000000000000000000000097505f95508594506136e39350505050565b600a0a8681025f8883838161353257613532614744565b0514159050601b82900b82141581806135485750805b1561358457507f32b8b8be000000000000000000000000000000000000000000000000000000009a505f98508897506136e39650505050505050565b505084019650505b50505b84516c2000000020000000000000000060015f9290921a9190911b1615158786101680156136d457600190950194856135cf818a652000000000006140e0565b9650866135e5818b6703ff0000000000006140e0565b975080880361362257507f013b2aaa0000000000000000000000000000000000000000000000000000000097505f95508594506136e39350505050565b505f8061362f838a614109565b90925090507fffffffff0000000000000000000000000000000000000000000000000000000082161561366f575097505f95508594506136e39350505050565b9250508482015f8313801561368357508581125b8061369757505f8312801561369757508581135b156136d057507fd556b1110000000000000000000000000000000000000000000000000000000097505f95508594506136e39350505050565b9450505b845f036136df575f93505b5050505b92959194509250565b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86111561373757600a860460018201600a88065f1493509350935050613741565b8593509150600190505b9250925092565b5f805f837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0361378057508391505f90506001613741565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc84121561380e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb08412156137df57505f9150508215156001613741565b5f846004015f03600a0a90505f8187816137fb576137fb614744565b0594505080840286141592509050613741565b5f841261382357505f91508190506001613741565b50505060048101600a0a82025f6001613741565b5f80806064613849600a612328614a20565b613856600a612328614a20565b6138619060026148c7565b61386c906001614b96565b6138769190614b96565b6138809190614b96565b90506138c4565b5f8052600280600a8504028301601e833c5f80516107d0840193505f80526001600a8606600a6064880402018501601f853c5f5101949350505050565b6138cf858288613887565b92508315611b4b576138e5600186018288613887565b915050935093915050565b5f80888803613903575083905081613981565b5f805f806139138c8b8f8d612f20565b915091505f806139258a8a8d8c612f20565b9150915061393584848484611cd3565b8096508197505050505050505f8061394f8b8b8f8d612f20565b915091505f8061396186868686611df2565b915091505f8061397384848f8e612fa6565b909a50985050505050505050505b97509795505050505050565b5f805f805f61399c8787613cf7565b92509250925080612eba576040517f05e51ecb00000000000000000000000000000000000000000000000000000000815260048101889052602481018790526044016108ce565b5f806139f2600a612328614a20565b6139fd9060026148c7565b613a08906001614b96565b90505f613a18600a612328614a20565b90506002600a8504026001015f8052600281601e883c505f51617fff81169350618000811615613a4757918101915b505f80526001600a8506600a6064870402018301601f873c50505f510192915050565b5f80821215613ac7577f80000000000000000000000000000000000000000000000000000000000000008203613ac157507f8000000000000000000000000000000000000000000000000000000000000000919050565b505f0390565b5090565b919050565b5f807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83850993909202808410938190039390930393915050565b5f805f613b188686613ad0565b91509150815f03613b3c57838181613b3257613b32614744565b0492505050610695565b838210613b86576040517f6c59da120000000000000000000000000000000000000000000000000000000081526004810187905260248101869052604481018590526064016108ce565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f8587181215613cba577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115613ca757613c4f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001614b96565b8403613c7f57507f800000000000000000000000000000000000000000000000000000000000000090508161240d565b613c8a600a85614a20565b613c93906149f0565b613c9e846001614904565b9150915061240d565b613cb0846149f0565b839150915061240d565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115613ced57613c93600a85614a20565b508290508161240d565b5f805f845f03613d0f57505f91508190506001613741565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee800000000000000000085055f03613f23576f4b3b4ca85a86c47a098a2240000000008505158015613d7857507f80000000000000000000000000000000000000000000000000000000000000268412155b15613d99576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a000000000000008505158015613de157507f80000000000000000000000000000000000000000000000000000000000000138412155b15613dfa57678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c6400000000000000008505158015613e4657507f800000000000000000000000000000000000000000000000000000000000000a8412155b15613e5c576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e40000000000000000008505158015613eab57507f80000000000000000000000000000000000000000000000000000000000000028412155b15613ec157606485029450600284039350613e5c565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000008505158015613f1157507f80000000000000000000000000000000000000000000000000000000000000018412155b15613f2357600a850294506001840393505b600a80860290810586148015613f5957507f80000000000000000000000000000000000000000000000000000000000000018512155b15613f68578095506001850394505b50939492935050507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000008305151590565b60605f8212613fb55760405180602001604052805f815250613fec565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b613ffd60ff84901d80850118614024565b60405160200161400e929190614ba9565b6040516020818303038152906040529050919050565b60605f61403083614233565b60010190505f8167ffffffffffffffff81111561404f5761404f614625565b6040519080825280601f01601f191660200182016040528015614079576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461408357509392505050565b5f5b5f82600186515f1a1b16118385101615614101576001840193506140e2565b509192915050565b81515f90819065200000000000600191831a9190911b161515838510168085019082806141368488614314565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615614171575093505f92506106ad915050565b825f036141d4577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116141a5575f6141c7565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b955093506106ad92505050565b7f80000000000000000000000000000000000000000000000000000000000000008111614201575f614223565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95505f0393505050509250929050565b5f807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061427b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106142a7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106142c557662386f26fc10000830492506010015b6305f5e10083106142dd576305f5e100830492506008015b61271083106142f157612710830492506004015b60648310614303576064830492506002015b600a83106106845760010192915050565b5f8082841061434757507f34bd20690000000000000000000000000000000000000000000000000000000090505f6106ad565b835f03614380576040517fda6966d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60305f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501815b8782101580156143b85750604d83105b156143fb57815160018401937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90930192600a0a5f9190911a85900302016143a8565b8782106145215781515f1a849003600181111561444357507f0fdc26350000000000000000000000000000000000000000000000000000000095505f94506106ad9350505050565b600a84900a810282810183111561448657507f0fdc26350000000000000000000000000000000000000000000000000000000096505f95506106ad945050505050565b9190910190507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101905b8782106145215781515f1a603081146144f657507f0fdc26350000000000000000000000000000000000000000000000000000000095505f94506106ad9350505050565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101906144b2565b5f9890975095505050505050565b5f6020828403121561453f575f80fd5b5035919050565b5f8060408385031215614557575f80fd5b50508035926020909101359150565b803560ff81168114613acb575f80fd5b5f8060408385031215614587575f80fd5b8235915061459760208401614566565b90509250929050565b5f80604083850312156145b1575f80fd5b82359150602083013580151581146145c7575f80fd5b809150509250929050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60208284031215614662575f80fd5b813567ffffffffffffffff80821115614679575f80fd5b818401915084601f83011261468c575f80fd5b81358181111561469e5761469e614625565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156146e4576146e4614625565b816040528281528760208487010111156146fc575f80fd5b826020860160208301375f928101602001929092525095945050505050565b5f805f6060848603121561472d575f80fd5b505081359360208301359350604090920135919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b600181815b808511156147f757817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156147dd576147dd614771565b808516156147ea57918102915b93841c93908002906147a3565b509250929050565b5f8261480d57506001610684565b8161481957505f610684565b816001811461482f576002811461483957614855565b6001915050610684565b60ff84111561484a5761484a614771565b50506001821b610684565b5060208310610133831016604e8410600b8410161715614878575081810a610684565b614882838361479e565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156148b4576148b4614771565b029392505050565b5f61069583836147ff565b808202811582820484141761068457610684614771565b8181035f8312801583831316838312821617156148fd576148fd614771565b5092915050565b8082018281125f83128015821682158216171561492357614923614771565b505092915050565b8082025f82127f80000000000000000000000000000000000000000000000000000000000000008414161561496257614962614771565b818105831482151761068457610684614771565b5f8261498457614984614744565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f8000000000000000000000000000000000000000000000000000000000000000831416156149d8576149d8614771565b500590565b5f826149eb576149eb614744565b500790565b5f7f80000000000000000000000000000000000000000000000000000000000000008203613ac157613ac1614771565b5f82614a2e57614a2e614744565b500490565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a6357614a63614771565b5060010190565b5f81518060208401855e5f93019283525090919050565b5f614a8c8284614a6a565b7f300000000000000000000000000000000000000000000000000000000000000081526001019392505050565b7f2e0000000000000000000000000000000000000000000000000000000000000081525f614af3614aed6001840186614a6a565b84614a6a565b949350505050565b7f650000000000000000000000000000000000000000000000000000000000000081525f6106956001830184614a6a565b5f614b4c614aed614b46614b40858a614a6a565b88614a6a565b86614a6a565b9695505050505050565b8181038181111561068457610684614771565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b8082018082111561068457610684614771565b5f614af3614aed8386614a6a56","sourceMap":"525:13549:37:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6819:83;;;;;;:::i;:::-;;:::i;:::-;;;399:25:134;;;387:2;372:18;6819:83:37;;;;;;;;11299:93;;;;;;:::i;:::-;;:::i;13850:222::-;;;;;;:::i;:::-;;:::i;:::-;;;;1353:25:134;;;1421:14;;1414:22;1409:2;1394:18;;1387:50;1326:18;13850:222:37;1185:258:134;10667:140:37;;;;;;:::i;:::-;;:::i;9694:142::-;;;;;;:::i;:::-;;:::i;9997:::-;;;;;;:::i;:::-;;:::i;8997:85::-;;;;;;:::i;:::-;;:::i;10353:150::-;;;;;;:::i;:::-;;:::i;6590:93::-;;;;;;:::i;:::-;;:::i;7121:90::-;;;;;;:::i;:::-;;:::i;:::-;;;1613:14:134;;1606:22;1588:41;;1576:2;1561:18;7121:90:37;1448:187:134;4526:156:37;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;12040:182::-;;;;;;:::i;:::-;;:::i;5530:93::-;;;;;;:::i;:::-;;:::i;12556:172::-;;;;;;:::i;:::-;;:::i;9229:87::-;;;;;;:::i;:::-;;:::i;1849:122::-;4788:66:42;1849:122:37;;9463:85;;;;;;:::i;:::-;;:::i;8475:92::-;;;;;;:::i;:::-;;:::i;6015:83::-;;;;;;:::i;:::-;;:::i;8125:92::-;;;;;;:::i;:::-;;:::i;7780:90::-;;;;;;:::i;:::-;;:::i;6300:93::-;;;;;;:::i;:::-;;:::i;967:140::-;;1040:66;967:140;;4894:158;;;;;;:::i;:::-;;:::i;1589:122::-;4499:66:42;1589:122:37;;11007:93;;;;;;:::i;:::-;;:::i;2375:96::-;2414:5;2375:96;;3040:211;;;;;;:::i;:::-;;:::i;:::-;;;;4336:66:134;4324:79;;;4306:98;;4435:2;4420:18;;4413:34;;;;4279:18;3040:211:37;4107:346:134;1329:122:37;4228:66:42;1329:122:37;;2109;5091:66:42;2109:122:37;;7445:90;;;;;;:::i;:::-;;:::i;5240:93::-;;;;;;:::i;:::-;;:::i;706:140::-;;779:66;706:140;;5760:87;;;;;;:::i;:::-;;:::i;11554:88::-;;;;;;:::i;:::-;;:::i;8735:91::-;;;;;;:::i;:::-;;:::i;3821:383::-;;;;;;:::i;:::-;;:::i;13202:232::-;;;;;;:::i;:::-;;:::i;2602:90::-;5335:66:42;2602:90:37;;6819:83;6864:5;6888:7;:1;:5;:7::i;:::-;6881:14;6819:83;-1:-1:-1;;6819:83:37:o;11299:93::-;11353:5;11377:8;:1;11383;11377:5;:8::i;:::-;11370:15;11299:93;-1:-1:-1;;;11299:93:37:o;13850:222::-;13931:7;13940:4;14013:52;14049:5;14056:8;14013:35;:52::i;:::-;14006:59;;;;13850:222;;;;;;:::o;10667:140::-;10713:5;10737:63;:1;721:42:43;10737:6:37;:63::i;9694:142::-;9741:5;9765:64;:1;721:42:43;9765:7:37;:64::i;9997:142::-;10044:5;10068:64;:1;721:42:43;10068:7:37;:64::i;8997:85::-;9043:5;9067:8;:1;:6;:8::i;10353:150::-;10407:5;10431:65;:1;10437;721:42:43;10431:5:37;:65::i;6590:93::-;6644:5;6668:8;:1;6674;6668:5;:8::i;7121:90::-;7174:4;7197:7;:1;7202;7197:4;:7::i;4526:156::-;4591:13;4623:52;4661:1;4664:10;4623:37;:52::i;12040:182::-;12128:5;12152:63;12199:5;12206:8;12152:46;:63::i;5530:93::-;5584:5;5608:8;:1;5614;5608:5;:8::i;12556:172::-;12640:7;12666:55;12705:5;12712:8;12666:38;:55::i;9229:87::-;9276:5;9300:9;:1;:7;:9::i;9463:85::-;9509:5;9533:8;:1;:6;:8::i;8475:92::-;8529:4;8552:8;:1;8558;8552:5;:8::i;6015:83::-;6060:5;6084:7;:1;:5;:7::i;8125:92::-;8179:4;8202:8;:1;8208;8202:5;:8::i;7780:90::-;7833:4;7856:7;:1;7861;7856:4;:7::i;6300:93::-;6354:5;6378:8;:1;6384;6378:5;:8::i;4894:158::-;4942:13;4974:71;4981:1;779:66;1040;4974:6;:71::i;11007:93::-;11061:5;11085:8;:1;11091;11085:5;:8::i;3040:211::-;3097:6;3105:5;3123:20;3145:12;3161:43;3200:3;3161:38;:43::i;:::-;3122:82;;;;-1:-1:-1;3040:211:37;-1:-1:-1;;;;3040:211:37:o;7445:90::-;7498:4;7521:7;:1;7526;7521:4;:7::i;5240:93::-;5294:5;5318:8;:1;5324;5318:5;:8::i;5760:87::-;5807:5;5831:9;:1;:7;:9::i;11554:88::-;11602:4;40930:17:42;41123:12;;41116:20;11625:10:37;40844:308:42;8735:91:37;8784:5;8808:11;:1;:9;:11::i;3821:383::-;3909:13;3939:31;:13;3956;3939:16;:31::i;:::-;3934:127;;3993:57;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;3993:57:37;;;;;;;;3934:127;4070:10;4083:7;:1;:5;:7::i;:::-;4070:20;-1:-1:-1;4107:90:37;4145:1;4148:22;4070:20;4156:13;4148:7;:22::i;:::-;:48;;;-1:-1:-1;4174:22:37;:4;4182:13;4174:7;:22::i;:::-;4107:37;:90::i;:::-;4100:97;3821:383;-1:-1:-1;;;;;3821:383:37:o;13202:232::-;13287:5;13294:4;13367:60;13411:5;13418:8;13367:43;:60::i;26308:326:42:-;26357:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;26476:62;19348:32;19405:16;26476:33;:62::i;:::-;26444:94;;-1:-1:-1;26444:94:42;-1:-1:-1;26549:12:42;26566:38;26444:94;;26566:9;:38::i;:::-;-1:-1:-1;26548:56:42;26308:326;-1:-1:-1;;;;;26308:326:42:o;40507:101::-;40561:5;40585:8;40588:1;40591;40585:2;:8::i;:::-;:16;;40600:1;40585:16;;;-1:-1:-1;40596:1:42;;40507:101;-1:-1:-1;40507:101:42:o;13558:248::-;13639:7;;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;13741:58;19348:32;19405:16;13790:8;13741:19;:58::i;:::-;13734:65;;;;;;13558:248;;;;;:::o;39808:143::-;39882:5;39906:38;39910:1;3896:66;39925:18;39906:3;:38::i;34200:484::-;34279:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;34410:84;34446:18;19348:32;19405:16;34410:35;:84::i;:::-;34366:128;;-1:-1:-1;34366:128:42;-1:-1:-1;34599:12:42;34616:38;34366:128;;34616:9;:38::i;:::-;-1:-1:-1;34598:56:42;34200:484;-1:-1:-1;;;;;;34200:484:42:o;35060:463::-;35135:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;35262:84;35298:18;19348:32;19405:16;35262:35;:84::i;31289:362::-;31339:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;31339:5;31498:66;19348:32;19405:16;31498:37;:66::i;:::-;31476:88;;;31575:12;31592:29;31602:8;31612;31592:9;:29::i;36145:3071::-;36227:5;19261:17;19363:16;;;19359:2;19348:32;;19409:4;19405:16;;;;41123:12;;36313:869;;-1:-1:-1;3744:1:42;;-1:-1:-1;36343:16:42;;-1:-1:-1;36343:16:42;36313:869;36402:1;36380:18;:23;36376:806;;36423:18;36445:1;36423:23;36419:494;;36470:16;:1;3653;36470:4;:16::i;:::-;36466:157;;;36584:20;;;;;;;;399:25:134;;;372:18;;36584:20:42;226:204:134;36466:157:42;-1:-1:-1;3653:1:42;;-1:-1:-1;36789:17:42;;-1:-1:-1;36789:17:42;36419:494;36852:46;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;36852:46:42;5150:302:134;36376:806:42;37009:15;:1;3744;37009:4;:15::i;:::-;:35;;;;-1:-1:-1;37028:16:42;:1;3653;37028:4;:16::i;:::-;37005:177;;;37067:1;37060:8;;;;;;37005:177;37089:16;:1;3653;37089:4;:16::i;:::-;37085:97;;;37128:43;37132:7;:1;:5;:7::i;:::-;37141:9;:1;:7;:9::i;:::-;37152:18;37128:3;:43::i;:::-;37121:50;;;;;;37085:97;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;37409:25;;37514:68;19348:32;19405:16;37514:37;:68::i;:::-;37476:106;;;;37593:24;37628:72;37677:8;37687:9;37698:1;37628:48;:72::i;:::-;37593:108;-1:-1:-1;37810:1:42;37752:30;;;37879:10;:1;19261:17;19363:16;;19359:2;19348:32;;19409:4;19405:16;;;;;19141:296;37879:10;37825:64;;;;37899:544;37926:1;37906:16;:21;37899:544;;37947:16;37966:4;37947:23;37974:4;37947:31;37943:263;;38042:149;38097:23;38122:14;38138:21;38161:12;38042:33;:149::i;:::-;37998:193;;-1:-1:-1;37998:193:42;-1:-1:-1;37943:263:42;38240:1;38219:22;;;;;38295:137;38346:21;38369:12;38383:21;38406:12;38295:33;:137::i;:::-;38255:177;;-1:-1:-1;38255:177:42;-1:-1:-1;37899:544:42;;;38454:25;38481:16;38513:86;38549:18;38569;38589:9;38513:35;:86::i;:::-;38453:146;;;;38656:86;38690:18;38710:9;38721;38732;38656:33;:86::i;:::-;38610:132;;-1:-1:-1;38610:132:42;-1:-1:-1;38799:86:42;38835:18;38610:132;;38799:35;:86::i;:::-;38753:132;;-1:-1:-1;38753:132:42;-1:-1:-1;38942:105:42;38753:132;;39007:23;39032:14;38942:33;:105::i;:::-;38896:151;;-1:-1:-1;38896:151:42;-1:-1:-1;39139:7:42;39151:40;38896:151;;39151:9;:40::i;:::-;-1:-1:-1;39138:53:42;-1:-1:-1;;;;;;;;;;;;;;;36145:3071:42;;;;;:::o;25374:565::-;25428:5;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;25428:5;;25639:95;19348:32;19405:16;19348:32;19405:16;25639:33;:95::i;:::-;25581:153;;;;25864:7;25876:38;25886:17;25905:8;25876:9;:38::i;:::-;-1:-1:-1;25863:51:42;25374:565;-1:-1:-1;;;;;;;;;;25374:565:42:o;26976:313::-;27029:4;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;27188:94;19348:32;19405:16;19348:32;19405:16;27188:32;:94::i;:::-;27181:101;26976:313;-1:-1:-1;;;;;;;26976:313:42:o;1412:418:44:-;1490:13;19261:17:42;19363:16;;19359:2;19348:32;19409:4;19405:16;;;1516:24:44;1604:22;;;1600:63;;1642:10;;;;;;;;;;;;;;;;;;;;;;;1600:63;1676:10;1672:90;;;1709:42;1723:17;1742:8;1709:13;:42::i;:::-;1702:49;;;;;;1672:90;1778:45;1795:17;1814:8;1778:16;:45::i;8838:263:42:-;8932:5;8950:24;8976:15;8995:41;9020:5;9027:8;8995:24;:41::i;:::-;8949:87;;;;9053:41;9066:17;9085:8;9053:12;:41::i;20749:488::-;20803:5;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;20803:5;;21016:95;19348:32;19405:16;19348:32;19405:16;21016:33;:95::i;15036:248::-;15120:7;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;15216:61;19348:32;19405:16;15268:8;15216:22;:61::i;31797:752::-;31848:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;32020:13;;;32016:56;;-1:-1:-1;32056:5:42;;31797:752;-1:-1:-1;;31797:752:42:o;32016:56::-;32082:8;32092:15;32111:66;32149:17;32168:8;32111:37;:66::i;:::-;32081:96;;;;32211:1;32191:17;:21;:38;;;;-1:-1:-1;32216:13:42;;;32191:38;32187:283;;;32402:57;32436:1;32439:8;32449:4;32455:3;32402:33;:57::i;:::-;32386:73;-1:-1:-1;32386:73:42;-1:-1:-1;32187:283:42;32480:12;32497:22;32507:1;32510:8;32497:9;:22::i;:::-;-1:-1:-1;32479:40:42;31797:752;-1:-1:-1;;;;;;;31797:752:42:o;32696:1044::-;32746:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;32918:13;;;32914:56;;-1:-1:-1;32954:5:42;;32696:1044;-1:-1:-1;;32696:1044:42:o;32914:56::-;32980:8;32990:15;33009:66;33047:17;33066:8;33009:37;:66::i;:::-;32979:96;;;;33161:8;33173:1;33161:13;33157:503;;-1:-1:-1;33197:5:42;;32696:1044;-1:-1:-1;;;;32696:1044:42:o;33157:503::-;33559:1;33548:8;:12;33544:116;;;33592:57;33626:1;33629:8;33639:4;33645:3;33592:33;:57::i;30085:431::-;30139:4;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;30346:106;19348:32;19405:16;19348:32;19405:16;30346:44;:106::i;:::-;-1:-1:-1;30469:40:42;;30085:431;-1:-1:-1;;;;;;;30085:431:42:o;22642:494::-;22691:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;22783:21;;;22779:148;;;22852:64;22888:17;22907:8;22852:35;:64::i;22779:148::-;23051:12;23068:38;23078:17;23097:8;23068:9;:38::i;29229:431::-;29283:4;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;29490:106;19348:32;19405:16;19348:32;19405:16;29490:44;:106::i;:::-;-1:-1:-1;29613:40:42;;29229:431;-1:-1:-1;;;;;;;29229:431:42:o;28393:429::-;28446:4;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;28653:106;19348:32;19405:16;19348:32;19405:16;28653:44;:106::i;:::-;-1:-1:-1;;28393:429:42;-1:-1:-1;;;;;;;28393:429:42:o;24348:527::-;24402:5;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;24402:5;;24613:95;19348:32;19405:16;19348:32;19405:16;24613:33;:95::i;40179:101::-;40233:5;40257:8;40260:1;40263;40257:2;:8::i;8905:1711:46:-;9120:10;;8974:6;;;;9084:4;9075:14;;;;9109:22;;;8974:6;;;;9246:35;9075:14;9109:22;9246:23;:35::i;:::-;9150:131;;-1:-1:-1;9150:131:46;;-1:-1:-1;9150:131:46;-1:-1:-1;9150:131:46;-1:-1:-1;9295:18:46;;;9312:1;9295:18;9291:1319;;9343:3;9333:6;:13;9329:1098;;9951:12;9965:13;9982:54;10008:17;10027:8;9982:25;:54::i;:::-;9950:86;;;;10059:8;10054:179;;-1:-1:-1;10099:34:46;;10146:1;;-1:-1:-1;8905:1711:46;-1:-1:-1;;;;;;;;;8905:1711:46:o;10054:179::-;-1:-1:-1;10204:1:46;;10207:6;;-1:-1:-1;8905:1711:46;-1:-1:-1;;;;;;;;8905:1711:46:o;9329:1098::-;-1:-1:-1;10354:42:46;;10409:1;;-1:-1:-1;8905:1711:46;-1:-1:-1;;;;;;;8905:1711:46:o;9291:1319::-;-1:-1:-1;10570:13:46;;10596:1;;-1:-1:-1;8905:1711:46;-1:-1:-1;;;;;;8905:1711:46:o;27617:430:42:-;27670:4;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;27877:106;19348:32;19405:16;19348:32;19405:16;27877:44;:106::i;:::-;-1:-1:-1;;27617:430:42;-1:-1:-1;;;;;;;27617:430:42:o;19921:481::-;19975:5;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;19975:5;;20186:95;19348:32;19405:16;19348:32;19405:16;20186:33;:95::i;21587:410::-;21638:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;21757:64;19348:32;19405:16;21757:35;:64::i;30772:350::-;30825:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;30825:5;30976:66;19348:32;19405:16;30976:37;:66::i;:::-;30962:80;;;31053:12;31070:22;31080:1;31083:8;31070:9;:22::i;7434:353::-;7525:5;7532:4;7549:24;7575:15;7592:13;7609:38;7631:5;7638:8;7609:21;:38::i;:::-;7548:99;;;;;;7658:11;7671:17;7692:38;7702:17;7721:8;7692:9;:38::i;:::-;7657:73;;;;7748:5;7755:8;:24;;;;;7767:12;7755:24;7740:40;;;;;;;;;7434:353;;;;;:::o;35535:162:45:-;35614:6;35622;35647:43;35651:4;35657:3;35662:17;35681:8;35647:3;:43::i;15810:2402:42:-;15895:11;16327:46;;;;;;15991:17;16047:8;16327:46;16651:668;;16708:4;16688:17;:24;:29;16684:135;;16762:3;16741:24;;;;16799:1;16787:13;;;;16684:135;17058:17;17036;17029:46;;;17022:151;;17120:2;17099:23;;;;17144:10;;;;;17022:151;;;16651:668;;;17215:17;17236:1;17215:22;17211:94;;-1:-1:-1;3653:1:42;;-1:-1:-1;17281:4:42;;-1:-1:-1;17261:25:42;;-1:-1:-1;17261:25:42;17211:94;17529:8;17516;17510:27;;;17506:393;;17731:1;17720:8;:12;17716:85;;;-1:-1:-1;3653:1:42;;-1:-1:-1;3653:1:42;;-1:-1:-1;17756:26:42;;-1:-1:-1;17756:26:42;17716:85;17825:59;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;17825:59:42;5150:302:134;17506:393:42;-1:-1:-1;;18046:17:42;18132:28;;18166:4;18162:19;;;18129:53;;-1:-1:-1;15810:2402:42;;;;;:::o;9946:3045::-;10081:7;10090:4;10213:1;10193:17;:21;10189:2796;;;10237:59;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;10237:59:42;5150:302:134;10189:2796:42;10395:17;10416:1;10395:22;10391:2594;;-1:-1:-1;10441:1:42;;-1:-1:-1;10444:4:42;10433:16;;10391:2594;10659:17;10940;;;10922:36;;10980:24;;;10976:123;;;11035:45;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;11035:45:42;5150:302:134;10976:123:42;11127:13;11154:20;11208:1;11192:13;:17;11188:1787;;;11486:3;11470:13;:19;11466:91;;;11525:1;11528:5;11517:17;;;;;;;;;;11466:91;11917:13;11916:14;;11902:2;:29;11894:37;;11990:5;11968:19;:27;;;;;:::i;:::-;;;-1:-1:-1;;12253:20:42;;:43;;;;-1:-1:-1;12231:66:42;;-1:-1:-1;12231:66:42;11188:1787;12356:1;12340:13;:17;12336:639;;;12502:28;12516:13;12502:2;:28;:::i;:::-;12494:36;-1:-1:-1;12563:27:42;12494:36;12563:19;:27;:::i;:::-;12548:42;-1:-1:-1;12864:4:42;;-1:-1:-1;12842:27:42;;-1:-1:-1;;;;12842:27:42;12336:639;-1:-1:-1;12934:19:42;;-1:-1:-1;12955:4:42;;-1:-1:-1;;;10391:2594:42;9946:3045;;;;;;:::o;43384:1993:45:-;43517:6;43525;43571:1;43551:17;:21;43547:271;;;43620:34;43626:17;43645:8;43620:5;:34::i;:::-;43588:66;;-1:-1:-1;43588:66:45;-1:-1:-1;43700:54:45;43706:18;43588:66;;43700:5;:54::i;:::-;43668:86;;-1:-1:-1;43668:86:45;-1:-1:-1;43775:32:45;43668:86;;43775:3;:32::i;:::-;43768:39;;;;;;43547:271;43854:21;43877:22;43903:36;43911:17;43930:8;43903:7;:36::i;:::-;43853:86;;-1:-1:-1;43853:86:45;-1:-1:-1;43981:8:45;43949:29;;;44060:36;43853:86;43981:8;44060:9;:36::i;:::-;44013:83;;-1:-1:-1;44013:83:45;-1:-1:-1;44013:83:45;-1:-1:-1;44257:4:45;44298:5;782:27:47;808:1;44298:5:45;782:27:47;:::i;:::-;44321:3:45;:29;44317:252;;44485:69;44508:18;44536:3;44542:11;44485:22;:69::i;:::-;44370:184;;-1:-1:-1;44370:184:45;-1:-1:-1;44317:252:45;44586:11;44582:664;;;44676:15;44695:7;:3;44701:1;44695:7;:::i;:::-;44676:27;;44753:154;44790:8;44781:5;44772;44761:8;:16;44760:26;;;;;:::i;:::-;;:38;44753:154;;44835:2;44826:11;;;-1:-1:-1;44882:2:45;44863:21;;;;44753:154;;;44975:153;45020:11;45026:5;45020:3;:11;:::i;:::-;45033:15;45050:16;45061:5;45050:8;:16;:::i;:::-;45068:8;45078:13;45093;45108:2;44975:23;:153::i;:::-;44943:185;;-1:-1:-1;44943:185:45;-1:-1:-1;44582:664:45;;-1:-1:-1;44582:664:45;;45187:13;45167:33;;45229:2;45218:13;;44582:664;43999:1257;;;;;45274:17;45308:61;45327:14;45343:22;45367:1;45308:18;:61::i;:::-;45293:12;45297:8;45293:1;:12;:::i;:::-;:76;;;;:::i;:::-;45266:104;;;;;;;43384:1993;;;;;;:::o;37791:5059::-;37924:6;;38000:17;38060:8;38114:41;38000:17;38060:8;38114:12;:41::i;:::-;38082:73;;-1:-1:-1;38082:73:45;-1:-1:-1;38195:1:45;38174:22;;38170:259;;38220:17;38241:1;38220:22;38216:199;;38273:11;;;;;;;;;;;;;;38216:199;38338:58;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;38338:58:45;5150:302:134;38216:199:45;37954:485;;38519:17;38540:4;38519:25;38515:81;;38568:13;:8;38579:2;38568:13;:::i;:::-;38583:1;38560:25;;;;;;38515:81;38646:4;38625:25;;;;38739:24;;38760:3;38739:24;;;38754:3;38739:24;38726:38;;:8;:38;38722:4122;;38780:20;38814;38848;38882;39533:17;39571:12;:38;;39606:2;39571:38;;;39593:2;39571:38;39553:57;;:8;:57;:::i;:::-;39533:77;;39672:11;39763:13;39779:12;:26;;39801:4;39779:26;;;39794:4;39779:26;39763:42;;;;40381:5;40354:17;:33;;;;;:::i;:::-;;40941:29;;;;-1:-1:-1;41478:29:45;;;;-1:-1:-1;40685:20:45;;;-1:-1:-1;41582:42:45;41600:18;40685:20;41582:17;:42::i;:::-;41575:4;:49;41552:73;;41663:13;41647:29;;41830:17;41813:13;:34;41809:270;;513:32:47;41891:30:45;;:165;;42009:46;42027:18;42047:3;42053:1;42047:7;42009:17;:46::i;:::-;42002:4;:53;41891:165;;;41959:4;41891:165;41875:181;;41809:270;39654:2457;42157:256;42198:13;42229:17;42264:13;42295:8;42321:13;42352;1640:3;42157:23;:256::i;:::-;42125:288;;-1:-1:-1;42125:288:45;-1:-1:-1;42434:47:45;42125:288;;42467:10;42479:1;42434:3;:47::i;:::-;42427:54;;;;;;;;;;;;38722:4122;42646:32;42650:17;42669:8;42646:3;:32::i;:::-;42614:64;;-1:-1:-1;42614:64:45;-1:-1:-1;42724:54:45;42730:18;42614:64;;42724:5;:54::i;:::-;42692:86;;-1:-1:-1;42692:86:45;-1:-1:-1;42799:34:45;42692:86;;42799:5;:34::i;:::-;42792:41;;;;;;;38722:4122;37944:4906;37791:5059;;;;;;:::o;55832:852::-;55915:14;55931:11;56120:1;56108:8;:13;56104:81;;-1:-1:-1;56149:17:45;;-1:-1:-1;56168:1:45;56141:29;;56104:81;56351:3;56340:8;:14;56336:82;;;-1:-1:-1;56382:1:45;;-1:-1:-1;56385:17:45;56374:29;;56336:82;56528:11;56563:9;;;56549:2;:24;;56595:17;56549:24;56595;;;;:::i;:::-;;56643;;;;;55832:852;-1:-1:-1;;;;55832:852:45:o;53784:1452::-;53925:6;53987:14;53975:8;:26;53971:1249;;-1:-1:-1;54028:17:45;54021:24;;53971:1249;54087:8;54070:14;:25;54066:1154;;;54137:25;;;54199:2;54184:17;;;:38;;;54221:1;54205:12;:17;;54184:38;54180:127;;;1408:1;54246:42;;;;;54180:127;54478:12;54464:2;:27;54437:17;:55;;;;;:::i;:::-;;54430:62;;;;;54066:1154;54553:25;;;54615:2;54600:17;;;:38;;;54637:1;54621:12;:17;;54600:38;54596:163;;;54669:71;;;;;;;;8664:25:134;;;8705:18;;;8698:34;;;8748:18;;;8741:34;;;8637:18;;54669:71:45;8468:313:134;54596:163:45;54904:2;:27;;;54968:25;;;:17;54904:27;54968:25;54904:27;55015:16;;;;:::i;:::-;;:37;55011:162;;55083:71;;;;;;;;8664:25:134;;;8705:18;;;8698:34;;;8748:18;;;8741:34;;;8637:18;;55083:71:45;8468:313:134;55011:162:45;55197:8;-1:-1:-1;55190:15:45;;-1:-1:-1;;55190:15:45;7193:2230;7343:24;;7473:26;;7501;;7470:58;7547:1870;;;;1408:1;7690:53;;1495:1;7757:34;;7547:1870;;;7833:21;7845:9;7833;:21;:::i;:::-;7822:32;;7989:29;8021:48;8050:18;8021:28;:48::i;:::-;7989:80;;8083:29;8115:48;8144:18;8115:28;:48::i;:::-;8083:80;;8179:13;8197:52;8204:21;8227;8197:6;:52::i;:::-;8178:71;;;8264:22;8344:4;8336:5;:12;8332:114;;;8381:4;8372:13;;;-1:-1:-1;8425:2:45;8407:20;8332:114;8475:4;8467:5;:12;8463:114;;;8512:4;8503:13;;;-1:-1:-1;8556:2:45;8538:20;8463:114;8606:3;8598:5;:11;8594:111;;;8642:3;8633:12;;;-1:-1:-1;8685:1:45;8667:19;8594:111;8734:3;8726:5;:11;8722:111;;;8770:3;8761:12;;;-1:-1:-1;8813:1:45;8795:19;8722:111;8857:9;;8850:108;;8899:2;8890:11;;;-1:-1:-1;8923:16:45;;8850:108;;;9086:34;9105:14;9086:34;;:::i;:::-;;-1:-1:-1;9167:239:45;9211:18;9247;9283:83;9290:21;9313;9336:29;9351:14;9344:2;9336:29;:::i;:::-;9283:6;:83::i;:::-;9384:8;9167:26;:239::i;:::-;9135:271;;-1:-1:-1;9135:271:45;-1:-1:-1;;;;;7547:1870:45;7390:2033;7193:2230;;;;;;;:::o;12966:8769::-;13116:6;13124;13150:18;13172:1;13150:23;13146:8583;;13196:45;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;13196:45:45;5150:302:134;13146:8583:45;13262:18;13284:1;13262:23;13258:8471;;-1:-1:-1;1408:1:45;;-1:-1:-1;1408:1:45;13301:67;;13258:8471;13399:24;13437:15;13466:10;13490;13697:39;13706:18;13726:9;13697:8;:39::i;:::-;13656:80;;-1:-1:-1;13656:80:45;-1:-1:-1;13656:80:45;-1:-1:-1;13791:39:45;13800:18;13820:9;13791:8;:39::i;:::-;13750:80;;-1:-1:-1;13750:80:45;-1:-1:-1;13750:80:45;-1:-1:-1;13965:29:45;13997:48;14026:18;13997:28;:48::i;:::-;13965:80;;14059:29;14091:48;14120:18;14091:28;:48::i;:::-;14059:80;-1:-1:-1;14170:4:45;14212:2;14663:29;;;14659:4460;;;14716:5;14712:4269;;;-1:-1:-1;14753:4:45;;-1:-1:-1;14796:2:45;14712:4269;;;14873:4;14849:21;:28;14845:3675;;;14933:4;14909:21;:28;14905:1781;;;14997:4;14973:21;:28;14969:813;;;15065:3;15041:21;:27;15037:321;;;-1:-1:-1;15116:3:45;;-1:-1:-1;15174:1:45;14845:3675;;15037:321;-1:-1:-1;15262:4:45;;-1:-1:-1;15321:2:45;14845:3675;;14969:813;15456:4;15432:21;:28;15428:324;;;-1:-1:-1;15508:4:45;;-1:-1:-1;15567:2:45;14845:3675;;15428:324;-1:-1:-1;15656:4:45;;-1:-1:-1;15715:2:45;14845:3675;;14905:1781;15872:4;15848:21;:28;15844:816;;;15940:4;15916:21;:28;15912:324;;;-1:-1:-1;15992:4:45;;-1:-1:-1;16051:2:45;14845:3675;;15912:324;-1:-1:-1;16140:4:45;;-1:-1:-1;16199:2:45;14845:3675;;15844:816;16334:4;16310:21;:28;16306:324;;;-1:-1:-1;16386:4:45;;-1:-1:-1;16445:2:45;14845:3675;;16306:324;-1:-1:-1;16534:4:45;;-1:-1:-1;16593:2:45;14845:3675;;;16768:4;16744:21;:28;16740:1758;;;16832:4;16808:21;:28;16804:816;;;16900:4;16876:21;:28;16872:324;;;-1:-1:-1;16952:4:45;;-1:-1:-1;17011:2:45;14845:3675;;16872:324;-1:-1:-1;17100:4:45;;-1:-1:-1;17159:2:45;16740:1758;;16804:816;17294:4;17270:21;:28;17266:324;;;-1:-1:-1;17346:4:45;;-1:-1:-1;17405:2:45;14845:3675;;17266:324;-1:-1:-1;17494:4:45;;-1:-1:-1;17553:2:45;16740:1758;;;17710:4;17686:21;:28;17682:790;;;17778:4;17754:21;:28;17750:324;;;-1:-1:-1;17830:4:45;;-1:-1:-1;17889:2:45;17682:790;;17750:324;-1:-1:-1;17978:4:45;;-1:-1:-1;18037:2:45;17682:790;;;18172:4;18148:21;:28;18144:298;;;-1:-1:-1;18224:4:45;;-1:-1:-1;18283:2:45;18144:298;18641:5;18616:21;:30;18609:214;;18723:2;18714:11;;;-1:-1:-1;18755:19:45;;18609:214;;;18848:5;18857:1;18848:10;18844:119;;18893:47;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;18893:47:45;5150:302:134;18844:119:45;19003:5;18998:107;;19039:47;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;19039:47:45;5150:302:134;18998:107:45;19587:14;19568:16;:33;19555:9;:46;19551:623;;19638:14;19625:27;;;;19551:623;;;19729:16;;19699:46;;;;19839:1;19822:18;;19818:338;;;19904:14;19885:16;:33;19872:9;:46;19868:266;;19950:27;;;;19868:266;;;1408:1;1495;20040:67;;;;;;;;;;;;;;19868:266;20202:26;20352:1;20340:9;:13;:30;;;;;20369:1;20357:9;:13;20340:30;20336:222;;;20424:16;20412:28;;20484:20;;;:55;;20537:1;20484:55;;;20519:8;20507:9;:20;20484:55;20462:77;;20372:186;20336:222;20621:9;20599:19;20587:9;:31;:43;20576:54;;20681:235;20729:18;20769;20809:59;20816:21;20839:5;20846:21;20809:6;:59::i;:::-;20890:8;20681:26;:235::i;:::-;20649:267;;-1:-1:-1;20649:267:45;-1:-1:-1;20961:1:45;20939:23;;20935:716;;;21012:2;20990:19;:24;20986:308;;;1408:1;1495;21204:67;;;;;;;;;;;;;;;20986:308;21479:19;21465:2;:34;21437:63;;;;;;:::i;:::-;;;;21526:17;21547:1;21526:22;21522:111;;1495:1;21576:34;;21522:111;-1:-1:-1;21676:17:45;;-1:-1:-1;21695:8:45;;-1:-1:-1;21668:36:45;;-1:-1:-1;;;;;;21668:36:45;13258:8471;12966:8769;;;;;;;:::o;34854:365::-;35003:4;35078:76;35093:18;35113:9;35124:18;35144:9;35078:14;:76::i;:::-;35172:40;;34854:365;-1:-1:-1;;;;;34854:365:45:o;2112:2562:44:-;2200:13;2257:71;2300:17;2319:8;2257:42;:71::i;:::-;2225:103;;-1:-1:-1;2225:103:44;-1:-1:-1;2339:13:44;;2397:24;2417:4;2225:103;2397:24;:::i;:::-;:29;2393:179;;-1:-1:-1;2482:4:44;;-1:-1:-1;2458:2:44;2393:179;;;-1:-1:-1;2557:4:44;;-1:-1:-1;2533:2:44;2393:179;2719:15;2737:33;2764:5;2737:17;:33;:::i;:::-;2719:51;-1:-1:-1;2917:17:44;2937:33;2964:5;2937:17;:33;:::i;:::-;2917:53;;2981:10;3024:1;3013:8;:12;3009:89;;;-1:-1:-1;3049:4:44;3078:9;3079:8;3078:9;:::i;:::-;3067:20;;3009:89;3124:1;3111:10;:14;3107:95;;;-1:-1:-1;3149:4:44;3180:11;3181:10;3180:11;:::i;:::-;3167:24;;3107:95;3212:35;;;;;;;;;:30;:35;;3261:15;;3257:819;;3292:24;;3354:10;3362:2;3354:5;:10;:::i;:::-;3334:30;;3518:128;3525:30;3545:9;3525:10;:30;:::i;:::-;3559:1;3525:35;3518:128;;3580:15;3593:2;3580:15;;:::i;:::-;;-1:-1:-1;3613:18:44;;;;:::i;:::-;;;;3518:128;;;3660:41;;;;;;;;;:36;:41;;;3715:147;3739:16;3735:1;:20;3715:147;;;3819:22;3805:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;3757:3:44;;3715:147;;;;3876:78;3883:15;3896:2;3883:10;:15;:::i;:::-;3902:1;3883:20;3876:78;;3923:16;3937:2;3923:16;;:::i;:::-;;;3876:78;;;4006:22;4030:34;4053:10;4030:22;:34::i;:::-;3987:78;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3968:97;;3278:798;;;3257:819;4086:28;4117:32;4140:8;4117:22;:32::i;:::-;4086:63;-1:-1:-1;4333:22:44;4358:32;4376:13;4358:8;:32;:::i;:::-;4333:57;-1:-1:-1;4400:28:44;4443:20;;:87;;4490:39;4513:15;4490:22;:39::i;:::-;4471:59;;;;;;;;:::i;:::-;;;;;;;;;;;;;4443:87;;;;;;;;;;;;;;;;4400:130;;4540:20;4563:5;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4540:39;;4610:6;4618:14;4634:16;4652:14;4596:71;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4589:78;;;;;;;;;;;;2112:2562;;;;:::o;5044:3560::-;5135:13;1062:4;5164:8;:38;:81;;;-1:-1:-1;5217:28:44;1062:4;5217:28;:::i;:::-;5206:8;:39;5164:81;5160:149;;;5268:30;;;;;;;;399:25:134;;;372:18;;5268:30:44;226:204:134;5160:149:44;5319:10;5332:21;;;;5388:495;;;;5626:18;5627:17;5626:18;:::i;:::-;5608:37;;5388:495;;;-1:-1:-1;5854:17:44;5388:495;5893:19;5921:25;5938:7;5921:16;:25::i;:::-;5969:13;;5893:54;;-1:-1:-1;5957:9:44;6232:106;6255:1;6239:13;:17;:57;;;;-1:-1:-1;6260:6:44;6275:13;6267:5;6271:1;6267;:5;:::i;:::-;:21;;;;:::i;:::-;6260:29;;;;;;;;:::i;:::-;;;;;;;;:36;;6239:57;6232:106;;;6312:15;;;;:::i;:::-;;;;6232:106;;;6347:12;6362:17;6366:13;6362:1;:17;:::i;:::-;6347:32;-1:-1:-1;6556:13:44;6572:32;6590:13;6572:8;:32;:::i;:::-;6556:48;;6615:20;6638:5;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6615:39;;6679:1;6669:6;:11;6665:594;;6926:6;6900:15;6976:14;6926:6;6976:4;:14;:::i;:::-;6966:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6966:25:44;;6947:44;;7010:9;7005:86;7029:4;7025:1;:8;7005:86;;;7067:6;7074:1;7067:9;;;;;;;;:::i;:::-;;;;;;;;;7058:3;7062:1;7058:6;;;;;;;;:::i;:::-;;;;:18;;;;;;;;;;-1:-1:-1;7035:3:44;;7005:86;;;;7109:9;7104:90;7128:7;7124:1;:11;7104:90;;;7160:19;:3;7164:8;7171:1;7164:4;:8;:::i;:::-;7160:13;;;;;;;;:::i;:::-;;;;:19;;;;;;;;;;-1:-1:-1;7137:3:44;;7104:90;;;;7228:6;7243:3;7214:34;;;;;;;;;:::i;:::-;;;;;;;;;;;;;7207:41;;;;;;;;;;;;;;6665:594;7472:17;7500:7;7501:6;7500:7;:::i;:::-;7472:36;;7530:9;7523:4;:16;7519:1079;;;7620:15;7638:16;7645:9;7638:4;:16;:::i;:::-;7620:34;-1:-1:-1;7668:16:44;7697:8;:4;7704:1;7697:8;:::i;:::-;7687:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7687:19:44;;7668:38;;7725:9;7720:89;7744:7;7740:1;:11;7720:89;;;7785:6;7792:1;7785:9;;;;;;;;:::i;:::-;;;;;;;;;7776:3;7780:1;7776:6;;;;;;;;:::i;:::-;;;;:18;;;;;;;;;;-1:-1:-1;7753:3:44;;7720:89;;;;7822:18;:3;7826:7;7822:12;;;;;;;;:::i;:::-;;;;:18;;;;;;;;;;;7859:9;7854:115;7878:9;7874:1;:13;7854:115;;;7935:6;7942:11;7952:1;7942:7;:11;:::i;:::-;7935:19;;;;;;;;:::i;:::-;;;;;;;7912:3;7930:1;7916:11;:7;7926:1;7916:11;:::i;:::-;:15;;;;:::i;:::-;7912:20;;;;;;;;:::i;:::-;;;;:42;;;;;;;;;;-1:-1:-1;7889:3:44;;7854:115;;;;8003:6;8018:3;7989:34;;;;;;;;;:::i;:::-;;;;;;;;;;;;;7982:41;;;;;;;;;;;;;;;7519:1079;8131:25;8159:16;8171:4;8159:9;:16;:::i;:::-;8131:44;-1:-1:-1;8189:16:44;8242:4;8218:21;8131:44;8218:1;:21;:::i;:::-;:28;;;;:::i;:::-;8208:39;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8208:39:44;;8189:58;;8261:12;:3;8265:1;8261:6;;;;;;;;:::i;:::-;;;;:12;;;;;;;;;;;8287;:3;8291:1;8287:6;;;;;;;;:::i;:::-;;;;:12;;;;;;;;;;;8318:9;8313:97;8337:17;8333:1;:21;8313:97;;;8379:16;:3;8383:5;8387:1;8383;:5;:::i;:::-;8379:10;;;;;;;;:::i;:::-;;;;:16;;;;;;;;;;-1:-1:-1;8356:3:44;;8313:97;;;;8428:9;8423:110;8447:4;8443:1;:8;8423:110;;;8509:6;8516:1;8509:9;;;;;;;;:::i;:::-;;;;;;;8476:3;8504:1;8480:21;8484:17;8480:1;:21;:::i;:::-;:25;;;;:::i;:::-;8476:30;;;;;;;;:::i;:::-;;;;:42;;;;;;;;;;-1:-1:-1;8453:3:44;;8423:110;;8131:373:42;8219:6;8227;8246:24;8272:15;8289:13;8306:38;8328:5;8335:8;8306:21;:38::i;:::-;8245:99;;;;;;8359:8;8354:98;;8390:51;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;8390:51:42;5150:302:134;8354:98:42;-1:-1:-1;8469:17:42;;;;-1:-1:-1;8131:373:42;-1:-1:-1;;;8131:373:42:o;18451:299::-;18539:5;18557:7;18566:13;18583:38;18593:17;18612:8;18583:9;:38::i;:::-;18556:65;;;;18636:8;18631:95;;18667:48;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;18667:48:42;5150:302:134;18631:95:42;-1:-1:-1;18742:1:42;18451:299;-1:-1:-1;;;18451:299:42:o;33785:339:45:-;33935:6;33943;33999:36;34005:18;34025:9;33999:5;:36::i;:::-;33965:70;;-1:-1:-1;33965:70:45;-1:-1:-1;34052:65:45;34056:18;34076:9;33965:70;;34052:3;:65::i;:::-;34045:72;;;;33785:339;;;;;;;:::o;14139:390:42:-;14277:7;14301:13;14316;14333:58;14353:17;14372:8;14382;14333:19;:58::i;:::-;14300:91;;;;14406:8;14401:100;;14437:53;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;14437:53:42;5150:302:134;14401:100:42;-1:-1:-1;14517:5:42;14139:390;-1:-1:-1;;;;14139:390:42:o;29621:3681:45:-;29771:6;;30037:26;;30065;;30034:58;30111:217;;;;30145:18;30167:1;30145:23;30141:177;;30196:18;30216:9;30188:38;;;;;;;30141:177;30273:18;30293:9;30265:38;;;;;;;30141:177;30565:43;30578:18;30598:9;30565:12;:43::i;:::-;30531:77;;-1:-1:-1;30531:77:45;-1:-1:-1;30652:43:45;30665:18;30685:9;30652:12;:43::i;:::-;30618:77;;-1:-1:-1;30618:77:45;-1:-1:-1;30816:21:45;;;30812:268;;;30919:18;;31031:9;;30866:18;;30812:268;31764:21;;;824:2;31948:45;;31944:122;;;32021:18;32041:9;32013:38;;;;;;;;31944:122;32285:21;32279:2;:27;32250:57;;;;;;:::i;:::-;;;-1:-1:-1;;32400:39:45;;;32658:26;;;32555:4;32648:37;;;32641:45;32734:18;32561:43;;;32551:54;;;32544:62;32718:35;32826:412;;;;32885:9;32865:16;:29;32861:130;;32925:47;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;32925:47:45;5150:302:134;32861:130:45;33031:2;33051:24;;;;33009;;;;33122:40;;;33093:11;;;;;;32826:412;;;33222:1;33201:22;;32826:412;-1:-1:-1;33265:18:45;;33285:9;;-1:-1:-1;;;;;;29621:3681:45:o;50744:2689::-;50905:6;;51455:26;;51483;;51452:58;51601:26;;;51629;;;51597:59;51374:308;51761:24;;;51346:461;51842:105;;;;51889:18;51909;51881:47;;;;;;;51842:105;51232:729;51975:12;52025:9;52013;:21;52009:329;;;-1:-1:-1;52124:18:45;;52248:9;;52067:18;;52319:4;52009:329;52374:21;;;52352:19;52500:20;;52540:2;52522:21;;52497:47;52571:210;;;;52610:7;52606:161;;;52649:1;52652:18;52641:30;;;;;;;;;52606:161;52726:18;52746:1;52718:30;;;;;;;;;52606:161;52914:2;:27;;;52974:26;;;:18;52914:27;52974:26;52914:27;53019:16;;;;:::i;:::-;;:38;53015:402;;53081:7;53077:161;;;53120:1;53123:18;53112:30;;;;;;;;;;;53077:161;53197:18;53217:1;53189:30;;;;;;;;;;;53015:402;53262:7;53258:159;;;53297:18;;-1:-1:-1;53317:8:45;-1:-1:-1;53289:37:45;;-1:-1:-1;;;;53289:37:45;53258:159;53373:8;-1:-1:-1;53383:18:45;;-1:-1:-1;53365:37:45;;-1:-1:-1;;;;53365:37:45;2977:541;3058:6;3066;3205:16;3184:17;:37;3180:271;;3257:16;3245:8;:28;3241:127;;3304:45;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;3304:45:45;5150:302:134;3241:127:45;3406:2;3385:23;;;;3426:10;;;;;3180:271;-1:-1:-1;;3472:18:45;;;;;;2977:541::o;1751:6678:46:-;1859:20;1987:5;1859:20;;2015:55;1987:5;2045:3;7516:41:33;2015:21:46;:55::i;:::-;2006:64;-1:-1:-1;2102:15:46;;;;2006:64;2201:53;2006:64;2231:3;20378:131:33;2201:21:46;:53::i;:::-;2192:62;;2286:8;2276:6;:18;2272:120;;-1:-1:-1;2326:32:46;;-1:-1:-1;2368:1:46;;-1:-1:-1;2368:1:46;;-1:-1:-1;2318:55:46;;-1:-1:-1;2318:55:46;2272:120;2411:37;2450:27;2501:61;2548:5;2555:6;2501:46;:61::i;:::-;2410:152;;-1:-1:-1;2410:152:46;-1:-1:-1;2584:35:46;;;;2580:135;;-1:-1:-1;2651:30:46;-1:-1:-1;2691:1:46;;-1:-1:-1;2691:1:46;;-1:-1:-1;2643:53:46;;-1:-1:-1;;2643:53:46;2580:135;1870:13:34;;2752:20:46;;-1:-1:-1;7662:41:33;1886:1:34;2801:16:46;1862:22:34;;;;1858:30;;;;1854:41;1847:49;1840:57;1823:15;;;1819:79;;-1:-1:-1;;2899:14:46;;2895:3973;;-1:-1:-1;2964:8:46;;;;;2945:1;2964:8;3043:53;2964:8;3073:3;20378:131:33;3043:21:46;:53::i;:::-;3034:62;;3128:9;3118:6;:19;3114:119;;-1:-1:-1;3169:30:46;;-1:-1:-1;3209:1:46;;-1:-1:-1;3209:1:46;;-1:-1:-1;3161:53:46;;-1:-1:-1;;3161:53:46;3114:119;3406:6;3430:125;3457:17;;;1870:13:34;;1823:15;;-1:-1:-1;1886:1:34;1688:14;1862:22;;;;1858:30;;;;7945:41:33;1854::34;1847:49;1840:57;1819:79;3496:1:46;3437:60;3430:125;;3521:15;;3430:125;;;3594:9;3577:13;:26;3573:403;;3628:24;3654:19;3701:72;3748:9;3759:13;3701:46;:72::i;:::-;3627:146;;-1:-1:-1;3627:146:46;-1:-1:-1;3799:22:46;;;;3795:117;;-1:-1:-1;3857:17:46;-1:-1:-1;3884:1:46;;-1:-1:-1;3884:1:46;;-1:-1:-1;3849:40:46;;-1:-1:-1;;;;3849:40:46;3795:117;3945:12;-1:-1:-1;;3573:403:46;4079:1;4067:9;:13;4063:113;;;-1:-1:-1;4112:30:46;;-1:-1:-1;4152:1:46;;-1:-1:-1;4152:1:46;;-1:-1:-1;4104:53:46;;-1:-1:-1;;;4104:53:46;4063:113;4197:10;4193:79;;;4244:9;4243:10;;4231:22;;4193:79;4724:13;4704:9;4697:41;4686:52;;4843:1;4832:8;:12;4828:114;;;-1:-1:-1;4876:32:46;;-1:-1:-1;4918:1:46;;-1:-1:-1;4918:1:46;;-1:-1:-1;4868:55:46;;-1:-1:-1;;;4868:55:46;4828:114;4964:17;4985:1;4964:22;4960:1894;;5030:9;5010:29;;4960:1894;;;5210:13;5234:9;;;5717:2;5709:10;;5705:122;;;-1:-1:-1;5755:34:46;;-1:-1:-1;5799:1:46;;-1:-1:-1;5799:1:46;;-1:-1:-1;5747:57:46;;-1:-1:-1;;;;5747:57:46;5705:122;5856:2;:11;6024:33;;;5998:23;6024:17;5856:11;6024:33;5856:11;6241:32;;;;:::i;:::-;;:53;;;-1:-1:-1;6556:44:46;;;;;;;6241:53;;6626:32;;;6644:14;6626:32;6622:144;;;-1:-1:-1;6694:34:46;;-1:-1:-1;6738:1:46;;-1:-1:-1;6738:1:46;;-1:-1:-1;6686:57:46;;-1:-1:-1;;;;;;;6686:57:46;6622:144;-1:-1:-1;;6807:28:46;;;-1:-1:-1;;4960:1894:46;2915:3953;;2895:3973;1870:13:34;;20571:29:33;1886:1:34;6882:13:46;1862:22:34;;;;1858:30;;;;1854:41;1847:49;1840:57;1823:15;;;1819:79;6974:11:46;;6970:1209;;7005:8;;;;;;7081:55;7005:8;7111:3;7516:41:33;7081:21:46;:55::i;:::-;7072:64;-1:-1:-1;7072:64:46;7235:53;7072:64;7265:3;20378:131:33;7235:21:46;:53::i;:::-;7226:62;;7324:11;7314:6;:21;7310:131;;-1:-1:-1;7371:32:46;;-1:-1:-1;7413:1:46;;-1:-1:-1;7413:1:46;;-1:-1:-1;7363:55:46;;-1:-1:-1;;;;7363:55:46;7310:131;7154:305;7500:21;7523:16;7567:62;7614:6;7622;7567:46;:62::i;:::-;7499:130;;-1:-1:-1;7499:130:46;-1:-1:-1;7655:19:46;;;;7651:111;;-1:-1:-1;7710:14:46;-1:-1:-1;7734:1:46;;-1:-1:-1;7734:1:46;;-1:-1:-1;7702:37:46;;-1:-1:-1;;;;7702:37:46;7651:111;7792:9;-1:-1:-1;;7881:17:46;;;7860:18;7925:10;;:36;;;;;7953:8;7939:11;:22;7925:36;7924:80;;;;7976:1;7967:6;:10;:36;;;;;7995:8;7981:11;:22;7967:36;7920:183;;;-1:-1:-1;8040:25:46;;-1:-1:-1;8075:1:46;;-1:-1:-1;8075:1:46;;-1:-1:-1;8032:48:46;;-1:-1:-1;;;;8032:48:46;7920:183;8135:11;-1:-1:-1;;6970:1209:46;8197:17;8218:1;8197:22;8193:220;;8397:1;8386:12;;8193:220;1954:6469;;;1751:6678;;;;;;;;:::o;6054:800:42:-;6139:6;;;6221:17;;;6213:26;;6386:16;6370:33;;6366:472;;;6583:2;6575:5;:10;6599:1;6588:12;;6610:2;6602:5;:10;6616:1;6602:15;6560:58;;;;;;;;;6366:472;6800:5;;-1:-1:-1;6808:8:42;-1:-1:-1;6818:4:42;;-1:-1:-1;6054:800:42;;;;;;:::o;57066:978:45:-;57151:6;57159:4;57165:6;57211:8;57223:2;57211:14;57207:821;;-1:-1:-1;57253:17:45;;-1:-1:-1;57272:5:45;;-1:-1:-1;57279:1:45;57245:36;;57207:821;57317:2;57306:8;:13;57302:726;;;57354:3;57343:8;:14;57339:98;;;-1:-1:-1;57389:1:45;;-1:-1:-1;;57392:22:45;;;57416:1;57381:37;;57339:98;57454:12;57492:8;57503:1;57492:12;57490:15;;57476:2;:30;57454:53;;57592:15;57630:5;57610:17;:25;;;;;:::i;:::-;;;-1:-1:-1;;57671:16:45;;;:37;;;;-1:-1:-1;57682:5:45;-1:-1:-1;57653:63:45;;57302:726;57753:1;57741:8;:13;57737:291;;-1:-1:-1;57782:1:45;;-1:-1:-1;57782:1:45;;-1:-1:-1;57792:1:45;57774:20;;57737:291;-1:-1:-1;;;57988:1:45;:12;;57974:2;:27;57947:55;;58004:5;58011:1;57939:74;;58539:1243;58674:20;;;1447:3:47;1145:33;1176:2;397:4;1145:33;:::i;:::-;;1176:2;397:4;1145:33;:::i;:::-;1294:23;;1316:1;1294:23;:::i;:::-;58911:24:45;;:1;:24;:::i;:::-;:46;;;;:::i;:::-;:79;;;;:::i;:::-;58890:100;;59102:477;;;59187:1;59184;59177:12;59267:1;59262;59257:2;59250:5;59246:14;59242:22;59234:6;59230:35;59226:2;59218:6;59206:63;59152:6;59312:1;59306:8;59354:24;59346:6;59342:37;59332:47;;59406:1;59403;59396:12;59509:1;59502:2;59495:5;59491:14;59486:2;59480:3;59473:5;59469:15;59465:24;59461:45;59453:6;59449:58;59445:2;59437:6;59425:86;59562:1;59556:8;59538:27;;59102:477;-1:-1:-1;;;;59102:477:45:o;:::-;59610:51;59657:3;59645:10;59625:18;59610:51;:::i;:::-;59593:68;;59677:8;59674:92;;;59705:59;59761:1;59756:3;59752:11;59740:10;59720:18;59705:59;:::i;:::-;59688:76;;59025:751;58539:1243;;;;;;:::o;60320:1618::-;60583:6;60591;60691:13;60675:12;:29;60671:93;;-1:-1:-1;60728:13:45;;-1:-1:-1;60743:9:45;60720:33;;60671:93;60773:33;60816:24;60888;60914:21;60939:54;60943:12;60957:9;60968:13;60983:9;60939:3;:54::i;:::-;60887:106;;;;61032:23;61057:20;61081:55;61085:13;61100:9;61111:13;61126:9;61081:3;:55::i;:::-;61031:105;;;;61253:71;61257:17;61276:14;61292:16;61310:13;61253:3;:71::i;:::-;61187:137;;;;;;;;60851:484;;;;61365:24;61391:21;61416:55;61420:13;61435:9;61446:13;61461:9;61416:3;:55::i;:::-;61364:107;;;;61529:33;61564:24;61604:85;61608:26;61636:17;61655;61674:14;61604:3;:85::i;:::-;61528:161;;;;61752:24;61778:15;61809:76;61813:26;61841:17;61860:13;61875:9;61809:3;:76::i;:::-;61751:134;;-1:-1:-1;61751:134:45;-1:-1:-1;;;;;;;;;60320:1618:45;;;;;;;;;;;:::o;48286:370::-;48374:6;48382;48401:27;48430:18;48450:9;48463:37;48472:17;48491:8;48463;:37::i;:::-;48400:100;;;;;;48515:4;48510:88;;48542:45;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;48542:45:45;5150:302:134;35925:1328:45;36006:14;;1145:33:47;1176:2;397:4;1145:33;:::i;:::-;1294:23;;1316:1;1294:23;:::i;:::-;36104:24:45;;36127:1;36104:24;:::i;:::-;36077:51;-1:-1:-1;36138:24:45;1145:33:47;1176:2;397:4;1145:33;:::i;:::-;36138:46:45;;36537:1;36532:2;36525:5;36521:14;36517:22;36514:1;36510:30;36563:1;36560;36553:12;36614:1;36602:10;36598:2;36590:6;36578:38;;36655:1;36649:8;36699:6;36685:12;36681:25;36671:35;;36754:6;36740:12;36736:25;36729:33;36719:136;;36802:39;;;;36719:136;;36879:1;36876;36869:12;37191:1;37184:2;37177:5;37173:14;37168:2;37162:3;37155:5;37151:15;37147:24;37143:45;37125:16;37121:68;37117:2;37109:6;37097:96;-1:-1:-1;;37234:1:45;37228:8;37216:21;;35925:1328;-1:-1:-1;;35925:1328:45:o;3731:701::-;3818:7;3885:1;3865:17;:21;3861:555;;;3931:16;3910:17;:37;3906:316;;-1:-1:-1;3978:29:45;;3731:701;-1:-1:-1;3731:701:45:o;3906:316::-;-1:-1:-1;4184:18:45;;;3731:701::o;3861:555::-;-1:-1:-1;4383:17:45;3731:701::o;3861:555::-;3731:701;;;:::o;21872:550::-;21933:12;;22319:6;22316:1;22313;22306:20;22346:9;;;;22394:11;;;22380:12;;;;22376:30;;;;;21872:550;-1:-1:-1;;21872:550:45:o;22585:4048::-;22667:14;22694:13;22709;22726:12;22733:1;22736;22726:6;:12::i;:::-;22693:45;;;;22812:5;22821:1;22812:10;22808:109;;22881:11;22873:5;:19;;;;;:::i;:::-;;22866:26;;;;;;22808:109;23024:11;23015:5;:20;23011:91;;23058:33;;;;;;;;8664:25:134;;;8705:18;;;8698:34;;;8748:18;;;8741:34;;;8637:18;;23058:33:45;8468:313:134;23011:91:45;23394:17;23553:11;23550:1;23547;23540:25;24154:1;24139:12;;:16;;24124:32;;24393:25;;;;;25554:1;25535;:15;;25534:21;;25787;;;25783:25;;25772:36;25856:21;;;25852:25;;25841:36;25926:21;;;25922:25;;25911:36;25996:21;;;25992:25;;25981:36;26066:21;;;26062:25;;26051:36;26137:21;;;26133:25;;;26122:36;24106:15;25003;;;24999:29;;;24995:37;;;23659:20;;;23648:32;;;25121:22;;;;23702:21;;;;24565:19;;;;25112:31;;;;26601:15;;-1:-1:-1;;22585:4048:45;;;;;:::o;5040:1698::-;5190:6;5198;5312:1;5307;5303;:5;5302:11;5298:1434;;;5364:16;5333:20;:48;5329:830;;;5429:29;5437:16;5457:1;5429:29;:::i;:::-;5405:20;:53;5401:529;;-1:-1:-1;5600:16:45;;-1:-1:-1;5618:8:45;5592:35;;5401:529;5870:25;5893:2;5870:20;:25;:::i;:::-;5862:34;;;:::i;:::-;5898:12;:8;5909:1;5898:12;:::i;:::-;5854:57;;;;;;5329:830;6104:29;6112:20;6104:29;:::i;:::-;6135:8;6096:48;;;;;;5298:1434;6224:16;6193:20;:48;6189:533;;;6444:25;6467:2;6444:20;:25;:::i;6189:533::-;-1:-1:-1;6675:20:45;;-1:-1:-1;6698:8:45;6660:47;;45918:1994;46002:6;46010;46018:4;46062:17;46083:1;46062:22;46058:134;;-1:-1:-1;1408:1:45;;-1:-1:-1;1408:1:45;;-1:-1:-1;46172:4:45;46104:73;;46058:134;46331:4;46311:17;:24;46339:1;46311:29;46307:1005;;46384:4;46364:17;:24;:29;:66;;;;-1:-1:-1;46409:21:45;46397:33;;;46364:66;46360:174;;;46475:4;46454:25;;;;46513:2;46501:14;;;;46360:174;46576:4;46556:17;:24;:29;:66;;;;-1:-1:-1;46601:21:45;46589:33;;;46556:66;46552:174;;;46667:4;46646:25;;;;46705:2;46693:14;;;;46552:174;46768:4;46748:17;:24;:29;:66;;;;-1:-1:-1;46793:21:45;46781:33;;;46748:66;46744:174;;;46859:4;46838:25;;;;46897:2;46885:14;;;;46744:174;46963:4;46943:17;:24;:29;:65;;;;-1:-1:-1;46988:20:45;46976:32;;;46943:65;46936:174;;;47053:3;47032:24;;;;47090:1;47078:13;;;;46936:174;;;47152:4;47132:17;:24;:29;:65;;;;-1:-1:-1;47177:20:45;47165:32;;;47132:65;47128:170;;;47242:2;47221:23;;;;47278:1;47266:13;;;;47128:170;47606:2;47586:22;;;;;47647:25;47626:17;:46;:82;;;;-1:-1:-1;47688:20:45;47676:32;;;47626:82;47622:192;;;47748:20;47728:40;;47798:1;47786:13;;;;47622:192;-1:-1:-1;47836:17:45;;47855:8;;-1:-1:-1;;;47885:4:45;47865:24;;:29;;;45918:1994::o;1985:168:2:-;2046:13;2100:1;2092:5;:9;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2114:31;2436:3:5;2431:8;;;2576;;;2575:17;2114:8:2;:31::i;:::-;2078:68;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2071:75;;1985:168;;;:::o;1251:634::-;1307:13;1356:14;1373:17;1384:5;1373:10;:17::i;:::-;1393:1;1373:21;1356:38;;1408:20;1442:6;1431:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1431:18:2;-1:-1:-1;1408:41:2;-1:-1:-1;1538:30:2;;;1554:4;1538:30;1595:247;1626:5;;1730:10;1725:2;1714:14;;1709:32;1626:5;1696:46;1786:2;1777:11;;;-1:-1:-1;1806:21:2;1595:247;1806:21;-1:-1:-1;1862:6:2;1251:634;-1:-1:-1;;;1251:634:2:o;835:346:34:-;919:7;1033:109;1107:1;1100:4;1096:1;1086:6;1080:13;1077:1;1072:22;1068:30;1064:41;1061:48;1055:3;1047:6;1044:15;1040:70;1033:109;;;1135:1;1127:6;1123:14;1113:24;;1033:109;;;-1:-1:-1;1168:6:34;;835:346;-1:-1:-1;;835:346:34:o;5044:1463:35:-;1870:13:34;;5135:6:35;;;;7516:41:33;1886:1:34;1862:22;;;1858:30;;;;1854:41;1847:49;1840:57;1823:15;;;1819:79;5304:15:35;;;;5135:6;;5374:53;5304:15;1823::34;5374:40:35;:53::i;:::-;5334:93;;-1:-1:-1;5334:93:35;-1:-1:-1;5476:26:35;;;;5472:90;;-1:-1:-1;5530:13:35;-1:-1:-1;5545:1:35;;-1:-1:-1;5522:25:35;;-1:-1:-1;;5522:25:35;5472:90;5618:5;5627:1;5618:10;5614:341;;5863:16;5847:5;:33;:77;;5922:1;5847:77;;;5883:29;5847:77;5839:101;-1:-1:-1;5933:5:35;-1:-1:-1;5839:101:35;;-1:-1:-1;;;5839:101:35;5614:341;6400:29;6392:37;;:81;;6471:1;6392:81;;;6432:29;6392:81;6384:106;-1:-1:-1;6475:14:35;;;-1:-1:-1;;;;5044:1463:35;;;;;:::o;29471:916:3:-;29524:7;;29608:8;29599:17;;29595:103;;29645:8;29636:17;;;-1:-1:-1;29681:2:3;29671:12;29595:103;29724:8;29715:5;:17;29711:103;;29761:8;29752:17;;;-1:-1:-1;29797:2:3;29787:12;29711:103;29840:8;29831:5;:17;29827:103;;29877:8;29868:17;;;-1:-1:-1;29913:2:3;29903:12;29827:103;29956:7;29947:5;:16;29943:100;;29992:7;29983:16;;;-1:-1:-1;30027:1:3;30017:11;29943:100;30069:7;30060:5;:16;30056:100;;30105:7;30096:16;;;-1:-1:-1;30140:1:3;30130:11;30056:100;30182:7;30173:5;:16;30169:100;;30218:7;30209:16;;;-1:-1:-1;30253:1:3;30243:11;30169:100;30295:7;30286:5;:16;30282:66;;30332:1;30322:11;30374:6;29471:916;-1:-1:-1;;29471:916:3:o;1114:3326:35:-;1199:6;1207:7;1263:3;1254:5;:12;1250:95;;-1:-1:-1;1294:32:35;;-1:-1:-1;1328:1:35;1286:44;;1250:95;1511:5;1520:1;1511:10;1507:80;;1548:24;;;;;;;;;;;;;;1507:80;1808:18;1778:19;1912:7;;;1778:19;2083:486;2100:5;2090:6;:15;;:32;;;;;2120:2;2109:8;:13;2090:32;2083:486;;;2434:13;;2518:10;;;;2546:8;;;;;2468:2;2464:17;2431:1;2426:22;;;;2422:40;;;2418:64;2407:76;2083:486;;;2785:5;2775:6;:15;2771:1613;;2939:13;;2832;2931:22;2927:40;;;3167:1;3159:9;;3155:393;;;-1:-1:-1;3204:29:35;;-1:-1:-1;3235:1:35;;-1:-1:-1;3196:41:35;;-1:-1:-1;;;;3196:41:35;3155:393;3318:2;:14;;;3309:24;;3363:14;;;:22;-1:-1:-1;3359:126:35;;;-1:-1:-1;3425:29:35;;-1:-1:-1;3456:1:35;;-1:-1:-1;3417:41:35;;-1:-1:-1;;;;;3417:41:35;3359:126;3510:15;;;;;-1:-1:-1;3569:8:35;;;;;3760:592;3777:5;3767:6;:15;3760:592;;4007:13;;3876:23;3999:22;4177:18;4150:46;;4146:150;;-1:-1:-1;4236:29:35;;-1:-1:-1;4267:1:35;;-1:-1:-1;4228:41:35;;-1:-1:-1;;;;4228:41:35;4146:150;-1:-1:-1;4321:8:35;;;;;3760:592;;;4413:1;;4417:5;;-1:-1:-1;1114:3326:35;-1:-1:-1;;;;;;1114:3326:35:o;14:207:134:-;100:6;153:2;141:9;132:7;128:23;124:32;121:52;;;169:1;166;159:12;121:52;-1:-1:-1;192:23:134;;14:207;-1:-1:-1;14:207:134:o;435:302::-;557:6;565;618:2;606:9;597:7;593:23;589:32;586:52;;;634:1;631;624:12;586:52;-1:-1:-1;;657:23:134;;;727:2;712:18;;;699:32;;-1:-1:-1;435:302:134:o;742:156::-;808:20;;868:4;857:16;;847:27;;837:55;;888:1;885;878:12;903:277;996:6;1004;1057:2;1045:9;1036:7;1032:23;1028:32;1025:52;;;1073:1;1070;1063:12;1025:52;1109:9;1096:23;1086:33;;1138:36;1170:2;1159:9;1155:18;1138:36;:::i;:::-;1128:46;;903:277;;;;;:::o;1640:368::-;1732:6;1740;1793:2;1781:9;1772:7;1768:23;1764:32;1761:52;;;1809:1;1806;1799:12;1761:52;1845:9;1832:23;1822:33;;1905:2;1894:9;1890:18;1877:32;1952:5;1945:13;1938:21;1931:5;1928:32;1918:60;;1974:1;1971;1964:12;1918:60;1997:5;1987:15;;;1640:368;;;;;:::o;2013:477::-;2162:2;2151:9;2144:21;2125:4;2194:6;2188:13;2237:6;2232:2;2221:9;2217:18;2210:34;2296:6;2291:2;2283:6;2279:15;2274:2;2263:9;2259:18;2253:50;2352:1;2347:2;2338:6;2327:9;2323:22;2319:31;2312:42;2481:2;2411:66;2406:2;2398:6;2394:15;2390:88;2379:9;2375:104;2371:113;2363:121;;;2013:477;;;;:::o;2932:184::-;2984:77;2981:1;2974:88;3081:4;3078:1;3071:15;3105:4;3102:1;3095:15;3121:981;3190:6;3243:2;3231:9;3222:7;3218:23;3214:32;3211:52;;;3259:1;3256;3249:12;3211:52;3299:9;3286:23;3328:18;3369:2;3361:6;3358:14;3355:34;;;3385:1;3382;3375:12;3355:34;3423:6;3412:9;3408:22;3398:32;;3468:7;3461:4;3457:2;3453:13;3449:27;3439:55;;3490:1;3487;3480:12;3439:55;3526:2;3513:16;3548:2;3544;3541:10;3538:36;;;3554:18;;:::i;:::-;3688:2;3682:9;3750:4;3742:13;;3593:66;3738:22;;;3762:2;3734:31;3730:40;3718:53;;;3786:18;;;3806:22;;;3783:46;3780:72;;;3832:18;;:::i;:::-;3872:10;3868:2;3861:22;3907:2;3899:6;3892:18;3947:7;3942:2;3937;3933;3929:11;3925:20;3922:33;3919:53;;;3968:1;3965;3958:12;3919:53;4024:2;4019;4015;4011:11;4006:2;3998:6;3994:15;3981:46;4069:1;4047:15;;;4064:2;4043:24;4036:35;;;;-1:-1:-1;4051:6:134;3121:981;-1:-1:-1;;;;;3121:981:134:o;4458:397::-;4616:6;4624;4632;4685:2;4673:9;4664:7;4660:23;4656:32;4653:52;;;4701:1;4698;4691:12;4653:52;-1:-1:-1;;4724:23:134;;;4794:2;4779:18;;4766:32;;-1:-1:-1;4845:2:134;4830:18;;;4817:32;;4458:397;-1:-1:-1;4458:397:134:o;5706:184::-;5758:77;5755:1;5748:88;5855:4;5852:1;5845:15;5879:4;5876:1;5869:15;5895:184;5947:77;5944:1;5937:88;6044:4;6041:1;6034:15;6068:4;6065:1;6058:15;6084:476;6173:1;6210:5;6173:1;6224:330;6245:7;6235:8;6232:21;6224:330;;;6364:4;6296:66;6292:77;6286:4;6283:87;6280:113;;;6373:18;;:::i;:::-;6423:7;6413:8;6409:22;6406:55;;;6443:16;;;;6406:55;6522:22;;;;6482:15;;;;6224:330;;;6228:3;6084:476;;;;;:::o;6565:866::-;6614:5;6644:8;6634:80;;-1:-1:-1;6685:1:134;6699:5;;6634:80;6733:4;6723:76;;-1:-1:-1;6770:1:134;6784:5;;6723:76;6815:4;6833:1;6828:59;;;;6901:1;6896:130;;;;6808:218;;6828:59;6858:1;6849:10;;6872:5;;;6896:130;6933:3;6923:8;6920:17;6917:43;;;6940:18;;:::i;:::-;-1:-1:-1;;6996:1:134;6982:16;;7011:5;;6808:218;;7110:2;7100:8;7097:16;7091:3;7085:4;7082:13;7078:36;7072:2;7062:8;7059:16;7054:2;7048:4;7045:12;7041:35;7038:77;7035:159;;;-1:-1:-1;7147:19:134;;;7179:5;;7035:159;7226:34;7251:8;7245:4;7226:34;:::i;:::-;7356:6;7288:66;7284:79;7275:7;7272:92;7269:118;;;7367:18;;:::i;:::-;7405:20;;6565:866;-1:-1:-1;;;6565:866:134:o;7436:131::-;7496:5;7525:36;7552:8;7546:4;7525:36;:::i;7572:168::-;7645:9;;;7676;;7693:15;;;7687:22;;7673:37;7663:71;;7714:18;;:::i;7745:200::-;7811:9;;;7784:4;7839:9;;7867:10;;7879:12;;;7863:29;7902:12;;;7894:21;;7860:56;7857:82;;;7919:18;;:::i;:::-;7857:82;7745:200;;;;:::o;7950:216::-;8014:9;;;8042:11;;;7989:3;8072:9;;8100:10;;8096:19;;8125:10;;8117:19;;8093:44;8090:70;;;8140:18;;:::i;:::-;8090:70;;7950:216;;;;:::o;8171:292::-;8243:9;;;8210:7;8268:9;;8285:66;8279:73;;8264:89;8261:115;;;8356:18;;:::i;:::-;8429:1;8420:7;8415:16;8412:1;8409:23;8405:1;8398:9;8395:38;8385:72;;8437:18;;:::i;8786:308::-;8825:1;8851;8841:35;;8856:18;;:::i;:::-;8973:66;8970:1;8967:73;8898:66;8895:1;8892:73;8888:153;8885:179;;;9044:18;;:::i;:::-;-1:-1:-1;9078:10:134;;8786:308::o;9099:112::-;9130:1;9156;9146:35;;9161:18;;:::i;:::-;-1:-1:-1;9195:10:134;;9099:112::o;9216:191::-;9251:3;9282:66;9275:5;9272:77;9269:103;;9352:18;;:::i;9412:120::-;9452:1;9478;9468:35;;9483:18;;:::i;:::-;-1:-1:-1;9517:9:134;;9412:120::o;9537:195::-;9576:3;9607:66;9600:5;9597:77;9594:103;;9677:18;;:::i;:::-;-1:-1:-1;9724:1:134;9713:13;;9537:195::o;9737:212::-;9779:3;9817:5;9811:12;9861:6;9854:4;9847:5;9843:16;9838:3;9832:36;9923:1;9887:16;;9912:13;;;-1:-1:-1;9887:16:134;;9737:212;-1:-1:-1;9737:212:134:o;9954:344::-;10175:3;10206:30;10232:3;10224:6;10206:30;:::i;:::-;10259:3;10245:18;;10290:1;10279:13;;9954:344;-1:-1:-1;;;9954:344:134:o;10303:390::-;10602:3;10597;10590:16;10572:3;10622:65;10648:38;10683:1;10678:3;10674:11;10666:6;10648:38;:::i;:::-;10640:6;10622:65;:::i;:::-;10615:72;10303:390;-1:-1:-1;;;;10303:390:134:o;10698:315::-;10949:3;10944;10937:16;10919:3;10969:38;11004:1;10999:3;10995:11;10987:6;10969:38;:::i;11018:417::-;11293:3;11318:111;11344:84;11370:57;11396:30;11422:3;11414:6;11396:30;:::i;:::-;11388:6;11370:57;:::i;:::-;11362:6;11344:84;:::i;11318:111::-;11311:118;11018:417;-1:-1:-1;;;;;;11018:417:134:o;11620:128::-;11687:9;;;11708:11;;;11705:37;;;11722:18;;:::i;11753:184::-;11805:77;11802:1;11795:88;11902:4;11899:1;11892:15;11926:4;11923:1;11916:15;11942:125;12007:9;;;12028:10;;;12025:36;;;12041:18;;:::i;12072:267::-;12251:3;12276:57;12302:30;12328:3;12320:6;12302:30;:::i","linkReferences":{}},"methodIdentifiers":{"FORMAT_DEFAULT_SCIENTIFIC_MAX()":"9b4afd99","FORMAT_DEFAULT_SCIENTIFIC_MIN()":"d35273a7","abs(bytes32)":"81a82272","add(bytes32,bytes32)":"d1de592a","ceil(bytes32)":"719cd99d","div(bytes32,bytes32)":"30297400","e()":"ffae15ba","eq(bytes32,bytes32)":"3447c030","floor(bytes32)":"5ca0e7a4","format(bytes32)":"a100a3d9","format(bytes32,bool)":"371493ce","format(bytes32,bytes32,bytes32)":"e5526ecd","frac(bytes32)":"28fa1f01","fromFixedDecimalLossless(uint256,uint8)":"3b3bd868","fromFixedDecimalLossy(uint256,uint8)":"e75f991f","gt(bytes32,bytes32)":"8dc29807","gte(bytes32,bytes32)":"73bfb283","integer(bytes32)":"e0db5888","inv(bytes32)":"04327dc5","isZero(bytes32)":"dd646917","log10(bytes32)":"25388350","lt(bytes32,bytes32)":"d102b4d3","lte(bytes32,bytes32)":"81f7e2f5","max(bytes32,bytes32)":"078b665b","maxNegativeValue()":"602c35fc","maxPositiveValue()":"cb09682b","min(bytes32,bytes32)":"a90d041a","minNegativeValue()":"cde72ef3","minPositiveValue()":"a19684b7","minus(bytes32)":"d3d6ffa8","mul(bytes32,bytes32)":"96ce1ec7","parse(string)":"bc62d8d8","pow(bytes32,bytes32)":"3004fa41","pow10(bytes32)":"1ee62f11","sqrt(bytes32)":"146e82ad","sub(bytes32,bytes32)":"41aa0080","toFixedDecimalLossless(bytes32,uint8)":"5b23771d","toFixedDecimalLossy(bytes32,uint8)":"0b6429bc","zero()":"bc1b392d"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"CoefficientOverflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"DivisionByZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"ExponentOverflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"Log10Negative\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Log10Zero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tablesAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"expectedCodehash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"actualCodehash\",\"type\":\"bytes32\"}],\"name\":\"LogTablesNotDeployed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"LossyConversionFromFloat\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"LossyConversionToFloat\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"MaximizeOverflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denominator\",\"type\":\"uint256\"}],\"name\":\"MulDivOverflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"NegativeFixedDecimalConversion\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"PowNegativeBase\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"scientificMin\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"scientificMax\",\"type\":\"bytes32\"}],\"name\":\"ScientificMinNotLessThanMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"UnformatableExponent\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"targetExponent\",\"type\":\"int256\"}],\"name\":\"WithTargetExponentOverflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"ZeroNegativePower\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroStringStartPointer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FORMAT_DEFAULT_SCIENTIFIC_MAX\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FORMAT_DEFAULT_SCIENTIFIC_MIN\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"abs\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"add\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"ceil\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"div\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"e\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"eq\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"floor\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"scientific\",\"type\":\"bool\"}],\"name\":\"format\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"format\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"scientificMin\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"scientificMax\",\"type\":\"bytes32\"}],\"name\":\"format\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"frac\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"name\":\"fromFixedDecimalLossless\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"name\":\"fromFixedDecimalLossy\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"gt\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"gte\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"integer\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"inv\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"isZero\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"log10\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"lt\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"lte\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"max\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxNegativeValue\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxPositiveValue\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"min\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minNegativeValue\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minPositiveValue\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"minus\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"mul\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"str\",\"type\":\"string\"}],\"name\":\"parse\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"},{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"pow\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"pow10\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"sqrt\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"sub\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"float\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"name\":\"toFixedDecimalLossless\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"float\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"name\":\"toFixedDecimalLossy\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"zero\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"CoefficientOverflow(int256,int256)\":[{\"details\":\"Thrown when a coefficient overflows.\"}],\"DivisionByZero(int256,int256)\":[{\"details\":\"Thrown when dividing by zero.\",\"params\":{\"exponent\":\"The exponent of the numerator.\",\"signedCoefficient\":\"The signed coefficient of the numerator.\"}}],\"ExponentOverflow(int256,int256)\":[{\"details\":\"Thrown when an exponent overflows.\"}],\"Log10Negative(int256,int256)\":[{\"details\":\"Thrown when attempting to calculate the log of a negative number.\"}],\"Log10Zero()\":[{\"details\":\"Thrown when attempting to calculate the log of 0.\"}],\"LogTablesNotDeployed(address,bytes32,bytes32)\":[{\"details\":\"Thrown when constructing a `DecimalFloat` on a chain where the log tables data contract is not deployed at the expected address with the expected codehash. Without this check, transcendental functions (`pow10`/`log10`/`pow`/`sqrt`) would silently `extcodecopy` zero bytes and return garbage.\",\"params\":{\"actualCodehash\":\"The codehash currently at `tablesAddress` (zero if no contract is deployed there).\",\"expectedCodehash\":\"The codehash the deployed table contract is expected to have.\",\"tablesAddress\":\"The address `DecimalFloat` was compiled to read log tables from.\"}}],\"LossyConversionFromFloat(int256,int256)\":[{\"details\":\"Thrown when converting a float to some value when the conversion is lossy.\"}],\"LossyConversionToFloat(int256,int256)\":[{\"details\":\"Thrown when converting some value to a float when the conversion is lossy.\"}],\"MaximizeOverflow(int256,int256)\":[{\"details\":\"Thrown when a maximize overflows where it is not appropriate.\"}],\"MulDivOverflow(uint256,uint256,uint256)\":[{\"details\":\"Thrown when mulDiv internal to division overflows.\"}],\"NegativeFixedDecimalConversion(int256,int256)\":[{\"details\":\"Thrown when attempting to convert a negative number to an unsigned fixed-point number.\"}],\"PowNegativeBase(int256,int256)\":[{\"details\":\"Thrown when attempting to exponentiate a negative base.\"}],\"ScientificMinNotLessThanMax(bytes32,bytes32)\":[{\"details\":\"Thrown when scientificMin is not less than scientificMax in format.\",\"params\":{\"scientificMax\":\"The maximum threshold for scientific notation.\",\"scientificMin\":\"The minimum threshold for scientific notation.\"}}],\"UnformatableExponent(int256)\":[{\"details\":\"Thrown when the exponent cannot be formatted.\",\"params\":{\"exponent\":\"The exponent that cannot be formatted.\"}}],\"WithTargetExponentOverflow(int256,int256,int256)\":[{\"details\":\"Thrown when attempting to rescale a coefficient to a target exponent\"}],\"ZeroNegativePower(bytes32)\":[{\"details\":\"Thrown when attempting to exponentiate 0^b where b is negative.\"}]},\"kind\":\"dev\",\"methods\":{\"abs(bytes32)\":{\"params\":{\"a\":\"The float to get the absolute value of.\"},\"returns\":{\"_0\":\"The absolute value of the float.\"}},\"add(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to add.\",\"b\":\"The second float to add.\"},\"returns\":{\"_0\":\"The sum of the two floats.\"}},\"ceil(bytes32)\":{\"params\":{\"a\":\"The float to get the ceiling of.\"},\"returns\":{\"_0\":\"The ceiled float.\"}},\"div(bytes32,bytes32)\":{\"params\":{\"a\":\"The dividend (numerator).\",\"b\":\"The divisor (denominator).\"},\"returns\":{\"_0\":\"The quotient of the two floats.\"}},\"e()\":{\"returns\":{\"_0\":\"The constant value of Euler's number as a Float.\"}},\"eq(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to compare.\",\"b\":\"The second float to compare.\"},\"returns\":{\"_0\":\"True if the two floats are equal, false otherwise.\"}},\"floor(bytes32)\":{\"params\":{\"a\":\"The float to get the floor of.\"},\"returns\":{\"_0\":\"The floored float.\"}},\"format(bytes32)\":{\"params\":{\"a\":\"The float to format.\"},\"returns\":{\"_0\":\"The string representation of the float.\"}},\"format(bytes32,bool)\":{\"params\":{\"a\":\"The float to format.\",\"scientific\":\"Whether to format the float in scientific notation.\"},\"returns\":{\"_0\":\"The string representation of the float.\"}},\"format(bytes32,bytes32,bytes32)\":{\"params\":{\"a\":\"The float to format. The absolute value of `a` is used to determine if scientific notation is used, this allows negative numbers to be formatted consistently with their positive counterparts.\",\"scientificMax\":\"The largest number that won't be formatted in scientific notation.\",\"scientificMin\":\"The smallest number that won't be formatted in scientific notation.\"},\"returns\":{\"_0\":\"The string representation of the float.\"}},\"frac(bytes32)\":{\"params\":{\"a\":\"The float to get the fractional part of.\"},\"returns\":{\"_0\":\"The fractional part of the float.\"}},\"fromFixedDecimalLossless(uint256,uint8)\":{\"params\":{\"decimals\":\"The number of decimals in the fixed point representation. e.g. If 1e18 represents 1 this would be 18 decimals.\",\"value\":\"The fixed point decimal value to convert.\"},\"returns\":{\"_0\":\"float The Float struct containing the signed coefficient and exponent.\"}},\"fromFixedDecimalLossy(uint256,uint8)\":{\"params\":{\"decimals\":\"The number of decimals in the fixed point representation. e.g. If 1e18 represents 1 this would be 18 decimals.\",\"value\":\"The fixed point decimal value to convert.\"},\"returns\":{\"_0\":\"float The Float struct containing the signed coefficient and exponent.\",\"_1\":\"lossless True if the conversion was lossless, false otherwise.\"}},\"gt(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to compare.\",\"b\":\"The second float to compare.\"},\"returns\":{\"_0\":\"True if the first float is greater than the second, false otherwise.\"}},\"gte(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to compare.\",\"b\":\"The second float to compare.\"},\"returns\":{\"_0\":\"True if the first float is greater than or equal to the second, false otherwise.\"}},\"integer(bytes32)\":{\"params\":{\"a\":\"The float to get the integer part of.\"},\"returns\":{\"_0\":\"The integer part of the float.\"}},\"inv(bytes32)\":{\"params\":{\"a\":\"The float to invert.\"},\"returns\":{\"_0\":\"The inverted float.\"}},\"isZero(bytes32)\":{\"params\":{\"a\":\"The float to check.\"},\"returns\":{\"_0\":\"True if the float is zero, false otherwise.\"}},\"log10(bytes32)\":{\"params\":{\"a\":\"The float to take the logarithm of.\"},\"returns\":{\"_0\":\"The logarithm of the float.\"}},\"lt(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to compare.\",\"b\":\"The second float to compare.\"},\"returns\":{\"_0\":\"True if the first float is less than the second, false otherwise.\"}},\"lte(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to compare.\",\"b\":\"The second float to compare.\"},\"returns\":{\"_0\":\"True if the first float is less than or equal to the second, false otherwise.\"}},\"max(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to compare.\",\"b\":\"The second float to compare.\"},\"returns\":{\"_0\":\"The larger of the two floats.\"}},\"maxNegativeValue()\":{\"returns\":{\"_0\":\"The maximum negative value of a Float.\"}},\"maxPositiveValue()\":{\"returns\":{\"_0\":\"The maximum positive value of a Float.\"}},\"min(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to compare.\",\"b\":\"The second float to compare.\"},\"returns\":{\"_0\":\"The smaller of the two floats.\"}},\"minNegativeValue()\":{\"returns\":{\"_0\":\"The minimum negative value of a Float.\"}},\"minPositiveValue()\":{\"returns\":{\"_0\":\"The minimum positive value of a Float.\"}},\"minus(bytes32)\":{\"params\":{\"a\":\"The float to negate.\"},\"returns\":{\"_0\":\"The negated float.\"}},\"mul(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to multiply.\",\"b\":\"The second float to multiply.\"},\"returns\":{\"_0\":\"The product of the two floats.\"}},\"parse(string)\":{\"params\":{\"str\":\"The string to parse.\"},\"returns\":{\"_0\":\"errorSelector The selector of the error if parsing failed. `0` if parsing succeeded.\",\"_1\":\"parsed The parsed float. Caller MUST check `errorSelector` to determine if parsing succeeded.\"}},\"pow(bytes32,bytes32)\":{\"params\":{\"a\":\"The base float.\",\"b\":\"The exponent float.\"},\"returns\":{\"_0\":\"The result of raising the base float to the power of the exponent\"}},\"pow10(bytes32)\":{\"params\":{\"a\":\"The exponent to raise 10 to.\"},\"returns\":{\"_0\":\"The result of 10^a.\"}},\"sqrt(bytes32)\":{\"params\":{\"a\":\"The float to take the square root of.\"},\"returns\":{\"_0\":\"The square root of the float.\"}},\"sub(bytes32,bytes32)\":{\"params\":{\"a\":\"The float to subtract from.\",\"b\":\"The float to subtract.\"},\"returns\":{\"_0\":\"The difference of the two floats.\"}},\"toFixedDecimalLossless(bytes32,uint8)\":{\"params\":{\"decimals\":\"The number of decimals in the fixed point representation. e.g. If 1e18 represents 1 this would be 18 decimals.\",\"float\":\"The Float struct to convert.\"},\"returns\":{\"_0\":\"The fixed point decimal value as a uint256.\"}},\"toFixedDecimalLossy(bytes32,uint8)\":{\"params\":{\"decimals\":\"The number of decimals in the fixed point representation. e.g. If 1e18 represents 1 this would be 18 decimals.\",\"float\":\"The Float struct to convert.\"},\"returns\":{\"_0\":\"value The fixed point decimal value as a uint256.\",\"_1\":\"lossless True if the conversion was lossless, false otherwise.\"}},\"zero()\":{\"returns\":{\"_0\":\"The zero value of a Float in its maximized representation.\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"ZeroStringStartPointer()\":[{\"notice\":\"The decimal string start pointer is zero.\"}]},\"kind\":\"user\",\"methods\":{\"FORMAT_DEFAULT_SCIENTIFIC_MAX()\":{\"notice\":\"The default maximum value for scientific formatting. 1e9\"},\"FORMAT_DEFAULT_SCIENTIFIC_MIN()\":{\"notice\":\"The default minimum value for scientific formatting. 1e-4\"},\"abs(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.abs` for offchain use.\"},\"add(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.add` for offchain use.\"},\"ceil(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.ceil` for offchain use.\"},\"div(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.div` for offchain use.\"},\"e()\":{\"notice\":\"Exposes `LibDecimalFloat.FLOAT_E` for offchain use.\"},\"eq(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.eq` for offchain use.\"},\"floor(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.floor` for offchain use.\"},\"format(bytes32)\":{\"notice\":\"Exposes `format(Float, Float, Float)` for offchain use. Provides default scientific formatting.\"},\"format(bytes32,bool)\":{\"notice\":\"Exposes `LibFormatDecimalFloat.toDecimalString` for offchain use. provides raw bool interface for custom scientific formatting.\"},\"format(bytes32,bytes32,bytes32)\":{\"notice\":\"Exposes `LibFormatDecimalFloat.toDecimalString` for offchain use.\"},\"frac(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.frac` for offchain use.\"},\"fromFixedDecimalLossless(uint256,uint8)\":{\"notice\":\"Exposes `LibDecimalFloat.fromFixedDecimalLosslessPacked` for offchain use.\"},\"fromFixedDecimalLossy(uint256,uint8)\":{\"notice\":\"Exposes `LibDecimalFloat.fromFixedDecimalLossyPacked` for offchain use.\"},\"gt(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.gt` for offchain use.\"},\"gte(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.gte` for offchain use.\"},\"integer(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.integer` for offchain use.\"},\"inv(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.inv` for offchain use.\"},\"isZero(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.isZero` for offchain use.\"},\"log10(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.log10` for offchain use.\"},\"lt(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.lt` for offchain use.\"},\"lte(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.lte` for offchain use.\"},\"max(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.max` for offchain use.\"},\"maxNegativeValue()\":{\"notice\":\"Exposes `LibDecimalFloat.FLOAT_MAX_NEGATIVE_VALUE` for offchain use.\"},\"maxPositiveValue()\":{\"notice\":\"Exposes `LibDecimalFloat.FLOAT_MAX_POSITIVE_VALUE` for offchain use.\"},\"min(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.min` for offchain use.\"},\"minNegativeValue()\":{\"notice\":\"Exposes `LibDecimalFloat.FLOAT_MIN_NEGATIVE_VALUE` for offchain use.\"},\"minPositiveValue()\":{\"notice\":\"Exposes `LibDecimalFloat.FLOAT_MIN_POSITIVE_VALUE` for offchain use.\"},\"minus(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.minus` for offchain use.\"},\"mul(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.mul` for offchain use.\"},\"parse(string)\":{\"notice\":\"Exposes `LibParseDecimalFloat.parseDecimalFloat` for offchain use.\"},\"pow(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.pow` for offchain use.\"},\"pow10(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.pow10` for offchain use.\"},\"sqrt(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.sqrt` for offchain use.\"},\"sub(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.sub` for offchain use.\"},\"toFixedDecimalLossless(bytes32,uint8)\":{\"notice\":\"Exposes `LibDecimalFloat.toFixedDecimalLossless` for offchain use.\"},\"toFixedDecimalLossy(bytes32,uint8)\":{\"notice\":\"Exposes `LibDecimalFloat.toFixedDecimalLossy` for offchain use.\"},\"zero()\":{\"notice\":\"Exposes `LibDecimalFloat.FLOAT_ZERO` for offchain use.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/concrete/DecimalFloat.sol\":\"DecimalFloat\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"appendCBOR\":false,\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[\":@openzeppelin-contracts-5.6.1/=dependencies/@openzeppelin-contracts-5.6.1/\",\":forge-std-1.16.1/=dependencies/forge-std-1.16.1/\",\":mut/=dependencies/rain-string-0.2.0/src/lib/mut/\",\":parse/=dependencies/rain-string-0.2.0/src/lib/parse/\",\":rain-datacontract-0.1.0/=dependencies/rain-datacontract-0.1.0/\",\":rain-deploy-0.1.2/=dependencies/rain-deploy-0.1.2/\",\":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/\"]},\"sources\":{\"dependencies/@openzeppelin-contracts-5.6.1/utils/Bytes.sol\":{\"keccak256\":\"0xf80e4b96b6849936ea0fabd76cf81b13d7276295fddb1e1c07afb3ddf650b0ac\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6430007255ac11c6e9c4331a418f3af52ff66fbbae959f645301d025b20aeb08\",\"dweb:/ipfs/QmQE5fjmBBRw9ndnzJuC2uskYss1gbaR7JdazoCf1FGoBj\"]},\"dependencies/@openzeppelin-contracts-5.6.1/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"dependencies/@openzeppelin-contracts-5.6.1/utils/Strings.sol\":{\"keccak256\":\"0x1fdc2de9585ab0f1c417f02a873a2b6343cd64bb7ffec6b00ffa11a4a158d9e8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ab223a3d969c6cd7610049431dd42740960c477e45878f5d8b54411f7a32bdc\",\"dweb:/ipfs/QmWumhjvhpKcwx3vDPQninsNVTc3BGvqaihkQakFkQYpaS\"]},\"dependencies/@openzeppelin-contracts-5.6.1/utils/math/Math.sol\":{\"keccak256\":\"0x59973a93b1f983f94e10529f46ca46544a9fec2b5f56fb1390bbe9e0dc79f857\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c55ef8f0b9719790c2ae6f81d80a59ffb89f2f0abe6bc065585bd79edce058c5\",\"dweb:/ipfs/QmNNmCbX9NjPXKqHJN8R1WC2rNeZSQrPZLd6FF6AKLyH5Y\"]},\"dependencies/@openzeppelin-contracts-5.6.1/utils/math/SafeCast.sol\":{\"keccak256\":\"0xc8cae21c9ae4a46e5162ff9bf5b351d6fa6a6eba72d515f3bc1bdfeda7fdf083\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce830ebcf28e31643caba318996db3763c36d52cd0f23798ba83c135355d45e9\",\"dweb:/ipfs/QmdGPcvptHN7UBCbUYBbRX3hiRVRFLRwno8b4uga6uFNif\"]},\"dependencies/@openzeppelin-contracts-5.6.1/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]},\"dependencies/rain-string-0.2.0/src/error/ErrParse.sol\":{\"keccak256\":\"0x7a69236ad67e39c20f6ade7973ec551c9a5bb5db4671c8afa95b80f35a996497\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://4731c6ea05b4e820814380dbbd6dac14f5778a1e9194b8992148cf97a99ffbb2\",\"dweb:/ipfs/QmUMnKNt2zQ42fjS4fpLqodXytiffVFzaKupAm8rNsrYVo\"]},\"dependencies/rain-string-0.2.0/src/lib/parse/LibParseCMask.sol\":{\"keccak256\":\"0x91e798a6f71aafbd4743720eaa38a7f16f74c6c0ab2992e7e4982979e9df539a\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://4782e62e0e5a5fbc7d6c757dcc90347d7ad064f25372a6c471ffa968e12b91d7\",\"dweb:/ipfs/QmPohMsVTjm19gxYwxgAsTKJQRjkK2J1Pyah63nCtYBBnt\"]},\"dependencies/rain-string-0.2.0/src/lib/parse/LibParseChar.sol\":{\"keccak256\":\"0x66c401d784e9461f709116441de3707685e08438cd83553db28fe8caf0e97238\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://e6027d0f9d558953686f6eb78ca0b2f2e7d9d38e0be6d1435ffaaa4b90919593\",\"dweb:/ipfs/QmQXDMTzmJrst2a4kHkcfjSsEdnPc4ikQs7VfGbCfe9QCc\"]},\"dependencies/rain-string-0.2.0/src/lib/parse/LibParseDecimal.sol\":{\"keccak256\":\"0x72ccc4d7e0a1245897511e1efc15ddc80d423a8eb956249be7940a8e8f4e99fe\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://3ca57acd6a7cbe16f2c03aa5a6e81ec7af1ad44078924358578560a32aead7c0\",\"dweb:/ipfs/QmNukyUMS4JrzNHAYcpLbtYsD5CwYPEjfAaADv6qMZmqs6\"]},\"src/concrete/DecimalFloat.sol\":{\"keccak256\":\"0x6326a6b5ffef0708b84712c0b891dfc7f2d88c38191628da1f40933951f2683b\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://ad99eda6cc266d5d160439700d3c89a487e8e31d51538f2ad83435a1aac9f3ae\",\"dweb:/ipfs/QmarsuZkgqG7jT9mYBh1VKNvjD5ZsVtJJTiRGbfMQAY669\"]},\"src/error/ErrDecimalFloat.sol\":{\"keccak256\":\"0x53825ff4d1af4981100de46bd7536c611625fe7930b5c21921838cfed3a92243\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://961197f4c7b6d560f71f67892bfd5b64300be0f0fdb20162058938567653643e\",\"dweb:/ipfs/QmTJzmA5CEkmYrXJ2MHnfQ3wGm1Qj6xE1vNaqAqgUpEnvA\"]},\"src/error/ErrFormat.sol\":{\"keccak256\":\"0xc760cb6018291753e7408d55d12d5e66c116f9750dc241bbc201f3b46ae33aa7\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://cbc81bb7c26c8503926b579f978902bcc3227839bee04bd3500cc924d142d28e\",\"dweb:/ipfs/QmXqMuqBCpckD1EnsBjweyLdRZxpvC2xSP9FWBZFh2vztR\"]},\"src/error/ErrParse.sol\":{\"keccak256\":\"0x7fc9fe7421d78306d252d2853fd1be943d9cbd12ff7a9c8c3f286a8164bfe357\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://7b4c434d01b53788968d185683d9633afa26d95396b1e91337a53ccaab0d44ab\",\"dweb:/ipfs/QmQHmVjR37wwrCskiQviwkg7WkeBpr9uPddjuDxqzANXeV\"]},\"src/generated/LogTables.pointers.sol\":{\"keccak256\":\"0x2325d92e3e248350a79f163fcb8738056ae4240b6a77f759ff5fcbf7b381f5ae\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://9a52674114518573de7d184094b266bc2b5208953086f8ec35a494f048deefbb\",\"dweb:/ipfs/QmTjuj1R9k4pFMBVpX6RcWG87Rdh9pRTZVHYo93SzBfmsH\"]},\"src/lib/LibDecimalFloat.sol\":{\"keccak256\":\"0x59d2dad4b7e861ed835a79c61ae42b4b0d628f9c578f3bb3ecd7796ed530f196\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://e565148a37f06299de3b6bcb3385ea0336f65c6c02c9ebfbc6f227f4e56d1c03\",\"dweb:/ipfs/Qma6UNZifZc8zsf7J6B87CdCXhiCR6Zisyg9czsfaji6yY\"]},\"src/lib/deploy/LibDecimalFloatDeploy.sol\":{\"keccak256\":\"0x79f59754c234e55420359efaa9af6ec851fadf8dfaecda6860c1ef99abcf1e64\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://8303dde773c7c613981011fe9ee5d976338b3dab9c66cd67516a82b094596343\",\"dweb:/ipfs/QmQnkeaReEwkKcFMvegAuuBoF2WyirRQmQG9CjKfdhQKnZ\"]},\"src/lib/format/LibFormatDecimalFloat.sol\":{\"keccak256\":\"0x5aac6382e7f7040e68600333c1b00b0aedb3edb6bced84b63783f6d88fe0b4f0\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://e96d30e34e1fa2cc4eb574ded30c0f6f93929dcc19cb571f555ca8c5ac32eaa7\",\"dweb:/ipfs/QmRRtk84AqEdQrRXfeTzVUAbAktJTZ92iTLqjocQV4PDx7\"]},\"src/lib/implementation/LibDecimalFloatImplementation.sol\":{\"keccak256\":\"0x47d0eeb542875548689465407162a19e4a21fb4591af5bb48d5758c0d1b93634\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://631efb796ff17f277804f8a32df7d28630c2ae5300e7d74c37aa8ed1f86b5092\",\"dweb:/ipfs/QmSfmMGQyxKYxu8UrWDEtuCggQ9HtFJy5cbMsYLPZbcTZ7\"]},\"src/lib/parse/LibParseDecimalFloat.sol\":{\"keccak256\":\"0x703d2d37d8a14639a3eb2dcd61601b36552027e16b4e8414befe51f2d0b9ed38\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://53fa45503e115a322a701a1289c5b5fcbe68090c83e0635af77d275d123f09f0\",\"dweb:/ipfs/QmTBtz8uPLYXrTue9SmHBVdgjpFJYUU41Z48PAgu1nXafn\"]},\"src/lib/table/LibLogTable.sol\":{\"keccak256\":\"0xccd2dea54cfb708c01e7e8e88c089742bbab18f5783be4632311fb4923d44c88\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://f45fb78c16b5d66d56ba0e78acdb0ca5d315eb05efa2cd7a81e191aabe7aec52\",\"dweb:/ipfs/QmQJ3TFFxTMu4HZ4qnjgmdmSNhGZLQRdCnSqAipEF1up1f\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.25+commit.b61c2a91"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"int256","name":"signedCoefficient","type":"int256"},{"internalType":"int256","name":"exponent","type":"int256"}],"type":"error","name":"CoefficientOverflow"},{"inputs":[{"internalType":"int256","name":"signedCoefficient","type":"int256"},{"internalType":"int256","name":"exponent","type":"int256"}],"type":"error","name":"DivisionByZero"},{"inputs":[{"internalType":"int256","name":"signedCoefficient","type":"int256"},{"internalType":"int256","name":"exponent","type":"int256"}],"type":"error","name":"ExponentOverflow"},{"inputs":[{"internalType":"int256","name":"signedCoefficient","type":"int256"},{"internalType":"int256","name":"exponent","type":"int256"}],"type":"error","name":"Log10Negative"},{"inputs":[],"type":"error","name":"Log10Zero"},{"inputs":[{"internalType":"address","name":"tablesAddress","type":"address"},{"internalType":"bytes32","name":"expectedCodehash","type":"bytes32"},{"internalType":"bytes32","name":"actualCodehash","type":"bytes32"}],"type":"error","name":"LogTablesNotDeployed"},{"inputs":[{"internalType":"int256","name":"signedCoefficient","type":"int256"},{"internalType":"int256","name":"exponent","type":"int256"}],"type":"error","name":"LossyConversionFromFloat"},{"inputs":[{"internalType":"int256","name":"signedCoefficient","type":"int256"},{"internalType":"int256","name":"exponent","type":"int256"}],"type":"error","name":"LossyConversionToFloat"},{"inputs":[{"internalType":"int256","name":"signedCoefficient","type":"int256"},{"internalType":"int256","name":"exponent","type":"int256"}],"type":"error","name":"MaximizeOverflow"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"},{"internalType":"uint256","name":"denominator","type":"uint256"}],"type":"error","name":"MulDivOverflow"},{"inputs":[{"internalType":"int256","name":"signedCoefficient","type":"int256"},{"internalType":"int256","name":"exponent","type":"int256"}],"type":"error","name":"NegativeFixedDecimalConversion"},{"inputs":[{"internalType":"int256","name":"signedCoefficient","type":"int256"},{"internalType":"int256","name":"exponent","type":"int256"}],"type":"error","name":"PowNegativeBase"},{"inputs":[{"internalType":"Float","name":"scientificMin","type":"bytes32"},{"internalType":"Float","name":"scientificMax","type":"bytes32"}],"type":"error","name":"ScientificMinNotLessThanMax"},{"inputs":[{"internalType":"int256","name":"exponent","type":"int256"}],"type":"error","name":"UnformatableExponent"},{"inputs":[{"internalType":"int256","name":"signedCoefficient","type":"int256"},{"internalType":"int256","name":"exponent","type":"int256"},{"internalType":"int256","name":"targetExponent","type":"int256"}],"type":"error","name":"WithTargetExponentOverflow"},{"inputs":[{"internalType":"Float","name":"b","type":"bytes32"}],"type":"error","name":"ZeroNegativePower"},{"inputs":[],"type":"error","name":"ZeroStringStartPointer"},{"inputs":[],"stateMutability":"view","type":"function","name":"FORMAT_DEFAULT_SCIENTIFIC_MAX","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"FORMAT_DEFAULT_SCIENTIFIC_MIN","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"abs","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"b","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"add","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"ceil","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"b","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"div","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"e","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"b","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"eq","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"floor","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"bool","name":"scientific","type":"bool"}],"stateMutability":"pure","type":"function","name":"format","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"format","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"scientificMin","type":"bytes32"},{"internalType":"Float","name":"scientificMax","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"format","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"frac","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint8","name":"decimals","type":"uint8"}],"stateMutability":"pure","type":"function","name":"fromFixedDecimalLossless","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint8","name":"decimals","type":"uint8"}],"stateMutability":"pure","type":"function","name":"fromFixedDecimalLossy","outputs":[{"internalType":"Float","name":"","type":"bytes32"},{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"b","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"gt","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"b","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"gte","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"integer","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"inv","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"isZero","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"}],"stateMutability":"view","type":"function","name":"log10","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"b","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"lt","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"b","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"lte","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"b","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"max","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"maxNegativeValue","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"maxPositiveValue","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"b","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"min","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"minNegativeValue","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"minPositiveValue","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"minus","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"b","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"mul","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"string","name":"str","type":"string"}],"stateMutability":"pure","type":"function","name":"parse","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"},{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"b","type":"bytes32"}],"stateMutability":"view","type":"function","name":"pow","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"}],"stateMutability":"view","type":"function","name":"pow10","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"}],"stateMutability":"view","type":"function","name":"sqrt","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"b","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"sub","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"float","type":"bytes32"},{"internalType":"uint8","name":"decimals","type":"uint8"}],"stateMutability":"pure","type":"function","name":"toFixedDecimalLossless","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"Float","name":"float","type":"bytes32"},{"internalType":"uint8","name":"decimals","type":"uint8"}],"stateMutability":"pure","type":"function","name":"toFixedDecimalLossy","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"zero","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]}],"devdoc":{"kind":"dev","methods":{"abs(bytes32)":{"params":{"a":"The float to get the absolute value of."},"returns":{"_0":"The absolute value of the float."}},"add(bytes32,bytes32)":{"params":{"a":"The first float to add.","b":"The second float to add."},"returns":{"_0":"The sum of the two floats."}},"ceil(bytes32)":{"params":{"a":"The float to get the ceiling of."},"returns":{"_0":"The ceiled float."}},"div(bytes32,bytes32)":{"params":{"a":"The dividend (numerator).","b":"The divisor (denominator)."},"returns":{"_0":"The quotient of the two floats."}},"e()":{"returns":{"_0":"The constant value of Euler's number as a Float."}},"eq(bytes32,bytes32)":{"params":{"a":"The first float to compare.","b":"The second float to compare."},"returns":{"_0":"True if the two floats are equal, false otherwise."}},"floor(bytes32)":{"params":{"a":"The float to get the floor of."},"returns":{"_0":"The floored float."}},"format(bytes32)":{"params":{"a":"The float to format."},"returns":{"_0":"The string representation of the float."}},"format(bytes32,bool)":{"params":{"a":"The float to format.","scientific":"Whether to format the float in scientific notation."},"returns":{"_0":"The string representation of the float."}},"format(bytes32,bytes32,bytes32)":{"params":{"a":"The float to format. The absolute value of `a` is used to determine if scientific notation is used, this allows negative numbers to be formatted consistently with their positive counterparts.","scientificMax":"The largest number that won't be formatted in scientific notation.","scientificMin":"The smallest number that won't be formatted in scientific notation."},"returns":{"_0":"The string representation of the float."}},"frac(bytes32)":{"params":{"a":"The float to get the fractional part of."},"returns":{"_0":"The fractional part of the float."}},"fromFixedDecimalLossless(uint256,uint8)":{"params":{"decimals":"The number of decimals in the fixed point representation. e.g. If 1e18 represents 1 this would be 18 decimals.","value":"The fixed point decimal value to convert."},"returns":{"_0":"float The Float struct containing the signed coefficient and exponent."}},"fromFixedDecimalLossy(uint256,uint8)":{"params":{"decimals":"The number of decimals in the fixed point representation. e.g. If 1e18 represents 1 this would be 18 decimals.","value":"The fixed point decimal value to convert."},"returns":{"_0":"float The Float struct containing the signed coefficient and exponent.","_1":"lossless True if the conversion was lossless, false otherwise."}},"gt(bytes32,bytes32)":{"params":{"a":"The first float to compare.","b":"The second float to compare."},"returns":{"_0":"True if the first float is greater than the second, false otherwise."}},"gte(bytes32,bytes32)":{"params":{"a":"The first float to compare.","b":"The second float to compare."},"returns":{"_0":"True if the first float is greater than or equal to the second, false otherwise."}},"integer(bytes32)":{"params":{"a":"The float to get the integer part of."},"returns":{"_0":"The integer part of the float."}},"inv(bytes32)":{"params":{"a":"The float to invert."},"returns":{"_0":"The inverted float."}},"isZero(bytes32)":{"params":{"a":"The float to check."},"returns":{"_0":"True if the float is zero, false otherwise."}},"log10(bytes32)":{"params":{"a":"The float to take the logarithm of."},"returns":{"_0":"The logarithm of the float."}},"lt(bytes32,bytes32)":{"params":{"a":"The first float to compare.","b":"The second float to compare."},"returns":{"_0":"True if the first float is less than the second, false otherwise."}},"lte(bytes32,bytes32)":{"params":{"a":"The first float to compare.","b":"The second float to compare."},"returns":{"_0":"True if the first float is less than or equal to the second, false otherwise."}},"max(bytes32,bytes32)":{"params":{"a":"The first float to compare.","b":"The second float to compare."},"returns":{"_0":"The larger of the two floats."}},"maxNegativeValue()":{"returns":{"_0":"The maximum negative value of a Float."}},"maxPositiveValue()":{"returns":{"_0":"The maximum positive value of a Float."}},"min(bytes32,bytes32)":{"params":{"a":"The first float to compare.","b":"The second float to compare."},"returns":{"_0":"The smaller of the two floats."}},"minNegativeValue()":{"returns":{"_0":"The minimum negative value of a Float."}},"minPositiveValue()":{"returns":{"_0":"The minimum positive value of a Float."}},"minus(bytes32)":{"params":{"a":"The float to negate."},"returns":{"_0":"The negated float."}},"mul(bytes32,bytes32)":{"params":{"a":"The first float to multiply.","b":"The second float to multiply."},"returns":{"_0":"The product of the two floats."}},"parse(string)":{"params":{"str":"The string to parse."},"returns":{"_0":"errorSelector The selector of the error if parsing failed. `0` if parsing succeeded.","_1":"parsed The parsed float. Caller MUST check `errorSelector` to determine if parsing succeeded."}},"pow(bytes32,bytes32)":{"params":{"a":"The base float.","b":"The exponent float."},"returns":{"_0":"The result of raising the base float to the power of the exponent"}},"pow10(bytes32)":{"params":{"a":"The exponent to raise 10 to."},"returns":{"_0":"The result of 10^a."}},"sqrt(bytes32)":{"params":{"a":"The float to take the square root of."},"returns":{"_0":"The square root of the float."}},"sub(bytes32,bytes32)":{"params":{"a":"The float to subtract from.","b":"The float to subtract."},"returns":{"_0":"The difference of the two floats."}},"toFixedDecimalLossless(bytes32,uint8)":{"params":{"decimals":"The number of decimals in the fixed point representation. e.g. If 1e18 represents 1 this would be 18 decimals.","float":"The Float struct to convert."},"returns":{"_0":"The fixed point decimal value as a uint256."}},"toFixedDecimalLossy(bytes32,uint8)":{"params":{"decimals":"The number of decimals in the fixed point representation. e.g. If 1e18 represents 1 this would be 18 decimals.","float":"The Float struct to convert."},"returns":{"_0":"value The fixed point decimal value as a uint256.","_1":"lossless True if the conversion was lossless, false otherwise."}},"zero()":{"returns":{"_0":"The zero value of a Float in its maximized representation."}}},"version":1},"userdoc":{"kind":"user","methods":{"FORMAT_DEFAULT_SCIENTIFIC_MAX()":{"notice":"The default maximum value for scientific formatting. 1e9"},"FORMAT_DEFAULT_SCIENTIFIC_MIN()":{"notice":"The default minimum value for scientific formatting. 1e-4"},"abs(bytes32)":{"notice":"Exposes `LibDecimalFloat.abs` for offchain use."},"add(bytes32,bytes32)":{"notice":"Exposes `LibDecimalFloat.add` for offchain use."},"ceil(bytes32)":{"notice":"Exposes `LibDecimalFloat.ceil` for offchain use."},"div(bytes32,bytes32)":{"notice":"Exposes `LibDecimalFloat.div` for offchain use."},"e()":{"notice":"Exposes `LibDecimalFloat.FLOAT_E` for offchain use."},"eq(bytes32,bytes32)":{"notice":"Exposes `LibDecimalFloat.eq` for offchain use."},"floor(bytes32)":{"notice":"Exposes `LibDecimalFloat.floor` for offchain use."},"format(bytes32)":{"notice":"Exposes `format(Float, Float, Float)` for offchain use. Provides default scientific formatting."},"format(bytes32,bool)":{"notice":"Exposes `LibFormatDecimalFloat.toDecimalString` for offchain use. provides raw bool interface for custom scientific formatting."},"format(bytes32,bytes32,bytes32)":{"notice":"Exposes `LibFormatDecimalFloat.toDecimalString` for offchain use."},"frac(bytes32)":{"notice":"Exposes `LibDecimalFloat.frac` for offchain use."},"fromFixedDecimalLossless(uint256,uint8)":{"notice":"Exposes `LibDecimalFloat.fromFixedDecimalLosslessPacked` for offchain use."},"fromFixedDecimalLossy(uint256,uint8)":{"notice":"Exposes `LibDecimalFloat.fromFixedDecimalLossyPacked` for offchain use."},"gt(bytes32,bytes32)":{"notice":"Exposes `LibDecimalFloat.gt` for offchain use."},"gte(bytes32,bytes32)":{"notice":"Exposes `LibDecimalFloat.gte` for offchain use."},"integer(bytes32)":{"notice":"Exposes `LibDecimalFloat.integer` for offchain use."},"inv(bytes32)":{"notice":"Exposes `LibDecimalFloat.inv` for offchain use."},"isZero(bytes32)":{"notice":"Exposes `LibDecimalFloat.isZero` for offchain use."},"log10(bytes32)":{"notice":"Exposes `LibDecimalFloat.log10` for offchain use."},"lt(bytes32,bytes32)":{"notice":"Exposes `LibDecimalFloat.lt` for offchain use."},"lte(bytes32,bytes32)":{"notice":"Exposes `LibDecimalFloat.lte` for offchain use."},"max(bytes32,bytes32)":{"notice":"Exposes `LibDecimalFloat.max` for offchain use."},"maxNegativeValue()":{"notice":"Exposes `LibDecimalFloat.FLOAT_MAX_NEGATIVE_VALUE` for offchain use."},"maxPositiveValue()":{"notice":"Exposes `LibDecimalFloat.FLOAT_MAX_POSITIVE_VALUE` for offchain use."},"min(bytes32,bytes32)":{"notice":"Exposes `LibDecimalFloat.min` for offchain use."},"minNegativeValue()":{"notice":"Exposes `LibDecimalFloat.FLOAT_MIN_NEGATIVE_VALUE` for offchain use."},"minPositiveValue()":{"notice":"Exposes `LibDecimalFloat.FLOAT_MIN_POSITIVE_VALUE` for offchain use."},"minus(bytes32)":{"notice":"Exposes `LibDecimalFloat.minus` for offchain use."},"mul(bytes32,bytes32)":{"notice":"Exposes `LibDecimalFloat.mul` for offchain use."},"parse(string)":{"notice":"Exposes `LibParseDecimalFloat.parseDecimalFloat` for offchain use."},"pow(bytes32,bytes32)":{"notice":"Exposes `LibDecimalFloat.pow` for offchain use."},"pow10(bytes32)":{"notice":"Exposes `LibDecimalFloat.pow10` for offchain use."},"sqrt(bytes32)":{"notice":"Exposes `LibDecimalFloat.sqrt` for offchain use."},"sub(bytes32,bytes32)":{"notice":"Exposes `LibDecimalFloat.sub` for offchain use."},"toFixedDecimalLossless(bytes32,uint8)":{"notice":"Exposes `LibDecimalFloat.toFixedDecimalLossless` for offchain use."},"toFixedDecimalLossy(bytes32,uint8)":{"notice":"Exposes `LibDecimalFloat.toFixedDecimalLossy` for offchain use."},"zero()":{"notice":"Exposes `LibDecimalFloat.FLOAT_ZERO` for offchain use."}},"version":1}},"settings":{"remappings":["@openzeppelin-contracts-5.6.1/=dependencies/@openzeppelin-contracts-5.6.1/","forge-std-1.16.1/=dependencies/forge-std-1.16.1/","mut/=dependencies/rain-string-0.2.0/src/lib/mut/","parse/=dependencies/rain-string-0.2.0/src/lib/parse/","rain-datacontract-0.1.0/=dependencies/rain-datacontract-0.1.0/","rain-deploy-0.1.2/=dependencies/rain-deploy-0.1.2/","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/"],"optimizer":{"enabled":true,"runs":1000000},"metadata":{"bytecodeHash":"none","appendCBOR":false},"compilationTarget":{"src/concrete/DecimalFloat.sol":"DecimalFloat"},"evmVersion":"cancun","libraries":{}},"sources":{"dependencies/@openzeppelin-contracts-5.6.1/utils/Bytes.sol":{"keccak256":"0xf80e4b96b6849936ea0fabd76cf81b13d7276295fddb1e1c07afb3ddf650b0ac","urls":["bzz-raw://6430007255ac11c6e9c4331a418f3af52ff66fbbae959f645301d025b20aeb08","dweb:/ipfs/QmQE5fjmBBRw9ndnzJuC2uskYss1gbaR7JdazoCf1FGoBj"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.6.1/utils/Panic.sol":{"keccak256":"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a","urls":["bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a","dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.6.1/utils/Strings.sol":{"keccak256":"0x1fdc2de9585ab0f1c417f02a873a2b6343cd64bb7ffec6b00ffa11a4a158d9e8","urls":["bzz-raw://1ab223a3d969c6cd7610049431dd42740960c477e45878f5d8b54411f7a32bdc","dweb:/ipfs/QmWumhjvhpKcwx3vDPQninsNVTc3BGvqaihkQakFkQYpaS"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.6.1/utils/math/Math.sol":{"keccak256":"0x59973a93b1f983f94e10529f46ca46544a9fec2b5f56fb1390bbe9e0dc79f857","urls":["bzz-raw://c55ef8f0b9719790c2ae6f81d80a59ffb89f2f0abe6bc065585bd79edce058c5","dweb:/ipfs/QmNNmCbX9NjPXKqHJN8R1WC2rNeZSQrPZLd6FF6AKLyH5Y"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.6.1/utils/math/SafeCast.sol":{"keccak256":"0xc8cae21c9ae4a46e5162ff9bf5b351d6fa6a6eba72d515f3bc1bdfeda7fdf083","urls":["bzz-raw://ce830ebcf28e31643caba318996db3763c36d52cd0f23798ba83c135355d45e9","dweb:/ipfs/QmdGPcvptHN7UBCbUYBbRX3hiRVRFLRwno8b4uga6uFNif"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.6.1/utils/math/SignedMath.sol":{"keccak256":"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3","urls":["bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03","dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ"],"license":"MIT"},"dependencies/rain-string-0.2.0/src/error/ErrParse.sol":{"keccak256":"0x7a69236ad67e39c20f6ade7973ec551c9a5bb5db4671c8afa95b80f35a996497","urls":["bzz-raw://4731c6ea05b4e820814380dbbd6dac14f5778a1e9194b8992148cf97a99ffbb2","dweb:/ipfs/QmUMnKNt2zQ42fjS4fpLqodXytiffVFzaKupAm8rNsrYVo"],"license":"LicenseRef-DCL-1.0"},"dependencies/rain-string-0.2.0/src/lib/parse/LibParseCMask.sol":{"keccak256":"0x91e798a6f71aafbd4743720eaa38a7f16f74c6c0ab2992e7e4982979e9df539a","urls":["bzz-raw://4782e62e0e5a5fbc7d6c757dcc90347d7ad064f25372a6c471ffa968e12b91d7","dweb:/ipfs/QmPohMsVTjm19gxYwxgAsTKJQRjkK2J1Pyah63nCtYBBnt"],"license":"LicenseRef-DCL-1.0"},"dependencies/rain-string-0.2.0/src/lib/parse/LibParseChar.sol":{"keccak256":"0x66c401d784e9461f709116441de3707685e08438cd83553db28fe8caf0e97238","urls":["bzz-raw://e6027d0f9d558953686f6eb78ca0b2f2e7d9d38e0be6d1435ffaaa4b90919593","dweb:/ipfs/QmQXDMTzmJrst2a4kHkcfjSsEdnPc4ikQs7VfGbCfe9QCc"],"license":"LicenseRef-DCL-1.0"},"dependencies/rain-string-0.2.0/src/lib/parse/LibParseDecimal.sol":{"keccak256":"0x72ccc4d7e0a1245897511e1efc15ddc80d423a8eb956249be7940a8e8f4e99fe","urls":["bzz-raw://3ca57acd6a7cbe16f2c03aa5a6e81ec7af1ad44078924358578560a32aead7c0","dweb:/ipfs/QmNukyUMS4JrzNHAYcpLbtYsD5CwYPEjfAaADv6qMZmqs6"],"license":"LicenseRef-DCL-1.0"},"src/concrete/DecimalFloat.sol":{"keccak256":"0x6326a6b5ffef0708b84712c0b891dfc7f2d88c38191628da1f40933951f2683b","urls":["bzz-raw://ad99eda6cc266d5d160439700d3c89a487e8e31d51538f2ad83435a1aac9f3ae","dweb:/ipfs/QmarsuZkgqG7jT9mYBh1VKNvjD5ZsVtJJTiRGbfMQAY669"],"license":"LicenseRef-DCL-1.0"},"src/error/ErrDecimalFloat.sol":{"keccak256":"0x53825ff4d1af4981100de46bd7536c611625fe7930b5c21921838cfed3a92243","urls":["bzz-raw://961197f4c7b6d560f71f67892bfd5b64300be0f0fdb20162058938567653643e","dweb:/ipfs/QmTJzmA5CEkmYrXJ2MHnfQ3wGm1Qj6xE1vNaqAqgUpEnvA"],"license":"LicenseRef-DCL-1.0"},"src/error/ErrFormat.sol":{"keccak256":"0xc760cb6018291753e7408d55d12d5e66c116f9750dc241bbc201f3b46ae33aa7","urls":["bzz-raw://cbc81bb7c26c8503926b579f978902bcc3227839bee04bd3500cc924d142d28e","dweb:/ipfs/QmXqMuqBCpckD1EnsBjweyLdRZxpvC2xSP9FWBZFh2vztR"],"license":"LicenseRef-DCL-1.0"},"src/error/ErrParse.sol":{"keccak256":"0x7fc9fe7421d78306d252d2853fd1be943d9cbd12ff7a9c8c3f286a8164bfe357","urls":["bzz-raw://7b4c434d01b53788968d185683d9633afa26d95396b1e91337a53ccaab0d44ab","dweb:/ipfs/QmQHmVjR37wwrCskiQviwkg7WkeBpr9uPddjuDxqzANXeV"],"license":"LicenseRef-DCL-1.0"},"src/generated/LogTables.pointers.sol":{"keccak256":"0x2325d92e3e248350a79f163fcb8738056ae4240b6a77f759ff5fcbf7b381f5ae","urls":["bzz-raw://9a52674114518573de7d184094b266bc2b5208953086f8ec35a494f048deefbb","dweb:/ipfs/QmTjuj1R9k4pFMBVpX6RcWG87Rdh9pRTZVHYo93SzBfmsH"],"license":"LicenseRef-DCL-1.0"},"src/lib/LibDecimalFloat.sol":{"keccak256":"0x59d2dad4b7e861ed835a79c61ae42b4b0d628f9c578f3bb3ecd7796ed530f196","urls":["bzz-raw://e565148a37f06299de3b6bcb3385ea0336f65c6c02c9ebfbc6f227f4e56d1c03","dweb:/ipfs/Qma6UNZifZc8zsf7J6B87CdCXhiCR6Zisyg9czsfaji6yY"],"license":"LicenseRef-DCL-1.0"},"src/lib/deploy/LibDecimalFloatDeploy.sol":{"keccak256":"0x79f59754c234e55420359efaa9af6ec851fadf8dfaecda6860c1ef99abcf1e64","urls":["bzz-raw://8303dde773c7c613981011fe9ee5d976338b3dab9c66cd67516a82b094596343","dweb:/ipfs/QmQnkeaReEwkKcFMvegAuuBoF2WyirRQmQG9CjKfdhQKnZ"],"license":"LicenseRef-DCL-1.0"},"src/lib/format/LibFormatDecimalFloat.sol":{"keccak256":"0x5aac6382e7f7040e68600333c1b00b0aedb3edb6bced84b63783f6d88fe0b4f0","urls":["bzz-raw://e96d30e34e1fa2cc4eb574ded30c0f6f93929dcc19cb571f555ca8c5ac32eaa7","dweb:/ipfs/QmRRtk84AqEdQrRXfeTzVUAbAktJTZ92iTLqjocQV4PDx7"],"license":"LicenseRef-DCL-1.0"},"src/lib/implementation/LibDecimalFloatImplementation.sol":{"keccak256":"0x47d0eeb542875548689465407162a19e4a21fb4591af5bb48d5758c0d1b93634","urls":["bzz-raw://631efb796ff17f277804f8a32df7d28630c2ae5300e7d74c37aa8ed1f86b5092","dweb:/ipfs/QmSfmMGQyxKYxu8UrWDEtuCggQ9HtFJy5cbMsYLPZbcTZ7"],"license":"LicenseRef-DCL-1.0"},"src/lib/parse/LibParseDecimalFloat.sol":{"keccak256":"0x703d2d37d8a14639a3eb2dcd61601b36552027e16b4e8414befe51f2d0b9ed38","urls":["bzz-raw://53fa45503e115a322a701a1289c5b5fcbe68090c83e0635af77d275d123f09f0","dweb:/ipfs/QmTBtz8uPLYXrTue9SmHBVdgjpFJYUU41Z48PAgu1nXafn"],"license":"LicenseRef-DCL-1.0"},"src/lib/table/LibLogTable.sol":{"keccak256":"0xccd2dea54cfb708c01e7e8e88c089742bbab18f5783be4632311fb4923d44c88","urls":["bzz-raw://f45fb78c16b5d66d56ba0e78acdb0ca5d315eb05efa2cd7a81e191aabe7aec52","dweb:/ipfs/QmQJ3TFFxTMu4HZ4qnjgmdmSNhGZLQRdCnSqAipEF1up1f"],"license":"LicenseRef-DCL-1.0"}},"version":1},"id":37} \ No newline at end of file diff --git a/crates/float/abi/TestDecimalFloat.json b/crates/float/abi/TestDecimalFloat.json index d4c8502..3424c63 100644 --- a/crates/float/abi/TestDecimalFloat.json +++ b/crates/float/abi/TestDecimalFloat.json @@ -1,221 +1 @@ -{ - "abi": [ - { - "type": "function", - "name": "packLossless", - "inputs": [ - { "name": "coefficient", "type": "int224", "internalType": "int224" }, - { "name": "exponent", "type": "int32", "internalType": "int32" } - ], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "Float" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "unpack", - "inputs": [ - { "name": "float", "type": "bytes32", "internalType": "Float" } - ], - "outputs": [ - { "name": "", "type": "int256", "internalType": "int256" }, - { "name": "", "type": "int256", "internalType": "int256" } - ], - "stateMutability": "pure" - }, - { - "type": "error", - "name": "CoefficientOverflow", - "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" } - ] - } - ], - "bytecode": { - "object": "0x6080604052348015600e575f80fd5b506102848061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610034575f3560e01c806371516dd914610038578063b702fecd1461008c575b5f80fd5b61007261004636600461022b565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b9160e09190911d90565b604080519283526020830191909152015b60405180910390f35b61009f61009a366004610242565b6100ad565b604051908152602001610083565b5f6100be83601b0b8360030b6100c5565b9392505050565b5f805f6100d28585610124565b915091508061011c576040517f22c9f7bb00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044015b60405180910390fd5b509392505050565b5f601b83900b8314838382610188577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561016857620186a0860595506005850194505b8586601b0b1461018357600a86059550846001019450610168565b61019e565b855f0361019e57505f9250600191506102249050565b848560030b146101fa575f8512156101be57505f92508291506102249050565b6040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610113565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791505b9250929050565b5f6020828403121561023b575f80fd5b5035919050565b5f8060408385031215610253575f80fd5b823580601b0b8114610263575f80fd5b91506020830135600381900b8114610279575f80fd5b80915050925092905056", - "sourceMap": "332:770:50:-:0;;;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x608060405234801561000f575f80fd5b5060043610610034575f3560e01c806371516dd914610038578063b702fecd1461008c575b5f80fd5b61007261004636600461022b565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b9160e09190911d90565b604080519283526020830191909152015b60405180910390f35b61009f61009a366004610242565b6100ad565b604051908152602001610083565b5f6100be83601b0b8360030b6100c5565b9392505050565b5f805f6100d28585610124565b915091508061011c576040517f22c9f7bb00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044015b60405180910390fd5b509392505050565b5f601b83900b8314838382610188577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561016857620186a0860595506005850194505b8586601b0b1461018357600a86059550846001019450610168565b61019e565b855f0361019e57505f9250600191506102249050565b848560030b146101fa575f8512156101be57505f92508291506102249050565b6040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610113565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791505b9250929050565b5f6020828403121561023b575f80fd5b5035919050565b5f8060408385031215610253575f80fd5b823580601b0b8114610263575f80fd5b91506020830135600381900b8114610279575f80fd5b80915050925092905056", - "sourceMap": "332:770:50:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;979:121;;;;;;:::i;:::-;19261:17:42;19363:16;;19359:2;19348:32;;19409:4;19405:16;;;;;979:121:50;;;;;396:25:134;;;452:2;437:18;;430:34;;;;369:18;979:121:50;;;;;;;;599:163;;;;;;:::i;:::-;;:::i;:::-;;;1097:25:134;;;1085:2;1070:18;599:163:50;924:204:134;599:163:50;680:5;704:51;733:11;704:51;;746:8;704:51;;:28;:51::i;:::-;697:58;599:163;-1:-1:-1;;;599:163:50:o;18451:299:42:-;18539:5;18557:7;18566:13;18583:38;18593:17;18612:8;18583:9;:38::i;:::-;18556:65;;;;18636:8;18631:95;;18667:48;;;;;;;;396:25:134;;;437:18;;;430:34;;;369:18;;18667:48:42;;;;;;;;18631:95;-1:-1:-1;18742:1:42;18451:299;-1:-1:-1;;;18451:299:42:o;15810:2402::-;15895:11;16327:46;;;;;;15991:17;16047:8;16327:46;16651:668;;16708:4;16688:17;:24;:29;16684:135;;16762:3;16741:24;;;;16799:1;16787:13;;;;16684:135;17058:17;17036;17029:46;;;17022:151;;17120:2;17099:23;;;;17144:10;;;;;17022:151;;;16651:668;;;17215:17;17236:1;17215:22;17211:94;;-1:-1:-1;3653:1:42;;-1:-1:-1;17281:4:42;;-1:-1:-1;17261:25:42;;-1:-1:-1;17261:25:42;17211:94;17529:8;17516;17510:27;;;17506:393;;17731:1;17720:8;:12;17716:85;;;-1:-1:-1;3653:1:42;;-1:-1:-1;3653:1:42;;-1:-1:-1;17756:26:42;;-1:-1:-1;17756:26:42;17716:85;17825:59;;;;;;;;396:25:134;;;437:18;;;430:34;;;369:18;;17825:59:42;226:244:134;17506:393:42;-1:-1:-1;;18046:17:42;18132:28;;18166:4;18162:19;;;18129:53;;-1:-1:-1;15810:2402:42;;;;;;:::o;14:207:134:-;100:6;153:2;141:9;132:7;128:23;124:32;121:52;;;169:1;166;159:12;121:52;-1:-1:-1;192:23:134;;14:207;-1:-1:-1;14:207:134:o;475:444::-;540:6;548;601:2;589:9;580:7;576:23;572:32;569:52;;;617:1;614;607:12;569:52;656:9;643:23;710:5;706:2;695:21;688:5;685:32;675:60;;731:1;728;721:12;675:60;754:5;-1:-1:-1;811:2:134;796:18;;783:32;857:1;846:22;;;834:35;;824:63;;883:1;880;873:12;824:63;906:7;896:17;;;475:444;;;;;:::o", - "linkReferences": {} - }, - "methodIdentifiers": { - "packLossless(int224,int32)": "b702fecd", - "unpack(bytes32)": "71516dd9" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"CoefficientOverflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"ExponentOverflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int224\",\"name\":\"coefficient\",\"type\":\"int224\"},{\"internalType\":\"int32\",\"name\":\"exponent\",\"type\":\"int32\"}],\"name\":\"packLossless\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"float\",\"type\":\"bytes32\"}],\"name\":\"unpack\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"CoefficientOverflow(int256,int256)\":[{\"details\":\"Thrown when a coefficient overflows.\"}],\"ExponentOverflow(int256,int256)\":[{\"details\":\"Thrown when an exponent overflows.\"}]},\"kind\":\"dev\",\"methods\":{\"packLossless(int224,int32)\":{\"params\":{\"coefficient\":\"The coefficient to pack.\",\"exponent\":\"The exponent to pack.\"},\"returns\":{\"_0\":\"The packed float.\"}},\"unpack(bytes32)\":{\"params\":{\"float\":\"The float to unpack.\"},\"returns\":{\"_0\":\"coefficient The coefficient of the float.\",\"_1\":\"exponent The exponent of the float.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"packLossless(int224,int32)\":{\"notice\":\"Exposes `LibDecimalFloat.packLossless` for offchain use.\"},\"unpack(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.unpack` for offchain use.\"}},\"notice\":\"Additional exposed functions for testing the internals of floats from downstream environments, e.g. rust.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/concrete/TestDecimalFloat.sol\":\"TestDecimalFloat\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"appendCBOR\":false,\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[\":@openzeppelin-contracts-5.6.1/=dependencies/@openzeppelin-contracts-5.6.1/\",\":forge-std-1.16.1/=dependencies/forge-std-1.16.1/\",\":mut/=dependencies/rain-string-0.2.0/src/lib/mut/\",\":parse/=dependencies/rain-string-0.2.0/src/lib/parse/\",\":rain-datacontract-0.1.0/=dependencies/rain-datacontract-0.1.0/\",\":rain-deploy-0.1.2/=dependencies/rain-deploy-0.1.2/\",\":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/\"]},\"sources\":{\"src/error/ErrDecimalFloat.sol\":{\"keccak256\":\"0x53825ff4d1af4981100de46bd7536c611625fe7930b5c21921838cfed3a92243\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://961197f4c7b6d560f71f67892bfd5b64300be0f0fdb20162058938567653643e\",\"dweb:/ipfs/QmTJzmA5CEkmYrXJ2MHnfQ3wGm1Qj6xE1vNaqAqgUpEnvA\"]},\"src/lib/LibDecimalFloat.sol\":{\"keccak256\":\"0x59d2dad4b7e861ed835a79c61ae42b4b0d628f9c578f3bb3ecd7796ed530f196\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://e565148a37f06299de3b6bcb3385ea0336f65c6c02c9ebfbc6f227f4e56d1c03\",\"dweb:/ipfs/Qma6UNZifZc8zsf7J6B87CdCXhiCR6Zisyg9czsfaji6yY\"]},\"src/lib/implementation/LibDecimalFloatImplementation.sol\":{\"keccak256\":\"0x47d0eeb542875548689465407162a19e4a21fb4591af5bb48d5758c0d1b93634\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://631efb796ff17f277804f8a32df7d28630c2ae5300e7d74c37aa8ed1f86b5092\",\"dweb:/ipfs/QmSfmMGQyxKYxu8UrWDEtuCggQ9HtFJy5cbMsYLPZbcTZ7\"]},\"src/lib/table/LibLogTable.sol\":{\"keccak256\":\"0xccd2dea54cfb708c01e7e8e88c089742bbab18f5783be4632311fb4923d44c88\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://f45fb78c16b5d66d56ba0e78acdb0ca5d315eb05efa2cd7a81e191aabe7aec52\",\"dweb:/ipfs/QmQJ3TFFxTMu4HZ4qnjgmdmSNhGZLQRdCnSqAipEF1up1f\"]},\"test/concrete/TestDecimalFloat.sol\":{\"keccak256\":\"0x4cb7ac6a794d06ffcc482d9f0451e57de56d4b434411e70d61949634c56c36c7\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://c1776ad378af67be27a7c98225c58b70a33b0e6ffc4c68d69e23dcf303e8a929\",\"dweb:/ipfs/QmfK9C9g5ncMkHFvSvGFAru8bvPTY9qxTzB3KPgGAn1EyG\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.25+commit.b61c2a91" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { - "internalType": "int256", - "name": "signedCoefficient", - "type": "int256" - }, - { "internalType": "int256", "name": "exponent", "type": "int256" } - ], - "type": "error", - "name": "CoefficientOverflow" - }, - { - "inputs": [ - { - "internalType": "int256", - "name": "signedCoefficient", - "type": "int256" - }, - { "internalType": "int256", "name": "exponent", "type": "int256" } - ], - "type": "error", - "name": "ExponentOverflow" - }, - { - "inputs": [ - { - "internalType": "int224", - "name": "coefficient", - "type": "int224" - }, - { "internalType": "int32", "name": "exponent", "type": "int32" } - ], - "stateMutability": "pure", - "type": "function", - "name": "packLossless", - "outputs": [ - { "internalType": "Float", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [ - { "internalType": "Float", "name": "float", "type": "bytes32" } - ], - "stateMutability": "pure", - "type": "function", - "name": "unpack", - "outputs": [ - { "internalType": "int256", "name": "", "type": "int256" }, - { "internalType": "int256", "name": "", "type": "int256" } - ] - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "packLossless(int224,int32)": { - "params": { - "coefficient": "The coefficient to pack.", - "exponent": "The exponent to pack." - }, - "returns": { "_0": "The packed float." } - }, - "unpack(bytes32)": { - "params": { "float": "The float to unpack." }, - "returns": { - "_0": "coefficient The coefficient of the float.", - "_1": "exponent The exponent of the float." - } - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": { - "packLossless(int224,int32)": { - "notice": "Exposes `LibDecimalFloat.packLossless` for offchain use." - }, - "unpack(bytes32)": { - "notice": "Exposes `LibDecimalFloat.unpack` for offchain use." - } - }, - "version": 1 - } - }, - "settings": { - "remappings": [ - "@openzeppelin-contracts-5.6.1/=dependencies/@openzeppelin-contracts-5.6.1/", - "forge-std-1.16.1/=dependencies/forge-std-1.16.1/", - "mut/=dependencies/rain-string-0.2.0/src/lib/mut/", - "parse/=dependencies/rain-string-0.2.0/src/lib/parse/", - "rain-datacontract-0.1.0/=dependencies/rain-datacontract-0.1.0/", - "rain-deploy-0.1.2/=dependencies/rain-deploy-0.1.2/", - "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/" - ], - "optimizer": { "enabled": true, "runs": 1000000 }, - "metadata": { "bytecodeHash": "none", "appendCBOR": false }, - "compilationTarget": { - "test/concrete/TestDecimalFloat.sol": "TestDecimalFloat" - }, - "evmVersion": "cancun", - "libraries": {} - }, - "sources": { - "src/error/ErrDecimalFloat.sol": { - "keccak256": "0x53825ff4d1af4981100de46bd7536c611625fe7930b5c21921838cfed3a92243", - "urls": [ - "bzz-raw://961197f4c7b6d560f71f67892bfd5b64300be0f0fdb20162058938567653643e", - "dweb:/ipfs/QmTJzmA5CEkmYrXJ2MHnfQ3wGm1Qj6xE1vNaqAqgUpEnvA" - ], - "license": "LicenseRef-DCL-1.0" - }, - "src/lib/LibDecimalFloat.sol": { - "keccak256": "0x59d2dad4b7e861ed835a79c61ae42b4b0d628f9c578f3bb3ecd7796ed530f196", - "urls": [ - "bzz-raw://e565148a37f06299de3b6bcb3385ea0336f65c6c02c9ebfbc6f227f4e56d1c03", - "dweb:/ipfs/Qma6UNZifZc8zsf7J6B87CdCXhiCR6Zisyg9czsfaji6yY" - ], - "license": "LicenseRef-DCL-1.0" - }, - "src/lib/implementation/LibDecimalFloatImplementation.sol": { - "keccak256": "0x47d0eeb542875548689465407162a19e4a21fb4591af5bb48d5758c0d1b93634", - "urls": [ - "bzz-raw://631efb796ff17f277804f8a32df7d28630c2ae5300e7d74c37aa8ed1f86b5092", - "dweb:/ipfs/QmSfmMGQyxKYxu8UrWDEtuCggQ9HtFJy5cbMsYLPZbcTZ7" - ], - "license": "LicenseRef-DCL-1.0" - }, - "src/lib/table/LibLogTable.sol": { - "keccak256": "0xccd2dea54cfb708c01e7e8e88c089742bbab18f5783be4632311fb4923d44c88", - "urls": [ - "bzz-raw://f45fb78c16b5d66d56ba0e78acdb0ca5d315eb05efa2cd7a81e191aabe7aec52", - "dweb:/ipfs/QmQJ3TFFxTMu4HZ4qnjgmdmSNhGZLQRdCnSqAipEF1up1f" - ], - "license": "LicenseRef-DCL-1.0" - }, - "test/concrete/TestDecimalFloat.sol": { - "keccak256": "0x4cb7ac6a794d06ffcc482d9f0451e57de56d4b434411e70d61949634c56c36c7", - "urls": [ - "bzz-raw://c1776ad378af67be27a7c98225c58b70a33b0e6ffc4c68d69e23dcf303e8a929", - "dweb:/ipfs/QmfK9C9g5ncMkHFvSvGFAru8bvPTY9qxTzB3KPgGAn1EyG" - ], - "license": "LicenseRef-DCL-1.0" - } - }, - "version": 1 - }, - "id": 50 -} +{"abi":[{"type":"function","name":"packLossless","inputs":[{"name":"coefficient","type":"int224","internalType":"int224"},{"name":"exponent","type":"int32","internalType":"int32"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"unpack","inputs":[{"name":"float","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"int256","internalType":"int256"},{"name":"","type":"int256","internalType":"int256"}],"stateMutability":"pure"},{"type":"error","name":"CoefficientOverflow","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"}]}],"bytecode":{"object":"0x6080604052348015600e575f80fd5b506102848061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610034575f3560e01c806371516dd914610038578063b702fecd1461008c575b5f80fd5b61007261004636600461022b565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b9160e09190911d90565b604080519283526020830191909152015b60405180910390f35b61009f61009a366004610242565b6100ad565b604051908152602001610083565b5f6100be83601b0b8360030b6100c5565b9392505050565b5f805f6100d28585610124565b915091508061011c576040517f22c9f7bb00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044015b60405180910390fd5b509392505050565b5f601b83900b8314838382610188577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561016857620186a0860595506005850194505b8586601b0b1461018357600a86059550846001019450610168565b61019e565b855f0361019e57505f9250600191506102249050565b848560030b146101fa575f8512156101be57505f92508291506102249050565b6040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610113565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791505b9250929050565b5f6020828403121561023b575f80fd5b5035919050565b5f8060408385031215610253575f80fd5b823580601b0b8114610263575f80fd5b91506020830135600381900b8114610279575f80fd5b80915050925092905056","sourceMap":"332:770:50:-:0;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561000f575f80fd5b5060043610610034575f3560e01c806371516dd914610038578063b702fecd1461008c575b5f80fd5b61007261004636600461022b565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b9160e09190911d90565b604080519283526020830191909152015b60405180910390f35b61009f61009a366004610242565b6100ad565b604051908152602001610083565b5f6100be83601b0b8360030b6100c5565b9392505050565b5f805f6100d28585610124565b915091508061011c576040517f22c9f7bb00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044015b60405180910390fd5b509392505050565b5f601b83900b8314838382610188577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561016857620186a0860595506005850194505b8586601b0b1461018357600a86059550846001019450610168565b61019e565b855f0361019e57505f9250600191506102249050565b848560030b146101fa575f8512156101be57505f92508291506102249050565b6040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610113565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791505b9250929050565b5f6020828403121561023b575f80fd5b5035919050565b5f8060408385031215610253575f80fd5b823580601b0b8114610263575f80fd5b91506020830135600381900b8114610279575f80fd5b80915050925092905056","sourceMap":"332:770:50:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;979:121;;;;;;:::i;:::-;19261:17:42;19363:16;;19359:2;19348:32;;19409:4;19405:16;;;;;979:121:50;;;;;396:25:134;;;452:2;437:18;;430:34;;;;369:18;979:121:50;;;;;;;;599:163;;;;;;:::i;:::-;;:::i;:::-;;;1097:25:134;;;1085:2;1070:18;599:163:50;924:204:134;599:163:50;680:5;704:51;733:11;704:51;;746:8;704:51;;:28;:51::i;:::-;697:58;599:163;-1:-1:-1;;;599:163:50:o;18451:299:42:-;18539:5;18557:7;18566:13;18583:38;18593:17;18612:8;18583:9;:38::i;:::-;18556:65;;;;18636:8;18631:95;;18667:48;;;;;;;;396:25:134;;;437:18;;;430:34;;;369:18;;18667:48:42;;;;;;;;18631:95;-1:-1:-1;18742:1:42;18451:299;-1:-1:-1;;;18451:299:42:o;15810:2402::-;15895:11;16327:46;;;;;;15991:17;16047:8;16327:46;16651:668;;16708:4;16688:17;:24;:29;16684:135;;16762:3;16741:24;;;;16799:1;16787:13;;;;16684:135;17058:17;17036;17029:46;;;17022:151;;17120:2;17099:23;;;;17144:10;;;;;17022:151;;;16651:668;;;17215:17;17236:1;17215:22;17211:94;;-1:-1:-1;3653:1:42;;-1:-1:-1;17281:4:42;;-1:-1:-1;17261:25:42;;-1:-1:-1;17261:25:42;17211:94;17529:8;17516;17510:27;;;17506:393;;17731:1;17720:8;:12;17716:85;;;-1:-1:-1;3653:1:42;;-1:-1:-1;3653:1:42;;-1:-1:-1;17756:26:42;;-1:-1:-1;17756:26:42;17716:85;17825:59;;;;;;;;396:25:134;;;437:18;;;430:34;;;369:18;;17825:59:42;226:244:134;17506:393:42;-1:-1:-1;;18046:17:42;18132:28;;18166:4;18162:19;;;18129:53;;-1:-1:-1;15810:2402:42;;;;;;:::o;14:207:134:-;100:6;153:2;141:9;132:7;128:23;124:32;121:52;;;169:1;166;159:12;121:52;-1:-1:-1;192:23:134;;14:207;-1:-1:-1;14:207:134:o;475:444::-;540:6;548;601:2;589:9;580:7;576:23;572:32;569:52;;;617:1;614;607:12;569:52;656:9;643:23;710:5;706:2;695:21;688:5;685:32;675:60;;731:1;728;721:12;675:60;754:5;-1:-1:-1;811:2:134;796:18;;783:32;857:1;846:22;;;834:35;;824:63;;883:1;880;873:12;824:63;906:7;896:17;;;475:444;;;;;:::o","linkReferences":{}},"methodIdentifiers":{"packLossless(int224,int32)":"b702fecd","unpack(bytes32)":"71516dd9"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"CoefficientOverflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"ExponentOverflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int224\",\"name\":\"coefficient\",\"type\":\"int224\"},{\"internalType\":\"int32\",\"name\":\"exponent\",\"type\":\"int32\"}],\"name\":\"packLossless\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"float\",\"type\":\"bytes32\"}],\"name\":\"unpack\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"CoefficientOverflow(int256,int256)\":[{\"details\":\"Thrown when a coefficient overflows.\"}],\"ExponentOverflow(int256,int256)\":[{\"details\":\"Thrown when an exponent overflows.\"}]},\"kind\":\"dev\",\"methods\":{\"packLossless(int224,int32)\":{\"params\":{\"coefficient\":\"The coefficient to pack.\",\"exponent\":\"The exponent to pack.\"},\"returns\":{\"_0\":\"The packed float.\"}},\"unpack(bytes32)\":{\"params\":{\"float\":\"The float to unpack.\"},\"returns\":{\"_0\":\"coefficient The coefficient of the float.\",\"_1\":\"exponent The exponent of the float.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"packLossless(int224,int32)\":{\"notice\":\"Exposes `LibDecimalFloat.packLossless` for offchain use.\"},\"unpack(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.unpack` for offchain use.\"}},\"notice\":\"Additional exposed functions for testing the internals of floats from downstream environments, e.g. rust.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/concrete/TestDecimalFloat.sol\":\"TestDecimalFloat\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"appendCBOR\":false,\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[\":@openzeppelin-contracts-5.6.1/=dependencies/@openzeppelin-contracts-5.6.1/\",\":forge-std-1.16.1/=dependencies/forge-std-1.16.1/\",\":mut/=dependencies/rain-string-0.2.0/src/lib/mut/\",\":parse/=dependencies/rain-string-0.2.0/src/lib/parse/\",\":rain-datacontract-0.1.0/=dependencies/rain-datacontract-0.1.0/\",\":rain-deploy-0.1.2/=dependencies/rain-deploy-0.1.2/\",\":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/\"]},\"sources\":{\"src/error/ErrDecimalFloat.sol\":{\"keccak256\":\"0x53825ff4d1af4981100de46bd7536c611625fe7930b5c21921838cfed3a92243\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://961197f4c7b6d560f71f67892bfd5b64300be0f0fdb20162058938567653643e\",\"dweb:/ipfs/QmTJzmA5CEkmYrXJ2MHnfQ3wGm1Qj6xE1vNaqAqgUpEnvA\"]},\"src/lib/LibDecimalFloat.sol\":{\"keccak256\":\"0x59d2dad4b7e861ed835a79c61ae42b4b0d628f9c578f3bb3ecd7796ed530f196\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://e565148a37f06299de3b6bcb3385ea0336f65c6c02c9ebfbc6f227f4e56d1c03\",\"dweb:/ipfs/Qma6UNZifZc8zsf7J6B87CdCXhiCR6Zisyg9czsfaji6yY\"]},\"src/lib/implementation/LibDecimalFloatImplementation.sol\":{\"keccak256\":\"0x47d0eeb542875548689465407162a19e4a21fb4591af5bb48d5758c0d1b93634\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://631efb796ff17f277804f8a32df7d28630c2ae5300e7d74c37aa8ed1f86b5092\",\"dweb:/ipfs/QmSfmMGQyxKYxu8UrWDEtuCggQ9HtFJy5cbMsYLPZbcTZ7\"]},\"src/lib/table/LibLogTable.sol\":{\"keccak256\":\"0xccd2dea54cfb708c01e7e8e88c089742bbab18f5783be4632311fb4923d44c88\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://f45fb78c16b5d66d56ba0e78acdb0ca5d315eb05efa2cd7a81e191aabe7aec52\",\"dweb:/ipfs/QmQJ3TFFxTMu4HZ4qnjgmdmSNhGZLQRdCnSqAipEF1up1f\"]},\"test/concrete/TestDecimalFloat.sol\":{\"keccak256\":\"0x4cb7ac6a794d06ffcc482d9f0451e57de56d4b434411e70d61949634c56c36c7\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://c1776ad378af67be27a7c98225c58b70a33b0e6ffc4c68d69e23dcf303e8a929\",\"dweb:/ipfs/QmfK9C9g5ncMkHFvSvGFAru8bvPTY9qxTzB3KPgGAn1EyG\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.25+commit.b61c2a91"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"int256","name":"signedCoefficient","type":"int256"},{"internalType":"int256","name":"exponent","type":"int256"}],"type":"error","name":"CoefficientOverflow"},{"inputs":[{"internalType":"int256","name":"signedCoefficient","type":"int256"},{"internalType":"int256","name":"exponent","type":"int256"}],"type":"error","name":"ExponentOverflow"},{"inputs":[{"internalType":"int224","name":"coefficient","type":"int224"},{"internalType":"int32","name":"exponent","type":"int32"}],"stateMutability":"pure","type":"function","name":"packLossless","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"float","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"unpack","outputs":[{"internalType":"int256","name":"","type":"int256"},{"internalType":"int256","name":"","type":"int256"}]}],"devdoc":{"kind":"dev","methods":{"packLossless(int224,int32)":{"params":{"coefficient":"The coefficient to pack.","exponent":"The exponent to pack."},"returns":{"_0":"The packed float."}},"unpack(bytes32)":{"params":{"float":"The float to unpack."},"returns":{"_0":"coefficient The coefficient of the float.","_1":"exponent The exponent of the float."}}},"version":1},"userdoc":{"kind":"user","methods":{"packLossless(int224,int32)":{"notice":"Exposes `LibDecimalFloat.packLossless` for offchain use."},"unpack(bytes32)":{"notice":"Exposes `LibDecimalFloat.unpack` for offchain use."}},"version":1}},"settings":{"remappings":["@openzeppelin-contracts-5.6.1/=dependencies/@openzeppelin-contracts-5.6.1/","forge-std-1.16.1/=dependencies/forge-std-1.16.1/","mut/=dependencies/rain-string-0.2.0/src/lib/mut/","parse/=dependencies/rain-string-0.2.0/src/lib/parse/","rain-datacontract-0.1.0/=dependencies/rain-datacontract-0.1.0/","rain-deploy-0.1.2/=dependencies/rain-deploy-0.1.2/","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/"],"optimizer":{"enabled":true,"runs":1000000},"metadata":{"bytecodeHash":"none","appendCBOR":false},"compilationTarget":{"test/concrete/TestDecimalFloat.sol":"TestDecimalFloat"},"evmVersion":"cancun","libraries":{}},"sources":{"src/error/ErrDecimalFloat.sol":{"keccak256":"0x53825ff4d1af4981100de46bd7536c611625fe7930b5c21921838cfed3a92243","urls":["bzz-raw://961197f4c7b6d560f71f67892bfd5b64300be0f0fdb20162058938567653643e","dweb:/ipfs/QmTJzmA5CEkmYrXJ2MHnfQ3wGm1Qj6xE1vNaqAqgUpEnvA"],"license":"LicenseRef-DCL-1.0"},"src/lib/LibDecimalFloat.sol":{"keccak256":"0x59d2dad4b7e861ed835a79c61ae42b4b0d628f9c578f3bb3ecd7796ed530f196","urls":["bzz-raw://e565148a37f06299de3b6bcb3385ea0336f65c6c02c9ebfbc6f227f4e56d1c03","dweb:/ipfs/Qma6UNZifZc8zsf7J6B87CdCXhiCR6Zisyg9czsfaji6yY"],"license":"LicenseRef-DCL-1.0"},"src/lib/implementation/LibDecimalFloatImplementation.sol":{"keccak256":"0x47d0eeb542875548689465407162a19e4a21fb4591af5bb48d5758c0d1b93634","urls":["bzz-raw://631efb796ff17f277804f8a32df7d28630c2ae5300e7d74c37aa8ed1f86b5092","dweb:/ipfs/QmSfmMGQyxKYxu8UrWDEtuCggQ9HtFJy5cbMsYLPZbcTZ7"],"license":"LicenseRef-DCL-1.0"},"src/lib/table/LibLogTable.sol":{"keccak256":"0xccd2dea54cfb708c01e7e8e88c089742bbab18f5783be4632311fb4923d44c88","urls":["bzz-raw://f45fb78c16b5d66d56ba0e78acdb0ca5d315eb05efa2cd7a81e191aabe7aec52","dweb:/ipfs/QmQJ3TFFxTMu4HZ4qnjgmdmSNhGZLQRdCnSqAipEF1up1f"],"license":"LicenseRef-DCL-1.0"},"test/concrete/TestDecimalFloat.sol":{"keccak256":"0x4cb7ac6a794d06ffcc482d9f0451e57de56d4b434411e70d61949634c56c36c7","urls":["bzz-raw://c1776ad378af67be27a7c98225c58b70a33b0e6ffc4c68d69e23dcf303e8a929","dweb:/ipfs/QmfK9C9g5ncMkHFvSvGFAru8bvPTY9qxTzB3KPgGAn1EyG"],"license":"LicenseRef-DCL-1.0"}},"version":1},"id":50} \ No newline at end of file diff --git a/crates/float/src/fuzz_ops.rs b/crates/float/src/fuzz_ops.rs index 5fa22d7..4c28f78 100644 --- a/crates/float/src/fuzz_ops.rs +++ b/crates/float/src/fuzz_ops.rs @@ -26,9 +26,9 @@ mod tests { v.to_string().parse::().unwrap_or(f64::INFINITY) } - /// Generate floats in a range where f64 can represent them without - /// overflow/underflow. Coefficients up to ~1e15 and exponents -15..15 - /// keep values in f64's comfortable range. + // Generate floats in a range where f64 can represent them without + // overflow/underflow. Coefficients up to ~1e15 and exponents -15..15 + // keep values in f64's comfortable range. prop_compose! { fn f64_compatible_float()( coefficient in -10i64.pow(15)..10i64.pow(15), From b0ba3fc19bba55351ac7923d51fb0bca7834bdb2 Mon Sep 17 00:00:00 2001 From: thedavidmeister Date: Sun, 10 May 2026 23:55:29 +0400 Subject: [PATCH 4/9] test: forge test that committed artifacts match freshly built MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Belt-and-suspenders alongside the copy-artifacts.yaml workflow: the solidity test runs as part of rainix-sol-test, asserting the committed crates/float/abi/.json matches the live forge build output in out/. Drift fails the suite with a hint to run CopyArtifacts.sol. Also re-seeds the committed JSONs after a clean rebuild — solc source unit IDs in sourceMap fields shifted relative to the previous seed. Co-Authored-By: Claude Opus 4.7 (1M context) --- crates/float/abi/DecimalFloat.json | 2 +- crates/float/abi/TestDecimalFloat.json | 2 +- test/script/CopyArtifacts.t.sol | 25 +++++++++++++++++++++++++ 3 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 test/script/CopyArtifacts.t.sol diff --git a/crates/float/abi/DecimalFloat.json b/crates/float/abi/DecimalFloat.json index ee5ee0c..cd3e24f 100644 --- a/crates/float/abi/DecimalFloat.json +++ b/crates/float/abi/DecimalFloat.json @@ -1 +1 @@ -{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"FORMAT_DEFAULT_SCIENTIFIC_MAX","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"view"},{"type":"function","name":"FORMAT_DEFAULT_SCIENTIFIC_MIN","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"view"},{"type":"function","name":"abs","inputs":[{"name":"a","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"add","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"b","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"ceil","inputs":[{"name":"a","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"div","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"b","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"e","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"eq","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"b","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"floor","inputs":[{"name":"a","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"format","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"scientific","type":"bool","internalType":"bool"}],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"format","inputs":[{"name":"a","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"format","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"scientificMin","type":"bytes32","internalType":"Float"},{"name":"scientificMax","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"frac","inputs":[{"name":"a","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"fromFixedDecimalLossless","inputs":[{"name":"value","type":"uint256","internalType":"uint256"},{"name":"decimals","type":"uint8","internalType":"uint8"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"fromFixedDecimalLossy","inputs":[{"name":"value","type":"uint256","internalType":"uint256"},{"name":"decimals","type":"uint8","internalType":"uint8"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"},{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"gt","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"b","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"gte","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"b","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"integer","inputs":[{"name":"a","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"inv","inputs":[{"name":"a","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"isZero","inputs":[{"name":"a","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"log10","inputs":[{"name":"a","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"view"},{"type":"function","name":"lt","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"b","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"lte","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"b","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"max","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"b","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"maxNegativeValue","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"maxPositiveValue","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"min","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"b","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"minNegativeValue","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"minPositiveValue","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"minus","inputs":[{"name":"a","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"mul","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"b","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"parse","inputs":[{"name":"str","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"},{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"pow","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"b","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"view"},{"type":"function","name":"pow10","inputs":[{"name":"a","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"view"},{"type":"function","name":"sqrt","inputs":[{"name":"a","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"view"},{"type":"function","name":"sub","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"b","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"toFixedDecimalLossless","inputs":[{"name":"float","type":"bytes32","internalType":"Float"},{"name":"decimals","type":"uint8","internalType":"uint8"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"toFixedDecimalLossy","inputs":[{"name":"float","type":"bytes32","internalType":"Float"},{"name":"decimals","type":"uint8","internalType":"uint8"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"zero","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"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":"Log10Negative","inputs":[{"name":"signedCoefficient","type":"int256","internalType":"int256"},{"name":"exponent","type":"int256","internalType":"int256"}]},{"type":"error","name":"Log10Zero","inputs":[]},{"type":"error","name":"LogTablesNotDeployed","inputs":[{"name":"tablesAddress","type":"address","internalType":"address"},{"name":"expectedCodehash","type":"bytes32","internalType":"bytes32"},{"name":"actualCodehash","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"LossyConversionFromFloat","inputs":[{"name":"signedCoefficient","type":"int256","internalType":"int256"},{"name":"exponent","type":"int256","internalType":"int256"}]},{"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":"MulDivOverflow","inputs":[{"name":"x","type":"uint256","internalType":"uint256"},{"name":"y","type":"uint256","internalType":"uint256"},{"name":"denominator","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"NegativeFixedDecimalConversion","inputs":[{"name":"signedCoefficient","type":"int256","internalType":"int256"},{"name":"exponent","type":"int256","internalType":"int256"}]},{"type":"error","name":"PowNegativeBase","inputs":[{"name":"signedCoefficient","type":"int256","internalType":"int256"},{"name":"exponent","type":"int256","internalType":"int256"}]},{"type":"error","name":"ScientificMinNotLessThanMax","inputs":[{"name":"scientificMin","type":"bytes32","internalType":"Float"},{"name":"scientificMax","type":"bytes32","internalType":"Float"}]},{"type":"error","name":"UnformatableExponent","inputs":[{"name":"exponent","type":"int256","internalType":"int256"}]},{"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":"ZeroNegativePower","inputs":[{"name":"b","type":"bytes32","internalType":"Float"}]},{"type":"error","name":"ZeroStringStartPointer","inputs":[]}],"bytecode":{"object":"0x6080604052348015600e575f80fd5b5060156019565b60b8565b73c51a14251b0dcf0ae24a96b7153991378938f5f53f7f2573004ac3a9ee7fc8d73654d76386f1b6b99e34cdf86a689c4691e47143420f811460b557604051630912d0ff60e31b815273c51a14251b0dcf0ae24a96b7153991378938f5f560048201527f2573004ac3a9ee7fc8d73654d76386f1b6b99e34cdf86a689c4691e47143420f60248201526044810182905260640160405180910390fd5b50565b614bb7806100c55f395ff3fe608060405234801561000f575f80fd5b506004361061029d575f3560e01c806381f7e2f511610171578063cde72ef3116100d2578063dd64691711610088578063e5526ecd1161006e578063e5526ecd1461062e578063e75f991f14610641578063ffae15ba14610654575f80fd5b8063dd64691714610608578063e0db58881461061b575f80fd5b8063d1de592a116100b8578063d1de592a146105bb578063d35273a7146105ce578063d3d6ffa8146105f5575f80fd5b8063cde72ef314610582578063d102b4d3146105a8575f80fd5b8063a19684b711610127578063bc1b392d1161010d578063bc1b392d1461050b578063bc62d8d814610511578063cb09682b1461055c575f80fd5b8063a19684b7146104d2578063a90d041a146104f8575f80fd5b806396ce1ec71161015757806396ce1ec7146104885780639b4afd991461049b578063a100a3d9146104bf575f80fd5b806381f7e2f5146104625780638dc2980714610475575f80fd5b80633447c0301161021b5780635ca0e7a4116101d1578063719cd99d116101b7578063719cd99d1461042957806373bfb2831461043c57806381a822721461044f575f80fd5b80635ca0e7a4146103f0578063602c35fc14610403575f80fd5b80633b3bd868116102015780633b3bd868146103b757806341aa0080146103ca5780635b23771d146103dd575f80fd5b80633447c03014610374578063371493ce14610397575f80fd5b80631ee62f111161027057806328fa1f011161025657806328fa1f011461033b5780633004fa411461034e5780633029740014610361575f80fd5b80631ee62f11146103155780632538835014610328575f80fd5b806304327dc5146102a1578063078b665b146102c75780630b6429bc146102da578063146e82ad14610302575b5f80fd5b6102b46102af36600461452f565b61067a565b6040519081526020015b60405180910390f35b6102b46102d5366004614546565b61068a565b6102ed6102e8366004614576565b61069c565b604080519283529015156020830152016102be565b6102b461031036600461452f565b6106b4565b6102b461032336600461452f565b6106d3565b6102b461033636600461452f565b6106f2565b6102b461034936600461452f565b610711565b6102b461035c366004614546565b61071b565b6102b461036f366004614546565b61073b565b610387610382366004614546565b610746565b60405190151581526020016102be565b6103aa6103a53660046145a0565b610751565b6040516102be91906145d2565b6102b46103c5366004614576565b61075d565b6102b46103d8366004614546565b610768565b6102b46103eb366004614576565b610773565b6102b46103fe36600461452f565b61077e565b7f80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff6102b4565b6102b461043736600461452f565b610788565b61038761044a366004614546565b610792565b6102b461045d36600461452f565b61079d565b610387610470366004614546565b6107a7565b610387610483366004614546565b6107b2565b6102b4610496366004614546565b6107bd565b6102b47c090000000000000000000000000000000000000000000000000000000181565b6103aa6104cd36600461452f565b6107c8565b7f80000000000000000000000000000000000000000000000000000000000000016102b4565b6102b4610506366004614546565b610812565b5f6102b4565b61052461051f366004614652565b61081d565b604080517fffffffff0000000000000000000000000000000000000000000000000000000090931683526020830191909152016102be565b7f7fffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffff6102b4565b7f7fffffff800000000000000000000000000000000000000000000000000000006102b4565b6103876105b6366004614546565b610836565b6102b46105c9366004614546565b610841565b6102b47ffffffffc0000000000000000000000000000000000000000000000000000000181565b6102b461060336600461452f565b61084c565b61038761061636600461452f565b610856565b6102b461062936600461452f565b61087c565b6103aa61063c36600461471b565b610886565b6102ed61064f366004614576565b61090f565b7fffffffbe19cfc6ef4f44cf88f14500d013df534fcaad48fca1d5ca47bea26fcc6102b4565b5f6106848261091b565b92915050565b5f6106958383610967565b9392505050565b5f806106a88484610983565b915091505b9250929050565b5f6106848273c51a14251b0dcf0ae24a96b7153991378938f5f56109c4565b5f6106848273c51a14251b0dcf0ae24a96b7153991378938f5f56109f0565b5f6106848273c51a14251b0dcf0ae24a96b7153991378938f5f5610a3e565b5f61068482610a71565b5f610695838373c51a14251b0dcf0ae24a96b7153991378938f5f5610ab2565b5f6106958383610d0d565b5f6106958383610d70565b60606106958383610dbe565b5f6106958383610e51565b5f6106958383610e6c565b5f6106958383610eb1565b5f61068482610ee4565b5f61068482610fa6565b5f6106958383611052565b5f610684826110a2565b5f61069583836110e7565b5f6106958383611137565b5f6106958383611186565b6060610684827ffffffffc000000000000000000000000000000000000000000000000000000017c0900000000000000000000000000000000000000000000000000000001610886565b5f61069583836111cb565b5f805f8061082a856111d6565b90969095509350505050565b5f61069583836112c4565b5f6106958383611313565b5f61068482611358565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff821615610684565b5f6106848261138a565b606061089283836112c4565b6108d7576040517f3be5bf9400000000000000000000000000000000000000000000000000000000815260048101849052602481018390526044015b60405180910390fd5b5f6108e1856110a2565b9050610906856108f183876112c4565b8061090157506109018386611137565b610dbe565b95945050505050565b5f806106a884846113cb565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d61094d828261140b565b90925090505f61095d8383611459565b5095945050505050565b5f6109728383611137565b61097c5781610695565b5090919050565b5f807bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8416601b0b60e085901d6109b782828761155f565b9350935050509250929050565b5f610695837fffffffff0000000000000000000000000000000000000000000000000000000584610ab2565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d610a238483836116ae565b90925090505f610a338383611459565b509695505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d610a2384838361181f565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d82610aa48383611b54565b9150505f610a338284611459565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff848116601b0b9060e086901d908516610aef5750600191506106959050565b5f8213610b8857815f03610b4c57610b07855f6112c4565b15610b41576040517f8be82972000000000000000000000000000000000000000000000000000000008152600481018690526024016108ce565b505f91506106959050565b6040517fcceba0f100000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016108ce565b610b93856001610d70565b8015610ba45750610ba4865f611137565b15610bb3578592505050610695565b610bbd855f6112c4565b15610be657610bdd610bce8761091b565b610bd787611358565b86610ab2565b92505050610695565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8516601b0b60e086901d5f80610c198484611b54565b915091505f610c2983855f611bbc565b905060015f8080610c608f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b9160e09190911d90565b915091505b60018510610ca75784600116600103610c8a57610c8484848484611cd3565b90945092505b600185901c9450610c9d82828484611cd3565b9092509050610c65565b5f80610cb48f8e8e61181f565b91509150610cc482828a8d611cd3565b9092509050610cd48f83836116ae565b9092509050610ce582828888611cd3565b90925090505f610cf58383611459565b509e5050505050505050505050505050509392505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686611df2565b915091505f610d618383611459565b509a9950505050505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d610db384848484612416565b979650505050505050565b60607bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d5f829003610e2e576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525092505050610684565b8315610e4757610e3e828261242d565b92505050610684565b61090682826126fd565b5f805f610e5e8585612e64565b915091506109068282612ec6565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686612f20565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d610906828286612f4a565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828112610f1b57509192915050565b5f80610f278484611b54565b915091505f84128015610f3957508015155b15610f8f57610f8a82847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4612f20565b935091505b5f610f9a8385611459565b50979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828112610fdd57509192915050565b5f80610fe98484611b54565b91509150805f03610ffe575093949350505050565b5f811315610f8f57610f8a82847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4612fa6565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d611095848484846130d6565b1315979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828212156110dc5761094d82826131aa565b5f61095d8383611459565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d61112a848484846130d6565b1215979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d61117a848484846130d6565b12979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686611cd3565b5f61097283836112c4565b80515f908190602084810191850101828080806111f3868661324d565b929650909450925090507fffffffff0000000000000000000000000000000000000000000000000000000084165f036112b557848303611285575f806112398484611459565b915091508061127457507f32b8b8be000000000000000000000000000000000000000000000000000000009a5f9a5098505050505050505050565b505f9a909950975050505050505050565b507fad384e8700000000000000000000000000000000000000000000000000000000985f98509650505050505050565b5091975f975095505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d611307848484846130d6565b13979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686612fa6565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d61094d82826131aa565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d826113bd8383611b54565b5090505f610a338284611459565b5f805f805f6113da87876136ec565b9250925092505f806113ec8585611459565b91509150818380156113fb5750815b9650965050505050509250929050565b5f806106a87f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb48686611df2565b5f601b83900b83148383826114bd577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561149d57620186a0860595506005850194505b8586601b0b146114b857600a8605955084600101945061149d565b6114d3565b855f036114d357505f9250600191506106ad9050565b848560030b1461152f575f8512156114f357505f92508291506106ad9050565b6040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016108ce565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f8512156115a5576040517f4a7d166b00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016108ce565b845f036115b757505f905060016116a6565b8460ff8416850185811215611602576040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101889052602481018790526044016108ce565b5f805f83121561166c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb3831215611643575f8095509550505050506116a6565b825f03600a0a915081848161165a5761165a614744565b04955050840290911491506116a69050565b5f83131561169b5761167f83600a6148bc565b915061168b82856148c7565b9550600194506116a69350505050565b509193506001925050505b935093915050565b5f805f8412156116ea576116c284846131aa565b90945092506116d28585856116ae565b90945092506116e1848461140b565b915091506116a6565b5f806116f68686611b54565b9092509050845f80806117098585613748565b9194509250905061270d6127106117216001826148de565b8514611738576117328d8686613837565b90925090505b83156117c3575f61174a866001614904565b90505b80848583028161175f5761175f614744565b051461177657600a84059350600a8805975061174d565b6117b7611783858861492b565b8961178e878561492b565b8f87877ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6138f0565b909d509b506117ea9050565b819b507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc9a505b5050505050866117fb84835f611bbc565b611806886001614904565b6118109190614904565b94509450505050935093915050565b5f80838361182d828261398d565b90965094505f86136118ae57855f03611872576040517f561fc7b500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5d3fd4db00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016108ce565b5050837f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000036118ec576118e283604c614904565b5f915091506116a6565b7f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000008412158061193b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb561195d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb45b5f0b8412611b18575f805f805f8561197657604b611979565b604c5b611983908a614904565b90505f80876119b0577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000006119d1565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca0000000000000000005b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff169050808c81611a0357611a03614744565b05818102955090850193507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18019050611a3c8c826139e3565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000000295508594508a8414611ac8576123278114611aa357611a7e8c826001016139e3565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000002611ac5565b7f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000005b94505b50611af8838b848c89897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb46138f0565b909a509850611b098a8a835f612fa6565b975097505050505050506116a6565b611b22858561140b565b9095509350611b3286868661181f565b9095509350611b4185856131aa565b92509250506116a6565b50935093915050565b5f805f8312611b6757508290505f6106ad565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4831215611b9957505f9050826106ad565b5f839003600a0a808581611baf57611baf614744565b0794859003959350505050565b5f818303611bcb575082610695565b82821315611c0e57828203604c811380611be557505f8113155b15611bf3575f915050610695565b80600a0a8581611c0557611c05614744565b05915050610695565b818303604c811380611c2057505f8113155b15611c68576040517f1d5d6d100000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490526064016108ce565b600a81900a85810286828281611c8057611c80614744565b0514611cc9576040517f1d5d6d100000000000000000000000000000000000000000000000000000000081526004810188905260248101879052604481018690526064016108ce565b9250610695915050565b5f8085158415178015611ceb575f92505f9150611de8565b611cf58487614904565b91505f611d0188613a6a565b90505f611d0d87613a6a565b90505f611d1a8383613ad0565b5090505f6f0785ee10d5da46d900f436a000000000821115611d4f576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a7640000821115611d7057670de0b6b3a7640000820491506012015b633b9aca00821115611d8957633b9aca00820491506009015b612710821115611d9e57612710820491506004015b8115611db257600a82049150600101611d9e565b611dbc8187614904565b9550611dde8b8a611dd88787611dd387600a6148bc565b613b0b565b89613bf0565b9097509550505050505b5094509492505050565b5f80835f03611e37576040517f7a97930f00000000000000000000000000000000000000000000000000000000815260048101879052602481018690526044016108ce565b855f03611e4857505f90508061240d565b5f805f80611e568a8a613cf7565b919b5099509150611e678888613cf7565b919950975090505f611e788b613a6a565b90505f611e848a613a6a565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c818310156122a1578415611ee257507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000009050604b612260565b6f4b3b4ca85a86c47a098a22400000000083101561200e57678ac7230489e80000831015611f72576402540be400831015611f4057620186a0831015611f305750620186a0905060056121e9565b506402540be4009050600a6121e9565b655af3107a4000831015611f5f5750655af3107a40009050600e6121e9565b50678ac7230489e80000905060136121e9565b6b204fce5e3e25026110000000831015611fc45769152d02c7e14af6800000831015611fad575069152d02c7e14af6800000905060176121e9565b506b204fce5e3e250261100000009050601c6121e9565b6d314dc6448d9338c15b0a00000000831015611ff357506d314dc6448d9338c15b0a00000000905060216121e9565b506f4b3b4ca85a86c47a098a224000000000905060266121e9565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156121065773af298d050e4395d69670b12b7f410000000000008310156120a1577172cb5bd86321e38cb6ce6682e8000000000083101561208257507172cb5bd86321e38cb6ce6682e800000000009050602b6121e9565b5073af298d050e4395d69670b12b7f41000000000000905060306121e9565b76010b46c6cdd6e3e0828f4db456ff0c8ea00000000000008310156120e2575076010b46c6cdd6e3e0828f4db456ff0c8ea0000000000000905060356121e9565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a6121e9565b7c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000083101561219c577a026e4d30eccc3215dd8f3157d27e23acbdcfe6800000000000000083101561217457507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f6121e9565b507c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000905060446121e9565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca0000000000000000008310156121e957507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b81831161221d57600a820491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016121e9565b815f03612260576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018d9052602481018c90526044016108ce565b856122a1576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018f9052602481018e90526044016108ce565b807f8000000000000000000000000000000000000000000000000000000000000000018d126122d457808d039c50612347565b7f80000000000000000000000000000000000000000000000000000000000000009c90038c015f81131561234757807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038b1361233457998a0199612347565b5f8099509950505050505050505061240d565b5f808e12801561235657505f8c135b15612393577f80000000000000000000000000000000000000000000000000000000000000008e01808d1361238b575f61238f565b808d035b9150505b8b818f010397506123b08f8e6123aa888789613b0b565b8b613bf0565b90995097505f8113156123fa57604c8113156123da575f809a509a5050505050505050505061240d565b80600a0a89816123ec576123ec614744565b059850885f036123fa575f97505b5096985094965061240d95505050505050565b94509492505050565b5f612423858585856130d6565b1495945050505050565b6060612439838361398d565b90935091505f8061246a7f161bcca7119915b50764b4abe86529797775a5f171951000000000000000000086614976565b1561249a57507f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000009050604c6124c1565b507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000009050604b5b5f6124cc8387614976565b90505f6124d984886149dd565b90505f808312156124f3575060016124f0836149f0565b92505b5f82121561250a57506001612507826149f0565b91505b60408051602081019091525f81528215612613575f8061252b600a89614a20565b90505b6125388186614976565b5f0361255d57612549600a82614a20565b90508161255581614a33565b92505061252e565b60408051602081019091525f8082525b838110156125be57816040516020016125869190614a81565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052915060010161256d565b505b6125cb600a876149dd565b5f036125e3576125dc600a87614976565b95506125c0565b806125ed87613f98565b6040516020016125fe929190614ab9565b60405160208183030381529060405293505050505b5f61261d85613f98565b90505f61262a878b614904565b90505f81156126605761263c82613f98565b60405160200161264c9190614afb565b604051602081830303815290604052612670565b60405180602001604052805f8152505b90505f8561268c5760405180602001604052805f8152506126c3565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b9050808486846040516020016126dc9493929190614b2c565b6040516020818303038152906040529a505050505050505050505092915050565b60606103e882138061271857506127156103e86149f0565b82125b15612752576040517fe44c72b0000000000000000000000000000000000000000000000000000000008152600481018390526024016108ce565b5f80841290811561276d57612766856149f0565b9050612770565b50835b5f61277a82614024565b80519091505f5b81811080156127fd57508281612798600185614b56565b6127a29190614b56565b815181106127b2576127b2614b69565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f3000000000000000000000000000000000000000000000000000000000000000145b15612814578061280c81614a33565b915050612781565b5f61281f8284614b56565b90505f61282c838a614904565b90505f876128485760405180602001604052805f81525061287f565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b90505f82126129f957815f6128948286614b96565b67ffffffffffffffff8111156128ac576128ac614625565b6040519080825280601f01601f1916602001820160405280156128d6576020820181803683370190505b5090505f5b85811015612948578881815181106128f5576128f5614b69565b602001015160f81c60f81b82828151811061291257612912614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053506001016128db565b505f5b828110156129c5577f30000000000000000000000000000000000000000000000000000000000000008261297f8389614b96565b8151811061298f5761298f614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535060010161294b565b5082816040516020016129d9929190614ba9565b6040516020818303038152906040529a5050505050505050505050610684565b5f612a03836149f0565b905080841115612c1a575f612a188286614b56565b90505f612a26866001614b96565b67ffffffffffffffff811115612a3e57612a3e614625565b6040519080825280601f01601f191660200182016040528015612a68576020820181803683370190505b5090505f5b82811015612ada57898181518110612a8757612a87614b69565b602001015160f81c60f81b828281518110612aa457612aa4614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612a6d565b507f2e00000000000000000000000000000000000000000000000000000000000000818381518110612b0e57612b0e614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5b83811015612be55789612b518285614b96565b81518110612b6157612b61614b69565b01602001517fff00000000000000000000000000000000000000000000000000000000000000168282612b95866001614b96565b612b9f9190614b96565b81518110612baf57612baf614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612b3e565b508381604051602001612bf9929190614ba9565b6040516020818303038152906040529b505050505050505050505050610684565b5f612c258583614b56565b90505f85612c34836002614b96565b612c3e9190614b96565b67ffffffffffffffff811115612c5657612c56614625565b6040519080825280601f01601f191660200182016040528015612c80576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f81518110612cb657612cb6614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f2e0000000000000000000000000000000000000000000000000000000000000081600181518110612d1857612d18614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5b82811015612dc3577f300000000000000000000000000000000000000000000000000000000000000082612d7d836002614b96565b81518110612d8d57612d8d614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612d48565b505f5b86811015612be557898181518110612de057612de0614b69565b01602001517fff00000000000000000000000000000000000000000000000000000000000000168282612e14866002614b96565b612e1e9190614b96565b81518110612e2e57612e2e614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612dc6565b5f805f805f612e7387876136ec565b92509250925080612eba576040517fc471796600000000000000000000000000000000000000000000000000000000815260048101849052602481018390526044016108ce565b50909590945092505050565b5f805f612ed38585611459565b9150915080612f18576040517f22c9f7bb00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016108ce565b509392505050565b5f80612f2c84846131aa565b9094509250612f3d86868686612fa6565b9150915094509492505050565b5f805f612f5886868661155f565b9150915080612f9d576040517f05e4767800000000000000000000000000000000000000000000000000000000815260048101879052602481018690526044016108ce565b50949350505050565b5f8085158415178015612fd257865f03612fc6578484925092505061240d565b8686925092505061240d565b612fdc878761398d565b9097509550612feb858561398d565b909550935085841315612fff579395929492935b838603604c81111561301857878793509350505061240d565b80600a0a868161302a5761302a614744565b0595505086850180881860ff90811c151589881890911c151680156130c557877f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff036130ac576040517fd556b111000000000000000000000000000000000000000000000000000000008152600481018a9052602481018990526044016108ce565b600a9687900596909805860197600197909701966130c9565b8198505b5096979596505050505050565b5f80851584151781871282861218178584141780156130fb578685925092505061240d565b505f8584131561310f575092949193919260015b8386035f8112604c8213178015613142578215613134575f899450945050505061240d565b885f9450945050505061240d565b600a82900a8981028a82828161315a5761315a614744565b0514613186578415613176575f8b96509650505050505061240d565b8a5f96509650505050505061240d565b841561319b57889650945061240d9350505050565b955087945061240d9350505050565b5f807f80000000000000000000000000000000000000000000000000000000000000008403613243577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8303613236576040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101859052602481018490526044016108ce565b600a840593508260010192505b50505f9190910391565b5f8281806132628386652000000000006140e0565b9250858314158361327c81886703ff0000000000006140e0565b94508085036132b657507f34bd20690000000000000000000000000000000000000000000000000000000094505f92508291506136e39050565b5f806132c28a88614109565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613300575095505f93508392506136e3915050565b86519095506540000000000060015f9290921a9190911b16151588871016915050801561358f57506001909301925f8461334381896703ff0000000000006140e0565b955080860361337e57507f7bfa48af0000000000000000000000000000000000000000000000000000000095505f93508392506136e3915050565b855b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018051908a1160015f9290921a9190911b6601000000000000161515166001036133ed577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613380565b818114613444575f806134008484614109565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613440575097505f95508594506136e39350505050565b9350505b5f83121561347f57507f7bfa48af0000000000000000000000000000000000000000000000000000000096505f94508493506136e392505050565b831561348b57825f0392505b80820394505f8513156134cb57507f013b2aaa0000000000000000000000000000000000000000000000000000000096505f94508493506136e392505050565b855f036134da5782955061358c565b5f859003604381111561351b57507f32b8b8be0000000000000000000000000000000000000000000000000000000097505f95508594506136e39350505050565b600a0a8681025f8883838161353257613532614744565b0514159050601b82900b82141581806135485750805b1561358457507f32b8b8be000000000000000000000000000000000000000000000000000000009a505f98508897506136e39650505050505050565b505084019650505b50505b84516c2000000020000000000000000060015f9290921a9190911b1615158786101680156136d457600190950194856135cf818a652000000000006140e0565b9650866135e5818b6703ff0000000000006140e0565b975080880361362257507f013b2aaa0000000000000000000000000000000000000000000000000000000097505f95508594506136e39350505050565b505f8061362f838a614109565b90925090507fffffffff0000000000000000000000000000000000000000000000000000000082161561366f575097505f95508594506136e39350505050565b9250508482015f8313801561368357508581125b8061369757505f8312801561369757508581135b156136d057507fd556b1110000000000000000000000000000000000000000000000000000000097505f95508594506136e39350505050565b9450505b845f036136df575f93505b5050505b92959194509250565b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86111561373757600a860460018201600a88065f1493509350935050613741565b8593509150600190505b9250925092565b5f805f837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0361378057508391505f90506001613741565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc84121561380e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb08412156137df57505f9150508215156001613741565b5f846004015f03600a0a90505f8187816137fb576137fb614744565b0594505080840286141592509050613741565b5f841261382357505f91508190506001613741565b50505060048101600a0a82025f6001613741565b5f80806064613849600a612328614a20565b613856600a612328614a20565b6138619060026148c7565b61386c906001614b96565b6138769190614b96565b6138809190614b96565b90506138c4565b5f8052600280600a8504028301601e833c5f80516107d0840193505f80526001600a8606600a6064880402018501601f853c5f5101949350505050565b6138cf858288613887565b92508315611b4b576138e5600186018288613887565b915050935093915050565b5f80888803613903575083905081613981565b5f805f806139138c8b8f8d612f20565b915091505f806139258a8a8d8c612f20565b9150915061393584848484611cd3565b8096508197505050505050505f8061394f8b8b8f8d612f20565b915091505f8061396186868686611df2565b915091505f8061397384848f8e612fa6565b909a50985050505050505050505b97509795505050505050565b5f805f805f61399c8787613cf7565b92509250925080612eba576040517f05e51ecb00000000000000000000000000000000000000000000000000000000815260048101889052602481018790526044016108ce565b5f806139f2600a612328614a20565b6139fd9060026148c7565b613a08906001614b96565b90505f613a18600a612328614a20565b90506002600a8504026001015f8052600281601e883c505f51617fff81169350618000811615613a4757918101915b505f80526001600a8506600a6064870402018301601f873c50505f510192915050565b5f80821215613ac7577f80000000000000000000000000000000000000000000000000000000000000008203613ac157507f8000000000000000000000000000000000000000000000000000000000000000919050565b505f0390565b5090565b919050565b5f807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83850993909202808410938190039390930393915050565b5f805f613b188686613ad0565b91509150815f03613b3c57838181613b3257613b32614744565b0492505050610695565b838210613b86576040517f6c59da120000000000000000000000000000000000000000000000000000000081526004810187905260248101869052604481018590526064016108ce565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f8587181215613cba577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115613ca757613c4f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001614b96565b8403613c7f57507f800000000000000000000000000000000000000000000000000000000000000090508161240d565b613c8a600a85614a20565b613c93906149f0565b613c9e846001614904565b9150915061240d565b613cb0846149f0565b839150915061240d565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115613ced57613c93600a85614a20565b508290508161240d565b5f805f845f03613d0f57505f91508190506001613741565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee800000000000000000085055f03613f23576f4b3b4ca85a86c47a098a2240000000008505158015613d7857507f80000000000000000000000000000000000000000000000000000000000000268412155b15613d99576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a000000000000008505158015613de157507f80000000000000000000000000000000000000000000000000000000000000138412155b15613dfa57678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c6400000000000000008505158015613e4657507f800000000000000000000000000000000000000000000000000000000000000a8412155b15613e5c576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e40000000000000000008505158015613eab57507f80000000000000000000000000000000000000000000000000000000000000028412155b15613ec157606485029450600284039350613e5c565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000008505158015613f1157507f80000000000000000000000000000000000000000000000000000000000000018412155b15613f2357600a850294506001840393505b600a80860290810586148015613f5957507f80000000000000000000000000000000000000000000000000000000000000018512155b15613f68578095506001850394505b50939492935050507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000008305151590565b60605f8212613fb55760405180602001604052805f815250613fec565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b613ffd60ff84901d80850118614024565b60405160200161400e929190614ba9565b6040516020818303038152906040529050919050565b60605f61403083614233565b60010190505f8167ffffffffffffffff81111561404f5761404f614625565b6040519080825280601f01601f191660200182016040528015614079576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461408357509392505050565b5f5b5f82600186515f1a1b16118385101615614101576001840193506140e2565b509192915050565b81515f90819065200000000000600191831a9190911b161515838510168085019082806141368488614314565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615614171575093505f92506106ad915050565b825f036141d4577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116141a5575f6141c7565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b955093506106ad92505050565b7f80000000000000000000000000000000000000000000000000000000000000008111614201575f614223565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95505f0393505050509250929050565b5f807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061427b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106142a7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106142c557662386f26fc10000830492506010015b6305f5e10083106142dd576305f5e100830492506008015b61271083106142f157612710830492506004015b60648310614303576064830492506002015b600a83106106845760010192915050565b5f8082841061434757507f34bd20690000000000000000000000000000000000000000000000000000000090505f6106ad565b835f03614380576040517fda6966d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60305f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501815b8782101580156143b85750604d83105b156143fb57815160018401937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90930192600a0a5f9190911a85900302016143a8565b8782106145215781515f1a849003600181111561444357507f0fdc26350000000000000000000000000000000000000000000000000000000095505f94506106ad9350505050565b600a84900a810282810183111561448657507f0fdc26350000000000000000000000000000000000000000000000000000000096505f95506106ad945050505050565b9190910190507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101905b8782106145215781515f1a603081146144f657507f0fdc26350000000000000000000000000000000000000000000000000000000095505f94506106ad9350505050565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101906144b2565b5f9890975095505050505050565b5f6020828403121561453f575f80fd5b5035919050565b5f8060408385031215614557575f80fd5b50508035926020909101359150565b803560ff81168114613acb575f80fd5b5f8060408385031215614587575f80fd5b8235915061459760208401614566565b90509250929050565b5f80604083850312156145b1575f80fd5b82359150602083013580151581146145c7575f80fd5b809150509250929050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60208284031215614662575f80fd5b813567ffffffffffffffff80821115614679575f80fd5b818401915084601f83011261468c575f80fd5b81358181111561469e5761469e614625565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156146e4576146e4614625565b816040528281528760208487010111156146fc575f80fd5b826020860160208301375f928101602001929092525095945050505050565b5f805f6060848603121561472d575f80fd5b505081359360208301359350604090920135919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b600181815b808511156147f757817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156147dd576147dd614771565b808516156147ea57918102915b93841c93908002906147a3565b509250929050565b5f8261480d57506001610684565b8161481957505f610684565b816001811461482f576002811461483957614855565b6001915050610684565b60ff84111561484a5761484a614771565b50506001821b610684565b5060208310610133831016604e8410600b8410161715614878575081810a610684565b614882838361479e565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156148b4576148b4614771565b029392505050565b5f61069583836147ff565b808202811582820484141761068457610684614771565b8181035f8312801583831316838312821617156148fd576148fd614771565b5092915050565b8082018281125f83128015821682158216171561492357614923614771565b505092915050565b8082025f82127f80000000000000000000000000000000000000000000000000000000000000008414161561496257614962614771565b818105831482151761068457610684614771565b5f8261498457614984614744565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f8000000000000000000000000000000000000000000000000000000000000000831416156149d8576149d8614771565b500590565b5f826149eb576149eb614744565b500790565b5f7f80000000000000000000000000000000000000000000000000000000000000008203613ac157613ac1614771565b5f82614a2e57614a2e614744565b500490565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a6357614a63614771565b5060010190565b5f81518060208401855e5f93019283525090919050565b5f614a8c8284614a6a565b7f300000000000000000000000000000000000000000000000000000000000000081526001019392505050565b7f2e0000000000000000000000000000000000000000000000000000000000000081525f614af3614aed6001840186614a6a565b84614a6a565b949350505050565b7f650000000000000000000000000000000000000000000000000000000000000081525f6106956001830184614a6a565b5f614b4c614aed614b46614b40858a614a6a565b88614a6a565b86614a6a565b9695505050505050565b8181038181111561068457610684614771565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b8082018082111561068457610684614771565b5f614af3614aed8386614a6a56","sourceMap":"525:13549:37:-:0;;;1114:77;;;;;;;;;-1:-1:-1;1138:46:37;:44;:46::i;:::-;525:13549;;2590:358:43;721:42;2673;934:66;2729:47;;2725:217;;2799:132;;-1:-1:-1;;;2799:132:43;;721:42;2799:132;;;216:51:134;934:66:43;283:18:134;;;276:34;326:18;;;319:34;;;189:18;;2799:132:43;;;;;;;2725:217;2638:310;2590:358::o;14:345:134:-;525:13549:37;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561000f575f80fd5b506004361061029d575f3560e01c806381f7e2f511610171578063cde72ef3116100d2578063dd64691711610088578063e5526ecd1161006e578063e5526ecd1461062e578063e75f991f14610641578063ffae15ba14610654575f80fd5b8063dd64691714610608578063e0db58881461061b575f80fd5b8063d1de592a116100b8578063d1de592a146105bb578063d35273a7146105ce578063d3d6ffa8146105f5575f80fd5b8063cde72ef314610582578063d102b4d3146105a8575f80fd5b8063a19684b711610127578063bc1b392d1161010d578063bc1b392d1461050b578063bc62d8d814610511578063cb09682b1461055c575f80fd5b8063a19684b7146104d2578063a90d041a146104f8575f80fd5b806396ce1ec71161015757806396ce1ec7146104885780639b4afd991461049b578063a100a3d9146104bf575f80fd5b806381f7e2f5146104625780638dc2980714610475575f80fd5b80633447c0301161021b5780635ca0e7a4116101d1578063719cd99d116101b7578063719cd99d1461042957806373bfb2831461043c57806381a822721461044f575f80fd5b80635ca0e7a4146103f0578063602c35fc14610403575f80fd5b80633b3bd868116102015780633b3bd868146103b757806341aa0080146103ca5780635b23771d146103dd575f80fd5b80633447c03014610374578063371493ce14610397575f80fd5b80631ee62f111161027057806328fa1f011161025657806328fa1f011461033b5780633004fa411461034e5780633029740014610361575f80fd5b80631ee62f11146103155780632538835014610328575f80fd5b806304327dc5146102a1578063078b665b146102c75780630b6429bc146102da578063146e82ad14610302575b5f80fd5b6102b46102af36600461452f565b61067a565b6040519081526020015b60405180910390f35b6102b46102d5366004614546565b61068a565b6102ed6102e8366004614576565b61069c565b604080519283529015156020830152016102be565b6102b461031036600461452f565b6106b4565b6102b461032336600461452f565b6106d3565b6102b461033636600461452f565b6106f2565b6102b461034936600461452f565b610711565b6102b461035c366004614546565b61071b565b6102b461036f366004614546565b61073b565b610387610382366004614546565b610746565b60405190151581526020016102be565b6103aa6103a53660046145a0565b610751565b6040516102be91906145d2565b6102b46103c5366004614576565b61075d565b6102b46103d8366004614546565b610768565b6102b46103eb366004614576565b610773565b6102b46103fe36600461452f565b61077e565b7f80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff6102b4565b6102b461043736600461452f565b610788565b61038761044a366004614546565b610792565b6102b461045d36600461452f565b61079d565b610387610470366004614546565b6107a7565b610387610483366004614546565b6107b2565b6102b4610496366004614546565b6107bd565b6102b47c090000000000000000000000000000000000000000000000000000000181565b6103aa6104cd36600461452f565b6107c8565b7f80000000000000000000000000000000000000000000000000000000000000016102b4565b6102b4610506366004614546565b610812565b5f6102b4565b61052461051f366004614652565b61081d565b604080517fffffffff0000000000000000000000000000000000000000000000000000000090931683526020830191909152016102be565b7f7fffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffff6102b4565b7f7fffffff800000000000000000000000000000000000000000000000000000006102b4565b6103876105b6366004614546565b610836565b6102b46105c9366004614546565b610841565b6102b47ffffffffc0000000000000000000000000000000000000000000000000000000181565b6102b461060336600461452f565b61084c565b61038761061636600461452f565b610856565b6102b461062936600461452f565b61087c565b6103aa61063c36600461471b565b610886565b6102ed61064f366004614576565b61090f565b7fffffffbe19cfc6ef4f44cf88f14500d013df534fcaad48fca1d5ca47bea26fcc6102b4565b5f6106848261091b565b92915050565b5f6106958383610967565b9392505050565b5f806106a88484610983565b915091505b9250929050565b5f6106848273c51a14251b0dcf0ae24a96b7153991378938f5f56109c4565b5f6106848273c51a14251b0dcf0ae24a96b7153991378938f5f56109f0565b5f6106848273c51a14251b0dcf0ae24a96b7153991378938f5f5610a3e565b5f61068482610a71565b5f610695838373c51a14251b0dcf0ae24a96b7153991378938f5f5610ab2565b5f6106958383610d0d565b5f6106958383610d70565b60606106958383610dbe565b5f6106958383610e51565b5f6106958383610e6c565b5f6106958383610eb1565b5f61068482610ee4565b5f61068482610fa6565b5f6106958383611052565b5f610684826110a2565b5f61069583836110e7565b5f6106958383611137565b5f6106958383611186565b6060610684827ffffffffc000000000000000000000000000000000000000000000000000000017c0900000000000000000000000000000000000000000000000000000001610886565b5f61069583836111cb565b5f805f8061082a856111d6565b90969095509350505050565b5f61069583836112c4565b5f6106958383611313565b5f61068482611358565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff821615610684565b5f6106848261138a565b606061089283836112c4565b6108d7576040517f3be5bf9400000000000000000000000000000000000000000000000000000000815260048101849052602481018390526044015b60405180910390fd5b5f6108e1856110a2565b9050610906856108f183876112c4565b8061090157506109018386611137565b610dbe565b95945050505050565b5f806106a884846113cb565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d61094d828261140b565b90925090505f61095d8383611459565b5095945050505050565b5f6109728383611137565b61097c5781610695565b5090919050565b5f807bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8416601b0b60e085901d6109b782828761155f565b9350935050509250929050565b5f610695837fffffffff0000000000000000000000000000000000000000000000000000000584610ab2565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d610a238483836116ae565b90925090505f610a338383611459565b509695505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d610a2384838361181f565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d82610aa48383611b54565b9150505f610a338284611459565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff848116601b0b9060e086901d908516610aef5750600191506106959050565b5f8213610b8857815f03610b4c57610b07855f6112c4565b15610b41576040517f8be82972000000000000000000000000000000000000000000000000000000008152600481018690526024016108ce565b505f91506106959050565b6040517fcceba0f100000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016108ce565b610b93856001610d70565b8015610ba45750610ba4865f611137565b15610bb3578592505050610695565b610bbd855f6112c4565b15610be657610bdd610bce8761091b565b610bd787611358565b86610ab2565b92505050610695565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8516601b0b60e086901d5f80610c198484611b54565b915091505f610c2983855f611bbc565b905060015f8080610c608f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b9160e09190911d90565b915091505b60018510610ca75784600116600103610c8a57610c8484848484611cd3565b90945092505b600185901c9450610c9d82828484611cd3565b9092509050610c65565b5f80610cb48f8e8e61181f565b91509150610cc482828a8d611cd3565b9092509050610cd48f83836116ae565b9092509050610ce582828888611cd3565b90925090505f610cf58383611459565b509e5050505050505050505050505050509392505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686611df2565b915091505f610d618383611459565b509a9950505050505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d610db384848484612416565b979650505050505050565b60607bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d5f829003610e2e576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525092505050610684565b8315610e4757610e3e828261242d565b92505050610684565b61090682826126fd565b5f805f610e5e8585612e64565b915091506109068282612ec6565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686612f20565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d610906828286612f4a565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828112610f1b57509192915050565b5f80610f278484611b54565b915091505f84128015610f3957508015155b15610f8f57610f8a82847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4612f20565b935091505b5f610f9a8385611459565b50979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828112610fdd57509192915050565b5f80610fe98484611b54565b91509150805f03610ffe575093949350505050565b5f811315610f8f57610f8a82847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4612fa6565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d611095848484846130d6565b1315979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828212156110dc5761094d82826131aa565b5f61095d8383611459565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d61112a848484846130d6565b1215979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d61117a848484846130d6565b12979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686611cd3565b5f61097283836112c4565b80515f908190602084810191850101828080806111f3868661324d565b929650909450925090507fffffffff0000000000000000000000000000000000000000000000000000000084165f036112b557848303611285575f806112398484611459565b915091508061127457507f32b8b8be000000000000000000000000000000000000000000000000000000009a5f9a5098505050505050505050565b505f9a909950975050505050505050565b507fad384e8700000000000000000000000000000000000000000000000000000000985f98509650505050505050565b5091975f975095505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d611307848484846130d6565b13979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686612fa6565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d61094d82826131aa565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d826113bd8383611b54565b5090505f610a338284611459565b5f805f805f6113da87876136ec565b9250925092505f806113ec8585611459565b91509150818380156113fb5750815b9650965050505050509250929050565b5f806106a87f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb48686611df2565b5f601b83900b83148383826114bd577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561149d57620186a0860595506005850194505b8586601b0b146114b857600a8605955084600101945061149d565b6114d3565b855f036114d357505f9250600191506106ad9050565b848560030b1461152f575f8512156114f357505f92508291506106ad9050565b6040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016108ce565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f8512156115a5576040517f4a7d166b00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016108ce565b845f036115b757505f905060016116a6565b8460ff8416850185811215611602576040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101889052602481018790526044016108ce565b5f805f83121561166c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb3831215611643575f8095509550505050506116a6565b825f03600a0a915081848161165a5761165a614744565b04955050840290911491506116a69050565b5f83131561169b5761167f83600a6148bc565b915061168b82856148c7565b9550600194506116a69350505050565b509193506001925050505b935093915050565b5f805f8412156116ea576116c284846131aa565b90945092506116d28585856116ae565b90945092506116e1848461140b565b915091506116a6565b5f806116f68686611b54565b9092509050845f80806117098585613748565b9194509250905061270d6127106117216001826148de565b8514611738576117328d8686613837565b90925090505b83156117c3575f61174a866001614904565b90505b80848583028161175f5761175f614744565b051461177657600a84059350600a8805975061174d565b6117b7611783858861492b565b8961178e878561492b565b8f87877ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6138f0565b909d509b506117ea9050565b819b507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc9a505b5050505050866117fb84835f611bbc565b611806886001614904565b6118109190614904565b94509450505050935093915050565b5f80838361182d828261398d565b90965094505f86136118ae57855f03611872576040517f561fc7b500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5d3fd4db00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016108ce565b5050837f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000036118ec576118e283604c614904565b5f915091506116a6565b7f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000008412158061193b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb561195d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb45b5f0b8412611b18575f805f805f8561197657604b611979565b604c5b611983908a614904565b90505f80876119b0577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000006119d1565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca0000000000000000005b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff169050808c81611a0357611a03614744565b05818102955090850193507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18019050611a3c8c826139e3565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000000295508594508a8414611ac8576123278114611aa357611a7e8c826001016139e3565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000002611ac5565b7f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000005b94505b50611af8838b848c89897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb46138f0565b909a509850611b098a8a835f612fa6565b975097505050505050506116a6565b611b22858561140b565b9095509350611b3286868661181f565b9095509350611b4185856131aa565b92509250506116a6565b50935093915050565b5f805f8312611b6757508290505f6106ad565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4831215611b9957505f9050826106ad565b5f839003600a0a808581611baf57611baf614744565b0794859003959350505050565b5f818303611bcb575082610695565b82821315611c0e57828203604c811380611be557505f8113155b15611bf3575f915050610695565b80600a0a8581611c0557611c05614744565b05915050610695565b818303604c811380611c2057505f8113155b15611c68576040517f1d5d6d100000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490526064016108ce565b600a81900a85810286828281611c8057611c80614744565b0514611cc9576040517f1d5d6d100000000000000000000000000000000000000000000000000000000081526004810188905260248101879052604481018690526064016108ce565b9250610695915050565b5f8085158415178015611ceb575f92505f9150611de8565b611cf58487614904565b91505f611d0188613a6a565b90505f611d0d87613a6a565b90505f611d1a8383613ad0565b5090505f6f0785ee10d5da46d900f436a000000000821115611d4f576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a7640000821115611d7057670de0b6b3a7640000820491506012015b633b9aca00821115611d8957633b9aca00820491506009015b612710821115611d9e57612710820491506004015b8115611db257600a82049150600101611d9e565b611dbc8187614904565b9550611dde8b8a611dd88787611dd387600a6148bc565b613b0b565b89613bf0565b9097509550505050505b5094509492505050565b5f80835f03611e37576040517f7a97930f00000000000000000000000000000000000000000000000000000000815260048101879052602481018690526044016108ce565b855f03611e4857505f90508061240d565b5f805f80611e568a8a613cf7565b919b5099509150611e678888613cf7565b919950975090505f611e788b613a6a565b90505f611e848a613a6a565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c818310156122a1578415611ee257507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000009050604b612260565b6f4b3b4ca85a86c47a098a22400000000083101561200e57678ac7230489e80000831015611f72576402540be400831015611f4057620186a0831015611f305750620186a0905060056121e9565b506402540be4009050600a6121e9565b655af3107a4000831015611f5f5750655af3107a40009050600e6121e9565b50678ac7230489e80000905060136121e9565b6b204fce5e3e25026110000000831015611fc45769152d02c7e14af6800000831015611fad575069152d02c7e14af6800000905060176121e9565b506b204fce5e3e250261100000009050601c6121e9565b6d314dc6448d9338c15b0a00000000831015611ff357506d314dc6448d9338c15b0a00000000905060216121e9565b506f4b3b4ca85a86c47a098a224000000000905060266121e9565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156121065773af298d050e4395d69670b12b7f410000000000008310156120a1577172cb5bd86321e38cb6ce6682e8000000000083101561208257507172cb5bd86321e38cb6ce6682e800000000009050602b6121e9565b5073af298d050e4395d69670b12b7f41000000000000905060306121e9565b76010b46c6cdd6e3e0828f4db456ff0c8ea00000000000008310156120e2575076010b46c6cdd6e3e0828f4db456ff0c8ea0000000000000905060356121e9565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a6121e9565b7c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000083101561219c577a026e4d30eccc3215dd8f3157d27e23acbdcfe6800000000000000083101561217457507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f6121e9565b507c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000905060446121e9565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca0000000000000000008310156121e957507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b81831161221d57600a820491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016121e9565b815f03612260576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018d9052602481018c90526044016108ce565b856122a1576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018f9052602481018e90526044016108ce565b807f8000000000000000000000000000000000000000000000000000000000000000018d126122d457808d039c50612347565b7f80000000000000000000000000000000000000000000000000000000000000009c90038c015f81131561234757807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038b1361233457998a0199612347565b5f8099509950505050505050505061240d565b5f808e12801561235657505f8c135b15612393577f80000000000000000000000000000000000000000000000000000000000000008e01808d1361238b575f61238f565b808d035b9150505b8b818f010397506123b08f8e6123aa888789613b0b565b8b613bf0565b90995097505f8113156123fa57604c8113156123da575f809a509a5050505050505050505061240d565b80600a0a89816123ec576123ec614744565b059850885f036123fa575f97505b5096985094965061240d95505050505050565b94509492505050565b5f612423858585856130d6565b1495945050505050565b6060612439838361398d565b90935091505f8061246a7f161bcca7119915b50764b4abe86529797775a5f171951000000000000000000086614976565b1561249a57507f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000009050604c6124c1565b507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000009050604b5b5f6124cc8387614976565b90505f6124d984886149dd565b90505f808312156124f3575060016124f0836149f0565b92505b5f82121561250a57506001612507826149f0565b91505b60408051602081019091525f81528215612613575f8061252b600a89614a20565b90505b6125388186614976565b5f0361255d57612549600a82614a20565b90508161255581614a33565b92505061252e565b60408051602081019091525f8082525b838110156125be57816040516020016125869190614a81565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052915060010161256d565b505b6125cb600a876149dd565b5f036125e3576125dc600a87614976565b95506125c0565b806125ed87613f98565b6040516020016125fe929190614ab9565b60405160208183030381529060405293505050505b5f61261d85613f98565b90505f61262a878b614904565b90505f81156126605761263c82613f98565b60405160200161264c9190614afb565b604051602081830303815290604052612670565b60405180602001604052805f8152505b90505f8561268c5760405180602001604052805f8152506126c3565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b9050808486846040516020016126dc9493929190614b2c565b6040516020818303038152906040529a505050505050505050505092915050565b60606103e882138061271857506127156103e86149f0565b82125b15612752576040517fe44c72b0000000000000000000000000000000000000000000000000000000008152600481018390526024016108ce565b5f80841290811561276d57612766856149f0565b9050612770565b50835b5f61277a82614024565b80519091505f5b81811080156127fd57508281612798600185614b56565b6127a29190614b56565b815181106127b2576127b2614b69565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f3000000000000000000000000000000000000000000000000000000000000000145b15612814578061280c81614a33565b915050612781565b5f61281f8284614b56565b90505f61282c838a614904565b90505f876128485760405180602001604052805f81525061287f565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b90505f82126129f957815f6128948286614b96565b67ffffffffffffffff8111156128ac576128ac614625565b6040519080825280601f01601f1916602001820160405280156128d6576020820181803683370190505b5090505f5b85811015612948578881815181106128f5576128f5614b69565b602001015160f81c60f81b82828151811061291257612912614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053506001016128db565b505f5b828110156129c5577f30000000000000000000000000000000000000000000000000000000000000008261297f8389614b96565b8151811061298f5761298f614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535060010161294b565b5082816040516020016129d9929190614ba9565b6040516020818303038152906040529a5050505050505050505050610684565b5f612a03836149f0565b905080841115612c1a575f612a188286614b56565b90505f612a26866001614b96565b67ffffffffffffffff811115612a3e57612a3e614625565b6040519080825280601f01601f191660200182016040528015612a68576020820181803683370190505b5090505f5b82811015612ada57898181518110612a8757612a87614b69565b602001015160f81c60f81b828281518110612aa457612aa4614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612a6d565b507f2e00000000000000000000000000000000000000000000000000000000000000818381518110612b0e57612b0e614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5b83811015612be55789612b518285614b96565b81518110612b6157612b61614b69565b01602001517fff00000000000000000000000000000000000000000000000000000000000000168282612b95866001614b96565b612b9f9190614b96565b81518110612baf57612baf614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612b3e565b508381604051602001612bf9929190614ba9565b6040516020818303038152906040529b505050505050505050505050610684565b5f612c258583614b56565b90505f85612c34836002614b96565b612c3e9190614b96565b67ffffffffffffffff811115612c5657612c56614625565b6040519080825280601f01601f191660200182016040528015612c80576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f81518110612cb657612cb6614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f2e0000000000000000000000000000000000000000000000000000000000000081600181518110612d1857612d18614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5b82811015612dc3577f300000000000000000000000000000000000000000000000000000000000000082612d7d836002614b96565b81518110612d8d57612d8d614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612d48565b505f5b86811015612be557898181518110612de057612de0614b69565b01602001517fff00000000000000000000000000000000000000000000000000000000000000168282612e14866002614b96565b612e1e9190614b96565b81518110612e2e57612e2e614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612dc6565b5f805f805f612e7387876136ec565b92509250925080612eba576040517fc471796600000000000000000000000000000000000000000000000000000000815260048101849052602481018390526044016108ce565b50909590945092505050565b5f805f612ed38585611459565b9150915080612f18576040517f22c9f7bb00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016108ce565b509392505050565b5f80612f2c84846131aa565b9094509250612f3d86868686612fa6565b9150915094509492505050565b5f805f612f5886868661155f565b9150915080612f9d576040517f05e4767800000000000000000000000000000000000000000000000000000000815260048101879052602481018690526044016108ce565b50949350505050565b5f8085158415178015612fd257865f03612fc6578484925092505061240d565b8686925092505061240d565b612fdc878761398d565b9097509550612feb858561398d565b909550935085841315612fff579395929492935b838603604c81111561301857878793509350505061240d565b80600a0a868161302a5761302a614744565b0595505086850180881860ff90811c151589881890911c151680156130c557877f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff036130ac576040517fd556b111000000000000000000000000000000000000000000000000000000008152600481018a9052602481018990526044016108ce565b600a9687900596909805860197600197909701966130c9565b8198505b5096979596505050505050565b5f80851584151781871282861218178584141780156130fb578685925092505061240d565b505f8584131561310f575092949193919260015b8386035f8112604c8213178015613142578215613134575f899450945050505061240d565b885f9450945050505061240d565b600a82900a8981028a82828161315a5761315a614744565b0514613186578415613176575f8b96509650505050505061240d565b8a5f96509650505050505061240d565b841561319b57889650945061240d9350505050565b955087945061240d9350505050565b5f807f80000000000000000000000000000000000000000000000000000000000000008403613243577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8303613236576040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101859052602481018490526044016108ce565b600a840593508260010192505b50505f9190910391565b5f8281806132628386652000000000006140e0565b9250858314158361327c81886703ff0000000000006140e0565b94508085036132b657507f34bd20690000000000000000000000000000000000000000000000000000000094505f92508291506136e39050565b5f806132c28a88614109565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613300575095505f93508392506136e3915050565b86519095506540000000000060015f9290921a9190911b16151588871016915050801561358f57506001909301925f8461334381896703ff0000000000006140e0565b955080860361337e57507f7bfa48af0000000000000000000000000000000000000000000000000000000095505f93508392506136e3915050565b855b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018051908a1160015f9290921a9190911b6601000000000000161515166001036133ed577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613380565b818114613444575f806134008484614109565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613440575097505f95508594506136e39350505050565b9350505b5f83121561347f57507f7bfa48af0000000000000000000000000000000000000000000000000000000096505f94508493506136e392505050565b831561348b57825f0392505b80820394505f8513156134cb57507f013b2aaa0000000000000000000000000000000000000000000000000000000096505f94508493506136e392505050565b855f036134da5782955061358c565b5f859003604381111561351b57507f32b8b8be0000000000000000000000000000000000000000000000000000000097505f95508594506136e39350505050565b600a0a8681025f8883838161353257613532614744565b0514159050601b82900b82141581806135485750805b1561358457507f32b8b8be000000000000000000000000000000000000000000000000000000009a505f98508897506136e39650505050505050565b505084019650505b50505b84516c2000000020000000000000000060015f9290921a9190911b1615158786101680156136d457600190950194856135cf818a652000000000006140e0565b9650866135e5818b6703ff0000000000006140e0565b975080880361362257507f013b2aaa0000000000000000000000000000000000000000000000000000000097505f95508594506136e39350505050565b505f8061362f838a614109565b90925090507fffffffff0000000000000000000000000000000000000000000000000000000082161561366f575097505f95508594506136e39350505050565b9250508482015f8313801561368357508581125b8061369757505f8312801561369757508581135b156136d057507fd556b1110000000000000000000000000000000000000000000000000000000097505f95508594506136e39350505050565b9450505b845f036136df575f93505b5050505b92959194509250565b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86111561373757600a860460018201600a88065f1493509350935050613741565b8593509150600190505b9250925092565b5f805f837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0361378057508391505f90506001613741565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc84121561380e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb08412156137df57505f9150508215156001613741565b5f846004015f03600a0a90505f8187816137fb576137fb614744565b0594505080840286141592509050613741565b5f841261382357505f91508190506001613741565b50505060048101600a0a82025f6001613741565b5f80806064613849600a612328614a20565b613856600a612328614a20565b6138619060026148c7565b61386c906001614b96565b6138769190614b96565b6138809190614b96565b90506138c4565b5f8052600280600a8504028301601e833c5f80516107d0840193505f80526001600a8606600a6064880402018501601f853c5f5101949350505050565b6138cf858288613887565b92508315611b4b576138e5600186018288613887565b915050935093915050565b5f80888803613903575083905081613981565b5f805f806139138c8b8f8d612f20565b915091505f806139258a8a8d8c612f20565b9150915061393584848484611cd3565b8096508197505050505050505f8061394f8b8b8f8d612f20565b915091505f8061396186868686611df2565b915091505f8061397384848f8e612fa6565b909a50985050505050505050505b97509795505050505050565b5f805f805f61399c8787613cf7565b92509250925080612eba576040517f05e51ecb00000000000000000000000000000000000000000000000000000000815260048101889052602481018790526044016108ce565b5f806139f2600a612328614a20565b6139fd9060026148c7565b613a08906001614b96565b90505f613a18600a612328614a20565b90506002600a8504026001015f8052600281601e883c505f51617fff81169350618000811615613a4757918101915b505f80526001600a8506600a6064870402018301601f873c50505f510192915050565b5f80821215613ac7577f80000000000000000000000000000000000000000000000000000000000000008203613ac157507f8000000000000000000000000000000000000000000000000000000000000000919050565b505f0390565b5090565b919050565b5f807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83850993909202808410938190039390930393915050565b5f805f613b188686613ad0565b91509150815f03613b3c57838181613b3257613b32614744565b0492505050610695565b838210613b86576040517f6c59da120000000000000000000000000000000000000000000000000000000081526004810187905260248101869052604481018590526064016108ce565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f8587181215613cba577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115613ca757613c4f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001614b96565b8403613c7f57507f800000000000000000000000000000000000000000000000000000000000000090508161240d565b613c8a600a85614a20565b613c93906149f0565b613c9e846001614904565b9150915061240d565b613cb0846149f0565b839150915061240d565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115613ced57613c93600a85614a20565b508290508161240d565b5f805f845f03613d0f57505f91508190506001613741565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee800000000000000000085055f03613f23576f4b3b4ca85a86c47a098a2240000000008505158015613d7857507f80000000000000000000000000000000000000000000000000000000000000268412155b15613d99576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a000000000000008505158015613de157507f80000000000000000000000000000000000000000000000000000000000000138412155b15613dfa57678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c6400000000000000008505158015613e4657507f800000000000000000000000000000000000000000000000000000000000000a8412155b15613e5c576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e40000000000000000008505158015613eab57507f80000000000000000000000000000000000000000000000000000000000000028412155b15613ec157606485029450600284039350613e5c565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000008505158015613f1157507f80000000000000000000000000000000000000000000000000000000000000018412155b15613f2357600a850294506001840393505b600a80860290810586148015613f5957507f80000000000000000000000000000000000000000000000000000000000000018512155b15613f68578095506001850394505b50939492935050507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000008305151590565b60605f8212613fb55760405180602001604052805f815250613fec565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b613ffd60ff84901d80850118614024565b60405160200161400e929190614ba9565b6040516020818303038152906040529050919050565b60605f61403083614233565b60010190505f8167ffffffffffffffff81111561404f5761404f614625565b6040519080825280601f01601f191660200182016040528015614079576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461408357509392505050565b5f5b5f82600186515f1a1b16118385101615614101576001840193506140e2565b509192915050565b81515f90819065200000000000600191831a9190911b161515838510168085019082806141368488614314565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615614171575093505f92506106ad915050565b825f036141d4577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116141a5575f6141c7565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b955093506106ad92505050565b7f80000000000000000000000000000000000000000000000000000000000000008111614201575f614223565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95505f0393505050509250929050565b5f807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061427b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106142a7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106142c557662386f26fc10000830492506010015b6305f5e10083106142dd576305f5e100830492506008015b61271083106142f157612710830492506004015b60648310614303576064830492506002015b600a83106106845760010192915050565b5f8082841061434757507f34bd20690000000000000000000000000000000000000000000000000000000090505f6106ad565b835f03614380576040517fda6966d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60305f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501815b8782101580156143b85750604d83105b156143fb57815160018401937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90930192600a0a5f9190911a85900302016143a8565b8782106145215781515f1a849003600181111561444357507f0fdc26350000000000000000000000000000000000000000000000000000000095505f94506106ad9350505050565b600a84900a810282810183111561448657507f0fdc26350000000000000000000000000000000000000000000000000000000096505f95506106ad945050505050565b9190910190507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101905b8782106145215781515f1a603081146144f657507f0fdc26350000000000000000000000000000000000000000000000000000000095505f94506106ad9350505050565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101906144b2565b5f9890975095505050505050565b5f6020828403121561453f575f80fd5b5035919050565b5f8060408385031215614557575f80fd5b50508035926020909101359150565b803560ff81168114613acb575f80fd5b5f8060408385031215614587575f80fd5b8235915061459760208401614566565b90509250929050565b5f80604083850312156145b1575f80fd5b82359150602083013580151581146145c7575f80fd5b809150509250929050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60208284031215614662575f80fd5b813567ffffffffffffffff80821115614679575f80fd5b818401915084601f83011261468c575f80fd5b81358181111561469e5761469e614625565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156146e4576146e4614625565b816040528281528760208487010111156146fc575f80fd5b826020860160208301375f928101602001929092525095945050505050565b5f805f6060848603121561472d575f80fd5b505081359360208301359350604090920135919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b600181815b808511156147f757817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156147dd576147dd614771565b808516156147ea57918102915b93841c93908002906147a3565b509250929050565b5f8261480d57506001610684565b8161481957505f610684565b816001811461482f576002811461483957614855565b6001915050610684565b60ff84111561484a5761484a614771565b50506001821b610684565b5060208310610133831016604e8410600b8410161715614878575081810a610684565b614882838361479e565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156148b4576148b4614771565b029392505050565b5f61069583836147ff565b808202811582820484141761068457610684614771565b8181035f8312801583831316838312821617156148fd576148fd614771565b5092915050565b8082018281125f83128015821682158216171561492357614923614771565b505092915050565b8082025f82127f80000000000000000000000000000000000000000000000000000000000000008414161561496257614962614771565b818105831482151761068457610684614771565b5f8261498457614984614744565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f8000000000000000000000000000000000000000000000000000000000000000831416156149d8576149d8614771565b500590565b5f826149eb576149eb614744565b500790565b5f7f80000000000000000000000000000000000000000000000000000000000000008203613ac157613ac1614771565b5f82614a2e57614a2e614744565b500490565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a6357614a63614771565b5060010190565b5f81518060208401855e5f93019283525090919050565b5f614a8c8284614a6a565b7f300000000000000000000000000000000000000000000000000000000000000081526001019392505050565b7f2e0000000000000000000000000000000000000000000000000000000000000081525f614af3614aed6001840186614a6a565b84614a6a565b949350505050565b7f650000000000000000000000000000000000000000000000000000000000000081525f6106956001830184614a6a565b5f614b4c614aed614b46614b40858a614a6a565b88614a6a565b86614a6a565b9695505050505050565b8181038181111561068457610684614771565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b8082018082111561068457610684614771565b5f614af3614aed8386614a6a56","sourceMap":"525:13549:37:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6819:83;;;;;;:::i;:::-;;:::i;:::-;;;399:25:134;;;387:2;372:18;6819:83:37;;;;;;;;11299:93;;;;;;:::i;:::-;;:::i;13850:222::-;;;;;;:::i;:::-;;:::i;:::-;;;;1353:25:134;;;1421:14;;1414:22;1409:2;1394:18;;1387:50;1326:18;13850:222:37;1185:258:134;10667:140:37;;;;;;:::i;:::-;;:::i;9694:142::-;;;;;;:::i;:::-;;:::i;9997:::-;;;;;;:::i;:::-;;:::i;8997:85::-;;;;;;:::i;:::-;;:::i;10353:150::-;;;;;;:::i;:::-;;:::i;6590:93::-;;;;;;:::i;:::-;;:::i;7121:90::-;;;;;;:::i;:::-;;:::i;:::-;;;1613:14:134;;1606:22;1588:41;;1576:2;1561:18;7121:90:37;1448:187:134;4526:156:37;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;12040:182::-;;;;;;:::i;:::-;;:::i;5530:93::-;;;;;;:::i;:::-;;:::i;12556:172::-;;;;;;:::i;:::-;;:::i;9229:87::-;;;;;;:::i;:::-;;:::i;1849:122::-;4788:66:42;1849:122:37;;9463:85;;;;;;:::i;:::-;;:::i;8475:92::-;;;;;;:::i;:::-;;:::i;6015:83::-;;;;;;:::i;:::-;;:::i;8125:92::-;;;;;;:::i;:::-;;:::i;7780:90::-;;;;;;:::i;:::-;;:::i;6300:93::-;;;;;;:::i;:::-;;:::i;967:140::-;;1040:66;967:140;;4894:158;;;;;;:::i;:::-;;:::i;1589:122::-;4499:66:42;1589:122:37;;11007:93;;;;;;:::i;:::-;;:::i;2375:96::-;2414:5;2375:96;;3040:211;;;;;;:::i;:::-;;:::i;:::-;;;;4336:66:134;4324:79;;;4306:98;;4435:2;4420:18;;4413:34;;;;4279:18;3040:211:37;4107:346:134;1329:122:37;4228:66:42;1329:122:37;;2109;5091:66:42;2109:122:37;;7445:90;;;;;;:::i;:::-;;:::i;5240:93::-;;;;;;:::i;:::-;;:::i;706:140::-;;779:66;706:140;;5760:87;;;;;;:::i;:::-;;:::i;11554:88::-;;;;;;:::i;:::-;;:::i;8735:91::-;;;;;;:::i;:::-;;:::i;3821:383::-;;;;;;:::i;:::-;;:::i;13202:232::-;;;;;;:::i;:::-;;:::i;2602:90::-;5335:66:42;2602:90:37;;6819:83;6864:5;6888:7;:1;:5;:7::i;:::-;6881:14;6819:83;-1:-1:-1;;6819:83:37:o;11299:93::-;11353:5;11377:8;:1;11383;11377:5;:8::i;:::-;11370:15;11299:93;-1:-1:-1;;;11299:93:37:o;13850:222::-;13931:7;13940:4;14013:52;14049:5;14056:8;14013:35;:52::i;:::-;14006:59;;;;13850:222;;;;;;:::o;10667:140::-;10713:5;10737:63;:1;721:42:43;10737:6:37;:63::i;9694:142::-;9741:5;9765:64;:1;721:42:43;9765:7:37;:64::i;9997:142::-;10044:5;10068:64;:1;721:42:43;10068:7:37;:64::i;8997:85::-;9043:5;9067:8;:1;:6;:8::i;10353:150::-;10407:5;10431:65;:1;10437;721:42:43;10431:5:37;:65::i;6590:93::-;6644:5;6668:8;:1;6674;6668:5;:8::i;7121:90::-;7174:4;7197:7;:1;7202;7197:4;:7::i;4526:156::-;4591:13;4623:52;4661:1;4664:10;4623:37;:52::i;12040:182::-;12128:5;12152:63;12199:5;12206:8;12152:46;:63::i;5530:93::-;5584:5;5608:8;:1;5614;5608:5;:8::i;12556:172::-;12640:7;12666:55;12705:5;12712:8;12666:38;:55::i;9229:87::-;9276:5;9300:9;:1;:7;:9::i;9463:85::-;9509:5;9533:8;:1;:6;:8::i;8475:92::-;8529:4;8552:8;:1;8558;8552:5;:8::i;6015:83::-;6060:5;6084:7;:1;:5;:7::i;8125:92::-;8179:4;8202:8;:1;8208;8202:5;:8::i;7780:90::-;7833:4;7856:7;:1;7861;7856:4;:7::i;6300:93::-;6354:5;6378:8;:1;6384;6378:5;:8::i;4894:158::-;4942:13;4974:71;4981:1;779:66;1040;4974:6;:71::i;11007:93::-;11061:5;11085:8;:1;11091;11085:5;:8::i;3040:211::-;3097:6;3105:5;3123:20;3145:12;3161:43;3200:3;3161:38;:43::i;:::-;3122:82;;;;-1:-1:-1;3040:211:37;-1:-1:-1;;;;3040:211:37:o;7445:90::-;7498:4;7521:7;:1;7526;7521:4;:7::i;5240:93::-;5294:5;5318:8;:1;5324;5318:5;:8::i;5760:87::-;5807:5;5831:9;:1;:7;:9::i;11554:88::-;11602:4;40930:17:42;41123:12;;41116:20;11625:10:37;40844:308:42;8735:91:37;8784:5;8808:11;:1;:9;:11::i;3821:383::-;3909:13;3939:31;:13;3956;3939:16;:31::i;:::-;3934:127;;3993:57;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;3993:57:37;;;;;;;;3934:127;4070:10;4083:7;:1;:5;:7::i;:::-;4070:20;-1:-1:-1;4107:90:37;4145:1;4148:22;4070:20;4156:13;4148:7;:22::i;:::-;:48;;;-1:-1:-1;4174:22:37;:4;4182:13;4174:7;:22::i;:::-;4107:37;:90::i;:::-;4100:97;3821:383;-1:-1:-1;;;;;3821:383:37:o;13202:232::-;13287:5;13294:4;13367:60;13411:5;13418:8;13367:43;:60::i;26308:326:42:-;26357:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;26476:62;19348:32;19405:16;26476:33;:62::i;:::-;26444:94;;-1:-1:-1;26444:94:42;-1:-1:-1;26549:12:42;26566:38;26444:94;;26566:9;:38::i;:::-;-1:-1:-1;26548:56:42;26308:326;-1:-1:-1;;;;;26308:326:42:o;40507:101::-;40561:5;40585:8;40588:1;40591;40585:2;:8::i;:::-;:16;;40600:1;40585:16;;;-1:-1:-1;40596:1:42;;40507:101;-1:-1:-1;40507:101:42:o;13558:248::-;13639:7;;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;13741:58;19348:32;19405:16;13790:8;13741:19;:58::i;:::-;13734:65;;;;;;13558:248;;;;;:::o;39808:143::-;39882:5;39906:38;39910:1;3896:66;39925:18;39906:3;:38::i;34200:484::-;34279:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;34410:84;34446:18;19348:32;19405:16;34410:35;:84::i;:::-;34366:128;;-1:-1:-1;34366:128:42;-1:-1:-1;34599:12:42;34616:38;34366:128;;34616:9;:38::i;:::-;-1:-1:-1;34598:56:42;34200:484;-1:-1:-1;;;;;;34200:484:42:o;35060:463::-;35135:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;35262:84;35298:18;19348:32;19405:16;35262:35;:84::i;31289:362::-;31339:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;31339:5;31498:66;19348:32;19405:16;31498:37;:66::i;:::-;31476:88;;;31575:12;31592:29;31602:8;31612;31592:9;:29::i;36145:3071::-;36227:5;19261:17;19363:16;;;19359:2;19348:32;;19409:4;19405:16;;;;41123:12;;36313:869;;-1:-1:-1;3744:1:42;;-1:-1:-1;36343:16:42;;-1:-1:-1;36343:16:42;36313:869;36402:1;36380:18;:23;36376:806;;36423:18;36445:1;36423:23;36419:494;;36470:16;:1;3653;36470:4;:16::i;:::-;36466:157;;;36584:20;;;;;;;;399:25:134;;;372:18;;36584:20:42;226:204:134;36466:157:42;-1:-1:-1;3653:1:42;;-1:-1:-1;36789:17:42;;-1:-1:-1;36789:17:42;36419:494;36852:46;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;36852:46:42;5150:302:134;36376:806:42;37009:15;:1;3744;37009:4;:15::i;:::-;:35;;;;-1:-1:-1;37028:16:42;:1;3653;37028:4;:16::i;:::-;37005:177;;;37067:1;37060:8;;;;;;37005:177;37089:16;:1;3653;37089:4;:16::i;:::-;37085:97;;;37128:43;37132:7;:1;:5;:7::i;:::-;37141:9;:1;:7;:9::i;:::-;37152:18;37128:3;:43::i;:::-;37121:50;;;;;;37085:97;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;37409:25;;37514:68;19348:32;19405:16;37514:37;:68::i;:::-;37476:106;;;;37593:24;37628:72;37677:8;37687:9;37698:1;37628:48;:72::i;:::-;37593:108;-1:-1:-1;37810:1:42;37752:30;;;37879:10;:1;19261:17;19363:16;;19359:2;19348:32;;19409:4;19405:16;;;;;19141:296;37879:10;37825:64;;;;37899:544;37926:1;37906:16;:21;37899:544;;37947:16;37966:4;37947:23;37974:4;37947:31;37943:263;;38042:149;38097:23;38122:14;38138:21;38161:12;38042:33;:149::i;:::-;37998:193;;-1:-1:-1;37998:193:42;-1:-1:-1;37943:263:42;38240:1;38219:22;;;;;38295:137;38346:21;38369:12;38383:21;38406:12;38295:33;:137::i;:::-;38255:177;;-1:-1:-1;38255:177:42;-1:-1:-1;37899:544:42;;;38454:25;38481:16;38513:86;38549:18;38569;38589:9;38513:35;:86::i;:::-;38453:146;;;;38656:86;38690:18;38710:9;38721;38732;38656:33;:86::i;:::-;38610:132;;-1:-1:-1;38610:132:42;-1:-1:-1;38799:86:42;38835:18;38610:132;;38799:35;:86::i;:::-;38753:132;;-1:-1:-1;38753:132:42;-1:-1:-1;38942:105:42;38753:132;;39007:23;39032:14;38942:33;:105::i;:::-;38896:151;;-1:-1:-1;38896:151:42;-1:-1:-1;39139:7:42;39151:40;38896:151;;39151:9;:40::i;:::-;-1:-1:-1;39138:53:42;-1:-1:-1;;;;;;;;;;;;;;;36145:3071:42;;;;;:::o;25374:565::-;25428:5;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;25428:5;;25639:95;19348:32;19405:16;19348:32;19405:16;25639:33;:95::i;:::-;25581:153;;;;25864:7;25876:38;25886:17;25905:8;25876:9;:38::i;:::-;-1:-1:-1;25863:51:42;25374:565;-1:-1:-1;;;;;;;;;;25374:565:42:o;26976:313::-;27029:4;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;27188:94;19348:32;19405:16;19348:32;19405:16;27188:32;:94::i;:::-;27181:101;26976:313;-1:-1:-1;;;;;;;26976:313:42:o;1412:418:44:-;1490:13;19261:17:42;19363:16;;19359:2;19348:32;19409:4;19405:16;;;1516:24:44;1604:22;;;1600:63;;1642:10;;;;;;;;;;;;;;;;;;;;;;;1600:63;1676:10;1672:90;;;1709:42;1723:17;1742:8;1709:13;:42::i;:::-;1702:49;;;;;;1672:90;1778:45;1795:17;1814:8;1778:16;:45::i;8838:263:42:-;8932:5;8950:24;8976:15;8995:41;9020:5;9027:8;8995:24;:41::i;:::-;8949:87;;;;9053:41;9066:17;9085:8;9053:12;:41::i;20749:488::-;20803:5;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;20803:5;;21016:95;19348:32;19405:16;19348:32;19405:16;21016:33;:95::i;15036:248::-;15120:7;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;15216:61;19348:32;19405:16;15268:8;15216:22;:61::i;31797:752::-;31848:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;32020:13;;;32016:56;;-1:-1:-1;32056:5:42;;31797:752;-1:-1:-1;;31797:752:42:o;32016:56::-;32082:8;32092:15;32111:66;32149:17;32168:8;32111:37;:66::i;:::-;32081:96;;;;32211:1;32191:17;:21;:38;;;;-1:-1:-1;32216:13:42;;;32191:38;32187:283;;;32402:57;32436:1;32439:8;32449:4;32455:3;32402:33;:57::i;:::-;32386:73;-1:-1:-1;32386:73:42;-1:-1:-1;32187:283:42;32480:12;32497:22;32507:1;32510:8;32497:9;:22::i;:::-;-1:-1:-1;32479:40:42;31797:752;-1:-1:-1;;;;;;;31797:752:42:o;32696:1044::-;32746:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;32918:13;;;32914:56;;-1:-1:-1;32954:5:42;;32696:1044;-1:-1:-1;;32696:1044:42:o;32914:56::-;32980:8;32990:15;33009:66;33047:17;33066:8;33009:37;:66::i;:::-;32979:96;;;;33161:8;33173:1;33161:13;33157:503;;-1:-1:-1;33197:5:42;;32696:1044;-1:-1:-1;;;;32696:1044:42:o;33157:503::-;33559:1;33548:8;:12;33544:116;;;33592:57;33626:1;33629:8;33639:4;33645:3;33592:33;:57::i;30085:431::-;30139:4;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;30346:106;19348:32;19405:16;19348:32;19405:16;30346:44;:106::i;:::-;-1:-1:-1;30469:40:42;;30085:431;-1:-1:-1;;;;;;;30085:431:42:o;22642:494::-;22691:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;22783:21;;;22779:148;;;22852:64;22888:17;22907:8;22852:35;:64::i;22779:148::-;23051:12;23068:38;23078:17;23097:8;23068:9;:38::i;29229:431::-;29283:4;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;29490:106;19348:32;19405:16;19348:32;19405:16;29490:44;:106::i;:::-;-1:-1:-1;29613:40:42;;29229:431;-1:-1:-1;;;;;;;29229:431:42:o;28393:429::-;28446:4;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;28653:106;19348:32;19405:16;19348:32;19405:16;28653:44;:106::i;:::-;-1:-1:-1;;28393:429:42;-1:-1:-1;;;;;;;28393:429:42:o;24348:527::-;24402:5;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;24402:5;;24613:95;19348:32;19405:16;19348:32;19405:16;24613:33;:95::i;40179:101::-;40233:5;40257:8;40260:1;40263;40257:2;:8::i;8905:1711:46:-;9120:10;;8974:6;;;;9084:4;9075:14;;;;9109:22;;;8974:6;;;;9246:35;9075:14;9109:22;9246:23;:35::i;:::-;9150:131;;-1:-1:-1;9150:131:46;;-1:-1:-1;9150:131:46;-1:-1:-1;9150:131:46;-1:-1:-1;9295:18:46;;;9312:1;9295:18;9291:1319;;9343:3;9333:6;:13;9329:1098;;9951:12;9965:13;9982:54;10008:17;10027:8;9982:25;:54::i;:::-;9950:86;;;;10059:8;10054:179;;-1:-1:-1;10099:34:46;;10146:1;;-1:-1:-1;8905:1711:46;-1:-1:-1;;;;;;;;;8905:1711:46:o;10054:179::-;-1:-1:-1;10204:1:46;;10207:6;;-1:-1:-1;8905:1711:46;-1:-1:-1;;;;;;;;8905:1711:46:o;9329:1098::-;-1:-1:-1;10354:42:46;;10409:1;;-1:-1:-1;8905:1711:46;-1:-1:-1;;;;;;;8905:1711:46:o;9291:1319::-;-1:-1:-1;10570:13:46;;10596:1;;-1:-1:-1;8905:1711:46;-1:-1:-1;;;;;;8905:1711:46:o;27617:430:42:-;27670:4;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;27877:106;19348:32;19405:16;19348:32;19405:16;27877:44;:106::i;:::-;-1:-1:-1;;27617:430:42;-1:-1:-1;;;;;;;27617:430:42:o;19921:481::-;19975:5;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;19975:5;;20186:95;19348:32;19405:16;19348:32;19405:16;20186:33;:95::i;21587:410::-;21638:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;21757:64;19348:32;19405:16;21757:35;:64::i;30772:350::-;30825:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;30825:5;30976:66;19348:32;19405:16;30976:37;:66::i;:::-;30962:80;;;31053:12;31070:22;31080:1;31083:8;31070:9;:22::i;7434:353::-;7525:5;7532:4;7549:24;7575:15;7592:13;7609:38;7631:5;7638:8;7609:21;:38::i;:::-;7548:99;;;;;;7658:11;7671:17;7692:38;7702:17;7721:8;7692:9;:38::i;:::-;7657:73;;;;7748:5;7755:8;:24;;;;;7767:12;7755:24;7740:40;;;;;;;;;7434:353;;;;;:::o;35535:162:45:-;35614:6;35622;35647:43;35651:4;35657:3;35662:17;35681:8;35647:3;:43::i;15810:2402:42:-;15895:11;16327:46;;;;;;15991:17;16047:8;16327:46;16651:668;;16708:4;16688:17;:24;:29;16684:135;;16762:3;16741:24;;;;16799:1;16787:13;;;;16684:135;17058:17;17036;17029:46;;;17022:151;;17120:2;17099:23;;;;17144:10;;;;;17022:151;;;16651:668;;;17215:17;17236:1;17215:22;17211:94;;-1:-1:-1;3653:1:42;;-1:-1:-1;17281:4:42;;-1:-1:-1;17261:25:42;;-1:-1:-1;17261:25:42;17211:94;17529:8;17516;17510:27;;;17506:393;;17731:1;17720:8;:12;17716:85;;;-1:-1:-1;3653:1:42;;-1:-1:-1;3653:1:42;;-1:-1:-1;17756:26:42;;-1:-1:-1;17756:26:42;17716:85;17825:59;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;17825:59:42;5150:302:134;17506:393:42;-1:-1:-1;;18046:17:42;18132:28;;18166:4;18162:19;;;18129:53;;-1:-1:-1;15810:2402:42;;;;;:::o;9946:3045::-;10081:7;10090:4;10213:1;10193:17;:21;10189:2796;;;10237:59;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;10237:59:42;5150:302:134;10189:2796:42;10395:17;10416:1;10395:22;10391:2594;;-1:-1:-1;10441:1:42;;-1:-1:-1;10444:4:42;10433:16;;10391:2594;10659:17;10940;;;10922:36;;10980:24;;;10976:123;;;11035:45;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;11035:45:42;5150:302:134;10976:123:42;11127:13;11154:20;11208:1;11192:13;:17;11188:1787;;;11486:3;11470:13;:19;11466:91;;;11525:1;11528:5;11517:17;;;;;;;;;;11466:91;11917:13;11916:14;;11902:2;:29;11894:37;;11990:5;11968:19;:27;;;;;:::i;:::-;;;-1:-1:-1;;12253:20:42;;:43;;;;-1:-1:-1;12231:66:42;;-1:-1:-1;12231:66:42;11188:1787;12356:1;12340:13;:17;12336:639;;;12502:28;12516:13;12502:2;:28;:::i;:::-;12494:36;-1:-1:-1;12563:27:42;12494:36;12563:19;:27;:::i;:::-;12548:42;-1:-1:-1;12864:4:42;;-1:-1:-1;12842:27:42;;-1:-1:-1;;;;12842:27:42;12336:639;-1:-1:-1;12934:19:42;;-1:-1:-1;12955:4:42;;-1:-1:-1;;;10391:2594:42;9946:3045;;;;;;:::o;43384:1993:45:-;43517:6;43525;43571:1;43551:17;:21;43547:271;;;43620:34;43626:17;43645:8;43620:5;:34::i;:::-;43588:66;;-1:-1:-1;43588:66:45;-1:-1:-1;43700:54:45;43706:18;43588:66;;43700:5;:54::i;:::-;43668:86;;-1:-1:-1;43668:86:45;-1:-1:-1;43775:32:45;43668:86;;43775:3;:32::i;:::-;43768:39;;;;;;43547:271;43854:21;43877:22;43903:36;43911:17;43930:8;43903:7;:36::i;:::-;43853:86;;-1:-1:-1;43853:86:45;-1:-1:-1;43981:8:45;43949:29;;;44060:36;43853:86;43981:8;44060:9;:36::i;:::-;44013:83;;-1:-1:-1;44013:83:45;-1:-1:-1;44013:83:45;-1:-1:-1;44257:4:45;44298:5;782:27:47;808:1;44298:5:45;782:27:47;:::i;:::-;44321:3:45;:29;44317:252;;44485:69;44508:18;44536:3;44542:11;44485:22;:69::i;:::-;44370:184;;-1:-1:-1;44370:184:45;-1:-1:-1;44317:252:45;44586:11;44582:664;;;44676:15;44695:7;:3;44701:1;44695:7;:::i;:::-;44676:27;;44753:154;44790:8;44781:5;44772;44761:8;:16;44760:26;;;;;:::i;:::-;;:38;44753:154;;44835:2;44826:11;;;-1:-1:-1;44882:2:45;44863:21;;;;44753:154;;;44975:153;45020:11;45026:5;45020:3;:11;:::i;:::-;45033:15;45050:16;45061:5;45050:8;:16;:::i;:::-;45068:8;45078:13;45093;45108:2;44975:23;:153::i;:::-;44943:185;;-1:-1:-1;44943:185:45;-1:-1:-1;44582:664:45;;-1:-1:-1;44582:664:45;;45187:13;45167:33;;45229:2;45218:13;;44582:664;43999:1257;;;;;45274:17;45308:61;45327:14;45343:22;45367:1;45308:18;:61::i;:::-;45293:12;45297:8;45293:1;:12;:::i;:::-;:76;;;;:::i;:::-;45266:104;;;;;;;43384:1993;;;;;;:::o;37791:5059::-;37924:6;;38000:17;38060:8;38114:41;38000:17;38060:8;38114:12;:41::i;:::-;38082:73;;-1:-1:-1;38082:73:45;-1:-1:-1;38195:1:45;38174:22;;38170:259;;38220:17;38241:1;38220:22;38216:199;;38273:11;;;;;;;;;;;;;;38216:199;38338:58;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;38338:58:45;5150:302:134;38216:199:45;37954:485;;38519:17;38540:4;38519:25;38515:81;;38568:13;:8;38579:2;38568:13;:::i;:::-;38583:1;38560:25;;;;;;38515:81;38646:4;38625:25;;;;38739:24;;38760:3;38739:24;;;38754:3;38739:24;38726:38;;:8;:38;38722:4122;;38780:20;38814;38848;38882;39533:17;39571:12;:38;;39606:2;39571:38;;;39593:2;39571:38;39553:57;;:8;:57;:::i;:::-;39533:77;;39672:11;39763:13;39779:12;:26;;39801:4;39779:26;;;39794:4;39779:26;39763:42;;;;40381:5;40354:17;:33;;;;;:::i;:::-;;40941:29;;;;-1:-1:-1;41478:29:45;;;;-1:-1:-1;40685:20:45;;;-1:-1:-1;41582:42:45;41600:18;40685:20;41582:17;:42::i;:::-;41575:4;:49;41552:73;;41663:13;41647:29;;41830:17;41813:13;:34;41809:270;;513:32:47;41891:30:45;;:165;;42009:46;42027:18;42047:3;42053:1;42047:7;42009:17;:46::i;:::-;42002:4;:53;41891:165;;;41959:4;41891:165;41875:181;;41809:270;39654:2457;42157:256;42198:13;42229:17;42264:13;42295:8;42321:13;42352;1640:3;42157:23;:256::i;:::-;42125:288;;-1:-1:-1;42125:288:45;-1:-1:-1;42434:47:45;42125:288;;42467:10;42479:1;42434:3;:47::i;:::-;42427:54;;;;;;;;;;;;38722:4122;42646:32;42650:17;42669:8;42646:3;:32::i;:::-;42614:64;;-1:-1:-1;42614:64:45;-1:-1:-1;42724:54:45;42730:18;42614:64;;42724:5;:54::i;:::-;42692:86;;-1:-1:-1;42692:86:45;-1:-1:-1;42799:34:45;42692:86;;42799:5;:34::i;:::-;42792:41;;;;;;;38722:4122;37944:4906;37791:5059;;;;;;:::o;55832:852::-;55915:14;55931:11;56120:1;56108:8;:13;56104:81;;-1:-1:-1;56149:17:45;;-1:-1:-1;56168:1:45;56141:29;;56104:81;56351:3;56340:8;:14;56336:82;;;-1:-1:-1;56382:1:45;;-1:-1:-1;56385:17:45;56374:29;;56336:82;56528:11;56563:9;;;56549:2;:24;;56595:17;56549:24;56595;;;;:::i;:::-;;56643;;;;;55832:852;-1:-1:-1;;;;55832:852:45:o;53784:1452::-;53925:6;53987:14;53975:8;:26;53971:1249;;-1:-1:-1;54028:17:45;54021:24;;53971:1249;54087:8;54070:14;:25;54066:1154;;;54137:25;;;54199:2;54184:17;;;:38;;;54221:1;54205:12;:17;;54184:38;54180:127;;;1408:1;54246:42;;;;;54180:127;54478:12;54464:2;:27;54437:17;:55;;;;;:::i;:::-;;54430:62;;;;;54066:1154;54553:25;;;54615:2;54600:17;;;:38;;;54637:1;54621:12;:17;;54600:38;54596:163;;;54669:71;;;;;;;;8664:25:134;;;8705:18;;;8698:34;;;8748:18;;;8741:34;;;8637:18;;54669:71:45;8468:313:134;54596:163:45;54904:2;:27;;;54968:25;;;:17;54904:27;54968:25;54904:27;55015:16;;;;:::i;:::-;;:37;55011:162;;55083:71;;;;;;;;8664:25:134;;;8705:18;;;8698:34;;;8748:18;;;8741:34;;;8637:18;;55083:71:45;8468:313:134;55011:162:45;55197:8;-1:-1:-1;55190:15:45;;-1:-1:-1;;55190:15:45;7193:2230;7343:24;;7473:26;;7501;;7470:58;7547:1870;;;;1408:1;7690:53;;1495:1;7757:34;;7547:1870;;;7833:21;7845:9;7833;:21;:::i;:::-;7822:32;;7989:29;8021:48;8050:18;8021:28;:48::i;:::-;7989:80;;8083:29;8115:48;8144:18;8115:28;:48::i;:::-;8083:80;;8179:13;8197:52;8204:21;8227;8197:6;:52::i;:::-;8178:71;;;8264:22;8344:4;8336:5;:12;8332:114;;;8381:4;8372:13;;;-1:-1:-1;8425:2:45;8407:20;8332:114;8475:4;8467:5;:12;8463:114;;;8512:4;8503:13;;;-1:-1:-1;8556:2:45;8538:20;8463:114;8606:3;8598:5;:11;8594:111;;;8642:3;8633:12;;;-1:-1:-1;8685:1:45;8667:19;8594:111;8734:3;8726:5;:11;8722:111;;;8770:3;8761:12;;;-1:-1:-1;8813:1:45;8795:19;8722:111;8857:9;;8850:108;;8899:2;8890:11;;;-1:-1:-1;8923:16:45;;8850:108;;;9086:34;9105:14;9086:34;;:::i;:::-;;-1:-1:-1;9167:239:45;9211:18;9247;9283:83;9290:21;9313;9336:29;9351:14;9344:2;9336:29;:::i;:::-;9283:6;:83::i;:::-;9384:8;9167:26;:239::i;:::-;9135:271;;-1:-1:-1;9135:271:45;-1:-1:-1;;;;;7547:1870:45;7390:2033;7193:2230;;;;;;;:::o;12966:8769::-;13116:6;13124;13150:18;13172:1;13150:23;13146:8583;;13196:45;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;13196:45:45;5150:302:134;13146:8583:45;13262:18;13284:1;13262:23;13258:8471;;-1:-1:-1;1408:1:45;;-1:-1:-1;1408:1:45;13301:67;;13258:8471;13399:24;13437:15;13466:10;13490;13697:39;13706:18;13726:9;13697:8;:39::i;:::-;13656:80;;-1:-1:-1;13656:80:45;-1:-1:-1;13656:80:45;-1:-1:-1;13791:39:45;13800:18;13820:9;13791:8;:39::i;:::-;13750:80;;-1:-1:-1;13750:80:45;-1:-1:-1;13750:80:45;-1:-1:-1;13965:29:45;13997:48;14026:18;13997:28;:48::i;:::-;13965:80;;14059:29;14091:48;14120:18;14091:28;:48::i;:::-;14059:80;-1:-1:-1;14170:4:45;14212:2;14663:29;;;14659:4460;;;14716:5;14712:4269;;;-1:-1:-1;14753:4:45;;-1:-1:-1;14796:2:45;14712:4269;;;14873:4;14849:21;:28;14845:3675;;;14933:4;14909:21;:28;14905:1781;;;14997:4;14973:21;:28;14969:813;;;15065:3;15041:21;:27;15037:321;;;-1:-1:-1;15116:3:45;;-1:-1:-1;15174:1:45;14845:3675;;15037:321;-1:-1:-1;15262:4:45;;-1:-1:-1;15321:2:45;14845:3675;;14969:813;15456:4;15432:21;:28;15428:324;;;-1:-1:-1;15508:4:45;;-1:-1:-1;15567:2:45;14845:3675;;15428:324;-1:-1:-1;15656:4:45;;-1:-1:-1;15715:2:45;14845:3675;;14905:1781;15872:4;15848:21;:28;15844:816;;;15940:4;15916:21;:28;15912:324;;;-1:-1:-1;15992:4:45;;-1:-1:-1;16051:2:45;14845:3675;;15912:324;-1:-1:-1;16140:4:45;;-1:-1:-1;16199:2:45;14845:3675;;15844:816;16334:4;16310:21;:28;16306:324;;;-1:-1:-1;16386:4:45;;-1:-1:-1;16445:2:45;14845:3675;;16306:324;-1:-1:-1;16534:4:45;;-1:-1:-1;16593:2:45;14845:3675;;;16768:4;16744:21;:28;16740:1758;;;16832:4;16808:21;:28;16804:816;;;16900:4;16876:21;:28;16872:324;;;-1:-1:-1;16952:4:45;;-1:-1:-1;17011:2:45;14845:3675;;16872:324;-1:-1:-1;17100:4:45;;-1:-1:-1;17159:2:45;16740:1758;;16804:816;17294:4;17270:21;:28;17266:324;;;-1:-1:-1;17346:4:45;;-1:-1:-1;17405:2:45;14845:3675;;17266:324;-1:-1:-1;17494:4:45;;-1:-1:-1;17553:2:45;16740:1758;;;17710:4;17686:21;:28;17682:790;;;17778:4;17754:21;:28;17750:324;;;-1:-1:-1;17830:4:45;;-1:-1:-1;17889:2:45;17682:790;;17750:324;-1:-1:-1;17978:4:45;;-1:-1:-1;18037:2:45;17682:790;;;18172:4;18148:21;:28;18144:298;;;-1:-1:-1;18224:4:45;;-1:-1:-1;18283:2:45;18144:298;18641:5;18616:21;:30;18609:214;;18723:2;18714:11;;;-1:-1:-1;18755:19:45;;18609:214;;;18848:5;18857:1;18848:10;18844:119;;18893:47;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;18893:47:45;5150:302:134;18844:119:45;19003:5;18998:107;;19039:47;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;19039:47:45;5150:302:134;18998:107:45;19587:14;19568:16;:33;19555:9;:46;19551:623;;19638:14;19625:27;;;;19551:623;;;19729:16;;19699:46;;;;19839:1;19822:18;;19818:338;;;19904:14;19885:16;:33;19872:9;:46;19868:266;;19950:27;;;;19868:266;;;1408:1;1495;20040:67;;;;;;;;;;;;;;19868:266;20202:26;20352:1;20340:9;:13;:30;;;;;20369:1;20357:9;:13;20340:30;20336:222;;;20424:16;20412:28;;20484:20;;;:55;;20537:1;20484:55;;;20519:8;20507:9;:20;20484:55;20462:77;;20372:186;20336:222;20621:9;20599:19;20587:9;:31;:43;20576:54;;20681:235;20729:18;20769;20809:59;20816:21;20839:5;20846:21;20809:6;:59::i;:::-;20890:8;20681:26;:235::i;:::-;20649:267;;-1:-1:-1;20649:267:45;-1:-1:-1;20961:1:45;20939:23;;20935:716;;;21012:2;20990:19;:24;20986:308;;;1408:1;1495;21204:67;;;;;;;;;;;;;;;20986:308;21479:19;21465:2;:34;21437:63;;;;;;:::i;:::-;;;;21526:17;21547:1;21526:22;21522:111;;1495:1;21576:34;;21522:111;-1:-1:-1;21676:17:45;;-1:-1:-1;21695:8:45;;-1:-1:-1;21668:36:45;;-1:-1:-1;;;;;;21668:36:45;13258:8471;12966:8769;;;;;;;:::o;34854:365::-;35003:4;35078:76;35093:18;35113:9;35124:18;35144:9;35078:14;:76::i;:::-;35172:40;;34854:365;-1:-1:-1;;;;;34854:365:45:o;2112:2562:44:-;2200:13;2257:71;2300:17;2319:8;2257:42;:71::i;:::-;2225:103;;-1:-1:-1;2225:103:44;-1:-1:-1;2339:13:44;;2397:24;2417:4;2225:103;2397:24;:::i;:::-;:29;2393:179;;-1:-1:-1;2482:4:44;;-1:-1:-1;2458:2:44;2393:179;;;-1:-1:-1;2557:4:44;;-1:-1:-1;2533:2:44;2393:179;2719:15;2737:33;2764:5;2737:17;:33;:::i;:::-;2719:51;-1:-1:-1;2917:17:44;2937:33;2964:5;2937:17;:33;:::i;:::-;2917:53;;2981:10;3024:1;3013:8;:12;3009:89;;;-1:-1:-1;3049:4:44;3078:9;3079:8;3078:9;:::i;:::-;3067:20;;3009:89;3124:1;3111:10;:14;3107:95;;;-1:-1:-1;3149:4:44;3180:11;3181:10;3180:11;:::i;:::-;3167:24;;3107:95;3212:35;;;;;;;;;:30;:35;;3261:15;;3257:819;;3292:24;;3354:10;3362:2;3354:5;:10;:::i;:::-;3334:30;;3518:128;3525:30;3545:9;3525:10;:30;:::i;:::-;3559:1;3525:35;3518:128;;3580:15;3593:2;3580:15;;:::i;:::-;;-1:-1:-1;3613:18:44;;;;:::i;:::-;;;;3518:128;;;3660:41;;;;;;;;;:36;:41;;;3715:147;3739:16;3735:1;:20;3715:147;;;3819:22;3805:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;3757:3:44;;3715:147;;;;3876:78;3883:15;3896:2;3883:10;:15;:::i;:::-;3902:1;3883:20;3876:78;;3923:16;3937:2;3923:16;;:::i;:::-;;;3876:78;;;4006:22;4030:34;4053:10;4030:22;:34::i;:::-;3987:78;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3968:97;;3278:798;;;3257:819;4086:28;4117:32;4140:8;4117:22;:32::i;:::-;4086:63;-1:-1:-1;4333:22:44;4358:32;4376:13;4358:8;:32;:::i;:::-;4333:57;-1:-1:-1;4400:28:44;4443:20;;:87;;4490:39;4513:15;4490:22;:39::i;:::-;4471:59;;;;;;;;:::i;:::-;;;;;;;;;;;;;4443:87;;;;;;;;;;;;;;;;4400:130;;4540:20;4563:5;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4540:39;;4610:6;4618:14;4634:16;4652:14;4596:71;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4589:78;;;;;;;;;;;;2112:2562;;;;:::o;5044:3560::-;5135:13;1062:4;5164:8;:38;:81;;;-1:-1:-1;5217:28:44;1062:4;5217:28;:::i;:::-;5206:8;:39;5164:81;5160:149;;;5268:30;;;;;;;;399:25:134;;;372:18;;5268:30:44;226:204:134;5160:149:44;5319:10;5332:21;;;;5388:495;;;;5626:18;5627:17;5626:18;:::i;:::-;5608:37;;5388:495;;;-1:-1:-1;5854:17:44;5388:495;5893:19;5921:25;5938:7;5921:16;:25::i;:::-;5969:13;;5893:54;;-1:-1:-1;5957:9:44;6232:106;6255:1;6239:13;:17;:57;;;;-1:-1:-1;6260:6:44;6275:13;6267:5;6271:1;6267;:5;:::i;:::-;:21;;;;:::i;:::-;6260:29;;;;;;;;:::i;:::-;;;;;;;;:36;;6239:57;6232:106;;;6312:15;;;;:::i;:::-;;;;6232:106;;;6347:12;6362:17;6366:13;6362:1;:17;:::i;:::-;6347:32;-1:-1:-1;6556:13:44;6572:32;6590:13;6572:8;:32;:::i;:::-;6556:48;;6615:20;6638:5;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6615:39;;6679:1;6669:6;:11;6665:594;;6926:6;6900:15;6976:14;6926:6;6976:4;:14;:::i;:::-;6966:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6966:25:44;;6947:44;;7010:9;7005:86;7029:4;7025:1;:8;7005:86;;;7067:6;7074:1;7067:9;;;;;;;;:::i;:::-;;;;;;;;;7058:3;7062:1;7058:6;;;;;;;;:::i;:::-;;;;:18;;;;;;;;;;-1:-1:-1;7035:3:44;;7005:86;;;;7109:9;7104:90;7128:7;7124:1;:11;7104:90;;;7160:19;:3;7164:8;7171:1;7164:4;:8;:::i;:::-;7160:13;;;;;;;;:::i;:::-;;;;:19;;;;;;;;;;-1:-1:-1;7137:3:44;;7104:90;;;;7228:6;7243:3;7214:34;;;;;;;;;:::i;:::-;;;;;;;;;;;;;7207:41;;;;;;;;;;;;;;6665:594;7472:17;7500:7;7501:6;7500:7;:::i;:::-;7472:36;;7530:9;7523:4;:16;7519:1079;;;7620:15;7638:16;7645:9;7638:4;:16;:::i;:::-;7620:34;-1:-1:-1;7668:16:44;7697:8;:4;7704:1;7697:8;:::i;:::-;7687:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7687:19:44;;7668:38;;7725:9;7720:89;7744:7;7740:1;:11;7720:89;;;7785:6;7792:1;7785:9;;;;;;;;:::i;:::-;;;;;;;;;7776:3;7780:1;7776:6;;;;;;;;:::i;:::-;;;;:18;;;;;;;;;;-1:-1:-1;7753:3:44;;7720:89;;;;7822:18;:3;7826:7;7822:12;;;;;;;;:::i;:::-;;;;:18;;;;;;;;;;;7859:9;7854:115;7878:9;7874:1;:13;7854:115;;;7935:6;7942:11;7952:1;7942:7;:11;:::i;:::-;7935:19;;;;;;;;:::i;:::-;;;;;;;7912:3;7930:1;7916:11;:7;7926:1;7916:11;:::i;:::-;:15;;;;:::i;:::-;7912:20;;;;;;;;:::i;:::-;;;;:42;;;;;;;;;;-1:-1:-1;7889:3:44;;7854:115;;;;8003:6;8018:3;7989:34;;;;;;;;;:::i;:::-;;;;;;;;;;;;;7982:41;;;;;;;;;;;;;;;7519:1079;8131:25;8159:16;8171:4;8159:9;:16;:::i;:::-;8131:44;-1:-1:-1;8189:16:44;8242:4;8218:21;8131:44;8218:1;:21;:::i;:::-;:28;;;;:::i;:::-;8208:39;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8208:39:44;;8189:58;;8261:12;:3;8265:1;8261:6;;;;;;;;:::i;:::-;;;;:12;;;;;;;;;;;8287;:3;8291:1;8287:6;;;;;;;;:::i;:::-;;;;:12;;;;;;;;;;;8318:9;8313:97;8337:17;8333:1;:21;8313:97;;;8379:16;:3;8383:5;8387:1;8383;:5;:::i;:::-;8379:10;;;;;;;;:::i;:::-;;;;:16;;;;;;;;;;-1:-1:-1;8356:3:44;;8313:97;;;;8428:9;8423:110;8447:4;8443:1;:8;8423:110;;;8509:6;8516:1;8509:9;;;;;;;;:::i;:::-;;;;;;;8476:3;8504:1;8480:21;8484:17;8480:1;:21;:::i;:::-;:25;;;;:::i;:::-;8476:30;;;;;;;;:::i;:::-;;;;:42;;;;;;;;;;-1:-1:-1;8453:3:44;;8423:110;;8131:373:42;8219:6;8227;8246:24;8272:15;8289:13;8306:38;8328:5;8335:8;8306:21;:38::i;:::-;8245:99;;;;;;8359:8;8354:98;;8390:51;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;8390:51:42;5150:302:134;8354:98:42;-1:-1:-1;8469:17:42;;;;-1:-1:-1;8131:373:42;-1:-1:-1;;;8131:373:42:o;18451:299::-;18539:5;18557:7;18566:13;18583:38;18593:17;18612:8;18583:9;:38::i;:::-;18556:65;;;;18636:8;18631:95;;18667:48;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;18667:48:42;5150:302:134;18631:95:42;-1:-1:-1;18742:1:42;18451:299;-1:-1:-1;;;18451:299:42:o;33785:339:45:-;33935:6;33943;33999:36;34005:18;34025:9;33999:5;:36::i;:::-;33965:70;;-1:-1:-1;33965:70:45;-1:-1:-1;34052:65:45;34056:18;34076:9;33965:70;;34052:3;:65::i;:::-;34045:72;;;;33785:339;;;;;;;:::o;14139:390:42:-;14277:7;14301:13;14316;14333:58;14353:17;14372:8;14382;14333:19;:58::i;:::-;14300:91;;;;14406:8;14401:100;;14437:53;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;14437:53:42;5150:302:134;14401:100:42;-1:-1:-1;14517:5:42;14139:390;-1:-1:-1;;;;14139:390:42:o;29621:3681:45:-;29771:6;;30037:26;;30065;;30034:58;30111:217;;;;30145:18;30167:1;30145:23;30141:177;;30196:18;30216:9;30188:38;;;;;;;30141:177;30273:18;30293:9;30265:38;;;;;;;30141:177;30565:43;30578:18;30598:9;30565:12;:43::i;:::-;30531:77;;-1:-1:-1;30531:77:45;-1:-1:-1;30652:43:45;30665:18;30685:9;30652:12;:43::i;:::-;30618:77;;-1:-1:-1;30618:77:45;-1:-1:-1;30816:21:45;;;30812:268;;;30919:18;;31031:9;;30866:18;;30812:268;31764:21;;;824:2;31948:45;;31944:122;;;32021:18;32041:9;32013:38;;;;;;;;31944:122;32285:21;32279:2;:27;32250:57;;;;;;:::i;:::-;;;-1:-1:-1;;32400:39:45;;;32658:26;;;32555:4;32648:37;;;32641:45;32734:18;32561:43;;;32551:54;;;32544:62;32718:35;32826:412;;;;32885:9;32865:16;:29;32861:130;;32925:47;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;32925:47:45;5150:302:134;32861:130:45;33031:2;33051:24;;;;33009;;;;33122:40;;;33093:11;;;;;;32826:412;;;33222:1;33201:22;;32826:412;-1:-1:-1;33265:18:45;;33285:9;;-1:-1:-1;;;;;;29621:3681:45:o;50744:2689::-;50905:6;;51455:26;;51483;;51452:58;51601:26;;;51629;;;51597:59;51374:308;51761:24;;;51346:461;51842:105;;;;51889:18;51909;51881:47;;;;;;;51842:105;51232:729;51975:12;52025:9;52013;:21;52009:329;;;-1:-1:-1;52124:18:45;;52248:9;;52067:18;;52319:4;52009:329;52374:21;;;52352:19;52500:20;;52540:2;52522:21;;52497:47;52571:210;;;;52610:7;52606:161;;;52649:1;52652:18;52641:30;;;;;;;;;52606:161;52726:18;52746:1;52718:30;;;;;;;;;52606:161;52914:2;:27;;;52974:26;;;:18;52914:27;52974:26;52914:27;53019:16;;;;:::i;:::-;;:38;53015:402;;53081:7;53077:161;;;53120:1;53123:18;53112:30;;;;;;;;;;;53077:161;53197:18;53217:1;53189:30;;;;;;;;;;;53015:402;53262:7;53258:159;;;53297:18;;-1:-1:-1;53317:8:45;-1:-1:-1;53289:37:45;;-1:-1:-1;;;;53289:37:45;53258:159;53373:8;-1:-1:-1;53383:18:45;;-1:-1:-1;53365:37:45;;-1:-1:-1;;;;53365:37:45;2977:541;3058:6;3066;3205:16;3184:17;:37;3180:271;;3257:16;3245:8;:28;3241:127;;3304:45;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;3304:45:45;5150:302:134;3241:127:45;3406:2;3385:23;;;;3426:10;;;;;3180:271;-1:-1:-1;;3472:18:45;;;;;;2977:541::o;1751:6678:46:-;1859:20;1987:5;1859:20;;2015:55;1987:5;2045:3;7516:41:33;2015:21:46;:55::i;:::-;2006:64;-1:-1:-1;2102:15:46;;;;2006:64;2201:53;2006:64;2231:3;20378:131:33;2201:21:46;:53::i;:::-;2192:62;;2286:8;2276:6;:18;2272:120;;-1:-1:-1;2326:32:46;;-1:-1:-1;2368:1:46;;-1:-1:-1;2368:1:46;;-1:-1:-1;2318:55:46;;-1:-1:-1;2318:55:46;2272:120;2411:37;2450:27;2501:61;2548:5;2555:6;2501:46;:61::i;:::-;2410:152;;-1:-1:-1;2410:152:46;-1:-1:-1;2584:35:46;;;;2580:135;;-1:-1:-1;2651:30:46;-1:-1:-1;2691:1:46;;-1:-1:-1;2691:1:46;;-1:-1:-1;2643:53:46;;-1:-1:-1;;2643:53:46;2580:135;1870:13:34;;2752:20:46;;-1:-1:-1;7662:41:33;1886:1:34;2801:16:46;1862:22:34;;;;1858:30;;;;1854:41;1847:49;1840:57;1823:15;;;1819:79;;-1:-1:-1;;2899:14:46;;2895:3973;;-1:-1:-1;2964:8:46;;;;;2945:1;2964:8;3043:53;2964:8;3073:3;20378:131:33;3043:21:46;:53::i;:::-;3034:62;;3128:9;3118:6;:19;3114:119;;-1:-1:-1;3169:30:46;;-1:-1:-1;3209:1:46;;-1:-1:-1;3209:1:46;;-1:-1:-1;3161:53:46;;-1:-1:-1;;3161:53:46;3114:119;3406:6;3430:125;3457:17;;;1870:13:34;;1823:15;;-1:-1:-1;1886:1:34;1688:14;1862:22;;;;1858:30;;;;7945:41:33;1854::34;1847:49;1840:57;1819:79;3496:1:46;3437:60;3430:125;;3521:15;;3430:125;;;3594:9;3577:13;:26;3573:403;;3628:24;3654:19;3701:72;3748:9;3759:13;3701:46;:72::i;:::-;3627:146;;-1:-1:-1;3627:146:46;-1:-1:-1;3799:22:46;;;;3795:117;;-1:-1:-1;3857:17:46;-1:-1:-1;3884:1:46;;-1:-1:-1;3884:1:46;;-1:-1:-1;3849:40:46;;-1:-1:-1;;;;3849:40:46;3795:117;3945:12;-1:-1:-1;;3573:403:46;4079:1;4067:9;:13;4063:113;;;-1:-1:-1;4112:30:46;;-1:-1:-1;4152:1:46;;-1:-1:-1;4152:1:46;;-1:-1:-1;4104:53:46;;-1:-1:-1;;;4104:53:46;4063:113;4197:10;4193:79;;;4244:9;4243:10;;4231:22;;4193:79;4724:13;4704:9;4697:41;4686:52;;4843:1;4832:8;:12;4828:114;;;-1:-1:-1;4876:32:46;;-1:-1:-1;4918:1:46;;-1:-1:-1;4918:1:46;;-1:-1:-1;4868:55:46;;-1:-1:-1;;;4868:55:46;4828:114;4964:17;4985:1;4964:22;4960:1894;;5030:9;5010:29;;4960:1894;;;5210:13;5234:9;;;5717:2;5709:10;;5705:122;;;-1:-1:-1;5755:34:46;;-1:-1:-1;5799:1:46;;-1:-1:-1;5799:1:46;;-1:-1:-1;5747:57:46;;-1:-1:-1;;;;5747:57:46;5705:122;5856:2;:11;6024:33;;;5998:23;6024:17;5856:11;6024:33;5856:11;6241:32;;;;:::i;:::-;;:53;;;-1:-1:-1;6556:44:46;;;;;;;6241:53;;6626:32;;;6644:14;6626:32;6622:144;;;-1:-1:-1;6694:34:46;;-1:-1:-1;6738:1:46;;-1:-1:-1;6738:1:46;;-1:-1:-1;6686:57:46;;-1:-1:-1;;;;;;;6686:57:46;6622:144;-1:-1:-1;;6807:28:46;;;-1:-1:-1;;4960:1894:46;2915:3953;;2895:3973;1870:13:34;;20571:29:33;1886:1:34;6882:13:46;1862:22:34;;;;1858:30;;;;1854:41;1847:49;1840:57;1823:15;;;1819:79;6974:11:46;;6970:1209;;7005:8;;;;;;7081:55;7005:8;7111:3;7516:41:33;7081:21:46;:55::i;:::-;7072:64;-1:-1:-1;7072:64:46;7235:53;7072:64;7265:3;20378:131:33;7235:21:46;:53::i;:::-;7226:62;;7324:11;7314:6;:21;7310:131;;-1:-1:-1;7371:32:46;;-1:-1:-1;7413:1:46;;-1:-1:-1;7413:1:46;;-1:-1:-1;7363:55:46;;-1:-1:-1;;;;7363:55:46;7310:131;7154:305;7500:21;7523:16;7567:62;7614:6;7622;7567:46;:62::i;:::-;7499:130;;-1:-1:-1;7499:130:46;-1:-1:-1;7655:19:46;;;;7651:111;;-1:-1:-1;7710:14:46;-1:-1:-1;7734:1:46;;-1:-1:-1;7734:1:46;;-1:-1:-1;7702:37:46;;-1:-1:-1;;;;7702:37:46;7651:111;7792:9;-1:-1:-1;;7881:17:46;;;7860:18;7925:10;;:36;;;;;7953:8;7939:11;:22;7925:36;7924:80;;;;7976:1;7967:6;:10;:36;;;;;7995:8;7981:11;:22;7967:36;7920:183;;;-1:-1:-1;8040:25:46;;-1:-1:-1;8075:1:46;;-1:-1:-1;8075:1:46;;-1:-1:-1;8032:48:46;;-1:-1:-1;;;;8032:48:46;7920:183;8135:11;-1:-1:-1;;6970:1209:46;8197:17;8218:1;8197:22;8193:220;;8397:1;8386:12;;8193:220;1954:6469;;;1751:6678;;;;;;;;:::o;6054:800:42:-;6139:6;;;6221:17;;;6213:26;;6386:16;6370:33;;6366:472;;;6583:2;6575:5;:10;6599:1;6588:12;;6610:2;6602:5;:10;6616:1;6602:15;6560:58;;;;;;;;;6366:472;6800:5;;-1:-1:-1;6808:8:42;-1:-1:-1;6818:4:42;;-1:-1:-1;6054:800:42;;;;;;:::o;57066:978:45:-;57151:6;57159:4;57165:6;57211:8;57223:2;57211:14;57207:821;;-1:-1:-1;57253:17:45;;-1:-1:-1;57272:5:45;;-1:-1:-1;57279:1:45;57245:36;;57207:821;57317:2;57306:8;:13;57302:726;;;57354:3;57343:8;:14;57339:98;;;-1:-1:-1;57389:1:45;;-1:-1:-1;;57392:22:45;;;57416:1;57381:37;;57339:98;57454:12;57492:8;57503:1;57492:12;57490:15;;57476:2;:30;57454:53;;57592:15;57630:5;57610:17;:25;;;;;:::i;:::-;;;-1:-1:-1;;57671:16:45;;;:37;;;;-1:-1:-1;57682:5:45;-1:-1:-1;57653:63:45;;57302:726;57753:1;57741:8;:13;57737:291;;-1:-1:-1;57782:1:45;;-1:-1:-1;57782:1:45;;-1:-1:-1;57792:1:45;57774:20;;57737:291;-1:-1:-1;;;57988:1:45;:12;;57974:2;:27;57947:55;;58004:5;58011:1;57939:74;;58539:1243;58674:20;;;1447:3:47;1145:33;1176:2;397:4;1145:33;:::i;:::-;;1176:2;397:4;1145:33;:::i;:::-;1294:23;;1316:1;1294:23;:::i;:::-;58911:24:45;;:1;:24;:::i;:::-;:46;;;;:::i;:::-;:79;;;;:::i;:::-;58890:100;;59102:477;;;59187:1;59184;59177:12;59267:1;59262;59257:2;59250:5;59246:14;59242:22;59234:6;59230:35;59226:2;59218:6;59206:63;59152:6;59312:1;59306:8;59354:24;59346:6;59342:37;59332:47;;59406:1;59403;59396:12;59509:1;59502:2;59495:5;59491:14;59486:2;59480:3;59473:5;59469:15;59465:24;59461:45;59453:6;59449:58;59445:2;59437:6;59425:86;59562:1;59556:8;59538:27;;59102:477;-1:-1:-1;;;;59102:477:45:o;:::-;59610:51;59657:3;59645:10;59625:18;59610:51;:::i;:::-;59593:68;;59677:8;59674:92;;;59705:59;59761:1;59756:3;59752:11;59740:10;59720:18;59705:59;:::i;:::-;59688:76;;59025:751;58539:1243;;;;;;:::o;60320:1618::-;60583:6;60591;60691:13;60675:12;:29;60671:93;;-1:-1:-1;60728:13:45;;-1:-1:-1;60743:9:45;60720:33;;60671:93;60773:33;60816:24;60888;60914:21;60939:54;60943:12;60957:9;60968:13;60983:9;60939:3;:54::i;:::-;60887:106;;;;61032:23;61057:20;61081:55;61085:13;61100:9;61111:13;61126:9;61081:3;:55::i;:::-;61031:105;;;;61253:71;61257:17;61276:14;61292:16;61310:13;61253:3;:71::i;:::-;61187:137;;;;;;;;60851:484;;;;61365:24;61391:21;61416:55;61420:13;61435:9;61446:13;61461:9;61416:3;:55::i;:::-;61364:107;;;;61529:33;61564:24;61604:85;61608:26;61636:17;61655;61674:14;61604:3;:85::i;:::-;61528:161;;;;61752:24;61778:15;61809:76;61813:26;61841:17;61860:13;61875:9;61809:3;:76::i;:::-;61751:134;;-1:-1:-1;61751:134:45;-1:-1:-1;;;;;;;;;60320:1618:45;;;;;;;;;;;:::o;48286:370::-;48374:6;48382;48401:27;48430:18;48450:9;48463:37;48472:17;48491:8;48463;:37::i;:::-;48400:100;;;;;;48515:4;48510:88;;48542:45;;;;;;;;5378:25:134;;;5419:18;;;5412:34;;;5351:18;;48542:45:45;5150:302:134;35925:1328:45;36006:14;;1145:33:47;1176:2;397:4;1145:33;:::i;:::-;1294:23;;1316:1;1294:23;:::i;:::-;36104:24:45;;36127:1;36104:24;:::i;:::-;36077:51;-1:-1:-1;36138:24:45;1145:33:47;1176:2;397:4;1145:33;:::i;:::-;36138:46:45;;36537:1;36532:2;36525:5;36521:14;36517:22;36514:1;36510:30;36563:1;36560;36553:12;36614:1;36602:10;36598:2;36590:6;36578:38;;36655:1;36649:8;36699:6;36685:12;36681:25;36671:35;;36754:6;36740:12;36736:25;36729:33;36719:136;;36802:39;;;;36719:136;;36879:1;36876;36869:12;37191:1;37184:2;37177:5;37173:14;37168:2;37162:3;37155:5;37151:15;37147:24;37143:45;37125:16;37121:68;37117:2;37109:6;37097:96;-1:-1:-1;;37234:1:45;37228:8;37216:21;;35925:1328;-1:-1:-1;;35925:1328:45:o;3731:701::-;3818:7;3885:1;3865:17;:21;3861:555;;;3931:16;3910:17;:37;3906:316;;-1:-1:-1;3978:29:45;;3731:701;-1:-1:-1;3731:701:45:o;3906:316::-;-1:-1:-1;4184:18:45;;;3731:701::o;3861:555::-;-1:-1:-1;4383:17:45;3731:701::o;3861:555::-;3731:701;;;:::o;21872:550::-;21933:12;;22319:6;22316:1;22313;22306:20;22346:9;;;;22394:11;;;22380:12;;;;22376:30;;;;;21872:550;-1:-1:-1;;21872:550:45:o;22585:4048::-;22667:14;22694:13;22709;22726:12;22733:1;22736;22726:6;:12::i;:::-;22693:45;;;;22812:5;22821:1;22812:10;22808:109;;22881:11;22873:5;:19;;;;;:::i;:::-;;22866:26;;;;;;22808:109;23024:11;23015:5;:20;23011:91;;23058:33;;;;;;;;8664:25:134;;;8705:18;;;8698:34;;;8748:18;;;8741:34;;;8637:18;;23058:33:45;8468:313:134;23011:91:45;23394:17;23553:11;23550:1;23547;23540:25;24154:1;24139:12;;:16;;24124:32;;24393:25;;;;;25554:1;25535;:15;;25534:21;;25787;;;25783:25;;25772:36;25856:21;;;25852:25;;25841:36;25926:21;;;25922:25;;25911:36;25996:21;;;25992:25;;25981:36;26066:21;;;26062:25;;26051:36;26137:21;;;26133:25;;;26122:36;24106:15;25003;;;24999:29;;;24995:37;;;23659:20;;;23648:32;;;25121:22;;;;23702:21;;;;24565:19;;;;25112:31;;;;26601:15;;-1:-1:-1;;22585:4048:45;;;;;:::o;5040:1698::-;5190:6;5198;5312:1;5307;5303;:5;5302:11;5298:1434;;;5364:16;5333:20;:48;5329:830;;;5429:29;5437:16;5457:1;5429:29;:::i;:::-;5405:20;:53;5401:529;;-1:-1:-1;5600:16:45;;-1:-1:-1;5618:8:45;5592:35;;5401:529;5870:25;5893:2;5870:20;:25;:::i;:::-;5862:34;;;:::i;:::-;5898:12;:8;5909:1;5898:12;:::i;:::-;5854:57;;;;;;5329:830;6104:29;6112:20;6104:29;:::i;:::-;6135:8;6096:48;;;;;;5298:1434;6224:16;6193:20;:48;6189:533;;;6444:25;6467:2;6444:20;:25;:::i;6189:533::-;-1:-1:-1;6675:20:45;;-1:-1:-1;6698:8:45;6660:47;;45918:1994;46002:6;46010;46018:4;46062:17;46083:1;46062:22;46058:134;;-1:-1:-1;1408:1:45;;-1:-1:-1;1408:1:45;;-1:-1:-1;46172:4:45;46104:73;;46058:134;46331:4;46311:17;:24;46339:1;46311:29;46307:1005;;46384:4;46364:17;:24;:29;:66;;;;-1:-1:-1;46409:21:45;46397:33;;;46364:66;46360:174;;;46475:4;46454:25;;;;46513:2;46501:14;;;;46360:174;46576:4;46556:17;:24;:29;:66;;;;-1:-1:-1;46601:21:45;46589:33;;;46556:66;46552:174;;;46667:4;46646:25;;;;46705:2;46693:14;;;;46552:174;46768:4;46748:17;:24;:29;:66;;;;-1:-1:-1;46793:21:45;46781:33;;;46748:66;46744:174;;;46859:4;46838:25;;;;46897:2;46885:14;;;;46744:174;46963:4;46943:17;:24;:29;:65;;;;-1:-1:-1;46988:20:45;46976:32;;;46943:65;46936:174;;;47053:3;47032:24;;;;47090:1;47078:13;;;;46936:174;;;47152:4;47132:17;:24;:29;:65;;;;-1:-1:-1;47177:20:45;47165:32;;;47132:65;47128:170;;;47242:2;47221:23;;;;47278:1;47266:13;;;;47128:170;47606:2;47586:22;;;;;47647:25;47626:17;:46;:82;;;;-1:-1:-1;47688:20:45;47676:32;;;47626:82;47622:192;;;47748:20;47728:40;;47798:1;47786:13;;;;47622:192;-1:-1:-1;47836:17:45;;47855:8;;-1:-1:-1;;;47885:4:45;47865:24;;:29;;;45918:1994::o;1985:168:2:-;2046:13;2100:1;2092:5;:9;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2114:31;2436:3:5;2431:8;;;2576;;;2575:17;2114:8:2;:31::i;:::-;2078:68;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2071:75;;1985:168;;;:::o;1251:634::-;1307:13;1356:14;1373:17;1384:5;1373:10;:17::i;:::-;1393:1;1373:21;1356:38;;1408:20;1442:6;1431:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1431:18:2;-1:-1:-1;1408:41:2;-1:-1:-1;1538:30:2;;;1554:4;1538:30;1595:247;1626:5;;1730:10;1725:2;1714:14;;1709:32;1626:5;1696:46;1786:2;1777:11;;;-1:-1:-1;1806:21:2;1595:247;1806:21;-1:-1:-1;1862:6:2;1251:634;-1:-1:-1;;;1251:634:2:o;835:346:34:-;919:7;1033:109;1107:1;1100:4;1096:1;1086:6;1080:13;1077:1;1072:22;1068:30;1064:41;1061:48;1055:3;1047:6;1044:15;1040:70;1033:109;;;1135:1;1127:6;1123:14;1113:24;;1033:109;;;-1:-1:-1;1168:6:34;;835:346;-1:-1:-1;;835:346:34:o;5044:1463:35:-;1870:13:34;;5135:6:35;;;;7516:41:33;1886:1:34;1862:22;;;1858:30;;;;1854:41;1847:49;1840:57;1823:15;;;1819:79;5304:15:35;;;;5135:6;;5374:53;5304:15;1823::34;5374:40:35;:53::i;:::-;5334:93;;-1:-1:-1;5334:93:35;-1:-1:-1;5476:26:35;;;;5472:90;;-1:-1:-1;5530:13:35;-1:-1:-1;5545:1:35;;-1:-1:-1;5522:25:35;;-1:-1:-1;;5522:25:35;5472:90;5618:5;5627:1;5618:10;5614:341;;5863:16;5847:5;:33;:77;;5922:1;5847:77;;;5883:29;5847:77;5839:101;-1:-1:-1;5933:5:35;-1:-1:-1;5839:101:35;;-1:-1:-1;;;5839:101:35;5614:341;6400:29;6392:37;;:81;;6471:1;6392:81;;;6432:29;6392:81;6384:106;-1:-1:-1;6475:14:35;;;-1:-1:-1;;;;5044:1463:35;;;;;:::o;29471:916:3:-;29524:7;;29608:8;29599:17;;29595:103;;29645:8;29636:17;;;-1:-1:-1;29681:2:3;29671:12;29595:103;29724:8;29715:5;:17;29711:103;;29761:8;29752:17;;;-1:-1:-1;29797:2:3;29787:12;29711:103;29840:8;29831:5;:17;29827:103;;29877:8;29868:17;;;-1:-1:-1;29913:2:3;29903:12;29827:103;29956:7;29947:5;:16;29943:100;;29992:7;29983:16;;;-1:-1:-1;30027:1:3;30017:11;29943:100;30069:7;30060:5;:16;30056:100;;30105:7;30096:16;;;-1:-1:-1;30140:1:3;30130:11;30056:100;30182:7;30173:5;:16;30169:100;;30218:7;30209:16;;;-1:-1:-1;30253:1:3;30243:11;30169:100;30295:7;30286:5;:16;30282:66;;30332:1;30322:11;30374:6;29471:916;-1:-1:-1;;29471:916:3:o;1114:3326:35:-;1199:6;1207:7;1263:3;1254:5;:12;1250:95;;-1:-1:-1;1294:32:35;;-1:-1:-1;1328:1:35;1286:44;;1250:95;1511:5;1520:1;1511:10;1507:80;;1548:24;;;;;;;;;;;;;;1507:80;1808:18;1778:19;1912:7;;;1778:19;2083:486;2100:5;2090:6;:15;;:32;;;;;2120:2;2109:8;:13;2090:32;2083:486;;;2434:13;;2518:10;;;;2546:8;;;;;2468:2;2464:17;2431:1;2426:22;;;;2422:40;;;2418:64;2407:76;2083:486;;;2785:5;2775:6;:15;2771:1613;;2939:13;;2832;2931:22;2927:40;;;3167:1;3159:9;;3155:393;;;-1:-1:-1;3204:29:35;;-1:-1:-1;3235:1:35;;-1:-1:-1;3196:41:35;;-1:-1:-1;;;;3196:41:35;3155:393;3318:2;:14;;;3309:24;;3363:14;;;:22;-1:-1:-1;3359:126:35;;;-1:-1:-1;3425:29:35;;-1:-1:-1;3456:1:35;;-1:-1:-1;3417:41:35;;-1:-1:-1;;;;;3417:41:35;3359:126;3510:15;;;;;-1:-1:-1;3569:8:35;;;;;3760:592;3777:5;3767:6;:15;3760:592;;4007:13;;3876:23;3999:22;4177:18;4150:46;;4146:150;;-1:-1:-1;4236:29:35;;-1:-1:-1;4267:1:35;;-1:-1:-1;4228:41:35;;-1:-1:-1;;;;4228:41:35;4146:150;-1:-1:-1;4321:8:35;;;;;3760:592;;;4413:1;;4417:5;;-1:-1:-1;1114:3326:35;-1:-1:-1;;;;;;1114:3326:35:o;14:207:134:-;100:6;153:2;141:9;132:7;128:23;124:32;121:52;;;169:1;166;159:12;121:52;-1:-1:-1;192:23:134;;14:207;-1:-1:-1;14:207:134:o;435:302::-;557:6;565;618:2;606:9;597:7;593:23;589:32;586:52;;;634:1;631;624:12;586:52;-1:-1:-1;;657:23:134;;;727:2;712:18;;;699:32;;-1:-1:-1;435:302:134:o;742:156::-;808:20;;868:4;857:16;;847:27;;837:55;;888:1;885;878:12;903:277;996:6;1004;1057:2;1045:9;1036:7;1032:23;1028:32;1025:52;;;1073:1;1070;1063:12;1025:52;1109:9;1096:23;1086:33;;1138:36;1170:2;1159:9;1155:18;1138:36;:::i;:::-;1128:46;;903:277;;;;;:::o;1640:368::-;1732:6;1740;1793:2;1781:9;1772:7;1768:23;1764:32;1761:52;;;1809:1;1806;1799:12;1761:52;1845:9;1832:23;1822:33;;1905:2;1894:9;1890:18;1877:32;1952:5;1945:13;1938:21;1931:5;1928:32;1918:60;;1974:1;1971;1964:12;1918:60;1997:5;1987:15;;;1640:368;;;;;:::o;2013:477::-;2162:2;2151:9;2144:21;2125:4;2194:6;2188:13;2237:6;2232:2;2221:9;2217:18;2210:34;2296:6;2291:2;2283:6;2279:15;2274:2;2263:9;2259:18;2253:50;2352:1;2347:2;2338:6;2327:9;2323:22;2319:31;2312:42;2481:2;2411:66;2406:2;2398:6;2394:15;2390:88;2379:9;2375:104;2371:113;2363:121;;;2013:477;;;;:::o;2932:184::-;2984:77;2981:1;2974:88;3081:4;3078:1;3071:15;3105:4;3102:1;3095:15;3121:981;3190:6;3243:2;3231:9;3222:7;3218:23;3214:32;3211:52;;;3259:1;3256;3249:12;3211:52;3299:9;3286:23;3328:18;3369:2;3361:6;3358:14;3355:34;;;3385:1;3382;3375:12;3355:34;3423:6;3412:9;3408:22;3398:32;;3468:7;3461:4;3457:2;3453:13;3449:27;3439:55;;3490:1;3487;3480:12;3439:55;3526:2;3513:16;3548:2;3544;3541:10;3538:36;;;3554:18;;:::i;:::-;3688:2;3682:9;3750:4;3742:13;;3593:66;3738:22;;;3762:2;3734:31;3730:40;3718:53;;;3786:18;;;3806:22;;;3783:46;3780:72;;;3832:18;;:::i;:::-;3872:10;3868:2;3861:22;3907:2;3899:6;3892:18;3947:7;3942:2;3937;3933;3929:11;3925:20;3922:33;3919:53;;;3968:1;3965;3958:12;3919:53;4024:2;4019;4015;4011:11;4006:2;3998:6;3994:15;3981:46;4069:1;4047:15;;;4064:2;4043:24;4036:35;;;;-1:-1:-1;4051:6:134;3121:981;-1:-1:-1;;;;;3121:981:134:o;4458:397::-;4616:6;4624;4632;4685:2;4673:9;4664:7;4660:23;4656:32;4653:52;;;4701:1;4698;4691:12;4653:52;-1:-1:-1;;4724:23:134;;;4794:2;4779:18;;4766:32;;-1:-1:-1;4845:2:134;4830:18;;;4817:32;;4458:397;-1:-1:-1;4458:397:134:o;5706:184::-;5758:77;5755:1;5748:88;5855:4;5852:1;5845:15;5879:4;5876:1;5869:15;5895:184;5947:77;5944:1;5937:88;6044:4;6041:1;6034:15;6068:4;6065:1;6058:15;6084:476;6173:1;6210:5;6173:1;6224:330;6245:7;6235:8;6232:21;6224:330;;;6364:4;6296:66;6292:77;6286:4;6283:87;6280:113;;;6373:18;;:::i;:::-;6423:7;6413:8;6409:22;6406:55;;;6443:16;;;;6406:55;6522:22;;;;6482:15;;;;6224:330;;;6228:3;6084:476;;;;;:::o;6565:866::-;6614:5;6644:8;6634:80;;-1:-1:-1;6685:1:134;6699:5;;6634:80;6733:4;6723:76;;-1:-1:-1;6770:1:134;6784:5;;6723:76;6815:4;6833:1;6828:59;;;;6901:1;6896:130;;;;6808:218;;6828:59;6858:1;6849:10;;6872:5;;;6896:130;6933:3;6923:8;6920:17;6917:43;;;6940:18;;:::i;:::-;-1:-1:-1;;6996:1:134;6982:16;;7011:5;;6808:218;;7110:2;7100:8;7097:16;7091:3;7085:4;7082:13;7078:36;7072:2;7062:8;7059:16;7054:2;7048:4;7045:12;7041:35;7038:77;7035:159;;;-1:-1:-1;7147:19:134;;;7179:5;;7035:159;7226:34;7251:8;7245:4;7226:34;:::i;:::-;7356:6;7288:66;7284:79;7275:7;7272:92;7269:118;;;7367:18;;:::i;:::-;7405:20;;6565:866;-1:-1:-1;;;6565:866:134:o;7436:131::-;7496:5;7525:36;7552:8;7546:4;7525:36;:::i;7572:168::-;7645:9;;;7676;;7693:15;;;7687:22;;7673:37;7663:71;;7714:18;;:::i;7745:200::-;7811:9;;;7784:4;7839:9;;7867:10;;7879:12;;;7863:29;7902:12;;;7894:21;;7860:56;7857:82;;;7919:18;;:::i;:::-;7857:82;7745:200;;;;:::o;7950:216::-;8014:9;;;8042:11;;;7989:3;8072:9;;8100:10;;8096:19;;8125:10;;8117:19;;8093:44;8090:70;;;8140:18;;:::i;:::-;8090:70;;7950:216;;;;:::o;8171:292::-;8243:9;;;8210:7;8268:9;;8285:66;8279:73;;8264:89;8261:115;;;8356:18;;:::i;:::-;8429:1;8420:7;8415:16;8412:1;8409:23;8405:1;8398:9;8395:38;8385:72;;8437:18;;:::i;8786:308::-;8825:1;8851;8841:35;;8856:18;;:::i;:::-;8973:66;8970:1;8967:73;8898:66;8895:1;8892:73;8888:153;8885:179;;;9044:18;;:::i;:::-;-1:-1:-1;9078:10:134;;8786:308::o;9099:112::-;9130:1;9156;9146:35;;9161:18;;:::i;:::-;-1:-1:-1;9195:10:134;;9099:112::o;9216:191::-;9251:3;9282:66;9275:5;9272:77;9269:103;;9352:18;;:::i;9412:120::-;9452:1;9478;9468:35;;9483:18;;:::i;:::-;-1:-1:-1;9517:9:134;;9412:120::o;9537:195::-;9576:3;9607:66;9600:5;9597:77;9594:103;;9677:18;;:::i;:::-;-1:-1:-1;9724:1:134;9713:13;;9537:195::o;9737:212::-;9779:3;9817:5;9811:12;9861:6;9854:4;9847:5;9843:16;9838:3;9832:36;9923:1;9887:16;;9912:13;;;-1:-1:-1;9887:16:134;;9737:212;-1:-1:-1;9737:212:134:o;9954:344::-;10175:3;10206:30;10232:3;10224:6;10206:30;:::i;:::-;10259:3;10245:18;;10290:1;10279:13;;9954:344;-1:-1:-1;;;9954:344:134:o;10303:390::-;10602:3;10597;10590:16;10572:3;10622:65;10648:38;10683:1;10678:3;10674:11;10666:6;10648:38;:::i;:::-;10640:6;10622:65;:::i;:::-;10615:72;10303:390;-1:-1:-1;;;;10303:390:134:o;10698:315::-;10949:3;10944;10937:16;10919:3;10969:38;11004:1;10999:3;10995:11;10987:6;10969:38;:::i;11018:417::-;11293:3;11318:111;11344:84;11370:57;11396:30;11422:3;11414:6;11396:30;:::i;:::-;11388:6;11370:57;:::i;:::-;11362:6;11344:84;:::i;11318:111::-;11311:118;11018:417;-1:-1:-1;;;;;;11018:417:134:o;11620:128::-;11687:9;;;11708:11;;;11705:37;;;11722:18;;:::i;11753:184::-;11805:77;11802:1;11795:88;11902:4;11899:1;11892:15;11926:4;11923:1;11916:15;11942:125;12007:9;;;12028:10;;;12025:36;;;12041:18;;:::i;12072:267::-;12251:3;12276:57;12302:30;12328:3;12320:6;12302:30;:::i","linkReferences":{}},"methodIdentifiers":{"FORMAT_DEFAULT_SCIENTIFIC_MAX()":"9b4afd99","FORMAT_DEFAULT_SCIENTIFIC_MIN()":"d35273a7","abs(bytes32)":"81a82272","add(bytes32,bytes32)":"d1de592a","ceil(bytes32)":"719cd99d","div(bytes32,bytes32)":"30297400","e()":"ffae15ba","eq(bytes32,bytes32)":"3447c030","floor(bytes32)":"5ca0e7a4","format(bytes32)":"a100a3d9","format(bytes32,bool)":"371493ce","format(bytes32,bytes32,bytes32)":"e5526ecd","frac(bytes32)":"28fa1f01","fromFixedDecimalLossless(uint256,uint8)":"3b3bd868","fromFixedDecimalLossy(uint256,uint8)":"e75f991f","gt(bytes32,bytes32)":"8dc29807","gte(bytes32,bytes32)":"73bfb283","integer(bytes32)":"e0db5888","inv(bytes32)":"04327dc5","isZero(bytes32)":"dd646917","log10(bytes32)":"25388350","lt(bytes32,bytes32)":"d102b4d3","lte(bytes32,bytes32)":"81f7e2f5","max(bytes32,bytes32)":"078b665b","maxNegativeValue()":"602c35fc","maxPositiveValue()":"cb09682b","min(bytes32,bytes32)":"a90d041a","minNegativeValue()":"cde72ef3","minPositiveValue()":"a19684b7","minus(bytes32)":"d3d6ffa8","mul(bytes32,bytes32)":"96ce1ec7","parse(string)":"bc62d8d8","pow(bytes32,bytes32)":"3004fa41","pow10(bytes32)":"1ee62f11","sqrt(bytes32)":"146e82ad","sub(bytes32,bytes32)":"41aa0080","toFixedDecimalLossless(bytes32,uint8)":"5b23771d","toFixedDecimalLossy(bytes32,uint8)":"0b6429bc","zero()":"bc1b392d"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"CoefficientOverflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"DivisionByZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"ExponentOverflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"Log10Negative\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Log10Zero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tablesAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"expectedCodehash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"actualCodehash\",\"type\":\"bytes32\"}],\"name\":\"LogTablesNotDeployed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"LossyConversionFromFloat\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"LossyConversionToFloat\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"MaximizeOverflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denominator\",\"type\":\"uint256\"}],\"name\":\"MulDivOverflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"NegativeFixedDecimalConversion\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"PowNegativeBase\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"scientificMin\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"scientificMax\",\"type\":\"bytes32\"}],\"name\":\"ScientificMinNotLessThanMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"UnformatableExponent\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"targetExponent\",\"type\":\"int256\"}],\"name\":\"WithTargetExponentOverflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"ZeroNegativePower\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroStringStartPointer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FORMAT_DEFAULT_SCIENTIFIC_MAX\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FORMAT_DEFAULT_SCIENTIFIC_MIN\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"abs\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"add\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"ceil\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"div\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"e\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"eq\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"floor\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"scientific\",\"type\":\"bool\"}],\"name\":\"format\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"format\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"scientificMin\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"scientificMax\",\"type\":\"bytes32\"}],\"name\":\"format\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"frac\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"name\":\"fromFixedDecimalLossless\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"name\":\"fromFixedDecimalLossy\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"gt\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"gte\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"integer\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"inv\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"isZero\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"log10\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"lt\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"lte\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"max\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxNegativeValue\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxPositiveValue\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"min\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minNegativeValue\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minPositiveValue\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"minus\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"mul\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"str\",\"type\":\"string\"}],\"name\":\"parse\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"},{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"pow\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"pow10\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"sqrt\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"sub\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"float\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"name\":\"toFixedDecimalLossless\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"float\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"name\":\"toFixedDecimalLossy\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"zero\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"CoefficientOverflow(int256,int256)\":[{\"details\":\"Thrown when a coefficient overflows.\"}],\"DivisionByZero(int256,int256)\":[{\"details\":\"Thrown when dividing by zero.\",\"params\":{\"exponent\":\"The exponent of the numerator.\",\"signedCoefficient\":\"The signed coefficient of the numerator.\"}}],\"ExponentOverflow(int256,int256)\":[{\"details\":\"Thrown when an exponent overflows.\"}],\"Log10Negative(int256,int256)\":[{\"details\":\"Thrown when attempting to calculate the log of a negative number.\"}],\"Log10Zero()\":[{\"details\":\"Thrown when attempting to calculate the log of 0.\"}],\"LogTablesNotDeployed(address,bytes32,bytes32)\":[{\"details\":\"Thrown when constructing a `DecimalFloat` on a chain where the log tables data contract is not deployed at the expected address with the expected codehash. Without this check, transcendental functions (`pow10`/`log10`/`pow`/`sqrt`) would silently `extcodecopy` zero bytes and return garbage.\",\"params\":{\"actualCodehash\":\"The codehash currently at `tablesAddress` (zero if no contract is deployed there).\",\"expectedCodehash\":\"The codehash the deployed table contract is expected to have.\",\"tablesAddress\":\"The address `DecimalFloat` was compiled to read log tables from.\"}}],\"LossyConversionFromFloat(int256,int256)\":[{\"details\":\"Thrown when converting a float to some value when the conversion is lossy.\"}],\"LossyConversionToFloat(int256,int256)\":[{\"details\":\"Thrown when converting some value to a float when the conversion is lossy.\"}],\"MaximizeOverflow(int256,int256)\":[{\"details\":\"Thrown when a maximize overflows where it is not appropriate.\"}],\"MulDivOverflow(uint256,uint256,uint256)\":[{\"details\":\"Thrown when mulDiv internal to division overflows.\"}],\"NegativeFixedDecimalConversion(int256,int256)\":[{\"details\":\"Thrown when attempting to convert a negative number to an unsigned fixed-point number.\"}],\"PowNegativeBase(int256,int256)\":[{\"details\":\"Thrown when attempting to exponentiate a negative base.\"}],\"ScientificMinNotLessThanMax(bytes32,bytes32)\":[{\"details\":\"Thrown when scientificMin is not less than scientificMax in format.\",\"params\":{\"scientificMax\":\"The maximum threshold for scientific notation.\",\"scientificMin\":\"The minimum threshold for scientific notation.\"}}],\"UnformatableExponent(int256)\":[{\"details\":\"Thrown when the exponent cannot be formatted.\",\"params\":{\"exponent\":\"The exponent that cannot be formatted.\"}}],\"WithTargetExponentOverflow(int256,int256,int256)\":[{\"details\":\"Thrown when attempting to rescale a coefficient to a target exponent\"}],\"ZeroNegativePower(bytes32)\":[{\"details\":\"Thrown when attempting to exponentiate 0^b where b is negative.\"}]},\"kind\":\"dev\",\"methods\":{\"abs(bytes32)\":{\"params\":{\"a\":\"The float to get the absolute value of.\"},\"returns\":{\"_0\":\"The absolute value of the float.\"}},\"add(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to add.\",\"b\":\"The second float to add.\"},\"returns\":{\"_0\":\"The sum of the two floats.\"}},\"ceil(bytes32)\":{\"params\":{\"a\":\"The float to get the ceiling of.\"},\"returns\":{\"_0\":\"The ceiled float.\"}},\"div(bytes32,bytes32)\":{\"params\":{\"a\":\"The dividend (numerator).\",\"b\":\"The divisor (denominator).\"},\"returns\":{\"_0\":\"The quotient of the two floats.\"}},\"e()\":{\"returns\":{\"_0\":\"The constant value of Euler's number as a Float.\"}},\"eq(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to compare.\",\"b\":\"The second float to compare.\"},\"returns\":{\"_0\":\"True if the two floats are equal, false otherwise.\"}},\"floor(bytes32)\":{\"params\":{\"a\":\"The float to get the floor of.\"},\"returns\":{\"_0\":\"The floored float.\"}},\"format(bytes32)\":{\"params\":{\"a\":\"The float to format.\"},\"returns\":{\"_0\":\"The string representation of the float.\"}},\"format(bytes32,bool)\":{\"params\":{\"a\":\"The float to format.\",\"scientific\":\"Whether to format the float in scientific notation.\"},\"returns\":{\"_0\":\"The string representation of the float.\"}},\"format(bytes32,bytes32,bytes32)\":{\"params\":{\"a\":\"The float to format. The absolute value of `a` is used to determine if scientific notation is used, this allows negative numbers to be formatted consistently with their positive counterparts.\",\"scientificMax\":\"The largest number that won't be formatted in scientific notation.\",\"scientificMin\":\"The smallest number that won't be formatted in scientific notation.\"},\"returns\":{\"_0\":\"The string representation of the float.\"}},\"frac(bytes32)\":{\"params\":{\"a\":\"The float to get the fractional part of.\"},\"returns\":{\"_0\":\"The fractional part of the float.\"}},\"fromFixedDecimalLossless(uint256,uint8)\":{\"params\":{\"decimals\":\"The number of decimals in the fixed point representation. e.g. If 1e18 represents 1 this would be 18 decimals.\",\"value\":\"The fixed point decimal value to convert.\"},\"returns\":{\"_0\":\"float The Float struct containing the signed coefficient and exponent.\"}},\"fromFixedDecimalLossy(uint256,uint8)\":{\"params\":{\"decimals\":\"The number of decimals in the fixed point representation. e.g. If 1e18 represents 1 this would be 18 decimals.\",\"value\":\"The fixed point decimal value to convert.\"},\"returns\":{\"_0\":\"float The Float struct containing the signed coefficient and exponent.\",\"_1\":\"lossless True if the conversion was lossless, false otherwise.\"}},\"gt(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to compare.\",\"b\":\"The second float to compare.\"},\"returns\":{\"_0\":\"True if the first float is greater than the second, false otherwise.\"}},\"gte(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to compare.\",\"b\":\"The second float to compare.\"},\"returns\":{\"_0\":\"True if the first float is greater than or equal to the second, false otherwise.\"}},\"integer(bytes32)\":{\"params\":{\"a\":\"The float to get the integer part of.\"},\"returns\":{\"_0\":\"The integer part of the float.\"}},\"inv(bytes32)\":{\"params\":{\"a\":\"The float to invert.\"},\"returns\":{\"_0\":\"The inverted float.\"}},\"isZero(bytes32)\":{\"params\":{\"a\":\"The float to check.\"},\"returns\":{\"_0\":\"True if the float is zero, false otherwise.\"}},\"log10(bytes32)\":{\"params\":{\"a\":\"The float to take the logarithm of.\"},\"returns\":{\"_0\":\"The logarithm of the float.\"}},\"lt(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to compare.\",\"b\":\"The second float to compare.\"},\"returns\":{\"_0\":\"True if the first float is less than the second, false otherwise.\"}},\"lte(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to compare.\",\"b\":\"The second float to compare.\"},\"returns\":{\"_0\":\"True if the first float is less than or equal to the second, false otherwise.\"}},\"max(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to compare.\",\"b\":\"The second float to compare.\"},\"returns\":{\"_0\":\"The larger of the two floats.\"}},\"maxNegativeValue()\":{\"returns\":{\"_0\":\"The maximum negative value of a Float.\"}},\"maxPositiveValue()\":{\"returns\":{\"_0\":\"The maximum positive value of a Float.\"}},\"min(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to compare.\",\"b\":\"The second float to compare.\"},\"returns\":{\"_0\":\"The smaller of the two floats.\"}},\"minNegativeValue()\":{\"returns\":{\"_0\":\"The minimum negative value of a Float.\"}},\"minPositiveValue()\":{\"returns\":{\"_0\":\"The minimum positive value of a Float.\"}},\"minus(bytes32)\":{\"params\":{\"a\":\"The float to negate.\"},\"returns\":{\"_0\":\"The negated float.\"}},\"mul(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to multiply.\",\"b\":\"The second float to multiply.\"},\"returns\":{\"_0\":\"The product of the two floats.\"}},\"parse(string)\":{\"params\":{\"str\":\"The string to parse.\"},\"returns\":{\"_0\":\"errorSelector The selector of the error if parsing failed. `0` if parsing succeeded.\",\"_1\":\"parsed The parsed float. Caller MUST check `errorSelector` to determine if parsing succeeded.\"}},\"pow(bytes32,bytes32)\":{\"params\":{\"a\":\"The base float.\",\"b\":\"The exponent float.\"},\"returns\":{\"_0\":\"The result of raising the base float to the power of the exponent\"}},\"pow10(bytes32)\":{\"params\":{\"a\":\"The exponent to raise 10 to.\"},\"returns\":{\"_0\":\"The result of 10^a.\"}},\"sqrt(bytes32)\":{\"params\":{\"a\":\"The float to take the square root of.\"},\"returns\":{\"_0\":\"The square root of the float.\"}},\"sub(bytes32,bytes32)\":{\"params\":{\"a\":\"The float to subtract from.\",\"b\":\"The float to subtract.\"},\"returns\":{\"_0\":\"The difference of the two floats.\"}},\"toFixedDecimalLossless(bytes32,uint8)\":{\"params\":{\"decimals\":\"The number of decimals in the fixed point representation. e.g. If 1e18 represents 1 this would be 18 decimals.\",\"float\":\"The Float struct to convert.\"},\"returns\":{\"_0\":\"The fixed point decimal value as a uint256.\"}},\"toFixedDecimalLossy(bytes32,uint8)\":{\"params\":{\"decimals\":\"The number of decimals in the fixed point representation. e.g. If 1e18 represents 1 this would be 18 decimals.\",\"float\":\"The Float struct to convert.\"},\"returns\":{\"_0\":\"value The fixed point decimal value as a uint256.\",\"_1\":\"lossless True if the conversion was lossless, false otherwise.\"}},\"zero()\":{\"returns\":{\"_0\":\"The zero value of a Float in its maximized representation.\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"ZeroStringStartPointer()\":[{\"notice\":\"The decimal string start pointer is zero.\"}]},\"kind\":\"user\",\"methods\":{\"FORMAT_DEFAULT_SCIENTIFIC_MAX()\":{\"notice\":\"The default maximum value for scientific formatting. 1e9\"},\"FORMAT_DEFAULT_SCIENTIFIC_MIN()\":{\"notice\":\"The default minimum value for scientific formatting. 1e-4\"},\"abs(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.abs` for offchain use.\"},\"add(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.add` for offchain use.\"},\"ceil(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.ceil` for offchain use.\"},\"div(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.div` for offchain use.\"},\"e()\":{\"notice\":\"Exposes `LibDecimalFloat.FLOAT_E` for offchain use.\"},\"eq(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.eq` for offchain use.\"},\"floor(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.floor` for offchain use.\"},\"format(bytes32)\":{\"notice\":\"Exposes `format(Float, Float, Float)` for offchain use. Provides default scientific formatting.\"},\"format(bytes32,bool)\":{\"notice\":\"Exposes `LibFormatDecimalFloat.toDecimalString` for offchain use. provides raw bool interface for custom scientific formatting.\"},\"format(bytes32,bytes32,bytes32)\":{\"notice\":\"Exposes `LibFormatDecimalFloat.toDecimalString` for offchain use.\"},\"frac(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.frac` for offchain use.\"},\"fromFixedDecimalLossless(uint256,uint8)\":{\"notice\":\"Exposes `LibDecimalFloat.fromFixedDecimalLosslessPacked` for offchain use.\"},\"fromFixedDecimalLossy(uint256,uint8)\":{\"notice\":\"Exposes `LibDecimalFloat.fromFixedDecimalLossyPacked` for offchain use.\"},\"gt(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.gt` for offchain use.\"},\"gte(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.gte` for offchain use.\"},\"integer(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.integer` for offchain use.\"},\"inv(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.inv` for offchain use.\"},\"isZero(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.isZero` for offchain use.\"},\"log10(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.log10` for offchain use.\"},\"lt(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.lt` for offchain use.\"},\"lte(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.lte` for offchain use.\"},\"max(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.max` for offchain use.\"},\"maxNegativeValue()\":{\"notice\":\"Exposes `LibDecimalFloat.FLOAT_MAX_NEGATIVE_VALUE` for offchain use.\"},\"maxPositiveValue()\":{\"notice\":\"Exposes `LibDecimalFloat.FLOAT_MAX_POSITIVE_VALUE` for offchain use.\"},\"min(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.min` for offchain use.\"},\"minNegativeValue()\":{\"notice\":\"Exposes `LibDecimalFloat.FLOAT_MIN_NEGATIVE_VALUE` for offchain use.\"},\"minPositiveValue()\":{\"notice\":\"Exposes `LibDecimalFloat.FLOAT_MIN_POSITIVE_VALUE` for offchain use.\"},\"minus(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.minus` for offchain use.\"},\"mul(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.mul` for offchain use.\"},\"parse(string)\":{\"notice\":\"Exposes `LibParseDecimalFloat.parseDecimalFloat` for offchain use.\"},\"pow(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.pow` for offchain use.\"},\"pow10(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.pow10` for offchain use.\"},\"sqrt(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.sqrt` for offchain use.\"},\"sub(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.sub` for offchain use.\"},\"toFixedDecimalLossless(bytes32,uint8)\":{\"notice\":\"Exposes `LibDecimalFloat.toFixedDecimalLossless` for offchain use.\"},\"toFixedDecimalLossy(bytes32,uint8)\":{\"notice\":\"Exposes `LibDecimalFloat.toFixedDecimalLossy` for offchain use.\"},\"zero()\":{\"notice\":\"Exposes `LibDecimalFloat.FLOAT_ZERO` for offchain use.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/concrete/DecimalFloat.sol\":\"DecimalFloat\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"appendCBOR\":false,\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[\":@openzeppelin-contracts-5.6.1/=dependencies/@openzeppelin-contracts-5.6.1/\",\":forge-std-1.16.1/=dependencies/forge-std-1.16.1/\",\":mut/=dependencies/rain-string-0.2.0/src/lib/mut/\",\":parse/=dependencies/rain-string-0.2.0/src/lib/parse/\",\":rain-datacontract-0.1.0/=dependencies/rain-datacontract-0.1.0/\",\":rain-deploy-0.1.2/=dependencies/rain-deploy-0.1.2/\",\":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/\"]},\"sources\":{\"dependencies/@openzeppelin-contracts-5.6.1/utils/Bytes.sol\":{\"keccak256\":\"0xf80e4b96b6849936ea0fabd76cf81b13d7276295fddb1e1c07afb3ddf650b0ac\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6430007255ac11c6e9c4331a418f3af52ff66fbbae959f645301d025b20aeb08\",\"dweb:/ipfs/QmQE5fjmBBRw9ndnzJuC2uskYss1gbaR7JdazoCf1FGoBj\"]},\"dependencies/@openzeppelin-contracts-5.6.1/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"dependencies/@openzeppelin-contracts-5.6.1/utils/Strings.sol\":{\"keccak256\":\"0x1fdc2de9585ab0f1c417f02a873a2b6343cd64bb7ffec6b00ffa11a4a158d9e8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ab223a3d969c6cd7610049431dd42740960c477e45878f5d8b54411f7a32bdc\",\"dweb:/ipfs/QmWumhjvhpKcwx3vDPQninsNVTc3BGvqaihkQakFkQYpaS\"]},\"dependencies/@openzeppelin-contracts-5.6.1/utils/math/Math.sol\":{\"keccak256\":\"0x59973a93b1f983f94e10529f46ca46544a9fec2b5f56fb1390bbe9e0dc79f857\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c55ef8f0b9719790c2ae6f81d80a59ffb89f2f0abe6bc065585bd79edce058c5\",\"dweb:/ipfs/QmNNmCbX9NjPXKqHJN8R1WC2rNeZSQrPZLd6FF6AKLyH5Y\"]},\"dependencies/@openzeppelin-contracts-5.6.1/utils/math/SafeCast.sol\":{\"keccak256\":\"0xc8cae21c9ae4a46e5162ff9bf5b351d6fa6a6eba72d515f3bc1bdfeda7fdf083\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce830ebcf28e31643caba318996db3763c36d52cd0f23798ba83c135355d45e9\",\"dweb:/ipfs/QmdGPcvptHN7UBCbUYBbRX3hiRVRFLRwno8b4uga6uFNif\"]},\"dependencies/@openzeppelin-contracts-5.6.1/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]},\"dependencies/rain-string-0.2.0/src/error/ErrParse.sol\":{\"keccak256\":\"0x7a69236ad67e39c20f6ade7973ec551c9a5bb5db4671c8afa95b80f35a996497\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://4731c6ea05b4e820814380dbbd6dac14f5778a1e9194b8992148cf97a99ffbb2\",\"dweb:/ipfs/QmUMnKNt2zQ42fjS4fpLqodXytiffVFzaKupAm8rNsrYVo\"]},\"dependencies/rain-string-0.2.0/src/lib/parse/LibParseCMask.sol\":{\"keccak256\":\"0x91e798a6f71aafbd4743720eaa38a7f16f74c6c0ab2992e7e4982979e9df539a\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://4782e62e0e5a5fbc7d6c757dcc90347d7ad064f25372a6c471ffa968e12b91d7\",\"dweb:/ipfs/QmPohMsVTjm19gxYwxgAsTKJQRjkK2J1Pyah63nCtYBBnt\"]},\"dependencies/rain-string-0.2.0/src/lib/parse/LibParseChar.sol\":{\"keccak256\":\"0x66c401d784e9461f709116441de3707685e08438cd83553db28fe8caf0e97238\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://e6027d0f9d558953686f6eb78ca0b2f2e7d9d38e0be6d1435ffaaa4b90919593\",\"dweb:/ipfs/QmQXDMTzmJrst2a4kHkcfjSsEdnPc4ikQs7VfGbCfe9QCc\"]},\"dependencies/rain-string-0.2.0/src/lib/parse/LibParseDecimal.sol\":{\"keccak256\":\"0x72ccc4d7e0a1245897511e1efc15ddc80d423a8eb956249be7940a8e8f4e99fe\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://3ca57acd6a7cbe16f2c03aa5a6e81ec7af1ad44078924358578560a32aead7c0\",\"dweb:/ipfs/QmNukyUMS4JrzNHAYcpLbtYsD5CwYPEjfAaADv6qMZmqs6\"]},\"src/concrete/DecimalFloat.sol\":{\"keccak256\":\"0x6326a6b5ffef0708b84712c0b891dfc7f2d88c38191628da1f40933951f2683b\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://ad99eda6cc266d5d160439700d3c89a487e8e31d51538f2ad83435a1aac9f3ae\",\"dweb:/ipfs/QmarsuZkgqG7jT9mYBh1VKNvjD5ZsVtJJTiRGbfMQAY669\"]},\"src/error/ErrDecimalFloat.sol\":{\"keccak256\":\"0x53825ff4d1af4981100de46bd7536c611625fe7930b5c21921838cfed3a92243\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://961197f4c7b6d560f71f67892bfd5b64300be0f0fdb20162058938567653643e\",\"dweb:/ipfs/QmTJzmA5CEkmYrXJ2MHnfQ3wGm1Qj6xE1vNaqAqgUpEnvA\"]},\"src/error/ErrFormat.sol\":{\"keccak256\":\"0xc760cb6018291753e7408d55d12d5e66c116f9750dc241bbc201f3b46ae33aa7\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://cbc81bb7c26c8503926b579f978902bcc3227839bee04bd3500cc924d142d28e\",\"dweb:/ipfs/QmXqMuqBCpckD1EnsBjweyLdRZxpvC2xSP9FWBZFh2vztR\"]},\"src/error/ErrParse.sol\":{\"keccak256\":\"0x7fc9fe7421d78306d252d2853fd1be943d9cbd12ff7a9c8c3f286a8164bfe357\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://7b4c434d01b53788968d185683d9633afa26d95396b1e91337a53ccaab0d44ab\",\"dweb:/ipfs/QmQHmVjR37wwrCskiQviwkg7WkeBpr9uPddjuDxqzANXeV\"]},\"src/generated/LogTables.pointers.sol\":{\"keccak256\":\"0x2325d92e3e248350a79f163fcb8738056ae4240b6a77f759ff5fcbf7b381f5ae\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://9a52674114518573de7d184094b266bc2b5208953086f8ec35a494f048deefbb\",\"dweb:/ipfs/QmTjuj1R9k4pFMBVpX6RcWG87Rdh9pRTZVHYo93SzBfmsH\"]},\"src/lib/LibDecimalFloat.sol\":{\"keccak256\":\"0x59d2dad4b7e861ed835a79c61ae42b4b0d628f9c578f3bb3ecd7796ed530f196\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://e565148a37f06299de3b6bcb3385ea0336f65c6c02c9ebfbc6f227f4e56d1c03\",\"dweb:/ipfs/Qma6UNZifZc8zsf7J6B87CdCXhiCR6Zisyg9czsfaji6yY\"]},\"src/lib/deploy/LibDecimalFloatDeploy.sol\":{\"keccak256\":\"0x79f59754c234e55420359efaa9af6ec851fadf8dfaecda6860c1ef99abcf1e64\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://8303dde773c7c613981011fe9ee5d976338b3dab9c66cd67516a82b094596343\",\"dweb:/ipfs/QmQnkeaReEwkKcFMvegAuuBoF2WyirRQmQG9CjKfdhQKnZ\"]},\"src/lib/format/LibFormatDecimalFloat.sol\":{\"keccak256\":\"0x5aac6382e7f7040e68600333c1b00b0aedb3edb6bced84b63783f6d88fe0b4f0\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://e96d30e34e1fa2cc4eb574ded30c0f6f93929dcc19cb571f555ca8c5ac32eaa7\",\"dweb:/ipfs/QmRRtk84AqEdQrRXfeTzVUAbAktJTZ92iTLqjocQV4PDx7\"]},\"src/lib/implementation/LibDecimalFloatImplementation.sol\":{\"keccak256\":\"0x47d0eeb542875548689465407162a19e4a21fb4591af5bb48d5758c0d1b93634\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://631efb796ff17f277804f8a32df7d28630c2ae5300e7d74c37aa8ed1f86b5092\",\"dweb:/ipfs/QmSfmMGQyxKYxu8UrWDEtuCggQ9HtFJy5cbMsYLPZbcTZ7\"]},\"src/lib/parse/LibParseDecimalFloat.sol\":{\"keccak256\":\"0x703d2d37d8a14639a3eb2dcd61601b36552027e16b4e8414befe51f2d0b9ed38\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://53fa45503e115a322a701a1289c5b5fcbe68090c83e0635af77d275d123f09f0\",\"dweb:/ipfs/QmTBtz8uPLYXrTue9SmHBVdgjpFJYUU41Z48PAgu1nXafn\"]},\"src/lib/table/LibLogTable.sol\":{\"keccak256\":\"0xccd2dea54cfb708c01e7e8e88c089742bbab18f5783be4632311fb4923d44c88\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://f45fb78c16b5d66d56ba0e78acdb0ca5d315eb05efa2cd7a81e191aabe7aec52\",\"dweb:/ipfs/QmQJ3TFFxTMu4HZ4qnjgmdmSNhGZLQRdCnSqAipEF1up1f\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.25+commit.b61c2a91"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"int256","name":"signedCoefficient","type":"int256"},{"internalType":"int256","name":"exponent","type":"int256"}],"type":"error","name":"CoefficientOverflow"},{"inputs":[{"internalType":"int256","name":"signedCoefficient","type":"int256"},{"internalType":"int256","name":"exponent","type":"int256"}],"type":"error","name":"DivisionByZero"},{"inputs":[{"internalType":"int256","name":"signedCoefficient","type":"int256"},{"internalType":"int256","name":"exponent","type":"int256"}],"type":"error","name":"ExponentOverflow"},{"inputs":[{"internalType":"int256","name":"signedCoefficient","type":"int256"},{"internalType":"int256","name":"exponent","type":"int256"}],"type":"error","name":"Log10Negative"},{"inputs":[],"type":"error","name":"Log10Zero"},{"inputs":[{"internalType":"address","name":"tablesAddress","type":"address"},{"internalType":"bytes32","name":"expectedCodehash","type":"bytes32"},{"internalType":"bytes32","name":"actualCodehash","type":"bytes32"}],"type":"error","name":"LogTablesNotDeployed"},{"inputs":[{"internalType":"int256","name":"signedCoefficient","type":"int256"},{"internalType":"int256","name":"exponent","type":"int256"}],"type":"error","name":"LossyConversionFromFloat"},{"inputs":[{"internalType":"int256","name":"signedCoefficient","type":"int256"},{"internalType":"int256","name":"exponent","type":"int256"}],"type":"error","name":"LossyConversionToFloat"},{"inputs":[{"internalType":"int256","name":"signedCoefficient","type":"int256"},{"internalType":"int256","name":"exponent","type":"int256"}],"type":"error","name":"MaximizeOverflow"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"},{"internalType":"uint256","name":"denominator","type":"uint256"}],"type":"error","name":"MulDivOverflow"},{"inputs":[{"internalType":"int256","name":"signedCoefficient","type":"int256"},{"internalType":"int256","name":"exponent","type":"int256"}],"type":"error","name":"NegativeFixedDecimalConversion"},{"inputs":[{"internalType":"int256","name":"signedCoefficient","type":"int256"},{"internalType":"int256","name":"exponent","type":"int256"}],"type":"error","name":"PowNegativeBase"},{"inputs":[{"internalType":"Float","name":"scientificMin","type":"bytes32"},{"internalType":"Float","name":"scientificMax","type":"bytes32"}],"type":"error","name":"ScientificMinNotLessThanMax"},{"inputs":[{"internalType":"int256","name":"exponent","type":"int256"}],"type":"error","name":"UnformatableExponent"},{"inputs":[{"internalType":"int256","name":"signedCoefficient","type":"int256"},{"internalType":"int256","name":"exponent","type":"int256"},{"internalType":"int256","name":"targetExponent","type":"int256"}],"type":"error","name":"WithTargetExponentOverflow"},{"inputs":[{"internalType":"Float","name":"b","type":"bytes32"}],"type":"error","name":"ZeroNegativePower"},{"inputs":[],"type":"error","name":"ZeroStringStartPointer"},{"inputs":[],"stateMutability":"view","type":"function","name":"FORMAT_DEFAULT_SCIENTIFIC_MAX","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"FORMAT_DEFAULT_SCIENTIFIC_MIN","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"abs","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"b","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"add","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"ceil","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"b","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"div","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"e","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"b","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"eq","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"floor","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"bool","name":"scientific","type":"bool"}],"stateMutability":"pure","type":"function","name":"format","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"format","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"scientificMin","type":"bytes32"},{"internalType":"Float","name":"scientificMax","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"format","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"frac","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint8","name":"decimals","type":"uint8"}],"stateMutability":"pure","type":"function","name":"fromFixedDecimalLossless","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint8","name":"decimals","type":"uint8"}],"stateMutability":"pure","type":"function","name":"fromFixedDecimalLossy","outputs":[{"internalType":"Float","name":"","type":"bytes32"},{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"b","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"gt","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"b","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"gte","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"integer","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"inv","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"isZero","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"}],"stateMutability":"view","type":"function","name":"log10","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"b","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"lt","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"b","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"lte","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"b","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"max","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"maxNegativeValue","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"maxPositiveValue","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"b","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"min","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"minNegativeValue","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"minPositiveValue","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"minus","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"b","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"mul","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"string","name":"str","type":"string"}],"stateMutability":"pure","type":"function","name":"parse","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"},{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"b","type":"bytes32"}],"stateMutability":"view","type":"function","name":"pow","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"}],"stateMutability":"view","type":"function","name":"pow10","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"}],"stateMutability":"view","type":"function","name":"sqrt","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"b","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"sub","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"float","type":"bytes32"},{"internalType":"uint8","name":"decimals","type":"uint8"}],"stateMutability":"pure","type":"function","name":"toFixedDecimalLossless","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"Float","name":"float","type":"bytes32"},{"internalType":"uint8","name":"decimals","type":"uint8"}],"stateMutability":"pure","type":"function","name":"toFixedDecimalLossy","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"zero","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]}],"devdoc":{"kind":"dev","methods":{"abs(bytes32)":{"params":{"a":"The float to get the absolute value of."},"returns":{"_0":"The absolute value of the float."}},"add(bytes32,bytes32)":{"params":{"a":"The first float to add.","b":"The second float to add."},"returns":{"_0":"The sum of the two floats."}},"ceil(bytes32)":{"params":{"a":"The float to get the ceiling of."},"returns":{"_0":"The ceiled float."}},"div(bytes32,bytes32)":{"params":{"a":"The dividend (numerator).","b":"The divisor (denominator)."},"returns":{"_0":"The quotient of the two floats."}},"e()":{"returns":{"_0":"The constant value of Euler's number as a Float."}},"eq(bytes32,bytes32)":{"params":{"a":"The first float to compare.","b":"The second float to compare."},"returns":{"_0":"True if the two floats are equal, false otherwise."}},"floor(bytes32)":{"params":{"a":"The float to get the floor of."},"returns":{"_0":"The floored float."}},"format(bytes32)":{"params":{"a":"The float to format."},"returns":{"_0":"The string representation of the float."}},"format(bytes32,bool)":{"params":{"a":"The float to format.","scientific":"Whether to format the float in scientific notation."},"returns":{"_0":"The string representation of the float."}},"format(bytes32,bytes32,bytes32)":{"params":{"a":"The float to format. The absolute value of `a` is used to determine if scientific notation is used, this allows negative numbers to be formatted consistently with their positive counterparts.","scientificMax":"The largest number that won't be formatted in scientific notation.","scientificMin":"The smallest number that won't be formatted in scientific notation."},"returns":{"_0":"The string representation of the float."}},"frac(bytes32)":{"params":{"a":"The float to get the fractional part of."},"returns":{"_0":"The fractional part of the float."}},"fromFixedDecimalLossless(uint256,uint8)":{"params":{"decimals":"The number of decimals in the fixed point representation. e.g. If 1e18 represents 1 this would be 18 decimals.","value":"The fixed point decimal value to convert."},"returns":{"_0":"float The Float struct containing the signed coefficient and exponent."}},"fromFixedDecimalLossy(uint256,uint8)":{"params":{"decimals":"The number of decimals in the fixed point representation. e.g. If 1e18 represents 1 this would be 18 decimals.","value":"The fixed point decimal value to convert."},"returns":{"_0":"float The Float struct containing the signed coefficient and exponent.","_1":"lossless True if the conversion was lossless, false otherwise."}},"gt(bytes32,bytes32)":{"params":{"a":"The first float to compare.","b":"The second float to compare."},"returns":{"_0":"True if the first float is greater than the second, false otherwise."}},"gte(bytes32,bytes32)":{"params":{"a":"The first float to compare.","b":"The second float to compare."},"returns":{"_0":"True if the first float is greater than or equal to the second, false otherwise."}},"integer(bytes32)":{"params":{"a":"The float to get the integer part of."},"returns":{"_0":"The integer part of the float."}},"inv(bytes32)":{"params":{"a":"The float to invert."},"returns":{"_0":"The inverted float."}},"isZero(bytes32)":{"params":{"a":"The float to check."},"returns":{"_0":"True if the float is zero, false otherwise."}},"log10(bytes32)":{"params":{"a":"The float to take the logarithm of."},"returns":{"_0":"The logarithm of the float."}},"lt(bytes32,bytes32)":{"params":{"a":"The first float to compare.","b":"The second float to compare."},"returns":{"_0":"True if the first float is less than the second, false otherwise."}},"lte(bytes32,bytes32)":{"params":{"a":"The first float to compare.","b":"The second float to compare."},"returns":{"_0":"True if the first float is less than or equal to the second, false otherwise."}},"max(bytes32,bytes32)":{"params":{"a":"The first float to compare.","b":"The second float to compare."},"returns":{"_0":"The larger of the two floats."}},"maxNegativeValue()":{"returns":{"_0":"The maximum negative value of a Float."}},"maxPositiveValue()":{"returns":{"_0":"The maximum positive value of a Float."}},"min(bytes32,bytes32)":{"params":{"a":"The first float to compare.","b":"The second float to compare."},"returns":{"_0":"The smaller of the two floats."}},"minNegativeValue()":{"returns":{"_0":"The minimum negative value of a Float."}},"minPositiveValue()":{"returns":{"_0":"The minimum positive value of a Float."}},"minus(bytes32)":{"params":{"a":"The float to negate."},"returns":{"_0":"The negated float."}},"mul(bytes32,bytes32)":{"params":{"a":"The first float to multiply.","b":"The second float to multiply."},"returns":{"_0":"The product of the two floats."}},"parse(string)":{"params":{"str":"The string to parse."},"returns":{"_0":"errorSelector The selector of the error if parsing failed. `0` if parsing succeeded.","_1":"parsed The parsed float. Caller MUST check `errorSelector` to determine if parsing succeeded."}},"pow(bytes32,bytes32)":{"params":{"a":"The base float.","b":"The exponent float."},"returns":{"_0":"The result of raising the base float to the power of the exponent"}},"pow10(bytes32)":{"params":{"a":"The exponent to raise 10 to."},"returns":{"_0":"The result of 10^a."}},"sqrt(bytes32)":{"params":{"a":"The float to take the square root of."},"returns":{"_0":"The square root of the float."}},"sub(bytes32,bytes32)":{"params":{"a":"The float to subtract from.","b":"The float to subtract."},"returns":{"_0":"The difference of the two floats."}},"toFixedDecimalLossless(bytes32,uint8)":{"params":{"decimals":"The number of decimals in the fixed point representation. e.g. If 1e18 represents 1 this would be 18 decimals.","float":"The Float struct to convert."},"returns":{"_0":"The fixed point decimal value as a uint256."}},"toFixedDecimalLossy(bytes32,uint8)":{"params":{"decimals":"The number of decimals in the fixed point representation. e.g. If 1e18 represents 1 this would be 18 decimals.","float":"The Float struct to convert."},"returns":{"_0":"value The fixed point decimal value as a uint256.","_1":"lossless True if the conversion was lossless, false otherwise."}},"zero()":{"returns":{"_0":"The zero value of a Float in its maximized representation."}}},"version":1},"userdoc":{"kind":"user","methods":{"FORMAT_DEFAULT_SCIENTIFIC_MAX()":{"notice":"The default maximum value for scientific formatting. 1e9"},"FORMAT_DEFAULT_SCIENTIFIC_MIN()":{"notice":"The default minimum value for scientific formatting. 1e-4"},"abs(bytes32)":{"notice":"Exposes `LibDecimalFloat.abs` for offchain use."},"add(bytes32,bytes32)":{"notice":"Exposes `LibDecimalFloat.add` for offchain use."},"ceil(bytes32)":{"notice":"Exposes `LibDecimalFloat.ceil` for offchain use."},"div(bytes32,bytes32)":{"notice":"Exposes `LibDecimalFloat.div` for offchain use."},"e()":{"notice":"Exposes `LibDecimalFloat.FLOAT_E` for offchain use."},"eq(bytes32,bytes32)":{"notice":"Exposes `LibDecimalFloat.eq` for offchain use."},"floor(bytes32)":{"notice":"Exposes `LibDecimalFloat.floor` for offchain use."},"format(bytes32)":{"notice":"Exposes `format(Float, Float, Float)` for offchain use. Provides default scientific formatting."},"format(bytes32,bool)":{"notice":"Exposes `LibFormatDecimalFloat.toDecimalString` for offchain use. provides raw bool interface for custom scientific formatting."},"format(bytes32,bytes32,bytes32)":{"notice":"Exposes `LibFormatDecimalFloat.toDecimalString` for offchain use."},"frac(bytes32)":{"notice":"Exposes `LibDecimalFloat.frac` for offchain use."},"fromFixedDecimalLossless(uint256,uint8)":{"notice":"Exposes `LibDecimalFloat.fromFixedDecimalLosslessPacked` for offchain use."},"fromFixedDecimalLossy(uint256,uint8)":{"notice":"Exposes `LibDecimalFloat.fromFixedDecimalLossyPacked` for offchain use."},"gt(bytes32,bytes32)":{"notice":"Exposes `LibDecimalFloat.gt` for offchain use."},"gte(bytes32,bytes32)":{"notice":"Exposes `LibDecimalFloat.gte` for offchain use."},"integer(bytes32)":{"notice":"Exposes `LibDecimalFloat.integer` for offchain use."},"inv(bytes32)":{"notice":"Exposes `LibDecimalFloat.inv` for offchain use."},"isZero(bytes32)":{"notice":"Exposes `LibDecimalFloat.isZero` for offchain use."},"log10(bytes32)":{"notice":"Exposes `LibDecimalFloat.log10` for offchain use."},"lt(bytes32,bytes32)":{"notice":"Exposes `LibDecimalFloat.lt` for offchain use."},"lte(bytes32,bytes32)":{"notice":"Exposes `LibDecimalFloat.lte` for offchain use."},"max(bytes32,bytes32)":{"notice":"Exposes `LibDecimalFloat.max` for offchain use."},"maxNegativeValue()":{"notice":"Exposes `LibDecimalFloat.FLOAT_MAX_NEGATIVE_VALUE` for offchain use."},"maxPositiveValue()":{"notice":"Exposes `LibDecimalFloat.FLOAT_MAX_POSITIVE_VALUE` for offchain use."},"min(bytes32,bytes32)":{"notice":"Exposes `LibDecimalFloat.min` for offchain use."},"minNegativeValue()":{"notice":"Exposes `LibDecimalFloat.FLOAT_MIN_NEGATIVE_VALUE` for offchain use."},"minPositiveValue()":{"notice":"Exposes `LibDecimalFloat.FLOAT_MIN_POSITIVE_VALUE` for offchain use."},"minus(bytes32)":{"notice":"Exposes `LibDecimalFloat.minus` for offchain use."},"mul(bytes32,bytes32)":{"notice":"Exposes `LibDecimalFloat.mul` for offchain use."},"parse(string)":{"notice":"Exposes `LibParseDecimalFloat.parseDecimalFloat` for offchain use."},"pow(bytes32,bytes32)":{"notice":"Exposes `LibDecimalFloat.pow` for offchain use."},"pow10(bytes32)":{"notice":"Exposes `LibDecimalFloat.pow10` for offchain use."},"sqrt(bytes32)":{"notice":"Exposes `LibDecimalFloat.sqrt` for offchain use."},"sub(bytes32,bytes32)":{"notice":"Exposes `LibDecimalFloat.sub` for offchain use."},"toFixedDecimalLossless(bytes32,uint8)":{"notice":"Exposes `LibDecimalFloat.toFixedDecimalLossless` for offchain use."},"toFixedDecimalLossy(bytes32,uint8)":{"notice":"Exposes `LibDecimalFloat.toFixedDecimalLossy` for offchain use."},"zero()":{"notice":"Exposes `LibDecimalFloat.FLOAT_ZERO` for offchain use."}},"version":1}},"settings":{"remappings":["@openzeppelin-contracts-5.6.1/=dependencies/@openzeppelin-contracts-5.6.1/","forge-std-1.16.1/=dependencies/forge-std-1.16.1/","mut/=dependencies/rain-string-0.2.0/src/lib/mut/","parse/=dependencies/rain-string-0.2.0/src/lib/parse/","rain-datacontract-0.1.0/=dependencies/rain-datacontract-0.1.0/","rain-deploy-0.1.2/=dependencies/rain-deploy-0.1.2/","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/"],"optimizer":{"enabled":true,"runs":1000000},"metadata":{"bytecodeHash":"none","appendCBOR":false},"compilationTarget":{"src/concrete/DecimalFloat.sol":"DecimalFloat"},"evmVersion":"cancun","libraries":{}},"sources":{"dependencies/@openzeppelin-contracts-5.6.1/utils/Bytes.sol":{"keccak256":"0xf80e4b96b6849936ea0fabd76cf81b13d7276295fddb1e1c07afb3ddf650b0ac","urls":["bzz-raw://6430007255ac11c6e9c4331a418f3af52ff66fbbae959f645301d025b20aeb08","dweb:/ipfs/QmQE5fjmBBRw9ndnzJuC2uskYss1gbaR7JdazoCf1FGoBj"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.6.1/utils/Panic.sol":{"keccak256":"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a","urls":["bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a","dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.6.1/utils/Strings.sol":{"keccak256":"0x1fdc2de9585ab0f1c417f02a873a2b6343cd64bb7ffec6b00ffa11a4a158d9e8","urls":["bzz-raw://1ab223a3d969c6cd7610049431dd42740960c477e45878f5d8b54411f7a32bdc","dweb:/ipfs/QmWumhjvhpKcwx3vDPQninsNVTc3BGvqaihkQakFkQYpaS"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.6.1/utils/math/Math.sol":{"keccak256":"0x59973a93b1f983f94e10529f46ca46544a9fec2b5f56fb1390bbe9e0dc79f857","urls":["bzz-raw://c55ef8f0b9719790c2ae6f81d80a59ffb89f2f0abe6bc065585bd79edce058c5","dweb:/ipfs/QmNNmCbX9NjPXKqHJN8R1WC2rNeZSQrPZLd6FF6AKLyH5Y"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.6.1/utils/math/SafeCast.sol":{"keccak256":"0xc8cae21c9ae4a46e5162ff9bf5b351d6fa6a6eba72d515f3bc1bdfeda7fdf083","urls":["bzz-raw://ce830ebcf28e31643caba318996db3763c36d52cd0f23798ba83c135355d45e9","dweb:/ipfs/QmdGPcvptHN7UBCbUYBbRX3hiRVRFLRwno8b4uga6uFNif"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.6.1/utils/math/SignedMath.sol":{"keccak256":"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3","urls":["bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03","dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ"],"license":"MIT"},"dependencies/rain-string-0.2.0/src/error/ErrParse.sol":{"keccak256":"0x7a69236ad67e39c20f6ade7973ec551c9a5bb5db4671c8afa95b80f35a996497","urls":["bzz-raw://4731c6ea05b4e820814380dbbd6dac14f5778a1e9194b8992148cf97a99ffbb2","dweb:/ipfs/QmUMnKNt2zQ42fjS4fpLqodXytiffVFzaKupAm8rNsrYVo"],"license":"LicenseRef-DCL-1.0"},"dependencies/rain-string-0.2.0/src/lib/parse/LibParseCMask.sol":{"keccak256":"0x91e798a6f71aafbd4743720eaa38a7f16f74c6c0ab2992e7e4982979e9df539a","urls":["bzz-raw://4782e62e0e5a5fbc7d6c757dcc90347d7ad064f25372a6c471ffa968e12b91d7","dweb:/ipfs/QmPohMsVTjm19gxYwxgAsTKJQRjkK2J1Pyah63nCtYBBnt"],"license":"LicenseRef-DCL-1.0"},"dependencies/rain-string-0.2.0/src/lib/parse/LibParseChar.sol":{"keccak256":"0x66c401d784e9461f709116441de3707685e08438cd83553db28fe8caf0e97238","urls":["bzz-raw://e6027d0f9d558953686f6eb78ca0b2f2e7d9d38e0be6d1435ffaaa4b90919593","dweb:/ipfs/QmQXDMTzmJrst2a4kHkcfjSsEdnPc4ikQs7VfGbCfe9QCc"],"license":"LicenseRef-DCL-1.0"},"dependencies/rain-string-0.2.0/src/lib/parse/LibParseDecimal.sol":{"keccak256":"0x72ccc4d7e0a1245897511e1efc15ddc80d423a8eb956249be7940a8e8f4e99fe","urls":["bzz-raw://3ca57acd6a7cbe16f2c03aa5a6e81ec7af1ad44078924358578560a32aead7c0","dweb:/ipfs/QmNukyUMS4JrzNHAYcpLbtYsD5CwYPEjfAaADv6qMZmqs6"],"license":"LicenseRef-DCL-1.0"},"src/concrete/DecimalFloat.sol":{"keccak256":"0x6326a6b5ffef0708b84712c0b891dfc7f2d88c38191628da1f40933951f2683b","urls":["bzz-raw://ad99eda6cc266d5d160439700d3c89a487e8e31d51538f2ad83435a1aac9f3ae","dweb:/ipfs/QmarsuZkgqG7jT9mYBh1VKNvjD5ZsVtJJTiRGbfMQAY669"],"license":"LicenseRef-DCL-1.0"},"src/error/ErrDecimalFloat.sol":{"keccak256":"0x53825ff4d1af4981100de46bd7536c611625fe7930b5c21921838cfed3a92243","urls":["bzz-raw://961197f4c7b6d560f71f67892bfd5b64300be0f0fdb20162058938567653643e","dweb:/ipfs/QmTJzmA5CEkmYrXJ2MHnfQ3wGm1Qj6xE1vNaqAqgUpEnvA"],"license":"LicenseRef-DCL-1.0"},"src/error/ErrFormat.sol":{"keccak256":"0xc760cb6018291753e7408d55d12d5e66c116f9750dc241bbc201f3b46ae33aa7","urls":["bzz-raw://cbc81bb7c26c8503926b579f978902bcc3227839bee04bd3500cc924d142d28e","dweb:/ipfs/QmXqMuqBCpckD1EnsBjweyLdRZxpvC2xSP9FWBZFh2vztR"],"license":"LicenseRef-DCL-1.0"},"src/error/ErrParse.sol":{"keccak256":"0x7fc9fe7421d78306d252d2853fd1be943d9cbd12ff7a9c8c3f286a8164bfe357","urls":["bzz-raw://7b4c434d01b53788968d185683d9633afa26d95396b1e91337a53ccaab0d44ab","dweb:/ipfs/QmQHmVjR37wwrCskiQviwkg7WkeBpr9uPddjuDxqzANXeV"],"license":"LicenseRef-DCL-1.0"},"src/generated/LogTables.pointers.sol":{"keccak256":"0x2325d92e3e248350a79f163fcb8738056ae4240b6a77f759ff5fcbf7b381f5ae","urls":["bzz-raw://9a52674114518573de7d184094b266bc2b5208953086f8ec35a494f048deefbb","dweb:/ipfs/QmTjuj1R9k4pFMBVpX6RcWG87Rdh9pRTZVHYo93SzBfmsH"],"license":"LicenseRef-DCL-1.0"},"src/lib/LibDecimalFloat.sol":{"keccak256":"0x59d2dad4b7e861ed835a79c61ae42b4b0d628f9c578f3bb3ecd7796ed530f196","urls":["bzz-raw://e565148a37f06299de3b6bcb3385ea0336f65c6c02c9ebfbc6f227f4e56d1c03","dweb:/ipfs/Qma6UNZifZc8zsf7J6B87CdCXhiCR6Zisyg9czsfaji6yY"],"license":"LicenseRef-DCL-1.0"},"src/lib/deploy/LibDecimalFloatDeploy.sol":{"keccak256":"0x79f59754c234e55420359efaa9af6ec851fadf8dfaecda6860c1ef99abcf1e64","urls":["bzz-raw://8303dde773c7c613981011fe9ee5d976338b3dab9c66cd67516a82b094596343","dweb:/ipfs/QmQnkeaReEwkKcFMvegAuuBoF2WyirRQmQG9CjKfdhQKnZ"],"license":"LicenseRef-DCL-1.0"},"src/lib/format/LibFormatDecimalFloat.sol":{"keccak256":"0x5aac6382e7f7040e68600333c1b00b0aedb3edb6bced84b63783f6d88fe0b4f0","urls":["bzz-raw://e96d30e34e1fa2cc4eb574ded30c0f6f93929dcc19cb571f555ca8c5ac32eaa7","dweb:/ipfs/QmRRtk84AqEdQrRXfeTzVUAbAktJTZ92iTLqjocQV4PDx7"],"license":"LicenseRef-DCL-1.0"},"src/lib/implementation/LibDecimalFloatImplementation.sol":{"keccak256":"0x47d0eeb542875548689465407162a19e4a21fb4591af5bb48d5758c0d1b93634","urls":["bzz-raw://631efb796ff17f277804f8a32df7d28630c2ae5300e7d74c37aa8ed1f86b5092","dweb:/ipfs/QmSfmMGQyxKYxu8UrWDEtuCggQ9HtFJy5cbMsYLPZbcTZ7"],"license":"LicenseRef-DCL-1.0"},"src/lib/parse/LibParseDecimalFloat.sol":{"keccak256":"0x703d2d37d8a14639a3eb2dcd61601b36552027e16b4e8414befe51f2d0b9ed38","urls":["bzz-raw://53fa45503e115a322a701a1289c5b5fcbe68090c83e0635af77d275d123f09f0","dweb:/ipfs/QmTBtz8uPLYXrTue9SmHBVdgjpFJYUU41Z48PAgu1nXafn"],"license":"LicenseRef-DCL-1.0"},"src/lib/table/LibLogTable.sol":{"keccak256":"0xccd2dea54cfb708c01e7e8e88c089742bbab18f5783be4632311fb4923d44c88","urls":["bzz-raw://f45fb78c16b5d66d56ba0e78acdb0ca5d315eb05efa2cd7a81e191aabe7aec52","dweb:/ipfs/QmQJ3TFFxTMu4HZ4qnjgmdmSNhGZLQRdCnSqAipEF1up1f"],"license":"LicenseRef-DCL-1.0"}},"version":1},"id":37} \ No newline at end of file +{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"FORMAT_DEFAULT_SCIENTIFIC_MAX","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"view"},{"type":"function","name":"FORMAT_DEFAULT_SCIENTIFIC_MIN","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"view"},{"type":"function","name":"abs","inputs":[{"name":"a","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"add","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"b","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"ceil","inputs":[{"name":"a","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"div","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"b","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"e","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"eq","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"b","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"floor","inputs":[{"name":"a","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"format","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"scientific","type":"bool","internalType":"bool"}],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"format","inputs":[{"name":"a","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"format","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"scientificMin","type":"bytes32","internalType":"Float"},{"name":"scientificMax","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"frac","inputs":[{"name":"a","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"fromFixedDecimalLossless","inputs":[{"name":"value","type":"uint256","internalType":"uint256"},{"name":"decimals","type":"uint8","internalType":"uint8"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"fromFixedDecimalLossy","inputs":[{"name":"value","type":"uint256","internalType":"uint256"},{"name":"decimals","type":"uint8","internalType":"uint8"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"},{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"gt","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"b","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"gte","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"b","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"integer","inputs":[{"name":"a","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"inv","inputs":[{"name":"a","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"isZero","inputs":[{"name":"a","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"log10","inputs":[{"name":"a","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"view"},{"type":"function","name":"lt","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"b","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"lte","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"b","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"max","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"b","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"maxNegativeValue","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"maxPositiveValue","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"min","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"b","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"minNegativeValue","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"minPositiveValue","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"minus","inputs":[{"name":"a","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"mul","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"b","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"parse","inputs":[{"name":"str","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"},{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"pow","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"b","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"view"},{"type":"function","name":"pow10","inputs":[{"name":"a","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"view"},{"type":"function","name":"sqrt","inputs":[{"name":"a","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"view"},{"type":"function","name":"sub","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"b","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"toFixedDecimalLossless","inputs":[{"name":"float","type":"bytes32","internalType":"Float"},{"name":"decimals","type":"uint8","internalType":"uint8"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"toFixedDecimalLossy","inputs":[{"name":"float","type":"bytes32","internalType":"Float"},{"name":"decimals","type":"uint8","internalType":"uint8"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"zero","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"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":"Log10Negative","inputs":[{"name":"signedCoefficient","type":"int256","internalType":"int256"},{"name":"exponent","type":"int256","internalType":"int256"}]},{"type":"error","name":"Log10Zero","inputs":[]},{"type":"error","name":"LogTablesNotDeployed","inputs":[{"name":"tablesAddress","type":"address","internalType":"address"},{"name":"expectedCodehash","type":"bytes32","internalType":"bytes32"},{"name":"actualCodehash","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"LossyConversionFromFloat","inputs":[{"name":"signedCoefficient","type":"int256","internalType":"int256"},{"name":"exponent","type":"int256","internalType":"int256"}]},{"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":"MulDivOverflow","inputs":[{"name":"x","type":"uint256","internalType":"uint256"},{"name":"y","type":"uint256","internalType":"uint256"},{"name":"denominator","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"NegativeFixedDecimalConversion","inputs":[{"name":"signedCoefficient","type":"int256","internalType":"int256"},{"name":"exponent","type":"int256","internalType":"int256"}]},{"type":"error","name":"PowNegativeBase","inputs":[{"name":"signedCoefficient","type":"int256","internalType":"int256"},{"name":"exponent","type":"int256","internalType":"int256"}]},{"type":"error","name":"ScientificMinNotLessThanMax","inputs":[{"name":"scientificMin","type":"bytes32","internalType":"Float"},{"name":"scientificMax","type":"bytes32","internalType":"Float"}]},{"type":"error","name":"UnformatableExponent","inputs":[{"name":"exponent","type":"int256","internalType":"int256"}]},{"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":"ZeroNegativePower","inputs":[{"name":"b","type":"bytes32","internalType":"Float"}]},{"type":"error","name":"ZeroStringStartPointer","inputs":[]}],"bytecode":{"object":"0x6080604052348015600e575f80fd5b5060156019565b60b8565b73c51a14251b0dcf0ae24a96b7153991378938f5f53f7f2573004ac3a9ee7fc8d73654d76386f1b6b99e34cdf86a689c4691e47143420f811460b557604051630912d0ff60e31b815273c51a14251b0dcf0ae24a96b7153991378938f5f560048201527f2573004ac3a9ee7fc8d73654d76386f1b6b99e34cdf86a689c4691e47143420f60248201526044810182905260640160405180910390fd5b50565b614bb7806100c55f395ff3fe608060405234801561000f575f80fd5b506004361061029d575f3560e01c806381f7e2f511610171578063cde72ef3116100d2578063dd64691711610088578063e5526ecd1161006e578063e5526ecd1461062e578063e75f991f14610641578063ffae15ba14610654575f80fd5b8063dd64691714610608578063e0db58881461061b575f80fd5b8063d1de592a116100b8578063d1de592a146105bb578063d35273a7146105ce578063d3d6ffa8146105f5575f80fd5b8063cde72ef314610582578063d102b4d3146105a8575f80fd5b8063a19684b711610127578063bc1b392d1161010d578063bc1b392d1461050b578063bc62d8d814610511578063cb09682b1461055c575f80fd5b8063a19684b7146104d2578063a90d041a146104f8575f80fd5b806396ce1ec71161015757806396ce1ec7146104885780639b4afd991461049b578063a100a3d9146104bf575f80fd5b806381f7e2f5146104625780638dc2980714610475575f80fd5b80633447c0301161021b5780635ca0e7a4116101d1578063719cd99d116101b7578063719cd99d1461042957806373bfb2831461043c57806381a822721461044f575f80fd5b80635ca0e7a4146103f0578063602c35fc14610403575f80fd5b80633b3bd868116102015780633b3bd868146103b757806341aa0080146103ca5780635b23771d146103dd575f80fd5b80633447c03014610374578063371493ce14610397575f80fd5b80631ee62f111161027057806328fa1f011161025657806328fa1f011461033b5780633004fa411461034e5780633029740014610361575f80fd5b80631ee62f11146103155780632538835014610328575f80fd5b806304327dc5146102a1578063078b665b146102c75780630b6429bc146102da578063146e82ad14610302575b5f80fd5b6102b46102af36600461452f565b61067a565b6040519081526020015b60405180910390f35b6102b46102d5366004614546565b61068a565b6102ed6102e8366004614576565b61069c565b604080519283529015156020830152016102be565b6102b461031036600461452f565b6106b4565b6102b461032336600461452f565b6106d3565b6102b461033636600461452f565b6106f2565b6102b461034936600461452f565b610711565b6102b461035c366004614546565b61071b565b6102b461036f366004614546565b61073b565b610387610382366004614546565b610746565b60405190151581526020016102be565b6103aa6103a53660046145a0565b610751565b6040516102be91906145d2565b6102b46103c5366004614576565b61075d565b6102b46103d8366004614546565b610768565b6102b46103eb366004614576565b610773565b6102b46103fe36600461452f565b61077e565b7f80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff6102b4565b6102b461043736600461452f565b610788565b61038761044a366004614546565b610792565b6102b461045d36600461452f565b61079d565b610387610470366004614546565b6107a7565b610387610483366004614546565b6107b2565b6102b4610496366004614546565b6107bd565b6102b47c090000000000000000000000000000000000000000000000000000000181565b6103aa6104cd36600461452f565b6107c8565b7f80000000000000000000000000000000000000000000000000000000000000016102b4565b6102b4610506366004614546565b610812565b5f6102b4565b61052461051f366004614652565b61081d565b604080517fffffffff0000000000000000000000000000000000000000000000000000000090931683526020830191909152016102be565b7f7fffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffff6102b4565b7f7fffffff800000000000000000000000000000000000000000000000000000006102b4565b6103876105b6366004614546565b610836565b6102b46105c9366004614546565b610841565b6102b47ffffffffc0000000000000000000000000000000000000000000000000000000181565b6102b461060336600461452f565b61084c565b61038761061636600461452f565b610856565b6102b461062936600461452f565b61087c565b6103aa61063c36600461471b565b610886565b6102ed61064f366004614576565b61090f565b7fffffffbe19cfc6ef4f44cf88f14500d013df534fcaad48fca1d5ca47bea26fcc6102b4565b5f6106848261091b565b92915050565b5f6106958383610967565b9392505050565b5f806106a88484610983565b915091505b9250929050565b5f6106848273c51a14251b0dcf0ae24a96b7153991378938f5f56109c4565b5f6106848273c51a14251b0dcf0ae24a96b7153991378938f5f56109f0565b5f6106848273c51a14251b0dcf0ae24a96b7153991378938f5f5610a3e565b5f61068482610a71565b5f610695838373c51a14251b0dcf0ae24a96b7153991378938f5f5610ab2565b5f6106958383610d0d565b5f6106958383610d70565b60606106958383610dbe565b5f6106958383610e51565b5f6106958383610e6c565b5f6106958383610eb1565b5f61068482610ee4565b5f61068482610fa6565b5f6106958383611052565b5f610684826110a2565b5f61069583836110e7565b5f6106958383611137565b5f6106958383611186565b6060610684827ffffffffc000000000000000000000000000000000000000000000000000000017c0900000000000000000000000000000000000000000000000000000001610886565b5f61069583836111cb565b5f805f8061082a856111d6565b90969095509350505050565b5f61069583836112c4565b5f6106958383611313565b5f61068482611358565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff821615610684565b5f6106848261138a565b606061089283836112c4565b6108d7576040517f3be5bf9400000000000000000000000000000000000000000000000000000000815260048101849052602481018390526044015b60405180910390fd5b5f6108e1856110a2565b9050610906856108f183876112c4565b8061090157506109018386611137565b610dbe565b95945050505050565b5f806106a884846113cb565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d61094d828261140b565b90925090505f61095d8383611459565b5095945050505050565b5f6109728383611137565b61097c5781610695565b5090919050565b5f807bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8416601b0b60e085901d6109b782828761155f565b9350935050509250929050565b5f610695837fffffffff0000000000000000000000000000000000000000000000000000000584610ab2565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d610a238483836116ae565b90925090505f610a338383611459565b509695505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d610a2384838361181f565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d82610aa48383611b54565b9150505f610a338284611459565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff848116601b0b9060e086901d908516610aef5750600191506106959050565b5f8213610b8857815f03610b4c57610b07855f6112c4565b15610b41576040517f8be82972000000000000000000000000000000000000000000000000000000008152600481018690526024016108ce565b505f91506106959050565b6040517fcceba0f100000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016108ce565b610b93856001610d70565b8015610ba45750610ba4865f611137565b15610bb3578592505050610695565b610bbd855f6112c4565b15610be657610bdd610bce8761091b565b610bd787611358565b86610ab2565b92505050610695565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8516601b0b60e086901d5f80610c198484611b54565b915091505f610c2983855f611bbc565b905060015f8080610c608f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b9160e09190911d90565b915091505b60018510610ca75784600116600103610c8a57610c8484848484611cd3565b90945092505b600185901c9450610c9d82828484611cd3565b9092509050610c65565b5f80610cb48f8e8e61181f565b91509150610cc482828a8d611cd3565b9092509050610cd48f83836116ae565b9092509050610ce582828888611cd3565b90925090505f610cf58383611459565b509e5050505050505050505050505050509392505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686611df2565b915091505f610d618383611459565b509a9950505050505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d610db384848484612416565b979650505050505050565b60607bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d5f829003610e2e576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525092505050610684565b8315610e4757610e3e828261242d565b92505050610684565b61090682826126fd565b5f805f610e5e8585612e64565b915091506109068282612ec6565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686612f20565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d610906828286612f4a565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828112610f1b57509192915050565b5f80610f278484611b54565b915091505f84128015610f3957508015155b15610f8f57610f8a82847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4612f20565b935091505b5f610f9a8385611459565b50979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828112610fdd57509192915050565b5f80610fe98484611b54565b91509150805f03610ffe575093949350505050565b5f811315610f8f57610f8a82847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4612fa6565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d611095848484846130d6565b1315979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828212156110dc5761094d82826131aa565b5f61095d8383611459565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d61112a848484846130d6565b1215979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d61117a848484846130d6565b12979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686611cd3565b5f61097283836112c4565b80515f908190602084810191850101828080806111f3868661324d565b929650909450925090507fffffffff0000000000000000000000000000000000000000000000000000000084165f036112b557848303611285575f806112398484611459565b915091508061127457507f32b8b8be000000000000000000000000000000000000000000000000000000009a5f9a5098505050505050505050565b505f9a909950975050505050505050565b507fad384e8700000000000000000000000000000000000000000000000000000000985f98509650505050505050565b5091975f975095505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d611307848484846130d6565b13979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686612fa6565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d61094d82826131aa565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d826113bd8383611b54565b5090505f610a338284611459565b5f805f805f6113da87876136ec565b9250925092505f806113ec8585611459565b91509150818380156113fb5750815b9650965050505050509250929050565b5f806106a87f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb48686611df2565b5f601b83900b83148383826114bd577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561149d57620186a0860595506005850194505b8586601b0b146114b857600a8605955084600101945061149d565b6114d3565b855f036114d357505f9250600191506106ad9050565b848560030b1461152f575f8512156114f357505f92508291506106ad9050565b6040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016108ce565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f8512156115a5576040517f4a7d166b00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016108ce565b845f036115b757505f905060016116a6565b8460ff8416850185811215611602576040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101889052602481018790526044016108ce565b5f805f83121561166c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb3831215611643575f8095509550505050506116a6565b825f03600a0a915081848161165a5761165a614744565b04955050840290911491506116a69050565b5f83131561169b5761167f83600a6148bc565b915061168b82856148c7565b9550600194506116a69350505050565b509193506001925050505b935093915050565b5f805f8412156116ea576116c284846131aa565b90945092506116d28585856116ae565b90945092506116e1848461140b565b915091506116a6565b5f806116f68686611b54565b9092509050845f80806117098585613748565b9194509250905061270d6127106117216001826148de565b8514611738576117328d8686613837565b90925090505b83156117c3575f61174a866001614904565b90505b80848583028161175f5761175f614744565b051461177657600a84059350600a8805975061174d565b6117b7611783858861492b565b8961178e878561492b565b8f87877ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6138f0565b909d509b506117ea9050565b819b507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc9a505b5050505050866117fb84835f611bbc565b611806886001614904565b6118109190614904565b94509450505050935093915050565b5f80838361182d828261398d565b90965094505f86136118ae57855f03611872576040517f561fc7b500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5d3fd4db00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016108ce565b5050837f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000036118ec576118e283604c614904565b5f915091506116a6565b7f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000008412158061193b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb561195d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb45b5f0b8412611b18575f805f805f8561197657604b611979565b604c5b611983908a614904565b90505f80876119b0577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000006119d1565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca0000000000000000005b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff169050808c81611a0357611a03614744565b05818102955090850193507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18019050611a3c8c826139e3565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000000295508594508a8414611ac8576123278114611aa357611a7e8c826001016139e3565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000002611ac5565b7f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000005b94505b50611af8838b848c89897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb46138f0565b909a509850611b098a8a835f612fa6565b975097505050505050506116a6565b611b22858561140b565b9095509350611b3286868661181f565b9095509350611b4185856131aa565b92509250506116a6565b50935093915050565b5f805f8312611b6757508290505f6106ad565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4831215611b9957505f9050826106ad565b5f839003600a0a808581611baf57611baf614744565b0794859003959350505050565b5f818303611bcb575082610695565b82821315611c0e57828203604c811380611be557505f8113155b15611bf3575f915050610695565b80600a0a8581611c0557611c05614744565b05915050610695565b818303604c811380611c2057505f8113155b15611c68576040517f1d5d6d100000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490526064016108ce565b600a81900a85810286828281611c8057611c80614744565b0514611cc9576040517f1d5d6d100000000000000000000000000000000000000000000000000000000081526004810188905260248101879052604481018690526064016108ce565b9250610695915050565b5f8085158415178015611ceb575f92505f9150611de8565b611cf58487614904565b91505f611d0188613a6a565b90505f611d0d87613a6a565b90505f611d1a8383613ad0565b5090505f6f0785ee10d5da46d900f436a000000000821115611d4f576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a7640000821115611d7057670de0b6b3a7640000820491506012015b633b9aca00821115611d8957633b9aca00820491506009015b612710821115611d9e57612710820491506004015b8115611db257600a82049150600101611d9e565b611dbc8187614904565b9550611dde8b8a611dd88787611dd387600a6148bc565b613b0b565b89613bf0565b9097509550505050505b5094509492505050565b5f80835f03611e37576040517f7a97930f00000000000000000000000000000000000000000000000000000000815260048101879052602481018690526044016108ce565b855f03611e4857505f90508061240d565b5f805f80611e568a8a613cf7565b919b5099509150611e678888613cf7565b919950975090505f611e788b613a6a565b90505f611e848a613a6a565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c818310156122a1578415611ee257507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000009050604b612260565b6f4b3b4ca85a86c47a098a22400000000083101561200e57678ac7230489e80000831015611f72576402540be400831015611f4057620186a0831015611f305750620186a0905060056121e9565b506402540be4009050600a6121e9565b655af3107a4000831015611f5f5750655af3107a40009050600e6121e9565b50678ac7230489e80000905060136121e9565b6b204fce5e3e25026110000000831015611fc45769152d02c7e14af6800000831015611fad575069152d02c7e14af6800000905060176121e9565b506b204fce5e3e250261100000009050601c6121e9565b6d314dc6448d9338c15b0a00000000831015611ff357506d314dc6448d9338c15b0a00000000905060216121e9565b506f4b3b4ca85a86c47a098a224000000000905060266121e9565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156121065773af298d050e4395d69670b12b7f410000000000008310156120a1577172cb5bd86321e38cb6ce6682e8000000000083101561208257507172cb5bd86321e38cb6ce6682e800000000009050602b6121e9565b5073af298d050e4395d69670b12b7f41000000000000905060306121e9565b76010b46c6cdd6e3e0828f4db456ff0c8ea00000000000008310156120e2575076010b46c6cdd6e3e0828f4db456ff0c8ea0000000000000905060356121e9565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a6121e9565b7c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000083101561219c577a026e4d30eccc3215dd8f3157d27e23acbdcfe6800000000000000083101561217457507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f6121e9565b507c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000905060446121e9565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca0000000000000000008310156121e957507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b81831161221d57600a820491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016121e9565b815f03612260576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018d9052602481018c90526044016108ce565b856122a1576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018f9052602481018e90526044016108ce565b807f8000000000000000000000000000000000000000000000000000000000000000018d126122d457808d039c50612347565b7f80000000000000000000000000000000000000000000000000000000000000009c90038c015f81131561234757807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038b1361233457998a0199612347565b5f8099509950505050505050505061240d565b5f808e12801561235657505f8c135b15612393577f80000000000000000000000000000000000000000000000000000000000000008e01808d1361238b575f61238f565b808d035b9150505b8b818f010397506123b08f8e6123aa888789613b0b565b8b613bf0565b90995097505f8113156123fa57604c8113156123da575f809a509a5050505050505050505061240d565b80600a0a89816123ec576123ec614744565b059850885f036123fa575f97505b5096985094965061240d95505050505050565b94509492505050565b5f612423858585856130d6565b1495945050505050565b6060612439838361398d565b90935091505f8061246a7f161bcca7119915b50764b4abe86529797775a5f171951000000000000000000086614976565b1561249a57507f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000009050604c6124c1565b507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000009050604b5b5f6124cc8387614976565b90505f6124d984886149dd565b90505f808312156124f3575060016124f0836149f0565b92505b5f82121561250a57506001612507826149f0565b91505b60408051602081019091525f81528215612613575f8061252b600a89614a20565b90505b6125388186614976565b5f0361255d57612549600a82614a20565b90508161255581614a33565b92505061252e565b60408051602081019091525f8082525b838110156125be57816040516020016125869190614a81565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052915060010161256d565b505b6125cb600a876149dd565b5f036125e3576125dc600a87614976565b95506125c0565b806125ed87613f98565b6040516020016125fe929190614ab9565b60405160208183030381529060405293505050505b5f61261d85613f98565b90505f61262a878b614904565b90505f81156126605761263c82613f98565b60405160200161264c9190614afb565b604051602081830303815290604052612670565b60405180602001604052805f8152505b90505f8561268c5760405180602001604052805f8152506126c3565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b9050808486846040516020016126dc9493929190614b2c565b6040516020818303038152906040529a505050505050505050505092915050565b60606103e882138061271857506127156103e86149f0565b82125b15612752576040517fe44c72b0000000000000000000000000000000000000000000000000000000008152600481018390526024016108ce565b5f80841290811561276d57612766856149f0565b9050612770565b50835b5f61277a82614024565b80519091505f5b81811080156127fd57508281612798600185614b56565b6127a29190614b56565b815181106127b2576127b2614b69565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f3000000000000000000000000000000000000000000000000000000000000000145b15612814578061280c81614a33565b915050612781565b5f61281f8284614b56565b90505f61282c838a614904565b90505f876128485760405180602001604052805f81525061287f565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b90505f82126129f957815f6128948286614b96565b67ffffffffffffffff8111156128ac576128ac614625565b6040519080825280601f01601f1916602001820160405280156128d6576020820181803683370190505b5090505f5b85811015612948578881815181106128f5576128f5614b69565b602001015160f81c60f81b82828151811061291257612912614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053506001016128db565b505f5b828110156129c5577f30000000000000000000000000000000000000000000000000000000000000008261297f8389614b96565b8151811061298f5761298f614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535060010161294b565b5082816040516020016129d9929190614ba9565b6040516020818303038152906040529a5050505050505050505050610684565b5f612a03836149f0565b905080841115612c1a575f612a188286614b56565b90505f612a26866001614b96565b67ffffffffffffffff811115612a3e57612a3e614625565b6040519080825280601f01601f191660200182016040528015612a68576020820181803683370190505b5090505f5b82811015612ada57898181518110612a8757612a87614b69565b602001015160f81c60f81b828281518110612aa457612aa4614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612a6d565b507f2e00000000000000000000000000000000000000000000000000000000000000818381518110612b0e57612b0e614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5b83811015612be55789612b518285614b96565b81518110612b6157612b61614b69565b01602001517fff00000000000000000000000000000000000000000000000000000000000000168282612b95866001614b96565b612b9f9190614b96565b81518110612baf57612baf614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612b3e565b508381604051602001612bf9929190614ba9565b6040516020818303038152906040529b505050505050505050505050610684565b5f612c258583614b56565b90505f85612c34836002614b96565b612c3e9190614b96565b67ffffffffffffffff811115612c5657612c56614625565b6040519080825280601f01601f191660200182016040528015612c80576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f81518110612cb657612cb6614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f2e0000000000000000000000000000000000000000000000000000000000000081600181518110612d1857612d18614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5b82811015612dc3577f300000000000000000000000000000000000000000000000000000000000000082612d7d836002614b96565b81518110612d8d57612d8d614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612d48565b505f5b86811015612be557898181518110612de057612de0614b69565b01602001517fff00000000000000000000000000000000000000000000000000000000000000168282612e14866002614b96565b612e1e9190614b96565b81518110612e2e57612e2e614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612dc6565b5f805f805f612e7387876136ec565b92509250925080612eba576040517fc471796600000000000000000000000000000000000000000000000000000000815260048101849052602481018390526044016108ce565b50909590945092505050565b5f805f612ed38585611459565b9150915080612f18576040517f22c9f7bb00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016108ce565b509392505050565b5f80612f2c84846131aa565b9094509250612f3d86868686612fa6565b9150915094509492505050565b5f805f612f5886868661155f565b9150915080612f9d576040517f05e4767800000000000000000000000000000000000000000000000000000000815260048101879052602481018690526044016108ce565b50949350505050565b5f8085158415178015612fd257865f03612fc6578484925092505061240d565b8686925092505061240d565b612fdc878761398d565b9097509550612feb858561398d565b909550935085841315612fff579395929492935b838603604c81111561301857878793509350505061240d565b80600a0a868161302a5761302a614744565b0595505086850180881860ff90811c151589881890911c151680156130c557877f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff036130ac576040517fd556b111000000000000000000000000000000000000000000000000000000008152600481018a9052602481018990526044016108ce565b600a9687900596909805860197600197909701966130c9565b8198505b5096979596505050505050565b5f80851584151781871282861218178584141780156130fb578685925092505061240d565b505f8584131561310f575092949193919260015b8386035f8112604c8213178015613142578215613134575f899450945050505061240d565b885f9450945050505061240d565b600a82900a8981028a82828161315a5761315a614744565b0514613186578415613176575f8b96509650505050505061240d565b8a5f96509650505050505061240d565b841561319b57889650945061240d9350505050565b955087945061240d9350505050565b5f807f80000000000000000000000000000000000000000000000000000000000000008403613243577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8303613236576040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101859052602481018490526044016108ce565b600a840593508260010192505b50505f9190910391565b5f8281806132628386652000000000006140e0565b9250858314158361327c81886703ff0000000000006140e0565b94508085036132b657507f34bd20690000000000000000000000000000000000000000000000000000000094505f92508291506136e39050565b5f806132c28a88614109565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613300575095505f93508392506136e3915050565b86519095506540000000000060015f9290921a9190911b16151588871016915050801561358f57506001909301925f8461334381896703ff0000000000006140e0565b955080860361337e57507f7bfa48af0000000000000000000000000000000000000000000000000000000095505f93508392506136e3915050565b855b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018051908a1160015f9290921a9190911b6601000000000000161515166001036133ed577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613380565b818114613444575f806134008484614109565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613440575097505f95508594506136e39350505050565b9350505b5f83121561347f57507f7bfa48af0000000000000000000000000000000000000000000000000000000096505f94508493506136e392505050565b831561348b57825f0392505b80820394505f8513156134cb57507f013b2aaa0000000000000000000000000000000000000000000000000000000096505f94508493506136e392505050565b855f036134da5782955061358c565b5f859003604381111561351b57507f32b8b8be0000000000000000000000000000000000000000000000000000000097505f95508594506136e39350505050565b600a0a8681025f8883838161353257613532614744565b0514159050601b82900b82141581806135485750805b1561358457507f32b8b8be000000000000000000000000000000000000000000000000000000009a505f98508897506136e39650505050505050565b505084019650505b50505b84516c2000000020000000000000000060015f9290921a9190911b1615158786101680156136d457600190950194856135cf818a652000000000006140e0565b9650866135e5818b6703ff0000000000006140e0565b975080880361362257507f013b2aaa0000000000000000000000000000000000000000000000000000000097505f95508594506136e39350505050565b505f8061362f838a614109565b90925090507fffffffff0000000000000000000000000000000000000000000000000000000082161561366f575097505f95508594506136e39350505050565b9250508482015f8313801561368357508581125b8061369757505f8312801561369757508581135b156136d057507fd556b1110000000000000000000000000000000000000000000000000000000097505f95508594506136e39350505050565b9450505b845f036136df575f93505b5050505b92959194509250565b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86111561373757600a860460018201600a88065f1493509350935050613741565b8593509150600190505b9250925092565b5f805f837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0361378057508391505f90506001613741565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc84121561380e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb08412156137df57505f9150508215156001613741565b5f846004015f03600a0a90505f8187816137fb576137fb614744565b0594505080840286141592509050613741565b5f841261382357505f91508190506001613741565b50505060048101600a0a82025f6001613741565b5f80806064613849600a612328614a20565b613856600a612328614a20565b6138619060026148c7565b61386c906001614b96565b6138769190614b96565b6138809190614b96565b90506138c4565b5f8052600280600a8504028301601e833c5f80516107d0840193505f80526001600a8606600a6064880402018501601f853c5f5101949350505050565b6138cf858288613887565b92508315611b4b576138e5600186018288613887565b915050935093915050565b5f80888803613903575083905081613981565b5f805f806139138c8b8f8d612f20565b915091505f806139258a8a8d8c612f20565b9150915061393584848484611cd3565b8096508197505050505050505f8061394f8b8b8f8d612f20565b915091505f8061396186868686611df2565b915091505f8061397384848f8e612fa6565b909a50985050505050505050505b97509795505050505050565b5f805f805f61399c8787613cf7565b92509250925080612eba576040517f05e51ecb00000000000000000000000000000000000000000000000000000000815260048101889052602481018790526044016108ce565b5f806139f2600a612328614a20565b6139fd9060026148c7565b613a08906001614b96565b90505f613a18600a612328614a20565b90506002600a8504026001015f8052600281601e883c505f51617fff81169350618000811615613a4757918101915b505f80526001600a8506600a6064870402018301601f873c50505f510192915050565b5f80821215613ac7577f80000000000000000000000000000000000000000000000000000000000000008203613ac157507f8000000000000000000000000000000000000000000000000000000000000000919050565b505f0390565b5090565b919050565b5f807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83850993909202808410938190039390930393915050565b5f805f613b188686613ad0565b91509150815f03613b3c57838181613b3257613b32614744565b0492505050610695565b838210613b86576040517f6c59da120000000000000000000000000000000000000000000000000000000081526004810187905260248101869052604481018590526064016108ce565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f8587181215613cba577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115613ca757613c4f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001614b96565b8403613c7f57507f800000000000000000000000000000000000000000000000000000000000000090508161240d565b613c8a600a85614a20565b613c93906149f0565b613c9e846001614904565b9150915061240d565b613cb0846149f0565b839150915061240d565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115613ced57613c93600a85614a20565b508290508161240d565b5f805f845f03613d0f57505f91508190506001613741565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee800000000000000000085055f03613f23576f4b3b4ca85a86c47a098a2240000000008505158015613d7857507f80000000000000000000000000000000000000000000000000000000000000268412155b15613d99576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a000000000000008505158015613de157507f80000000000000000000000000000000000000000000000000000000000000138412155b15613dfa57678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c6400000000000000008505158015613e4657507f800000000000000000000000000000000000000000000000000000000000000a8412155b15613e5c576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e40000000000000000008505158015613eab57507f80000000000000000000000000000000000000000000000000000000000000028412155b15613ec157606485029450600284039350613e5c565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000008505158015613f1157507f80000000000000000000000000000000000000000000000000000000000000018412155b15613f2357600a850294506001840393505b600a80860290810586148015613f5957507f80000000000000000000000000000000000000000000000000000000000000018512155b15613f68578095506001850394505b50939492935050507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000008305151590565b60605f8212613fb55760405180602001604052805f815250613fec565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b613ffd60ff84901d80850118614024565b60405160200161400e929190614ba9565b6040516020818303038152906040529050919050565b60605f61403083614233565b60010190505f8167ffffffffffffffff81111561404f5761404f614625565b6040519080825280601f01601f191660200182016040528015614079576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461408357509392505050565b5f5b5f82600186515f1a1b16118385101615614101576001840193506140e2565b509192915050565b81515f90819065200000000000600191831a9190911b161515838510168085019082806141368488614314565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615614171575093505f92506106ad915050565b825f036141d4577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116141a5575f6141c7565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b955093506106ad92505050565b7f80000000000000000000000000000000000000000000000000000000000000008111614201575f614223565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95505f0393505050509250929050565b5f807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061427b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106142a7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106142c557662386f26fc10000830492506010015b6305f5e10083106142dd576305f5e100830492506008015b61271083106142f157612710830492506004015b60648310614303576064830492506002015b600a83106106845760010192915050565b5f8082841061434757507f34bd20690000000000000000000000000000000000000000000000000000000090505f6106ad565b835f03614380576040517fda6966d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60305f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501815b8782101580156143b85750604d83105b156143fb57815160018401937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90930192600a0a5f9190911a85900302016143a8565b8782106145215781515f1a849003600181111561444357507f0fdc26350000000000000000000000000000000000000000000000000000000095505f94506106ad9350505050565b600a84900a810282810183111561448657507f0fdc26350000000000000000000000000000000000000000000000000000000096505f95506106ad945050505050565b9190910190507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101905b8782106145215781515f1a603081146144f657507f0fdc26350000000000000000000000000000000000000000000000000000000095505f94506106ad9350505050565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101906144b2565b5f9890975095505050505050565b5f6020828403121561453f575f80fd5b5035919050565b5f8060408385031215614557575f80fd5b50508035926020909101359150565b803560ff81168114613acb575f80fd5b5f8060408385031215614587575f80fd5b8235915061459760208401614566565b90509250929050565b5f80604083850312156145b1575f80fd5b82359150602083013580151581146145c7575f80fd5b809150509250929050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60208284031215614662575f80fd5b813567ffffffffffffffff80821115614679575f80fd5b818401915084601f83011261468c575f80fd5b81358181111561469e5761469e614625565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156146e4576146e4614625565b816040528281528760208487010111156146fc575f80fd5b826020860160208301375f928101602001929092525095945050505050565b5f805f6060848603121561472d575f80fd5b505081359360208301359350604090920135919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b600181815b808511156147f757817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156147dd576147dd614771565b808516156147ea57918102915b93841c93908002906147a3565b509250929050565b5f8261480d57506001610684565b8161481957505f610684565b816001811461482f576002811461483957614855565b6001915050610684565b60ff84111561484a5761484a614771565b50506001821b610684565b5060208310610133831016604e8410600b8410161715614878575081810a610684565b614882838361479e565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156148b4576148b4614771565b029392505050565b5f61069583836147ff565b808202811582820484141761068457610684614771565b8181035f8312801583831316838312821617156148fd576148fd614771565b5092915050565b8082018281125f83128015821682158216171561492357614923614771565b505092915050565b8082025f82127f80000000000000000000000000000000000000000000000000000000000000008414161561496257614962614771565b818105831482151761068457610684614771565b5f8261498457614984614744565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f8000000000000000000000000000000000000000000000000000000000000000831416156149d8576149d8614771565b500590565b5f826149eb576149eb614744565b500790565b5f7f80000000000000000000000000000000000000000000000000000000000000008203613ac157613ac1614771565b5f82614a2e57614a2e614744565b500490565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a6357614a63614771565b5060010190565b5f81518060208401855e5f93019283525090919050565b5f614a8c8284614a6a565b7f300000000000000000000000000000000000000000000000000000000000000081526001019392505050565b7f2e0000000000000000000000000000000000000000000000000000000000000081525f614af3614aed6001840186614a6a565b84614a6a565b949350505050565b7f650000000000000000000000000000000000000000000000000000000000000081525f6106956001830184614a6a565b5f614b4c614aed614b46614b40858a614a6a565b88614a6a565b86614a6a565b9695505050505050565b8181038181111561068457610684614771565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b8082018082111561068457610684614771565b5f614af3614aed8386614a6a56","sourceMap":"525:13549:46:-:0;;;1114:77;;;;;;;;;-1:-1:-1;1138:46:46;:44;:46::i;:::-;525:13549;;2590:358:52;721:42;2673;934:66;2729:47;;2725:217;;2799:132;;-1:-1:-1;;;2799:132:52;;721:42;2799:132;;;216:51:145;934:66:52;283:18:145;;;276:34;326:18;;;319:34;;;189:18;;2799:132:52;;;;;;;2725:217;2638:310;2590:358::o;14:345:145:-;525:13549:46;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561000f575f80fd5b506004361061029d575f3560e01c806381f7e2f511610171578063cde72ef3116100d2578063dd64691711610088578063e5526ecd1161006e578063e5526ecd1461062e578063e75f991f14610641578063ffae15ba14610654575f80fd5b8063dd64691714610608578063e0db58881461061b575f80fd5b8063d1de592a116100b8578063d1de592a146105bb578063d35273a7146105ce578063d3d6ffa8146105f5575f80fd5b8063cde72ef314610582578063d102b4d3146105a8575f80fd5b8063a19684b711610127578063bc1b392d1161010d578063bc1b392d1461050b578063bc62d8d814610511578063cb09682b1461055c575f80fd5b8063a19684b7146104d2578063a90d041a146104f8575f80fd5b806396ce1ec71161015757806396ce1ec7146104885780639b4afd991461049b578063a100a3d9146104bf575f80fd5b806381f7e2f5146104625780638dc2980714610475575f80fd5b80633447c0301161021b5780635ca0e7a4116101d1578063719cd99d116101b7578063719cd99d1461042957806373bfb2831461043c57806381a822721461044f575f80fd5b80635ca0e7a4146103f0578063602c35fc14610403575f80fd5b80633b3bd868116102015780633b3bd868146103b757806341aa0080146103ca5780635b23771d146103dd575f80fd5b80633447c03014610374578063371493ce14610397575f80fd5b80631ee62f111161027057806328fa1f011161025657806328fa1f011461033b5780633004fa411461034e5780633029740014610361575f80fd5b80631ee62f11146103155780632538835014610328575f80fd5b806304327dc5146102a1578063078b665b146102c75780630b6429bc146102da578063146e82ad14610302575b5f80fd5b6102b46102af36600461452f565b61067a565b6040519081526020015b60405180910390f35b6102b46102d5366004614546565b61068a565b6102ed6102e8366004614576565b61069c565b604080519283529015156020830152016102be565b6102b461031036600461452f565b6106b4565b6102b461032336600461452f565b6106d3565b6102b461033636600461452f565b6106f2565b6102b461034936600461452f565b610711565b6102b461035c366004614546565b61071b565b6102b461036f366004614546565b61073b565b610387610382366004614546565b610746565b60405190151581526020016102be565b6103aa6103a53660046145a0565b610751565b6040516102be91906145d2565b6102b46103c5366004614576565b61075d565b6102b46103d8366004614546565b610768565b6102b46103eb366004614576565b610773565b6102b46103fe36600461452f565b61077e565b7f80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff6102b4565b6102b461043736600461452f565b610788565b61038761044a366004614546565b610792565b6102b461045d36600461452f565b61079d565b610387610470366004614546565b6107a7565b610387610483366004614546565b6107b2565b6102b4610496366004614546565b6107bd565b6102b47c090000000000000000000000000000000000000000000000000000000181565b6103aa6104cd36600461452f565b6107c8565b7f80000000000000000000000000000000000000000000000000000000000000016102b4565b6102b4610506366004614546565b610812565b5f6102b4565b61052461051f366004614652565b61081d565b604080517fffffffff0000000000000000000000000000000000000000000000000000000090931683526020830191909152016102be565b7f7fffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffff6102b4565b7f7fffffff800000000000000000000000000000000000000000000000000000006102b4565b6103876105b6366004614546565b610836565b6102b46105c9366004614546565b610841565b6102b47ffffffffc0000000000000000000000000000000000000000000000000000000181565b6102b461060336600461452f565b61084c565b61038761061636600461452f565b610856565b6102b461062936600461452f565b61087c565b6103aa61063c36600461471b565b610886565b6102ed61064f366004614576565b61090f565b7fffffffbe19cfc6ef4f44cf88f14500d013df534fcaad48fca1d5ca47bea26fcc6102b4565b5f6106848261091b565b92915050565b5f6106958383610967565b9392505050565b5f806106a88484610983565b915091505b9250929050565b5f6106848273c51a14251b0dcf0ae24a96b7153991378938f5f56109c4565b5f6106848273c51a14251b0dcf0ae24a96b7153991378938f5f56109f0565b5f6106848273c51a14251b0dcf0ae24a96b7153991378938f5f5610a3e565b5f61068482610a71565b5f610695838373c51a14251b0dcf0ae24a96b7153991378938f5f5610ab2565b5f6106958383610d0d565b5f6106958383610d70565b60606106958383610dbe565b5f6106958383610e51565b5f6106958383610e6c565b5f6106958383610eb1565b5f61068482610ee4565b5f61068482610fa6565b5f6106958383611052565b5f610684826110a2565b5f61069583836110e7565b5f6106958383611137565b5f6106958383611186565b6060610684827ffffffffc000000000000000000000000000000000000000000000000000000017c0900000000000000000000000000000000000000000000000000000001610886565b5f61069583836111cb565b5f805f8061082a856111d6565b90969095509350505050565b5f61069583836112c4565b5f6106958383611313565b5f61068482611358565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff821615610684565b5f6106848261138a565b606061089283836112c4565b6108d7576040517f3be5bf9400000000000000000000000000000000000000000000000000000000815260048101849052602481018390526044015b60405180910390fd5b5f6108e1856110a2565b9050610906856108f183876112c4565b8061090157506109018386611137565b610dbe565b95945050505050565b5f806106a884846113cb565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d61094d828261140b565b90925090505f61095d8383611459565b5095945050505050565b5f6109728383611137565b61097c5781610695565b5090919050565b5f807bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8416601b0b60e085901d6109b782828761155f565b9350935050509250929050565b5f610695837fffffffff0000000000000000000000000000000000000000000000000000000584610ab2565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d610a238483836116ae565b90925090505f610a338383611459565b509695505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d610a2384838361181f565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d82610aa48383611b54565b9150505f610a338284611459565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff848116601b0b9060e086901d908516610aef5750600191506106959050565b5f8213610b8857815f03610b4c57610b07855f6112c4565b15610b41576040517f8be82972000000000000000000000000000000000000000000000000000000008152600481018690526024016108ce565b505f91506106959050565b6040517fcceba0f100000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016108ce565b610b93856001610d70565b8015610ba45750610ba4865f611137565b15610bb3578592505050610695565b610bbd855f6112c4565b15610be657610bdd610bce8761091b565b610bd787611358565b86610ab2565b92505050610695565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8516601b0b60e086901d5f80610c198484611b54565b915091505f610c2983855f611bbc565b905060015f8080610c608f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b9160e09190911d90565b915091505b60018510610ca75784600116600103610c8a57610c8484848484611cd3565b90945092505b600185901c9450610c9d82828484611cd3565b9092509050610c65565b5f80610cb48f8e8e61181f565b91509150610cc482828a8d611cd3565b9092509050610cd48f83836116ae565b9092509050610ce582828888611cd3565b90925090505f610cf58383611459565b509e5050505050505050505050505050509392505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686611df2565b915091505f610d618383611459565b509a9950505050505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d610db384848484612416565b979650505050505050565b60607bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d5f829003610e2e576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525092505050610684565b8315610e4757610e3e828261242d565b92505050610684565b61090682826126fd565b5f805f610e5e8585612e64565b915091506109068282612ec6565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686612f20565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d610906828286612f4a565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828112610f1b57509192915050565b5f80610f278484611b54565b915091505f84128015610f3957508015155b15610f8f57610f8a82847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4612f20565b935091505b5f610f9a8385611459565b50979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828112610fdd57509192915050565b5f80610fe98484611b54565b91509150805f03610ffe575093949350505050565b5f811315610f8f57610f8a82847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4612fa6565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d611095848484846130d6565b1315979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828212156110dc5761094d82826131aa565b5f61095d8383611459565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d61112a848484846130d6565b1215979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d61117a848484846130d6565b12979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686611cd3565b5f61097283836112c4565b80515f908190602084810191850101828080806111f3868661324d565b929650909450925090507fffffffff0000000000000000000000000000000000000000000000000000000084165f036112b557848303611285575f806112398484611459565b915091508061127457507f32b8b8be000000000000000000000000000000000000000000000000000000009a5f9a5098505050505050505050565b505f9a909950975050505050505050565b507fad384e8700000000000000000000000000000000000000000000000000000000985f98509650505050505050565b5091975f975095505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d611307848484846130d6565b13979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686612fa6565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d61094d82826131aa565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d826113bd8383611b54565b5090505f610a338284611459565b5f805f805f6113da87876136ec565b9250925092505f806113ec8585611459565b91509150818380156113fb5750815b9650965050505050509250929050565b5f806106a87f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb48686611df2565b5f601b83900b83148383826114bd577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561149d57620186a0860595506005850194505b8586601b0b146114b857600a8605955084600101945061149d565b6114d3565b855f036114d357505f9250600191506106ad9050565b848560030b1461152f575f8512156114f357505f92508291506106ad9050565b6040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016108ce565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f8512156115a5576040517f4a7d166b00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016108ce565b845f036115b757505f905060016116a6565b8460ff8416850185811215611602576040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101889052602481018790526044016108ce565b5f805f83121561166c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb3831215611643575f8095509550505050506116a6565b825f03600a0a915081848161165a5761165a614744565b04955050840290911491506116a69050565b5f83131561169b5761167f83600a6148bc565b915061168b82856148c7565b9550600194506116a69350505050565b509193506001925050505b935093915050565b5f805f8412156116ea576116c284846131aa565b90945092506116d28585856116ae565b90945092506116e1848461140b565b915091506116a6565b5f806116f68686611b54565b9092509050845f80806117098585613748565b9194509250905061270d6127106117216001826148de565b8514611738576117328d8686613837565b90925090505b83156117c3575f61174a866001614904565b90505b80848583028161175f5761175f614744565b051461177657600a84059350600a8805975061174d565b6117b7611783858861492b565b8961178e878561492b565b8f87877ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6138f0565b909d509b506117ea9050565b819b507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc9a505b5050505050866117fb84835f611bbc565b611806886001614904565b6118109190614904565b94509450505050935093915050565b5f80838361182d828261398d565b90965094505f86136118ae57855f03611872576040517f561fc7b500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5d3fd4db00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016108ce565b5050837f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000036118ec576118e283604c614904565b5f915091506116a6565b7f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000008412158061193b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb561195d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb45b5f0b8412611b18575f805f805f8561197657604b611979565b604c5b611983908a614904565b90505f80876119b0577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000006119d1565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca0000000000000000005b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff169050808c81611a0357611a03614744565b05818102955090850193507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18019050611a3c8c826139e3565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000000295508594508a8414611ac8576123278114611aa357611a7e8c826001016139e3565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000002611ac5565b7f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000005b94505b50611af8838b848c89897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb46138f0565b909a509850611b098a8a835f612fa6565b975097505050505050506116a6565b611b22858561140b565b9095509350611b3286868661181f565b9095509350611b4185856131aa565b92509250506116a6565b50935093915050565b5f805f8312611b6757508290505f6106ad565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4831215611b9957505f9050826106ad565b5f839003600a0a808581611baf57611baf614744565b0794859003959350505050565b5f818303611bcb575082610695565b82821315611c0e57828203604c811380611be557505f8113155b15611bf3575f915050610695565b80600a0a8581611c0557611c05614744565b05915050610695565b818303604c811380611c2057505f8113155b15611c68576040517f1d5d6d100000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490526064016108ce565b600a81900a85810286828281611c8057611c80614744565b0514611cc9576040517f1d5d6d100000000000000000000000000000000000000000000000000000000081526004810188905260248101879052604481018690526064016108ce565b9250610695915050565b5f8085158415178015611ceb575f92505f9150611de8565b611cf58487614904565b91505f611d0188613a6a565b90505f611d0d87613a6a565b90505f611d1a8383613ad0565b5090505f6f0785ee10d5da46d900f436a000000000821115611d4f576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a7640000821115611d7057670de0b6b3a7640000820491506012015b633b9aca00821115611d8957633b9aca00820491506009015b612710821115611d9e57612710820491506004015b8115611db257600a82049150600101611d9e565b611dbc8187614904565b9550611dde8b8a611dd88787611dd387600a6148bc565b613b0b565b89613bf0565b9097509550505050505b5094509492505050565b5f80835f03611e37576040517f7a97930f00000000000000000000000000000000000000000000000000000000815260048101879052602481018690526044016108ce565b855f03611e4857505f90508061240d565b5f805f80611e568a8a613cf7565b919b5099509150611e678888613cf7565b919950975090505f611e788b613a6a565b90505f611e848a613a6a565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c818310156122a1578415611ee257507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000009050604b612260565b6f4b3b4ca85a86c47a098a22400000000083101561200e57678ac7230489e80000831015611f72576402540be400831015611f4057620186a0831015611f305750620186a0905060056121e9565b506402540be4009050600a6121e9565b655af3107a4000831015611f5f5750655af3107a40009050600e6121e9565b50678ac7230489e80000905060136121e9565b6b204fce5e3e25026110000000831015611fc45769152d02c7e14af6800000831015611fad575069152d02c7e14af6800000905060176121e9565b506b204fce5e3e250261100000009050601c6121e9565b6d314dc6448d9338c15b0a00000000831015611ff357506d314dc6448d9338c15b0a00000000905060216121e9565b506f4b3b4ca85a86c47a098a224000000000905060266121e9565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156121065773af298d050e4395d69670b12b7f410000000000008310156120a1577172cb5bd86321e38cb6ce6682e8000000000083101561208257507172cb5bd86321e38cb6ce6682e800000000009050602b6121e9565b5073af298d050e4395d69670b12b7f41000000000000905060306121e9565b76010b46c6cdd6e3e0828f4db456ff0c8ea00000000000008310156120e2575076010b46c6cdd6e3e0828f4db456ff0c8ea0000000000000905060356121e9565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a6121e9565b7c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000083101561219c577a026e4d30eccc3215dd8f3157d27e23acbdcfe6800000000000000083101561217457507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f6121e9565b507c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000905060446121e9565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca0000000000000000008310156121e957507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b81831161221d57600a820491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016121e9565b815f03612260576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018d9052602481018c90526044016108ce565b856122a1576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018f9052602481018e90526044016108ce565b807f8000000000000000000000000000000000000000000000000000000000000000018d126122d457808d039c50612347565b7f80000000000000000000000000000000000000000000000000000000000000009c90038c015f81131561234757807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038b1361233457998a0199612347565b5f8099509950505050505050505061240d565b5f808e12801561235657505f8c135b15612393577f80000000000000000000000000000000000000000000000000000000000000008e01808d1361238b575f61238f565b808d035b9150505b8b818f010397506123b08f8e6123aa888789613b0b565b8b613bf0565b90995097505f8113156123fa57604c8113156123da575f809a509a5050505050505050505061240d565b80600a0a89816123ec576123ec614744565b059850885f036123fa575f97505b5096985094965061240d95505050505050565b94509492505050565b5f612423858585856130d6565b1495945050505050565b6060612439838361398d565b90935091505f8061246a7f161bcca7119915b50764b4abe86529797775a5f171951000000000000000000086614976565b1561249a57507f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000009050604c6124c1565b507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000009050604b5b5f6124cc8387614976565b90505f6124d984886149dd565b90505f808312156124f3575060016124f0836149f0565b92505b5f82121561250a57506001612507826149f0565b91505b60408051602081019091525f81528215612613575f8061252b600a89614a20565b90505b6125388186614976565b5f0361255d57612549600a82614a20565b90508161255581614a33565b92505061252e565b60408051602081019091525f8082525b838110156125be57816040516020016125869190614a81565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052915060010161256d565b505b6125cb600a876149dd565b5f036125e3576125dc600a87614976565b95506125c0565b806125ed87613f98565b6040516020016125fe929190614ab9565b60405160208183030381529060405293505050505b5f61261d85613f98565b90505f61262a878b614904565b90505f81156126605761263c82613f98565b60405160200161264c9190614afb565b604051602081830303815290604052612670565b60405180602001604052805f8152505b90505f8561268c5760405180602001604052805f8152506126c3565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b9050808486846040516020016126dc9493929190614b2c565b6040516020818303038152906040529a505050505050505050505092915050565b60606103e882138061271857506127156103e86149f0565b82125b15612752576040517fe44c72b0000000000000000000000000000000000000000000000000000000008152600481018390526024016108ce565b5f80841290811561276d57612766856149f0565b9050612770565b50835b5f61277a82614024565b80519091505f5b81811080156127fd57508281612798600185614b56565b6127a29190614b56565b815181106127b2576127b2614b69565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f3000000000000000000000000000000000000000000000000000000000000000145b15612814578061280c81614a33565b915050612781565b5f61281f8284614b56565b90505f61282c838a614904565b90505f876128485760405180602001604052805f81525061287f565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b90505f82126129f957815f6128948286614b96565b67ffffffffffffffff8111156128ac576128ac614625565b6040519080825280601f01601f1916602001820160405280156128d6576020820181803683370190505b5090505f5b85811015612948578881815181106128f5576128f5614b69565b602001015160f81c60f81b82828151811061291257612912614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053506001016128db565b505f5b828110156129c5577f30000000000000000000000000000000000000000000000000000000000000008261297f8389614b96565b8151811061298f5761298f614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535060010161294b565b5082816040516020016129d9929190614ba9565b6040516020818303038152906040529a5050505050505050505050610684565b5f612a03836149f0565b905080841115612c1a575f612a188286614b56565b90505f612a26866001614b96565b67ffffffffffffffff811115612a3e57612a3e614625565b6040519080825280601f01601f191660200182016040528015612a68576020820181803683370190505b5090505f5b82811015612ada57898181518110612a8757612a87614b69565b602001015160f81c60f81b828281518110612aa457612aa4614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612a6d565b507f2e00000000000000000000000000000000000000000000000000000000000000818381518110612b0e57612b0e614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5b83811015612be55789612b518285614b96565b81518110612b6157612b61614b69565b01602001517fff00000000000000000000000000000000000000000000000000000000000000168282612b95866001614b96565b612b9f9190614b96565b81518110612baf57612baf614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612b3e565b508381604051602001612bf9929190614ba9565b6040516020818303038152906040529b505050505050505050505050610684565b5f612c258583614b56565b90505f85612c34836002614b96565b612c3e9190614b96565b67ffffffffffffffff811115612c5657612c56614625565b6040519080825280601f01601f191660200182016040528015612c80576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f81518110612cb657612cb6614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f2e0000000000000000000000000000000000000000000000000000000000000081600181518110612d1857612d18614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5b82811015612dc3577f300000000000000000000000000000000000000000000000000000000000000082612d7d836002614b96565b81518110612d8d57612d8d614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612d48565b505f5b86811015612be557898181518110612de057612de0614b69565b01602001517fff00000000000000000000000000000000000000000000000000000000000000168282612e14866002614b96565b612e1e9190614b96565b81518110612e2e57612e2e614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612dc6565b5f805f805f612e7387876136ec565b92509250925080612eba576040517fc471796600000000000000000000000000000000000000000000000000000000815260048101849052602481018390526044016108ce565b50909590945092505050565b5f805f612ed38585611459565b9150915080612f18576040517f22c9f7bb00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016108ce565b509392505050565b5f80612f2c84846131aa565b9094509250612f3d86868686612fa6565b9150915094509492505050565b5f805f612f5886868661155f565b9150915080612f9d576040517f05e4767800000000000000000000000000000000000000000000000000000000815260048101879052602481018690526044016108ce565b50949350505050565b5f8085158415178015612fd257865f03612fc6578484925092505061240d565b8686925092505061240d565b612fdc878761398d565b9097509550612feb858561398d565b909550935085841315612fff579395929492935b838603604c81111561301857878793509350505061240d565b80600a0a868161302a5761302a614744565b0595505086850180881860ff90811c151589881890911c151680156130c557877f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff036130ac576040517fd556b111000000000000000000000000000000000000000000000000000000008152600481018a9052602481018990526044016108ce565b600a9687900596909805860197600197909701966130c9565b8198505b5096979596505050505050565b5f80851584151781871282861218178584141780156130fb578685925092505061240d565b505f8584131561310f575092949193919260015b8386035f8112604c8213178015613142578215613134575f899450945050505061240d565b885f9450945050505061240d565b600a82900a8981028a82828161315a5761315a614744565b0514613186578415613176575f8b96509650505050505061240d565b8a5f96509650505050505061240d565b841561319b57889650945061240d9350505050565b955087945061240d9350505050565b5f807f80000000000000000000000000000000000000000000000000000000000000008403613243577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8303613236576040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101859052602481018490526044016108ce565b600a840593508260010192505b50505f9190910391565b5f8281806132628386652000000000006140e0565b9250858314158361327c81886703ff0000000000006140e0565b94508085036132b657507f34bd20690000000000000000000000000000000000000000000000000000000094505f92508291506136e39050565b5f806132c28a88614109565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613300575095505f93508392506136e3915050565b86519095506540000000000060015f9290921a9190911b16151588871016915050801561358f57506001909301925f8461334381896703ff0000000000006140e0565b955080860361337e57507f7bfa48af0000000000000000000000000000000000000000000000000000000095505f93508392506136e3915050565b855b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018051908a1160015f9290921a9190911b6601000000000000161515166001036133ed577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613380565b818114613444575f806134008484614109565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613440575097505f95508594506136e39350505050565b9350505b5f83121561347f57507f7bfa48af0000000000000000000000000000000000000000000000000000000096505f94508493506136e392505050565b831561348b57825f0392505b80820394505f8513156134cb57507f013b2aaa0000000000000000000000000000000000000000000000000000000096505f94508493506136e392505050565b855f036134da5782955061358c565b5f859003604381111561351b57507f32b8b8be0000000000000000000000000000000000000000000000000000000097505f95508594506136e39350505050565b600a0a8681025f8883838161353257613532614744565b0514159050601b82900b82141581806135485750805b1561358457507f32b8b8be000000000000000000000000000000000000000000000000000000009a505f98508897506136e39650505050505050565b505084019650505b50505b84516c2000000020000000000000000060015f9290921a9190911b1615158786101680156136d457600190950194856135cf818a652000000000006140e0565b9650866135e5818b6703ff0000000000006140e0565b975080880361362257507f013b2aaa0000000000000000000000000000000000000000000000000000000097505f95508594506136e39350505050565b505f8061362f838a614109565b90925090507fffffffff0000000000000000000000000000000000000000000000000000000082161561366f575097505f95508594506136e39350505050565b9250508482015f8313801561368357508581125b8061369757505f8312801561369757508581135b156136d057507fd556b1110000000000000000000000000000000000000000000000000000000097505f95508594506136e39350505050565b9450505b845f036136df575f93505b5050505b92959194509250565b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86111561373757600a860460018201600a88065f1493509350935050613741565b8593509150600190505b9250925092565b5f805f837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0361378057508391505f90506001613741565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc84121561380e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb08412156137df57505f9150508215156001613741565b5f846004015f03600a0a90505f8187816137fb576137fb614744565b0594505080840286141592509050613741565b5f841261382357505f91508190506001613741565b50505060048101600a0a82025f6001613741565b5f80806064613849600a612328614a20565b613856600a612328614a20565b6138619060026148c7565b61386c906001614b96565b6138769190614b96565b6138809190614b96565b90506138c4565b5f8052600280600a8504028301601e833c5f80516107d0840193505f80526001600a8606600a6064880402018501601f853c5f5101949350505050565b6138cf858288613887565b92508315611b4b576138e5600186018288613887565b915050935093915050565b5f80888803613903575083905081613981565b5f805f806139138c8b8f8d612f20565b915091505f806139258a8a8d8c612f20565b9150915061393584848484611cd3565b8096508197505050505050505f8061394f8b8b8f8d612f20565b915091505f8061396186868686611df2565b915091505f8061397384848f8e612fa6565b909a50985050505050505050505b97509795505050505050565b5f805f805f61399c8787613cf7565b92509250925080612eba576040517f05e51ecb00000000000000000000000000000000000000000000000000000000815260048101889052602481018790526044016108ce565b5f806139f2600a612328614a20565b6139fd9060026148c7565b613a08906001614b96565b90505f613a18600a612328614a20565b90506002600a8504026001015f8052600281601e883c505f51617fff81169350618000811615613a4757918101915b505f80526001600a8506600a6064870402018301601f873c50505f510192915050565b5f80821215613ac7577f80000000000000000000000000000000000000000000000000000000000000008203613ac157507f8000000000000000000000000000000000000000000000000000000000000000919050565b505f0390565b5090565b919050565b5f807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83850993909202808410938190039390930393915050565b5f805f613b188686613ad0565b91509150815f03613b3c57838181613b3257613b32614744565b0492505050610695565b838210613b86576040517f6c59da120000000000000000000000000000000000000000000000000000000081526004810187905260248101869052604481018590526064016108ce565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f8587181215613cba577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115613ca757613c4f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001614b96565b8403613c7f57507f800000000000000000000000000000000000000000000000000000000000000090508161240d565b613c8a600a85614a20565b613c93906149f0565b613c9e846001614904565b9150915061240d565b613cb0846149f0565b839150915061240d565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115613ced57613c93600a85614a20565b508290508161240d565b5f805f845f03613d0f57505f91508190506001613741565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee800000000000000000085055f03613f23576f4b3b4ca85a86c47a098a2240000000008505158015613d7857507f80000000000000000000000000000000000000000000000000000000000000268412155b15613d99576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a000000000000008505158015613de157507f80000000000000000000000000000000000000000000000000000000000000138412155b15613dfa57678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c6400000000000000008505158015613e4657507f800000000000000000000000000000000000000000000000000000000000000a8412155b15613e5c576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e40000000000000000008505158015613eab57507f80000000000000000000000000000000000000000000000000000000000000028412155b15613ec157606485029450600284039350613e5c565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000008505158015613f1157507f80000000000000000000000000000000000000000000000000000000000000018412155b15613f2357600a850294506001840393505b600a80860290810586148015613f5957507f80000000000000000000000000000000000000000000000000000000000000018512155b15613f68578095506001850394505b50939492935050507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000008305151590565b60605f8212613fb55760405180602001604052805f815250613fec565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b613ffd60ff84901d80850118614024565b60405160200161400e929190614ba9565b6040516020818303038152906040529050919050565b60605f61403083614233565b60010190505f8167ffffffffffffffff81111561404f5761404f614625565b6040519080825280601f01601f191660200182016040528015614079576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461408357509392505050565b5f5b5f82600186515f1a1b16118385101615614101576001840193506140e2565b509192915050565b81515f90819065200000000000600191831a9190911b161515838510168085019082806141368488614314565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615614171575093505f92506106ad915050565b825f036141d4577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116141a5575f6141c7565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b955093506106ad92505050565b7f80000000000000000000000000000000000000000000000000000000000000008111614201575f614223565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95505f0393505050509250929050565b5f807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061427b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106142a7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106142c557662386f26fc10000830492506010015b6305f5e10083106142dd576305f5e100830492506008015b61271083106142f157612710830492506004015b60648310614303576064830492506002015b600a83106106845760010192915050565b5f8082841061434757507f34bd20690000000000000000000000000000000000000000000000000000000090505f6106ad565b835f03614380576040517fda6966d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60305f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501815b8782101580156143b85750604d83105b156143fb57815160018401937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90930192600a0a5f9190911a85900302016143a8565b8782106145215781515f1a849003600181111561444357507f0fdc26350000000000000000000000000000000000000000000000000000000095505f94506106ad9350505050565b600a84900a810282810183111561448657507f0fdc26350000000000000000000000000000000000000000000000000000000096505f95506106ad945050505050565b9190910190507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101905b8782106145215781515f1a603081146144f657507f0fdc26350000000000000000000000000000000000000000000000000000000095505f94506106ad9350505050565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101906144b2565b5f9890975095505050505050565b5f6020828403121561453f575f80fd5b5035919050565b5f8060408385031215614557575f80fd5b50508035926020909101359150565b803560ff81168114613acb575f80fd5b5f8060408385031215614587575f80fd5b8235915061459760208401614566565b90509250929050565b5f80604083850312156145b1575f80fd5b82359150602083013580151581146145c7575f80fd5b809150509250929050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60208284031215614662575f80fd5b813567ffffffffffffffff80821115614679575f80fd5b818401915084601f83011261468c575f80fd5b81358181111561469e5761469e614625565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156146e4576146e4614625565b816040528281528760208487010111156146fc575f80fd5b826020860160208301375f928101602001929092525095945050505050565b5f805f6060848603121561472d575f80fd5b505081359360208301359350604090920135919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b600181815b808511156147f757817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156147dd576147dd614771565b808516156147ea57918102915b93841c93908002906147a3565b509250929050565b5f8261480d57506001610684565b8161481957505f610684565b816001811461482f576002811461483957614855565b6001915050610684565b60ff84111561484a5761484a614771565b50506001821b610684565b5060208310610133831016604e8410600b8410161715614878575081810a610684565b614882838361479e565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156148b4576148b4614771565b029392505050565b5f61069583836147ff565b808202811582820484141761068457610684614771565b8181035f8312801583831316838312821617156148fd576148fd614771565b5092915050565b8082018281125f83128015821682158216171561492357614923614771565b505092915050565b8082025f82127f80000000000000000000000000000000000000000000000000000000000000008414161561496257614962614771565b818105831482151761068457610684614771565b5f8261498457614984614744565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f8000000000000000000000000000000000000000000000000000000000000000831416156149d8576149d8614771565b500590565b5f826149eb576149eb614744565b500790565b5f7f80000000000000000000000000000000000000000000000000000000000000008203613ac157613ac1614771565b5f82614a2e57614a2e614744565b500490565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a6357614a63614771565b5060010190565b5f81518060208401855e5f93019283525090919050565b5f614a8c8284614a6a565b7f300000000000000000000000000000000000000000000000000000000000000081526001019392505050565b7f2e0000000000000000000000000000000000000000000000000000000000000081525f614af3614aed6001840186614a6a565b84614a6a565b949350505050565b7f650000000000000000000000000000000000000000000000000000000000000081525f6106956001830184614a6a565b5f614b4c614aed614b46614b40858a614a6a565b88614a6a565b86614a6a565b9695505050505050565b8181038181111561068457610684614771565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b8082018082111561068457610684614771565b5f614af3614aed8386614a6a56","sourceMap":"525:13549:46:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6819:83;;;;;;:::i;:::-;;:::i;:::-;;;399:25:145;;;387:2;372:18;6819:83:46;;;;;;;;11299:93;;;;;;:::i;:::-;;:::i;13850:222::-;;;;;;:::i;:::-;;:::i;:::-;;;;1353:25:145;;;1421:14;;1414:22;1409:2;1394:18;;1387:50;1326:18;13850:222:46;1185:258:145;10667:140:46;;;;;;:::i;:::-;;:::i;9694:142::-;;;;;;:::i;:::-;;:::i;9997:::-;;;;;;:::i;:::-;;:::i;8997:85::-;;;;;;:::i;:::-;;:::i;10353:150::-;;;;;;:::i;:::-;;:::i;6590:93::-;;;;;;:::i;:::-;;:::i;7121:90::-;;;;;;:::i;:::-;;:::i;:::-;;;1613:14:145;;1606:22;1588:41;;1576:2;1561:18;7121:90:46;1448:187:145;4526:156:46;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;12040:182::-;;;;;;:::i;:::-;;:::i;5530:93::-;;;;;;:::i;:::-;;:::i;12556:172::-;;;;;;:::i;:::-;;:::i;9229:87::-;;;;;;:::i;:::-;;:::i;1849:122::-;4788:66:51;1849:122:46;;9463:85;;;;;;:::i;:::-;;:::i;8475:92::-;;;;;;:::i;:::-;;:::i;6015:83::-;;;;;;:::i;:::-;;:::i;8125:92::-;;;;;;:::i;:::-;;:::i;7780:90::-;;;;;;:::i;:::-;;:::i;6300:93::-;;;;;;:::i;:::-;;:::i;967:140::-;;1040:66;967:140;;4894:158;;;;;;:::i;:::-;;:::i;1589:122::-;4499:66:51;1589:122:46;;11007:93;;;;;;:::i;:::-;;:::i;2375:96::-;2414:5;2375:96;;3040:211;;;;;;:::i;:::-;;:::i;:::-;;;;4336:66:145;4324:79;;;4306:98;;4435:2;4420:18;;4413:34;;;;4279:18;3040:211:46;4107:346:145;1329:122:46;4228:66:51;1329:122:46;;2109;5091:66:51;2109:122:46;;7445:90;;;;;;:::i;:::-;;:::i;5240:93::-;;;;;;:::i;:::-;;:::i;706:140::-;;779:66;706:140;;5760:87;;;;;;:::i;:::-;;:::i;11554:88::-;;;;;;:::i;:::-;;:::i;8735:91::-;;;;;;:::i;:::-;;:::i;3821:383::-;;;;;;:::i;:::-;;:::i;13202:232::-;;;;;;:::i;:::-;;:::i;2602:90::-;5335:66:51;2602:90:46;;6819:83;6864:5;6888:7;:1;:5;:7::i;:::-;6881:14;6819:83;-1:-1:-1;;6819:83:46:o;11299:93::-;11353:5;11377:8;:1;11383;11377:5;:8::i;:::-;11370:15;11299:93;-1:-1:-1;;;11299:93:46:o;13850:222::-;13931:7;13940:4;14013:52;14049:5;14056:8;14013:35;:52::i;:::-;14006:59;;;;13850:222;;;;;;:::o;10667:140::-;10713:5;10737:63;:1;721:42:52;10737:6:46;:63::i;9694:142::-;9741:5;9765:64;:1;721:42:52;9765:7:46;:64::i;9997:142::-;10044:5;10068:64;:1;721:42:52;10068:7:46;:64::i;8997:85::-;9043:5;9067:8;:1;:6;:8::i;10353:150::-;10407:5;10431:65;:1;10437;721:42:52;10431:5:46;:65::i;6590:93::-;6644:5;6668:8;:1;6674;6668:5;:8::i;7121:90::-;7174:4;7197:7;:1;7202;7197:4;:7::i;4526:156::-;4591:13;4623:52;4661:1;4664:10;4623:37;:52::i;12040:182::-;12128:5;12152:63;12199:5;12206:8;12152:46;:63::i;5530:93::-;5584:5;5608:8;:1;5614;5608:5;:8::i;12556:172::-;12640:7;12666:55;12705:5;12712:8;12666:38;:55::i;9229:87::-;9276:5;9300:9;:1;:7;:9::i;9463:85::-;9509:5;9533:8;:1;:6;:8::i;8475:92::-;8529:4;8552:8;:1;8558;8552:5;:8::i;6015:83::-;6060:5;6084:7;:1;:5;:7::i;8125:92::-;8179:4;8202:8;:1;8208;8202:5;:8::i;7780:90::-;7833:4;7856:7;:1;7861;7856:4;:7::i;6300:93::-;6354:5;6378:8;:1;6384;6378:5;:8::i;4894:158::-;4942:13;4974:71;4981:1;779:66;1040;4974:6;:71::i;11007:93::-;11061:5;11085:8;:1;11091;11085:5;:8::i;3040:211::-;3097:6;3105:5;3123:20;3145:12;3161:43;3200:3;3161:38;:43::i;:::-;3122:82;;;;-1:-1:-1;3040:211:46;-1:-1:-1;;;;3040:211:46:o;7445:90::-;7498:4;7521:7;:1;7526;7521:4;:7::i;5240:93::-;5294:5;5318:8;:1;5324;5318:5;:8::i;5760:87::-;5807:5;5831:9;:1;:7;:9::i;11554:88::-;11602:4;40930:17:51;41123:12;;41116:20;11625:10:46;40844:308:51;8735:91:46;8784:5;8808:11;:1;:9;:11::i;3821:383::-;3909:13;3939:31;:13;3956;3939:16;:31::i;:::-;3934:127;;3993:57;;;;;;;;5378:25:145;;;5419:18;;;5412:34;;;5351:18;;3993:57:46;;;;;;;;3934:127;4070:10;4083:7;:1;:5;:7::i;:::-;4070:20;-1:-1:-1;4107:90:46;4145:1;4148:22;4070:20;4156:13;4148:7;:22::i;:::-;:48;;;-1:-1:-1;4174:22:46;:4;4182:13;4174:7;:22::i;:::-;4107:37;:90::i;:::-;4100:97;3821:383;-1:-1:-1;;;;;3821:383:46:o;13202:232::-;13287:5;13294:4;13367:60;13411:5;13418:8;13367:43;:60::i;26308:326:51:-;26357:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;26476:62;19348:32;19405:16;26476:33;:62::i;:::-;26444:94;;-1:-1:-1;26444:94:51;-1:-1:-1;26549:12:51;26566:38;26444:94;;26566:9;:38::i;:::-;-1:-1:-1;26548:56:51;26308:326;-1:-1:-1;;;;;26308:326:51:o;40507:101::-;40561:5;40585:8;40588:1;40591;40585:2;:8::i;:::-;:16;;40600:1;40585:16;;;-1:-1:-1;40596:1:51;;40507:101;-1:-1:-1;40507:101:51:o;13558:248::-;13639:7;;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;13741:58;19348:32;19405:16;13790:8;13741:19;:58::i;:::-;13734:65;;;;;;13558:248;;;;;:::o;39808:143::-;39882:5;39906:38;39910:1;3896:66;39925:18;39906:3;:38::i;34200:484::-;34279:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;34410:84;34446:18;19348:32;19405:16;34410:35;:84::i;:::-;34366:128;;-1:-1:-1;34366:128:51;-1:-1:-1;34599:12:51;34616:38;34366:128;;34616:9;:38::i;:::-;-1:-1:-1;34598:56:51;34200:484;-1:-1:-1;;;;;;34200:484:51:o;35060:463::-;35135:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;35262:84;35298:18;19348:32;19405:16;35262:35;:84::i;31289:362::-;31339:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;31339:5;31498:66;19348:32;19405:16;31498:37;:66::i;:::-;31476:88;;;31575:12;31592:29;31602:8;31612;31592:9;:29::i;36145:3071::-;36227:5;19261:17;19363:16;;;19359:2;19348:32;;19409:4;19405:16;;;;41123:12;;36313:869;;-1:-1:-1;3744:1:51;;-1:-1:-1;36343:16:51;;-1:-1:-1;36343:16:51;36313:869;36402:1;36380:18;:23;36376:806;;36423:18;36445:1;36423:23;36419:494;;36470:16;:1;3653;36470:4;:16::i;:::-;36466:157;;;36584:20;;;;;;;;399:25:145;;;372:18;;36584:20:51;226:204:145;36466:157:51;-1:-1:-1;3653:1:51;;-1:-1:-1;36789:17:51;;-1:-1:-1;36789:17:51;36419:494;36852:46;;;;;;;;5378:25:145;;;5419:18;;;5412:34;;;5351:18;;36852:46:51;5150:302:145;36376:806:51;37009:15;:1;3744;37009:4;:15::i;:::-;:35;;;;-1:-1:-1;37028:16:51;:1;3653;37028:4;:16::i;:::-;37005:177;;;37067:1;37060:8;;;;;;37005:177;37089:16;:1;3653;37089:4;:16::i;:::-;37085:97;;;37128:43;37132:7;:1;:5;:7::i;:::-;37141:9;:1;:7;:9::i;:::-;37152:18;37128:3;:43::i;:::-;37121:50;;;;;;37085:97;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;37409:25;;37514:68;19348:32;19405:16;37514:37;:68::i;:::-;37476:106;;;;37593:24;37628:72;37677:8;37687:9;37698:1;37628:48;:72::i;:::-;37593:108;-1:-1:-1;37810:1:51;37752:30;;;37879:10;:1;19261:17;19363:16;;19359:2;19348:32;;19409:4;19405:16;;;;;19141:296;37879:10;37825:64;;;;37899:544;37926:1;37906:16;:21;37899:544;;37947:16;37966:4;37947:23;37974:4;37947:31;37943:263;;38042:149;38097:23;38122:14;38138:21;38161:12;38042:33;:149::i;:::-;37998:193;;-1:-1:-1;37998:193:51;-1:-1:-1;37943:263:51;38240:1;38219:22;;;;;38295:137;38346:21;38369:12;38383:21;38406:12;38295:33;:137::i;:::-;38255:177;;-1:-1:-1;38255:177:51;-1:-1:-1;37899:544:51;;;38454:25;38481:16;38513:86;38549:18;38569;38589:9;38513:35;:86::i;:::-;38453:146;;;;38656:86;38690:18;38710:9;38721;38732;38656:33;:86::i;:::-;38610:132;;-1:-1:-1;38610:132:51;-1:-1:-1;38799:86:51;38835:18;38610:132;;38799:35;:86::i;:::-;38753:132;;-1:-1:-1;38753:132:51;-1:-1:-1;38942:105:51;38753:132;;39007:23;39032:14;38942:33;:105::i;:::-;38896:151;;-1:-1:-1;38896:151:51;-1:-1:-1;39139:7:51;39151:40;38896:151;;39151:9;:40::i;:::-;-1:-1:-1;39138:53:51;-1:-1:-1;;;;;;;;;;;;;;;36145:3071:51;;;;;:::o;25374:565::-;25428:5;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;25428:5;;25639:95;19348:32;19405:16;19348:32;19405:16;25639:33;:95::i;:::-;25581:153;;;;25864:7;25876:38;25886:17;25905:8;25876:9;:38::i;:::-;-1:-1:-1;25863:51:51;25374:565;-1:-1:-1;;;;;;;;;;25374:565:51:o;26976:313::-;27029:4;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;27188:94;19348:32;19405:16;19348:32;19405:16;27188:32;:94::i;:::-;27181:101;26976:313;-1:-1:-1;;;;;;;26976:313:51:o;1412:418:53:-;1490:13;19261:17:51;19363:16;;19359:2;19348:32;19409:4;19405:16;;;1516:24:53;1604:22;;;1600:63;;1642:10;;;;;;;;;;;;;;;;;;;;;;;1600:63;1676:10;1672:90;;;1709:42;1723:17;1742:8;1709:13;:42::i;:::-;1702:49;;;;;;1672:90;1778:45;1795:17;1814:8;1778:16;:45::i;8838:263:51:-;8932:5;8950:24;8976:15;8995:41;9020:5;9027:8;8995:24;:41::i;:::-;8949:87;;;;9053:41;9066:17;9085:8;9053:12;:41::i;20749:488::-;20803:5;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;20803:5;;21016:95;19348:32;19405:16;19348:32;19405:16;21016:33;:95::i;15036:248::-;15120:7;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;15216:61;19348:32;19405:16;15268:8;15216:22;:61::i;31797:752::-;31848:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;32020:13;;;32016:56;;-1:-1:-1;32056:5:51;;31797:752;-1:-1:-1;;31797:752:51:o;32016:56::-;32082:8;32092:15;32111:66;32149:17;32168:8;32111:37;:66::i;:::-;32081:96;;;;32211:1;32191:17;:21;:38;;;;-1:-1:-1;32216:13:51;;;32191:38;32187:283;;;32402:57;32436:1;32439:8;32449:4;32455:3;32402:33;:57::i;:::-;32386:73;-1:-1:-1;32386:73:51;-1:-1:-1;32187:283:51;32480:12;32497:22;32507:1;32510:8;32497:9;:22::i;:::-;-1:-1:-1;32479:40:51;31797:752;-1:-1:-1;;;;;;;31797:752:51:o;32696:1044::-;32746:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;32918:13;;;32914:56;;-1:-1:-1;32954:5:51;;32696:1044;-1:-1:-1;;32696:1044:51:o;32914:56::-;32980:8;32990:15;33009:66;33047:17;33066:8;33009:37;:66::i;:::-;32979:96;;;;33161:8;33173:1;33161:13;33157:503;;-1:-1:-1;33197:5:51;;32696:1044;-1:-1:-1;;;;32696:1044:51:o;33157:503::-;33559:1;33548:8;:12;33544:116;;;33592:57;33626:1;33629:8;33639:4;33645:3;33592:33;:57::i;30085:431::-;30139:4;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;30346:106;19348:32;19405:16;19348:32;19405:16;30346:44;:106::i;:::-;-1:-1:-1;30469:40:51;;30085:431;-1:-1:-1;;;;;;;30085:431:51:o;22642:494::-;22691:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;22783:21;;;22779:148;;;22852:64;22888:17;22907:8;22852:35;:64::i;22779:148::-;23051:12;23068:38;23078:17;23097:8;23068:9;:38::i;29229:431::-;29283:4;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;29490:106;19348:32;19405:16;19348:32;19405:16;29490:44;:106::i;:::-;-1:-1:-1;29613:40:51;;29229:431;-1:-1:-1;;;;;;;29229:431:51:o;28393:429::-;28446:4;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;28653:106;19348:32;19405:16;19348:32;19405:16;28653:44;:106::i;:::-;-1:-1:-1;;28393:429:51;-1:-1:-1;;;;;;;28393:429:51:o;24348:527::-;24402:5;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;24402:5;;24613:95;19348:32;19405:16;19348:32;19405:16;24613:33;:95::i;40179:101::-;40233:5;40257:8;40260:1;40263;40257:2;:8::i;8905:1711:55:-;9120:10;;8974:6;;;;9084:4;9075:14;;;;9109:22;;;8974:6;;;;9246:35;9075:14;9109:22;9246:23;:35::i;:::-;9150:131;;-1:-1:-1;9150:131:55;;-1:-1:-1;9150:131:55;-1:-1:-1;9150:131:55;-1:-1:-1;9295:18:55;;;9312:1;9295:18;9291:1319;;9343:3;9333:6;:13;9329:1098;;9951:12;9965:13;9982:54;10008:17;10027:8;9982:25;:54::i;:::-;9950:86;;;;10059:8;10054:179;;-1:-1:-1;10099:34:55;;10146:1;;-1:-1:-1;8905:1711:55;-1:-1:-1;;;;;;;;;8905:1711:55:o;10054:179::-;-1:-1:-1;10204:1:55;;10207:6;;-1:-1:-1;8905:1711:55;-1:-1:-1;;;;;;;;8905:1711:55:o;9329:1098::-;-1:-1:-1;10354:42:55;;10409:1;;-1:-1:-1;8905:1711:55;-1:-1:-1;;;;;;;8905:1711:55:o;9291:1319::-;-1:-1:-1;10570:13:55;;10596:1;;-1:-1:-1;8905:1711:55;-1:-1:-1;;;;;;8905:1711:55:o;27617:430:51:-;27670:4;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;27877:106;19348:32;19405:16;19348:32;19405:16;27877:44;:106::i;:::-;-1:-1:-1;;27617:430:51;-1:-1:-1;;;;;;;27617:430:51:o;19921:481::-;19975:5;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;19975:5;;20186:95;19348:32;19405:16;19348:32;19405:16;20186:33;:95::i;21587:410::-;21638:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;21757:64;19348:32;19405:16;21757:35;:64::i;30772:350::-;30825:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;30825:5;30976:66;19348:32;19405:16;30976:37;:66::i;:::-;30962:80;;;31053:12;31070:22;31080:1;31083:8;31070:9;:22::i;7434:353::-;7525:5;7532:4;7549:24;7575:15;7592:13;7609:38;7631:5;7638:8;7609:21;:38::i;:::-;7548:99;;;;;;7658:11;7671:17;7692:38;7702:17;7721:8;7692:9;:38::i;:::-;7657:73;;;;7748:5;7755:8;:24;;;;;7767:12;7755:24;7740:40;;;;;;;;;7434:353;;;;;:::o;35535:162:54:-;35614:6;35622;35647:43;35651:4;35657:3;35662:17;35681:8;35647:3;:43::i;15810:2402:51:-;15895:11;16327:46;;;;;;15991:17;16047:8;16327:46;16651:668;;16708:4;16688:17;:24;:29;16684:135;;16762:3;16741:24;;;;16799:1;16787:13;;;;16684:135;17058:17;17036;17029:46;;;17022:151;;17120:2;17099:23;;;;17144:10;;;;;17022:151;;;16651:668;;;17215:17;17236:1;17215:22;17211:94;;-1:-1:-1;3653:1:51;;-1:-1:-1;17281:4:51;;-1:-1:-1;17261:25:51;;-1:-1:-1;17261:25:51;17211:94;17529:8;17516;17510:27;;;17506:393;;17731:1;17720:8;:12;17716:85;;;-1:-1:-1;3653:1:51;;-1:-1:-1;3653:1:51;;-1:-1:-1;17756:26:51;;-1:-1:-1;17756:26:51;17716:85;17825:59;;;;;;;;5378:25:145;;;5419:18;;;5412:34;;;5351:18;;17825:59:51;5150:302:145;17506:393:51;-1:-1:-1;;18046:17:51;18132:28;;18166:4;18162:19;;;18129:53;;-1:-1:-1;15810:2402:51;;;;;:::o;9946:3045::-;10081:7;10090:4;10213:1;10193:17;:21;10189:2796;;;10237:59;;;;;;;;5378:25:145;;;5419:18;;;5412:34;;;5351:18;;10237:59:51;5150:302:145;10189:2796:51;10395:17;10416:1;10395:22;10391:2594;;-1:-1:-1;10441:1:51;;-1:-1:-1;10444:4:51;10433:16;;10391:2594;10659:17;10940;;;10922:36;;10980:24;;;10976:123;;;11035:45;;;;;;;;5378:25:145;;;5419:18;;;5412:34;;;5351:18;;11035:45:51;5150:302:145;10976:123:51;11127:13;11154:20;11208:1;11192:13;:17;11188:1787;;;11486:3;11470:13;:19;11466:91;;;11525:1;11528:5;11517:17;;;;;;;;;;11466:91;11917:13;11916:14;;11902:2;:29;11894:37;;11990:5;11968:19;:27;;;;;:::i;:::-;;;-1:-1:-1;;12253:20:51;;:43;;;;-1:-1:-1;12231:66:51;;-1:-1:-1;12231:66:51;11188:1787;12356:1;12340:13;:17;12336:639;;;12502:28;12516:13;12502:2;:28;:::i;:::-;12494:36;-1:-1:-1;12563:27:51;12494:36;12563:19;:27;:::i;:::-;12548:42;-1:-1:-1;12864:4:51;;-1:-1:-1;12842:27:51;;-1:-1:-1;;;;12842:27:51;12336:639;-1:-1:-1;12934:19:51;;-1:-1:-1;12955:4:51;;-1:-1:-1;;;10391:2594:51;9946:3045;;;;;;:::o;43384:1993:54:-;43517:6;43525;43571:1;43551:17;:21;43547:271;;;43620:34;43626:17;43645:8;43620:5;:34::i;:::-;43588:66;;-1:-1:-1;43588:66:54;-1:-1:-1;43700:54:54;43706:18;43588:66;;43700:5;:54::i;:::-;43668:86;;-1:-1:-1;43668:86:54;-1:-1:-1;43775:32:54;43668:86;;43775:3;:32::i;:::-;43768:39;;;;;;43547:271;43854:21;43877:22;43903:36;43911:17;43930:8;43903:7;:36::i;:::-;43853:86;;-1:-1:-1;43853:86:54;-1:-1:-1;43981:8:54;43949:29;;;44060:36;43853:86;43981:8;44060:9;:36::i;:::-;44013:83;;-1:-1:-1;44013:83:54;-1:-1:-1;44013:83:54;-1:-1:-1;44257:4:54;44298:5;782:27:56;808:1;44298:5:54;782:27:56;:::i;:::-;44321:3:54;:29;44317:252;;44485:69;44508:18;44536:3;44542:11;44485:22;:69::i;:::-;44370:184;;-1:-1:-1;44370:184:54;-1:-1:-1;44317:252:54;44586:11;44582:664;;;44676:15;44695:7;:3;44701:1;44695:7;:::i;:::-;44676:27;;44753:154;44790:8;44781:5;44772;44761:8;:16;44760:26;;;;;:::i;:::-;;:38;44753:154;;44835:2;44826:11;;;-1:-1:-1;44882:2:54;44863:21;;;;44753:154;;;44975:153;45020:11;45026:5;45020:3;:11;:::i;:::-;45033:15;45050:16;45061:5;45050:8;:16;:::i;:::-;45068:8;45078:13;45093;45108:2;44975:23;:153::i;:::-;44943:185;;-1:-1:-1;44943:185:54;-1:-1:-1;44582:664:54;;-1:-1:-1;44582:664:54;;45187:13;45167:33;;45229:2;45218:13;;44582:664;43999:1257;;;;;45274:17;45308:61;45327:14;45343:22;45367:1;45308:18;:61::i;:::-;45293:12;45297:8;45293:1;:12;:::i;:::-;:76;;;;:::i;:::-;45266:104;;;;;;;43384:1993;;;;;;:::o;37791:5059::-;37924:6;;38000:17;38060:8;38114:41;38000:17;38060:8;38114:12;:41::i;:::-;38082:73;;-1:-1:-1;38082:73:54;-1:-1:-1;38195:1:54;38174:22;;38170:259;;38220:17;38241:1;38220:22;38216:199;;38273:11;;;;;;;;;;;;;;38216:199;38338:58;;;;;;;;5378:25:145;;;5419:18;;;5412:34;;;5351:18;;38338:58:54;5150:302:145;38216:199:54;37954:485;;38519:17;38540:4;38519:25;38515:81;;38568:13;:8;38579:2;38568:13;:::i;:::-;38583:1;38560:25;;;;;;38515:81;38646:4;38625:25;;;;38739:24;;38760:3;38739:24;;;38754:3;38739:24;38726:38;;:8;:38;38722:4122;;38780:20;38814;38848;38882;39533:17;39571:12;:38;;39606:2;39571:38;;;39593:2;39571:38;39553:57;;:8;:57;:::i;:::-;39533:77;;39672:11;39763:13;39779:12;:26;;39801:4;39779:26;;;39794:4;39779:26;39763:42;;;;40381:5;40354:17;:33;;;;;:::i;:::-;;40941:29;;;;-1:-1:-1;41478:29:54;;;;-1:-1:-1;40685:20:54;;;-1:-1:-1;41582:42:54;41600:18;40685:20;41582:17;:42::i;:::-;41575:4;:49;41552:73;;41663:13;41647:29;;41830:17;41813:13;:34;41809:270;;513:32:56;41891:30:54;;:165;;42009:46;42027:18;42047:3;42053:1;42047:7;42009:17;:46::i;:::-;42002:4;:53;41891:165;;;41959:4;41891:165;41875:181;;41809:270;39654:2457;42157:256;42198:13;42229:17;42264:13;42295:8;42321:13;42352;1640:3;42157:23;:256::i;:::-;42125:288;;-1:-1:-1;42125:288:54;-1:-1:-1;42434:47:54;42125:288;;42467:10;42479:1;42434:3;:47::i;:::-;42427:54;;;;;;;;;;;;38722:4122;42646:32;42650:17;42669:8;42646:3;:32::i;:::-;42614:64;;-1:-1:-1;42614:64:54;-1:-1:-1;42724:54:54;42730:18;42614:64;;42724:5;:54::i;:::-;42692:86;;-1:-1:-1;42692:86:54;-1:-1:-1;42799:34:54;42692:86;;42799:5;:34::i;:::-;42792:41;;;;;;;38722:4122;37944:4906;37791:5059;;;;;;:::o;55832:852::-;55915:14;55931:11;56120:1;56108:8;:13;56104:81;;-1:-1:-1;56149:17:54;;-1:-1:-1;56168:1:54;56141:29;;56104:81;56351:3;56340:8;:14;56336:82;;;-1:-1:-1;56382:1:54;;-1:-1:-1;56385:17:54;56374:29;;56336:82;56528:11;56563:9;;;56549:2;:24;;56595:17;56549:24;56595;;;;:::i;:::-;;56643;;;;;55832:852;-1:-1:-1;;;;55832:852:54:o;53784:1452::-;53925:6;53987:14;53975:8;:26;53971:1249;;-1:-1:-1;54028:17:54;54021:24;;53971:1249;54087:8;54070:14;:25;54066:1154;;;54137:25;;;54199:2;54184:17;;;:38;;;54221:1;54205:12;:17;;54184:38;54180:127;;;1408:1;54246:42;;;;;54180:127;54478:12;54464:2;:27;54437:17;:55;;;;;:::i;:::-;;54430:62;;;;;54066:1154;54553:25;;;54615:2;54600:17;;;:38;;;54637:1;54621:12;:17;;54600:38;54596:163;;;54669:71;;;;;;;;8664:25:145;;;8705:18;;;8698:34;;;8748:18;;;8741:34;;;8637:18;;54669:71:54;8468:313:145;54596:163:54;54904:2;:27;;;54968:25;;;:17;54904:27;54968:25;54904:27;55015:16;;;;:::i;:::-;;:37;55011:162;;55083:71;;;;;;;;8664:25:145;;;8705:18;;;8698:34;;;8748:18;;;8741:34;;;8637:18;;55083:71:54;8468:313:145;55011:162:54;55197:8;-1:-1:-1;55190:15:54;;-1:-1:-1;;55190:15:54;7193:2230;7343:24;;7473:26;;7501;;7470:58;7547:1870;;;;1408:1;7690:53;;1495:1;7757:34;;7547:1870;;;7833:21;7845:9;7833;:21;:::i;:::-;7822:32;;7989:29;8021:48;8050:18;8021:28;:48::i;:::-;7989:80;;8083:29;8115:48;8144:18;8115:28;:48::i;:::-;8083:80;;8179:13;8197:52;8204:21;8227;8197:6;:52::i;:::-;8178:71;;;8264:22;8344:4;8336:5;:12;8332:114;;;8381:4;8372:13;;;-1:-1:-1;8425:2:54;8407:20;8332:114;8475:4;8467:5;:12;8463:114;;;8512:4;8503:13;;;-1:-1:-1;8556:2:54;8538:20;8463:114;8606:3;8598:5;:11;8594:111;;;8642:3;8633:12;;;-1:-1:-1;8685:1:54;8667:19;8594:111;8734:3;8726:5;:11;8722:111;;;8770:3;8761:12;;;-1:-1:-1;8813:1:54;8795:19;8722:111;8857:9;;8850:108;;8899:2;8890:11;;;-1:-1:-1;8923:16:54;;8850:108;;;9086:34;9105:14;9086:34;;:::i;:::-;;-1:-1:-1;9167:239:54;9211:18;9247;9283:83;9290:21;9313;9336:29;9351:14;9344:2;9336:29;:::i;:::-;9283:6;:83::i;:::-;9384:8;9167:26;:239::i;:::-;9135:271;;-1:-1:-1;9135:271:54;-1:-1:-1;;;;;7547:1870:54;7390:2033;7193:2230;;;;;;;:::o;12966:8769::-;13116:6;13124;13150:18;13172:1;13150:23;13146:8583;;13196:45;;;;;;;;5378:25:145;;;5419:18;;;5412:34;;;5351:18;;13196:45:54;5150:302:145;13146:8583:54;13262:18;13284:1;13262:23;13258:8471;;-1:-1:-1;1408:1:54;;-1:-1:-1;1408:1:54;13301:67;;13258:8471;13399:24;13437:15;13466:10;13490;13697:39;13706:18;13726:9;13697:8;:39::i;:::-;13656:80;;-1:-1:-1;13656:80:54;-1:-1:-1;13656:80:54;-1:-1:-1;13791:39:54;13800:18;13820:9;13791:8;:39::i;:::-;13750:80;;-1:-1:-1;13750:80:54;-1:-1:-1;13750:80:54;-1:-1:-1;13965:29:54;13997:48;14026:18;13997:28;:48::i;:::-;13965:80;;14059:29;14091:48;14120:18;14091:28;:48::i;:::-;14059:80;-1:-1:-1;14170:4:54;14212:2;14663:29;;;14659:4460;;;14716:5;14712:4269;;;-1:-1:-1;14753:4:54;;-1:-1:-1;14796:2:54;14712:4269;;;14873:4;14849:21;:28;14845:3675;;;14933:4;14909:21;:28;14905:1781;;;14997:4;14973:21;:28;14969:813;;;15065:3;15041:21;:27;15037:321;;;-1:-1:-1;15116:3:54;;-1:-1:-1;15174:1:54;14845:3675;;15037:321;-1:-1:-1;15262:4:54;;-1:-1:-1;15321:2:54;14845:3675;;14969:813;15456:4;15432:21;:28;15428:324;;;-1:-1:-1;15508:4:54;;-1:-1:-1;15567:2:54;14845:3675;;15428:324;-1:-1:-1;15656:4:54;;-1:-1:-1;15715:2:54;14845:3675;;14905:1781;15872:4;15848:21;:28;15844:816;;;15940:4;15916:21;:28;15912:324;;;-1:-1:-1;15992:4:54;;-1:-1:-1;16051:2:54;14845:3675;;15912:324;-1:-1:-1;16140:4:54;;-1:-1:-1;16199:2:54;14845:3675;;15844:816;16334:4;16310:21;:28;16306:324;;;-1:-1:-1;16386:4:54;;-1:-1:-1;16445:2:54;14845:3675;;16306:324;-1:-1:-1;16534:4:54;;-1:-1:-1;16593:2:54;14845:3675;;;16768:4;16744:21;:28;16740:1758;;;16832:4;16808:21;:28;16804:816;;;16900:4;16876:21;:28;16872:324;;;-1:-1:-1;16952:4:54;;-1:-1:-1;17011:2:54;14845:3675;;16872:324;-1:-1:-1;17100:4:54;;-1:-1:-1;17159:2:54;16740:1758;;16804:816;17294:4;17270:21;:28;17266:324;;;-1:-1:-1;17346:4:54;;-1:-1:-1;17405:2:54;14845:3675;;17266:324;-1:-1:-1;17494:4:54;;-1:-1:-1;17553:2:54;16740:1758;;;17710:4;17686:21;:28;17682:790;;;17778:4;17754:21;:28;17750:324;;;-1:-1:-1;17830:4:54;;-1:-1:-1;17889:2:54;17682:790;;17750:324;-1:-1:-1;17978:4:54;;-1:-1:-1;18037:2:54;17682:790;;;18172:4;18148:21;:28;18144:298;;;-1:-1:-1;18224:4:54;;-1:-1:-1;18283:2:54;18144:298;18641:5;18616:21;:30;18609:214;;18723:2;18714:11;;;-1:-1:-1;18755:19:54;;18609:214;;;18848:5;18857:1;18848:10;18844:119;;18893:47;;;;;;;;5378:25:145;;;5419:18;;;5412:34;;;5351:18;;18893:47:54;5150:302:145;18844:119:54;19003:5;18998:107;;19039:47;;;;;;;;5378:25:145;;;5419:18;;;5412:34;;;5351:18;;19039:47:54;5150:302:145;18998:107:54;19587:14;19568:16;:33;19555:9;:46;19551:623;;19638:14;19625:27;;;;19551:623;;;19729:16;;19699:46;;;;19839:1;19822:18;;19818:338;;;19904:14;19885:16;:33;19872:9;:46;19868:266;;19950:27;;;;19868:266;;;1408:1;1495;20040:67;;;;;;;;;;;;;;19868:266;20202:26;20352:1;20340:9;:13;:30;;;;;20369:1;20357:9;:13;20340:30;20336:222;;;20424:16;20412:28;;20484:20;;;:55;;20537:1;20484:55;;;20519:8;20507:9;:20;20484:55;20462:77;;20372:186;20336:222;20621:9;20599:19;20587:9;:31;:43;20576:54;;20681:235;20729:18;20769;20809:59;20816:21;20839:5;20846:21;20809:6;:59::i;:::-;20890:8;20681:26;:235::i;:::-;20649:267;;-1:-1:-1;20649:267:54;-1:-1:-1;20961:1:54;20939:23;;20935:716;;;21012:2;20990:19;:24;20986:308;;;1408:1;1495;21204:67;;;;;;;;;;;;;;;20986:308;21479:19;21465:2;:34;21437:63;;;;;;:::i;:::-;;;;21526:17;21547:1;21526:22;21522:111;;1495:1;21576:34;;21522:111;-1:-1:-1;21676:17:54;;-1:-1:-1;21695:8:54;;-1:-1:-1;21668:36:54;;-1:-1:-1;;;;;;21668:36:54;13258:8471;12966:8769;;;;;;;:::o;34854:365::-;35003:4;35078:76;35093:18;35113:9;35124:18;35144:9;35078:14;:76::i;:::-;35172:40;;34854:365;-1:-1:-1;;;;;34854:365:54:o;2112:2562:53:-;2200:13;2257:71;2300:17;2319:8;2257:42;:71::i;:::-;2225:103;;-1:-1:-1;2225:103:53;-1:-1:-1;2339:13:53;;2397:24;2417:4;2225:103;2397:24;:::i;:::-;:29;2393:179;;-1:-1:-1;2482:4:53;;-1:-1:-1;2458:2:53;2393:179;;;-1:-1:-1;2557:4:53;;-1:-1:-1;2533:2:53;2393:179;2719:15;2737:33;2764:5;2737:17;:33;:::i;:::-;2719:51;-1:-1:-1;2917:17:53;2937:33;2964:5;2937:17;:33;:::i;:::-;2917:53;;2981:10;3024:1;3013:8;:12;3009:89;;;-1:-1:-1;3049:4:53;3078:9;3079:8;3078:9;:::i;:::-;3067:20;;3009:89;3124:1;3111:10;:14;3107:95;;;-1:-1:-1;3149:4:53;3180:11;3181:10;3180:11;:::i;:::-;3167:24;;3107:95;3212:35;;;;;;;;;:30;:35;;3261:15;;3257:819;;3292:24;;3354:10;3362:2;3354:5;:10;:::i;:::-;3334:30;;3518:128;3525:30;3545:9;3525:10;:30;:::i;:::-;3559:1;3525:35;3518:128;;3580:15;3593:2;3580:15;;:::i;:::-;;-1:-1:-1;3613:18:53;;;;:::i;:::-;;;;3518:128;;;3660:41;;;;;;;;;:36;:41;;;3715:147;3739:16;3735:1;:20;3715:147;;;3819:22;3805:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;3757:3:53;;3715:147;;;;3876:78;3883:15;3896:2;3883:10;:15;:::i;:::-;3902:1;3883:20;3876:78;;3923:16;3937:2;3923:16;;:::i;:::-;;;3876:78;;;4006:22;4030:34;4053:10;4030:22;:34::i;:::-;3987:78;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3968:97;;3278:798;;;3257:819;4086:28;4117:32;4140:8;4117:22;:32::i;:::-;4086:63;-1:-1:-1;4333:22:53;4358:32;4376:13;4358:8;:32;:::i;:::-;4333:57;-1:-1:-1;4400:28:53;4443:20;;:87;;4490:39;4513:15;4490:22;:39::i;:::-;4471:59;;;;;;;;:::i;:::-;;;;;;;;;;;;;4443:87;;;;;;;;;;;;;;;;4400:130;;4540:20;4563:5;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4540:39;;4610:6;4618:14;4634:16;4652:14;4596:71;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4589:78;;;;;;;;;;;;2112:2562;;;;:::o;5044:3560::-;5135:13;1062:4;5164:8;:38;:81;;;-1:-1:-1;5217:28:53;1062:4;5217:28;:::i;:::-;5206:8;:39;5164:81;5160:149;;;5268:30;;;;;;;;399:25:145;;;372:18;;5268:30:53;226:204:145;5160:149:53;5319:10;5332:21;;;;5388:495;;;;5626:18;5627:17;5626:18;:::i;:::-;5608:37;;5388:495;;;-1:-1:-1;5854:17:53;5388:495;5893:19;5921:25;5938:7;5921:16;:25::i;:::-;5969:13;;5893:54;;-1:-1:-1;5957:9:53;6232:106;6255:1;6239:13;:17;:57;;;;-1:-1:-1;6260:6:53;6275:13;6267:5;6271:1;6267;:5;:::i;:::-;:21;;;;:::i;:::-;6260:29;;;;;;;;:::i;:::-;;;;;;;;:36;;6239:57;6232:106;;;6312:15;;;;:::i;:::-;;;;6232:106;;;6347:12;6362:17;6366:13;6362:1;:17;:::i;:::-;6347:32;-1:-1:-1;6556:13:53;6572:32;6590:13;6572:8;:32;:::i;:::-;6556:48;;6615:20;6638:5;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6615:39;;6679:1;6669:6;:11;6665:594;;6926:6;6900:15;6976:14;6926:6;6976:4;:14;:::i;:::-;6966:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6966:25:53;;6947:44;;7010:9;7005:86;7029:4;7025:1;:8;7005:86;;;7067:6;7074:1;7067:9;;;;;;;;:::i;:::-;;;;;;;;;7058:3;7062:1;7058:6;;;;;;;;:::i;:::-;;;;:18;;;;;;;;;;-1:-1:-1;7035:3:53;;7005:86;;;;7109:9;7104:90;7128:7;7124:1;:11;7104:90;;;7160:19;:3;7164:8;7171:1;7164:4;:8;:::i;:::-;7160:13;;;;;;;;:::i;:::-;;;;:19;;;;;;;;;;-1:-1:-1;7137:3:53;;7104:90;;;;7228:6;7243:3;7214:34;;;;;;;;;:::i;:::-;;;;;;;;;;;;;7207:41;;;;;;;;;;;;;;6665:594;7472:17;7500:7;7501:6;7500:7;:::i;:::-;7472:36;;7530:9;7523:4;:16;7519:1079;;;7620:15;7638:16;7645:9;7638:4;:16;:::i;:::-;7620:34;-1:-1:-1;7668:16:53;7697:8;:4;7704:1;7697:8;:::i;:::-;7687:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7687:19:53;;7668:38;;7725:9;7720:89;7744:7;7740:1;:11;7720:89;;;7785:6;7792:1;7785:9;;;;;;;;:::i;:::-;;;;;;;;;7776:3;7780:1;7776:6;;;;;;;;:::i;:::-;;;;:18;;;;;;;;;;-1:-1:-1;7753:3:53;;7720:89;;;;7822:18;:3;7826:7;7822:12;;;;;;;;:::i;:::-;;;;:18;;;;;;;;;;;7859:9;7854:115;7878:9;7874:1;:13;7854:115;;;7935:6;7942:11;7952:1;7942:7;:11;:::i;:::-;7935:19;;;;;;;;:::i;:::-;;;;;;;7912:3;7930:1;7916:11;:7;7926:1;7916:11;:::i;:::-;:15;;;;:::i;:::-;7912:20;;;;;;;;:::i;:::-;;;;:42;;;;;;;;;;-1:-1:-1;7889:3:53;;7854:115;;;;8003:6;8018:3;7989:34;;;;;;;;;:::i;:::-;;;;;;;;;;;;;7982:41;;;;;;;;;;;;;;;7519:1079;8131:25;8159:16;8171:4;8159:9;:16;:::i;:::-;8131:44;-1:-1:-1;8189:16:53;8242:4;8218:21;8131:44;8218:1;:21;:::i;:::-;:28;;;;:::i;:::-;8208:39;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8208:39:53;;8189:58;;8261:12;:3;8265:1;8261:6;;;;;;;;:::i;:::-;;;;:12;;;;;;;;;;;8287;:3;8291:1;8287:6;;;;;;;;:::i;:::-;;;;:12;;;;;;;;;;;8318:9;8313:97;8337:17;8333:1;:21;8313:97;;;8379:16;:3;8383:5;8387:1;8383;:5;:::i;:::-;8379:10;;;;;;;;:::i;:::-;;;;:16;;;;;;;;;;-1:-1:-1;8356:3:53;;8313:97;;;;8428:9;8423:110;8447:4;8443:1;:8;8423:110;;;8509:6;8516:1;8509:9;;;;;;;;:::i;:::-;;;;;;;8476:3;8504:1;8480:21;8484:17;8480:1;:21;:::i;:::-;:25;;;;:::i;:::-;8476:30;;;;;;;;:::i;:::-;;;;:42;;;;;;;;;;-1:-1:-1;8453:3:53;;8423:110;;8131:373:51;8219:6;8227;8246:24;8272:15;8289:13;8306:38;8328:5;8335:8;8306:21;:38::i;:::-;8245:99;;;;;;8359:8;8354:98;;8390:51;;;;;;;;5378:25:145;;;5419:18;;;5412:34;;;5351:18;;8390:51:51;5150:302:145;8354:98:51;-1:-1:-1;8469:17:51;;;;-1:-1:-1;8131:373:51;-1:-1:-1;;;8131:373:51:o;18451:299::-;18539:5;18557:7;18566:13;18583:38;18593:17;18612:8;18583:9;:38::i;:::-;18556:65;;;;18636:8;18631:95;;18667:48;;;;;;;;5378:25:145;;;5419:18;;;5412:34;;;5351:18;;18667:48:51;5150:302:145;18631:95:51;-1:-1:-1;18742:1:51;18451:299;-1:-1:-1;;;18451:299:51:o;33785:339:54:-;33935:6;33943;33999:36;34005:18;34025:9;33999:5;:36::i;:::-;33965:70;;-1:-1:-1;33965:70:54;-1:-1:-1;34052:65:54;34056:18;34076:9;33965:70;;34052:3;:65::i;:::-;34045:72;;;;33785:339;;;;;;;:::o;14139:390:51:-;14277:7;14301:13;14316;14333:58;14353:17;14372:8;14382;14333:19;:58::i;:::-;14300:91;;;;14406:8;14401:100;;14437:53;;;;;;;;5378:25:145;;;5419:18;;;5412:34;;;5351:18;;14437:53:51;5150:302:145;14401:100:51;-1:-1:-1;14517:5:51;14139:390;-1:-1:-1;;;;14139:390:51:o;29621:3681:54:-;29771:6;;30037:26;;30065;;30034:58;30111:217;;;;30145:18;30167:1;30145:23;30141:177;;30196:18;30216:9;30188:38;;;;;;;30141:177;30273:18;30293:9;30265:38;;;;;;;30141:177;30565:43;30578:18;30598:9;30565:12;:43::i;:::-;30531:77;;-1:-1:-1;30531:77:54;-1:-1:-1;30652:43:54;30665:18;30685:9;30652:12;:43::i;:::-;30618:77;;-1:-1:-1;30618:77:54;-1:-1:-1;30816:21:54;;;30812:268;;;30919:18;;31031:9;;30866:18;;30812:268;31764:21;;;824:2;31948:45;;31944:122;;;32021:18;32041:9;32013:38;;;;;;;;31944:122;32285:21;32279:2;:27;32250:57;;;;;;:::i;:::-;;;-1:-1:-1;;32400:39:54;;;32658:26;;;32555:4;32648:37;;;32641:45;32734:18;32561:43;;;32551:54;;;32544:62;32718:35;32826:412;;;;32885:9;32865:16;:29;32861:130;;32925:47;;;;;;;;5378:25:145;;;5419:18;;;5412:34;;;5351:18;;32925:47:54;5150:302:145;32861:130:54;33031:2;33051:24;;;;33009;;;;33122:40;;;33093:11;;;;;;32826:412;;;33222:1;33201:22;;32826:412;-1:-1:-1;33265:18:54;;33285:9;;-1:-1:-1;;;;;;29621:3681:54:o;50744:2689::-;50905:6;;51455:26;;51483;;51452:58;51601:26;;;51629;;;51597:59;51374:308;51761:24;;;51346:461;51842:105;;;;51889:18;51909;51881:47;;;;;;;51842:105;51232:729;51975:12;52025:9;52013;:21;52009:329;;;-1:-1:-1;52124:18:54;;52248:9;;52067:18;;52319:4;52009:329;52374:21;;;52352:19;52500:20;;52540:2;52522:21;;52497:47;52571:210;;;;52610:7;52606:161;;;52649:1;52652:18;52641:30;;;;;;;;;52606:161;52726:18;52746:1;52718:30;;;;;;;;;52606:161;52914:2;:27;;;52974:26;;;:18;52914:27;52974:26;52914:27;53019:16;;;;:::i;:::-;;:38;53015:402;;53081:7;53077:161;;;53120:1;53123:18;53112:30;;;;;;;;;;;53077:161;53197:18;53217:1;53189:30;;;;;;;;;;;53015:402;53262:7;53258:159;;;53297:18;;-1:-1:-1;53317:8:54;-1:-1:-1;53289:37:54;;-1:-1:-1;;;;53289:37:54;53258:159;53373:8;-1:-1:-1;53383:18:54;;-1:-1:-1;53365:37:54;;-1:-1:-1;;;;53365:37:54;2977:541;3058:6;3066;3205:16;3184:17;:37;3180:271;;3257:16;3245:8;:28;3241:127;;3304:45;;;;;;;;5378:25:145;;;5419:18;;;5412:34;;;5351:18;;3304:45:54;5150:302:145;3241:127:54;3406:2;3385:23;;;;3426:10;;;;;3180:271;-1:-1:-1;;3472:18:54;;;;;;2977:541::o;1751:6678:55:-;1859:20;1987:5;1859:20;;2015:55;1987:5;2045:3;7516:41:40;2015:21:55;:55::i;:::-;2006:64;-1:-1:-1;2102:15:55;;;;2006:64;2201:53;2006:64;2231:3;20378:131:40;2201:21:55;:53::i;:::-;2192:62;;2286:8;2276:6;:18;2272:120;;-1:-1:-1;2326:32:55;;-1:-1:-1;2368:1:55;;-1:-1:-1;2368:1:55;;-1:-1:-1;2318:55:55;;-1:-1:-1;2318:55:55;2272:120;2411:37;2450:27;2501:61;2548:5;2555:6;2501:46;:61::i;:::-;2410:152;;-1:-1:-1;2410:152:55;-1:-1:-1;2584:35:55;;;;2580:135;;-1:-1:-1;2651:30:55;-1:-1:-1;2691:1:55;;-1:-1:-1;2691:1:55;;-1:-1:-1;2643:53:55;;-1:-1:-1;;2643:53:55;2580:135;1870:13:41;;2752:20:55;;-1:-1:-1;7662:41:40;1886:1:41;2801:16:55;1862:22:41;;;;1858:30;;;;1854:41;1847:49;1840:57;1823:15;;;1819:79;;-1:-1:-1;;2899:14:55;;2895:3973;;-1:-1:-1;2964:8:55;;;;;2945:1;2964:8;3043:53;2964:8;3073:3;20378:131:40;3043:21:55;:53::i;:::-;3034:62;;3128:9;3118:6;:19;3114:119;;-1:-1:-1;3169:30:55;;-1:-1:-1;3209:1:55;;-1:-1:-1;3209:1:55;;-1:-1:-1;3161:53:55;;-1:-1:-1;;3161:53:55;3114:119;3406:6;3430:125;3457:17;;;1870:13:41;;1823:15;;-1:-1:-1;1886:1:41;1688:14;1862:22;;;;1858:30;;;;7945:41:40;1854::41;1847:49;1840:57;1819:79;3496:1:55;3437:60;3430:125;;3521:15;;3430:125;;;3594:9;3577:13;:26;3573:403;;3628:24;3654:19;3701:72;3748:9;3759:13;3701:46;:72::i;:::-;3627:146;;-1:-1:-1;3627:146:55;-1:-1:-1;3799:22:55;;;;3795:117;;-1:-1:-1;3857:17:55;-1:-1:-1;3884:1:55;;-1:-1:-1;3884:1:55;;-1:-1:-1;3849:40:55;;-1:-1:-1;;;;3849:40:55;3795:117;3945:12;-1:-1:-1;;3573:403:55;4079:1;4067:9;:13;4063:113;;;-1:-1:-1;4112:30:55;;-1:-1:-1;4152:1:55;;-1:-1:-1;4152:1:55;;-1:-1:-1;4104:53:55;;-1:-1:-1;;;4104:53:55;4063:113;4197:10;4193:79;;;4244:9;4243:10;;4231:22;;4193:79;4724:13;4704:9;4697:41;4686:52;;4843:1;4832:8;:12;4828:114;;;-1:-1:-1;4876:32:55;;-1:-1:-1;4918:1:55;;-1:-1:-1;4918:1:55;;-1:-1:-1;4868:55:55;;-1:-1:-1;;;4868:55:55;4828:114;4964:17;4985:1;4964:22;4960:1894;;5030:9;5010:29;;4960:1894;;;5210:13;5234:9;;;5717:2;5709:10;;5705:122;;;-1:-1:-1;5755:34:55;;-1:-1:-1;5799:1:55;;-1:-1:-1;5799:1:55;;-1:-1:-1;5747:57:55;;-1:-1:-1;;;;5747:57:55;5705:122;5856:2;:11;6024:33;;;5998:23;6024:17;5856:11;6024:33;5856:11;6241:32;;;;:::i;:::-;;:53;;;-1:-1:-1;6556:44:55;;;;;;;6241:53;;6626:32;;;6644:14;6626:32;6622:144;;;-1:-1:-1;6694:34:55;;-1:-1:-1;6738:1:55;;-1:-1:-1;6738:1:55;;-1:-1:-1;6686:57:55;;-1:-1:-1;;;;;;;6686:57:55;6622:144;-1:-1:-1;;6807:28:55;;;-1:-1:-1;;4960:1894:55;2915:3953;;2895:3973;1870:13:41;;20571:29:40;1886:1:41;6882:13:55;1862:22:41;;;;1858:30;;;;1854:41;1847:49;1840:57;1823:15;;;1819:79;6974:11:55;;6970:1209;;7005:8;;;;;;7081:55;7005:8;7111:3;7516:41:40;7081:21:55;:55::i;:::-;7072:64;-1:-1:-1;7072:64:55;7235:53;7072:64;7265:3;20378:131:40;7235:21:55;:53::i;:::-;7226:62;;7324:11;7314:6;:21;7310:131;;-1:-1:-1;7371:32:55;;-1:-1:-1;7413:1:55;;-1:-1:-1;7413:1:55;;-1:-1:-1;7363:55:55;;-1:-1:-1;;;;7363:55:55;7310:131;7154:305;7500:21;7523:16;7567:62;7614:6;7622;7567:46;:62::i;:::-;7499:130;;-1:-1:-1;7499:130:55;-1:-1:-1;7655:19:55;;;;7651:111;;-1:-1:-1;7710:14:55;-1:-1:-1;7734:1:55;;-1:-1:-1;7734:1:55;;-1:-1:-1;7702:37:55;;-1:-1:-1;;;;7702:37:55;7651:111;7792:9;-1:-1:-1;;7881:17:55;;;7860:18;7925:10;;:36;;;;;7953:8;7939:11;:22;7925:36;7924:80;;;;7976:1;7967:6;:10;:36;;;;;7995:8;7981:11;:22;7967:36;7920:183;;;-1:-1:-1;8040:25:55;;-1:-1:-1;8075:1:55;;-1:-1:-1;8075:1:55;;-1:-1:-1;8032:48:55;;-1:-1:-1;;;;8032:48:55;7920:183;8135:11;-1:-1:-1;;6970:1209:55;8197:17;8218:1;8197:22;8193:220;;8397:1;8386:12;;8193:220;1954:6469;;;1751:6678;;;;;;;;:::o;6054:800:51:-;6139:6;;;6221:17;;;6213:26;;6386:16;6370:33;;6366:472;;;6583:2;6575:5;:10;6599:1;6588:12;;6610:2;6602:5;:10;6616:1;6602:15;6560:58;;;;;;;;;6366:472;6800:5;;-1:-1:-1;6808:8:51;-1:-1:-1;6818:4:51;;-1:-1:-1;6054:800:51;;;;;;:::o;57066:978:54:-;57151:6;57159:4;57165:6;57211:8;57223:2;57211:14;57207:821;;-1:-1:-1;57253:17:54;;-1:-1:-1;57272:5:54;;-1:-1:-1;57279:1:54;57245:36;;57207:821;57317:2;57306:8;:13;57302:726;;;57354:3;57343:8;:14;57339:98;;;-1:-1:-1;57389:1:54;;-1:-1:-1;;57392:22:54;;;57416:1;57381:37;;57339:98;57454:12;57492:8;57503:1;57492:12;57490:15;;57476:2;:30;57454:53;;57592:15;57630:5;57610:17;:25;;;;;:::i;:::-;;;-1:-1:-1;;57671:16:54;;;:37;;;;-1:-1:-1;57682:5:54;-1:-1:-1;57653:63:54;;57302:726;57753:1;57741:8;:13;57737:291;;-1:-1:-1;57782:1:54;;-1:-1:-1;57782:1:54;;-1:-1:-1;57792:1:54;57774:20;;57737:291;-1:-1:-1;;;57988:1:54;:12;;57974:2;:27;57947:55;;58004:5;58011:1;57939:74;;58539:1243;58674:20;;;1447:3:56;1145:33;1176:2;397:4;1145:33;:::i;:::-;;1176:2;397:4;1145:33;:::i;:::-;1294:23;;1316:1;1294:23;:::i;:::-;58911:24:54;;:1;:24;:::i;:::-;:46;;;;:::i;:::-;:79;;;;:::i;:::-;58890:100;;59102:477;;;59187:1;59184;59177:12;59267:1;59262;59257:2;59250:5;59246:14;59242:22;59234:6;59230:35;59226:2;59218:6;59206:63;59152:6;59312:1;59306:8;59354:24;59346:6;59342:37;59332:47;;59406:1;59403;59396:12;59509:1;59502:2;59495:5;59491:14;59486:2;59480:3;59473:5;59469:15;59465:24;59461:45;59453:6;59449:58;59445:2;59437:6;59425:86;59562:1;59556:8;59538:27;;59102:477;-1:-1:-1;;;;59102:477:54:o;:::-;59610:51;59657:3;59645:10;59625:18;59610:51;:::i;:::-;59593:68;;59677:8;59674:92;;;59705:59;59761:1;59756:3;59752:11;59740:10;59720:18;59705:59;:::i;:::-;59688:76;;59025:751;58539:1243;;;;;;:::o;60320:1618::-;60583:6;60591;60691:13;60675:12;:29;60671:93;;-1:-1:-1;60728:13:54;;-1:-1:-1;60743:9:54;60720:33;;60671:93;60773:33;60816:24;60888;60914:21;60939:54;60943:12;60957:9;60968:13;60983:9;60939:3;:54::i;:::-;60887:106;;;;61032:23;61057:20;61081:55;61085:13;61100:9;61111:13;61126:9;61081:3;:55::i;:::-;61031:105;;;;61253:71;61257:17;61276:14;61292:16;61310:13;61253:3;:71::i;:::-;61187:137;;;;;;;;60851:484;;;;61365:24;61391:21;61416:55;61420:13;61435:9;61446:13;61461:9;61416:3;:55::i;:::-;61364:107;;;;61529:33;61564:24;61604:85;61608:26;61636:17;61655;61674:14;61604:3;:85::i;:::-;61528:161;;;;61752:24;61778:15;61809:76;61813:26;61841:17;61860:13;61875:9;61809:3;:76::i;:::-;61751:134;;-1:-1:-1;61751:134:54;-1:-1:-1;;;;;;;;;60320:1618:54;;;;;;;;;;;:::o;48286:370::-;48374:6;48382;48401:27;48430:18;48450:9;48463:37;48472:17;48491:8;48463;:37::i;:::-;48400:100;;;;;;48515:4;48510:88;;48542:45;;;;;;;;5378:25:145;;;5419:18;;;5412:34;;;5351:18;;48542:45:54;5150:302:145;35925:1328:54;36006:14;;1145:33:56;1176:2;397:4;1145:33;:::i;:::-;1294:23;;1316:1;1294:23;:::i;:::-;36104:24:54;;36127:1;36104:24;:::i;:::-;36077:51;-1:-1:-1;36138:24:54;1145:33:56;1176:2;397:4;1145:33;:::i;:::-;36138:46:54;;36537:1;36532:2;36525:5;36521:14;36517:22;36514:1;36510:30;36563:1;36560;36553:12;36614:1;36602:10;36598:2;36590:6;36578:38;;36655:1;36649:8;36699:6;36685:12;36681:25;36671:35;;36754:6;36740:12;36736:25;36729:33;36719:136;;36802:39;;;;36719:136;;36879:1;36876;36869:12;37191:1;37184:2;37177:5;37173:14;37168:2;37162:3;37155:5;37151:15;37147:24;37143:45;37125:16;37121:68;37117:2;37109:6;37097:96;-1:-1:-1;;37234:1:54;37228:8;37216:21;;35925:1328;-1:-1:-1;;35925:1328:54:o;3731:701::-;3818:7;3885:1;3865:17;:21;3861:555;;;3931:16;3910:17;:37;3906:316;;-1:-1:-1;3978:29:54;;3731:701;-1:-1:-1;3731:701:54:o;3906:316::-;-1:-1:-1;4184:18:54;;;3731:701::o;3861:555::-;-1:-1:-1;4383:17:54;3731:701::o;3861:555::-;3731:701;;;:::o;21872:550::-;21933:12;;22319:6;22316:1;22313;22306:20;22346:9;;;;22394:11;;;22380:12;;;;22376:30;;;;;21872:550;-1:-1:-1;;21872:550:54:o;22585:4048::-;22667:14;22694:13;22709;22726:12;22733:1;22736;22726:6;:12::i;:::-;22693:45;;;;22812:5;22821:1;22812:10;22808:109;;22881:11;22873:5;:19;;;;;:::i;:::-;;22866:26;;;;;;22808:109;23024:11;23015:5;:20;23011:91;;23058:33;;;;;;;;8664:25:145;;;8705:18;;;8698:34;;;8748:18;;;8741:34;;;8637:18;;23058:33:54;8468:313:145;23011:91:54;23394:17;23553:11;23550:1;23547;23540:25;24154:1;24139:12;;:16;;24124:32;;24393:25;;;;;25554:1;25535;:15;;25534:21;;25787;;;25783:25;;25772:36;25856:21;;;25852:25;;25841:36;25926:21;;;25922:25;;25911:36;25996:21;;;25992:25;;25981:36;26066:21;;;26062:25;;26051:36;26137:21;;;26133:25;;;26122:36;24106:15;25003;;;24999:29;;;24995:37;;;23659:20;;;23648:32;;;25121:22;;;;23702:21;;;;24565:19;;;;25112:31;;;;26601:15;;-1:-1:-1;;22585:4048:54;;;;;:::o;5040:1698::-;5190:6;5198;5312:1;5307;5303;:5;5302:11;5298:1434;;;5364:16;5333:20;:48;5329:830;;;5429:29;5437:16;5457:1;5429:29;:::i;:::-;5405:20;:53;5401:529;;-1:-1:-1;5600:16:54;;-1:-1:-1;5618:8:54;5592:35;;5401:529;5870:25;5893:2;5870:20;:25;:::i;:::-;5862:34;;;:::i;:::-;5898:12;:8;5909:1;5898:12;:::i;:::-;5854:57;;;;;;5329:830;6104:29;6112:20;6104:29;:::i;:::-;6135:8;6096:48;;;;;;5298:1434;6224:16;6193:20;:48;6189:533;;;6444:25;6467:2;6444:20;:25;:::i;6189:533::-;-1:-1:-1;6675:20:54;;-1:-1:-1;6698:8:54;6660:47;;45918:1994;46002:6;46010;46018:4;46062:17;46083:1;46062:22;46058:134;;-1:-1:-1;1408:1:54;;-1:-1:-1;1408:1:54;;-1:-1:-1;46172:4:54;46104:73;;46058:134;46331:4;46311:17;:24;46339:1;46311:29;46307:1005;;46384:4;46364:17;:24;:29;:66;;;;-1:-1:-1;46409:21:54;46397:33;;;46364:66;46360:174;;;46475:4;46454:25;;;;46513:2;46501:14;;;;46360:174;46576:4;46556:17;:24;:29;:66;;;;-1:-1:-1;46601:21:54;46589:33;;;46556:66;46552:174;;;46667:4;46646:25;;;;46705:2;46693:14;;;;46552:174;46768:4;46748:17;:24;:29;:66;;;;-1:-1:-1;46793:21:54;46781:33;;;46748:66;46744:174;;;46859:4;46838:25;;;;46897:2;46885:14;;;;46744:174;46963:4;46943:17;:24;:29;:65;;;;-1:-1:-1;46988:20:54;46976:32;;;46943:65;46936:174;;;47053:3;47032:24;;;;47090:1;47078:13;;;;46936:174;;;47152:4;47132:17;:24;:29;:65;;;;-1:-1:-1;47177:20:54;47165:32;;;47132:65;47128:170;;;47242:2;47221:23;;;;47278:1;47266:13;;;;47128:170;47606:2;47586:22;;;;;47647:25;47626:17;:46;:82;;;;-1:-1:-1;47688:20:54;47676:32;;;47626:82;47622:192;;;47748:20;47728:40;;47798:1;47786:13;;;;47622:192;-1:-1:-1;47836:17:54;;47855:8;;-1:-1:-1;;;47885:4:54;47865:24;;:29;;;45918:1994::o;1985:168:2:-;2046:13;2100:1;2092:5;:9;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2114:31;2436:3:5;2431:8;;;2576;;;2575:17;2114:8:2;:31::i;:::-;2078:68;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2071:75;;1985:168;;;:::o;1251:634::-;1307:13;1356:14;1373:17;1384:5;1373:10;:17::i;:::-;1393:1;1373:21;1356:38;;1408:20;1442:6;1431:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1431:18:2;-1:-1:-1;1408:41:2;-1:-1:-1;1538:30:2;;;1554:4;1538:30;1595:247;1626:5;;1730:10;1725:2;1714:14;;1709:32;1626:5;1696:46;1786:2;1777:11;;;-1:-1:-1;1806:21:2;1595:247;1806:21;-1:-1:-1;1862:6:2;1251:634;-1:-1:-1;;;1251:634:2:o;835:346:41:-;919:7;1033:109;1107:1;1100:4;1096:1;1086:6;1080:13;1077:1;1072:22;1068:30;1064:41;1061:48;1055:3;1047:6;1044:15;1040:70;1033:109;;;1135:1;1127:6;1123:14;1113:24;;1033:109;;;-1:-1:-1;1168:6:41;;835:346;-1:-1:-1;;835:346:41:o;5044:1463:42:-;1870:13:41;;5135:6:42;;;;7516:41:40;1886:1:41;1862:22;;;1858:30;;;;1854:41;1847:49;1840:57;1823:15;;;1819:79;5304:15:42;;;;5135:6;;5374:53;5304:15;1823::41;5374:40:42;:53::i;:::-;5334:93;;-1:-1:-1;5334:93:42;-1:-1:-1;5476:26:42;;;;5472:90;;-1:-1:-1;5530:13:42;-1:-1:-1;5545:1:42;;-1:-1:-1;5522:25:42;;-1:-1:-1;;5522:25:42;5472:90;5618:5;5627:1;5618:10;5614:341;;5863:16;5847:5;:33;:77;;5922:1;5847:77;;;5883:29;5847:77;5839:101;-1:-1:-1;5933:5:42;-1:-1:-1;5839:101:42;;-1:-1:-1;;;5839:101:42;5614:341;6400:29;6392:37;;:81;;6471:1;6392:81;;;6432:29;6392:81;6384:106;-1:-1:-1;6475:14:42;;;-1:-1:-1;;;;5044:1463:42;;;;;:::o;29471:916:3:-;29524:7;;29608:8;29599:17;;29595:103;;29645:8;29636:17;;;-1:-1:-1;29681:2:3;29671:12;29595:103;29724:8;29715:5;:17;29711:103;;29761:8;29752:17;;;-1:-1:-1;29797:2:3;29787:12;29711:103;29840:8;29831:5;:17;29827:103;;29877:8;29868:17;;;-1:-1:-1;29913:2:3;29903:12;29827:103;29956:7;29947:5;:16;29943:100;;29992:7;29983:16;;;-1:-1:-1;30027:1:3;30017:11;29943:100;30069:7;30060:5;:16;30056:100;;30105:7;30096:16;;;-1:-1:-1;30140:1:3;30130:11;30056:100;30182:7;30173:5;:16;30169:100;;30218:7;30209:16;;;-1:-1:-1;30253:1:3;30243:11;30169:100;30295:7;30286:5;:16;30282:66;;30332:1;30322:11;30374:6;29471:916;-1:-1:-1;;29471:916:3:o;1114:3326:42:-;1199:6;1207:7;1263:3;1254:5;:12;1250:95;;-1:-1:-1;1294:32:42;;-1:-1:-1;1328:1:42;1286:44;;1250:95;1511:5;1520:1;1511:10;1507:80;;1548:24;;;;;;;;;;;;;;1507:80;1808:18;1778:19;1912:7;;;1778:19;2083:486;2100:5;2090:6;:15;;:32;;;;;2120:2;2109:8;:13;2090:32;2083:486;;;2434:13;;2518:10;;;;2546:8;;;;;2468:2;2464:17;2431:1;2426:22;;;;2422:40;;;2418:64;2407:76;2083:486;;;2785:5;2775:6;:15;2771:1613;;2939:13;;2832;2931:22;2927:40;;;3167:1;3159:9;;3155:393;;;-1:-1:-1;3204:29:42;;-1:-1:-1;3235:1:42;;-1:-1:-1;3196:41:42;;-1:-1:-1;;;;3196:41:42;3155:393;3318:2;:14;;;3309:24;;3363:14;;;:22;-1:-1:-1;3359:126:42;;;-1:-1:-1;3425:29:42;;-1:-1:-1;3456:1:42;;-1:-1:-1;3417:41:42;;-1:-1:-1;;;;;3417:41:42;3359:126;3510:15;;;;;-1:-1:-1;3569:8:42;;;;;3760:592;3777:5;3767:6;:15;3760:592;;4007:13;;3876:23;3999:22;4177:18;4150:46;;4146:150;;-1:-1:-1;4236:29:42;;-1:-1:-1;4267:1:42;;-1:-1:-1;4228:41:42;;-1:-1:-1;;;;4228:41:42;4146:150;-1:-1:-1;4321:8:42;;;;;3760:592;;;4413:1;;4417:5;;-1:-1:-1;1114:3326:42;-1:-1:-1;;;;;;1114:3326:42:o;14:207:145:-;100:6;153:2;141:9;132:7;128:23;124:32;121:52;;;169:1;166;159:12;121:52;-1:-1:-1;192:23:145;;14:207;-1:-1:-1;14:207:145:o;435:302::-;557:6;565;618:2;606:9;597:7;593:23;589:32;586:52;;;634:1;631;624:12;586:52;-1:-1:-1;;657:23:145;;;727:2;712:18;;;699:32;;-1:-1:-1;435:302:145:o;742:156::-;808:20;;868:4;857:16;;847:27;;837:55;;888:1;885;878:12;903:277;996:6;1004;1057:2;1045:9;1036:7;1032:23;1028:32;1025:52;;;1073:1;1070;1063:12;1025:52;1109:9;1096:23;1086:33;;1138:36;1170:2;1159:9;1155:18;1138:36;:::i;:::-;1128:46;;903:277;;;;;:::o;1640:368::-;1732:6;1740;1793:2;1781:9;1772:7;1768:23;1764:32;1761:52;;;1809:1;1806;1799:12;1761:52;1845:9;1832:23;1822:33;;1905:2;1894:9;1890:18;1877:32;1952:5;1945:13;1938:21;1931:5;1928:32;1918:60;;1974:1;1971;1964:12;1918:60;1997:5;1987:15;;;1640:368;;;;;:::o;2013:477::-;2162:2;2151:9;2144:21;2125:4;2194:6;2188:13;2237:6;2232:2;2221:9;2217:18;2210:34;2296:6;2291:2;2283:6;2279:15;2274:2;2263:9;2259:18;2253:50;2352:1;2347:2;2338:6;2327:9;2323:22;2319:31;2312:42;2481:2;2411:66;2406:2;2398:6;2394:15;2390:88;2379:9;2375:104;2371:113;2363:121;;;2013:477;;;;:::o;2932:184::-;2984:77;2981:1;2974:88;3081:4;3078:1;3071:15;3105:4;3102:1;3095:15;3121:981;3190:6;3243:2;3231:9;3222:7;3218:23;3214:32;3211:52;;;3259:1;3256;3249:12;3211:52;3299:9;3286:23;3328:18;3369:2;3361:6;3358:14;3355:34;;;3385:1;3382;3375:12;3355:34;3423:6;3412:9;3408:22;3398:32;;3468:7;3461:4;3457:2;3453:13;3449:27;3439:55;;3490:1;3487;3480:12;3439:55;3526:2;3513:16;3548:2;3544;3541:10;3538:36;;;3554:18;;:::i;:::-;3688:2;3682:9;3750:4;3742:13;;3593:66;3738:22;;;3762:2;3734:31;3730:40;3718:53;;;3786:18;;;3806:22;;;3783:46;3780:72;;;3832:18;;:::i;:::-;3872:10;3868:2;3861:22;3907:2;3899:6;3892:18;3947:7;3942:2;3937;3933;3929:11;3925:20;3922:33;3919:53;;;3968:1;3965;3958:12;3919:53;4024:2;4019;4015;4011:11;4006:2;3998:6;3994:15;3981:46;4069:1;4047:15;;;4064:2;4043:24;4036:35;;;;-1:-1:-1;4051:6:145;3121:981;-1:-1:-1;;;;;3121:981:145:o;4458:397::-;4616:6;4624;4632;4685:2;4673:9;4664:7;4660:23;4656:32;4653:52;;;4701:1;4698;4691:12;4653:52;-1:-1:-1;;4724:23:145;;;4794:2;4779:18;;4766:32;;-1:-1:-1;4845:2:145;4830:18;;;4817:32;;4458:397;-1:-1:-1;4458:397:145:o;5706:184::-;5758:77;5755:1;5748:88;5855:4;5852:1;5845:15;5879:4;5876:1;5869:15;5895:184;5947:77;5944:1;5937:88;6044:4;6041:1;6034:15;6068:4;6065:1;6058:15;6084:476;6173:1;6210:5;6173:1;6224:330;6245:7;6235:8;6232:21;6224:330;;;6364:4;6296:66;6292:77;6286:4;6283:87;6280:113;;;6373:18;;:::i;:::-;6423:7;6413:8;6409:22;6406:55;;;6443:16;;;;6406:55;6522:22;;;;6482:15;;;;6224:330;;;6228:3;6084:476;;;;;:::o;6565:866::-;6614:5;6644:8;6634:80;;-1:-1:-1;6685:1:145;6699:5;;6634:80;6733:4;6723:76;;-1:-1:-1;6770:1:145;6784:5;;6723:76;6815:4;6833:1;6828:59;;;;6901:1;6896:130;;;;6808:218;;6828:59;6858:1;6849:10;;6872:5;;;6896:130;6933:3;6923:8;6920:17;6917:43;;;6940:18;;:::i;:::-;-1:-1:-1;;6996:1:145;6982:16;;7011:5;;6808:218;;7110:2;7100:8;7097:16;7091:3;7085:4;7082:13;7078:36;7072:2;7062:8;7059:16;7054:2;7048:4;7045:12;7041:35;7038:77;7035:159;;;-1:-1:-1;7147:19:145;;;7179:5;;7035:159;7226:34;7251:8;7245:4;7226:34;:::i;:::-;7356:6;7288:66;7284:79;7275:7;7272:92;7269:118;;;7367:18;;:::i;:::-;7405:20;;6565:866;-1:-1:-1;;;6565:866:145:o;7436:131::-;7496:5;7525:36;7552:8;7546:4;7525:36;:::i;7572:168::-;7645:9;;;7676;;7693:15;;;7687:22;;7673:37;7663:71;;7714:18;;:::i;7745:200::-;7811:9;;;7784:4;7839:9;;7867:10;;7879:12;;;7863:29;7902:12;;;7894:21;;7860:56;7857:82;;;7919:18;;:::i;:::-;7857:82;7745:200;;;;:::o;7950:216::-;8014:9;;;8042:11;;;7989:3;8072:9;;8100:10;;8096:19;;8125:10;;8117:19;;8093:44;8090:70;;;8140:18;;:::i;:::-;8090:70;;7950:216;;;;:::o;8171:292::-;8243:9;;;8210:7;8268:9;;8285:66;8279:73;;8264:89;8261:115;;;8356:18;;:::i;:::-;8429:1;8420:7;8415:16;8412:1;8409:23;8405:1;8398:9;8395:38;8385:72;;8437:18;;:::i;8786:308::-;8825:1;8851;8841:35;;8856:18;;:::i;:::-;8973:66;8970:1;8967:73;8898:66;8895:1;8892:73;8888:153;8885:179;;;9044:18;;:::i;:::-;-1:-1:-1;9078:10:145;;8786:308::o;9099:112::-;9130:1;9156;9146:35;;9161:18;;:::i;:::-;-1:-1:-1;9195:10:145;;9099:112::o;9216:191::-;9251:3;9282:66;9275:5;9272:77;9269:103;;9352:18;;:::i;9412:120::-;9452:1;9478;9468:35;;9483:18;;:::i;:::-;-1:-1:-1;9517:9:145;;9412:120::o;9537:195::-;9576:3;9607:66;9600:5;9597:77;9594:103;;9677:18;;:::i;:::-;-1:-1:-1;9724:1:145;9713:13;;9537:195::o;9737:212::-;9779:3;9817:5;9811:12;9861:6;9854:4;9847:5;9843:16;9838:3;9832:36;9923:1;9887:16;;9912:13;;;-1:-1:-1;9887:16:145;;9737:212;-1:-1:-1;9737:212:145:o;9954:344::-;10175:3;10206:30;10232:3;10224:6;10206:30;:::i;:::-;10259:3;10245:18;;10290:1;10279:13;;9954:344;-1:-1:-1;;;9954:344:145:o;10303:390::-;10602:3;10597;10590:16;10572:3;10622:65;10648:38;10683:1;10678:3;10674:11;10666:6;10648:38;:::i;:::-;10640:6;10622:65;:::i;:::-;10615:72;10303:390;-1:-1:-1;;;;10303:390:145:o;10698:315::-;10949:3;10944;10937:16;10919:3;10969:38;11004:1;10999:3;10995:11;10987:6;10969:38;:::i;11018:417::-;11293:3;11318:111;11344:84;11370:57;11396:30;11422:3;11414:6;11396:30;:::i;:::-;11388:6;11370:57;:::i;:::-;11362:6;11344:84;:::i;11318:111::-;11311:118;11018:417;-1:-1:-1;;;;;;11018:417:145:o;11620:128::-;11687:9;;;11708:11;;;11705:37;;;11722:18;;:::i;11753:184::-;11805:77;11802:1;11795:88;11902:4;11899:1;11892:15;11926:4;11923:1;11916:15;11942:125;12007:9;;;12028:10;;;12025:36;;;12041:18;;:::i;12072:267::-;12251:3;12276:57;12302:30;12328:3;12320:6;12302:30;:::i","linkReferences":{}},"methodIdentifiers":{"FORMAT_DEFAULT_SCIENTIFIC_MAX()":"9b4afd99","FORMAT_DEFAULT_SCIENTIFIC_MIN()":"d35273a7","abs(bytes32)":"81a82272","add(bytes32,bytes32)":"d1de592a","ceil(bytes32)":"719cd99d","div(bytes32,bytes32)":"30297400","e()":"ffae15ba","eq(bytes32,bytes32)":"3447c030","floor(bytes32)":"5ca0e7a4","format(bytes32)":"a100a3d9","format(bytes32,bool)":"371493ce","format(bytes32,bytes32,bytes32)":"e5526ecd","frac(bytes32)":"28fa1f01","fromFixedDecimalLossless(uint256,uint8)":"3b3bd868","fromFixedDecimalLossy(uint256,uint8)":"e75f991f","gt(bytes32,bytes32)":"8dc29807","gte(bytes32,bytes32)":"73bfb283","integer(bytes32)":"e0db5888","inv(bytes32)":"04327dc5","isZero(bytes32)":"dd646917","log10(bytes32)":"25388350","lt(bytes32,bytes32)":"d102b4d3","lte(bytes32,bytes32)":"81f7e2f5","max(bytes32,bytes32)":"078b665b","maxNegativeValue()":"602c35fc","maxPositiveValue()":"cb09682b","min(bytes32,bytes32)":"a90d041a","minNegativeValue()":"cde72ef3","minPositiveValue()":"a19684b7","minus(bytes32)":"d3d6ffa8","mul(bytes32,bytes32)":"96ce1ec7","parse(string)":"bc62d8d8","pow(bytes32,bytes32)":"3004fa41","pow10(bytes32)":"1ee62f11","sqrt(bytes32)":"146e82ad","sub(bytes32,bytes32)":"41aa0080","toFixedDecimalLossless(bytes32,uint8)":"5b23771d","toFixedDecimalLossy(bytes32,uint8)":"0b6429bc","zero()":"bc1b392d"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"CoefficientOverflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"DivisionByZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"ExponentOverflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"Log10Negative\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Log10Zero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tablesAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"expectedCodehash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"actualCodehash\",\"type\":\"bytes32\"}],\"name\":\"LogTablesNotDeployed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"LossyConversionFromFloat\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"LossyConversionToFloat\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"MaximizeOverflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denominator\",\"type\":\"uint256\"}],\"name\":\"MulDivOverflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"NegativeFixedDecimalConversion\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"PowNegativeBase\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"scientificMin\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"scientificMax\",\"type\":\"bytes32\"}],\"name\":\"ScientificMinNotLessThanMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"UnformatableExponent\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"targetExponent\",\"type\":\"int256\"}],\"name\":\"WithTargetExponentOverflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"ZeroNegativePower\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroStringStartPointer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FORMAT_DEFAULT_SCIENTIFIC_MAX\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FORMAT_DEFAULT_SCIENTIFIC_MIN\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"abs\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"add\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"ceil\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"div\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"e\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"eq\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"floor\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"scientific\",\"type\":\"bool\"}],\"name\":\"format\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"format\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"scientificMin\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"scientificMax\",\"type\":\"bytes32\"}],\"name\":\"format\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"frac\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"name\":\"fromFixedDecimalLossless\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"name\":\"fromFixedDecimalLossy\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"gt\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"gte\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"integer\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"inv\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"isZero\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"log10\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"lt\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"lte\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"max\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxNegativeValue\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxPositiveValue\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"min\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minNegativeValue\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minPositiveValue\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"minus\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"mul\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"str\",\"type\":\"string\"}],\"name\":\"parse\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"},{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"pow\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"pow10\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"sqrt\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"sub\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"float\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"name\":\"toFixedDecimalLossless\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"float\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"name\":\"toFixedDecimalLossy\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"zero\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"CoefficientOverflow(int256,int256)\":[{\"details\":\"Thrown when a coefficient overflows.\"}],\"DivisionByZero(int256,int256)\":[{\"details\":\"Thrown when dividing by zero.\",\"params\":{\"exponent\":\"The exponent of the numerator.\",\"signedCoefficient\":\"The signed coefficient of the numerator.\"}}],\"ExponentOverflow(int256,int256)\":[{\"details\":\"Thrown when an exponent overflows.\"}],\"Log10Negative(int256,int256)\":[{\"details\":\"Thrown when attempting to calculate the log of a negative number.\"}],\"Log10Zero()\":[{\"details\":\"Thrown when attempting to calculate the log of 0.\"}],\"LogTablesNotDeployed(address,bytes32,bytes32)\":[{\"details\":\"Thrown when constructing a `DecimalFloat` on a chain where the log tables data contract is not deployed at the expected address with the expected codehash. Without this check, transcendental functions (`pow10`/`log10`/`pow`/`sqrt`) would silently `extcodecopy` zero bytes and return garbage.\",\"params\":{\"actualCodehash\":\"The codehash currently at `tablesAddress` (zero if no contract is deployed there).\",\"expectedCodehash\":\"The codehash the deployed table contract is expected to have.\",\"tablesAddress\":\"The address `DecimalFloat` was compiled to read log tables from.\"}}],\"LossyConversionFromFloat(int256,int256)\":[{\"details\":\"Thrown when converting a float to some value when the conversion is lossy.\"}],\"LossyConversionToFloat(int256,int256)\":[{\"details\":\"Thrown when converting some value to a float when the conversion is lossy.\"}],\"MaximizeOverflow(int256,int256)\":[{\"details\":\"Thrown when a maximize overflows where it is not appropriate.\"}],\"MulDivOverflow(uint256,uint256,uint256)\":[{\"details\":\"Thrown when mulDiv internal to division overflows.\"}],\"NegativeFixedDecimalConversion(int256,int256)\":[{\"details\":\"Thrown when attempting to convert a negative number to an unsigned fixed-point number.\"}],\"PowNegativeBase(int256,int256)\":[{\"details\":\"Thrown when attempting to exponentiate a negative base.\"}],\"ScientificMinNotLessThanMax(bytes32,bytes32)\":[{\"details\":\"Thrown when scientificMin is not less than scientificMax in format.\",\"params\":{\"scientificMax\":\"The maximum threshold for scientific notation.\",\"scientificMin\":\"The minimum threshold for scientific notation.\"}}],\"UnformatableExponent(int256)\":[{\"details\":\"Thrown when the exponent cannot be formatted.\",\"params\":{\"exponent\":\"The exponent that cannot be formatted.\"}}],\"WithTargetExponentOverflow(int256,int256,int256)\":[{\"details\":\"Thrown when attempting to rescale a coefficient to a target exponent\"}],\"ZeroNegativePower(bytes32)\":[{\"details\":\"Thrown when attempting to exponentiate 0^b where b is negative.\"}]},\"kind\":\"dev\",\"methods\":{\"abs(bytes32)\":{\"params\":{\"a\":\"The float to get the absolute value of.\"},\"returns\":{\"_0\":\"The absolute value of the float.\"}},\"add(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to add.\",\"b\":\"The second float to add.\"},\"returns\":{\"_0\":\"The sum of the two floats.\"}},\"ceil(bytes32)\":{\"params\":{\"a\":\"The float to get the ceiling of.\"},\"returns\":{\"_0\":\"The ceiled float.\"}},\"div(bytes32,bytes32)\":{\"params\":{\"a\":\"The dividend (numerator).\",\"b\":\"The divisor (denominator).\"},\"returns\":{\"_0\":\"The quotient of the two floats.\"}},\"e()\":{\"returns\":{\"_0\":\"The constant value of Euler's number as a Float.\"}},\"eq(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to compare.\",\"b\":\"The second float to compare.\"},\"returns\":{\"_0\":\"True if the two floats are equal, false otherwise.\"}},\"floor(bytes32)\":{\"params\":{\"a\":\"The float to get the floor of.\"},\"returns\":{\"_0\":\"The floored float.\"}},\"format(bytes32)\":{\"params\":{\"a\":\"The float to format.\"},\"returns\":{\"_0\":\"The string representation of the float.\"}},\"format(bytes32,bool)\":{\"params\":{\"a\":\"The float to format.\",\"scientific\":\"Whether to format the float in scientific notation.\"},\"returns\":{\"_0\":\"The string representation of the float.\"}},\"format(bytes32,bytes32,bytes32)\":{\"params\":{\"a\":\"The float to format. The absolute value of `a` is used to determine if scientific notation is used, this allows negative numbers to be formatted consistently with their positive counterparts.\",\"scientificMax\":\"The largest number that won't be formatted in scientific notation.\",\"scientificMin\":\"The smallest number that won't be formatted in scientific notation.\"},\"returns\":{\"_0\":\"The string representation of the float.\"}},\"frac(bytes32)\":{\"params\":{\"a\":\"The float to get the fractional part of.\"},\"returns\":{\"_0\":\"The fractional part of the float.\"}},\"fromFixedDecimalLossless(uint256,uint8)\":{\"params\":{\"decimals\":\"The number of decimals in the fixed point representation. e.g. If 1e18 represents 1 this would be 18 decimals.\",\"value\":\"The fixed point decimal value to convert.\"},\"returns\":{\"_0\":\"float The Float struct containing the signed coefficient and exponent.\"}},\"fromFixedDecimalLossy(uint256,uint8)\":{\"params\":{\"decimals\":\"The number of decimals in the fixed point representation. e.g. If 1e18 represents 1 this would be 18 decimals.\",\"value\":\"The fixed point decimal value to convert.\"},\"returns\":{\"_0\":\"float The Float struct containing the signed coefficient and exponent.\",\"_1\":\"lossless True if the conversion was lossless, false otherwise.\"}},\"gt(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to compare.\",\"b\":\"The second float to compare.\"},\"returns\":{\"_0\":\"True if the first float is greater than the second, false otherwise.\"}},\"gte(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to compare.\",\"b\":\"The second float to compare.\"},\"returns\":{\"_0\":\"True if the first float is greater than or equal to the second, false otherwise.\"}},\"integer(bytes32)\":{\"params\":{\"a\":\"The float to get the integer part of.\"},\"returns\":{\"_0\":\"The integer part of the float.\"}},\"inv(bytes32)\":{\"params\":{\"a\":\"The float to invert.\"},\"returns\":{\"_0\":\"The inverted float.\"}},\"isZero(bytes32)\":{\"params\":{\"a\":\"The float to check.\"},\"returns\":{\"_0\":\"True if the float is zero, false otherwise.\"}},\"log10(bytes32)\":{\"params\":{\"a\":\"The float to take the logarithm of.\"},\"returns\":{\"_0\":\"The logarithm of the float.\"}},\"lt(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to compare.\",\"b\":\"The second float to compare.\"},\"returns\":{\"_0\":\"True if the first float is less than the second, false otherwise.\"}},\"lte(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to compare.\",\"b\":\"The second float to compare.\"},\"returns\":{\"_0\":\"True if the first float is less than or equal to the second, false otherwise.\"}},\"max(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to compare.\",\"b\":\"The second float to compare.\"},\"returns\":{\"_0\":\"The larger of the two floats.\"}},\"maxNegativeValue()\":{\"returns\":{\"_0\":\"The maximum negative value of a Float.\"}},\"maxPositiveValue()\":{\"returns\":{\"_0\":\"The maximum positive value of a Float.\"}},\"min(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to compare.\",\"b\":\"The second float to compare.\"},\"returns\":{\"_0\":\"The smaller of the two floats.\"}},\"minNegativeValue()\":{\"returns\":{\"_0\":\"The minimum negative value of a Float.\"}},\"minPositiveValue()\":{\"returns\":{\"_0\":\"The minimum positive value of a Float.\"}},\"minus(bytes32)\":{\"params\":{\"a\":\"The float to negate.\"},\"returns\":{\"_0\":\"The negated float.\"}},\"mul(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to multiply.\",\"b\":\"The second float to multiply.\"},\"returns\":{\"_0\":\"The product of the two floats.\"}},\"parse(string)\":{\"params\":{\"str\":\"The string to parse.\"},\"returns\":{\"_0\":\"errorSelector The selector of the error if parsing failed. `0` if parsing succeeded.\",\"_1\":\"parsed The parsed float. Caller MUST check `errorSelector` to determine if parsing succeeded.\"}},\"pow(bytes32,bytes32)\":{\"params\":{\"a\":\"The base float.\",\"b\":\"The exponent float.\"},\"returns\":{\"_0\":\"The result of raising the base float to the power of the exponent\"}},\"pow10(bytes32)\":{\"params\":{\"a\":\"The exponent to raise 10 to.\"},\"returns\":{\"_0\":\"The result of 10^a.\"}},\"sqrt(bytes32)\":{\"params\":{\"a\":\"The float to take the square root of.\"},\"returns\":{\"_0\":\"The square root of the float.\"}},\"sub(bytes32,bytes32)\":{\"params\":{\"a\":\"The float to subtract from.\",\"b\":\"The float to subtract.\"},\"returns\":{\"_0\":\"The difference of the two floats.\"}},\"toFixedDecimalLossless(bytes32,uint8)\":{\"params\":{\"decimals\":\"The number of decimals in the fixed point representation. e.g. If 1e18 represents 1 this would be 18 decimals.\",\"float\":\"The Float struct to convert.\"},\"returns\":{\"_0\":\"The fixed point decimal value as a uint256.\"}},\"toFixedDecimalLossy(bytes32,uint8)\":{\"params\":{\"decimals\":\"The number of decimals in the fixed point representation. e.g. If 1e18 represents 1 this would be 18 decimals.\",\"float\":\"The Float struct to convert.\"},\"returns\":{\"_0\":\"value The fixed point decimal value as a uint256.\",\"_1\":\"lossless True if the conversion was lossless, false otherwise.\"}},\"zero()\":{\"returns\":{\"_0\":\"The zero value of a Float in its maximized representation.\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"ZeroStringStartPointer()\":[{\"notice\":\"The decimal string start pointer is zero.\"}]},\"kind\":\"user\",\"methods\":{\"FORMAT_DEFAULT_SCIENTIFIC_MAX()\":{\"notice\":\"The default maximum value for scientific formatting. 1e9\"},\"FORMAT_DEFAULT_SCIENTIFIC_MIN()\":{\"notice\":\"The default minimum value for scientific formatting. 1e-4\"},\"abs(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.abs` for offchain use.\"},\"add(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.add` for offchain use.\"},\"ceil(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.ceil` for offchain use.\"},\"div(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.div` for offchain use.\"},\"e()\":{\"notice\":\"Exposes `LibDecimalFloat.FLOAT_E` for offchain use.\"},\"eq(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.eq` for offchain use.\"},\"floor(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.floor` for offchain use.\"},\"format(bytes32)\":{\"notice\":\"Exposes `format(Float, Float, Float)` for offchain use. Provides default scientific formatting.\"},\"format(bytes32,bool)\":{\"notice\":\"Exposes `LibFormatDecimalFloat.toDecimalString` for offchain use. provides raw bool interface for custom scientific formatting.\"},\"format(bytes32,bytes32,bytes32)\":{\"notice\":\"Exposes `LibFormatDecimalFloat.toDecimalString` for offchain use.\"},\"frac(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.frac` for offchain use.\"},\"fromFixedDecimalLossless(uint256,uint8)\":{\"notice\":\"Exposes `LibDecimalFloat.fromFixedDecimalLosslessPacked` for offchain use.\"},\"fromFixedDecimalLossy(uint256,uint8)\":{\"notice\":\"Exposes `LibDecimalFloat.fromFixedDecimalLossyPacked` for offchain use.\"},\"gt(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.gt` for offchain use.\"},\"gte(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.gte` for offchain use.\"},\"integer(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.integer` for offchain use.\"},\"inv(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.inv` for offchain use.\"},\"isZero(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.isZero` for offchain use.\"},\"log10(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.log10` for offchain use.\"},\"lt(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.lt` for offchain use.\"},\"lte(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.lte` for offchain use.\"},\"max(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.max` for offchain use.\"},\"maxNegativeValue()\":{\"notice\":\"Exposes `LibDecimalFloat.FLOAT_MAX_NEGATIVE_VALUE` for offchain use.\"},\"maxPositiveValue()\":{\"notice\":\"Exposes `LibDecimalFloat.FLOAT_MAX_POSITIVE_VALUE` for offchain use.\"},\"min(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.min` for offchain use.\"},\"minNegativeValue()\":{\"notice\":\"Exposes `LibDecimalFloat.FLOAT_MIN_NEGATIVE_VALUE` for offchain use.\"},\"minPositiveValue()\":{\"notice\":\"Exposes `LibDecimalFloat.FLOAT_MIN_POSITIVE_VALUE` for offchain use.\"},\"minus(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.minus` for offchain use.\"},\"mul(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.mul` for offchain use.\"},\"parse(string)\":{\"notice\":\"Exposes `LibParseDecimalFloat.parseDecimalFloat` for offchain use.\"},\"pow(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.pow` for offchain use.\"},\"pow10(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.pow10` for offchain use.\"},\"sqrt(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.sqrt` for offchain use.\"},\"sub(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.sub` for offchain use.\"},\"toFixedDecimalLossless(bytes32,uint8)\":{\"notice\":\"Exposes `LibDecimalFloat.toFixedDecimalLossless` for offchain use.\"},\"toFixedDecimalLossy(bytes32,uint8)\":{\"notice\":\"Exposes `LibDecimalFloat.toFixedDecimalLossy` for offchain use.\"},\"zero()\":{\"notice\":\"Exposes `LibDecimalFloat.FLOAT_ZERO` for offchain use.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/concrete/DecimalFloat.sol\":\"DecimalFloat\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"appendCBOR\":false,\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[\":@openzeppelin-contracts-5.6.1/=dependencies/@openzeppelin-contracts-5.6.1/\",\":forge-std-1.16.1/=dependencies/forge-std-1.16.1/\",\":mut/=dependencies/rain-string-0.2.0/src/lib/mut/\",\":parse/=dependencies/rain-string-0.2.0/src/lib/parse/\",\":rain-datacontract-0.1.0/=dependencies/rain-datacontract-0.1.0/\",\":rain-deploy-0.1.2/=dependencies/rain-deploy-0.1.2/\",\":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/\"]},\"sources\":{\"dependencies/@openzeppelin-contracts-5.6.1/utils/Bytes.sol\":{\"keccak256\":\"0xf80e4b96b6849936ea0fabd76cf81b13d7276295fddb1e1c07afb3ddf650b0ac\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6430007255ac11c6e9c4331a418f3af52ff66fbbae959f645301d025b20aeb08\",\"dweb:/ipfs/QmQE5fjmBBRw9ndnzJuC2uskYss1gbaR7JdazoCf1FGoBj\"]},\"dependencies/@openzeppelin-contracts-5.6.1/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"dependencies/@openzeppelin-contracts-5.6.1/utils/Strings.sol\":{\"keccak256\":\"0x1fdc2de9585ab0f1c417f02a873a2b6343cd64bb7ffec6b00ffa11a4a158d9e8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ab223a3d969c6cd7610049431dd42740960c477e45878f5d8b54411f7a32bdc\",\"dweb:/ipfs/QmWumhjvhpKcwx3vDPQninsNVTc3BGvqaihkQakFkQYpaS\"]},\"dependencies/@openzeppelin-contracts-5.6.1/utils/math/Math.sol\":{\"keccak256\":\"0x59973a93b1f983f94e10529f46ca46544a9fec2b5f56fb1390bbe9e0dc79f857\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c55ef8f0b9719790c2ae6f81d80a59ffb89f2f0abe6bc065585bd79edce058c5\",\"dweb:/ipfs/QmNNmCbX9NjPXKqHJN8R1WC2rNeZSQrPZLd6FF6AKLyH5Y\"]},\"dependencies/@openzeppelin-contracts-5.6.1/utils/math/SafeCast.sol\":{\"keccak256\":\"0xc8cae21c9ae4a46e5162ff9bf5b351d6fa6a6eba72d515f3bc1bdfeda7fdf083\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce830ebcf28e31643caba318996db3763c36d52cd0f23798ba83c135355d45e9\",\"dweb:/ipfs/QmdGPcvptHN7UBCbUYBbRX3hiRVRFLRwno8b4uga6uFNif\"]},\"dependencies/@openzeppelin-contracts-5.6.1/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]},\"dependencies/rain-string-0.2.0/src/error/ErrParse.sol\":{\"keccak256\":\"0x7a69236ad67e39c20f6ade7973ec551c9a5bb5db4671c8afa95b80f35a996497\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://4731c6ea05b4e820814380dbbd6dac14f5778a1e9194b8992148cf97a99ffbb2\",\"dweb:/ipfs/QmUMnKNt2zQ42fjS4fpLqodXytiffVFzaKupAm8rNsrYVo\"]},\"dependencies/rain-string-0.2.0/src/lib/parse/LibParseCMask.sol\":{\"keccak256\":\"0x91e798a6f71aafbd4743720eaa38a7f16f74c6c0ab2992e7e4982979e9df539a\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://4782e62e0e5a5fbc7d6c757dcc90347d7ad064f25372a6c471ffa968e12b91d7\",\"dweb:/ipfs/QmPohMsVTjm19gxYwxgAsTKJQRjkK2J1Pyah63nCtYBBnt\"]},\"dependencies/rain-string-0.2.0/src/lib/parse/LibParseChar.sol\":{\"keccak256\":\"0x66c401d784e9461f709116441de3707685e08438cd83553db28fe8caf0e97238\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://e6027d0f9d558953686f6eb78ca0b2f2e7d9d38e0be6d1435ffaaa4b90919593\",\"dweb:/ipfs/QmQXDMTzmJrst2a4kHkcfjSsEdnPc4ikQs7VfGbCfe9QCc\"]},\"dependencies/rain-string-0.2.0/src/lib/parse/LibParseDecimal.sol\":{\"keccak256\":\"0x72ccc4d7e0a1245897511e1efc15ddc80d423a8eb956249be7940a8e8f4e99fe\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://3ca57acd6a7cbe16f2c03aa5a6e81ec7af1ad44078924358578560a32aead7c0\",\"dweb:/ipfs/QmNukyUMS4JrzNHAYcpLbtYsD5CwYPEjfAaADv6qMZmqs6\"]},\"src/concrete/DecimalFloat.sol\":{\"keccak256\":\"0x6326a6b5ffef0708b84712c0b891dfc7f2d88c38191628da1f40933951f2683b\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://ad99eda6cc266d5d160439700d3c89a487e8e31d51538f2ad83435a1aac9f3ae\",\"dweb:/ipfs/QmarsuZkgqG7jT9mYBh1VKNvjD5ZsVtJJTiRGbfMQAY669\"]},\"src/error/ErrDecimalFloat.sol\":{\"keccak256\":\"0x53825ff4d1af4981100de46bd7536c611625fe7930b5c21921838cfed3a92243\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://961197f4c7b6d560f71f67892bfd5b64300be0f0fdb20162058938567653643e\",\"dweb:/ipfs/QmTJzmA5CEkmYrXJ2MHnfQ3wGm1Qj6xE1vNaqAqgUpEnvA\"]},\"src/error/ErrFormat.sol\":{\"keccak256\":\"0xc760cb6018291753e7408d55d12d5e66c116f9750dc241bbc201f3b46ae33aa7\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://cbc81bb7c26c8503926b579f978902bcc3227839bee04bd3500cc924d142d28e\",\"dweb:/ipfs/QmXqMuqBCpckD1EnsBjweyLdRZxpvC2xSP9FWBZFh2vztR\"]},\"src/error/ErrParse.sol\":{\"keccak256\":\"0x7fc9fe7421d78306d252d2853fd1be943d9cbd12ff7a9c8c3f286a8164bfe357\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://7b4c434d01b53788968d185683d9633afa26d95396b1e91337a53ccaab0d44ab\",\"dweb:/ipfs/QmQHmVjR37wwrCskiQviwkg7WkeBpr9uPddjuDxqzANXeV\"]},\"src/generated/LogTables.pointers.sol\":{\"keccak256\":\"0x2325d92e3e248350a79f163fcb8738056ae4240b6a77f759ff5fcbf7b381f5ae\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://9a52674114518573de7d184094b266bc2b5208953086f8ec35a494f048deefbb\",\"dweb:/ipfs/QmTjuj1R9k4pFMBVpX6RcWG87Rdh9pRTZVHYo93SzBfmsH\"]},\"src/lib/LibDecimalFloat.sol\":{\"keccak256\":\"0x59d2dad4b7e861ed835a79c61ae42b4b0d628f9c578f3bb3ecd7796ed530f196\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://e565148a37f06299de3b6bcb3385ea0336f65c6c02c9ebfbc6f227f4e56d1c03\",\"dweb:/ipfs/Qma6UNZifZc8zsf7J6B87CdCXhiCR6Zisyg9czsfaji6yY\"]},\"src/lib/deploy/LibDecimalFloatDeploy.sol\":{\"keccak256\":\"0x79f59754c234e55420359efaa9af6ec851fadf8dfaecda6860c1ef99abcf1e64\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://8303dde773c7c613981011fe9ee5d976338b3dab9c66cd67516a82b094596343\",\"dweb:/ipfs/QmQnkeaReEwkKcFMvegAuuBoF2WyirRQmQG9CjKfdhQKnZ\"]},\"src/lib/format/LibFormatDecimalFloat.sol\":{\"keccak256\":\"0x5aac6382e7f7040e68600333c1b00b0aedb3edb6bced84b63783f6d88fe0b4f0\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://e96d30e34e1fa2cc4eb574ded30c0f6f93929dcc19cb571f555ca8c5ac32eaa7\",\"dweb:/ipfs/QmRRtk84AqEdQrRXfeTzVUAbAktJTZ92iTLqjocQV4PDx7\"]},\"src/lib/implementation/LibDecimalFloatImplementation.sol\":{\"keccak256\":\"0x47d0eeb542875548689465407162a19e4a21fb4591af5bb48d5758c0d1b93634\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://631efb796ff17f277804f8a32df7d28630c2ae5300e7d74c37aa8ed1f86b5092\",\"dweb:/ipfs/QmSfmMGQyxKYxu8UrWDEtuCggQ9HtFJy5cbMsYLPZbcTZ7\"]},\"src/lib/parse/LibParseDecimalFloat.sol\":{\"keccak256\":\"0x703d2d37d8a14639a3eb2dcd61601b36552027e16b4e8414befe51f2d0b9ed38\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://53fa45503e115a322a701a1289c5b5fcbe68090c83e0635af77d275d123f09f0\",\"dweb:/ipfs/QmTBtz8uPLYXrTue9SmHBVdgjpFJYUU41Z48PAgu1nXafn\"]},\"src/lib/table/LibLogTable.sol\":{\"keccak256\":\"0xccd2dea54cfb708c01e7e8e88c089742bbab18f5783be4632311fb4923d44c88\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://f45fb78c16b5d66d56ba0e78acdb0ca5d315eb05efa2cd7a81e191aabe7aec52\",\"dweb:/ipfs/QmQJ3TFFxTMu4HZ4qnjgmdmSNhGZLQRdCnSqAipEF1up1f\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.25+commit.b61c2a91"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"int256","name":"signedCoefficient","type":"int256"},{"internalType":"int256","name":"exponent","type":"int256"}],"type":"error","name":"CoefficientOverflow"},{"inputs":[{"internalType":"int256","name":"signedCoefficient","type":"int256"},{"internalType":"int256","name":"exponent","type":"int256"}],"type":"error","name":"DivisionByZero"},{"inputs":[{"internalType":"int256","name":"signedCoefficient","type":"int256"},{"internalType":"int256","name":"exponent","type":"int256"}],"type":"error","name":"ExponentOverflow"},{"inputs":[{"internalType":"int256","name":"signedCoefficient","type":"int256"},{"internalType":"int256","name":"exponent","type":"int256"}],"type":"error","name":"Log10Negative"},{"inputs":[],"type":"error","name":"Log10Zero"},{"inputs":[{"internalType":"address","name":"tablesAddress","type":"address"},{"internalType":"bytes32","name":"expectedCodehash","type":"bytes32"},{"internalType":"bytes32","name":"actualCodehash","type":"bytes32"}],"type":"error","name":"LogTablesNotDeployed"},{"inputs":[{"internalType":"int256","name":"signedCoefficient","type":"int256"},{"internalType":"int256","name":"exponent","type":"int256"}],"type":"error","name":"LossyConversionFromFloat"},{"inputs":[{"internalType":"int256","name":"signedCoefficient","type":"int256"},{"internalType":"int256","name":"exponent","type":"int256"}],"type":"error","name":"LossyConversionToFloat"},{"inputs":[{"internalType":"int256","name":"signedCoefficient","type":"int256"},{"internalType":"int256","name":"exponent","type":"int256"}],"type":"error","name":"MaximizeOverflow"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"},{"internalType":"uint256","name":"denominator","type":"uint256"}],"type":"error","name":"MulDivOverflow"},{"inputs":[{"internalType":"int256","name":"signedCoefficient","type":"int256"},{"internalType":"int256","name":"exponent","type":"int256"}],"type":"error","name":"NegativeFixedDecimalConversion"},{"inputs":[{"internalType":"int256","name":"signedCoefficient","type":"int256"},{"internalType":"int256","name":"exponent","type":"int256"}],"type":"error","name":"PowNegativeBase"},{"inputs":[{"internalType":"Float","name":"scientificMin","type":"bytes32"},{"internalType":"Float","name":"scientificMax","type":"bytes32"}],"type":"error","name":"ScientificMinNotLessThanMax"},{"inputs":[{"internalType":"int256","name":"exponent","type":"int256"}],"type":"error","name":"UnformatableExponent"},{"inputs":[{"internalType":"int256","name":"signedCoefficient","type":"int256"},{"internalType":"int256","name":"exponent","type":"int256"},{"internalType":"int256","name":"targetExponent","type":"int256"}],"type":"error","name":"WithTargetExponentOverflow"},{"inputs":[{"internalType":"Float","name":"b","type":"bytes32"}],"type":"error","name":"ZeroNegativePower"},{"inputs":[],"type":"error","name":"ZeroStringStartPointer"},{"inputs":[],"stateMutability":"view","type":"function","name":"FORMAT_DEFAULT_SCIENTIFIC_MAX","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"FORMAT_DEFAULT_SCIENTIFIC_MIN","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"abs","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"b","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"add","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"ceil","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"b","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"div","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"e","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"b","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"eq","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"floor","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"bool","name":"scientific","type":"bool"}],"stateMutability":"pure","type":"function","name":"format","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"format","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"scientificMin","type":"bytes32"},{"internalType":"Float","name":"scientificMax","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"format","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"frac","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint8","name":"decimals","type":"uint8"}],"stateMutability":"pure","type":"function","name":"fromFixedDecimalLossless","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint8","name":"decimals","type":"uint8"}],"stateMutability":"pure","type":"function","name":"fromFixedDecimalLossy","outputs":[{"internalType":"Float","name":"","type":"bytes32"},{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"b","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"gt","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"b","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"gte","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"integer","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"inv","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"isZero","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"}],"stateMutability":"view","type":"function","name":"log10","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"b","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"lt","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"b","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"lte","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"b","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"max","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"maxNegativeValue","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"maxPositiveValue","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"b","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"min","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"minNegativeValue","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"minPositiveValue","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"minus","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"b","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"mul","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"string","name":"str","type":"string"}],"stateMutability":"pure","type":"function","name":"parse","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"},{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"b","type":"bytes32"}],"stateMutability":"view","type":"function","name":"pow","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"}],"stateMutability":"view","type":"function","name":"pow10","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"}],"stateMutability":"view","type":"function","name":"sqrt","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"b","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"sub","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"float","type":"bytes32"},{"internalType":"uint8","name":"decimals","type":"uint8"}],"stateMutability":"pure","type":"function","name":"toFixedDecimalLossless","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"Float","name":"float","type":"bytes32"},{"internalType":"uint8","name":"decimals","type":"uint8"}],"stateMutability":"pure","type":"function","name":"toFixedDecimalLossy","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"zero","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]}],"devdoc":{"kind":"dev","methods":{"abs(bytes32)":{"params":{"a":"The float to get the absolute value of."},"returns":{"_0":"The absolute value of the float."}},"add(bytes32,bytes32)":{"params":{"a":"The first float to add.","b":"The second float to add."},"returns":{"_0":"The sum of the two floats."}},"ceil(bytes32)":{"params":{"a":"The float to get the ceiling of."},"returns":{"_0":"The ceiled float."}},"div(bytes32,bytes32)":{"params":{"a":"The dividend (numerator).","b":"The divisor (denominator)."},"returns":{"_0":"The quotient of the two floats."}},"e()":{"returns":{"_0":"The constant value of Euler's number as a Float."}},"eq(bytes32,bytes32)":{"params":{"a":"The first float to compare.","b":"The second float to compare."},"returns":{"_0":"True if the two floats are equal, false otherwise."}},"floor(bytes32)":{"params":{"a":"The float to get the floor of."},"returns":{"_0":"The floored float."}},"format(bytes32)":{"params":{"a":"The float to format."},"returns":{"_0":"The string representation of the float."}},"format(bytes32,bool)":{"params":{"a":"The float to format.","scientific":"Whether to format the float in scientific notation."},"returns":{"_0":"The string representation of the float."}},"format(bytes32,bytes32,bytes32)":{"params":{"a":"The float to format. The absolute value of `a` is used to determine if scientific notation is used, this allows negative numbers to be formatted consistently with their positive counterparts.","scientificMax":"The largest number that won't be formatted in scientific notation.","scientificMin":"The smallest number that won't be formatted in scientific notation."},"returns":{"_0":"The string representation of the float."}},"frac(bytes32)":{"params":{"a":"The float to get the fractional part of."},"returns":{"_0":"The fractional part of the float."}},"fromFixedDecimalLossless(uint256,uint8)":{"params":{"decimals":"The number of decimals in the fixed point representation. e.g. If 1e18 represents 1 this would be 18 decimals.","value":"The fixed point decimal value to convert."},"returns":{"_0":"float The Float struct containing the signed coefficient and exponent."}},"fromFixedDecimalLossy(uint256,uint8)":{"params":{"decimals":"The number of decimals in the fixed point representation. e.g. If 1e18 represents 1 this would be 18 decimals.","value":"The fixed point decimal value to convert."},"returns":{"_0":"float The Float struct containing the signed coefficient and exponent.","_1":"lossless True if the conversion was lossless, false otherwise."}},"gt(bytes32,bytes32)":{"params":{"a":"The first float to compare.","b":"The second float to compare."},"returns":{"_0":"True if the first float is greater than the second, false otherwise."}},"gte(bytes32,bytes32)":{"params":{"a":"The first float to compare.","b":"The second float to compare."},"returns":{"_0":"True if the first float is greater than or equal to the second, false otherwise."}},"integer(bytes32)":{"params":{"a":"The float to get the integer part of."},"returns":{"_0":"The integer part of the float."}},"inv(bytes32)":{"params":{"a":"The float to invert."},"returns":{"_0":"The inverted float."}},"isZero(bytes32)":{"params":{"a":"The float to check."},"returns":{"_0":"True if the float is zero, false otherwise."}},"log10(bytes32)":{"params":{"a":"The float to take the logarithm of."},"returns":{"_0":"The logarithm of the float."}},"lt(bytes32,bytes32)":{"params":{"a":"The first float to compare.","b":"The second float to compare."},"returns":{"_0":"True if the first float is less than the second, false otherwise."}},"lte(bytes32,bytes32)":{"params":{"a":"The first float to compare.","b":"The second float to compare."},"returns":{"_0":"True if the first float is less than or equal to the second, false otherwise."}},"max(bytes32,bytes32)":{"params":{"a":"The first float to compare.","b":"The second float to compare."},"returns":{"_0":"The larger of the two floats."}},"maxNegativeValue()":{"returns":{"_0":"The maximum negative value of a Float."}},"maxPositiveValue()":{"returns":{"_0":"The maximum positive value of a Float."}},"min(bytes32,bytes32)":{"params":{"a":"The first float to compare.","b":"The second float to compare."},"returns":{"_0":"The smaller of the two floats."}},"minNegativeValue()":{"returns":{"_0":"The minimum negative value of a Float."}},"minPositiveValue()":{"returns":{"_0":"The minimum positive value of a Float."}},"minus(bytes32)":{"params":{"a":"The float to negate."},"returns":{"_0":"The negated float."}},"mul(bytes32,bytes32)":{"params":{"a":"The first float to multiply.","b":"The second float to multiply."},"returns":{"_0":"The product of the two floats."}},"parse(string)":{"params":{"str":"The string to parse."},"returns":{"_0":"errorSelector The selector of the error if parsing failed. `0` if parsing succeeded.","_1":"parsed The parsed float. Caller MUST check `errorSelector` to determine if parsing succeeded."}},"pow(bytes32,bytes32)":{"params":{"a":"The base float.","b":"The exponent float."},"returns":{"_0":"The result of raising the base float to the power of the exponent"}},"pow10(bytes32)":{"params":{"a":"The exponent to raise 10 to."},"returns":{"_0":"The result of 10^a."}},"sqrt(bytes32)":{"params":{"a":"The float to take the square root of."},"returns":{"_0":"The square root of the float."}},"sub(bytes32,bytes32)":{"params":{"a":"The float to subtract from.","b":"The float to subtract."},"returns":{"_0":"The difference of the two floats."}},"toFixedDecimalLossless(bytes32,uint8)":{"params":{"decimals":"The number of decimals in the fixed point representation. e.g. If 1e18 represents 1 this would be 18 decimals.","float":"The Float struct to convert."},"returns":{"_0":"The fixed point decimal value as a uint256."}},"toFixedDecimalLossy(bytes32,uint8)":{"params":{"decimals":"The number of decimals in the fixed point representation. e.g. If 1e18 represents 1 this would be 18 decimals.","float":"The Float struct to convert."},"returns":{"_0":"value The fixed point decimal value as a uint256.","_1":"lossless True if the conversion was lossless, false otherwise."}},"zero()":{"returns":{"_0":"The zero value of a Float in its maximized representation."}}},"version":1},"userdoc":{"kind":"user","methods":{"FORMAT_DEFAULT_SCIENTIFIC_MAX()":{"notice":"The default maximum value for scientific formatting. 1e9"},"FORMAT_DEFAULT_SCIENTIFIC_MIN()":{"notice":"The default minimum value for scientific formatting. 1e-4"},"abs(bytes32)":{"notice":"Exposes `LibDecimalFloat.abs` for offchain use."},"add(bytes32,bytes32)":{"notice":"Exposes `LibDecimalFloat.add` for offchain use."},"ceil(bytes32)":{"notice":"Exposes `LibDecimalFloat.ceil` for offchain use."},"div(bytes32,bytes32)":{"notice":"Exposes `LibDecimalFloat.div` for offchain use."},"e()":{"notice":"Exposes `LibDecimalFloat.FLOAT_E` for offchain use."},"eq(bytes32,bytes32)":{"notice":"Exposes `LibDecimalFloat.eq` for offchain use."},"floor(bytes32)":{"notice":"Exposes `LibDecimalFloat.floor` for offchain use."},"format(bytes32)":{"notice":"Exposes `format(Float, Float, Float)` for offchain use. Provides default scientific formatting."},"format(bytes32,bool)":{"notice":"Exposes `LibFormatDecimalFloat.toDecimalString` for offchain use. provides raw bool interface for custom scientific formatting."},"format(bytes32,bytes32,bytes32)":{"notice":"Exposes `LibFormatDecimalFloat.toDecimalString` for offchain use."},"frac(bytes32)":{"notice":"Exposes `LibDecimalFloat.frac` for offchain use."},"fromFixedDecimalLossless(uint256,uint8)":{"notice":"Exposes `LibDecimalFloat.fromFixedDecimalLosslessPacked` for offchain use."},"fromFixedDecimalLossy(uint256,uint8)":{"notice":"Exposes `LibDecimalFloat.fromFixedDecimalLossyPacked` for offchain use."},"gt(bytes32,bytes32)":{"notice":"Exposes `LibDecimalFloat.gt` for offchain use."},"gte(bytes32,bytes32)":{"notice":"Exposes `LibDecimalFloat.gte` for offchain use."},"integer(bytes32)":{"notice":"Exposes `LibDecimalFloat.integer` for offchain use."},"inv(bytes32)":{"notice":"Exposes `LibDecimalFloat.inv` for offchain use."},"isZero(bytes32)":{"notice":"Exposes `LibDecimalFloat.isZero` for offchain use."},"log10(bytes32)":{"notice":"Exposes `LibDecimalFloat.log10` for offchain use."},"lt(bytes32,bytes32)":{"notice":"Exposes `LibDecimalFloat.lt` for offchain use."},"lte(bytes32,bytes32)":{"notice":"Exposes `LibDecimalFloat.lte` for offchain use."},"max(bytes32,bytes32)":{"notice":"Exposes `LibDecimalFloat.max` for offchain use."},"maxNegativeValue()":{"notice":"Exposes `LibDecimalFloat.FLOAT_MAX_NEGATIVE_VALUE` for offchain use."},"maxPositiveValue()":{"notice":"Exposes `LibDecimalFloat.FLOAT_MAX_POSITIVE_VALUE` for offchain use."},"min(bytes32,bytes32)":{"notice":"Exposes `LibDecimalFloat.min` for offchain use."},"minNegativeValue()":{"notice":"Exposes `LibDecimalFloat.FLOAT_MIN_NEGATIVE_VALUE` for offchain use."},"minPositiveValue()":{"notice":"Exposes `LibDecimalFloat.FLOAT_MIN_POSITIVE_VALUE` for offchain use."},"minus(bytes32)":{"notice":"Exposes `LibDecimalFloat.minus` for offchain use."},"mul(bytes32,bytes32)":{"notice":"Exposes `LibDecimalFloat.mul` for offchain use."},"parse(string)":{"notice":"Exposes `LibParseDecimalFloat.parseDecimalFloat` for offchain use."},"pow(bytes32,bytes32)":{"notice":"Exposes `LibDecimalFloat.pow` for offchain use."},"pow10(bytes32)":{"notice":"Exposes `LibDecimalFloat.pow10` for offchain use."},"sqrt(bytes32)":{"notice":"Exposes `LibDecimalFloat.sqrt` for offchain use."},"sub(bytes32,bytes32)":{"notice":"Exposes `LibDecimalFloat.sub` for offchain use."},"toFixedDecimalLossless(bytes32,uint8)":{"notice":"Exposes `LibDecimalFloat.toFixedDecimalLossless` for offchain use."},"toFixedDecimalLossy(bytes32,uint8)":{"notice":"Exposes `LibDecimalFloat.toFixedDecimalLossy` for offchain use."},"zero()":{"notice":"Exposes `LibDecimalFloat.FLOAT_ZERO` for offchain use."}},"version":1}},"settings":{"remappings":["@openzeppelin-contracts-5.6.1/=dependencies/@openzeppelin-contracts-5.6.1/","forge-std-1.16.1/=dependencies/forge-std-1.16.1/","mut/=dependencies/rain-string-0.2.0/src/lib/mut/","parse/=dependencies/rain-string-0.2.0/src/lib/parse/","rain-datacontract-0.1.0/=dependencies/rain-datacontract-0.1.0/","rain-deploy-0.1.2/=dependencies/rain-deploy-0.1.2/","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/"],"optimizer":{"enabled":true,"runs":1000000},"metadata":{"bytecodeHash":"none","appendCBOR":false},"compilationTarget":{"src/concrete/DecimalFloat.sol":"DecimalFloat"},"evmVersion":"cancun","libraries":{}},"sources":{"dependencies/@openzeppelin-contracts-5.6.1/utils/Bytes.sol":{"keccak256":"0xf80e4b96b6849936ea0fabd76cf81b13d7276295fddb1e1c07afb3ddf650b0ac","urls":["bzz-raw://6430007255ac11c6e9c4331a418f3af52ff66fbbae959f645301d025b20aeb08","dweb:/ipfs/QmQE5fjmBBRw9ndnzJuC2uskYss1gbaR7JdazoCf1FGoBj"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.6.1/utils/Panic.sol":{"keccak256":"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a","urls":["bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a","dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.6.1/utils/Strings.sol":{"keccak256":"0x1fdc2de9585ab0f1c417f02a873a2b6343cd64bb7ffec6b00ffa11a4a158d9e8","urls":["bzz-raw://1ab223a3d969c6cd7610049431dd42740960c477e45878f5d8b54411f7a32bdc","dweb:/ipfs/QmWumhjvhpKcwx3vDPQninsNVTc3BGvqaihkQakFkQYpaS"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.6.1/utils/math/Math.sol":{"keccak256":"0x59973a93b1f983f94e10529f46ca46544a9fec2b5f56fb1390bbe9e0dc79f857","urls":["bzz-raw://c55ef8f0b9719790c2ae6f81d80a59ffb89f2f0abe6bc065585bd79edce058c5","dweb:/ipfs/QmNNmCbX9NjPXKqHJN8R1WC2rNeZSQrPZLd6FF6AKLyH5Y"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.6.1/utils/math/SafeCast.sol":{"keccak256":"0xc8cae21c9ae4a46e5162ff9bf5b351d6fa6a6eba72d515f3bc1bdfeda7fdf083","urls":["bzz-raw://ce830ebcf28e31643caba318996db3763c36d52cd0f23798ba83c135355d45e9","dweb:/ipfs/QmdGPcvptHN7UBCbUYBbRX3hiRVRFLRwno8b4uga6uFNif"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.6.1/utils/math/SignedMath.sol":{"keccak256":"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3","urls":["bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03","dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ"],"license":"MIT"},"dependencies/rain-string-0.2.0/src/error/ErrParse.sol":{"keccak256":"0x7a69236ad67e39c20f6ade7973ec551c9a5bb5db4671c8afa95b80f35a996497","urls":["bzz-raw://4731c6ea05b4e820814380dbbd6dac14f5778a1e9194b8992148cf97a99ffbb2","dweb:/ipfs/QmUMnKNt2zQ42fjS4fpLqodXytiffVFzaKupAm8rNsrYVo"],"license":"LicenseRef-DCL-1.0"},"dependencies/rain-string-0.2.0/src/lib/parse/LibParseCMask.sol":{"keccak256":"0x91e798a6f71aafbd4743720eaa38a7f16f74c6c0ab2992e7e4982979e9df539a","urls":["bzz-raw://4782e62e0e5a5fbc7d6c757dcc90347d7ad064f25372a6c471ffa968e12b91d7","dweb:/ipfs/QmPohMsVTjm19gxYwxgAsTKJQRjkK2J1Pyah63nCtYBBnt"],"license":"LicenseRef-DCL-1.0"},"dependencies/rain-string-0.2.0/src/lib/parse/LibParseChar.sol":{"keccak256":"0x66c401d784e9461f709116441de3707685e08438cd83553db28fe8caf0e97238","urls":["bzz-raw://e6027d0f9d558953686f6eb78ca0b2f2e7d9d38e0be6d1435ffaaa4b90919593","dweb:/ipfs/QmQXDMTzmJrst2a4kHkcfjSsEdnPc4ikQs7VfGbCfe9QCc"],"license":"LicenseRef-DCL-1.0"},"dependencies/rain-string-0.2.0/src/lib/parse/LibParseDecimal.sol":{"keccak256":"0x72ccc4d7e0a1245897511e1efc15ddc80d423a8eb956249be7940a8e8f4e99fe","urls":["bzz-raw://3ca57acd6a7cbe16f2c03aa5a6e81ec7af1ad44078924358578560a32aead7c0","dweb:/ipfs/QmNukyUMS4JrzNHAYcpLbtYsD5CwYPEjfAaADv6qMZmqs6"],"license":"LicenseRef-DCL-1.0"},"src/concrete/DecimalFloat.sol":{"keccak256":"0x6326a6b5ffef0708b84712c0b891dfc7f2d88c38191628da1f40933951f2683b","urls":["bzz-raw://ad99eda6cc266d5d160439700d3c89a487e8e31d51538f2ad83435a1aac9f3ae","dweb:/ipfs/QmarsuZkgqG7jT9mYBh1VKNvjD5ZsVtJJTiRGbfMQAY669"],"license":"LicenseRef-DCL-1.0"},"src/error/ErrDecimalFloat.sol":{"keccak256":"0x53825ff4d1af4981100de46bd7536c611625fe7930b5c21921838cfed3a92243","urls":["bzz-raw://961197f4c7b6d560f71f67892bfd5b64300be0f0fdb20162058938567653643e","dweb:/ipfs/QmTJzmA5CEkmYrXJ2MHnfQ3wGm1Qj6xE1vNaqAqgUpEnvA"],"license":"LicenseRef-DCL-1.0"},"src/error/ErrFormat.sol":{"keccak256":"0xc760cb6018291753e7408d55d12d5e66c116f9750dc241bbc201f3b46ae33aa7","urls":["bzz-raw://cbc81bb7c26c8503926b579f978902bcc3227839bee04bd3500cc924d142d28e","dweb:/ipfs/QmXqMuqBCpckD1EnsBjweyLdRZxpvC2xSP9FWBZFh2vztR"],"license":"LicenseRef-DCL-1.0"},"src/error/ErrParse.sol":{"keccak256":"0x7fc9fe7421d78306d252d2853fd1be943d9cbd12ff7a9c8c3f286a8164bfe357","urls":["bzz-raw://7b4c434d01b53788968d185683d9633afa26d95396b1e91337a53ccaab0d44ab","dweb:/ipfs/QmQHmVjR37wwrCskiQviwkg7WkeBpr9uPddjuDxqzANXeV"],"license":"LicenseRef-DCL-1.0"},"src/generated/LogTables.pointers.sol":{"keccak256":"0x2325d92e3e248350a79f163fcb8738056ae4240b6a77f759ff5fcbf7b381f5ae","urls":["bzz-raw://9a52674114518573de7d184094b266bc2b5208953086f8ec35a494f048deefbb","dweb:/ipfs/QmTjuj1R9k4pFMBVpX6RcWG87Rdh9pRTZVHYo93SzBfmsH"],"license":"LicenseRef-DCL-1.0"},"src/lib/LibDecimalFloat.sol":{"keccak256":"0x59d2dad4b7e861ed835a79c61ae42b4b0d628f9c578f3bb3ecd7796ed530f196","urls":["bzz-raw://e565148a37f06299de3b6bcb3385ea0336f65c6c02c9ebfbc6f227f4e56d1c03","dweb:/ipfs/Qma6UNZifZc8zsf7J6B87CdCXhiCR6Zisyg9czsfaji6yY"],"license":"LicenseRef-DCL-1.0"},"src/lib/deploy/LibDecimalFloatDeploy.sol":{"keccak256":"0x79f59754c234e55420359efaa9af6ec851fadf8dfaecda6860c1ef99abcf1e64","urls":["bzz-raw://8303dde773c7c613981011fe9ee5d976338b3dab9c66cd67516a82b094596343","dweb:/ipfs/QmQnkeaReEwkKcFMvegAuuBoF2WyirRQmQG9CjKfdhQKnZ"],"license":"LicenseRef-DCL-1.0"},"src/lib/format/LibFormatDecimalFloat.sol":{"keccak256":"0x5aac6382e7f7040e68600333c1b00b0aedb3edb6bced84b63783f6d88fe0b4f0","urls":["bzz-raw://e96d30e34e1fa2cc4eb574ded30c0f6f93929dcc19cb571f555ca8c5ac32eaa7","dweb:/ipfs/QmRRtk84AqEdQrRXfeTzVUAbAktJTZ92iTLqjocQV4PDx7"],"license":"LicenseRef-DCL-1.0"},"src/lib/implementation/LibDecimalFloatImplementation.sol":{"keccak256":"0x47d0eeb542875548689465407162a19e4a21fb4591af5bb48d5758c0d1b93634","urls":["bzz-raw://631efb796ff17f277804f8a32df7d28630c2ae5300e7d74c37aa8ed1f86b5092","dweb:/ipfs/QmSfmMGQyxKYxu8UrWDEtuCggQ9HtFJy5cbMsYLPZbcTZ7"],"license":"LicenseRef-DCL-1.0"},"src/lib/parse/LibParseDecimalFloat.sol":{"keccak256":"0x703d2d37d8a14639a3eb2dcd61601b36552027e16b4e8414befe51f2d0b9ed38","urls":["bzz-raw://53fa45503e115a322a701a1289c5b5fcbe68090c83e0635af77d275d123f09f0","dweb:/ipfs/QmTBtz8uPLYXrTue9SmHBVdgjpFJYUU41Z48PAgu1nXafn"],"license":"LicenseRef-DCL-1.0"},"src/lib/table/LibLogTable.sol":{"keccak256":"0xccd2dea54cfb708c01e7e8e88c089742bbab18f5783be4632311fb4923d44c88","urls":["bzz-raw://f45fb78c16b5d66d56ba0e78acdb0ca5d315eb05efa2cd7a81e191aabe7aec52","dweb:/ipfs/QmQJ3TFFxTMu4HZ4qnjgmdmSNhGZLQRdCnSqAipEF1up1f"],"license":"LicenseRef-DCL-1.0"}},"version":1},"id":46} \ No newline at end of file diff --git a/crates/float/abi/TestDecimalFloat.json b/crates/float/abi/TestDecimalFloat.json index 3424c63..a1fd439 100644 --- a/crates/float/abi/TestDecimalFloat.json +++ b/crates/float/abi/TestDecimalFloat.json @@ -1 +1 @@ -{"abi":[{"type":"function","name":"packLossless","inputs":[{"name":"coefficient","type":"int224","internalType":"int224"},{"name":"exponent","type":"int32","internalType":"int32"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"unpack","inputs":[{"name":"float","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"int256","internalType":"int256"},{"name":"","type":"int256","internalType":"int256"}],"stateMutability":"pure"},{"type":"error","name":"CoefficientOverflow","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"}]}],"bytecode":{"object":"0x6080604052348015600e575f80fd5b506102848061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610034575f3560e01c806371516dd914610038578063b702fecd1461008c575b5f80fd5b61007261004636600461022b565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b9160e09190911d90565b604080519283526020830191909152015b60405180910390f35b61009f61009a366004610242565b6100ad565b604051908152602001610083565b5f6100be83601b0b8360030b6100c5565b9392505050565b5f805f6100d28585610124565b915091508061011c576040517f22c9f7bb00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044015b60405180910390fd5b509392505050565b5f601b83900b8314838382610188577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561016857620186a0860595506005850194505b8586601b0b1461018357600a86059550846001019450610168565b61019e565b855f0361019e57505f9250600191506102249050565b848560030b146101fa575f8512156101be57505f92508291506102249050565b6040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610113565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791505b9250929050565b5f6020828403121561023b575f80fd5b5035919050565b5f8060408385031215610253575f80fd5b823580601b0b8114610263575f80fd5b91506020830135600381900b8114610279575f80fd5b80915050925092905056","sourceMap":"332:770:50:-:0;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561000f575f80fd5b5060043610610034575f3560e01c806371516dd914610038578063b702fecd1461008c575b5f80fd5b61007261004636600461022b565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b9160e09190911d90565b604080519283526020830191909152015b60405180910390f35b61009f61009a366004610242565b6100ad565b604051908152602001610083565b5f6100be83601b0b8360030b6100c5565b9392505050565b5f805f6100d28585610124565b915091508061011c576040517f22c9f7bb00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044015b60405180910390fd5b509392505050565b5f601b83900b8314838382610188577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561016857620186a0860595506005850194505b8586601b0b1461018357600a86059550846001019450610168565b61019e565b855f0361019e57505f9250600191506102249050565b848560030b146101fa575f8512156101be57505f92508291506102249050565b6040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610113565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791505b9250929050565b5f6020828403121561023b575f80fd5b5035919050565b5f8060408385031215610253575f80fd5b823580601b0b8114610263575f80fd5b91506020830135600381900b8114610279575f80fd5b80915050925092905056","sourceMap":"332:770:50:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;979:121;;;;;;:::i;:::-;19261:17:42;19363:16;;19359:2;19348:32;;19409:4;19405:16;;;;;979:121:50;;;;;396:25:134;;;452:2;437:18;;430:34;;;;369:18;979:121:50;;;;;;;;599:163;;;;;;:::i;:::-;;:::i;:::-;;;1097:25:134;;;1085:2;1070:18;599:163:50;924:204:134;599:163:50;680:5;704:51;733:11;704:51;;746:8;704:51;;:28;:51::i;:::-;697:58;599:163;-1:-1:-1;;;599:163:50:o;18451:299:42:-;18539:5;18557:7;18566:13;18583:38;18593:17;18612:8;18583:9;:38::i;:::-;18556:65;;;;18636:8;18631:95;;18667:48;;;;;;;;396:25:134;;;437:18;;;430:34;;;369:18;;18667:48:42;;;;;;;;18631:95;-1:-1:-1;18742:1:42;18451:299;-1:-1:-1;;;18451:299:42:o;15810:2402::-;15895:11;16327:46;;;;;;15991:17;16047:8;16327:46;16651:668;;16708:4;16688:17;:24;:29;16684:135;;16762:3;16741:24;;;;16799:1;16787:13;;;;16684:135;17058:17;17036;17029:46;;;17022:151;;17120:2;17099:23;;;;17144:10;;;;;17022:151;;;16651:668;;;17215:17;17236:1;17215:22;17211:94;;-1:-1:-1;3653:1:42;;-1:-1:-1;17281:4:42;;-1:-1:-1;17261:25:42;;-1:-1:-1;17261:25:42;17211:94;17529:8;17516;17510:27;;;17506:393;;17731:1;17720:8;:12;17716:85;;;-1:-1:-1;3653:1:42;;-1:-1:-1;3653:1:42;;-1:-1:-1;17756:26:42;;-1:-1:-1;17756:26:42;17716:85;17825:59;;;;;;;;396:25:134;;;437:18;;;430:34;;;369:18;;17825:59:42;226:244:134;17506:393:42;-1:-1:-1;;18046:17:42;18132:28;;18166:4;18162:19;;;18129:53;;-1:-1:-1;15810:2402:42;;;;;;:::o;14:207:134:-;100:6;153:2;141:9;132:7;128:23;124:32;121:52;;;169:1;166;159:12;121:52;-1:-1:-1;192:23:134;;14:207;-1:-1:-1;14:207:134:o;475:444::-;540:6;548;601:2;589:9;580:7;576:23;572:32;569:52;;;617:1;614;607:12;569:52;656:9;643:23;710:5;706:2;695:21;688:5;685:32;675:60;;731:1;728;721:12;675:60;754:5;-1:-1:-1;811:2:134;796:18;;783:32;857:1;846:22;;;834:35;;824:63;;883:1;880;873:12;824:63;906:7;896:17;;;475:444;;;;;:::o","linkReferences":{}},"methodIdentifiers":{"packLossless(int224,int32)":"b702fecd","unpack(bytes32)":"71516dd9"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"CoefficientOverflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"ExponentOverflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int224\",\"name\":\"coefficient\",\"type\":\"int224\"},{\"internalType\":\"int32\",\"name\":\"exponent\",\"type\":\"int32\"}],\"name\":\"packLossless\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"float\",\"type\":\"bytes32\"}],\"name\":\"unpack\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"CoefficientOverflow(int256,int256)\":[{\"details\":\"Thrown when a coefficient overflows.\"}],\"ExponentOverflow(int256,int256)\":[{\"details\":\"Thrown when an exponent overflows.\"}]},\"kind\":\"dev\",\"methods\":{\"packLossless(int224,int32)\":{\"params\":{\"coefficient\":\"The coefficient to pack.\",\"exponent\":\"The exponent to pack.\"},\"returns\":{\"_0\":\"The packed float.\"}},\"unpack(bytes32)\":{\"params\":{\"float\":\"The float to unpack.\"},\"returns\":{\"_0\":\"coefficient The coefficient of the float.\",\"_1\":\"exponent The exponent of the float.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"packLossless(int224,int32)\":{\"notice\":\"Exposes `LibDecimalFloat.packLossless` for offchain use.\"},\"unpack(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.unpack` for offchain use.\"}},\"notice\":\"Additional exposed functions for testing the internals of floats from downstream environments, e.g. rust.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/concrete/TestDecimalFloat.sol\":\"TestDecimalFloat\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"appendCBOR\":false,\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[\":@openzeppelin-contracts-5.6.1/=dependencies/@openzeppelin-contracts-5.6.1/\",\":forge-std-1.16.1/=dependencies/forge-std-1.16.1/\",\":mut/=dependencies/rain-string-0.2.0/src/lib/mut/\",\":parse/=dependencies/rain-string-0.2.0/src/lib/parse/\",\":rain-datacontract-0.1.0/=dependencies/rain-datacontract-0.1.0/\",\":rain-deploy-0.1.2/=dependencies/rain-deploy-0.1.2/\",\":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/\"]},\"sources\":{\"src/error/ErrDecimalFloat.sol\":{\"keccak256\":\"0x53825ff4d1af4981100de46bd7536c611625fe7930b5c21921838cfed3a92243\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://961197f4c7b6d560f71f67892bfd5b64300be0f0fdb20162058938567653643e\",\"dweb:/ipfs/QmTJzmA5CEkmYrXJ2MHnfQ3wGm1Qj6xE1vNaqAqgUpEnvA\"]},\"src/lib/LibDecimalFloat.sol\":{\"keccak256\":\"0x59d2dad4b7e861ed835a79c61ae42b4b0d628f9c578f3bb3ecd7796ed530f196\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://e565148a37f06299de3b6bcb3385ea0336f65c6c02c9ebfbc6f227f4e56d1c03\",\"dweb:/ipfs/Qma6UNZifZc8zsf7J6B87CdCXhiCR6Zisyg9czsfaji6yY\"]},\"src/lib/implementation/LibDecimalFloatImplementation.sol\":{\"keccak256\":\"0x47d0eeb542875548689465407162a19e4a21fb4591af5bb48d5758c0d1b93634\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://631efb796ff17f277804f8a32df7d28630c2ae5300e7d74c37aa8ed1f86b5092\",\"dweb:/ipfs/QmSfmMGQyxKYxu8UrWDEtuCggQ9HtFJy5cbMsYLPZbcTZ7\"]},\"src/lib/table/LibLogTable.sol\":{\"keccak256\":\"0xccd2dea54cfb708c01e7e8e88c089742bbab18f5783be4632311fb4923d44c88\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://f45fb78c16b5d66d56ba0e78acdb0ca5d315eb05efa2cd7a81e191aabe7aec52\",\"dweb:/ipfs/QmQJ3TFFxTMu4HZ4qnjgmdmSNhGZLQRdCnSqAipEF1up1f\"]},\"test/concrete/TestDecimalFloat.sol\":{\"keccak256\":\"0x4cb7ac6a794d06ffcc482d9f0451e57de56d4b434411e70d61949634c56c36c7\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://c1776ad378af67be27a7c98225c58b70a33b0e6ffc4c68d69e23dcf303e8a929\",\"dweb:/ipfs/QmfK9C9g5ncMkHFvSvGFAru8bvPTY9qxTzB3KPgGAn1EyG\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.25+commit.b61c2a91"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"int256","name":"signedCoefficient","type":"int256"},{"internalType":"int256","name":"exponent","type":"int256"}],"type":"error","name":"CoefficientOverflow"},{"inputs":[{"internalType":"int256","name":"signedCoefficient","type":"int256"},{"internalType":"int256","name":"exponent","type":"int256"}],"type":"error","name":"ExponentOverflow"},{"inputs":[{"internalType":"int224","name":"coefficient","type":"int224"},{"internalType":"int32","name":"exponent","type":"int32"}],"stateMutability":"pure","type":"function","name":"packLossless","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"float","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"unpack","outputs":[{"internalType":"int256","name":"","type":"int256"},{"internalType":"int256","name":"","type":"int256"}]}],"devdoc":{"kind":"dev","methods":{"packLossless(int224,int32)":{"params":{"coefficient":"The coefficient to pack.","exponent":"The exponent to pack."},"returns":{"_0":"The packed float."}},"unpack(bytes32)":{"params":{"float":"The float to unpack."},"returns":{"_0":"coefficient The coefficient of the float.","_1":"exponent The exponent of the float."}}},"version":1},"userdoc":{"kind":"user","methods":{"packLossless(int224,int32)":{"notice":"Exposes `LibDecimalFloat.packLossless` for offchain use."},"unpack(bytes32)":{"notice":"Exposes `LibDecimalFloat.unpack` for offchain use."}},"version":1}},"settings":{"remappings":["@openzeppelin-contracts-5.6.1/=dependencies/@openzeppelin-contracts-5.6.1/","forge-std-1.16.1/=dependencies/forge-std-1.16.1/","mut/=dependencies/rain-string-0.2.0/src/lib/mut/","parse/=dependencies/rain-string-0.2.0/src/lib/parse/","rain-datacontract-0.1.0/=dependencies/rain-datacontract-0.1.0/","rain-deploy-0.1.2/=dependencies/rain-deploy-0.1.2/","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/"],"optimizer":{"enabled":true,"runs":1000000},"metadata":{"bytecodeHash":"none","appendCBOR":false},"compilationTarget":{"test/concrete/TestDecimalFloat.sol":"TestDecimalFloat"},"evmVersion":"cancun","libraries":{}},"sources":{"src/error/ErrDecimalFloat.sol":{"keccak256":"0x53825ff4d1af4981100de46bd7536c611625fe7930b5c21921838cfed3a92243","urls":["bzz-raw://961197f4c7b6d560f71f67892bfd5b64300be0f0fdb20162058938567653643e","dweb:/ipfs/QmTJzmA5CEkmYrXJ2MHnfQ3wGm1Qj6xE1vNaqAqgUpEnvA"],"license":"LicenseRef-DCL-1.0"},"src/lib/LibDecimalFloat.sol":{"keccak256":"0x59d2dad4b7e861ed835a79c61ae42b4b0d628f9c578f3bb3ecd7796ed530f196","urls":["bzz-raw://e565148a37f06299de3b6bcb3385ea0336f65c6c02c9ebfbc6f227f4e56d1c03","dweb:/ipfs/Qma6UNZifZc8zsf7J6B87CdCXhiCR6Zisyg9czsfaji6yY"],"license":"LicenseRef-DCL-1.0"},"src/lib/implementation/LibDecimalFloatImplementation.sol":{"keccak256":"0x47d0eeb542875548689465407162a19e4a21fb4591af5bb48d5758c0d1b93634","urls":["bzz-raw://631efb796ff17f277804f8a32df7d28630c2ae5300e7d74c37aa8ed1f86b5092","dweb:/ipfs/QmSfmMGQyxKYxu8UrWDEtuCggQ9HtFJy5cbMsYLPZbcTZ7"],"license":"LicenseRef-DCL-1.0"},"src/lib/table/LibLogTable.sol":{"keccak256":"0xccd2dea54cfb708c01e7e8e88c089742bbab18f5783be4632311fb4923d44c88","urls":["bzz-raw://f45fb78c16b5d66d56ba0e78acdb0ca5d315eb05efa2cd7a81e191aabe7aec52","dweb:/ipfs/QmQJ3TFFxTMu4HZ4qnjgmdmSNhGZLQRdCnSqAipEF1up1f"],"license":"LicenseRef-DCL-1.0"},"test/concrete/TestDecimalFloat.sol":{"keccak256":"0x4cb7ac6a794d06ffcc482d9f0451e57de56d4b434411e70d61949634c56c36c7","urls":["bzz-raw://c1776ad378af67be27a7c98225c58b70a33b0e6ffc4c68d69e23dcf303e8a929","dweb:/ipfs/QmfK9C9g5ncMkHFvSvGFAru8bvPTY9qxTzB3KPgGAn1EyG"],"license":"LicenseRef-DCL-1.0"}},"version":1},"id":50} \ No newline at end of file +{"abi":[{"type":"function","name":"packLossless","inputs":[{"name":"coefficient","type":"int224","internalType":"int224"},{"name":"exponent","type":"int32","internalType":"int32"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"unpack","inputs":[{"name":"float","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"int256","internalType":"int256"},{"name":"","type":"int256","internalType":"int256"}],"stateMutability":"pure"},{"type":"error","name":"CoefficientOverflow","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"}]}],"bytecode":{"object":"0x6080604052348015600e575f80fd5b506102848061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610034575f3560e01c806371516dd914610038578063b702fecd1461008c575b5f80fd5b61007261004636600461022b565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b9160e09190911d90565b604080519283526020830191909152015b60405180910390f35b61009f61009a366004610242565b6100ad565b604051908152602001610083565b5f6100be83601b0b8360030b6100c5565b9392505050565b5f805f6100d28585610124565b915091508061011c576040517f22c9f7bb00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044015b60405180910390fd5b509392505050565b5f601b83900b8314838382610188577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561016857620186a0860595506005850194505b8586601b0b1461018357600a86059550846001019450610168565b61019e565b855f0361019e57505f9250600191506102249050565b848560030b146101fa575f8512156101be57505f92508291506102249050565b6040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610113565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791505b9250929050565b5f6020828403121561023b575f80fd5b5035919050565b5f8060408385031215610253575f80fd5b823580601b0b8114610263575f80fd5b91506020830135600381900b8114610279575f80fd5b80915050925092905056","sourceMap":"332:770:59:-:0;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561000f575f80fd5b5060043610610034575f3560e01c806371516dd914610038578063b702fecd1461008c575b5f80fd5b61007261004636600461022b565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b9160e09190911d90565b604080519283526020830191909152015b60405180910390f35b61009f61009a366004610242565b6100ad565b604051908152602001610083565b5f6100be83601b0b8360030b6100c5565b9392505050565b5f805f6100d28585610124565b915091508061011c576040517f22c9f7bb00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044015b60405180910390fd5b509392505050565b5f601b83900b8314838382610188577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561016857620186a0860595506005850194505b8586601b0b1461018357600a86059550846001019450610168565b61019e565b855f0361019e57505f9250600191506102249050565b848560030b146101fa575f8512156101be57505f92508291506102249050565b6040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610113565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791505b9250929050565b5f6020828403121561023b575f80fd5b5035919050565b5f8060408385031215610253575f80fd5b823580601b0b8114610263575f80fd5b91506020830135600381900b8114610279575f80fd5b80915050925092905056","sourceMap":"332:770:59:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;979:121;;;;;;:::i;:::-;19261:17:51;19363:16;;19359:2;19348:32;;19409:4;19405:16;;;;;979:121:59;;;;;396:25:145;;;452:2;437:18;;430:34;;;;369:18;979:121:59;;;;;;;;599:163;;;;;;:::i;:::-;;:::i;:::-;;;1097:25:145;;;1085:2;1070:18;599:163:59;924:204:145;599:163:59;680:5;704:51;733:11;704:51;;746:8;704:51;;:28;:51::i;:::-;697:58;599:163;-1:-1:-1;;;599:163:59:o;18451:299:51:-;18539:5;18557:7;18566:13;18583:38;18593:17;18612:8;18583:9;:38::i;:::-;18556:65;;;;18636:8;18631:95;;18667:48;;;;;;;;396:25:145;;;437:18;;;430:34;;;369:18;;18667:48:51;;;;;;;;18631:95;-1:-1:-1;18742:1:51;18451:299;-1:-1:-1;;;18451:299:51:o;15810:2402::-;15895:11;16327:46;;;;;;15991:17;16047:8;16327:46;16651:668;;16708:4;16688:17;:24;:29;16684:135;;16762:3;16741:24;;;;16799:1;16787:13;;;;16684:135;17058:17;17036;17029:46;;;17022:151;;17120:2;17099:23;;;;17144:10;;;;;17022:151;;;16651:668;;;17215:17;17236:1;17215:22;17211:94;;-1:-1:-1;3653:1:51;;-1:-1:-1;17281:4:51;;-1:-1:-1;17261:25:51;;-1:-1:-1;17261:25:51;17211:94;17529:8;17516;17510:27;;;17506:393;;17731:1;17720:8;:12;17716:85;;;-1:-1:-1;3653:1:51;;-1:-1:-1;3653:1:51;;-1:-1:-1;17756:26:51;;-1:-1:-1;17756:26:51;17716:85;17825:59;;;;;;;;396:25:145;;;437:18;;;430:34;;;369:18;;17825:59:51;226:244:145;17506:393:51;-1:-1:-1;;18046:17:51;18132:28;;18166:4;18162:19;;;18129:53;;-1:-1:-1;15810:2402:51;;;;;;:::o;14:207:145:-;100:6;153:2;141:9;132:7;128:23;124:32;121:52;;;169:1;166;159:12;121:52;-1:-1:-1;192:23:145;;14:207;-1:-1:-1;14:207:145:o;475:444::-;540:6;548;601:2;589:9;580:7;576:23;572:32;569:52;;;617:1;614;607:12;569:52;656:9;643:23;710:5;706:2;695:21;688:5;685:32;675:60;;731:1;728;721:12;675:60;754:5;-1:-1:-1;811:2:145;796:18;;783:32;857:1;846:22;;;834:35;;824:63;;883:1;880;873:12;824:63;906:7;896:17;;;475:444;;;;;:::o","linkReferences":{}},"methodIdentifiers":{"packLossless(int224,int32)":"b702fecd","unpack(bytes32)":"71516dd9"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"CoefficientOverflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"ExponentOverflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int224\",\"name\":\"coefficient\",\"type\":\"int224\"},{\"internalType\":\"int32\",\"name\":\"exponent\",\"type\":\"int32\"}],\"name\":\"packLossless\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"float\",\"type\":\"bytes32\"}],\"name\":\"unpack\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"CoefficientOverflow(int256,int256)\":[{\"details\":\"Thrown when a coefficient overflows.\"}],\"ExponentOverflow(int256,int256)\":[{\"details\":\"Thrown when an exponent overflows.\"}]},\"kind\":\"dev\",\"methods\":{\"packLossless(int224,int32)\":{\"params\":{\"coefficient\":\"The coefficient to pack.\",\"exponent\":\"The exponent to pack.\"},\"returns\":{\"_0\":\"The packed float.\"}},\"unpack(bytes32)\":{\"params\":{\"float\":\"The float to unpack.\"},\"returns\":{\"_0\":\"coefficient The coefficient of the float.\",\"_1\":\"exponent The exponent of the float.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"packLossless(int224,int32)\":{\"notice\":\"Exposes `LibDecimalFloat.packLossless` for offchain use.\"},\"unpack(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.unpack` for offchain use.\"}},\"notice\":\"Additional exposed functions for testing the internals of floats from downstream environments, e.g. rust.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/concrete/TestDecimalFloat.sol\":\"TestDecimalFloat\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"appendCBOR\":false,\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[\":@openzeppelin-contracts-5.6.1/=dependencies/@openzeppelin-contracts-5.6.1/\",\":forge-std-1.16.1/=dependencies/forge-std-1.16.1/\",\":mut/=dependencies/rain-string-0.2.0/src/lib/mut/\",\":parse/=dependencies/rain-string-0.2.0/src/lib/parse/\",\":rain-datacontract-0.1.0/=dependencies/rain-datacontract-0.1.0/\",\":rain-deploy-0.1.2/=dependencies/rain-deploy-0.1.2/\",\":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/\"]},\"sources\":{\"src/error/ErrDecimalFloat.sol\":{\"keccak256\":\"0x53825ff4d1af4981100de46bd7536c611625fe7930b5c21921838cfed3a92243\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://961197f4c7b6d560f71f67892bfd5b64300be0f0fdb20162058938567653643e\",\"dweb:/ipfs/QmTJzmA5CEkmYrXJ2MHnfQ3wGm1Qj6xE1vNaqAqgUpEnvA\"]},\"src/lib/LibDecimalFloat.sol\":{\"keccak256\":\"0x59d2dad4b7e861ed835a79c61ae42b4b0d628f9c578f3bb3ecd7796ed530f196\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://e565148a37f06299de3b6bcb3385ea0336f65c6c02c9ebfbc6f227f4e56d1c03\",\"dweb:/ipfs/Qma6UNZifZc8zsf7J6B87CdCXhiCR6Zisyg9czsfaji6yY\"]},\"src/lib/implementation/LibDecimalFloatImplementation.sol\":{\"keccak256\":\"0x47d0eeb542875548689465407162a19e4a21fb4591af5bb48d5758c0d1b93634\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://631efb796ff17f277804f8a32df7d28630c2ae5300e7d74c37aa8ed1f86b5092\",\"dweb:/ipfs/QmSfmMGQyxKYxu8UrWDEtuCggQ9HtFJy5cbMsYLPZbcTZ7\"]},\"src/lib/table/LibLogTable.sol\":{\"keccak256\":\"0xccd2dea54cfb708c01e7e8e88c089742bbab18f5783be4632311fb4923d44c88\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://f45fb78c16b5d66d56ba0e78acdb0ca5d315eb05efa2cd7a81e191aabe7aec52\",\"dweb:/ipfs/QmQJ3TFFxTMu4HZ4qnjgmdmSNhGZLQRdCnSqAipEF1up1f\"]},\"test/concrete/TestDecimalFloat.sol\":{\"keccak256\":\"0x4cb7ac6a794d06ffcc482d9f0451e57de56d4b434411e70d61949634c56c36c7\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://c1776ad378af67be27a7c98225c58b70a33b0e6ffc4c68d69e23dcf303e8a929\",\"dweb:/ipfs/QmfK9C9g5ncMkHFvSvGFAru8bvPTY9qxTzB3KPgGAn1EyG\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.25+commit.b61c2a91"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"int256","name":"signedCoefficient","type":"int256"},{"internalType":"int256","name":"exponent","type":"int256"}],"type":"error","name":"CoefficientOverflow"},{"inputs":[{"internalType":"int256","name":"signedCoefficient","type":"int256"},{"internalType":"int256","name":"exponent","type":"int256"}],"type":"error","name":"ExponentOverflow"},{"inputs":[{"internalType":"int224","name":"coefficient","type":"int224"},{"internalType":"int32","name":"exponent","type":"int32"}],"stateMutability":"pure","type":"function","name":"packLossless","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"float","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"unpack","outputs":[{"internalType":"int256","name":"","type":"int256"},{"internalType":"int256","name":"","type":"int256"}]}],"devdoc":{"kind":"dev","methods":{"packLossless(int224,int32)":{"params":{"coefficient":"The coefficient to pack.","exponent":"The exponent to pack."},"returns":{"_0":"The packed float."}},"unpack(bytes32)":{"params":{"float":"The float to unpack."},"returns":{"_0":"coefficient The coefficient of the float.","_1":"exponent The exponent of the float."}}},"version":1},"userdoc":{"kind":"user","methods":{"packLossless(int224,int32)":{"notice":"Exposes `LibDecimalFloat.packLossless` for offchain use."},"unpack(bytes32)":{"notice":"Exposes `LibDecimalFloat.unpack` for offchain use."}},"version":1}},"settings":{"remappings":["@openzeppelin-contracts-5.6.1/=dependencies/@openzeppelin-contracts-5.6.1/","forge-std-1.16.1/=dependencies/forge-std-1.16.1/","mut/=dependencies/rain-string-0.2.0/src/lib/mut/","parse/=dependencies/rain-string-0.2.0/src/lib/parse/","rain-datacontract-0.1.0/=dependencies/rain-datacontract-0.1.0/","rain-deploy-0.1.2/=dependencies/rain-deploy-0.1.2/","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/"],"optimizer":{"enabled":true,"runs":1000000},"metadata":{"bytecodeHash":"none","appendCBOR":false},"compilationTarget":{"test/concrete/TestDecimalFloat.sol":"TestDecimalFloat"},"evmVersion":"cancun","libraries":{}},"sources":{"src/error/ErrDecimalFloat.sol":{"keccak256":"0x53825ff4d1af4981100de46bd7536c611625fe7930b5c21921838cfed3a92243","urls":["bzz-raw://961197f4c7b6d560f71f67892bfd5b64300be0f0fdb20162058938567653643e","dweb:/ipfs/QmTJzmA5CEkmYrXJ2MHnfQ3wGm1Qj6xE1vNaqAqgUpEnvA"],"license":"LicenseRef-DCL-1.0"},"src/lib/LibDecimalFloat.sol":{"keccak256":"0x59d2dad4b7e861ed835a79c61ae42b4b0d628f9c578f3bb3ecd7796ed530f196","urls":["bzz-raw://e565148a37f06299de3b6bcb3385ea0336f65c6c02c9ebfbc6f227f4e56d1c03","dweb:/ipfs/Qma6UNZifZc8zsf7J6B87CdCXhiCR6Zisyg9czsfaji6yY"],"license":"LicenseRef-DCL-1.0"},"src/lib/implementation/LibDecimalFloatImplementation.sol":{"keccak256":"0x47d0eeb542875548689465407162a19e4a21fb4591af5bb48d5758c0d1b93634","urls":["bzz-raw://631efb796ff17f277804f8a32df7d28630c2ae5300e7d74c37aa8ed1f86b5092","dweb:/ipfs/QmSfmMGQyxKYxu8UrWDEtuCggQ9HtFJy5cbMsYLPZbcTZ7"],"license":"LicenseRef-DCL-1.0"},"src/lib/table/LibLogTable.sol":{"keccak256":"0xccd2dea54cfb708c01e7e8e88c089742bbab18f5783be4632311fb4923d44c88","urls":["bzz-raw://f45fb78c16b5d66d56ba0e78acdb0ca5d315eb05efa2cd7a81e191aabe7aec52","dweb:/ipfs/QmQJ3TFFxTMu4HZ4qnjgmdmSNhGZLQRdCnSqAipEF1up1f"],"license":"LicenseRef-DCL-1.0"},"test/concrete/TestDecimalFloat.sol":{"keccak256":"0x4cb7ac6a794d06ffcc482d9f0451e57de56d4b434411e70d61949634c56c36c7","urls":["bzz-raw://c1776ad378af67be27a7c98225c58b70a33b0e6ffc4c68d69e23dcf303e8a929","dweb:/ipfs/QmfK9C9g5ncMkHFvSvGFAru8bvPTY9qxTzB3KPgGAn1EyG"],"license":"LicenseRef-DCL-1.0"}},"version":1},"id":59} \ No newline at end of file diff --git a/test/script/CopyArtifacts.t.sol b/test/script/CopyArtifacts.t.sol new file mode 100644 index 0000000..b10d1b0 --- /dev/null +++ b/test/script/CopyArtifacts.t.sol @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: LicenseRef-DCL-1.0 +// SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd +pragma solidity =0.8.25; + +import {Test} from "forge-std-1.16.1/src/Test.sol"; + +contract CopyArtifactsTest is Test { + function _assertCommittedMatches(string memory contractName) internal view { + string memory live = vm.readFile(string.concat("out/", contractName, ".sol/", contractName, ".json")); + string memory committed = vm.readFile(string.concat("crates/float/abi/", contractName, ".json")); + assertEq( + keccak256(bytes(live)), + keccak256(bytes(committed)), + string.concat(contractName, ": run `forge script script/CopyArtifacts.sol` to update the committed artifact") + ); + } + + function testDecimalFloatArtifactCommitted() external view { + _assertCommittedMatches("DecimalFloat"); + } + + function testTestDecimalFloatArtifactCommitted() external view { + _assertCommittedMatches("TestDecimalFloat"); + } +} From 7d6e64106f92308283b5a5f867b21cda06cdd1d9 Mon Sep 17 00:00:00 2001 From: thedavidmeister Date: Mon, 11 May 2026 00:00:00 +0400 Subject: [PATCH 5/9] style: forge fmt on CopyArtifacts.t.sol Co-Authored-By: Claude Opus 4.7 (1M context) --- test/script/CopyArtifacts.t.sol | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/script/CopyArtifacts.t.sol b/test/script/CopyArtifacts.t.sol index b10d1b0..5858283 100644 --- a/test/script/CopyArtifacts.t.sol +++ b/test/script/CopyArtifacts.t.sol @@ -11,7 +11,9 @@ contract CopyArtifactsTest is Test { assertEq( keccak256(bytes(live)), keccak256(bytes(committed)), - string.concat(contractName, ": run `forge script script/CopyArtifacts.sol` to update the committed artifact") + string.concat( + contractName, ": run `forge script script/CopyArtifacts.sol` to update the committed artifact" + ) ); } From 0a0562878d14376c877776b0d26a9478a2a91de0 Mon Sep 17 00:00:00 2001 From: thedavidmeister Date: Mon, 11 May 2026 00:08:57 +0400 Subject: [PATCH 6/9] ci: commit only the deterministic subset of forge artifacts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Full forge JSON includes solc source unit IDs in metadata.sources, sourceMap, and friends — these shift with filesystem enumeration order, so committed-on-Mac differs from rebuilt-on-Linux even with identical source. The diff check fights itself. Switching the committed copy to a jq-extracted subset of stable fields the rust crate actually consumes: - abi (alloy::sol! type generation) - bytecode.object (revm setup in evm.rs) - deployedBytecode.object (revm setup) LibCopyArtifacts shares the path conventions, the contract list and the jq extraction between script/CopyArtifacts.sol and the test/script/CopyArtifacts.t.sol staleness check. `ffi = true` in foundry.toml to invoke jq from inside forge script / test (only this script and test exercise FFI; everything else is fine). Co-Authored-By: Claude Opus 4.7 (1M context) --- crates/float/abi/DecimalFloat.json | 1074 +++++++++++++++++++++++- crates/float/abi/TestDecimalFloat.json | 91 +- foundry.toml | 2 + script/CopyArtifacts.sol | 16 +- script/lib/LibCopyArtifacts.sol | 48 ++ test/script/CopyArtifacts.t.sol | 22 +- 6 files changed, 1233 insertions(+), 20 deletions(-) create mode 100644 script/lib/LibCopyArtifacts.sol diff --git a/crates/float/abi/DecimalFloat.json b/crates/float/abi/DecimalFloat.json index cd3e24f..34562c9 100644 --- a/crates/float/abi/DecimalFloat.json +++ b/crates/float/abi/DecimalFloat.json @@ -1 +1,1073 @@ -{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"FORMAT_DEFAULT_SCIENTIFIC_MAX","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"view"},{"type":"function","name":"FORMAT_DEFAULT_SCIENTIFIC_MIN","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"view"},{"type":"function","name":"abs","inputs":[{"name":"a","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"add","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"b","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"ceil","inputs":[{"name":"a","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"div","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"b","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"e","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"eq","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"b","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"floor","inputs":[{"name":"a","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"format","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"scientific","type":"bool","internalType":"bool"}],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"format","inputs":[{"name":"a","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"format","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"scientificMin","type":"bytes32","internalType":"Float"},{"name":"scientificMax","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"frac","inputs":[{"name":"a","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"fromFixedDecimalLossless","inputs":[{"name":"value","type":"uint256","internalType":"uint256"},{"name":"decimals","type":"uint8","internalType":"uint8"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"fromFixedDecimalLossy","inputs":[{"name":"value","type":"uint256","internalType":"uint256"},{"name":"decimals","type":"uint8","internalType":"uint8"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"},{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"gt","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"b","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"gte","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"b","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"integer","inputs":[{"name":"a","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"inv","inputs":[{"name":"a","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"isZero","inputs":[{"name":"a","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"log10","inputs":[{"name":"a","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"view"},{"type":"function","name":"lt","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"b","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"lte","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"b","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"max","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"b","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"maxNegativeValue","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"maxPositiveValue","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"min","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"b","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"minNegativeValue","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"minPositiveValue","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"minus","inputs":[{"name":"a","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"mul","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"b","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"parse","inputs":[{"name":"str","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"},{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"pow","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"b","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"view"},{"type":"function","name":"pow10","inputs":[{"name":"a","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"view"},{"type":"function","name":"sqrt","inputs":[{"name":"a","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"view"},{"type":"function","name":"sub","inputs":[{"name":"a","type":"bytes32","internalType":"Float"},{"name":"b","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"toFixedDecimalLossless","inputs":[{"name":"float","type":"bytes32","internalType":"Float"},{"name":"decimals","type":"uint8","internalType":"uint8"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"toFixedDecimalLossy","inputs":[{"name":"float","type":"bytes32","internalType":"Float"},{"name":"decimals","type":"uint8","internalType":"uint8"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"zero","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"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":"Log10Negative","inputs":[{"name":"signedCoefficient","type":"int256","internalType":"int256"},{"name":"exponent","type":"int256","internalType":"int256"}]},{"type":"error","name":"Log10Zero","inputs":[]},{"type":"error","name":"LogTablesNotDeployed","inputs":[{"name":"tablesAddress","type":"address","internalType":"address"},{"name":"expectedCodehash","type":"bytes32","internalType":"bytes32"},{"name":"actualCodehash","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"LossyConversionFromFloat","inputs":[{"name":"signedCoefficient","type":"int256","internalType":"int256"},{"name":"exponent","type":"int256","internalType":"int256"}]},{"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":"MulDivOverflow","inputs":[{"name":"x","type":"uint256","internalType":"uint256"},{"name":"y","type":"uint256","internalType":"uint256"},{"name":"denominator","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"NegativeFixedDecimalConversion","inputs":[{"name":"signedCoefficient","type":"int256","internalType":"int256"},{"name":"exponent","type":"int256","internalType":"int256"}]},{"type":"error","name":"PowNegativeBase","inputs":[{"name":"signedCoefficient","type":"int256","internalType":"int256"},{"name":"exponent","type":"int256","internalType":"int256"}]},{"type":"error","name":"ScientificMinNotLessThanMax","inputs":[{"name":"scientificMin","type":"bytes32","internalType":"Float"},{"name":"scientificMax","type":"bytes32","internalType":"Float"}]},{"type":"error","name":"UnformatableExponent","inputs":[{"name":"exponent","type":"int256","internalType":"int256"}]},{"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":"ZeroNegativePower","inputs":[{"name":"b","type":"bytes32","internalType":"Float"}]},{"type":"error","name":"ZeroStringStartPointer","inputs":[]}],"bytecode":{"object":"0x6080604052348015600e575f80fd5b5060156019565b60b8565b73c51a14251b0dcf0ae24a96b7153991378938f5f53f7f2573004ac3a9ee7fc8d73654d76386f1b6b99e34cdf86a689c4691e47143420f811460b557604051630912d0ff60e31b815273c51a14251b0dcf0ae24a96b7153991378938f5f560048201527f2573004ac3a9ee7fc8d73654d76386f1b6b99e34cdf86a689c4691e47143420f60248201526044810182905260640160405180910390fd5b50565b614bb7806100c55f395ff3fe608060405234801561000f575f80fd5b506004361061029d575f3560e01c806381f7e2f511610171578063cde72ef3116100d2578063dd64691711610088578063e5526ecd1161006e578063e5526ecd1461062e578063e75f991f14610641578063ffae15ba14610654575f80fd5b8063dd64691714610608578063e0db58881461061b575f80fd5b8063d1de592a116100b8578063d1de592a146105bb578063d35273a7146105ce578063d3d6ffa8146105f5575f80fd5b8063cde72ef314610582578063d102b4d3146105a8575f80fd5b8063a19684b711610127578063bc1b392d1161010d578063bc1b392d1461050b578063bc62d8d814610511578063cb09682b1461055c575f80fd5b8063a19684b7146104d2578063a90d041a146104f8575f80fd5b806396ce1ec71161015757806396ce1ec7146104885780639b4afd991461049b578063a100a3d9146104bf575f80fd5b806381f7e2f5146104625780638dc2980714610475575f80fd5b80633447c0301161021b5780635ca0e7a4116101d1578063719cd99d116101b7578063719cd99d1461042957806373bfb2831461043c57806381a822721461044f575f80fd5b80635ca0e7a4146103f0578063602c35fc14610403575f80fd5b80633b3bd868116102015780633b3bd868146103b757806341aa0080146103ca5780635b23771d146103dd575f80fd5b80633447c03014610374578063371493ce14610397575f80fd5b80631ee62f111161027057806328fa1f011161025657806328fa1f011461033b5780633004fa411461034e5780633029740014610361575f80fd5b80631ee62f11146103155780632538835014610328575f80fd5b806304327dc5146102a1578063078b665b146102c75780630b6429bc146102da578063146e82ad14610302575b5f80fd5b6102b46102af36600461452f565b61067a565b6040519081526020015b60405180910390f35b6102b46102d5366004614546565b61068a565b6102ed6102e8366004614576565b61069c565b604080519283529015156020830152016102be565b6102b461031036600461452f565b6106b4565b6102b461032336600461452f565b6106d3565b6102b461033636600461452f565b6106f2565b6102b461034936600461452f565b610711565b6102b461035c366004614546565b61071b565b6102b461036f366004614546565b61073b565b610387610382366004614546565b610746565b60405190151581526020016102be565b6103aa6103a53660046145a0565b610751565b6040516102be91906145d2565b6102b46103c5366004614576565b61075d565b6102b46103d8366004614546565b610768565b6102b46103eb366004614576565b610773565b6102b46103fe36600461452f565b61077e565b7f80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff6102b4565b6102b461043736600461452f565b610788565b61038761044a366004614546565b610792565b6102b461045d36600461452f565b61079d565b610387610470366004614546565b6107a7565b610387610483366004614546565b6107b2565b6102b4610496366004614546565b6107bd565b6102b47c090000000000000000000000000000000000000000000000000000000181565b6103aa6104cd36600461452f565b6107c8565b7f80000000000000000000000000000000000000000000000000000000000000016102b4565b6102b4610506366004614546565b610812565b5f6102b4565b61052461051f366004614652565b61081d565b604080517fffffffff0000000000000000000000000000000000000000000000000000000090931683526020830191909152016102be565b7f7fffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffff6102b4565b7f7fffffff800000000000000000000000000000000000000000000000000000006102b4565b6103876105b6366004614546565b610836565b6102b46105c9366004614546565b610841565b6102b47ffffffffc0000000000000000000000000000000000000000000000000000000181565b6102b461060336600461452f565b61084c565b61038761061636600461452f565b610856565b6102b461062936600461452f565b61087c565b6103aa61063c36600461471b565b610886565b6102ed61064f366004614576565b61090f565b7fffffffbe19cfc6ef4f44cf88f14500d013df534fcaad48fca1d5ca47bea26fcc6102b4565b5f6106848261091b565b92915050565b5f6106958383610967565b9392505050565b5f806106a88484610983565b915091505b9250929050565b5f6106848273c51a14251b0dcf0ae24a96b7153991378938f5f56109c4565b5f6106848273c51a14251b0dcf0ae24a96b7153991378938f5f56109f0565b5f6106848273c51a14251b0dcf0ae24a96b7153991378938f5f5610a3e565b5f61068482610a71565b5f610695838373c51a14251b0dcf0ae24a96b7153991378938f5f5610ab2565b5f6106958383610d0d565b5f6106958383610d70565b60606106958383610dbe565b5f6106958383610e51565b5f6106958383610e6c565b5f6106958383610eb1565b5f61068482610ee4565b5f61068482610fa6565b5f6106958383611052565b5f610684826110a2565b5f61069583836110e7565b5f6106958383611137565b5f6106958383611186565b6060610684827ffffffffc000000000000000000000000000000000000000000000000000000017c0900000000000000000000000000000000000000000000000000000001610886565b5f61069583836111cb565b5f805f8061082a856111d6565b90969095509350505050565b5f61069583836112c4565b5f6106958383611313565b5f61068482611358565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff821615610684565b5f6106848261138a565b606061089283836112c4565b6108d7576040517f3be5bf9400000000000000000000000000000000000000000000000000000000815260048101849052602481018390526044015b60405180910390fd5b5f6108e1856110a2565b9050610906856108f183876112c4565b8061090157506109018386611137565b610dbe565b95945050505050565b5f806106a884846113cb565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d61094d828261140b565b90925090505f61095d8383611459565b5095945050505050565b5f6109728383611137565b61097c5781610695565b5090919050565b5f807bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8416601b0b60e085901d6109b782828761155f565b9350935050509250929050565b5f610695837fffffffff0000000000000000000000000000000000000000000000000000000584610ab2565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d610a238483836116ae565b90925090505f610a338383611459565b509695505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d610a2384838361181f565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d82610aa48383611b54565b9150505f610a338284611459565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff848116601b0b9060e086901d908516610aef5750600191506106959050565b5f8213610b8857815f03610b4c57610b07855f6112c4565b15610b41576040517f8be82972000000000000000000000000000000000000000000000000000000008152600481018690526024016108ce565b505f91506106959050565b6040517fcceba0f100000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016108ce565b610b93856001610d70565b8015610ba45750610ba4865f611137565b15610bb3578592505050610695565b610bbd855f6112c4565b15610be657610bdd610bce8761091b565b610bd787611358565b86610ab2565b92505050610695565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8516601b0b60e086901d5f80610c198484611b54565b915091505f610c2983855f611bbc565b905060015f8080610c608f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b9160e09190911d90565b915091505b60018510610ca75784600116600103610c8a57610c8484848484611cd3565b90945092505b600185901c9450610c9d82828484611cd3565b9092509050610c65565b5f80610cb48f8e8e61181f565b91509150610cc482828a8d611cd3565b9092509050610cd48f83836116ae565b9092509050610ce582828888611cd3565b90925090505f610cf58383611459565b509e5050505050505050505050505050509392505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686611df2565b915091505f610d618383611459565b509a9950505050505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d610db384848484612416565b979650505050505050565b60607bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d5f829003610e2e576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525092505050610684565b8315610e4757610e3e828261242d565b92505050610684565b61090682826126fd565b5f805f610e5e8585612e64565b915091506109068282612ec6565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686612f20565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d610906828286612f4a565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828112610f1b57509192915050565b5f80610f278484611b54565b915091505f84128015610f3957508015155b15610f8f57610f8a82847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4612f20565b935091505b5f610f9a8385611459565b50979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828112610fdd57509192915050565b5f80610fe98484611b54565b91509150805f03610ffe575093949350505050565b5f811315610f8f57610f8a82847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4612fa6565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d611095848484846130d6565b1315979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828212156110dc5761094d82826131aa565b5f61095d8383611459565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d61112a848484846130d6565b1215979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d61117a848484846130d6565b12979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686611cd3565b5f61097283836112c4565b80515f908190602084810191850101828080806111f3868661324d565b929650909450925090507fffffffff0000000000000000000000000000000000000000000000000000000084165f036112b557848303611285575f806112398484611459565b915091508061127457507f32b8b8be000000000000000000000000000000000000000000000000000000009a5f9a5098505050505050505050565b505f9a909950975050505050505050565b507fad384e8700000000000000000000000000000000000000000000000000000000985f98509650505050505050565b5091975f975095505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d611307848484846130d6565b13979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686612fa6565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d61094d82826131aa565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d826113bd8383611b54565b5090505f610a338284611459565b5f805f805f6113da87876136ec565b9250925092505f806113ec8585611459565b91509150818380156113fb5750815b9650965050505050509250929050565b5f806106a87f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb48686611df2565b5f601b83900b83148383826114bd577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561149d57620186a0860595506005850194505b8586601b0b146114b857600a8605955084600101945061149d565b6114d3565b855f036114d357505f9250600191506106ad9050565b848560030b1461152f575f8512156114f357505f92508291506106ad9050565b6040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016108ce565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f8512156115a5576040517f4a7d166b00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016108ce565b845f036115b757505f905060016116a6565b8460ff8416850185811215611602576040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101889052602481018790526044016108ce565b5f805f83121561166c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb3831215611643575f8095509550505050506116a6565b825f03600a0a915081848161165a5761165a614744565b04955050840290911491506116a69050565b5f83131561169b5761167f83600a6148bc565b915061168b82856148c7565b9550600194506116a69350505050565b509193506001925050505b935093915050565b5f805f8412156116ea576116c284846131aa565b90945092506116d28585856116ae565b90945092506116e1848461140b565b915091506116a6565b5f806116f68686611b54565b9092509050845f80806117098585613748565b9194509250905061270d6127106117216001826148de565b8514611738576117328d8686613837565b90925090505b83156117c3575f61174a866001614904565b90505b80848583028161175f5761175f614744565b051461177657600a84059350600a8805975061174d565b6117b7611783858861492b565b8961178e878561492b565b8f87877ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6138f0565b909d509b506117ea9050565b819b507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc9a505b5050505050866117fb84835f611bbc565b611806886001614904565b6118109190614904565b94509450505050935093915050565b5f80838361182d828261398d565b90965094505f86136118ae57855f03611872576040517f561fc7b500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5d3fd4db00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016108ce565b5050837f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000036118ec576118e283604c614904565b5f915091506116a6565b7f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000008412158061193b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb561195d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb45b5f0b8412611b18575f805f805f8561197657604b611979565b604c5b611983908a614904565b90505f80876119b0577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000006119d1565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca0000000000000000005b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff169050808c81611a0357611a03614744565b05818102955090850193507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18019050611a3c8c826139e3565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000000295508594508a8414611ac8576123278114611aa357611a7e8c826001016139e3565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000002611ac5565b7f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000005b94505b50611af8838b848c89897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb46138f0565b909a509850611b098a8a835f612fa6565b975097505050505050506116a6565b611b22858561140b565b9095509350611b3286868661181f565b9095509350611b4185856131aa565b92509250506116a6565b50935093915050565b5f805f8312611b6757508290505f6106ad565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4831215611b9957505f9050826106ad565b5f839003600a0a808581611baf57611baf614744565b0794859003959350505050565b5f818303611bcb575082610695565b82821315611c0e57828203604c811380611be557505f8113155b15611bf3575f915050610695565b80600a0a8581611c0557611c05614744565b05915050610695565b818303604c811380611c2057505f8113155b15611c68576040517f1d5d6d100000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490526064016108ce565b600a81900a85810286828281611c8057611c80614744565b0514611cc9576040517f1d5d6d100000000000000000000000000000000000000000000000000000000081526004810188905260248101879052604481018690526064016108ce565b9250610695915050565b5f8085158415178015611ceb575f92505f9150611de8565b611cf58487614904565b91505f611d0188613a6a565b90505f611d0d87613a6a565b90505f611d1a8383613ad0565b5090505f6f0785ee10d5da46d900f436a000000000821115611d4f576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a7640000821115611d7057670de0b6b3a7640000820491506012015b633b9aca00821115611d8957633b9aca00820491506009015b612710821115611d9e57612710820491506004015b8115611db257600a82049150600101611d9e565b611dbc8187614904565b9550611dde8b8a611dd88787611dd387600a6148bc565b613b0b565b89613bf0565b9097509550505050505b5094509492505050565b5f80835f03611e37576040517f7a97930f00000000000000000000000000000000000000000000000000000000815260048101879052602481018690526044016108ce565b855f03611e4857505f90508061240d565b5f805f80611e568a8a613cf7565b919b5099509150611e678888613cf7565b919950975090505f611e788b613a6a565b90505f611e848a613a6a565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c818310156122a1578415611ee257507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000009050604b612260565b6f4b3b4ca85a86c47a098a22400000000083101561200e57678ac7230489e80000831015611f72576402540be400831015611f4057620186a0831015611f305750620186a0905060056121e9565b506402540be4009050600a6121e9565b655af3107a4000831015611f5f5750655af3107a40009050600e6121e9565b50678ac7230489e80000905060136121e9565b6b204fce5e3e25026110000000831015611fc45769152d02c7e14af6800000831015611fad575069152d02c7e14af6800000905060176121e9565b506b204fce5e3e250261100000009050601c6121e9565b6d314dc6448d9338c15b0a00000000831015611ff357506d314dc6448d9338c15b0a00000000905060216121e9565b506f4b3b4ca85a86c47a098a224000000000905060266121e9565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156121065773af298d050e4395d69670b12b7f410000000000008310156120a1577172cb5bd86321e38cb6ce6682e8000000000083101561208257507172cb5bd86321e38cb6ce6682e800000000009050602b6121e9565b5073af298d050e4395d69670b12b7f41000000000000905060306121e9565b76010b46c6cdd6e3e0828f4db456ff0c8ea00000000000008310156120e2575076010b46c6cdd6e3e0828f4db456ff0c8ea0000000000000905060356121e9565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a6121e9565b7c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000083101561219c577a026e4d30eccc3215dd8f3157d27e23acbdcfe6800000000000000083101561217457507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f6121e9565b507c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000905060446121e9565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca0000000000000000008310156121e957507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b81831161221d57600a820491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016121e9565b815f03612260576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018d9052602481018c90526044016108ce565b856122a1576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018f9052602481018e90526044016108ce565b807f8000000000000000000000000000000000000000000000000000000000000000018d126122d457808d039c50612347565b7f80000000000000000000000000000000000000000000000000000000000000009c90038c015f81131561234757807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038b1361233457998a0199612347565b5f8099509950505050505050505061240d565b5f808e12801561235657505f8c135b15612393577f80000000000000000000000000000000000000000000000000000000000000008e01808d1361238b575f61238f565b808d035b9150505b8b818f010397506123b08f8e6123aa888789613b0b565b8b613bf0565b90995097505f8113156123fa57604c8113156123da575f809a509a5050505050505050505061240d565b80600a0a89816123ec576123ec614744565b059850885f036123fa575f97505b5096985094965061240d95505050505050565b94509492505050565b5f612423858585856130d6565b1495945050505050565b6060612439838361398d565b90935091505f8061246a7f161bcca7119915b50764b4abe86529797775a5f171951000000000000000000086614976565b1561249a57507f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000009050604c6124c1565b507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000009050604b5b5f6124cc8387614976565b90505f6124d984886149dd565b90505f808312156124f3575060016124f0836149f0565b92505b5f82121561250a57506001612507826149f0565b91505b60408051602081019091525f81528215612613575f8061252b600a89614a20565b90505b6125388186614976565b5f0361255d57612549600a82614a20565b90508161255581614a33565b92505061252e565b60408051602081019091525f8082525b838110156125be57816040516020016125869190614a81565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052915060010161256d565b505b6125cb600a876149dd565b5f036125e3576125dc600a87614976565b95506125c0565b806125ed87613f98565b6040516020016125fe929190614ab9565b60405160208183030381529060405293505050505b5f61261d85613f98565b90505f61262a878b614904565b90505f81156126605761263c82613f98565b60405160200161264c9190614afb565b604051602081830303815290604052612670565b60405180602001604052805f8152505b90505f8561268c5760405180602001604052805f8152506126c3565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b9050808486846040516020016126dc9493929190614b2c565b6040516020818303038152906040529a505050505050505050505092915050565b60606103e882138061271857506127156103e86149f0565b82125b15612752576040517fe44c72b0000000000000000000000000000000000000000000000000000000008152600481018390526024016108ce565b5f80841290811561276d57612766856149f0565b9050612770565b50835b5f61277a82614024565b80519091505f5b81811080156127fd57508281612798600185614b56565b6127a29190614b56565b815181106127b2576127b2614b69565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f3000000000000000000000000000000000000000000000000000000000000000145b15612814578061280c81614a33565b915050612781565b5f61281f8284614b56565b90505f61282c838a614904565b90505f876128485760405180602001604052805f81525061287f565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b90505f82126129f957815f6128948286614b96565b67ffffffffffffffff8111156128ac576128ac614625565b6040519080825280601f01601f1916602001820160405280156128d6576020820181803683370190505b5090505f5b85811015612948578881815181106128f5576128f5614b69565b602001015160f81c60f81b82828151811061291257612912614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053506001016128db565b505f5b828110156129c5577f30000000000000000000000000000000000000000000000000000000000000008261297f8389614b96565b8151811061298f5761298f614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535060010161294b565b5082816040516020016129d9929190614ba9565b6040516020818303038152906040529a5050505050505050505050610684565b5f612a03836149f0565b905080841115612c1a575f612a188286614b56565b90505f612a26866001614b96565b67ffffffffffffffff811115612a3e57612a3e614625565b6040519080825280601f01601f191660200182016040528015612a68576020820181803683370190505b5090505f5b82811015612ada57898181518110612a8757612a87614b69565b602001015160f81c60f81b828281518110612aa457612aa4614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612a6d565b507f2e00000000000000000000000000000000000000000000000000000000000000818381518110612b0e57612b0e614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5b83811015612be55789612b518285614b96565b81518110612b6157612b61614b69565b01602001517fff00000000000000000000000000000000000000000000000000000000000000168282612b95866001614b96565b612b9f9190614b96565b81518110612baf57612baf614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612b3e565b508381604051602001612bf9929190614ba9565b6040516020818303038152906040529b505050505050505050505050610684565b5f612c258583614b56565b90505f85612c34836002614b96565b612c3e9190614b96565b67ffffffffffffffff811115612c5657612c56614625565b6040519080825280601f01601f191660200182016040528015612c80576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f81518110612cb657612cb6614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f2e0000000000000000000000000000000000000000000000000000000000000081600181518110612d1857612d18614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5b82811015612dc3577f300000000000000000000000000000000000000000000000000000000000000082612d7d836002614b96565b81518110612d8d57612d8d614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612d48565b505f5b86811015612be557898181518110612de057612de0614b69565b01602001517fff00000000000000000000000000000000000000000000000000000000000000168282612e14866002614b96565b612e1e9190614b96565b81518110612e2e57612e2e614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612dc6565b5f805f805f612e7387876136ec565b92509250925080612eba576040517fc471796600000000000000000000000000000000000000000000000000000000815260048101849052602481018390526044016108ce565b50909590945092505050565b5f805f612ed38585611459565b9150915080612f18576040517f22c9f7bb00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016108ce565b509392505050565b5f80612f2c84846131aa565b9094509250612f3d86868686612fa6565b9150915094509492505050565b5f805f612f5886868661155f565b9150915080612f9d576040517f05e4767800000000000000000000000000000000000000000000000000000000815260048101879052602481018690526044016108ce565b50949350505050565b5f8085158415178015612fd257865f03612fc6578484925092505061240d565b8686925092505061240d565b612fdc878761398d565b9097509550612feb858561398d565b909550935085841315612fff579395929492935b838603604c81111561301857878793509350505061240d565b80600a0a868161302a5761302a614744565b0595505086850180881860ff90811c151589881890911c151680156130c557877f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff036130ac576040517fd556b111000000000000000000000000000000000000000000000000000000008152600481018a9052602481018990526044016108ce565b600a9687900596909805860197600197909701966130c9565b8198505b5096979596505050505050565b5f80851584151781871282861218178584141780156130fb578685925092505061240d565b505f8584131561310f575092949193919260015b8386035f8112604c8213178015613142578215613134575f899450945050505061240d565b885f9450945050505061240d565b600a82900a8981028a82828161315a5761315a614744565b0514613186578415613176575f8b96509650505050505061240d565b8a5f96509650505050505061240d565b841561319b57889650945061240d9350505050565b955087945061240d9350505050565b5f807f80000000000000000000000000000000000000000000000000000000000000008403613243577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8303613236576040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101859052602481018490526044016108ce565b600a840593508260010192505b50505f9190910391565b5f8281806132628386652000000000006140e0565b9250858314158361327c81886703ff0000000000006140e0565b94508085036132b657507f34bd20690000000000000000000000000000000000000000000000000000000094505f92508291506136e39050565b5f806132c28a88614109565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613300575095505f93508392506136e3915050565b86519095506540000000000060015f9290921a9190911b16151588871016915050801561358f57506001909301925f8461334381896703ff0000000000006140e0565b955080860361337e57507f7bfa48af0000000000000000000000000000000000000000000000000000000095505f93508392506136e3915050565b855b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018051908a1160015f9290921a9190911b6601000000000000161515166001036133ed577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613380565b818114613444575f806134008484614109565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613440575097505f95508594506136e39350505050565b9350505b5f83121561347f57507f7bfa48af0000000000000000000000000000000000000000000000000000000096505f94508493506136e392505050565b831561348b57825f0392505b80820394505f8513156134cb57507f013b2aaa0000000000000000000000000000000000000000000000000000000096505f94508493506136e392505050565b855f036134da5782955061358c565b5f859003604381111561351b57507f32b8b8be0000000000000000000000000000000000000000000000000000000097505f95508594506136e39350505050565b600a0a8681025f8883838161353257613532614744565b0514159050601b82900b82141581806135485750805b1561358457507f32b8b8be000000000000000000000000000000000000000000000000000000009a505f98508897506136e39650505050505050565b505084019650505b50505b84516c2000000020000000000000000060015f9290921a9190911b1615158786101680156136d457600190950194856135cf818a652000000000006140e0565b9650866135e5818b6703ff0000000000006140e0565b975080880361362257507f013b2aaa0000000000000000000000000000000000000000000000000000000097505f95508594506136e39350505050565b505f8061362f838a614109565b90925090507fffffffff0000000000000000000000000000000000000000000000000000000082161561366f575097505f95508594506136e39350505050565b9250508482015f8313801561368357508581125b8061369757505f8312801561369757508581135b156136d057507fd556b1110000000000000000000000000000000000000000000000000000000097505f95508594506136e39350505050565b9450505b845f036136df575f93505b5050505b92959194509250565b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86111561373757600a860460018201600a88065f1493509350935050613741565b8593509150600190505b9250925092565b5f805f837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0361378057508391505f90506001613741565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc84121561380e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb08412156137df57505f9150508215156001613741565b5f846004015f03600a0a90505f8187816137fb576137fb614744565b0594505080840286141592509050613741565b5f841261382357505f91508190506001613741565b50505060048101600a0a82025f6001613741565b5f80806064613849600a612328614a20565b613856600a612328614a20565b6138619060026148c7565b61386c906001614b96565b6138769190614b96565b6138809190614b96565b90506138c4565b5f8052600280600a8504028301601e833c5f80516107d0840193505f80526001600a8606600a6064880402018501601f853c5f5101949350505050565b6138cf858288613887565b92508315611b4b576138e5600186018288613887565b915050935093915050565b5f80888803613903575083905081613981565b5f805f806139138c8b8f8d612f20565b915091505f806139258a8a8d8c612f20565b9150915061393584848484611cd3565b8096508197505050505050505f8061394f8b8b8f8d612f20565b915091505f8061396186868686611df2565b915091505f8061397384848f8e612fa6565b909a50985050505050505050505b97509795505050505050565b5f805f805f61399c8787613cf7565b92509250925080612eba576040517f05e51ecb00000000000000000000000000000000000000000000000000000000815260048101889052602481018790526044016108ce565b5f806139f2600a612328614a20565b6139fd9060026148c7565b613a08906001614b96565b90505f613a18600a612328614a20565b90506002600a8504026001015f8052600281601e883c505f51617fff81169350618000811615613a4757918101915b505f80526001600a8506600a6064870402018301601f873c50505f510192915050565b5f80821215613ac7577f80000000000000000000000000000000000000000000000000000000000000008203613ac157507f8000000000000000000000000000000000000000000000000000000000000000919050565b505f0390565b5090565b919050565b5f807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83850993909202808410938190039390930393915050565b5f805f613b188686613ad0565b91509150815f03613b3c57838181613b3257613b32614744565b0492505050610695565b838210613b86576040517f6c59da120000000000000000000000000000000000000000000000000000000081526004810187905260248101869052604481018590526064016108ce565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f8587181215613cba577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115613ca757613c4f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001614b96565b8403613c7f57507f800000000000000000000000000000000000000000000000000000000000000090508161240d565b613c8a600a85614a20565b613c93906149f0565b613c9e846001614904565b9150915061240d565b613cb0846149f0565b839150915061240d565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115613ced57613c93600a85614a20565b508290508161240d565b5f805f845f03613d0f57505f91508190506001613741565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee800000000000000000085055f03613f23576f4b3b4ca85a86c47a098a2240000000008505158015613d7857507f80000000000000000000000000000000000000000000000000000000000000268412155b15613d99576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a000000000000008505158015613de157507f80000000000000000000000000000000000000000000000000000000000000138412155b15613dfa57678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c6400000000000000008505158015613e4657507f800000000000000000000000000000000000000000000000000000000000000a8412155b15613e5c576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e40000000000000000008505158015613eab57507f80000000000000000000000000000000000000000000000000000000000000028412155b15613ec157606485029450600284039350613e5c565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000008505158015613f1157507f80000000000000000000000000000000000000000000000000000000000000018412155b15613f2357600a850294506001840393505b600a80860290810586148015613f5957507f80000000000000000000000000000000000000000000000000000000000000018512155b15613f68578095506001850394505b50939492935050507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000008305151590565b60605f8212613fb55760405180602001604052805f815250613fec565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b613ffd60ff84901d80850118614024565b60405160200161400e929190614ba9565b6040516020818303038152906040529050919050565b60605f61403083614233565b60010190505f8167ffffffffffffffff81111561404f5761404f614625565b6040519080825280601f01601f191660200182016040528015614079576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461408357509392505050565b5f5b5f82600186515f1a1b16118385101615614101576001840193506140e2565b509192915050565b81515f90819065200000000000600191831a9190911b161515838510168085019082806141368488614314565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615614171575093505f92506106ad915050565b825f036141d4577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116141a5575f6141c7565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b955093506106ad92505050565b7f80000000000000000000000000000000000000000000000000000000000000008111614201575f614223565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95505f0393505050509250929050565b5f807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061427b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106142a7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106142c557662386f26fc10000830492506010015b6305f5e10083106142dd576305f5e100830492506008015b61271083106142f157612710830492506004015b60648310614303576064830492506002015b600a83106106845760010192915050565b5f8082841061434757507f34bd20690000000000000000000000000000000000000000000000000000000090505f6106ad565b835f03614380576040517fda6966d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60305f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501815b8782101580156143b85750604d83105b156143fb57815160018401937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90930192600a0a5f9190911a85900302016143a8565b8782106145215781515f1a849003600181111561444357507f0fdc26350000000000000000000000000000000000000000000000000000000095505f94506106ad9350505050565b600a84900a810282810183111561448657507f0fdc26350000000000000000000000000000000000000000000000000000000096505f95506106ad945050505050565b9190910190507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101905b8782106145215781515f1a603081146144f657507f0fdc26350000000000000000000000000000000000000000000000000000000095505f94506106ad9350505050565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101906144b2565b5f9890975095505050505050565b5f6020828403121561453f575f80fd5b5035919050565b5f8060408385031215614557575f80fd5b50508035926020909101359150565b803560ff81168114613acb575f80fd5b5f8060408385031215614587575f80fd5b8235915061459760208401614566565b90509250929050565b5f80604083850312156145b1575f80fd5b82359150602083013580151581146145c7575f80fd5b809150509250929050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60208284031215614662575f80fd5b813567ffffffffffffffff80821115614679575f80fd5b818401915084601f83011261468c575f80fd5b81358181111561469e5761469e614625565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156146e4576146e4614625565b816040528281528760208487010111156146fc575f80fd5b826020860160208301375f928101602001929092525095945050505050565b5f805f6060848603121561472d575f80fd5b505081359360208301359350604090920135919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b600181815b808511156147f757817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156147dd576147dd614771565b808516156147ea57918102915b93841c93908002906147a3565b509250929050565b5f8261480d57506001610684565b8161481957505f610684565b816001811461482f576002811461483957614855565b6001915050610684565b60ff84111561484a5761484a614771565b50506001821b610684565b5060208310610133831016604e8410600b8410161715614878575081810a610684565b614882838361479e565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156148b4576148b4614771565b029392505050565b5f61069583836147ff565b808202811582820484141761068457610684614771565b8181035f8312801583831316838312821617156148fd576148fd614771565b5092915050565b8082018281125f83128015821682158216171561492357614923614771565b505092915050565b8082025f82127f80000000000000000000000000000000000000000000000000000000000000008414161561496257614962614771565b818105831482151761068457610684614771565b5f8261498457614984614744565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f8000000000000000000000000000000000000000000000000000000000000000831416156149d8576149d8614771565b500590565b5f826149eb576149eb614744565b500790565b5f7f80000000000000000000000000000000000000000000000000000000000000008203613ac157613ac1614771565b5f82614a2e57614a2e614744565b500490565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a6357614a63614771565b5060010190565b5f81518060208401855e5f93019283525090919050565b5f614a8c8284614a6a565b7f300000000000000000000000000000000000000000000000000000000000000081526001019392505050565b7f2e0000000000000000000000000000000000000000000000000000000000000081525f614af3614aed6001840186614a6a565b84614a6a565b949350505050565b7f650000000000000000000000000000000000000000000000000000000000000081525f6106956001830184614a6a565b5f614b4c614aed614b46614b40858a614a6a565b88614a6a565b86614a6a565b9695505050505050565b8181038181111561068457610684614771565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b8082018082111561068457610684614771565b5f614af3614aed8386614a6a56","sourceMap":"525:13549:46:-:0;;;1114:77;;;;;;;;;-1:-1:-1;1138:46:46;:44;:46::i;:::-;525:13549;;2590:358:52;721:42;2673;934:66;2729:47;;2725:217;;2799:132;;-1:-1:-1;;;2799:132:52;;721:42;2799:132;;;216:51:145;934:66:52;283:18:145;;;276:34;326:18;;;319:34;;;189:18;;2799:132:52;;;;;;;2725:217;2638:310;2590:358::o;14:345:145:-;525:13549:46;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561000f575f80fd5b506004361061029d575f3560e01c806381f7e2f511610171578063cde72ef3116100d2578063dd64691711610088578063e5526ecd1161006e578063e5526ecd1461062e578063e75f991f14610641578063ffae15ba14610654575f80fd5b8063dd64691714610608578063e0db58881461061b575f80fd5b8063d1de592a116100b8578063d1de592a146105bb578063d35273a7146105ce578063d3d6ffa8146105f5575f80fd5b8063cde72ef314610582578063d102b4d3146105a8575f80fd5b8063a19684b711610127578063bc1b392d1161010d578063bc1b392d1461050b578063bc62d8d814610511578063cb09682b1461055c575f80fd5b8063a19684b7146104d2578063a90d041a146104f8575f80fd5b806396ce1ec71161015757806396ce1ec7146104885780639b4afd991461049b578063a100a3d9146104bf575f80fd5b806381f7e2f5146104625780638dc2980714610475575f80fd5b80633447c0301161021b5780635ca0e7a4116101d1578063719cd99d116101b7578063719cd99d1461042957806373bfb2831461043c57806381a822721461044f575f80fd5b80635ca0e7a4146103f0578063602c35fc14610403575f80fd5b80633b3bd868116102015780633b3bd868146103b757806341aa0080146103ca5780635b23771d146103dd575f80fd5b80633447c03014610374578063371493ce14610397575f80fd5b80631ee62f111161027057806328fa1f011161025657806328fa1f011461033b5780633004fa411461034e5780633029740014610361575f80fd5b80631ee62f11146103155780632538835014610328575f80fd5b806304327dc5146102a1578063078b665b146102c75780630b6429bc146102da578063146e82ad14610302575b5f80fd5b6102b46102af36600461452f565b61067a565b6040519081526020015b60405180910390f35b6102b46102d5366004614546565b61068a565b6102ed6102e8366004614576565b61069c565b604080519283529015156020830152016102be565b6102b461031036600461452f565b6106b4565b6102b461032336600461452f565b6106d3565b6102b461033636600461452f565b6106f2565b6102b461034936600461452f565b610711565b6102b461035c366004614546565b61071b565b6102b461036f366004614546565b61073b565b610387610382366004614546565b610746565b60405190151581526020016102be565b6103aa6103a53660046145a0565b610751565b6040516102be91906145d2565b6102b46103c5366004614576565b61075d565b6102b46103d8366004614546565b610768565b6102b46103eb366004614576565b610773565b6102b46103fe36600461452f565b61077e565b7f80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff6102b4565b6102b461043736600461452f565b610788565b61038761044a366004614546565b610792565b6102b461045d36600461452f565b61079d565b610387610470366004614546565b6107a7565b610387610483366004614546565b6107b2565b6102b4610496366004614546565b6107bd565b6102b47c090000000000000000000000000000000000000000000000000000000181565b6103aa6104cd36600461452f565b6107c8565b7f80000000000000000000000000000000000000000000000000000000000000016102b4565b6102b4610506366004614546565b610812565b5f6102b4565b61052461051f366004614652565b61081d565b604080517fffffffff0000000000000000000000000000000000000000000000000000000090931683526020830191909152016102be565b7f7fffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffff6102b4565b7f7fffffff800000000000000000000000000000000000000000000000000000006102b4565b6103876105b6366004614546565b610836565b6102b46105c9366004614546565b610841565b6102b47ffffffffc0000000000000000000000000000000000000000000000000000000181565b6102b461060336600461452f565b61084c565b61038761061636600461452f565b610856565b6102b461062936600461452f565b61087c565b6103aa61063c36600461471b565b610886565b6102ed61064f366004614576565b61090f565b7fffffffbe19cfc6ef4f44cf88f14500d013df534fcaad48fca1d5ca47bea26fcc6102b4565b5f6106848261091b565b92915050565b5f6106958383610967565b9392505050565b5f806106a88484610983565b915091505b9250929050565b5f6106848273c51a14251b0dcf0ae24a96b7153991378938f5f56109c4565b5f6106848273c51a14251b0dcf0ae24a96b7153991378938f5f56109f0565b5f6106848273c51a14251b0dcf0ae24a96b7153991378938f5f5610a3e565b5f61068482610a71565b5f610695838373c51a14251b0dcf0ae24a96b7153991378938f5f5610ab2565b5f6106958383610d0d565b5f6106958383610d70565b60606106958383610dbe565b5f6106958383610e51565b5f6106958383610e6c565b5f6106958383610eb1565b5f61068482610ee4565b5f61068482610fa6565b5f6106958383611052565b5f610684826110a2565b5f61069583836110e7565b5f6106958383611137565b5f6106958383611186565b6060610684827ffffffffc000000000000000000000000000000000000000000000000000000017c0900000000000000000000000000000000000000000000000000000001610886565b5f61069583836111cb565b5f805f8061082a856111d6565b90969095509350505050565b5f61069583836112c4565b5f6106958383611313565b5f61068482611358565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff821615610684565b5f6106848261138a565b606061089283836112c4565b6108d7576040517f3be5bf9400000000000000000000000000000000000000000000000000000000815260048101849052602481018390526044015b60405180910390fd5b5f6108e1856110a2565b9050610906856108f183876112c4565b8061090157506109018386611137565b610dbe565b95945050505050565b5f806106a884846113cb565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d61094d828261140b565b90925090505f61095d8383611459565b5095945050505050565b5f6109728383611137565b61097c5781610695565b5090919050565b5f807bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8416601b0b60e085901d6109b782828761155f565b9350935050509250929050565b5f610695837fffffffff0000000000000000000000000000000000000000000000000000000584610ab2565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d610a238483836116ae565b90925090505f610a338383611459565b509695505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d610a2384838361181f565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d82610aa48383611b54565b9150505f610a338284611459565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff848116601b0b9060e086901d908516610aef5750600191506106959050565b5f8213610b8857815f03610b4c57610b07855f6112c4565b15610b41576040517f8be82972000000000000000000000000000000000000000000000000000000008152600481018690526024016108ce565b505f91506106959050565b6040517fcceba0f100000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016108ce565b610b93856001610d70565b8015610ba45750610ba4865f611137565b15610bb3578592505050610695565b610bbd855f6112c4565b15610be657610bdd610bce8761091b565b610bd787611358565b86610ab2565b92505050610695565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8516601b0b60e086901d5f80610c198484611b54565b915091505f610c2983855f611bbc565b905060015f8080610c608f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b9160e09190911d90565b915091505b60018510610ca75784600116600103610c8a57610c8484848484611cd3565b90945092505b600185901c9450610c9d82828484611cd3565b9092509050610c65565b5f80610cb48f8e8e61181f565b91509150610cc482828a8d611cd3565b9092509050610cd48f83836116ae565b9092509050610ce582828888611cd3565b90925090505f610cf58383611459565b509e5050505050505050505050505050509392505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686611df2565b915091505f610d618383611459565b509a9950505050505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d610db384848484612416565b979650505050505050565b60607bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d5f829003610e2e576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525092505050610684565b8315610e4757610e3e828261242d565b92505050610684565b61090682826126fd565b5f805f610e5e8585612e64565b915091506109068282612ec6565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686612f20565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d610906828286612f4a565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828112610f1b57509192915050565b5f80610f278484611b54565b915091505f84128015610f3957508015155b15610f8f57610f8a82847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4612f20565b935091505b5f610f9a8385611459565b50979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828112610fdd57509192915050565b5f80610fe98484611b54565b91509150805f03610ffe575093949350505050565b5f811315610f8f57610f8a82847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4612fa6565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d611095848484846130d6565b1315979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828212156110dc5761094d82826131aa565b5f61095d8383611459565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d61112a848484846130d6565b1215979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d61117a848484846130d6565b12979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686611cd3565b5f61097283836112c4565b80515f908190602084810191850101828080806111f3868661324d565b929650909450925090507fffffffff0000000000000000000000000000000000000000000000000000000084165f036112b557848303611285575f806112398484611459565b915091508061127457507f32b8b8be000000000000000000000000000000000000000000000000000000009a5f9a5098505050505050505050565b505f9a909950975050505050505050565b507fad384e8700000000000000000000000000000000000000000000000000000000985f98509650505050505050565b5091975f975095505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d611307848484846130d6565b13979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686612fa6565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d61094d82826131aa565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d826113bd8383611b54565b5090505f610a338284611459565b5f805f805f6113da87876136ec565b9250925092505f806113ec8585611459565b91509150818380156113fb5750815b9650965050505050509250929050565b5f806106a87f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb48686611df2565b5f601b83900b83148383826114bd577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561149d57620186a0860595506005850194505b8586601b0b146114b857600a8605955084600101945061149d565b6114d3565b855f036114d357505f9250600191506106ad9050565b848560030b1461152f575f8512156114f357505f92508291506106ad9050565b6040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016108ce565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f8512156115a5576040517f4a7d166b00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016108ce565b845f036115b757505f905060016116a6565b8460ff8416850185811215611602576040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101889052602481018790526044016108ce565b5f805f83121561166c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb3831215611643575f8095509550505050506116a6565b825f03600a0a915081848161165a5761165a614744565b04955050840290911491506116a69050565b5f83131561169b5761167f83600a6148bc565b915061168b82856148c7565b9550600194506116a69350505050565b509193506001925050505b935093915050565b5f805f8412156116ea576116c284846131aa565b90945092506116d28585856116ae565b90945092506116e1848461140b565b915091506116a6565b5f806116f68686611b54565b9092509050845f80806117098585613748565b9194509250905061270d6127106117216001826148de565b8514611738576117328d8686613837565b90925090505b83156117c3575f61174a866001614904565b90505b80848583028161175f5761175f614744565b051461177657600a84059350600a8805975061174d565b6117b7611783858861492b565b8961178e878561492b565b8f87877ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6138f0565b909d509b506117ea9050565b819b507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc9a505b5050505050866117fb84835f611bbc565b611806886001614904565b6118109190614904565b94509450505050935093915050565b5f80838361182d828261398d565b90965094505f86136118ae57855f03611872576040517f561fc7b500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5d3fd4db00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016108ce565b5050837f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000036118ec576118e283604c614904565b5f915091506116a6565b7f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000008412158061193b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb561195d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb45b5f0b8412611b18575f805f805f8561197657604b611979565b604c5b611983908a614904565b90505f80876119b0577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000006119d1565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca0000000000000000005b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff169050808c81611a0357611a03614744565b05818102955090850193507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18019050611a3c8c826139e3565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000000295508594508a8414611ac8576123278114611aa357611a7e8c826001016139e3565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000002611ac5565b7f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000005b94505b50611af8838b848c89897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb46138f0565b909a509850611b098a8a835f612fa6565b975097505050505050506116a6565b611b22858561140b565b9095509350611b3286868661181f565b9095509350611b4185856131aa565b92509250506116a6565b50935093915050565b5f805f8312611b6757508290505f6106ad565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4831215611b9957505f9050826106ad565b5f839003600a0a808581611baf57611baf614744565b0794859003959350505050565b5f818303611bcb575082610695565b82821315611c0e57828203604c811380611be557505f8113155b15611bf3575f915050610695565b80600a0a8581611c0557611c05614744565b05915050610695565b818303604c811380611c2057505f8113155b15611c68576040517f1d5d6d100000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490526064016108ce565b600a81900a85810286828281611c8057611c80614744565b0514611cc9576040517f1d5d6d100000000000000000000000000000000000000000000000000000000081526004810188905260248101879052604481018690526064016108ce565b9250610695915050565b5f8085158415178015611ceb575f92505f9150611de8565b611cf58487614904565b91505f611d0188613a6a565b90505f611d0d87613a6a565b90505f611d1a8383613ad0565b5090505f6f0785ee10d5da46d900f436a000000000821115611d4f576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a7640000821115611d7057670de0b6b3a7640000820491506012015b633b9aca00821115611d8957633b9aca00820491506009015b612710821115611d9e57612710820491506004015b8115611db257600a82049150600101611d9e565b611dbc8187614904565b9550611dde8b8a611dd88787611dd387600a6148bc565b613b0b565b89613bf0565b9097509550505050505b5094509492505050565b5f80835f03611e37576040517f7a97930f00000000000000000000000000000000000000000000000000000000815260048101879052602481018690526044016108ce565b855f03611e4857505f90508061240d565b5f805f80611e568a8a613cf7565b919b5099509150611e678888613cf7565b919950975090505f611e788b613a6a565b90505f611e848a613a6a565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c818310156122a1578415611ee257507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000009050604b612260565b6f4b3b4ca85a86c47a098a22400000000083101561200e57678ac7230489e80000831015611f72576402540be400831015611f4057620186a0831015611f305750620186a0905060056121e9565b506402540be4009050600a6121e9565b655af3107a4000831015611f5f5750655af3107a40009050600e6121e9565b50678ac7230489e80000905060136121e9565b6b204fce5e3e25026110000000831015611fc45769152d02c7e14af6800000831015611fad575069152d02c7e14af6800000905060176121e9565b506b204fce5e3e250261100000009050601c6121e9565b6d314dc6448d9338c15b0a00000000831015611ff357506d314dc6448d9338c15b0a00000000905060216121e9565b506f4b3b4ca85a86c47a098a224000000000905060266121e9565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156121065773af298d050e4395d69670b12b7f410000000000008310156120a1577172cb5bd86321e38cb6ce6682e8000000000083101561208257507172cb5bd86321e38cb6ce6682e800000000009050602b6121e9565b5073af298d050e4395d69670b12b7f41000000000000905060306121e9565b76010b46c6cdd6e3e0828f4db456ff0c8ea00000000000008310156120e2575076010b46c6cdd6e3e0828f4db456ff0c8ea0000000000000905060356121e9565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a6121e9565b7c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000083101561219c577a026e4d30eccc3215dd8f3157d27e23acbdcfe6800000000000000083101561217457507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f6121e9565b507c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000905060446121e9565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca0000000000000000008310156121e957507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b81831161221d57600a820491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016121e9565b815f03612260576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018d9052602481018c90526044016108ce565b856122a1576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018f9052602481018e90526044016108ce565b807f8000000000000000000000000000000000000000000000000000000000000000018d126122d457808d039c50612347565b7f80000000000000000000000000000000000000000000000000000000000000009c90038c015f81131561234757807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038b1361233457998a0199612347565b5f8099509950505050505050505061240d565b5f808e12801561235657505f8c135b15612393577f80000000000000000000000000000000000000000000000000000000000000008e01808d1361238b575f61238f565b808d035b9150505b8b818f010397506123b08f8e6123aa888789613b0b565b8b613bf0565b90995097505f8113156123fa57604c8113156123da575f809a509a5050505050505050505061240d565b80600a0a89816123ec576123ec614744565b059850885f036123fa575f97505b5096985094965061240d95505050505050565b94509492505050565b5f612423858585856130d6565b1495945050505050565b6060612439838361398d565b90935091505f8061246a7f161bcca7119915b50764b4abe86529797775a5f171951000000000000000000086614976565b1561249a57507f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000009050604c6124c1565b507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000009050604b5b5f6124cc8387614976565b90505f6124d984886149dd565b90505f808312156124f3575060016124f0836149f0565b92505b5f82121561250a57506001612507826149f0565b91505b60408051602081019091525f81528215612613575f8061252b600a89614a20565b90505b6125388186614976565b5f0361255d57612549600a82614a20565b90508161255581614a33565b92505061252e565b60408051602081019091525f8082525b838110156125be57816040516020016125869190614a81565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052915060010161256d565b505b6125cb600a876149dd565b5f036125e3576125dc600a87614976565b95506125c0565b806125ed87613f98565b6040516020016125fe929190614ab9565b60405160208183030381529060405293505050505b5f61261d85613f98565b90505f61262a878b614904565b90505f81156126605761263c82613f98565b60405160200161264c9190614afb565b604051602081830303815290604052612670565b60405180602001604052805f8152505b90505f8561268c5760405180602001604052805f8152506126c3565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b9050808486846040516020016126dc9493929190614b2c565b6040516020818303038152906040529a505050505050505050505092915050565b60606103e882138061271857506127156103e86149f0565b82125b15612752576040517fe44c72b0000000000000000000000000000000000000000000000000000000008152600481018390526024016108ce565b5f80841290811561276d57612766856149f0565b9050612770565b50835b5f61277a82614024565b80519091505f5b81811080156127fd57508281612798600185614b56565b6127a29190614b56565b815181106127b2576127b2614b69565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f3000000000000000000000000000000000000000000000000000000000000000145b15612814578061280c81614a33565b915050612781565b5f61281f8284614b56565b90505f61282c838a614904565b90505f876128485760405180602001604052805f81525061287f565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b90505f82126129f957815f6128948286614b96565b67ffffffffffffffff8111156128ac576128ac614625565b6040519080825280601f01601f1916602001820160405280156128d6576020820181803683370190505b5090505f5b85811015612948578881815181106128f5576128f5614b69565b602001015160f81c60f81b82828151811061291257612912614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053506001016128db565b505f5b828110156129c5577f30000000000000000000000000000000000000000000000000000000000000008261297f8389614b96565b8151811061298f5761298f614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535060010161294b565b5082816040516020016129d9929190614ba9565b6040516020818303038152906040529a5050505050505050505050610684565b5f612a03836149f0565b905080841115612c1a575f612a188286614b56565b90505f612a26866001614b96565b67ffffffffffffffff811115612a3e57612a3e614625565b6040519080825280601f01601f191660200182016040528015612a68576020820181803683370190505b5090505f5b82811015612ada57898181518110612a8757612a87614b69565b602001015160f81c60f81b828281518110612aa457612aa4614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612a6d565b507f2e00000000000000000000000000000000000000000000000000000000000000818381518110612b0e57612b0e614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5b83811015612be55789612b518285614b96565b81518110612b6157612b61614b69565b01602001517fff00000000000000000000000000000000000000000000000000000000000000168282612b95866001614b96565b612b9f9190614b96565b81518110612baf57612baf614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612b3e565b508381604051602001612bf9929190614ba9565b6040516020818303038152906040529b505050505050505050505050610684565b5f612c258583614b56565b90505f85612c34836002614b96565b612c3e9190614b96565b67ffffffffffffffff811115612c5657612c56614625565b6040519080825280601f01601f191660200182016040528015612c80576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f81518110612cb657612cb6614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f2e0000000000000000000000000000000000000000000000000000000000000081600181518110612d1857612d18614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5b82811015612dc3577f300000000000000000000000000000000000000000000000000000000000000082612d7d836002614b96565b81518110612d8d57612d8d614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612d48565b505f5b86811015612be557898181518110612de057612de0614b69565b01602001517fff00000000000000000000000000000000000000000000000000000000000000168282612e14866002614b96565b612e1e9190614b96565b81518110612e2e57612e2e614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612dc6565b5f805f805f612e7387876136ec565b92509250925080612eba576040517fc471796600000000000000000000000000000000000000000000000000000000815260048101849052602481018390526044016108ce565b50909590945092505050565b5f805f612ed38585611459565b9150915080612f18576040517f22c9f7bb00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016108ce565b509392505050565b5f80612f2c84846131aa565b9094509250612f3d86868686612fa6565b9150915094509492505050565b5f805f612f5886868661155f565b9150915080612f9d576040517f05e4767800000000000000000000000000000000000000000000000000000000815260048101879052602481018690526044016108ce565b50949350505050565b5f8085158415178015612fd257865f03612fc6578484925092505061240d565b8686925092505061240d565b612fdc878761398d565b9097509550612feb858561398d565b909550935085841315612fff579395929492935b838603604c81111561301857878793509350505061240d565b80600a0a868161302a5761302a614744565b0595505086850180881860ff90811c151589881890911c151680156130c557877f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff036130ac576040517fd556b111000000000000000000000000000000000000000000000000000000008152600481018a9052602481018990526044016108ce565b600a9687900596909805860197600197909701966130c9565b8198505b5096979596505050505050565b5f80851584151781871282861218178584141780156130fb578685925092505061240d565b505f8584131561310f575092949193919260015b8386035f8112604c8213178015613142578215613134575f899450945050505061240d565b885f9450945050505061240d565b600a82900a8981028a82828161315a5761315a614744565b0514613186578415613176575f8b96509650505050505061240d565b8a5f96509650505050505061240d565b841561319b57889650945061240d9350505050565b955087945061240d9350505050565b5f807f80000000000000000000000000000000000000000000000000000000000000008403613243577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8303613236576040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101859052602481018490526044016108ce565b600a840593508260010192505b50505f9190910391565b5f8281806132628386652000000000006140e0565b9250858314158361327c81886703ff0000000000006140e0565b94508085036132b657507f34bd20690000000000000000000000000000000000000000000000000000000094505f92508291506136e39050565b5f806132c28a88614109565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613300575095505f93508392506136e3915050565b86519095506540000000000060015f9290921a9190911b16151588871016915050801561358f57506001909301925f8461334381896703ff0000000000006140e0565b955080860361337e57507f7bfa48af0000000000000000000000000000000000000000000000000000000095505f93508392506136e3915050565b855b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018051908a1160015f9290921a9190911b6601000000000000161515166001036133ed577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613380565b818114613444575f806134008484614109565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613440575097505f95508594506136e39350505050565b9350505b5f83121561347f57507f7bfa48af0000000000000000000000000000000000000000000000000000000096505f94508493506136e392505050565b831561348b57825f0392505b80820394505f8513156134cb57507f013b2aaa0000000000000000000000000000000000000000000000000000000096505f94508493506136e392505050565b855f036134da5782955061358c565b5f859003604381111561351b57507f32b8b8be0000000000000000000000000000000000000000000000000000000097505f95508594506136e39350505050565b600a0a8681025f8883838161353257613532614744565b0514159050601b82900b82141581806135485750805b1561358457507f32b8b8be000000000000000000000000000000000000000000000000000000009a505f98508897506136e39650505050505050565b505084019650505b50505b84516c2000000020000000000000000060015f9290921a9190911b1615158786101680156136d457600190950194856135cf818a652000000000006140e0565b9650866135e5818b6703ff0000000000006140e0565b975080880361362257507f013b2aaa0000000000000000000000000000000000000000000000000000000097505f95508594506136e39350505050565b505f8061362f838a614109565b90925090507fffffffff0000000000000000000000000000000000000000000000000000000082161561366f575097505f95508594506136e39350505050565b9250508482015f8313801561368357508581125b8061369757505f8312801561369757508581135b156136d057507fd556b1110000000000000000000000000000000000000000000000000000000097505f95508594506136e39350505050565b9450505b845f036136df575f93505b5050505b92959194509250565b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86111561373757600a860460018201600a88065f1493509350935050613741565b8593509150600190505b9250925092565b5f805f837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0361378057508391505f90506001613741565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc84121561380e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb08412156137df57505f9150508215156001613741565b5f846004015f03600a0a90505f8187816137fb576137fb614744565b0594505080840286141592509050613741565b5f841261382357505f91508190506001613741565b50505060048101600a0a82025f6001613741565b5f80806064613849600a612328614a20565b613856600a612328614a20565b6138619060026148c7565b61386c906001614b96565b6138769190614b96565b6138809190614b96565b90506138c4565b5f8052600280600a8504028301601e833c5f80516107d0840193505f80526001600a8606600a6064880402018501601f853c5f5101949350505050565b6138cf858288613887565b92508315611b4b576138e5600186018288613887565b915050935093915050565b5f80888803613903575083905081613981565b5f805f806139138c8b8f8d612f20565b915091505f806139258a8a8d8c612f20565b9150915061393584848484611cd3565b8096508197505050505050505f8061394f8b8b8f8d612f20565b915091505f8061396186868686611df2565b915091505f8061397384848f8e612fa6565b909a50985050505050505050505b97509795505050505050565b5f805f805f61399c8787613cf7565b92509250925080612eba576040517f05e51ecb00000000000000000000000000000000000000000000000000000000815260048101889052602481018790526044016108ce565b5f806139f2600a612328614a20565b6139fd9060026148c7565b613a08906001614b96565b90505f613a18600a612328614a20565b90506002600a8504026001015f8052600281601e883c505f51617fff81169350618000811615613a4757918101915b505f80526001600a8506600a6064870402018301601f873c50505f510192915050565b5f80821215613ac7577f80000000000000000000000000000000000000000000000000000000000000008203613ac157507f8000000000000000000000000000000000000000000000000000000000000000919050565b505f0390565b5090565b919050565b5f807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83850993909202808410938190039390930393915050565b5f805f613b188686613ad0565b91509150815f03613b3c57838181613b3257613b32614744565b0492505050610695565b838210613b86576040517f6c59da120000000000000000000000000000000000000000000000000000000081526004810187905260248101869052604481018590526064016108ce565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f8587181215613cba577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115613ca757613c4f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001614b96565b8403613c7f57507f800000000000000000000000000000000000000000000000000000000000000090508161240d565b613c8a600a85614a20565b613c93906149f0565b613c9e846001614904565b9150915061240d565b613cb0846149f0565b839150915061240d565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115613ced57613c93600a85614a20565b508290508161240d565b5f805f845f03613d0f57505f91508190506001613741565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee800000000000000000085055f03613f23576f4b3b4ca85a86c47a098a2240000000008505158015613d7857507f80000000000000000000000000000000000000000000000000000000000000268412155b15613d99576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a000000000000008505158015613de157507f80000000000000000000000000000000000000000000000000000000000000138412155b15613dfa57678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c6400000000000000008505158015613e4657507f800000000000000000000000000000000000000000000000000000000000000a8412155b15613e5c576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e40000000000000000008505158015613eab57507f80000000000000000000000000000000000000000000000000000000000000028412155b15613ec157606485029450600284039350613e5c565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000008505158015613f1157507f80000000000000000000000000000000000000000000000000000000000000018412155b15613f2357600a850294506001840393505b600a80860290810586148015613f5957507f80000000000000000000000000000000000000000000000000000000000000018512155b15613f68578095506001850394505b50939492935050507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000008305151590565b60605f8212613fb55760405180602001604052805f815250613fec565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b613ffd60ff84901d80850118614024565b60405160200161400e929190614ba9565b6040516020818303038152906040529050919050565b60605f61403083614233565b60010190505f8167ffffffffffffffff81111561404f5761404f614625565b6040519080825280601f01601f191660200182016040528015614079576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461408357509392505050565b5f5b5f82600186515f1a1b16118385101615614101576001840193506140e2565b509192915050565b81515f90819065200000000000600191831a9190911b161515838510168085019082806141368488614314565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615614171575093505f92506106ad915050565b825f036141d4577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116141a5575f6141c7565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b955093506106ad92505050565b7f80000000000000000000000000000000000000000000000000000000000000008111614201575f614223565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95505f0393505050509250929050565b5f807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061427b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106142a7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106142c557662386f26fc10000830492506010015b6305f5e10083106142dd576305f5e100830492506008015b61271083106142f157612710830492506004015b60648310614303576064830492506002015b600a83106106845760010192915050565b5f8082841061434757507f34bd20690000000000000000000000000000000000000000000000000000000090505f6106ad565b835f03614380576040517fda6966d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60305f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501815b8782101580156143b85750604d83105b156143fb57815160018401937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90930192600a0a5f9190911a85900302016143a8565b8782106145215781515f1a849003600181111561444357507f0fdc26350000000000000000000000000000000000000000000000000000000095505f94506106ad9350505050565b600a84900a810282810183111561448657507f0fdc26350000000000000000000000000000000000000000000000000000000096505f95506106ad945050505050565b9190910190507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101905b8782106145215781515f1a603081146144f657507f0fdc26350000000000000000000000000000000000000000000000000000000095505f94506106ad9350505050565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101906144b2565b5f9890975095505050505050565b5f6020828403121561453f575f80fd5b5035919050565b5f8060408385031215614557575f80fd5b50508035926020909101359150565b803560ff81168114613acb575f80fd5b5f8060408385031215614587575f80fd5b8235915061459760208401614566565b90509250929050565b5f80604083850312156145b1575f80fd5b82359150602083013580151581146145c7575f80fd5b809150509250929050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60208284031215614662575f80fd5b813567ffffffffffffffff80821115614679575f80fd5b818401915084601f83011261468c575f80fd5b81358181111561469e5761469e614625565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156146e4576146e4614625565b816040528281528760208487010111156146fc575f80fd5b826020860160208301375f928101602001929092525095945050505050565b5f805f6060848603121561472d575f80fd5b505081359360208301359350604090920135919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b600181815b808511156147f757817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156147dd576147dd614771565b808516156147ea57918102915b93841c93908002906147a3565b509250929050565b5f8261480d57506001610684565b8161481957505f610684565b816001811461482f576002811461483957614855565b6001915050610684565b60ff84111561484a5761484a614771565b50506001821b610684565b5060208310610133831016604e8410600b8410161715614878575081810a610684565b614882838361479e565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156148b4576148b4614771565b029392505050565b5f61069583836147ff565b808202811582820484141761068457610684614771565b8181035f8312801583831316838312821617156148fd576148fd614771565b5092915050565b8082018281125f83128015821682158216171561492357614923614771565b505092915050565b8082025f82127f80000000000000000000000000000000000000000000000000000000000000008414161561496257614962614771565b818105831482151761068457610684614771565b5f8261498457614984614744565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f8000000000000000000000000000000000000000000000000000000000000000831416156149d8576149d8614771565b500590565b5f826149eb576149eb614744565b500790565b5f7f80000000000000000000000000000000000000000000000000000000000000008203613ac157613ac1614771565b5f82614a2e57614a2e614744565b500490565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a6357614a63614771565b5060010190565b5f81518060208401855e5f93019283525090919050565b5f614a8c8284614a6a565b7f300000000000000000000000000000000000000000000000000000000000000081526001019392505050565b7f2e0000000000000000000000000000000000000000000000000000000000000081525f614af3614aed6001840186614a6a565b84614a6a565b949350505050565b7f650000000000000000000000000000000000000000000000000000000000000081525f6106956001830184614a6a565b5f614b4c614aed614b46614b40858a614a6a565b88614a6a565b86614a6a565b9695505050505050565b8181038181111561068457610684614771565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b8082018082111561068457610684614771565b5f614af3614aed8386614a6a56","sourceMap":"525:13549:46:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6819:83;;;;;;:::i;:::-;;:::i;:::-;;;399:25:145;;;387:2;372:18;6819:83:46;;;;;;;;11299:93;;;;;;:::i;:::-;;:::i;13850:222::-;;;;;;:::i;:::-;;:::i;:::-;;;;1353:25:145;;;1421:14;;1414:22;1409:2;1394:18;;1387:50;1326:18;13850:222:46;1185:258:145;10667:140:46;;;;;;:::i;:::-;;:::i;9694:142::-;;;;;;:::i;:::-;;:::i;9997:::-;;;;;;:::i;:::-;;:::i;8997:85::-;;;;;;:::i;:::-;;:::i;10353:150::-;;;;;;:::i;:::-;;:::i;6590:93::-;;;;;;:::i;:::-;;:::i;7121:90::-;;;;;;:::i;:::-;;:::i;:::-;;;1613:14:145;;1606:22;1588:41;;1576:2;1561:18;7121:90:46;1448:187:145;4526:156:46;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;12040:182::-;;;;;;:::i;:::-;;:::i;5530:93::-;;;;;;:::i;:::-;;:::i;12556:172::-;;;;;;:::i;:::-;;:::i;9229:87::-;;;;;;:::i;:::-;;:::i;1849:122::-;4788:66:51;1849:122:46;;9463:85;;;;;;:::i;:::-;;:::i;8475:92::-;;;;;;:::i;:::-;;:::i;6015:83::-;;;;;;:::i;:::-;;:::i;8125:92::-;;;;;;:::i;:::-;;:::i;7780:90::-;;;;;;:::i;:::-;;:::i;6300:93::-;;;;;;:::i;:::-;;:::i;967:140::-;;1040:66;967:140;;4894:158;;;;;;:::i;:::-;;:::i;1589:122::-;4499:66:51;1589:122:46;;11007:93;;;;;;:::i;:::-;;:::i;2375:96::-;2414:5;2375:96;;3040:211;;;;;;:::i;:::-;;:::i;:::-;;;;4336:66:145;4324:79;;;4306:98;;4435:2;4420:18;;4413:34;;;;4279:18;3040:211:46;4107:346:145;1329:122:46;4228:66:51;1329:122:46;;2109;5091:66:51;2109:122:46;;7445:90;;;;;;:::i;:::-;;:::i;5240:93::-;;;;;;:::i;:::-;;:::i;706:140::-;;779:66;706:140;;5760:87;;;;;;:::i;:::-;;:::i;11554:88::-;;;;;;:::i;:::-;;:::i;8735:91::-;;;;;;:::i;:::-;;:::i;3821:383::-;;;;;;:::i;:::-;;:::i;13202:232::-;;;;;;:::i;:::-;;:::i;2602:90::-;5335:66:51;2602:90:46;;6819:83;6864:5;6888:7;:1;:5;:7::i;:::-;6881:14;6819:83;-1:-1:-1;;6819:83:46:o;11299:93::-;11353:5;11377:8;:1;11383;11377:5;:8::i;:::-;11370:15;11299:93;-1:-1:-1;;;11299:93:46:o;13850:222::-;13931:7;13940:4;14013:52;14049:5;14056:8;14013:35;:52::i;:::-;14006:59;;;;13850:222;;;;;;:::o;10667:140::-;10713:5;10737:63;:1;721:42:52;10737:6:46;:63::i;9694:142::-;9741:5;9765:64;:1;721:42:52;9765:7:46;:64::i;9997:142::-;10044:5;10068:64;:1;721:42:52;10068:7:46;:64::i;8997:85::-;9043:5;9067:8;:1;:6;:8::i;10353:150::-;10407:5;10431:65;:1;10437;721:42:52;10431:5:46;:65::i;6590:93::-;6644:5;6668:8;:1;6674;6668:5;:8::i;7121:90::-;7174:4;7197:7;:1;7202;7197:4;:7::i;4526:156::-;4591:13;4623:52;4661:1;4664:10;4623:37;:52::i;12040:182::-;12128:5;12152:63;12199:5;12206:8;12152:46;:63::i;5530:93::-;5584:5;5608:8;:1;5614;5608:5;:8::i;12556:172::-;12640:7;12666:55;12705:5;12712:8;12666:38;:55::i;9229:87::-;9276:5;9300:9;:1;:7;:9::i;9463:85::-;9509:5;9533:8;:1;:6;:8::i;8475:92::-;8529:4;8552:8;:1;8558;8552:5;:8::i;6015:83::-;6060:5;6084:7;:1;:5;:7::i;8125:92::-;8179:4;8202:8;:1;8208;8202:5;:8::i;7780:90::-;7833:4;7856:7;:1;7861;7856:4;:7::i;6300:93::-;6354:5;6378:8;:1;6384;6378:5;:8::i;4894:158::-;4942:13;4974:71;4981:1;779:66;1040;4974:6;:71::i;11007:93::-;11061:5;11085:8;:1;11091;11085:5;:8::i;3040:211::-;3097:6;3105:5;3123:20;3145:12;3161:43;3200:3;3161:38;:43::i;:::-;3122:82;;;;-1:-1:-1;3040:211:46;-1:-1:-1;;;;3040:211:46:o;7445:90::-;7498:4;7521:7;:1;7526;7521:4;:7::i;5240:93::-;5294:5;5318:8;:1;5324;5318:5;:8::i;5760:87::-;5807:5;5831:9;:1;:7;:9::i;11554:88::-;11602:4;40930:17:51;41123:12;;41116:20;11625:10:46;40844:308:51;8735:91:46;8784:5;8808:11;:1;:9;:11::i;3821:383::-;3909:13;3939:31;:13;3956;3939:16;:31::i;:::-;3934:127;;3993:57;;;;;;;;5378:25:145;;;5419:18;;;5412:34;;;5351:18;;3993:57:46;;;;;;;;3934:127;4070:10;4083:7;:1;:5;:7::i;:::-;4070:20;-1:-1:-1;4107:90:46;4145:1;4148:22;4070:20;4156:13;4148:7;:22::i;:::-;:48;;;-1:-1:-1;4174:22:46;:4;4182:13;4174:7;:22::i;:::-;4107:37;:90::i;:::-;4100:97;3821:383;-1:-1:-1;;;;;3821:383:46:o;13202:232::-;13287:5;13294:4;13367:60;13411:5;13418:8;13367:43;:60::i;26308:326:51:-;26357:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;26476:62;19348:32;19405:16;26476:33;:62::i;:::-;26444:94;;-1:-1:-1;26444:94:51;-1:-1:-1;26549:12:51;26566:38;26444:94;;26566:9;:38::i;:::-;-1:-1:-1;26548:56:51;26308:326;-1:-1:-1;;;;;26308:326:51:o;40507:101::-;40561:5;40585:8;40588:1;40591;40585:2;:8::i;:::-;:16;;40600:1;40585:16;;;-1:-1:-1;40596:1:51;;40507:101;-1:-1:-1;40507:101:51:o;13558:248::-;13639:7;;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;13741:58;19348:32;19405:16;13790:8;13741:19;:58::i;:::-;13734:65;;;;;;13558:248;;;;;:::o;39808:143::-;39882:5;39906:38;39910:1;3896:66;39925:18;39906:3;:38::i;34200:484::-;34279:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;34410:84;34446:18;19348:32;19405:16;34410:35;:84::i;:::-;34366:128;;-1:-1:-1;34366:128:51;-1:-1:-1;34599:12:51;34616:38;34366:128;;34616:9;:38::i;:::-;-1:-1:-1;34598:56:51;34200:484;-1:-1:-1;;;;;;34200:484:51:o;35060:463::-;35135:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;35262:84;35298:18;19348:32;19405:16;35262:35;:84::i;31289:362::-;31339:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;31339:5;31498:66;19348:32;19405:16;31498:37;:66::i;:::-;31476:88;;;31575:12;31592:29;31602:8;31612;31592:9;:29::i;36145:3071::-;36227:5;19261:17;19363:16;;;19359:2;19348:32;;19409:4;19405:16;;;;41123:12;;36313:869;;-1:-1:-1;3744:1:51;;-1:-1:-1;36343:16:51;;-1:-1:-1;36343:16:51;36313:869;36402:1;36380:18;:23;36376:806;;36423:18;36445:1;36423:23;36419:494;;36470:16;:1;3653;36470:4;:16::i;:::-;36466:157;;;36584:20;;;;;;;;399:25:145;;;372:18;;36584:20:51;226:204:145;36466:157:51;-1:-1:-1;3653:1:51;;-1:-1:-1;36789:17:51;;-1:-1:-1;36789:17:51;36419:494;36852:46;;;;;;;;5378:25:145;;;5419:18;;;5412:34;;;5351:18;;36852:46:51;5150:302:145;36376:806:51;37009:15;:1;3744;37009:4;:15::i;:::-;:35;;;;-1:-1:-1;37028:16:51;:1;3653;37028:4;:16::i;:::-;37005:177;;;37067:1;37060:8;;;;;;37005:177;37089:16;:1;3653;37089:4;:16::i;:::-;37085:97;;;37128:43;37132:7;:1;:5;:7::i;:::-;37141:9;:1;:7;:9::i;:::-;37152:18;37128:3;:43::i;:::-;37121:50;;;;;;37085:97;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;37409:25;;37514:68;19348:32;19405:16;37514:37;:68::i;:::-;37476:106;;;;37593:24;37628:72;37677:8;37687:9;37698:1;37628:48;:72::i;:::-;37593:108;-1:-1:-1;37810:1:51;37752:30;;;37879:10;:1;19261:17;19363:16;;19359:2;19348:32;;19409:4;19405:16;;;;;19141:296;37879:10;37825:64;;;;37899:544;37926:1;37906:16;:21;37899:544;;37947:16;37966:4;37947:23;37974:4;37947:31;37943:263;;38042:149;38097:23;38122:14;38138:21;38161:12;38042:33;:149::i;:::-;37998:193;;-1:-1:-1;37998:193:51;-1:-1:-1;37943:263:51;38240:1;38219:22;;;;;38295:137;38346:21;38369:12;38383:21;38406:12;38295:33;:137::i;:::-;38255:177;;-1:-1:-1;38255:177:51;-1:-1:-1;37899:544:51;;;38454:25;38481:16;38513:86;38549:18;38569;38589:9;38513:35;:86::i;:::-;38453:146;;;;38656:86;38690:18;38710:9;38721;38732;38656:33;:86::i;:::-;38610:132;;-1:-1:-1;38610:132:51;-1:-1:-1;38799:86:51;38835:18;38610:132;;38799:35;:86::i;:::-;38753:132;;-1:-1:-1;38753:132:51;-1:-1:-1;38942:105:51;38753:132;;39007:23;39032:14;38942:33;:105::i;:::-;38896:151;;-1:-1:-1;38896:151:51;-1:-1:-1;39139:7:51;39151:40;38896:151;;39151:9;:40::i;:::-;-1:-1:-1;39138:53:51;-1:-1:-1;;;;;;;;;;;;;;;36145:3071:51;;;;;:::o;25374:565::-;25428:5;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;25428:5;;25639:95;19348:32;19405:16;19348:32;19405:16;25639:33;:95::i;:::-;25581:153;;;;25864:7;25876:38;25886:17;25905:8;25876:9;:38::i;:::-;-1:-1:-1;25863:51:51;25374:565;-1:-1:-1;;;;;;;;;;25374:565:51:o;26976:313::-;27029:4;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;27188:94;19348:32;19405:16;19348:32;19405:16;27188:32;:94::i;:::-;27181:101;26976:313;-1:-1:-1;;;;;;;26976:313:51:o;1412:418:53:-;1490:13;19261:17:51;19363:16;;19359:2;19348:32;19409:4;19405:16;;;1516:24:53;1604:22;;;1600:63;;1642:10;;;;;;;;;;;;;;;;;;;;;;;1600:63;1676:10;1672:90;;;1709:42;1723:17;1742:8;1709:13;:42::i;:::-;1702:49;;;;;;1672:90;1778:45;1795:17;1814:8;1778:16;:45::i;8838:263:51:-;8932:5;8950:24;8976:15;8995:41;9020:5;9027:8;8995:24;:41::i;:::-;8949:87;;;;9053:41;9066:17;9085:8;9053:12;:41::i;20749:488::-;20803:5;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;20803:5;;21016:95;19348:32;19405:16;19348:32;19405:16;21016:33;:95::i;15036:248::-;15120:7;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;15216:61;19348:32;19405:16;15268:8;15216:22;:61::i;31797:752::-;31848:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;32020:13;;;32016:56;;-1:-1:-1;32056:5:51;;31797:752;-1:-1:-1;;31797:752:51:o;32016:56::-;32082:8;32092:15;32111:66;32149:17;32168:8;32111:37;:66::i;:::-;32081:96;;;;32211:1;32191:17;:21;:38;;;;-1:-1:-1;32216:13:51;;;32191:38;32187:283;;;32402:57;32436:1;32439:8;32449:4;32455:3;32402:33;:57::i;:::-;32386:73;-1:-1:-1;32386:73:51;-1:-1:-1;32187:283:51;32480:12;32497:22;32507:1;32510:8;32497:9;:22::i;:::-;-1:-1:-1;32479:40:51;31797:752;-1:-1:-1;;;;;;;31797:752:51:o;32696:1044::-;32746:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;32918:13;;;32914:56;;-1:-1:-1;32954:5:51;;32696:1044;-1:-1:-1;;32696:1044:51:o;32914:56::-;32980:8;32990:15;33009:66;33047:17;33066:8;33009:37;:66::i;:::-;32979:96;;;;33161:8;33173:1;33161:13;33157:503;;-1:-1:-1;33197:5:51;;32696:1044;-1:-1:-1;;;;32696:1044:51:o;33157:503::-;33559:1;33548:8;:12;33544:116;;;33592:57;33626:1;33629:8;33639:4;33645:3;33592:33;:57::i;30085:431::-;30139:4;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;30346:106;19348:32;19405:16;19348:32;19405:16;30346:44;:106::i;:::-;-1:-1:-1;30469:40:51;;30085:431;-1:-1:-1;;;;;;;30085:431:51:o;22642:494::-;22691:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;22783:21;;;22779:148;;;22852:64;22888:17;22907:8;22852:35;:64::i;22779:148::-;23051:12;23068:38;23078:17;23097:8;23068:9;:38::i;29229:431::-;29283:4;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;29490:106;19348:32;19405:16;19348:32;19405:16;29490:44;:106::i;:::-;-1:-1:-1;29613:40:51;;29229:431;-1:-1:-1;;;;;;;29229:431:51:o;28393:429::-;28446:4;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;28653:106;19348:32;19405:16;19348:32;19405:16;28653:44;:106::i;:::-;-1:-1:-1;;28393:429:51;-1:-1:-1;;;;;;;28393:429:51:o;24348:527::-;24402:5;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;24402:5;;24613:95;19348:32;19405:16;19348:32;19405:16;24613:33;:95::i;40179:101::-;40233:5;40257:8;40260:1;40263;40257:2;:8::i;8905:1711:55:-;9120:10;;8974:6;;;;9084:4;9075:14;;;;9109:22;;;8974:6;;;;9246:35;9075:14;9109:22;9246:23;:35::i;:::-;9150:131;;-1:-1:-1;9150:131:55;;-1:-1:-1;9150:131:55;-1:-1:-1;9150:131:55;-1:-1:-1;9295:18:55;;;9312:1;9295:18;9291:1319;;9343:3;9333:6;:13;9329:1098;;9951:12;9965:13;9982:54;10008:17;10027:8;9982:25;:54::i;:::-;9950:86;;;;10059:8;10054:179;;-1:-1:-1;10099:34:55;;10146:1;;-1:-1:-1;8905:1711:55;-1:-1:-1;;;;;;;;;8905:1711:55:o;10054:179::-;-1:-1:-1;10204:1:55;;10207:6;;-1:-1:-1;8905:1711:55;-1:-1:-1;;;;;;;;8905:1711:55:o;9329:1098::-;-1:-1:-1;10354:42:55;;10409:1;;-1:-1:-1;8905:1711:55;-1:-1:-1;;;;;;;8905:1711:55:o;9291:1319::-;-1:-1:-1;10570:13:55;;10596:1;;-1:-1:-1;8905:1711:55;-1:-1:-1;;;;;;8905:1711:55:o;27617:430:51:-;27670:4;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;27877:106;19348:32;19405:16;19348:32;19405:16;27877:44;:106::i;:::-;-1:-1:-1;;27617:430:51;-1:-1:-1;;;;;;;27617:430:51:o;19921:481::-;19975:5;19261:17;19363:16;;;19359:2;19348:32;;;;19409:4;19405:16;;;;19363;;;19348:32;;;;19405:16;;;19975:5;;20186:95;19348:32;19405:16;19348:32;19405:16;20186:33;:95::i;21587:410::-;21638:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;21757:64;19348:32;19405:16;21757:35;:64::i;30772:350::-;30825:5;19261:17;19363:16;;19359:2;19348:32;19409:4;19405:16;;;30825:5;30976:66;19348:32;19405:16;30976:37;:66::i;:::-;30962:80;;;31053:12;31070:22;31080:1;31083:8;31070:9;:22::i;7434:353::-;7525:5;7532:4;7549:24;7575:15;7592:13;7609:38;7631:5;7638:8;7609:21;:38::i;:::-;7548:99;;;;;;7658:11;7671:17;7692:38;7702:17;7721:8;7692:9;:38::i;:::-;7657:73;;;;7748:5;7755:8;:24;;;;;7767:12;7755:24;7740:40;;;;;;;;;7434:353;;;;;:::o;35535:162:54:-;35614:6;35622;35647:43;35651:4;35657:3;35662:17;35681:8;35647:3;:43::i;15810:2402:51:-;15895:11;16327:46;;;;;;15991:17;16047:8;16327:46;16651:668;;16708:4;16688:17;:24;:29;16684:135;;16762:3;16741:24;;;;16799:1;16787:13;;;;16684:135;17058:17;17036;17029:46;;;17022:151;;17120:2;17099:23;;;;17144:10;;;;;17022:151;;;16651:668;;;17215:17;17236:1;17215:22;17211:94;;-1:-1:-1;3653:1:51;;-1:-1:-1;17281:4:51;;-1:-1:-1;17261:25:51;;-1:-1:-1;17261:25:51;17211:94;17529:8;17516;17510:27;;;17506:393;;17731:1;17720:8;:12;17716:85;;;-1:-1:-1;3653:1:51;;-1:-1:-1;3653:1:51;;-1:-1:-1;17756:26:51;;-1:-1:-1;17756:26:51;17716:85;17825:59;;;;;;;;5378:25:145;;;5419:18;;;5412:34;;;5351:18;;17825:59:51;5150:302:145;17506:393:51;-1:-1:-1;;18046:17:51;18132:28;;18166:4;18162:19;;;18129:53;;-1:-1:-1;15810:2402:51;;;;;:::o;9946:3045::-;10081:7;10090:4;10213:1;10193:17;:21;10189:2796;;;10237:59;;;;;;;;5378:25:145;;;5419:18;;;5412:34;;;5351:18;;10237:59:51;5150:302:145;10189:2796:51;10395:17;10416:1;10395:22;10391:2594;;-1:-1:-1;10441:1:51;;-1:-1:-1;10444:4:51;10433:16;;10391:2594;10659:17;10940;;;10922:36;;10980:24;;;10976:123;;;11035:45;;;;;;;;5378:25:145;;;5419:18;;;5412:34;;;5351:18;;11035:45:51;5150:302:145;10976:123:51;11127:13;11154:20;11208:1;11192:13;:17;11188:1787;;;11486:3;11470:13;:19;11466:91;;;11525:1;11528:5;11517:17;;;;;;;;;;11466:91;11917:13;11916:14;;11902:2;:29;11894:37;;11990:5;11968:19;:27;;;;;:::i;:::-;;;-1:-1:-1;;12253:20:51;;:43;;;;-1:-1:-1;12231:66:51;;-1:-1:-1;12231:66:51;11188:1787;12356:1;12340:13;:17;12336:639;;;12502:28;12516:13;12502:2;:28;:::i;:::-;12494:36;-1:-1:-1;12563:27:51;12494:36;12563:19;:27;:::i;:::-;12548:42;-1:-1:-1;12864:4:51;;-1:-1:-1;12842:27:51;;-1:-1:-1;;;;12842:27:51;12336:639;-1:-1:-1;12934:19:51;;-1:-1:-1;12955:4:51;;-1:-1:-1;;;10391:2594:51;9946:3045;;;;;;:::o;43384:1993:54:-;43517:6;43525;43571:1;43551:17;:21;43547:271;;;43620:34;43626:17;43645:8;43620:5;:34::i;:::-;43588:66;;-1:-1:-1;43588:66:54;-1:-1:-1;43700:54:54;43706:18;43588:66;;43700:5;:54::i;:::-;43668:86;;-1:-1:-1;43668:86:54;-1:-1:-1;43775:32:54;43668:86;;43775:3;:32::i;:::-;43768:39;;;;;;43547:271;43854:21;43877:22;43903:36;43911:17;43930:8;43903:7;:36::i;:::-;43853:86;;-1:-1:-1;43853:86:54;-1:-1:-1;43981:8:54;43949:29;;;44060:36;43853:86;43981:8;44060:9;:36::i;:::-;44013:83;;-1:-1:-1;44013:83:54;-1:-1:-1;44013:83:54;-1:-1:-1;44257:4:54;44298:5;782:27:56;808:1;44298:5:54;782:27:56;:::i;:::-;44321:3:54;:29;44317:252;;44485:69;44508:18;44536:3;44542:11;44485:22;:69::i;:::-;44370:184;;-1:-1:-1;44370:184:54;-1:-1:-1;44317:252:54;44586:11;44582:664;;;44676:15;44695:7;:3;44701:1;44695:7;:::i;:::-;44676:27;;44753:154;44790:8;44781:5;44772;44761:8;:16;44760:26;;;;;:::i;:::-;;:38;44753:154;;44835:2;44826:11;;;-1:-1:-1;44882:2:54;44863:21;;;;44753:154;;;44975:153;45020:11;45026:5;45020:3;:11;:::i;:::-;45033:15;45050:16;45061:5;45050:8;:16;:::i;:::-;45068:8;45078:13;45093;45108:2;44975:23;:153::i;:::-;44943:185;;-1:-1:-1;44943:185:54;-1:-1:-1;44582:664:54;;-1:-1:-1;44582:664:54;;45187:13;45167:33;;45229:2;45218:13;;44582:664;43999:1257;;;;;45274:17;45308:61;45327:14;45343:22;45367:1;45308:18;:61::i;:::-;45293:12;45297:8;45293:1;:12;:::i;:::-;:76;;;;:::i;:::-;45266:104;;;;;;;43384:1993;;;;;;:::o;37791:5059::-;37924:6;;38000:17;38060:8;38114:41;38000:17;38060:8;38114:12;:41::i;:::-;38082:73;;-1:-1:-1;38082:73:54;-1:-1:-1;38195:1:54;38174:22;;38170:259;;38220:17;38241:1;38220:22;38216:199;;38273:11;;;;;;;;;;;;;;38216:199;38338:58;;;;;;;;5378:25:145;;;5419:18;;;5412:34;;;5351:18;;38338:58:54;5150:302:145;38216:199:54;37954:485;;38519:17;38540:4;38519:25;38515:81;;38568:13;:8;38579:2;38568:13;:::i;:::-;38583:1;38560:25;;;;;;38515:81;38646:4;38625:25;;;;38739:24;;38760:3;38739:24;;;38754:3;38739:24;38726:38;;:8;:38;38722:4122;;38780:20;38814;38848;38882;39533:17;39571:12;:38;;39606:2;39571:38;;;39593:2;39571:38;39553:57;;:8;:57;:::i;:::-;39533:77;;39672:11;39763:13;39779:12;:26;;39801:4;39779:26;;;39794:4;39779:26;39763:42;;;;40381:5;40354:17;:33;;;;;:::i;:::-;;40941:29;;;;-1:-1:-1;41478:29:54;;;;-1:-1:-1;40685:20:54;;;-1:-1:-1;41582:42:54;41600:18;40685:20;41582:17;:42::i;:::-;41575:4;:49;41552:73;;41663:13;41647:29;;41830:17;41813:13;:34;41809:270;;513:32:56;41891:30:54;;:165;;42009:46;42027:18;42047:3;42053:1;42047:7;42009:17;:46::i;:::-;42002:4;:53;41891:165;;;41959:4;41891:165;41875:181;;41809:270;39654:2457;42157:256;42198:13;42229:17;42264:13;42295:8;42321:13;42352;1640:3;42157:23;:256::i;:::-;42125:288;;-1:-1:-1;42125:288:54;-1:-1:-1;42434:47:54;42125:288;;42467:10;42479:1;42434:3;:47::i;:::-;42427:54;;;;;;;;;;;;38722:4122;42646:32;42650:17;42669:8;42646:3;:32::i;:::-;42614:64;;-1:-1:-1;42614:64:54;-1:-1:-1;42724:54:54;42730:18;42614:64;;42724:5;:54::i;:::-;42692:86;;-1:-1:-1;42692:86:54;-1:-1:-1;42799:34:54;42692:86;;42799:5;:34::i;:::-;42792:41;;;;;;;38722:4122;37944:4906;37791:5059;;;;;;:::o;55832:852::-;55915:14;55931:11;56120:1;56108:8;:13;56104:81;;-1:-1:-1;56149:17:54;;-1:-1:-1;56168:1:54;56141:29;;56104:81;56351:3;56340:8;:14;56336:82;;;-1:-1:-1;56382:1:54;;-1:-1:-1;56385:17:54;56374:29;;56336:82;56528:11;56563:9;;;56549:2;:24;;56595:17;56549:24;56595;;;;:::i;:::-;;56643;;;;;55832:852;-1:-1:-1;;;;55832:852:54:o;53784:1452::-;53925:6;53987:14;53975:8;:26;53971:1249;;-1:-1:-1;54028:17:54;54021:24;;53971:1249;54087:8;54070:14;:25;54066:1154;;;54137:25;;;54199:2;54184:17;;;:38;;;54221:1;54205:12;:17;;54184:38;54180:127;;;1408:1;54246:42;;;;;54180:127;54478:12;54464:2;:27;54437:17;:55;;;;;:::i;:::-;;54430:62;;;;;54066:1154;54553:25;;;54615:2;54600:17;;;:38;;;54637:1;54621:12;:17;;54600:38;54596:163;;;54669:71;;;;;;;;8664:25:145;;;8705:18;;;8698:34;;;8748:18;;;8741:34;;;8637:18;;54669:71:54;8468:313:145;54596:163:54;54904:2;:27;;;54968:25;;;:17;54904:27;54968:25;54904:27;55015:16;;;;:::i;:::-;;:37;55011:162;;55083:71;;;;;;;;8664:25:145;;;8705:18;;;8698:34;;;8748:18;;;8741:34;;;8637:18;;55083:71:54;8468:313:145;55011:162:54;55197:8;-1:-1:-1;55190:15:54;;-1:-1:-1;;55190:15:54;7193:2230;7343:24;;7473:26;;7501;;7470:58;7547:1870;;;;1408:1;7690:53;;1495:1;7757:34;;7547:1870;;;7833:21;7845:9;7833;:21;:::i;:::-;7822:32;;7989:29;8021:48;8050:18;8021:28;:48::i;:::-;7989:80;;8083:29;8115:48;8144:18;8115:28;:48::i;:::-;8083:80;;8179:13;8197:52;8204:21;8227;8197:6;:52::i;:::-;8178:71;;;8264:22;8344:4;8336:5;:12;8332:114;;;8381:4;8372:13;;;-1:-1:-1;8425:2:54;8407:20;8332:114;8475:4;8467:5;:12;8463:114;;;8512:4;8503:13;;;-1:-1:-1;8556:2:54;8538:20;8463:114;8606:3;8598:5;:11;8594:111;;;8642:3;8633:12;;;-1:-1:-1;8685:1:54;8667:19;8594:111;8734:3;8726:5;:11;8722:111;;;8770:3;8761:12;;;-1:-1:-1;8813:1:54;8795:19;8722:111;8857:9;;8850:108;;8899:2;8890:11;;;-1:-1:-1;8923:16:54;;8850:108;;;9086:34;9105:14;9086:34;;:::i;:::-;;-1:-1:-1;9167:239:54;9211:18;9247;9283:83;9290:21;9313;9336:29;9351:14;9344:2;9336:29;:::i;:::-;9283:6;:83::i;:::-;9384:8;9167:26;:239::i;:::-;9135:271;;-1:-1:-1;9135:271:54;-1:-1:-1;;;;;7547:1870:54;7390:2033;7193:2230;;;;;;;:::o;12966:8769::-;13116:6;13124;13150:18;13172:1;13150:23;13146:8583;;13196:45;;;;;;;;5378:25:145;;;5419:18;;;5412:34;;;5351:18;;13196:45:54;5150:302:145;13146:8583:54;13262:18;13284:1;13262:23;13258:8471;;-1:-1:-1;1408:1:54;;-1:-1:-1;1408:1:54;13301:67;;13258:8471;13399:24;13437:15;13466:10;13490;13697:39;13706:18;13726:9;13697:8;:39::i;:::-;13656:80;;-1:-1:-1;13656:80:54;-1:-1:-1;13656:80:54;-1:-1:-1;13791:39:54;13800:18;13820:9;13791:8;:39::i;:::-;13750:80;;-1:-1:-1;13750:80:54;-1:-1:-1;13750:80:54;-1:-1:-1;13965:29:54;13997:48;14026:18;13997:28;:48::i;:::-;13965:80;;14059:29;14091:48;14120:18;14091:28;:48::i;:::-;14059:80;-1:-1:-1;14170:4:54;14212:2;14663:29;;;14659:4460;;;14716:5;14712:4269;;;-1:-1:-1;14753:4:54;;-1:-1:-1;14796:2:54;14712:4269;;;14873:4;14849:21;:28;14845:3675;;;14933:4;14909:21;:28;14905:1781;;;14997:4;14973:21;:28;14969:813;;;15065:3;15041:21;:27;15037:321;;;-1:-1:-1;15116:3:54;;-1:-1:-1;15174:1:54;14845:3675;;15037:321;-1:-1:-1;15262:4:54;;-1:-1:-1;15321:2:54;14845:3675;;14969:813;15456:4;15432:21;:28;15428:324;;;-1:-1:-1;15508:4:54;;-1:-1:-1;15567:2:54;14845:3675;;15428:324;-1:-1:-1;15656:4:54;;-1:-1:-1;15715:2:54;14845:3675;;14905:1781;15872:4;15848:21;:28;15844:816;;;15940:4;15916:21;:28;15912:324;;;-1:-1:-1;15992:4:54;;-1:-1:-1;16051:2:54;14845:3675;;15912:324;-1:-1:-1;16140:4:54;;-1:-1:-1;16199:2:54;14845:3675;;15844:816;16334:4;16310:21;:28;16306:324;;;-1:-1:-1;16386:4:54;;-1:-1:-1;16445:2:54;14845:3675;;16306:324;-1:-1:-1;16534:4:54;;-1:-1:-1;16593:2:54;14845:3675;;;16768:4;16744:21;:28;16740:1758;;;16832:4;16808:21;:28;16804:816;;;16900:4;16876:21;:28;16872:324;;;-1:-1:-1;16952:4:54;;-1:-1:-1;17011:2:54;14845:3675;;16872:324;-1:-1:-1;17100:4:54;;-1:-1:-1;17159:2:54;16740:1758;;16804:816;17294:4;17270:21;:28;17266:324;;;-1:-1:-1;17346:4:54;;-1:-1:-1;17405:2:54;14845:3675;;17266:324;-1:-1:-1;17494:4:54;;-1:-1:-1;17553:2:54;16740:1758;;;17710:4;17686:21;:28;17682:790;;;17778:4;17754:21;:28;17750:324;;;-1:-1:-1;17830:4:54;;-1:-1:-1;17889:2:54;17682:790;;17750:324;-1:-1:-1;17978:4:54;;-1:-1:-1;18037:2:54;17682:790;;;18172:4;18148:21;:28;18144:298;;;-1:-1:-1;18224:4:54;;-1:-1:-1;18283:2:54;18144:298;18641:5;18616:21;:30;18609:214;;18723:2;18714:11;;;-1:-1:-1;18755:19:54;;18609:214;;;18848:5;18857:1;18848:10;18844:119;;18893:47;;;;;;;;5378:25:145;;;5419:18;;;5412:34;;;5351:18;;18893:47:54;5150:302:145;18844:119:54;19003:5;18998:107;;19039:47;;;;;;;;5378:25:145;;;5419:18;;;5412:34;;;5351:18;;19039:47:54;5150:302:145;18998:107:54;19587:14;19568:16;:33;19555:9;:46;19551:623;;19638:14;19625:27;;;;19551:623;;;19729:16;;19699:46;;;;19839:1;19822:18;;19818:338;;;19904:14;19885:16;:33;19872:9;:46;19868:266;;19950:27;;;;19868:266;;;1408:1;1495;20040:67;;;;;;;;;;;;;;19868:266;20202:26;20352:1;20340:9;:13;:30;;;;;20369:1;20357:9;:13;20340:30;20336:222;;;20424:16;20412:28;;20484:20;;;:55;;20537:1;20484:55;;;20519:8;20507:9;:20;20484:55;20462:77;;20372:186;20336:222;20621:9;20599:19;20587:9;:31;:43;20576:54;;20681:235;20729:18;20769;20809:59;20816:21;20839:5;20846:21;20809:6;:59::i;:::-;20890:8;20681:26;:235::i;:::-;20649:267;;-1:-1:-1;20649:267:54;-1:-1:-1;20961:1:54;20939:23;;20935:716;;;21012:2;20990:19;:24;20986:308;;;1408:1;1495;21204:67;;;;;;;;;;;;;;;20986:308;21479:19;21465:2;:34;21437:63;;;;;;:::i;:::-;;;;21526:17;21547:1;21526:22;21522:111;;1495:1;21576:34;;21522:111;-1:-1:-1;21676:17:54;;-1:-1:-1;21695:8:54;;-1:-1:-1;21668:36:54;;-1:-1:-1;;;;;;21668:36:54;13258:8471;12966:8769;;;;;;;:::o;34854:365::-;35003:4;35078:76;35093:18;35113:9;35124:18;35144:9;35078:14;:76::i;:::-;35172:40;;34854:365;-1:-1:-1;;;;;34854:365:54:o;2112:2562:53:-;2200:13;2257:71;2300:17;2319:8;2257:42;:71::i;:::-;2225:103;;-1:-1:-1;2225:103:53;-1:-1:-1;2339:13:53;;2397:24;2417:4;2225:103;2397:24;:::i;:::-;:29;2393:179;;-1:-1:-1;2482:4:53;;-1:-1:-1;2458:2:53;2393:179;;;-1:-1:-1;2557:4:53;;-1:-1:-1;2533:2:53;2393:179;2719:15;2737:33;2764:5;2737:17;:33;:::i;:::-;2719:51;-1:-1:-1;2917:17:53;2937:33;2964:5;2937:17;:33;:::i;:::-;2917:53;;2981:10;3024:1;3013:8;:12;3009:89;;;-1:-1:-1;3049:4:53;3078:9;3079:8;3078:9;:::i;:::-;3067:20;;3009:89;3124:1;3111:10;:14;3107:95;;;-1:-1:-1;3149:4:53;3180:11;3181:10;3180:11;:::i;:::-;3167:24;;3107:95;3212:35;;;;;;;;;:30;:35;;3261:15;;3257:819;;3292:24;;3354:10;3362:2;3354:5;:10;:::i;:::-;3334:30;;3518:128;3525:30;3545:9;3525:10;:30;:::i;:::-;3559:1;3525:35;3518:128;;3580:15;3593:2;3580:15;;:::i;:::-;;-1:-1:-1;3613:18:53;;;;:::i;:::-;;;;3518:128;;;3660:41;;;;;;;;;:36;:41;;;3715:147;3739:16;3735:1;:20;3715:147;;;3819:22;3805:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;3757:3:53;;3715:147;;;;3876:78;3883:15;3896:2;3883:10;:15;:::i;:::-;3902:1;3883:20;3876:78;;3923:16;3937:2;3923:16;;:::i;:::-;;;3876:78;;;4006:22;4030:34;4053:10;4030:22;:34::i;:::-;3987:78;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3968:97;;3278:798;;;3257:819;4086:28;4117:32;4140:8;4117:22;:32::i;:::-;4086:63;-1:-1:-1;4333:22:53;4358:32;4376:13;4358:8;:32;:::i;:::-;4333:57;-1:-1:-1;4400:28:53;4443:20;;:87;;4490:39;4513:15;4490:22;:39::i;:::-;4471:59;;;;;;;;:::i;:::-;;;;;;;;;;;;;4443:87;;;;;;;;;;;;;;;;4400:130;;4540:20;4563:5;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4540:39;;4610:6;4618:14;4634:16;4652:14;4596:71;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4589:78;;;;;;;;;;;;2112:2562;;;;:::o;5044:3560::-;5135:13;1062:4;5164:8;:38;:81;;;-1:-1:-1;5217:28:53;1062:4;5217:28;:::i;:::-;5206:8;:39;5164:81;5160:149;;;5268:30;;;;;;;;399:25:145;;;372:18;;5268:30:53;226:204:145;5160:149:53;5319:10;5332:21;;;;5388:495;;;;5626:18;5627:17;5626:18;:::i;:::-;5608:37;;5388:495;;;-1:-1:-1;5854:17:53;5388:495;5893:19;5921:25;5938:7;5921:16;:25::i;:::-;5969:13;;5893:54;;-1:-1:-1;5957:9:53;6232:106;6255:1;6239:13;:17;:57;;;;-1:-1:-1;6260:6:53;6275:13;6267:5;6271:1;6267;:5;:::i;:::-;:21;;;;:::i;:::-;6260:29;;;;;;;;:::i;:::-;;;;;;;;:36;;6239:57;6232:106;;;6312:15;;;;:::i;:::-;;;;6232:106;;;6347:12;6362:17;6366:13;6362:1;:17;:::i;:::-;6347:32;-1:-1:-1;6556:13:53;6572:32;6590:13;6572:8;:32;:::i;:::-;6556:48;;6615:20;6638:5;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6615:39;;6679:1;6669:6;:11;6665:594;;6926:6;6900:15;6976:14;6926:6;6976:4;:14;:::i;:::-;6966:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6966:25:53;;6947:44;;7010:9;7005:86;7029:4;7025:1;:8;7005:86;;;7067:6;7074:1;7067:9;;;;;;;;:::i;:::-;;;;;;;;;7058:3;7062:1;7058:6;;;;;;;;:::i;:::-;;;;:18;;;;;;;;;;-1:-1:-1;7035:3:53;;7005:86;;;;7109:9;7104:90;7128:7;7124:1;:11;7104:90;;;7160:19;:3;7164:8;7171:1;7164:4;:8;:::i;:::-;7160:13;;;;;;;;:::i;:::-;;;;:19;;;;;;;;;;-1:-1:-1;7137:3:53;;7104:90;;;;7228:6;7243:3;7214:34;;;;;;;;;:::i;:::-;;;;;;;;;;;;;7207:41;;;;;;;;;;;;;;6665:594;7472:17;7500:7;7501:6;7500:7;:::i;:::-;7472:36;;7530:9;7523:4;:16;7519:1079;;;7620:15;7638:16;7645:9;7638:4;:16;:::i;:::-;7620:34;-1:-1:-1;7668:16:53;7697:8;:4;7704:1;7697:8;:::i;:::-;7687:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7687:19:53;;7668:38;;7725:9;7720:89;7744:7;7740:1;:11;7720:89;;;7785:6;7792:1;7785:9;;;;;;;;:::i;:::-;;;;;;;;;7776:3;7780:1;7776:6;;;;;;;;:::i;:::-;;;;:18;;;;;;;;;;-1:-1:-1;7753:3:53;;7720:89;;;;7822:18;:3;7826:7;7822:12;;;;;;;;:::i;:::-;;;;:18;;;;;;;;;;;7859:9;7854:115;7878:9;7874:1;:13;7854:115;;;7935:6;7942:11;7952:1;7942:7;:11;:::i;:::-;7935:19;;;;;;;;:::i;:::-;;;;;;;7912:3;7930:1;7916:11;:7;7926:1;7916:11;:::i;:::-;:15;;;;:::i;:::-;7912:20;;;;;;;;:::i;:::-;;;;:42;;;;;;;;;;-1:-1:-1;7889:3:53;;7854:115;;;;8003:6;8018:3;7989:34;;;;;;;;;:::i;:::-;;;;;;;;;;;;;7982:41;;;;;;;;;;;;;;;7519:1079;8131:25;8159:16;8171:4;8159:9;:16;:::i;:::-;8131:44;-1:-1:-1;8189:16:53;8242:4;8218:21;8131:44;8218:1;:21;:::i;:::-;:28;;;;:::i;:::-;8208:39;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8208:39:53;;8189:58;;8261:12;:3;8265:1;8261:6;;;;;;;;:::i;:::-;;;;:12;;;;;;;;;;;8287;:3;8291:1;8287:6;;;;;;;;:::i;:::-;;;;:12;;;;;;;;;;;8318:9;8313:97;8337:17;8333:1;:21;8313:97;;;8379:16;:3;8383:5;8387:1;8383;:5;:::i;:::-;8379:10;;;;;;;;:::i;:::-;;;;:16;;;;;;;;;;-1:-1:-1;8356:3:53;;8313:97;;;;8428:9;8423:110;8447:4;8443:1;:8;8423:110;;;8509:6;8516:1;8509:9;;;;;;;;:::i;:::-;;;;;;;8476:3;8504:1;8480:21;8484:17;8480:1;:21;:::i;:::-;:25;;;;:::i;:::-;8476:30;;;;;;;;:::i;:::-;;;;:42;;;;;;;;;;-1:-1:-1;8453:3:53;;8423:110;;8131:373:51;8219:6;8227;8246:24;8272:15;8289:13;8306:38;8328:5;8335:8;8306:21;:38::i;:::-;8245:99;;;;;;8359:8;8354:98;;8390:51;;;;;;;;5378:25:145;;;5419:18;;;5412:34;;;5351:18;;8390:51:51;5150:302:145;8354:98:51;-1:-1:-1;8469:17:51;;;;-1:-1:-1;8131:373:51;-1:-1:-1;;;8131:373:51:o;18451:299::-;18539:5;18557:7;18566:13;18583:38;18593:17;18612:8;18583:9;:38::i;:::-;18556:65;;;;18636:8;18631:95;;18667:48;;;;;;;;5378:25:145;;;5419:18;;;5412:34;;;5351:18;;18667:48:51;5150:302:145;18631:95:51;-1:-1:-1;18742:1:51;18451:299;-1:-1:-1;;;18451:299:51:o;33785:339:54:-;33935:6;33943;33999:36;34005:18;34025:9;33999:5;:36::i;:::-;33965:70;;-1:-1:-1;33965:70:54;-1:-1:-1;34052:65:54;34056:18;34076:9;33965:70;;34052:3;:65::i;:::-;34045:72;;;;33785:339;;;;;;;:::o;14139:390:51:-;14277:7;14301:13;14316;14333:58;14353:17;14372:8;14382;14333:19;:58::i;:::-;14300:91;;;;14406:8;14401:100;;14437:53;;;;;;;;5378:25:145;;;5419:18;;;5412:34;;;5351:18;;14437:53:51;5150:302:145;14401:100:51;-1:-1:-1;14517:5:51;14139:390;-1:-1:-1;;;;14139:390:51:o;29621:3681:54:-;29771:6;;30037:26;;30065;;30034:58;30111:217;;;;30145:18;30167:1;30145:23;30141:177;;30196:18;30216:9;30188:38;;;;;;;30141:177;30273:18;30293:9;30265:38;;;;;;;30141:177;30565:43;30578:18;30598:9;30565:12;:43::i;:::-;30531:77;;-1:-1:-1;30531:77:54;-1:-1:-1;30652:43:54;30665:18;30685:9;30652:12;:43::i;:::-;30618:77;;-1:-1:-1;30618:77:54;-1:-1:-1;30816:21:54;;;30812:268;;;30919:18;;31031:9;;30866:18;;30812:268;31764:21;;;824:2;31948:45;;31944:122;;;32021:18;32041:9;32013:38;;;;;;;;31944:122;32285:21;32279:2;:27;32250:57;;;;;;:::i;:::-;;;-1:-1:-1;;32400:39:54;;;32658:26;;;32555:4;32648:37;;;32641:45;32734:18;32561:43;;;32551:54;;;32544:62;32718:35;32826:412;;;;32885:9;32865:16;:29;32861:130;;32925:47;;;;;;;;5378:25:145;;;5419:18;;;5412:34;;;5351:18;;32925:47:54;5150:302:145;32861:130:54;33031:2;33051:24;;;;33009;;;;33122:40;;;33093:11;;;;;;32826:412;;;33222:1;33201:22;;32826:412;-1:-1:-1;33265:18:54;;33285:9;;-1:-1:-1;;;;;;29621:3681:54:o;50744:2689::-;50905:6;;51455:26;;51483;;51452:58;51601:26;;;51629;;;51597:59;51374:308;51761:24;;;51346:461;51842:105;;;;51889:18;51909;51881:47;;;;;;;51842:105;51232:729;51975:12;52025:9;52013;:21;52009:329;;;-1:-1:-1;52124:18:54;;52248:9;;52067:18;;52319:4;52009:329;52374:21;;;52352:19;52500:20;;52540:2;52522:21;;52497:47;52571:210;;;;52610:7;52606:161;;;52649:1;52652:18;52641:30;;;;;;;;;52606:161;52726:18;52746:1;52718:30;;;;;;;;;52606:161;52914:2;:27;;;52974:26;;;:18;52914:27;52974:26;52914:27;53019:16;;;;:::i;:::-;;:38;53015:402;;53081:7;53077:161;;;53120:1;53123:18;53112:30;;;;;;;;;;;53077:161;53197:18;53217:1;53189:30;;;;;;;;;;;53015:402;53262:7;53258:159;;;53297:18;;-1:-1:-1;53317:8:54;-1:-1:-1;53289:37:54;;-1:-1:-1;;;;53289:37:54;53258:159;53373:8;-1:-1:-1;53383:18:54;;-1:-1:-1;53365:37:54;;-1:-1:-1;;;;53365:37:54;2977:541;3058:6;3066;3205:16;3184:17;:37;3180:271;;3257:16;3245:8;:28;3241:127;;3304:45;;;;;;;;5378:25:145;;;5419:18;;;5412:34;;;5351:18;;3304:45:54;5150:302:145;3241:127:54;3406:2;3385:23;;;;3426:10;;;;;3180:271;-1:-1:-1;;3472:18:54;;;;;;2977:541::o;1751:6678:55:-;1859:20;1987:5;1859:20;;2015:55;1987:5;2045:3;7516:41:40;2015:21:55;:55::i;:::-;2006:64;-1:-1:-1;2102:15:55;;;;2006:64;2201:53;2006:64;2231:3;20378:131:40;2201:21:55;:53::i;:::-;2192:62;;2286:8;2276:6;:18;2272:120;;-1:-1:-1;2326:32:55;;-1:-1:-1;2368:1:55;;-1:-1:-1;2368:1:55;;-1:-1:-1;2318:55:55;;-1:-1:-1;2318:55:55;2272:120;2411:37;2450:27;2501:61;2548:5;2555:6;2501:46;:61::i;:::-;2410:152;;-1:-1:-1;2410:152:55;-1:-1:-1;2584:35:55;;;;2580:135;;-1:-1:-1;2651:30:55;-1:-1:-1;2691:1:55;;-1:-1:-1;2691:1:55;;-1:-1:-1;2643:53:55;;-1:-1:-1;;2643:53:55;2580:135;1870:13:41;;2752:20:55;;-1:-1:-1;7662:41:40;1886:1:41;2801:16:55;1862:22:41;;;;1858:30;;;;1854:41;1847:49;1840:57;1823:15;;;1819:79;;-1:-1:-1;;2899:14:55;;2895:3973;;-1:-1:-1;2964:8:55;;;;;2945:1;2964:8;3043:53;2964:8;3073:3;20378:131:40;3043:21:55;:53::i;:::-;3034:62;;3128:9;3118:6;:19;3114:119;;-1:-1:-1;3169:30:55;;-1:-1:-1;3209:1:55;;-1:-1:-1;3209:1:55;;-1:-1:-1;3161:53:55;;-1:-1:-1;;3161:53:55;3114:119;3406:6;3430:125;3457:17;;;1870:13:41;;1823:15;;-1:-1:-1;1886:1:41;1688:14;1862:22;;;;1858:30;;;;7945:41:40;1854::41;1847:49;1840:57;1819:79;3496:1:55;3437:60;3430:125;;3521:15;;3430:125;;;3594:9;3577:13;:26;3573:403;;3628:24;3654:19;3701:72;3748:9;3759:13;3701:46;:72::i;:::-;3627:146;;-1:-1:-1;3627:146:55;-1:-1:-1;3799:22:55;;;;3795:117;;-1:-1:-1;3857:17:55;-1:-1:-1;3884:1:55;;-1:-1:-1;3884:1:55;;-1:-1:-1;3849:40:55;;-1:-1:-1;;;;3849:40:55;3795:117;3945:12;-1:-1:-1;;3573:403:55;4079:1;4067:9;:13;4063:113;;;-1:-1:-1;4112:30:55;;-1:-1:-1;4152:1:55;;-1:-1:-1;4152:1:55;;-1:-1:-1;4104:53:55;;-1:-1:-1;;;4104:53:55;4063:113;4197:10;4193:79;;;4244:9;4243:10;;4231:22;;4193:79;4724:13;4704:9;4697:41;4686:52;;4843:1;4832:8;:12;4828:114;;;-1:-1:-1;4876:32:55;;-1:-1:-1;4918:1:55;;-1:-1:-1;4918:1:55;;-1:-1:-1;4868:55:55;;-1:-1:-1;;;4868:55:55;4828:114;4964:17;4985:1;4964:22;4960:1894;;5030:9;5010:29;;4960:1894;;;5210:13;5234:9;;;5717:2;5709:10;;5705:122;;;-1:-1:-1;5755:34:55;;-1:-1:-1;5799:1:55;;-1:-1:-1;5799:1:55;;-1:-1:-1;5747:57:55;;-1:-1:-1;;;;5747:57:55;5705:122;5856:2;:11;6024:33;;;5998:23;6024:17;5856:11;6024:33;5856:11;6241:32;;;;:::i;:::-;;:53;;;-1:-1:-1;6556:44:55;;;;;;;6241:53;;6626:32;;;6644:14;6626:32;6622:144;;;-1:-1:-1;6694:34:55;;-1:-1:-1;6738:1:55;;-1:-1:-1;6738:1:55;;-1:-1:-1;6686:57:55;;-1:-1:-1;;;;;;;6686:57:55;6622:144;-1:-1:-1;;6807:28:55;;;-1:-1:-1;;4960:1894:55;2915:3953;;2895:3973;1870:13:41;;20571:29:40;1886:1:41;6882:13:55;1862:22:41;;;;1858:30;;;;1854:41;1847:49;1840:57;1823:15;;;1819:79;6974:11:55;;6970:1209;;7005:8;;;;;;7081:55;7005:8;7111:3;7516:41:40;7081:21:55;:55::i;:::-;7072:64;-1:-1:-1;7072:64:55;7235:53;7072:64;7265:3;20378:131:40;7235:21:55;:53::i;:::-;7226:62;;7324:11;7314:6;:21;7310:131;;-1:-1:-1;7371:32:55;;-1:-1:-1;7413:1:55;;-1:-1:-1;7413:1:55;;-1:-1:-1;7363:55:55;;-1:-1:-1;;;;7363:55:55;7310:131;7154:305;7500:21;7523:16;7567:62;7614:6;7622;7567:46;:62::i;:::-;7499:130;;-1:-1:-1;7499:130:55;-1:-1:-1;7655:19:55;;;;7651:111;;-1:-1:-1;7710:14:55;-1:-1:-1;7734:1:55;;-1:-1:-1;7734:1:55;;-1:-1:-1;7702:37:55;;-1:-1:-1;;;;7702:37:55;7651:111;7792:9;-1:-1:-1;;7881:17:55;;;7860:18;7925:10;;:36;;;;;7953:8;7939:11;:22;7925:36;7924:80;;;;7976:1;7967:6;:10;:36;;;;;7995:8;7981:11;:22;7967:36;7920:183;;;-1:-1:-1;8040:25:55;;-1:-1:-1;8075:1:55;;-1:-1:-1;8075:1:55;;-1:-1:-1;8032:48:55;;-1:-1:-1;;;;8032:48:55;7920:183;8135:11;-1:-1:-1;;6970:1209:55;8197:17;8218:1;8197:22;8193:220;;8397:1;8386:12;;8193:220;1954:6469;;;1751:6678;;;;;;;;:::o;6054:800:51:-;6139:6;;;6221:17;;;6213:26;;6386:16;6370:33;;6366:472;;;6583:2;6575:5;:10;6599:1;6588:12;;6610:2;6602:5;:10;6616:1;6602:15;6560:58;;;;;;;;;6366:472;6800:5;;-1:-1:-1;6808:8:51;-1:-1:-1;6818:4:51;;-1:-1:-1;6054:800:51;;;;;;:::o;57066:978:54:-;57151:6;57159:4;57165:6;57211:8;57223:2;57211:14;57207:821;;-1:-1:-1;57253:17:54;;-1:-1:-1;57272:5:54;;-1:-1:-1;57279:1:54;57245:36;;57207:821;57317:2;57306:8;:13;57302:726;;;57354:3;57343:8;:14;57339:98;;;-1:-1:-1;57389:1:54;;-1:-1:-1;;57392:22:54;;;57416:1;57381:37;;57339:98;57454:12;57492:8;57503:1;57492:12;57490:15;;57476:2;:30;57454:53;;57592:15;57630:5;57610:17;:25;;;;;:::i;:::-;;;-1:-1:-1;;57671:16:54;;;:37;;;;-1:-1:-1;57682:5:54;-1:-1:-1;57653:63:54;;57302:726;57753:1;57741:8;:13;57737:291;;-1:-1:-1;57782:1:54;;-1:-1:-1;57782:1:54;;-1:-1:-1;57792:1:54;57774:20;;57737:291;-1:-1:-1;;;57988:1:54;:12;;57974:2;:27;57947:55;;58004:5;58011:1;57939:74;;58539:1243;58674:20;;;1447:3:56;1145:33;1176:2;397:4;1145:33;:::i;:::-;;1176:2;397:4;1145:33;:::i;:::-;1294:23;;1316:1;1294:23;:::i;:::-;58911:24:54;;:1;:24;:::i;:::-;:46;;;;:::i;:::-;:79;;;;:::i;:::-;58890:100;;59102:477;;;59187:1;59184;59177:12;59267:1;59262;59257:2;59250:5;59246:14;59242:22;59234:6;59230:35;59226:2;59218:6;59206:63;59152:6;59312:1;59306:8;59354:24;59346:6;59342:37;59332:47;;59406:1;59403;59396:12;59509:1;59502:2;59495:5;59491:14;59486:2;59480:3;59473:5;59469:15;59465:24;59461:45;59453:6;59449:58;59445:2;59437:6;59425:86;59562:1;59556:8;59538:27;;59102:477;-1:-1:-1;;;;59102:477:54:o;:::-;59610:51;59657:3;59645:10;59625:18;59610:51;:::i;:::-;59593:68;;59677:8;59674:92;;;59705:59;59761:1;59756:3;59752:11;59740:10;59720:18;59705:59;:::i;:::-;59688:76;;59025:751;58539:1243;;;;;;:::o;60320:1618::-;60583:6;60591;60691:13;60675:12;:29;60671:93;;-1:-1:-1;60728:13:54;;-1:-1:-1;60743:9:54;60720:33;;60671:93;60773:33;60816:24;60888;60914:21;60939:54;60943:12;60957:9;60968:13;60983:9;60939:3;:54::i;:::-;60887:106;;;;61032:23;61057:20;61081:55;61085:13;61100:9;61111:13;61126:9;61081:3;:55::i;:::-;61031:105;;;;61253:71;61257:17;61276:14;61292:16;61310:13;61253:3;:71::i;:::-;61187:137;;;;;;;;60851:484;;;;61365:24;61391:21;61416:55;61420:13;61435:9;61446:13;61461:9;61416:3;:55::i;:::-;61364:107;;;;61529:33;61564:24;61604:85;61608:26;61636:17;61655;61674:14;61604:3;:85::i;:::-;61528:161;;;;61752:24;61778:15;61809:76;61813:26;61841:17;61860:13;61875:9;61809:3;:76::i;:::-;61751:134;;-1:-1:-1;61751:134:54;-1:-1:-1;;;;;;;;;60320:1618:54;;;;;;;;;;;:::o;48286:370::-;48374:6;48382;48401:27;48430:18;48450:9;48463:37;48472:17;48491:8;48463;:37::i;:::-;48400:100;;;;;;48515:4;48510:88;;48542:45;;;;;;;;5378:25:145;;;5419:18;;;5412:34;;;5351:18;;48542:45:54;5150:302:145;35925:1328:54;36006:14;;1145:33:56;1176:2;397:4;1145:33;:::i;:::-;1294:23;;1316:1;1294:23;:::i;:::-;36104:24:54;;36127:1;36104:24;:::i;:::-;36077:51;-1:-1:-1;36138:24:54;1145:33:56;1176:2;397:4;1145:33;:::i;:::-;36138:46:54;;36537:1;36532:2;36525:5;36521:14;36517:22;36514:1;36510:30;36563:1;36560;36553:12;36614:1;36602:10;36598:2;36590:6;36578:38;;36655:1;36649:8;36699:6;36685:12;36681:25;36671:35;;36754:6;36740:12;36736:25;36729:33;36719:136;;36802:39;;;;36719:136;;36879:1;36876;36869:12;37191:1;37184:2;37177:5;37173:14;37168:2;37162:3;37155:5;37151:15;37147:24;37143:45;37125:16;37121:68;37117:2;37109:6;37097:96;-1:-1:-1;;37234:1:54;37228:8;37216:21;;35925:1328;-1:-1:-1;;35925:1328:54:o;3731:701::-;3818:7;3885:1;3865:17;:21;3861:555;;;3931:16;3910:17;:37;3906:316;;-1:-1:-1;3978:29:54;;3731:701;-1:-1:-1;3731:701:54:o;3906:316::-;-1:-1:-1;4184:18:54;;;3731:701::o;3861:555::-;-1:-1:-1;4383:17:54;3731:701::o;3861:555::-;3731:701;;;:::o;21872:550::-;21933:12;;22319:6;22316:1;22313;22306:20;22346:9;;;;22394:11;;;22380:12;;;;22376:30;;;;;21872:550;-1:-1:-1;;21872:550:54:o;22585:4048::-;22667:14;22694:13;22709;22726:12;22733:1;22736;22726:6;:12::i;:::-;22693:45;;;;22812:5;22821:1;22812:10;22808:109;;22881:11;22873:5;:19;;;;;:::i;:::-;;22866:26;;;;;;22808:109;23024:11;23015:5;:20;23011:91;;23058:33;;;;;;;;8664:25:145;;;8705:18;;;8698:34;;;8748:18;;;8741:34;;;8637:18;;23058:33:54;8468:313:145;23011:91:54;23394:17;23553:11;23550:1;23547;23540:25;24154:1;24139:12;;:16;;24124:32;;24393:25;;;;;25554:1;25535;:15;;25534:21;;25787;;;25783:25;;25772:36;25856:21;;;25852:25;;25841:36;25926:21;;;25922:25;;25911:36;25996:21;;;25992:25;;25981:36;26066:21;;;26062:25;;26051:36;26137:21;;;26133:25;;;26122:36;24106:15;25003;;;24999:29;;;24995:37;;;23659:20;;;23648:32;;;25121:22;;;;23702:21;;;;24565:19;;;;25112:31;;;;26601:15;;-1:-1:-1;;22585:4048:54;;;;;:::o;5040:1698::-;5190:6;5198;5312:1;5307;5303;:5;5302:11;5298:1434;;;5364:16;5333:20;:48;5329:830;;;5429:29;5437:16;5457:1;5429:29;:::i;:::-;5405:20;:53;5401:529;;-1:-1:-1;5600:16:54;;-1:-1:-1;5618:8:54;5592:35;;5401:529;5870:25;5893:2;5870:20;:25;:::i;:::-;5862:34;;;:::i;:::-;5898:12;:8;5909:1;5898:12;:::i;:::-;5854:57;;;;;;5329:830;6104:29;6112:20;6104:29;:::i;:::-;6135:8;6096:48;;;;;;5298:1434;6224:16;6193:20;:48;6189:533;;;6444:25;6467:2;6444:20;:25;:::i;6189:533::-;-1:-1:-1;6675:20:54;;-1:-1:-1;6698:8:54;6660:47;;45918:1994;46002:6;46010;46018:4;46062:17;46083:1;46062:22;46058:134;;-1:-1:-1;1408:1:54;;-1:-1:-1;1408:1:54;;-1:-1:-1;46172:4:54;46104:73;;46058:134;46331:4;46311:17;:24;46339:1;46311:29;46307:1005;;46384:4;46364:17;:24;:29;:66;;;;-1:-1:-1;46409:21:54;46397:33;;;46364:66;46360:174;;;46475:4;46454:25;;;;46513:2;46501:14;;;;46360:174;46576:4;46556:17;:24;:29;:66;;;;-1:-1:-1;46601:21:54;46589:33;;;46556:66;46552:174;;;46667:4;46646:25;;;;46705:2;46693:14;;;;46552:174;46768:4;46748:17;:24;:29;:66;;;;-1:-1:-1;46793:21:54;46781:33;;;46748:66;46744:174;;;46859:4;46838:25;;;;46897:2;46885:14;;;;46744:174;46963:4;46943:17;:24;:29;:65;;;;-1:-1:-1;46988:20:54;46976:32;;;46943:65;46936:174;;;47053:3;47032:24;;;;47090:1;47078:13;;;;46936:174;;;47152:4;47132:17;:24;:29;:65;;;;-1:-1:-1;47177:20:54;47165:32;;;47132:65;47128:170;;;47242:2;47221:23;;;;47278:1;47266:13;;;;47128:170;47606:2;47586:22;;;;;47647:25;47626:17;:46;:82;;;;-1:-1:-1;47688:20:54;47676:32;;;47626:82;47622:192;;;47748:20;47728:40;;47798:1;47786:13;;;;47622:192;-1:-1:-1;47836:17:54;;47855:8;;-1:-1:-1;;;47885:4:54;47865:24;;:29;;;45918:1994::o;1985:168:2:-;2046:13;2100:1;2092:5;:9;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2114:31;2436:3:5;2431:8;;;2576;;;2575:17;2114:8:2;:31::i;:::-;2078:68;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2071:75;;1985:168;;;:::o;1251:634::-;1307:13;1356:14;1373:17;1384:5;1373:10;:17::i;:::-;1393:1;1373:21;1356:38;;1408:20;1442:6;1431:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1431:18:2;-1:-1:-1;1408:41:2;-1:-1:-1;1538:30:2;;;1554:4;1538:30;1595:247;1626:5;;1730:10;1725:2;1714:14;;1709:32;1626:5;1696:46;1786:2;1777:11;;;-1:-1:-1;1806:21:2;1595:247;1806:21;-1:-1:-1;1862:6:2;1251:634;-1:-1:-1;;;1251:634:2:o;835:346:41:-;919:7;1033:109;1107:1;1100:4;1096:1;1086:6;1080:13;1077:1;1072:22;1068:30;1064:41;1061:48;1055:3;1047:6;1044:15;1040:70;1033:109;;;1135:1;1127:6;1123:14;1113:24;;1033:109;;;-1:-1:-1;1168:6:41;;835:346;-1:-1:-1;;835:346:41:o;5044:1463:42:-;1870:13:41;;5135:6:42;;;;7516:41:40;1886:1:41;1862:22;;;1858:30;;;;1854:41;1847:49;1840:57;1823:15;;;1819:79;5304:15:42;;;;5135:6;;5374:53;5304:15;1823::41;5374:40:42;:53::i;:::-;5334:93;;-1:-1:-1;5334:93:42;-1:-1:-1;5476:26:42;;;;5472:90;;-1:-1:-1;5530:13:42;-1:-1:-1;5545:1:42;;-1:-1:-1;5522:25:42;;-1:-1:-1;;5522:25:42;5472:90;5618:5;5627:1;5618:10;5614:341;;5863:16;5847:5;:33;:77;;5922:1;5847:77;;;5883:29;5847:77;5839:101;-1:-1:-1;5933:5:42;-1:-1:-1;5839:101:42;;-1:-1:-1;;;5839:101:42;5614:341;6400:29;6392:37;;:81;;6471:1;6392:81;;;6432:29;6392:81;6384:106;-1:-1:-1;6475:14:42;;;-1:-1:-1;;;;5044:1463:42;;;;;:::o;29471:916:3:-;29524:7;;29608:8;29599:17;;29595:103;;29645:8;29636:17;;;-1:-1:-1;29681:2:3;29671:12;29595:103;29724:8;29715:5;:17;29711:103;;29761:8;29752:17;;;-1:-1:-1;29797:2:3;29787:12;29711:103;29840:8;29831:5;:17;29827:103;;29877:8;29868:17;;;-1:-1:-1;29913:2:3;29903:12;29827:103;29956:7;29947:5;:16;29943:100;;29992:7;29983:16;;;-1:-1:-1;30027:1:3;30017:11;29943:100;30069:7;30060:5;:16;30056:100;;30105:7;30096:16;;;-1:-1:-1;30140:1:3;30130:11;30056:100;30182:7;30173:5;:16;30169:100;;30218:7;30209:16;;;-1:-1:-1;30253:1:3;30243:11;30169:100;30295:7;30286:5;:16;30282:66;;30332:1;30322:11;30374:6;29471:916;-1:-1:-1;;29471:916:3:o;1114:3326:42:-;1199:6;1207:7;1263:3;1254:5;:12;1250:95;;-1:-1:-1;1294:32:42;;-1:-1:-1;1328:1:42;1286:44;;1250:95;1511:5;1520:1;1511:10;1507:80;;1548:24;;;;;;;;;;;;;;1507:80;1808:18;1778:19;1912:7;;;1778:19;2083:486;2100:5;2090:6;:15;;:32;;;;;2120:2;2109:8;:13;2090:32;2083:486;;;2434:13;;2518:10;;;;2546:8;;;;;2468:2;2464:17;2431:1;2426:22;;;;2422:40;;;2418:64;2407:76;2083:486;;;2785:5;2775:6;:15;2771:1613;;2939:13;;2832;2931:22;2927:40;;;3167:1;3159:9;;3155:393;;;-1:-1:-1;3204:29:42;;-1:-1:-1;3235:1:42;;-1:-1:-1;3196:41:42;;-1:-1:-1;;;;3196:41:42;3155:393;3318:2;:14;;;3309:24;;3363:14;;;:22;-1:-1:-1;3359:126:42;;;-1:-1:-1;3425:29:42;;-1:-1:-1;3456:1:42;;-1:-1:-1;3417:41:42;;-1:-1:-1;;;;;3417:41:42;3359:126;3510:15;;;;;-1:-1:-1;3569:8:42;;;;;3760:592;3777:5;3767:6;:15;3760:592;;4007:13;;3876:23;3999:22;4177:18;4150:46;;4146:150;;-1:-1:-1;4236:29:42;;-1:-1:-1;4267:1:42;;-1:-1:-1;4228:41:42;;-1:-1:-1;;;;4228:41:42;4146:150;-1:-1:-1;4321:8:42;;;;;3760:592;;;4413:1;;4417:5;;-1:-1:-1;1114:3326:42;-1:-1:-1;;;;;;1114:3326:42:o;14:207:145:-;100:6;153:2;141:9;132:7;128:23;124:32;121:52;;;169:1;166;159:12;121:52;-1:-1:-1;192:23:145;;14:207;-1:-1:-1;14:207:145:o;435:302::-;557:6;565;618:2;606:9;597:7;593:23;589:32;586:52;;;634:1;631;624:12;586:52;-1:-1:-1;;657:23:145;;;727:2;712:18;;;699:32;;-1:-1:-1;435:302:145:o;742:156::-;808:20;;868:4;857:16;;847:27;;837:55;;888:1;885;878:12;903:277;996:6;1004;1057:2;1045:9;1036:7;1032:23;1028:32;1025:52;;;1073:1;1070;1063:12;1025:52;1109:9;1096:23;1086:33;;1138:36;1170:2;1159:9;1155:18;1138:36;:::i;:::-;1128:46;;903:277;;;;;:::o;1640:368::-;1732:6;1740;1793:2;1781:9;1772:7;1768:23;1764:32;1761:52;;;1809:1;1806;1799:12;1761:52;1845:9;1832:23;1822:33;;1905:2;1894:9;1890:18;1877:32;1952:5;1945:13;1938:21;1931:5;1928:32;1918:60;;1974:1;1971;1964:12;1918:60;1997:5;1987:15;;;1640:368;;;;;:::o;2013:477::-;2162:2;2151:9;2144:21;2125:4;2194:6;2188:13;2237:6;2232:2;2221:9;2217:18;2210:34;2296:6;2291:2;2283:6;2279:15;2274:2;2263:9;2259:18;2253:50;2352:1;2347:2;2338:6;2327:9;2323:22;2319:31;2312:42;2481:2;2411:66;2406:2;2398:6;2394:15;2390:88;2379:9;2375:104;2371:113;2363:121;;;2013:477;;;;:::o;2932:184::-;2984:77;2981:1;2974:88;3081:4;3078:1;3071:15;3105:4;3102:1;3095:15;3121:981;3190:6;3243:2;3231:9;3222:7;3218:23;3214:32;3211:52;;;3259:1;3256;3249:12;3211:52;3299:9;3286:23;3328:18;3369:2;3361:6;3358:14;3355:34;;;3385:1;3382;3375:12;3355:34;3423:6;3412:9;3408:22;3398:32;;3468:7;3461:4;3457:2;3453:13;3449:27;3439:55;;3490:1;3487;3480:12;3439:55;3526:2;3513:16;3548:2;3544;3541:10;3538:36;;;3554:18;;:::i;:::-;3688:2;3682:9;3750:4;3742:13;;3593:66;3738:22;;;3762:2;3734:31;3730:40;3718:53;;;3786:18;;;3806:22;;;3783:46;3780:72;;;3832:18;;:::i;:::-;3872:10;3868:2;3861:22;3907:2;3899:6;3892:18;3947:7;3942:2;3937;3933;3929:11;3925:20;3922:33;3919:53;;;3968:1;3965;3958:12;3919:53;4024:2;4019;4015;4011:11;4006:2;3998:6;3994:15;3981:46;4069:1;4047:15;;;4064:2;4043:24;4036:35;;;;-1:-1:-1;4051:6:145;3121:981;-1:-1:-1;;;;;3121:981:145:o;4458:397::-;4616:6;4624;4632;4685:2;4673:9;4664:7;4660:23;4656:32;4653:52;;;4701:1;4698;4691:12;4653:52;-1:-1:-1;;4724:23:145;;;4794:2;4779:18;;4766:32;;-1:-1:-1;4845:2:145;4830:18;;;4817:32;;4458:397;-1:-1:-1;4458:397:145:o;5706:184::-;5758:77;5755:1;5748:88;5855:4;5852:1;5845:15;5879:4;5876:1;5869:15;5895:184;5947:77;5944:1;5937:88;6044:4;6041:1;6034:15;6068:4;6065:1;6058:15;6084:476;6173:1;6210:5;6173:1;6224:330;6245:7;6235:8;6232:21;6224:330;;;6364:4;6296:66;6292:77;6286:4;6283:87;6280:113;;;6373:18;;:::i;:::-;6423:7;6413:8;6409:22;6406:55;;;6443:16;;;;6406:55;6522:22;;;;6482:15;;;;6224:330;;;6228:3;6084:476;;;;;:::o;6565:866::-;6614:5;6644:8;6634:80;;-1:-1:-1;6685:1:145;6699:5;;6634:80;6733:4;6723:76;;-1:-1:-1;6770:1:145;6784:5;;6723:76;6815:4;6833:1;6828:59;;;;6901:1;6896:130;;;;6808:218;;6828:59;6858:1;6849:10;;6872:5;;;6896:130;6933:3;6923:8;6920:17;6917:43;;;6940:18;;:::i;:::-;-1:-1:-1;;6996:1:145;6982:16;;7011:5;;6808:218;;7110:2;7100:8;7097:16;7091:3;7085:4;7082:13;7078:36;7072:2;7062:8;7059:16;7054:2;7048:4;7045:12;7041:35;7038:77;7035:159;;;-1:-1:-1;7147:19:145;;;7179:5;;7035:159;7226:34;7251:8;7245:4;7226:34;:::i;:::-;7356:6;7288:66;7284:79;7275:7;7272:92;7269:118;;;7367:18;;:::i;:::-;7405:20;;6565:866;-1:-1:-1;;;6565:866:145:o;7436:131::-;7496:5;7525:36;7552:8;7546:4;7525:36;:::i;7572:168::-;7645:9;;;7676;;7693:15;;;7687:22;;7673:37;7663:71;;7714:18;;:::i;7745:200::-;7811:9;;;7784:4;7839:9;;7867:10;;7879:12;;;7863:29;7902:12;;;7894:21;;7860:56;7857:82;;;7919:18;;:::i;:::-;7857:82;7745:200;;;;:::o;7950:216::-;8014:9;;;8042:11;;;7989:3;8072:9;;8100:10;;8096:19;;8125:10;;8117:19;;8093:44;8090:70;;;8140:18;;:::i;:::-;8090:70;;7950:216;;;;:::o;8171:292::-;8243:9;;;8210:7;8268:9;;8285:66;8279:73;;8264:89;8261:115;;;8356:18;;:::i;:::-;8429:1;8420:7;8415:16;8412:1;8409:23;8405:1;8398:9;8395:38;8385:72;;8437:18;;:::i;8786:308::-;8825:1;8851;8841:35;;8856:18;;:::i;:::-;8973:66;8970:1;8967:73;8898:66;8895:1;8892:73;8888:153;8885:179;;;9044:18;;:::i;:::-;-1:-1:-1;9078:10:145;;8786:308::o;9099:112::-;9130:1;9156;9146:35;;9161:18;;:::i;:::-;-1:-1:-1;9195:10:145;;9099:112::o;9216:191::-;9251:3;9282:66;9275:5;9272:77;9269:103;;9352:18;;:::i;9412:120::-;9452:1;9478;9468:35;;9483:18;;:::i;:::-;-1:-1:-1;9517:9:145;;9412:120::o;9537:195::-;9576:3;9607:66;9600:5;9597:77;9594:103;;9677:18;;:::i;:::-;-1:-1:-1;9724:1:145;9713:13;;9537:195::o;9737:212::-;9779:3;9817:5;9811:12;9861:6;9854:4;9847:5;9843:16;9838:3;9832:36;9923:1;9887:16;;9912:13;;;-1:-1:-1;9887:16:145;;9737:212;-1:-1:-1;9737:212:145:o;9954:344::-;10175:3;10206:30;10232:3;10224:6;10206:30;:::i;:::-;10259:3;10245:18;;10290:1;10279:13;;9954:344;-1:-1:-1;;;9954:344:145:o;10303:390::-;10602:3;10597;10590:16;10572:3;10622:65;10648:38;10683:1;10678:3;10674:11;10666:6;10648:38;:::i;:::-;10640:6;10622:65;:::i;:::-;10615:72;10303:390;-1:-1:-1;;;;10303:390:145:o;10698:315::-;10949:3;10944;10937:16;10919:3;10969:38;11004:1;10999:3;10995:11;10987:6;10969:38;:::i;11018:417::-;11293:3;11318:111;11344:84;11370:57;11396:30;11422:3;11414:6;11396:30;:::i;:::-;11388:6;11370:57;:::i;:::-;11362:6;11344:84;:::i;11318:111::-;11311:118;11018:417;-1:-1:-1;;;;;;11018:417:145:o;11620:128::-;11687:9;;;11708:11;;;11705:37;;;11722:18;;:::i;11753:184::-;11805:77;11802:1;11795:88;11902:4;11899:1;11892:15;11926:4;11923:1;11916:15;11942:125;12007:9;;;12028:10;;;12025:36;;;12041:18;;:::i;12072:267::-;12251:3;12276:57;12302:30;12328:3;12320:6;12302:30;:::i","linkReferences":{}},"methodIdentifiers":{"FORMAT_DEFAULT_SCIENTIFIC_MAX()":"9b4afd99","FORMAT_DEFAULT_SCIENTIFIC_MIN()":"d35273a7","abs(bytes32)":"81a82272","add(bytes32,bytes32)":"d1de592a","ceil(bytes32)":"719cd99d","div(bytes32,bytes32)":"30297400","e()":"ffae15ba","eq(bytes32,bytes32)":"3447c030","floor(bytes32)":"5ca0e7a4","format(bytes32)":"a100a3d9","format(bytes32,bool)":"371493ce","format(bytes32,bytes32,bytes32)":"e5526ecd","frac(bytes32)":"28fa1f01","fromFixedDecimalLossless(uint256,uint8)":"3b3bd868","fromFixedDecimalLossy(uint256,uint8)":"e75f991f","gt(bytes32,bytes32)":"8dc29807","gte(bytes32,bytes32)":"73bfb283","integer(bytes32)":"e0db5888","inv(bytes32)":"04327dc5","isZero(bytes32)":"dd646917","log10(bytes32)":"25388350","lt(bytes32,bytes32)":"d102b4d3","lte(bytes32,bytes32)":"81f7e2f5","max(bytes32,bytes32)":"078b665b","maxNegativeValue()":"602c35fc","maxPositiveValue()":"cb09682b","min(bytes32,bytes32)":"a90d041a","minNegativeValue()":"cde72ef3","minPositiveValue()":"a19684b7","minus(bytes32)":"d3d6ffa8","mul(bytes32,bytes32)":"96ce1ec7","parse(string)":"bc62d8d8","pow(bytes32,bytes32)":"3004fa41","pow10(bytes32)":"1ee62f11","sqrt(bytes32)":"146e82ad","sub(bytes32,bytes32)":"41aa0080","toFixedDecimalLossless(bytes32,uint8)":"5b23771d","toFixedDecimalLossy(bytes32,uint8)":"0b6429bc","zero()":"bc1b392d"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"CoefficientOverflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"DivisionByZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"ExponentOverflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"Log10Negative\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Log10Zero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tablesAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"expectedCodehash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"actualCodehash\",\"type\":\"bytes32\"}],\"name\":\"LogTablesNotDeployed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"LossyConversionFromFloat\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"LossyConversionToFloat\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"MaximizeOverflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denominator\",\"type\":\"uint256\"}],\"name\":\"MulDivOverflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"NegativeFixedDecimalConversion\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"PowNegativeBase\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"scientificMin\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"scientificMax\",\"type\":\"bytes32\"}],\"name\":\"ScientificMinNotLessThanMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"UnformatableExponent\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"targetExponent\",\"type\":\"int256\"}],\"name\":\"WithTargetExponentOverflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"ZeroNegativePower\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroStringStartPointer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FORMAT_DEFAULT_SCIENTIFIC_MAX\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FORMAT_DEFAULT_SCIENTIFIC_MIN\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"abs\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"add\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"ceil\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"div\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"e\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"eq\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"floor\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"scientific\",\"type\":\"bool\"}],\"name\":\"format\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"format\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"scientificMin\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"scientificMax\",\"type\":\"bytes32\"}],\"name\":\"format\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"frac\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"name\":\"fromFixedDecimalLossless\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"name\":\"fromFixedDecimalLossy\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"gt\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"gte\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"integer\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"inv\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"isZero\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"log10\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"lt\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"lte\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"max\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxNegativeValue\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxPositiveValue\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"min\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minNegativeValue\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minPositiveValue\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"minus\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"mul\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"str\",\"type\":\"string\"}],\"name\":\"parse\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"},{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"pow\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"pow10\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"}],\"name\":\"sqrt\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"Float\",\"name\":\"b\",\"type\":\"bytes32\"}],\"name\":\"sub\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"float\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"name\":\"toFixedDecimalLossless\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"float\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"name\":\"toFixedDecimalLossy\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"zero\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"CoefficientOverflow(int256,int256)\":[{\"details\":\"Thrown when a coefficient overflows.\"}],\"DivisionByZero(int256,int256)\":[{\"details\":\"Thrown when dividing by zero.\",\"params\":{\"exponent\":\"The exponent of the numerator.\",\"signedCoefficient\":\"The signed coefficient of the numerator.\"}}],\"ExponentOverflow(int256,int256)\":[{\"details\":\"Thrown when an exponent overflows.\"}],\"Log10Negative(int256,int256)\":[{\"details\":\"Thrown when attempting to calculate the log of a negative number.\"}],\"Log10Zero()\":[{\"details\":\"Thrown when attempting to calculate the log of 0.\"}],\"LogTablesNotDeployed(address,bytes32,bytes32)\":[{\"details\":\"Thrown when constructing a `DecimalFloat` on a chain where the log tables data contract is not deployed at the expected address with the expected codehash. Without this check, transcendental functions (`pow10`/`log10`/`pow`/`sqrt`) would silently `extcodecopy` zero bytes and return garbage.\",\"params\":{\"actualCodehash\":\"The codehash currently at `tablesAddress` (zero if no contract is deployed there).\",\"expectedCodehash\":\"The codehash the deployed table contract is expected to have.\",\"tablesAddress\":\"The address `DecimalFloat` was compiled to read log tables from.\"}}],\"LossyConversionFromFloat(int256,int256)\":[{\"details\":\"Thrown when converting a float to some value when the conversion is lossy.\"}],\"LossyConversionToFloat(int256,int256)\":[{\"details\":\"Thrown when converting some value to a float when the conversion is lossy.\"}],\"MaximizeOverflow(int256,int256)\":[{\"details\":\"Thrown when a maximize overflows where it is not appropriate.\"}],\"MulDivOverflow(uint256,uint256,uint256)\":[{\"details\":\"Thrown when mulDiv internal to division overflows.\"}],\"NegativeFixedDecimalConversion(int256,int256)\":[{\"details\":\"Thrown when attempting to convert a negative number to an unsigned fixed-point number.\"}],\"PowNegativeBase(int256,int256)\":[{\"details\":\"Thrown when attempting to exponentiate a negative base.\"}],\"ScientificMinNotLessThanMax(bytes32,bytes32)\":[{\"details\":\"Thrown when scientificMin is not less than scientificMax in format.\",\"params\":{\"scientificMax\":\"The maximum threshold for scientific notation.\",\"scientificMin\":\"The minimum threshold for scientific notation.\"}}],\"UnformatableExponent(int256)\":[{\"details\":\"Thrown when the exponent cannot be formatted.\",\"params\":{\"exponent\":\"The exponent that cannot be formatted.\"}}],\"WithTargetExponentOverflow(int256,int256,int256)\":[{\"details\":\"Thrown when attempting to rescale a coefficient to a target exponent\"}],\"ZeroNegativePower(bytes32)\":[{\"details\":\"Thrown when attempting to exponentiate 0^b where b is negative.\"}]},\"kind\":\"dev\",\"methods\":{\"abs(bytes32)\":{\"params\":{\"a\":\"The float to get the absolute value of.\"},\"returns\":{\"_0\":\"The absolute value of the float.\"}},\"add(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to add.\",\"b\":\"The second float to add.\"},\"returns\":{\"_0\":\"The sum of the two floats.\"}},\"ceil(bytes32)\":{\"params\":{\"a\":\"The float to get the ceiling of.\"},\"returns\":{\"_0\":\"The ceiled float.\"}},\"div(bytes32,bytes32)\":{\"params\":{\"a\":\"The dividend (numerator).\",\"b\":\"The divisor (denominator).\"},\"returns\":{\"_0\":\"The quotient of the two floats.\"}},\"e()\":{\"returns\":{\"_0\":\"The constant value of Euler's number as a Float.\"}},\"eq(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to compare.\",\"b\":\"The second float to compare.\"},\"returns\":{\"_0\":\"True if the two floats are equal, false otherwise.\"}},\"floor(bytes32)\":{\"params\":{\"a\":\"The float to get the floor of.\"},\"returns\":{\"_0\":\"The floored float.\"}},\"format(bytes32)\":{\"params\":{\"a\":\"The float to format.\"},\"returns\":{\"_0\":\"The string representation of the float.\"}},\"format(bytes32,bool)\":{\"params\":{\"a\":\"The float to format.\",\"scientific\":\"Whether to format the float in scientific notation.\"},\"returns\":{\"_0\":\"The string representation of the float.\"}},\"format(bytes32,bytes32,bytes32)\":{\"params\":{\"a\":\"The float to format. The absolute value of `a` is used to determine if scientific notation is used, this allows negative numbers to be formatted consistently with their positive counterparts.\",\"scientificMax\":\"The largest number that won't be formatted in scientific notation.\",\"scientificMin\":\"The smallest number that won't be formatted in scientific notation.\"},\"returns\":{\"_0\":\"The string representation of the float.\"}},\"frac(bytes32)\":{\"params\":{\"a\":\"The float to get the fractional part of.\"},\"returns\":{\"_0\":\"The fractional part of the float.\"}},\"fromFixedDecimalLossless(uint256,uint8)\":{\"params\":{\"decimals\":\"The number of decimals in the fixed point representation. e.g. If 1e18 represents 1 this would be 18 decimals.\",\"value\":\"The fixed point decimal value to convert.\"},\"returns\":{\"_0\":\"float The Float struct containing the signed coefficient and exponent.\"}},\"fromFixedDecimalLossy(uint256,uint8)\":{\"params\":{\"decimals\":\"The number of decimals in the fixed point representation. e.g. If 1e18 represents 1 this would be 18 decimals.\",\"value\":\"The fixed point decimal value to convert.\"},\"returns\":{\"_0\":\"float The Float struct containing the signed coefficient and exponent.\",\"_1\":\"lossless True if the conversion was lossless, false otherwise.\"}},\"gt(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to compare.\",\"b\":\"The second float to compare.\"},\"returns\":{\"_0\":\"True if the first float is greater than the second, false otherwise.\"}},\"gte(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to compare.\",\"b\":\"The second float to compare.\"},\"returns\":{\"_0\":\"True if the first float is greater than or equal to the second, false otherwise.\"}},\"integer(bytes32)\":{\"params\":{\"a\":\"The float to get the integer part of.\"},\"returns\":{\"_0\":\"The integer part of the float.\"}},\"inv(bytes32)\":{\"params\":{\"a\":\"The float to invert.\"},\"returns\":{\"_0\":\"The inverted float.\"}},\"isZero(bytes32)\":{\"params\":{\"a\":\"The float to check.\"},\"returns\":{\"_0\":\"True if the float is zero, false otherwise.\"}},\"log10(bytes32)\":{\"params\":{\"a\":\"The float to take the logarithm of.\"},\"returns\":{\"_0\":\"The logarithm of the float.\"}},\"lt(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to compare.\",\"b\":\"The second float to compare.\"},\"returns\":{\"_0\":\"True if the first float is less than the second, false otherwise.\"}},\"lte(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to compare.\",\"b\":\"The second float to compare.\"},\"returns\":{\"_0\":\"True if the first float is less than or equal to the second, false otherwise.\"}},\"max(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to compare.\",\"b\":\"The second float to compare.\"},\"returns\":{\"_0\":\"The larger of the two floats.\"}},\"maxNegativeValue()\":{\"returns\":{\"_0\":\"The maximum negative value of a Float.\"}},\"maxPositiveValue()\":{\"returns\":{\"_0\":\"The maximum positive value of a Float.\"}},\"min(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to compare.\",\"b\":\"The second float to compare.\"},\"returns\":{\"_0\":\"The smaller of the two floats.\"}},\"minNegativeValue()\":{\"returns\":{\"_0\":\"The minimum negative value of a Float.\"}},\"minPositiveValue()\":{\"returns\":{\"_0\":\"The minimum positive value of a Float.\"}},\"minus(bytes32)\":{\"params\":{\"a\":\"The float to negate.\"},\"returns\":{\"_0\":\"The negated float.\"}},\"mul(bytes32,bytes32)\":{\"params\":{\"a\":\"The first float to multiply.\",\"b\":\"The second float to multiply.\"},\"returns\":{\"_0\":\"The product of the two floats.\"}},\"parse(string)\":{\"params\":{\"str\":\"The string to parse.\"},\"returns\":{\"_0\":\"errorSelector The selector of the error if parsing failed. `0` if parsing succeeded.\",\"_1\":\"parsed The parsed float. Caller MUST check `errorSelector` to determine if parsing succeeded.\"}},\"pow(bytes32,bytes32)\":{\"params\":{\"a\":\"The base float.\",\"b\":\"The exponent float.\"},\"returns\":{\"_0\":\"The result of raising the base float to the power of the exponent\"}},\"pow10(bytes32)\":{\"params\":{\"a\":\"The exponent to raise 10 to.\"},\"returns\":{\"_0\":\"The result of 10^a.\"}},\"sqrt(bytes32)\":{\"params\":{\"a\":\"The float to take the square root of.\"},\"returns\":{\"_0\":\"The square root of the float.\"}},\"sub(bytes32,bytes32)\":{\"params\":{\"a\":\"The float to subtract from.\",\"b\":\"The float to subtract.\"},\"returns\":{\"_0\":\"The difference of the two floats.\"}},\"toFixedDecimalLossless(bytes32,uint8)\":{\"params\":{\"decimals\":\"The number of decimals in the fixed point representation. e.g. If 1e18 represents 1 this would be 18 decimals.\",\"float\":\"The Float struct to convert.\"},\"returns\":{\"_0\":\"The fixed point decimal value as a uint256.\"}},\"toFixedDecimalLossy(bytes32,uint8)\":{\"params\":{\"decimals\":\"The number of decimals in the fixed point representation. e.g. If 1e18 represents 1 this would be 18 decimals.\",\"float\":\"The Float struct to convert.\"},\"returns\":{\"_0\":\"value The fixed point decimal value as a uint256.\",\"_1\":\"lossless True if the conversion was lossless, false otherwise.\"}},\"zero()\":{\"returns\":{\"_0\":\"The zero value of a Float in its maximized representation.\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"ZeroStringStartPointer()\":[{\"notice\":\"The decimal string start pointer is zero.\"}]},\"kind\":\"user\",\"methods\":{\"FORMAT_DEFAULT_SCIENTIFIC_MAX()\":{\"notice\":\"The default maximum value for scientific formatting. 1e9\"},\"FORMAT_DEFAULT_SCIENTIFIC_MIN()\":{\"notice\":\"The default minimum value for scientific formatting. 1e-4\"},\"abs(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.abs` for offchain use.\"},\"add(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.add` for offchain use.\"},\"ceil(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.ceil` for offchain use.\"},\"div(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.div` for offchain use.\"},\"e()\":{\"notice\":\"Exposes `LibDecimalFloat.FLOAT_E` for offchain use.\"},\"eq(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.eq` for offchain use.\"},\"floor(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.floor` for offchain use.\"},\"format(bytes32)\":{\"notice\":\"Exposes `format(Float, Float, Float)` for offchain use. Provides default scientific formatting.\"},\"format(bytes32,bool)\":{\"notice\":\"Exposes `LibFormatDecimalFloat.toDecimalString` for offchain use. provides raw bool interface for custom scientific formatting.\"},\"format(bytes32,bytes32,bytes32)\":{\"notice\":\"Exposes `LibFormatDecimalFloat.toDecimalString` for offchain use.\"},\"frac(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.frac` for offchain use.\"},\"fromFixedDecimalLossless(uint256,uint8)\":{\"notice\":\"Exposes `LibDecimalFloat.fromFixedDecimalLosslessPacked` for offchain use.\"},\"fromFixedDecimalLossy(uint256,uint8)\":{\"notice\":\"Exposes `LibDecimalFloat.fromFixedDecimalLossyPacked` for offchain use.\"},\"gt(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.gt` for offchain use.\"},\"gte(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.gte` for offchain use.\"},\"integer(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.integer` for offchain use.\"},\"inv(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.inv` for offchain use.\"},\"isZero(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.isZero` for offchain use.\"},\"log10(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.log10` for offchain use.\"},\"lt(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.lt` for offchain use.\"},\"lte(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.lte` for offchain use.\"},\"max(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.max` for offchain use.\"},\"maxNegativeValue()\":{\"notice\":\"Exposes `LibDecimalFloat.FLOAT_MAX_NEGATIVE_VALUE` for offchain use.\"},\"maxPositiveValue()\":{\"notice\":\"Exposes `LibDecimalFloat.FLOAT_MAX_POSITIVE_VALUE` for offchain use.\"},\"min(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.min` for offchain use.\"},\"minNegativeValue()\":{\"notice\":\"Exposes `LibDecimalFloat.FLOAT_MIN_NEGATIVE_VALUE` for offchain use.\"},\"minPositiveValue()\":{\"notice\":\"Exposes `LibDecimalFloat.FLOAT_MIN_POSITIVE_VALUE` for offchain use.\"},\"minus(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.minus` for offchain use.\"},\"mul(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.mul` for offchain use.\"},\"parse(string)\":{\"notice\":\"Exposes `LibParseDecimalFloat.parseDecimalFloat` for offchain use.\"},\"pow(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.pow` for offchain use.\"},\"pow10(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.pow10` for offchain use.\"},\"sqrt(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.sqrt` for offchain use.\"},\"sub(bytes32,bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.sub` for offchain use.\"},\"toFixedDecimalLossless(bytes32,uint8)\":{\"notice\":\"Exposes `LibDecimalFloat.toFixedDecimalLossless` for offchain use.\"},\"toFixedDecimalLossy(bytes32,uint8)\":{\"notice\":\"Exposes `LibDecimalFloat.toFixedDecimalLossy` for offchain use.\"},\"zero()\":{\"notice\":\"Exposes `LibDecimalFloat.FLOAT_ZERO` for offchain use.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/concrete/DecimalFloat.sol\":\"DecimalFloat\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"appendCBOR\":false,\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[\":@openzeppelin-contracts-5.6.1/=dependencies/@openzeppelin-contracts-5.6.1/\",\":forge-std-1.16.1/=dependencies/forge-std-1.16.1/\",\":mut/=dependencies/rain-string-0.2.0/src/lib/mut/\",\":parse/=dependencies/rain-string-0.2.0/src/lib/parse/\",\":rain-datacontract-0.1.0/=dependencies/rain-datacontract-0.1.0/\",\":rain-deploy-0.1.2/=dependencies/rain-deploy-0.1.2/\",\":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/\"]},\"sources\":{\"dependencies/@openzeppelin-contracts-5.6.1/utils/Bytes.sol\":{\"keccak256\":\"0xf80e4b96b6849936ea0fabd76cf81b13d7276295fddb1e1c07afb3ddf650b0ac\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6430007255ac11c6e9c4331a418f3af52ff66fbbae959f645301d025b20aeb08\",\"dweb:/ipfs/QmQE5fjmBBRw9ndnzJuC2uskYss1gbaR7JdazoCf1FGoBj\"]},\"dependencies/@openzeppelin-contracts-5.6.1/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"dependencies/@openzeppelin-contracts-5.6.1/utils/Strings.sol\":{\"keccak256\":\"0x1fdc2de9585ab0f1c417f02a873a2b6343cd64bb7ffec6b00ffa11a4a158d9e8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ab223a3d969c6cd7610049431dd42740960c477e45878f5d8b54411f7a32bdc\",\"dweb:/ipfs/QmWumhjvhpKcwx3vDPQninsNVTc3BGvqaihkQakFkQYpaS\"]},\"dependencies/@openzeppelin-contracts-5.6.1/utils/math/Math.sol\":{\"keccak256\":\"0x59973a93b1f983f94e10529f46ca46544a9fec2b5f56fb1390bbe9e0dc79f857\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c55ef8f0b9719790c2ae6f81d80a59ffb89f2f0abe6bc065585bd79edce058c5\",\"dweb:/ipfs/QmNNmCbX9NjPXKqHJN8R1WC2rNeZSQrPZLd6FF6AKLyH5Y\"]},\"dependencies/@openzeppelin-contracts-5.6.1/utils/math/SafeCast.sol\":{\"keccak256\":\"0xc8cae21c9ae4a46e5162ff9bf5b351d6fa6a6eba72d515f3bc1bdfeda7fdf083\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce830ebcf28e31643caba318996db3763c36d52cd0f23798ba83c135355d45e9\",\"dweb:/ipfs/QmdGPcvptHN7UBCbUYBbRX3hiRVRFLRwno8b4uga6uFNif\"]},\"dependencies/@openzeppelin-contracts-5.6.1/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]},\"dependencies/rain-string-0.2.0/src/error/ErrParse.sol\":{\"keccak256\":\"0x7a69236ad67e39c20f6ade7973ec551c9a5bb5db4671c8afa95b80f35a996497\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://4731c6ea05b4e820814380dbbd6dac14f5778a1e9194b8992148cf97a99ffbb2\",\"dweb:/ipfs/QmUMnKNt2zQ42fjS4fpLqodXytiffVFzaKupAm8rNsrYVo\"]},\"dependencies/rain-string-0.2.0/src/lib/parse/LibParseCMask.sol\":{\"keccak256\":\"0x91e798a6f71aafbd4743720eaa38a7f16f74c6c0ab2992e7e4982979e9df539a\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://4782e62e0e5a5fbc7d6c757dcc90347d7ad064f25372a6c471ffa968e12b91d7\",\"dweb:/ipfs/QmPohMsVTjm19gxYwxgAsTKJQRjkK2J1Pyah63nCtYBBnt\"]},\"dependencies/rain-string-0.2.0/src/lib/parse/LibParseChar.sol\":{\"keccak256\":\"0x66c401d784e9461f709116441de3707685e08438cd83553db28fe8caf0e97238\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://e6027d0f9d558953686f6eb78ca0b2f2e7d9d38e0be6d1435ffaaa4b90919593\",\"dweb:/ipfs/QmQXDMTzmJrst2a4kHkcfjSsEdnPc4ikQs7VfGbCfe9QCc\"]},\"dependencies/rain-string-0.2.0/src/lib/parse/LibParseDecimal.sol\":{\"keccak256\":\"0x72ccc4d7e0a1245897511e1efc15ddc80d423a8eb956249be7940a8e8f4e99fe\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://3ca57acd6a7cbe16f2c03aa5a6e81ec7af1ad44078924358578560a32aead7c0\",\"dweb:/ipfs/QmNukyUMS4JrzNHAYcpLbtYsD5CwYPEjfAaADv6qMZmqs6\"]},\"src/concrete/DecimalFloat.sol\":{\"keccak256\":\"0x6326a6b5ffef0708b84712c0b891dfc7f2d88c38191628da1f40933951f2683b\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://ad99eda6cc266d5d160439700d3c89a487e8e31d51538f2ad83435a1aac9f3ae\",\"dweb:/ipfs/QmarsuZkgqG7jT9mYBh1VKNvjD5ZsVtJJTiRGbfMQAY669\"]},\"src/error/ErrDecimalFloat.sol\":{\"keccak256\":\"0x53825ff4d1af4981100de46bd7536c611625fe7930b5c21921838cfed3a92243\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://961197f4c7b6d560f71f67892bfd5b64300be0f0fdb20162058938567653643e\",\"dweb:/ipfs/QmTJzmA5CEkmYrXJ2MHnfQ3wGm1Qj6xE1vNaqAqgUpEnvA\"]},\"src/error/ErrFormat.sol\":{\"keccak256\":\"0xc760cb6018291753e7408d55d12d5e66c116f9750dc241bbc201f3b46ae33aa7\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://cbc81bb7c26c8503926b579f978902bcc3227839bee04bd3500cc924d142d28e\",\"dweb:/ipfs/QmXqMuqBCpckD1EnsBjweyLdRZxpvC2xSP9FWBZFh2vztR\"]},\"src/error/ErrParse.sol\":{\"keccak256\":\"0x7fc9fe7421d78306d252d2853fd1be943d9cbd12ff7a9c8c3f286a8164bfe357\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://7b4c434d01b53788968d185683d9633afa26d95396b1e91337a53ccaab0d44ab\",\"dweb:/ipfs/QmQHmVjR37wwrCskiQviwkg7WkeBpr9uPddjuDxqzANXeV\"]},\"src/generated/LogTables.pointers.sol\":{\"keccak256\":\"0x2325d92e3e248350a79f163fcb8738056ae4240b6a77f759ff5fcbf7b381f5ae\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://9a52674114518573de7d184094b266bc2b5208953086f8ec35a494f048deefbb\",\"dweb:/ipfs/QmTjuj1R9k4pFMBVpX6RcWG87Rdh9pRTZVHYo93SzBfmsH\"]},\"src/lib/LibDecimalFloat.sol\":{\"keccak256\":\"0x59d2dad4b7e861ed835a79c61ae42b4b0d628f9c578f3bb3ecd7796ed530f196\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://e565148a37f06299de3b6bcb3385ea0336f65c6c02c9ebfbc6f227f4e56d1c03\",\"dweb:/ipfs/Qma6UNZifZc8zsf7J6B87CdCXhiCR6Zisyg9czsfaji6yY\"]},\"src/lib/deploy/LibDecimalFloatDeploy.sol\":{\"keccak256\":\"0x79f59754c234e55420359efaa9af6ec851fadf8dfaecda6860c1ef99abcf1e64\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://8303dde773c7c613981011fe9ee5d976338b3dab9c66cd67516a82b094596343\",\"dweb:/ipfs/QmQnkeaReEwkKcFMvegAuuBoF2WyirRQmQG9CjKfdhQKnZ\"]},\"src/lib/format/LibFormatDecimalFloat.sol\":{\"keccak256\":\"0x5aac6382e7f7040e68600333c1b00b0aedb3edb6bced84b63783f6d88fe0b4f0\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://e96d30e34e1fa2cc4eb574ded30c0f6f93929dcc19cb571f555ca8c5ac32eaa7\",\"dweb:/ipfs/QmRRtk84AqEdQrRXfeTzVUAbAktJTZ92iTLqjocQV4PDx7\"]},\"src/lib/implementation/LibDecimalFloatImplementation.sol\":{\"keccak256\":\"0x47d0eeb542875548689465407162a19e4a21fb4591af5bb48d5758c0d1b93634\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://631efb796ff17f277804f8a32df7d28630c2ae5300e7d74c37aa8ed1f86b5092\",\"dweb:/ipfs/QmSfmMGQyxKYxu8UrWDEtuCggQ9HtFJy5cbMsYLPZbcTZ7\"]},\"src/lib/parse/LibParseDecimalFloat.sol\":{\"keccak256\":\"0x703d2d37d8a14639a3eb2dcd61601b36552027e16b4e8414befe51f2d0b9ed38\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://53fa45503e115a322a701a1289c5b5fcbe68090c83e0635af77d275d123f09f0\",\"dweb:/ipfs/QmTBtz8uPLYXrTue9SmHBVdgjpFJYUU41Z48PAgu1nXafn\"]},\"src/lib/table/LibLogTable.sol\":{\"keccak256\":\"0xccd2dea54cfb708c01e7e8e88c089742bbab18f5783be4632311fb4923d44c88\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://f45fb78c16b5d66d56ba0e78acdb0ca5d315eb05efa2cd7a81e191aabe7aec52\",\"dweb:/ipfs/QmQJ3TFFxTMu4HZ4qnjgmdmSNhGZLQRdCnSqAipEF1up1f\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.25+commit.b61c2a91"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"int256","name":"signedCoefficient","type":"int256"},{"internalType":"int256","name":"exponent","type":"int256"}],"type":"error","name":"CoefficientOverflow"},{"inputs":[{"internalType":"int256","name":"signedCoefficient","type":"int256"},{"internalType":"int256","name":"exponent","type":"int256"}],"type":"error","name":"DivisionByZero"},{"inputs":[{"internalType":"int256","name":"signedCoefficient","type":"int256"},{"internalType":"int256","name":"exponent","type":"int256"}],"type":"error","name":"ExponentOverflow"},{"inputs":[{"internalType":"int256","name":"signedCoefficient","type":"int256"},{"internalType":"int256","name":"exponent","type":"int256"}],"type":"error","name":"Log10Negative"},{"inputs":[],"type":"error","name":"Log10Zero"},{"inputs":[{"internalType":"address","name":"tablesAddress","type":"address"},{"internalType":"bytes32","name":"expectedCodehash","type":"bytes32"},{"internalType":"bytes32","name":"actualCodehash","type":"bytes32"}],"type":"error","name":"LogTablesNotDeployed"},{"inputs":[{"internalType":"int256","name":"signedCoefficient","type":"int256"},{"internalType":"int256","name":"exponent","type":"int256"}],"type":"error","name":"LossyConversionFromFloat"},{"inputs":[{"internalType":"int256","name":"signedCoefficient","type":"int256"},{"internalType":"int256","name":"exponent","type":"int256"}],"type":"error","name":"LossyConversionToFloat"},{"inputs":[{"internalType":"int256","name":"signedCoefficient","type":"int256"},{"internalType":"int256","name":"exponent","type":"int256"}],"type":"error","name":"MaximizeOverflow"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"},{"internalType":"uint256","name":"denominator","type":"uint256"}],"type":"error","name":"MulDivOverflow"},{"inputs":[{"internalType":"int256","name":"signedCoefficient","type":"int256"},{"internalType":"int256","name":"exponent","type":"int256"}],"type":"error","name":"NegativeFixedDecimalConversion"},{"inputs":[{"internalType":"int256","name":"signedCoefficient","type":"int256"},{"internalType":"int256","name":"exponent","type":"int256"}],"type":"error","name":"PowNegativeBase"},{"inputs":[{"internalType":"Float","name":"scientificMin","type":"bytes32"},{"internalType":"Float","name":"scientificMax","type":"bytes32"}],"type":"error","name":"ScientificMinNotLessThanMax"},{"inputs":[{"internalType":"int256","name":"exponent","type":"int256"}],"type":"error","name":"UnformatableExponent"},{"inputs":[{"internalType":"int256","name":"signedCoefficient","type":"int256"},{"internalType":"int256","name":"exponent","type":"int256"},{"internalType":"int256","name":"targetExponent","type":"int256"}],"type":"error","name":"WithTargetExponentOverflow"},{"inputs":[{"internalType":"Float","name":"b","type":"bytes32"}],"type":"error","name":"ZeroNegativePower"},{"inputs":[],"type":"error","name":"ZeroStringStartPointer"},{"inputs":[],"stateMutability":"view","type":"function","name":"FORMAT_DEFAULT_SCIENTIFIC_MAX","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"FORMAT_DEFAULT_SCIENTIFIC_MIN","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"abs","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"b","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"add","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"ceil","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"b","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"div","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"e","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"b","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"eq","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"floor","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"bool","name":"scientific","type":"bool"}],"stateMutability":"pure","type":"function","name":"format","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"format","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"scientificMin","type":"bytes32"},{"internalType":"Float","name":"scientificMax","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"format","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"frac","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint8","name":"decimals","type":"uint8"}],"stateMutability":"pure","type":"function","name":"fromFixedDecimalLossless","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint8","name":"decimals","type":"uint8"}],"stateMutability":"pure","type":"function","name":"fromFixedDecimalLossy","outputs":[{"internalType":"Float","name":"","type":"bytes32"},{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"b","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"gt","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"b","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"gte","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"integer","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"inv","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"isZero","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"}],"stateMutability":"view","type":"function","name":"log10","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"b","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"lt","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"b","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"lte","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"b","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"max","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"maxNegativeValue","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"maxPositiveValue","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"b","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"min","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"minNegativeValue","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"minPositiveValue","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"minus","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"b","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"mul","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"string","name":"str","type":"string"}],"stateMutability":"pure","type":"function","name":"parse","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"},{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"b","type":"bytes32"}],"stateMutability":"view","type":"function","name":"pow","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"}],"stateMutability":"view","type":"function","name":"pow10","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"}],"stateMutability":"view","type":"function","name":"sqrt","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"a","type":"bytes32"},{"internalType":"Float","name":"b","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"sub","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"float","type":"bytes32"},{"internalType":"uint8","name":"decimals","type":"uint8"}],"stateMutability":"pure","type":"function","name":"toFixedDecimalLossless","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"Float","name":"float","type":"bytes32"},{"internalType":"uint8","name":"decimals","type":"uint8"}],"stateMutability":"pure","type":"function","name":"toFixedDecimalLossy","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"zero","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]}],"devdoc":{"kind":"dev","methods":{"abs(bytes32)":{"params":{"a":"The float to get the absolute value of."},"returns":{"_0":"The absolute value of the float."}},"add(bytes32,bytes32)":{"params":{"a":"The first float to add.","b":"The second float to add."},"returns":{"_0":"The sum of the two floats."}},"ceil(bytes32)":{"params":{"a":"The float to get the ceiling of."},"returns":{"_0":"The ceiled float."}},"div(bytes32,bytes32)":{"params":{"a":"The dividend (numerator).","b":"The divisor (denominator)."},"returns":{"_0":"The quotient of the two floats."}},"e()":{"returns":{"_0":"The constant value of Euler's number as a Float."}},"eq(bytes32,bytes32)":{"params":{"a":"The first float to compare.","b":"The second float to compare."},"returns":{"_0":"True if the two floats are equal, false otherwise."}},"floor(bytes32)":{"params":{"a":"The float to get the floor of."},"returns":{"_0":"The floored float."}},"format(bytes32)":{"params":{"a":"The float to format."},"returns":{"_0":"The string representation of the float."}},"format(bytes32,bool)":{"params":{"a":"The float to format.","scientific":"Whether to format the float in scientific notation."},"returns":{"_0":"The string representation of the float."}},"format(bytes32,bytes32,bytes32)":{"params":{"a":"The float to format. The absolute value of `a` is used to determine if scientific notation is used, this allows negative numbers to be formatted consistently with their positive counterparts.","scientificMax":"The largest number that won't be formatted in scientific notation.","scientificMin":"The smallest number that won't be formatted in scientific notation."},"returns":{"_0":"The string representation of the float."}},"frac(bytes32)":{"params":{"a":"The float to get the fractional part of."},"returns":{"_0":"The fractional part of the float."}},"fromFixedDecimalLossless(uint256,uint8)":{"params":{"decimals":"The number of decimals in the fixed point representation. e.g. If 1e18 represents 1 this would be 18 decimals.","value":"The fixed point decimal value to convert."},"returns":{"_0":"float The Float struct containing the signed coefficient and exponent."}},"fromFixedDecimalLossy(uint256,uint8)":{"params":{"decimals":"The number of decimals in the fixed point representation. e.g. If 1e18 represents 1 this would be 18 decimals.","value":"The fixed point decimal value to convert."},"returns":{"_0":"float The Float struct containing the signed coefficient and exponent.","_1":"lossless True if the conversion was lossless, false otherwise."}},"gt(bytes32,bytes32)":{"params":{"a":"The first float to compare.","b":"The second float to compare."},"returns":{"_0":"True if the first float is greater than the second, false otherwise."}},"gte(bytes32,bytes32)":{"params":{"a":"The first float to compare.","b":"The second float to compare."},"returns":{"_0":"True if the first float is greater than or equal to the second, false otherwise."}},"integer(bytes32)":{"params":{"a":"The float to get the integer part of."},"returns":{"_0":"The integer part of the float."}},"inv(bytes32)":{"params":{"a":"The float to invert."},"returns":{"_0":"The inverted float."}},"isZero(bytes32)":{"params":{"a":"The float to check."},"returns":{"_0":"True if the float is zero, false otherwise."}},"log10(bytes32)":{"params":{"a":"The float to take the logarithm of."},"returns":{"_0":"The logarithm of the float."}},"lt(bytes32,bytes32)":{"params":{"a":"The first float to compare.","b":"The second float to compare."},"returns":{"_0":"True if the first float is less than the second, false otherwise."}},"lte(bytes32,bytes32)":{"params":{"a":"The first float to compare.","b":"The second float to compare."},"returns":{"_0":"True if the first float is less than or equal to the second, false otherwise."}},"max(bytes32,bytes32)":{"params":{"a":"The first float to compare.","b":"The second float to compare."},"returns":{"_0":"The larger of the two floats."}},"maxNegativeValue()":{"returns":{"_0":"The maximum negative value of a Float."}},"maxPositiveValue()":{"returns":{"_0":"The maximum positive value of a Float."}},"min(bytes32,bytes32)":{"params":{"a":"The first float to compare.","b":"The second float to compare."},"returns":{"_0":"The smaller of the two floats."}},"minNegativeValue()":{"returns":{"_0":"The minimum negative value of a Float."}},"minPositiveValue()":{"returns":{"_0":"The minimum positive value of a Float."}},"minus(bytes32)":{"params":{"a":"The float to negate."},"returns":{"_0":"The negated float."}},"mul(bytes32,bytes32)":{"params":{"a":"The first float to multiply.","b":"The second float to multiply."},"returns":{"_0":"The product of the two floats."}},"parse(string)":{"params":{"str":"The string to parse."},"returns":{"_0":"errorSelector The selector of the error if parsing failed. `0` if parsing succeeded.","_1":"parsed The parsed float. Caller MUST check `errorSelector` to determine if parsing succeeded."}},"pow(bytes32,bytes32)":{"params":{"a":"The base float.","b":"The exponent float."},"returns":{"_0":"The result of raising the base float to the power of the exponent"}},"pow10(bytes32)":{"params":{"a":"The exponent to raise 10 to."},"returns":{"_0":"The result of 10^a."}},"sqrt(bytes32)":{"params":{"a":"The float to take the square root of."},"returns":{"_0":"The square root of the float."}},"sub(bytes32,bytes32)":{"params":{"a":"The float to subtract from.","b":"The float to subtract."},"returns":{"_0":"The difference of the two floats."}},"toFixedDecimalLossless(bytes32,uint8)":{"params":{"decimals":"The number of decimals in the fixed point representation. e.g. If 1e18 represents 1 this would be 18 decimals.","float":"The Float struct to convert."},"returns":{"_0":"The fixed point decimal value as a uint256."}},"toFixedDecimalLossy(bytes32,uint8)":{"params":{"decimals":"The number of decimals in the fixed point representation. e.g. If 1e18 represents 1 this would be 18 decimals.","float":"The Float struct to convert."},"returns":{"_0":"value The fixed point decimal value as a uint256.","_1":"lossless True if the conversion was lossless, false otherwise."}},"zero()":{"returns":{"_0":"The zero value of a Float in its maximized representation."}}},"version":1},"userdoc":{"kind":"user","methods":{"FORMAT_DEFAULT_SCIENTIFIC_MAX()":{"notice":"The default maximum value for scientific formatting. 1e9"},"FORMAT_DEFAULT_SCIENTIFIC_MIN()":{"notice":"The default minimum value for scientific formatting. 1e-4"},"abs(bytes32)":{"notice":"Exposes `LibDecimalFloat.abs` for offchain use."},"add(bytes32,bytes32)":{"notice":"Exposes `LibDecimalFloat.add` for offchain use."},"ceil(bytes32)":{"notice":"Exposes `LibDecimalFloat.ceil` for offchain use."},"div(bytes32,bytes32)":{"notice":"Exposes `LibDecimalFloat.div` for offchain use."},"e()":{"notice":"Exposes `LibDecimalFloat.FLOAT_E` for offchain use."},"eq(bytes32,bytes32)":{"notice":"Exposes `LibDecimalFloat.eq` for offchain use."},"floor(bytes32)":{"notice":"Exposes `LibDecimalFloat.floor` for offchain use."},"format(bytes32)":{"notice":"Exposes `format(Float, Float, Float)` for offchain use. Provides default scientific formatting."},"format(bytes32,bool)":{"notice":"Exposes `LibFormatDecimalFloat.toDecimalString` for offchain use. provides raw bool interface for custom scientific formatting."},"format(bytes32,bytes32,bytes32)":{"notice":"Exposes `LibFormatDecimalFloat.toDecimalString` for offchain use."},"frac(bytes32)":{"notice":"Exposes `LibDecimalFloat.frac` for offchain use."},"fromFixedDecimalLossless(uint256,uint8)":{"notice":"Exposes `LibDecimalFloat.fromFixedDecimalLosslessPacked` for offchain use."},"fromFixedDecimalLossy(uint256,uint8)":{"notice":"Exposes `LibDecimalFloat.fromFixedDecimalLossyPacked` for offchain use."},"gt(bytes32,bytes32)":{"notice":"Exposes `LibDecimalFloat.gt` for offchain use."},"gte(bytes32,bytes32)":{"notice":"Exposes `LibDecimalFloat.gte` for offchain use."},"integer(bytes32)":{"notice":"Exposes `LibDecimalFloat.integer` for offchain use."},"inv(bytes32)":{"notice":"Exposes `LibDecimalFloat.inv` for offchain use."},"isZero(bytes32)":{"notice":"Exposes `LibDecimalFloat.isZero` for offchain use."},"log10(bytes32)":{"notice":"Exposes `LibDecimalFloat.log10` for offchain use."},"lt(bytes32,bytes32)":{"notice":"Exposes `LibDecimalFloat.lt` for offchain use."},"lte(bytes32,bytes32)":{"notice":"Exposes `LibDecimalFloat.lte` for offchain use."},"max(bytes32,bytes32)":{"notice":"Exposes `LibDecimalFloat.max` for offchain use."},"maxNegativeValue()":{"notice":"Exposes `LibDecimalFloat.FLOAT_MAX_NEGATIVE_VALUE` for offchain use."},"maxPositiveValue()":{"notice":"Exposes `LibDecimalFloat.FLOAT_MAX_POSITIVE_VALUE` for offchain use."},"min(bytes32,bytes32)":{"notice":"Exposes `LibDecimalFloat.min` for offchain use."},"minNegativeValue()":{"notice":"Exposes `LibDecimalFloat.FLOAT_MIN_NEGATIVE_VALUE` for offchain use."},"minPositiveValue()":{"notice":"Exposes `LibDecimalFloat.FLOAT_MIN_POSITIVE_VALUE` for offchain use."},"minus(bytes32)":{"notice":"Exposes `LibDecimalFloat.minus` for offchain use."},"mul(bytes32,bytes32)":{"notice":"Exposes `LibDecimalFloat.mul` for offchain use."},"parse(string)":{"notice":"Exposes `LibParseDecimalFloat.parseDecimalFloat` for offchain use."},"pow(bytes32,bytes32)":{"notice":"Exposes `LibDecimalFloat.pow` for offchain use."},"pow10(bytes32)":{"notice":"Exposes `LibDecimalFloat.pow10` for offchain use."},"sqrt(bytes32)":{"notice":"Exposes `LibDecimalFloat.sqrt` for offchain use."},"sub(bytes32,bytes32)":{"notice":"Exposes `LibDecimalFloat.sub` for offchain use."},"toFixedDecimalLossless(bytes32,uint8)":{"notice":"Exposes `LibDecimalFloat.toFixedDecimalLossless` for offchain use."},"toFixedDecimalLossy(bytes32,uint8)":{"notice":"Exposes `LibDecimalFloat.toFixedDecimalLossy` for offchain use."},"zero()":{"notice":"Exposes `LibDecimalFloat.FLOAT_ZERO` for offchain use."}},"version":1}},"settings":{"remappings":["@openzeppelin-contracts-5.6.1/=dependencies/@openzeppelin-contracts-5.6.1/","forge-std-1.16.1/=dependencies/forge-std-1.16.1/","mut/=dependencies/rain-string-0.2.0/src/lib/mut/","parse/=dependencies/rain-string-0.2.0/src/lib/parse/","rain-datacontract-0.1.0/=dependencies/rain-datacontract-0.1.0/","rain-deploy-0.1.2/=dependencies/rain-deploy-0.1.2/","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/"],"optimizer":{"enabled":true,"runs":1000000},"metadata":{"bytecodeHash":"none","appendCBOR":false},"compilationTarget":{"src/concrete/DecimalFloat.sol":"DecimalFloat"},"evmVersion":"cancun","libraries":{}},"sources":{"dependencies/@openzeppelin-contracts-5.6.1/utils/Bytes.sol":{"keccak256":"0xf80e4b96b6849936ea0fabd76cf81b13d7276295fddb1e1c07afb3ddf650b0ac","urls":["bzz-raw://6430007255ac11c6e9c4331a418f3af52ff66fbbae959f645301d025b20aeb08","dweb:/ipfs/QmQE5fjmBBRw9ndnzJuC2uskYss1gbaR7JdazoCf1FGoBj"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.6.1/utils/Panic.sol":{"keccak256":"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a","urls":["bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a","dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.6.1/utils/Strings.sol":{"keccak256":"0x1fdc2de9585ab0f1c417f02a873a2b6343cd64bb7ffec6b00ffa11a4a158d9e8","urls":["bzz-raw://1ab223a3d969c6cd7610049431dd42740960c477e45878f5d8b54411f7a32bdc","dweb:/ipfs/QmWumhjvhpKcwx3vDPQninsNVTc3BGvqaihkQakFkQYpaS"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.6.1/utils/math/Math.sol":{"keccak256":"0x59973a93b1f983f94e10529f46ca46544a9fec2b5f56fb1390bbe9e0dc79f857","urls":["bzz-raw://c55ef8f0b9719790c2ae6f81d80a59ffb89f2f0abe6bc065585bd79edce058c5","dweb:/ipfs/QmNNmCbX9NjPXKqHJN8R1WC2rNeZSQrPZLd6FF6AKLyH5Y"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.6.1/utils/math/SafeCast.sol":{"keccak256":"0xc8cae21c9ae4a46e5162ff9bf5b351d6fa6a6eba72d515f3bc1bdfeda7fdf083","urls":["bzz-raw://ce830ebcf28e31643caba318996db3763c36d52cd0f23798ba83c135355d45e9","dweb:/ipfs/QmdGPcvptHN7UBCbUYBbRX3hiRVRFLRwno8b4uga6uFNif"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.6.1/utils/math/SignedMath.sol":{"keccak256":"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3","urls":["bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03","dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ"],"license":"MIT"},"dependencies/rain-string-0.2.0/src/error/ErrParse.sol":{"keccak256":"0x7a69236ad67e39c20f6ade7973ec551c9a5bb5db4671c8afa95b80f35a996497","urls":["bzz-raw://4731c6ea05b4e820814380dbbd6dac14f5778a1e9194b8992148cf97a99ffbb2","dweb:/ipfs/QmUMnKNt2zQ42fjS4fpLqodXytiffVFzaKupAm8rNsrYVo"],"license":"LicenseRef-DCL-1.0"},"dependencies/rain-string-0.2.0/src/lib/parse/LibParseCMask.sol":{"keccak256":"0x91e798a6f71aafbd4743720eaa38a7f16f74c6c0ab2992e7e4982979e9df539a","urls":["bzz-raw://4782e62e0e5a5fbc7d6c757dcc90347d7ad064f25372a6c471ffa968e12b91d7","dweb:/ipfs/QmPohMsVTjm19gxYwxgAsTKJQRjkK2J1Pyah63nCtYBBnt"],"license":"LicenseRef-DCL-1.0"},"dependencies/rain-string-0.2.0/src/lib/parse/LibParseChar.sol":{"keccak256":"0x66c401d784e9461f709116441de3707685e08438cd83553db28fe8caf0e97238","urls":["bzz-raw://e6027d0f9d558953686f6eb78ca0b2f2e7d9d38e0be6d1435ffaaa4b90919593","dweb:/ipfs/QmQXDMTzmJrst2a4kHkcfjSsEdnPc4ikQs7VfGbCfe9QCc"],"license":"LicenseRef-DCL-1.0"},"dependencies/rain-string-0.2.0/src/lib/parse/LibParseDecimal.sol":{"keccak256":"0x72ccc4d7e0a1245897511e1efc15ddc80d423a8eb956249be7940a8e8f4e99fe","urls":["bzz-raw://3ca57acd6a7cbe16f2c03aa5a6e81ec7af1ad44078924358578560a32aead7c0","dweb:/ipfs/QmNukyUMS4JrzNHAYcpLbtYsD5CwYPEjfAaADv6qMZmqs6"],"license":"LicenseRef-DCL-1.0"},"src/concrete/DecimalFloat.sol":{"keccak256":"0x6326a6b5ffef0708b84712c0b891dfc7f2d88c38191628da1f40933951f2683b","urls":["bzz-raw://ad99eda6cc266d5d160439700d3c89a487e8e31d51538f2ad83435a1aac9f3ae","dweb:/ipfs/QmarsuZkgqG7jT9mYBh1VKNvjD5ZsVtJJTiRGbfMQAY669"],"license":"LicenseRef-DCL-1.0"},"src/error/ErrDecimalFloat.sol":{"keccak256":"0x53825ff4d1af4981100de46bd7536c611625fe7930b5c21921838cfed3a92243","urls":["bzz-raw://961197f4c7b6d560f71f67892bfd5b64300be0f0fdb20162058938567653643e","dweb:/ipfs/QmTJzmA5CEkmYrXJ2MHnfQ3wGm1Qj6xE1vNaqAqgUpEnvA"],"license":"LicenseRef-DCL-1.0"},"src/error/ErrFormat.sol":{"keccak256":"0xc760cb6018291753e7408d55d12d5e66c116f9750dc241bbc201f3b46ae33aa7","urls":["bzz-raw://cbc81bb7c26c8503926b579f978902bcc3227839bee04bd3500cc924d142d28e","dweb:/ipfs/QmXqMuqBCpckD1EnsBjweyLdRZxpvC2xSP9FWBZFh2vztR"],"license":"LicenseRef-DCL-1.0"},"src/error/ErrParse.sol":{"keccak256":"0x7fc9fe7421d78306d252d2853fd1be943d9cbd12ff7a9c8c3f286a8164bfe357","urls":["bzz-raw://7b4c434d01b53788968d185683d9633afa26d95396b1e91337a53ccaab0d44ab","dweb:/ipfs/QmQHmVjR37wwrCskiQviwkg7WkeBpr9uPddjuDxqzANXeV"],"license":"LicenseRef-DCL-1.0"},"src/generated/LogTables.pointers.sol":{"keccak256":"0x2325d92e3e248350a79f163fcb8738056ae4240b6a77f759ff5fcbf7b381f5ae","urls":["bzz-raw://9a52674114518573de7d184094b266bc2b5208953086f8ec35a494f048deefbb","dweb:/ipfs/QmTjuj1R9k4pFMBVpX6RcWG87Rdh9pRTZVHYo93SzBfmsH"],"license":"LicenseRef-DCL-1.0"},"src/lib/LibDecimalFloat.sol":{"keccak256":"0x59d2dad4b7e861ed835a79c61ae42b4b0d628f9c578f3bb3ecd7796ed530f196","urls":["bzz-raw://e565148a37f06299de3b6bcb3385ea0336f65c6c02c9ebfbc6f227f4e56d1c03","dweb:/ipfs/Qma6UNZifZc8zsf7J6B87CdCXhiCR6Zisyg9czsfaji6yY"],"license":"LicenseRef-DCL-1.0"},"src/lib/deploy/LibDecimalFloatDeploy.sol":{"keccak256":"0x79f59754c234e55420359efaa9af6ec851fadf8dfaecda6860c1ef99abcf1e64","urls":["bzz-raw://8303dde773c7c613981011fe9ee5d976338b3dab9c66cd67516a82b094596343","dweb:/ipfs/QmQnkeaReEwkKcFMvegAuuBoF2WyirRQmQG9CjKfdhQKnZ"],"license":"LicenseRef-DCL-1.0"},"src/lib/format/LibFormatDecimalFloat.sol":{"keccak256":"0x5aac6382e7f7040e68600333c1b00b0aedb3edb6bced84b63783f6d88fe0b4f0","urls":["bzz-raw://e96d30e34e1fa2cc4eb574ded30c0f6f93929dcc19cb571f555ca8c5ac32eaa7","dweb:/ipfs/QmRRtk84AqEdQrRXfeTzVUAbAktJTZ92iTLqjocQV4PDx7"],"license":"LicenseRef-DCL-1.0"},"src/lib/implementation/LibDecimalFloatImplementation.sol":{"keccak256":"0x47d0eeb542875548689465407162a19e4a21fb4591af5bb48d5758c0d1b93634","urls":["bzz-raw://631efb796ff17f277804f8a32df7d28630c2ae5300e7d74c37aa8ed1f86b5092","dweb:/ipfs/QmSfmMGQyxKYxu8UrWDEtuCggQ9HtFJy5cbMsYLPZbcTZ7"],"license":"LicenseRef-DCL-1.0"},"src/lib/parse/LibParseDecimalFloat.sol":{"keccak256":"0x703d2d37d8a14639a3eb2dcd61601b36552027e16b4e8414befe51f2d0b9ed38","urls":["bzz-raw://53fa45503e115a322a701a1289c5b5fcbe68090c83e0635af77d275d123f09f0","dweb:/ipfs/QmTBtz8uPLYXrTue9SmHBVdgjpFJYUU41Z48PAgu1nXafn"],"license":"LicenseRef-DCL-1.0"},"src/lib/table/LibLogTable.sol":{"keccak256":"0xccd2dea54cfb708c01e7e8e88c089742bbab18f5783be4632311fb4923d44c88","urls":["bzz-raw://f45fb78c16b5d66d56ba0e78acdb0ca5d315eb05efa2cd7a81e191aabe7aec52","dweb:/ipfs/QmQJ3TFFxTMu4HZ4qnjgmdmSNhGZLQRdCnSqAipEF1up1f"],"license":"LicenseRef-DCL-1.0"}},"version":1},"id":46} \ No newline at end of file +{ + "abi": [ + { + "type": "constructor", + "inputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "FORMAT_DEFAULT_SCIENTIFIC_MAX", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "Float" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "FORMAT_DEFAULT_SCIENTIFIC_MIN", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "Float" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "abs", + "inputs": [ + { + "name": "a", + "type": "bytes32", + "internalType": "Float" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "Float" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "add", + "inputs": [ + { + "name": "a", + "type": "bytes32", + "internalType": "Float" + }, + { + "name": "b", + "type": "bytes32", + "internalType": "Float" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "Float" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "ceil", + "inputs": [ + { + "name": "a", + "type": "bytes32", + "internalType": "Float" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "Float" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "div", + "inputs": [ + { + "name": "a", + "type": "bytes32", + "internalType": "Float" + }, + { + "name": "b", + "type": "bytes32", + "internalType": "Float" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "Float" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "e", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "Float" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "eq", + "inputs": [ + { + "name": "a", + "type": "bytes32", + "internalType": "Float" + }, + { + "name": "b", + "type": "bytes32", + "internalType": "Float" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "floor", + "inputs": [ + { + "name": "a", + "type": "bytes32", + "internalType": "Float" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "Float" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "format", + "inputs": [ + { + "name": "a", + "type": "bytes32", + "internalType": "Float" + }, + { + "name": "scientific", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "format", + "inputs": [ + { + "name": "a", + "type": "bytes32", + "internalType": "Float" + } + ], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "format", + "inputs": [ + { + "name": "a", + "type": "bytes32", + "internalType": "Float" + }, + { + "name": "scientificMin", + "type": "bytes32", + "internalType": "Float" + }, + { + "name": "scientificMax", + "type": "bytes32", + "internalType": "Float" + } + ], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "frac", + "inputs": [ + { + "name": "a", + "type": "bytes32", + "internalType": "Float" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "Float" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "fromFixedDecimalLossless", + "inputs": [ + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decimals", + "type": "uint8", + "internalType": "uint8" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "Float" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "fromFixedDecimalLossy", + "inputs": [ + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decimals", + "type": "uint8", + "internalType": "uint8" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "Float" + }, + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "gt", + "inputs": [ + { + "name": "a", + "type": "bytes32", + "internalType": "Float" + }, + { + "name": "b", + "type": "bytes32", + "internalType": "Float" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "gte", + "inputs": [ + { + "name": "a", + "type": "bytes32", + "internalType": "Float" + }, + { + "name": "b", + "type": "bytes32", + "internalType": "Float" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "integer", + "inputs": [ + { + "name": "a", + "type": "bytes32", + "internalType": "Float" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "Float" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "inv", + "inputs": [ + { + "name": "a", + "type": "bytes32", + "internalType": "Float" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "Float" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "isZero", + "inputs": [ + { + "name": "a", + "type": "bytes32", + "internalType": "Float" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "log10", + "inputs": [ + { + "name": "a", + "type": "bytes32", + "internalType": "Float" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "Float" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "lt", + "inputs": [ + { + "name": "a", + "type": "bytes32", + "internalType": "Float" + }, + { + "name": "b", + "type": "bytes32", + "internalType": "Float" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "lte", + "inputs": [ + { + "name": "a", + "type": "bytes32", + "internalType": "Float" + }, + { + "name": "b", + "type": "bytes32", + "internalType": "Float" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "max", + "inputs": [ + { + "name": "a", + "type": "bytes32", + "internalType": "Float" + }, + { + "name": "b", + "type": "bytes32", + "internalType": "Float" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "Float" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "maxNegativeValue", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "Float" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "maxPositiveValue", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "Float" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "min", + "inputs": [ + { + "name": "a", + "type": "bytes32", + "internalType": "Float" + }, + { + "name": "b", + "type": "bytes32", + "internalType": "Float" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "Float" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "minNegativeValue", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "Float" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "minPositiveValue", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "Float" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "minus", + "inputs": [ + { + "name": "a", + "type": "bytes32", + "internalType": "Float" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "Float" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "mul", + "inputs": [ + { + "name": "a", + "type": "bytes32", + "internalType": "Float" + }, + { + "name": "b", + "type": "bytes32", + "internalType": "Float" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "Float" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "parse", + "inputs": [ + { + "name": "str", + "type": "string", + "internalType": "string" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes4", + "internalType": "bytes4" + }, + { + "name": "", + "type": "bytes32", + "internalType": "Float" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "pow", + "inputs": [ + { + "name": "a", + "type": "bytes32", + "internalType": "Float" + }, + { + "name": "b", + "type": "bytes32", + "internalType": "Float" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "Float" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pow10", + "inputs": [ + { + "name": "a", + "type": "bytes32", + "internalType": "Float" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "Float" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "sqrt", + "inputs": [ + { + "name": "a", + "type": "bytes32", + "internalType": "Float" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "Float" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "sub", + "inputs": [ + { + "name": "a", + "type": "bytes32", + "internalType": "Float" + }, + { + "name": "b", + "type": "bytes32", + "internalType": "Float" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "Float" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "toFixedDecimalLossless", + "inputs": [ + { + "name": "float", + "type": "bytes32", + "internalType": "Float" + }, + { + "name": "decimals", + "type": "uint8", + "internalType": "uint8" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "toFixedDecimalLossy", + "inputs": [ + { + "name": "float", + "type": "bytes32", + "internalType": "Float" + }, + { + "name": "decimals", + "type": "uint8", + "internalType": "uint8" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "zero", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "Float" + } + ], + "stateMutability": "pure" + }, + { + "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": "Log10Negative", + "inputs": [ + { + "name": "signedCoefficient", + "type": "int256", + "internalType": "int256" + }, + { + "name": "exponent", + "type": "int256", + "internalType": "int256" + } + ] + }, + { + "type": "error", + "name": "Log10Zero", + "inputs": [] + }, + { + "type": "error", + "name": "LogTablesNotDeployed", + "inputs": [ + { + "name": "tablesAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "expectedCodehash", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "actualCodehash", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "error", + "name": "LossyConversionFromFloat", + "inputs": [ + { + "name": "signedCoefficient", + "type": "int256", + "internalType": "int256" + }, + { + "name": "exponent", + "type": "int256", + "internalType": "int256" + } + ] + }, + { + "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": "MulDivOverflow", + "inputs": [ + { + "name": "x", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "y", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "denominator", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "NegativeFixedDecimalConversion", + "inputs": [ + { + "name": "signedCoefficient", + "type": "int256", + "internalType": "int256" + }, + { + "name": "exponent", + "type": "int256", + "internalType": "int256" + } + ] + }, + { + "type": "error", + "name": "PowNegativeBase", + "inputs": [ + { + "name": "signedCoefficient", + "type": "int256", + "internalType": "int256" + }, + { + "name": "exponent", + "type": "int256", + "internalType": "int256" + } + ] + }, + { + "type": "error", + "name": "ScientificMinNotLessThanMax", + "inputs": [ + { + "name": "scientificMin", + "type": "bytes32", + "internalType": "Float" + }, + { + "name": "scientificMax", + "type": "bytes32", + "internalType": "Float" + } + ] + }, + { + "type": "error", + "name": "UnformatableExponent", + "inputs": [ + { + "name": "exponent", + "type": "int256", + "internalType": "int256" + } + ] + }, + { + "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": "ZeroNegativePower", + "inputs": [ + { + "name": "b", + "type": "bytes32", + "internalType": "Float" + } + ] + }, + { + "type": "error", + "name": "ZeroStringStartPointer", + "inputs": [] + } + ], + "bytecode": { + "object": "0x6080604052348015600e575f80fd5b5060156019565b60b8565b73c51a14251b0dcf0ae24a96b7153991378938f5f53f7f2573004ac3a9ee7fc8d73654d76386f1b6b99e34cdf86a689c4691e47143420f811460b557604051630912d0ff60e31b815273c51a14251b0dcf0ae24a96b7153991378938f5f560048201527f2573004ac3a9ee7fc8d73654d76386f1b6b99e34cdf86a689c4691e47143420f60248201526044810182905260640160405180910390fd5b50565b614bb7806100c55f395ff3fe608060405234801561000f575f80fd5b506004361061029d575f3560e01c806381f7e2f511610171578063cde72ef3116100d2578063dd64691711610088578063e5526ecd1161006e578063e5526ecd1461062e578063e75f991f14610641578063ffae15ba14610654575f80fd5b8063dd64691714610608578063e0db58881461061b575f80fd5b8063d1de592a116100b8578063d1de592a146105bb578063d35273a7146105ce578063d3d6ffa8146105f5575f80fd5b8063cde72ef314610582578063d102b4d3146105a8575f80fd5b8063a19684b711610127578063bc1b392d1161010d578063bc1b392d1461050b578063bc62d8d814610511578063cb09682b1461055c575f80fd5b8063a19684b7146104d2578063a90d041a146104f8575f80fd5b806396ce1ec71161015757806396ce1ec7146104885780639b4afd991461049b578063a100a3d9146104bf575f80fd5b806381f7e2f5146104625780638dc2980714610475575f80fd5b80633447c0301161021b5780635ca0e7a4116101d1578063719cd99d116101b7578063719cd99d1461042957806373bfb2831461043c57806381a822721461044f575f80fd5b80635ca0e7a4146103f0578063602c35fc14610403575f80fd5b80633b3bd868116102015780633b3bd868146103b757806341aa0080146103ca5780635b23771d146103dd575f80fd5b80633447c03014610374578063371493ce14610397575f80fd5b80631ee62f111161027057806328fa1f011161025657806328fa1f011461033b5780633004fa411461034e5780633029740014610361575f80fd5b80631ee62f11146103155780632538835014610328575f80fd5b806304327dc5146102a1578063078b665b146102c75780630b6429bc146102da578063146e82ad14610302575b5f80fd5b6102b46102af36600461452f565b61067a565b6040519081526020015b60405180910390f35b6102b46102d5366004614546565b61068a565b6102ed6102e8366004614576565b61069c565b604080519283529015156020830152016102be565b6102b461031036600461452f565b6106b4565b6102b461032336600461452f565b6106d3565b6102b461033636600461452f565b6106f2565b6102b461034936600461452f565b610711565b6102b461035c366004614546565b61071b565b6102b461036f366004614546565b61073b565b610387610382366004614546565b610746565b60405190151581526020016102be565b6103aa6103a53660046145a0565b610751565b6040516102be91906145d2565b6102b46103c5366004614576565b61075d565b6102b46103d8366004614546565b610768565b6102b46103eb366004614576565b610773565b6102b46103fe36600461452f565b61077e565b7f80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff6102b4565b6102b461043736600461452f565b610788565b61038761044a366004614546565b610792565b6102b461045d36600461452f565b61079d565b610387610470366004614546565b6107a7565b610387610483366004614546565b6107b2565b6102b4610496366004614546565b6107bd565b6102b47c090000000000000000000000000000000000000000000000000000000181565b6103aa6104cd36600461452f565b6107c8565b7f80000000000000000000000000000000000000000000000000000000000000016102b4565b6102b4610506366004614546565b610812565b5f6102b4565b61052461051f366004614652565b61081d565b604080517fffffffff0000000000000000000000000000000000000000000000000000000090931683526020830191909152016102be565b7f7fffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffff6102b4565b7f7fffffff800000000000000000000000000000000000000000000000000000006102b4565b6103876105b6366004614546565b610836565b6102b46105c9366004614546565b610841565b6102b47ffffffffc0000000000000000000000000000000000000000000000000000000181565b6102b461060336600461452f565b61084c565b61038761061636600461452f565b610856565b6102b461062936600461452f565b61087c565b6103aa61063c36600461471b565b610886565b6102ed61064f366004614576565b61090f565b7fffffffbe19cfc6ef4f44cf88f14500d013df534fcaad48fca1d5ca47bea26fcc6102b4565b5f6106848261091b565b92915050565b5f6106958383610967565b9392505050565b5f806106a88484610983565b915091505b9250929050565b5f6106848273c51a14251b0dcf0ae24a96b7153991378938f5f56109c4565b5f6106848273c51a14251b0dcf0ae24a96b7153991378938f5f56109f0565b5f6106848273c51a14251b0dcf0ae24a96b7153991378938f5f5610a3e565b5f61068482610a71565b5f610695838373c51a14251b0dcf0ae24a96b7153991378938f5f5610ab2565b5f6106958383610d0d565b5f6106958383610d70565b60606106958383610dbe565b5f6106958383610e51565b5f6106958383610e6c565b5f6106958383610eb1565b5f61068482610ee4565b5f61068482610fa6565b5f6106958383611052565b5f610684826110a2565b5f61069583836110e7565b5f6106958383611137565b5f6106958383611186565b6060610684827ffffffffc000000000000000000000000000000000000000000000000000000017c0900000000000000000000000000000000000000000000000000000001610886565b5f61069583836111cb565b5f805f8061082a856111d6565b90969095509350505050565b5f61069583836112c4565b5f6106958383611313565b5f61068482611358565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff821615610684565b5f6106848261138a565b606061089283836112c4565b6108d7576040517f3be5bf9400000000000000000000000000000000000000000000000000000000815260048101849052602481018390526044015b60405180910390fd5b5f6108e1856110a2565b9050610906856108f183876112c4565b8061090157506109018386611137565b610dbe565b95945050505050565b5f806106a884846113cb565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d61094d828261140b565b90925090505f61095d8383611459565b5095945050505050565b5f6109728383611137565b61097c5781610695565b5090919050565b5f807bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8416601b0b60e085901d6109b782828761155f565b9350935050509250929050565b5f610695837fffffffff0000000000000000000000000000000000000000000000000000000584610ab2565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d610a238483836116ae565b90925090505f610a338383611459565b509695505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d610a2384838361181f565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d82610aa48383611b54565b9150505f610a338284611459565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff848116601b0b9060e086901d908516610aef5750600191506106959050565b5f8213610b8857815f03610b4c57610b07855f6112c4565b15610b41576040517f8be82972000000000000000000000000000000000000000000000000000000008152600481018690526024016108ce565b505f91506106959050565b6040517fcceba0f100000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016108ce565b610b93856001610d70565b8015610ba45750610ba4865f611137565b15610bb3578592505050610695565b610bbd855f6112c4565b15610be657610bdd610bce8761091b565b610bd787611358565b86610ab2565b92505050610695565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8516601b0b60e086901d5f80610c198484611b54565b915091505f610c2983855f611bbc565b905060015f8080610c608f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b9160e09190911d90565b915091505b60018510610ca75784600116600103610c8a57610c8484848484611cd3565b90945092505b600185901c9450610c9d82828484611cd3565b9092509050610c65565b5f80610cb48f8e8e61181f565b91509150610cc482828a8d611cd3565b9092509050610cd48f83836116ae565b9092509050610ce582828888611cd3565b90925090505f610cf58383611459565b509e5050505050505050505050505050509392505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686611df2565b915091505f610d618383611459565b509a9950505050505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d610db384848484612416565b979650505050505050565b60607bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d5f829003610e2e576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525092505050610684565b8315610e4757610e3e828261242d565b92505050610684565b61090682826126fd565b5f805f610e5e8585612e64565b915091506109068282612ec6565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686612f20565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d610906828286612f4a565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828112610f1b57509192915050565b5f80610f278484611b54565b915091505f84128015610f3957508015155b15610f8f57610f8a82847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4612f20565b935091505b5f610f9a8385611459565b50979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828112610fdd57509192915050565b5f80610fe98484611b54565b91509150805f03610ffe575093949350505050565b5f811315610f8f57610f8a82847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4612fa6565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d611095848484846130d6565b1315979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828212156110dc5761094d82826131aa565b5f61095d8383611459565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d61112a848484846130d6565b1215979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d61117a848484846130d6565b12979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686611cd3565b5f61097283836112c4565b80515f908190602084810191850101828080806111f3868661324d565b929650909450925090507fffffffff0000000000000000000000000000000000000000000000000000000084165f036112b557848303611285575f806112398484611459565b915091508061127457507f32b8b8be000000000000000000000000000000000000000000000000000000009a5f9a5098505050505050505050565b505f9a909950975050505050505050565b507fad384e8700000000000000000000000000000000000000000000000000000000985f98509650505050505050565b5091975f975095505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d611307848484846130d6565b13979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686612fa6565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d61094d82826131aa565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d826113bd8383611b54565b5090505f610a338284611459565b5f805f805f6113da87876136ec565b9250925092505f806113ec8585611459565b91509150818380156113fb5750815b9650965050505050509250929050565b5f806106a87f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb48686611df2565b5f601b83900b83148383826114bd577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561149d57620186a0860595506005850194505b8586601b0b146114b857600a8605955084600101945061149d565b6114d3565b855f036114d357505f9250600191506106ad9050565b848560030b1461152f575f8512156114f357505f92508291506106ad9050565b6040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016108ce565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f8512156115a5576040517f4a7d166b00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016108ce565b845f036115b757505f905060016116a6565b8460ff8416850185811215611602576040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101889052602481018790526044016108ce565b5f805f83121561166c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb3831215611643575f8095509550505050506116a6565b825f03600a0a915081848161165a5761165a614744565b04955050840290911491506116a69050565b5f83131561169b5761167f83600a6148bc565b915061168b82856148c7565b9550600194506116a69350505050565b509193506001925050505b935093915050565b5f805f8412156116ea576116c284846131aa565b90945092506116d28585856116ae565b90945092506116e1848461140b565b915091506116a6565b5f806116f68686611b54565b9092509050845f80806117098585613748565b9194509250905061270d6127106117216001826148de565b8514611738576117328d8686613837565b90925090505b83156117c3575f61174a866001614904565b90505b80848583028161175f5761175f614744565b051461177657600a84059350600a8805975061174d565b6117b7611783858861492b565b8961178e878561492b565b8f87877ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6138f0565b909d509b506117ea9050565b819b507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc9a505b5050505050866117fb84835f611bbc565b611806886001614904565b6118109190614904565b94509450505050935093915050565b5f80838361182d828261398d565b90965094505f86136118ae57855f03611872576040517f561fc7b500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5d3fd4db00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016108ce565b5050837f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000036118ec576118e283604c614904565b5f915091506116a6565b7f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000008412158061193b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb561195d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb45b5f0b8412611b18575f805f805f8561197657604b611979565b604c5b611983908a614904565b90505f80876119b0577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000006119d1565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca0000000000000000005b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff169050808c81611a0357611a03614744565b05818102955090850193507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18019050611a3c8c826139e3565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000000295508594508a8414611ac8576123278114611aa357611a7e8c826001016139e3565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000002611ac5565b7f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000005b94505b50611af8838b848c89897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb46138f0565b909a509850611b098a8a835f612fa6565b975097505050505050506116a6565b611b22858561140b565b9095509350611b3286868661181f565b9095509350611b4185856131aa565b92509250506116a6565b50935093915050565b5f805f8312611b6757508290505f6106ad565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4831215611b9957505f9050826106ad565b5f839003600a0a808581611baf57611baf614744565b0794859003959350505050565b5f818303611bcb575082610695565b82821315611c0e57828203604c811380611be557505f8113155b15611bf3575f915050610695565b80600a0a8581611c0557611c05614744565b05915050610695565b818303604c811380611c2057505f8113155b15611c68576040517f1d5d6d100000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490526064016108ce565b600a81900a85810286828281611c8057611c80614744565b0514611cc9576040517f1d5d6d100000000000000000000000000000000000000000000000000000000081526004810188905260248101879052604481018690526064016108ce565b9250610695915050565b5f8085158415178015611ceb575f92505f9150611de8565b611cf58487614904565b91505f611d0188613a6a565b90505f611d0d87613a6a565b90505f611d1a8383613ad0565b5090505f6f0785ee10d5da46d900f436a000000000821115611d4f576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a7640000821115611d7057670de0b6b3a7640000820491506012015b633b9aca00821115611d8957633b9aca00820491506009015b612710821115611d9e57612710820491506004015b8115611db257600a82049150600101611d9e565b611dbc8187614904565b9550611dde8b8a611dd88787611dd387600a6148bc565b613b0b565b89613bf0565b9097509550505050505b5094509492505050565b5f80835f03611e37576040517f7a97930f00000000000000000000000000000000000000000000000000000000815260048101879052602481018690526044016108ce565b855f03611e4857505f90508061240d565b5f805f80611e568a8a613cf7565b919b5099509150611e678888613cf7565b919950975090505f611e788b613a6a565b90505f611e848a613a6a565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c818310156122a1578415611ee257507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000009050604b612260565b6f4b3b4ca85a86c47a098a22400000000083101561200e57678ac7230489e80000831015611f72576402540be400831015611f4057620186a0831015611f305750620186a0905060056121e9565b506402540be4009050600a6121e9565b655af3107a4000831015611f5f5750655af3107a40009050600e6121e9565b50678ac7230489e80000905060136121e9565b6b204fce5e3e25026110000000831015611fc45769152d02c7e14af6800000831015611fad575069152d02c7e14af6800000905060176121e9565b506b204fce5e3e250261100000009050601c6121e9565b6d314dc6448d9338c15b0a00000000831015611ff357506d314dc6448d9338c15b0a00000000905060216121e9565b506f4b3b4ca85a86c47a098a224000000000905060266121e9565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156121065773af298d050e4395d69670b12b7f410000000000008310156120a1577172cb5bd86321e38cb6ce6682e8000000000083101561208257507172cb5bd86321e38cb6ce6682e800000000009050602b6121e9565b5073af298d050e4395d69670b12b7f41000000000000905060306121e9565b76010b46c6cdd6e3e0828f4db456ff0c8ea00000000000008310156120e2575076010b46c6cdd6e3e0828f4db456ff0c8ea0000000000000905060356121e9565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a6121e9565b7c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000083101561219c577a026e4d30eccc3215dd8f3157d27e23acbdcfe6800000000000000083101561217457507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f6121e9565b507c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000905060446121e9565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca0000000000000000008310156121e957507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b81831161221d57600a820491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016121e9565b815f03612260576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018d9052602481018c90526044016108ce565b856122a1576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018f9052602481018e90526044016108ce565b807f8000000000000000000000000000000000000000000000000000000000000000018d126122d457808d039c50612347565b7f80000000000000000000000000000000000000000000000000000000000000009c90038c015f81131561234757807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038b1361233457998a0199612347565b5f8099509950505050505050505061240d565b5f808e12801561235657505f8c135b15612393577f80000000000000000000000000000000000000000000000000000000000000008e01808d1361238b575f61238f565b808d035b9150505b8b818f010397506123b08f8e6123aa888789613b0b565b8b613bf0565b90995097505f8113156123fa57604c8113156123da575f809a509a5050505050505050505061240d565b80600a0a89816123ec576123ec614744565b059850885f036123fa575f97505b5096985094965061240d95505050505050565b94509492505050565b5f612423858585856130d6565b1495945050505050565b6060612439838361398d565b90935091505f8061246a7f161bcca7119915b50764b4abe86529797775a5f171951000000000000000000086614976565b1561249a57507f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000009050604c6124c1565b507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000009050604b5b5f6124cc8387614976565b90505f6124d984886149dd565b90505f808312156124f3575060016124f0836149f0565b92505b5f82121561250a57506001612507826149f0565b91505b60408051602081019091525f81528215612613575f8061252b600a89614a20565b90505b6125388186614976565b5f0361255d57612549600a82614a20565b90508161255581614a33565b92505061252e565b60408051602081019091525f8082525b838110156125be57816040516020016125869190614a81565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052915060010161256d565b505b6125cb600a876149dd565b5f036125e3576125dc600a87614976565b95506125c0565b806125ed87613f98565b6040516020016125fe929190614ab9565b60405160208183030381529060405293505050505b5f61261d85613f98565b90505f61262a878b614904565b90505f81156126605761263c82613f98565b60405160200161264c9190614afb565b604051602081830303815290604052612670565b60405180602001604052805f8152505b90505f8561268c5760405180602001604052805f8152506126c3565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b9050808486846040516020016126dc9493929190614b2c565b6040516020818303038152906040529a505050505050505050505092915050565b60606103e882138061271857506127156103e86149f0565b82125b15612752576040517fe44c72b0000000000000000000000000000000000000000000000000000000008152600481018390526024016108ce565b5f80841290811561276d57612766856149f0565b9050612770565b50835b5f61277a82614024565b80519091505f5b81811080156127fd57508281612798600185614b56565b6127a29190614b56565b815181106127b2576127b2614b69565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f3000000000000000000000000000000000000000000000000000000000000000145b15612814578061280c81614a33565b915050612781565b5f61281f8284614b56565b90505f61282c838a614904565b90505f876128485760405180602001604052805f81525061287f565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b90505f82126129f957815f6128948286614b96565b67ffffffffffffffff8111156128ac576128ac614625565b6040519080825280601f01601f1916602001820160405280156128d6576020820181803683370190505b5090505f5b85811015612948578881815181106128f5576128f5614b69565b602001015160f81c60f81b82828151811061291257612912614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053506001016128db565b505f5b828110156129c5577f30000000000000000000000000000000000000000000000000000000000000008261297f8389614b96565b8151811061298f5761298f614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535060010161294b565b5082816040516020016129d9929190614ba9565b6040516020818303038152906040529a5050505050505050505050610684565b5f612a03836149f0565b905080841115612c1a575f612a188286614b56565b90505f612a26866001614b96565b67ffffffffffffffff811115612a3e57612a3e614625565b6040519080825280601f01601f191660200182016040528015612a68576020820181803683370190505b5090505f5b82811015612ada57898181518110612a8757612a87614b69565b602001015160f81c60f81b828281518110612aa457612aa4614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612a6d565b507f2e00000000000000000000000000000000000000000000000000000000000000818381518110612b0e57612b0e614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5b83811015612be55789612b518285614b96565b81518110612b6157612b61614b69565b01602001517fff00000000000000000000000000000000000000000000000000000000000000168282612b95866001614b96565b612b9f9190614b96565b81518110612baf57612baf614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612b3e565b508381604051602001612bf9929190614ba9565b6040516020818303038152906040529b505050505050505050505050610684565b5f612c258583614b56565b90505f85612c34836002614b96565b612c3e9190614b96565b67ffffffffffffffff811115612c5657612c56614625565b6040519080825280601f01601f191660200182016040528015612c80576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f81518110612cb657612cb6614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f2e0000000000000000000000000000000000000000000000000000000000000081600181518110612d1857612d18614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5b82811015612dc3577f300000000000000000000000000000000000000000000000000000000000000082612d7d836002614b96565b81518110612d8d57612d8d614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612d48565b505f5b86811015612be557898181518110612de057612de0614b69565b01602001517fff00000000000000000000000000000000000000000000000000000000000000168282612e14866002614b96565b612e1e9190614b96565b81518110612e2e57612e2e614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612dc6565b5f805f805f612e7387876136ec565b92509250925080612eba576040517fc471796600000000000000000000000000000000000000000000000000000000815260048101849052602481018390526044016108ce565b50909590945092505050565b5f805f612ed38585611459565b9150915080612f18576040517f22c9f7bb00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016108ce565b509392505050565b5f80612f2c84846131aa565b9094509250612f3d86868686612fa6565b9150915094509492505050565b5f805f612f5886868661155f565b9150915080612f9d576040517f05e4767800000000000000000000000000000000000000000000000000000000815260048101879052602481018690526044016108ce565b50949350505050565b5f8085158415178015612fd257865f03612fc6578484925092505061240d565b8686925092505061240d565b612fdc878761398d565b9097509550612feb858561398d565b909550935085841315612fff579395929492935b838603604c81111561301857878793509350505061240d565b80600a0a868161302a5761302a614744565b0595505086850180881860ff90811c151589881890911c151680156130c557877f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff036130ac576040517fd556b111000000000000000000000000000000000000000000000000000000008152600481018a9052602481018990526044016108ce565b600a9687900596909805860197600197909701966130c9565b8198505b5096979596505050505050565b5f80851584151781871282861218178584141780156130fb578685925092505061240d565b505f8584131561310f575092949193919260015b8386035f8112604c8213178015613142578215613134575f899450945050505061240d565b885f9450945050505061240d565b600a82900a8981028a82828161315a5761315a614744565b0514613186578415613176575f8b96509650505050505061240d565b8a5f96509650505050505061240d565b841561319b57889650945061240d9350505050565b955087945061240d9350505050565b5f807f80000000000000000000000000000000000000000000000000000000000000008403613243577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8303613236576040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101859052602481018490526044016108ce565b600a840593508260010192505b50505f9190910391565b5f8281806132628386652000000000006140e0565b9250858314158361327c81886703ff0000000000006140e0565b94508085036132b657507f34bd20690000000000000000000000000000000000000000000000000000000094505f92508291506136e39050565b5f806132c28a88614109565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613300575095505f93508392506136e3915050565b86519095506540000000000060015f9290921a9190911b16151588871016915050801561358f57506001909301925f8461334381896703ff0000000000006140e0565b955080860361337e57507f7bfa48af0000000000000000000000000000000000000000000000000000000095505f93508392506136e3915050565b855b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018051908a1160015f9290921a9190911b6601000000000000161515166001036133ed577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613380565b818114613444575f806134008484614109565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613440575097505f95508594506136e39350505050565b9350505b5f83121561347f57507f7bfa48af0000000000000000000000000000000000000000000000000000000096505f94508493506136e392505050565b831561348b57825f0392505b80820394505f8513156134cb57507f013b2aaa0000000000000000000000000000000000000000000000000000000096505f94508493506136e392505050565b855f036134da5782955061358c565b5f859003604381111561351b57507f32b8b8be0000000000000000000000000000000000000000000000000000000097505f95508594506136e39350505050565b600a0a8681025f8883838161353257613532614744565b0514159050601b82900b82141581806135485750805b1561358457507f32b8b8be000000000000000000000000000000000000000000000000000000009a505f98508897506136e39650505050505050565b505084019650505b50505b84516c2000000020000000000000000060015f9290921a9190911b1615158786101680156136d457600190950194856135cf818a652000000000006140e0565b9650866135e5818b6703ff0000000000006140e0565b975080880361362257507f013b2aaa0000000000000000000000000000000000000000000000000000000097505f95508594506136e39350505050565b505f8061362f838a614109565b90925090507fffffffff0000000000000000000000000000000000000000000000000000000082161561366f575097505f95508594506136e39350505050565b9250508482015f8313801561368357508581125b8061369757505f8312801561369757508581135b156136d057507fd556b1110000000000000000000000000000000000000000000000000000000097505f95508594506136e39350505050565b9450505b845f036136df575f93505b5050505b92959194509250565b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86111561373757600a860460018201600a88065f1493509350935050613741565b8593509150600190505b9250925092565b5f805f837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0361378057508391505f90506001613741565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc84121561380e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb08412156137df57505f9150508215156001613741565b5f846004015f03600a0a90505f8187816137fb576137fb614744565b0594505080840286141592509050613741565b5f841261382357505f91508190506001613741565b50505060048101600a0a82025f6001613741565b5f80806064613849600a612328614a20565b613856600a612328614a20565b6138619060026148c7565b61386c906001614b96565b6138769190614b96565b6138809190614b96565b90506138c4565b5f8052600280600a8504028301601e833c5f80516107d0840193505f80526001600a8606600a6064880402018501601f853c5f5101949350505050565b6138cf858288613887565b92508315611b4b576138e5600186018288613887565b915050935093915050565b5f80888803613903575083905081613981565b5f805f806139138c8b8f8d612f20565b915091505f806139258a8a8d8c612f20565b9150915061393584848484611cd3565b8096508197505050505050505f8061394f8b8b8f8d612f20565b915091505f8061396186868686611df2565b915091505f8061397384848f8e612fa6565b909a50985050505050505050505b97509795505050505050565b5f805f805f61399c8787613cf7565b92509250925080612eba576040517f05e51ecb00000000000000000000000000000000000000000000000000000000815260048101889052602481018790526044016108ce565b5f806139f2600a612328614a20565b6139fd9060026148c7565b613a08906001614b96565b90505f613a18600a612328614a20565b90506002600a8504026001015f8052600281601e883c505f51617fff81169350618000811615613a4757918101915b505f80526001600a8506600a6064870402018301601f873c50505f510192915050565b5f80821215613ac7577f80000000000000000000000000000000000000000000000000000000000000008203613ac157507f8000000000000000000000000000000000000000000000000000000000000000919050565b505f0390565b5090565b919050565b5f807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83850993909202808410938190039390930393915050565b5f805f613b188686613ad0565b91509150815f03613b3c57838181613b3257613b32614744565b0492505050610695565b838210613b86576040517f6c59da120000000000000000000000000000000000000000000000000000000081526004810187905260248101869052604481018590526064016108ce565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f8587181215613cba577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115613ca757613c4f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001614b96565b8403613c7f57507f800000000000000000000000000000000000000000000000000000000000000090508161240d565b613c8a600a85614a20565b613c93906149f0565b613c9e846001614904565b9150915061240d565b613cb0846149f0565b839150915061240d565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115613ced57613c93600a85614a20565b508290508161240d565b5f805f845f03613d0f57505f91508190506001613741565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee800000000000000000085055f03613f23576f4b3b4ca85a86c47a098a2240000000008505158015613d7857507f80000000000000000000000000000000000000000000000000000000000000268412155b15613d99576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a000000000000008505158015613de157507f80000000000000000000000000000000000000000000000000000000000000138412155b15613dfa57678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c6400000000000000008505158015613e4657507f800000000000000000000000000000000000000000000000000000000000000a8412155b15613e5c576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e40000000000000000008505158015613eab57507f80000000000000000000000000000000000000000000000000000000000000028412155b15613ec157606485029450600284039350613e5c565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000008505158015613f1157507f80000000000000000000000000000000000000000000000000000000000000018412155b15613f2357600a850294506001840393505b600a80860290810586148015613f5957507f80000000000000000000000000000000000000000000000000000000000000018512155b15613f68578095506001850394505b50939492935050507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000008305151590565b60605f8212613fb55760405180602001604052805f815250613fec565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b613ffd60ff84901d80850118614024565b60405160200161400e929190614ba9565b6040516020818303038152906040529050919050565b60605f61403083614233565b60010190505f8167ffffffffffffffff81111561404f5761404f614625565b6040519080825280601f01601f191660200182016040528015614079576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461408357509392505050565b5f5b5f82600186515f1a1b16118385101615614101576001840193506140e2565b509192915050565b81515f90819065200000000000600191831a9190911b161515838510168085019082806141368488614314565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615614171575093505f92506106ad915050565b825f036141d4577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116141a5575f6141c7565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b955093506106ad92505050565b7f80000000000000000000000000000000000000000000000000000000000000008111614201575f614223565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95505f0393505050509250929050565b5f807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061427b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106142a7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106142c557662386f26fc10000830492506010015b6305f5e10083106142dd576305f5e100830492506008015b61271083106142f157612710830492506004015b60648310614303576064830492506002015b600a83106106845760010192915050565b5f8082841061434757507f34bd20690000000000000000000000000000000000000000000000000000000090505f6106ad565b835f03614380576040517fda6966d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60305f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501815b8782101580156143b85750604d83105b156143fb57815160018401937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90930192600a0a5f9190911a85900302016143a8565b8782106145215781515f1a849003600181111561444357507f0fdc26350000000000000000000000000000000000000000000000000000000095505f94506106ad9350505050565b600a84900a810282810183111561448657507f0fdc26350000000000000000000000000000000000000000000000000000000096505f95506106ad945050505050565b9190910190507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101905b8782106145215781515f1a603081146144f657507f0fdc26350000000000000000000000000000000000000000000000000000000095505f94506106ad9350505050565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101906144b2565b5f9890975095505050505050565b5f6020828403121561453f575f80fd5b5035919050565b5f8060408385031215614557575f80fd5b50508035926020909101359150565b803560ff81168114613acb575f80fd5b5f8060408385031215614587575f80fd5b8235915061459760208401614566565b90509250929050565b5f80604083850312156145b1575f80fd5b82359150602083013580151581146145c7575f80fd5b809150509250929050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60208284031215614662575f80fd5b813567ffffffffffffffff80821115614679575f80fd5b818401915084601f83011261468c575f80fd5b81358181111561469e5761469e614625565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156146e4576146e4614625565b816040528281528760208487010111156146fc575f80fd5b826020860160208301375f928101602001929092525095945050505050565b5f805f6060848603121561472d575f80fd5b505081359360208301359350604090920135919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b600181815b808511156147f757817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156147dd576147dd614771565b808516156147ea57918102915b93841c93908002906147a3565b509250929050565b5f8261480d57506001610684565b8161481957505f610684565b816001811461482f576002811461483957614855565b6001915050610684565b60ff84111561484a5761484a614771565b50506001821b610684565b5060208310610133831016604e8410600b8410161715614878575081810a610684565b614882838361479e565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156148b4576148b4614771565b029392505050565b5f61069583836147ff565b808202811582820484141761068457610684614771565b8181035f8312801583831316838312821617156148fd576148fd614771565b5092915050565b8082018281125f83128015821682158216171561492357614923614771565b505092915050565b8082025f82127f80000000000000000000000000000000000000000000000000000000000000008414161561496257614962614771565b818105831482151761068457610684614771565b5f8261498457614984614744565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f8000000000000000000000000000000000000000000000000000000000000000831416156149d8576149d8614771565b500590565b5f826149eb576149eb614744565b500790565b5f7f80000000000000000000000000000000000000000000000000000000000000008203613ac157613ac1614771565b5f82614a2e57614a2e614744565b500490565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a6357614a63614771565b5060010190565b5f81518060208401855e5f93019283525090919050565b5f614a8c8284614a6a565b7f300000000000000000000000000000000000000000000000000000000000000081526001019392505050565b7f2e0000000000000000000000000000000000000000000000000000000000000081525f614af3614aed6001840186614a6a565b84614a6a565b949350505050565b7f650000000000000000000000000000000000000000000000000000000000000081525f6106956001830184614a6a565b5f614b4c614aed614b46614b40858a614a6a565b88614a6a565b86614a6a565b9695505050505050565b8181038181111561068457610684614771565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b8082018082111561068457610684614771565b5f614af3614aed8386614a6a56" + }, + "deployedBytecode": { + "object": "0x608060405234801561000f575f80fd5b506004361061029d575f3560e01c806381f7e2f511610171578063cde72ef3116100d2578063dd64691711610088578063e5526ecd1161006e578063e5526ecd1461062e578063e75f991f14610641578063ffae15ba14610654575f80fd5b8063dd64691714610608578063e0db58881461061b575f80fd5b8063d1de592a116100b8578063d1de592a146105bb578063d35273a7146105ce578063d3d6ffa8146105f5575f80fd5b8063cde72ef314610582578063d102b4d3146105a8575f80fd5b8063a19684b711610127578063bc1b392d1161010d578063bc1b392d1461050b578063bc62d8d814610511578063cb09682b1461055c575f80fd5b8063a19684b7146104d2578063a90d041a146104f8575f80fd5b806396ce1ec71161015757806396ce1ec7146104885780639b4afd991461049b578063a100a3d9146104bf575f80fd5b806381f7e2f5146104625780638dc2980714610475575f80fd5b80633447c0301161021b5780635ca0e7a4116101d1578063719cd99d116101b7578063719cd99d1461042957806373bfb2831461043c57806381a822721461044f575f80fd5b80635ca0e7a4146103f0578063602c35fc14610403575f80fd5b80633b3bd868116102015780633b3bd868146103b757806341aa0080146103ca5780635b23771d146103dd575f80fd5b80633447c03014610374578063371493ce14610397575f80fd5b80631ee62f111161027057806328fa1f011161025657806328fa1f011461033b5780633004fa411461034e5780633029740014610361575f80fd5b80631ee62f11146103155780632538835014610328575f80fd5b806304327dc5146102a1578063078b665b146102c75780630b6429bc146102da578063146e82ad14610302575b5f80fd5b6102b46102af36600461452f565b61067a565b6040519081526020015b60405180910390f35b6102b46102d5366004614546565b61068a565b6102ed6102e8366004614576565b61069c565b604080519283529015156020830152016102be565b6102b461031036600461452f565b6106b4565b6102b461032336600461452f565b6106d3565b6102b461033636600461452f565b6106f2565b6102b461034936600461452f565b610711565b6102b461035c366004614546565b61071b565b6102b461036f366004614546565b61073b565b610387610382366004614546565b610746565b60405190151581526020016102be565b6103aa6103a53660046145a0565b610751565b6040516102be91906145d2565b6102b46103c5366004614576565b61075d565b6102b46103d8366004614546565b610768565b6102b46103eb366004614576565b610773565b6102b46103fe36600461452f565b61077e565b7f80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff6102b4565b6102b461043736600461452f565b610788565b61038761044a366004614546565b610792565b6102b461045d36600461452f565b61079d565b610387610470366004614546565b6107a7565b610387610483366004614546565b6107b2565b6102b4610496366004614546565b6107bd565b6102b47c090000000000000000000000000000000000000000000000000000000181565b6103aa6104cd36600461452f565b6107c8565b7f80000000000000000000000000000000000000000000000000000000000000016102b4565b6102b4610506366004614546565b610812565b5f6102b4565b61052461051f366004614652565b61081d565b604080517fffffffff0000000000000000000000000000000000000000000000000000000090931683526020830191909152016102be565b7f7fffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffff6102b4565b7f7fffffff800000000000000000000000000000000000000000000000000000006102b4565b6103876105b6366004614546565b610836565b6102b46105c9366004614546565b610841565b6102b47ffffffffc0000000000000000000000000000000000000000000000000000000181565b6102b461060336600461452f565b61084c565b61038761061636600461452f565b610856565b6102b461062936600461452f565b61087c565b6103aa61063c36600461471b565b610886565b6102ed61064f366004614576565b61090f565b7fffffffbe19cfc6ef4f44cf88f14500d013df534fcaad48fca1d5ca47bea26fcc6102b4565b5f6106848261091b565b92915050565b5f6106958383610967565b9392505050565b5f806106a88484610983565b915091505b9250929050565b5f6106848273c51a14251b0dcf0ae24a96b7153991378938f5f56109c4565b5f6106848273c51a14251b0dcf0ae24a96b7153991378938f5f56109f0565b5f6106848273c51a14251b0dcf0ae24a96b7153991378938f5f5610a3e565b5f61068482610a71565b5f610695838373c51a14251b0dcf0ae24a96b7153991378938f5f5610ab2565b5f6106958383610d0d565b5f6106958383610d70565b60606106958383610dbe565b5f6106958383610e51565b5f6106958383610e6c565b5f6106958383610eb1565b5f61068482610ee4565b5f61068482610fa6565b5f6106958383611052565b5f610684826110a2565b5f61069583836110e7565b5f6106958383611137565b5f6106958383611186565b6060610684827ffffffffc000000000000000000000000000000000000000000000000000000017c0900000000000000000000000000000000000000000000000000000001610886565b5f61069583836111cb565b5f805f8061082a856111d6565b90969095509350505050565b5f61069583836112c4565b5f6106958383611313565b5f61068482611358565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff821615610684565b5f6106848261138a565b606061089283836112c4565b6108d7576040517f3be5bf9400000000000000000000000000000000000000000000000000000000815260048101849052602481018390526044015b60405180910390fd5b5f6108e1856110a2565b9050610906856108f183876112c4565b8061090157506109018386611137565b610dbe565b95945050505050565b5f806106a884846113cb565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d61094d828261140b565b90925090505f61095d8383611459565b5095945050505050565b5f6109728383611137565b61097c5781610695565b5090919050565b5f807bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8416601b0b60e085901d6109b782828761155f565b9350935050509250929050565b5f610695837fffffffff0000000000000000000000000000000000000000000000000000000584610ab2565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d610a238483836116ae565b90925090505f610a338383611459565b509695505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d610a2384838361181f565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d82610aa48383611b54565b9150505f610a338284611459565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff848116601b0b9060e086901d908516610aef5750600191506106959050565b5f8213610b8857815f03610b4c57610b07855f6112c4565b15610b41576040517f8be82972000000000000000000000000000000000000000000000000000000008152600481018690526024016108ce565b505f91506106959050565b6040517fcceba0f100000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016108ce565b610b93856001610d70565b8015610ba45750610ba4865f611137565b15610bb3578592505050610695565b610bbd855f6112c4565b15610be657610bdd610bce8761091b565b610bd787611358565b86610ab2565b92505050610695565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8516601b0b60e086901d5f80610c198484611b54565b915091505f610c2983855f611bbc565b905060015f8080610c608f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b9160e09190911d90565b915091505b60018510610ca75784600116600103610c8a57610c8484848484611cd3565b90945092505b600185901c9450610c9d82828484611cd3565b9092509050610c65565b5f80610cb48f8e8e61181f565b91509150610cc482828a8d611cd3565b9092509050610cd48f83836116ae565b9092509050610ce582828888611cd3565b90925090505f610cf58383611459565b509e5050505050505050505050505050509392505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686611df2565b915091505f610d618383611459565b509a9950505050505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d610db384848484612416565b979650505050505050565b60607bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d5f829003610e2e576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525092505050610684565b8315610e4757610e3e828261242d565b92505050610684565b61090682826126fd565b5f805f610e5e8585612e64565b915091506109068282612ec6565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686612f20565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d610906828286612f4a565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828112610f1b57509192915050565b5f80610f278484611b54565b915091505f84128015610f3957508015155b15610f8f57610f8a82847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4612f20565b935091505b5f610f9a8385611459565b50979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828112610fdd57509192915050565b5f80610fe98484611b54565b91509150805f03610ffe575093949350505050565b5f811315610f8f57610f8a82847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4612fa6565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d611095848484846130d6565b1315979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828212156110dc5761094d82826131aa565b5f61095d8383611459565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d61112a848484846130d6565b1215979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d61117a848484846130d6565b12979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686611cd3565b5f61097283836112c4565b80515f908190602084810191850101828080806111f3868661324d565b929650909450925090507fffffffff0000000000000000000000000000000000000000000000000000000084165f036112b557848303611285575f806112398484611459565b915091508061127457507f32b8b8be000000000000000000000000000000000000000000000000000000009a5f9a5098505050505050505050565b505f9a909950975050505050505050565b507fad384e8700000000000000000000000000000000000000000000000000000000985f98509650505050505050565b5091975f975095505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d611307848484846130d6565b13979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d5286868686612fa6565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d61094d82826131aa565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d826113bd8383611b54565b5090505f610a338284611459565b5f805f805f6113da87876136ec565b9250925092505f806113ec8585611459565b91509150818380156113fb5750815b9650965050505050509250929050565b5f806106a87f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb48686611df2565b5f601b83900b83148383826114bd577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561149d57620186a0860595506005850194505b8586601b0b146114b857600a8605955084600101945061149d565b6114d3565b855f036114d357505f9250600191506106ad9050565b848560030b1461152f575f8512156114f357505f92508291506106ad9050565b6040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016108ce565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f8512156115a5576040517f4a7d166b00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016108ce565b845f036115b757505f905060016116a6565b8460ff8416850185811215611602576040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101889052602481018790526044016108ce565b5f805f83121561166c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb3831215611643575f8095509550505050506116a6565b825f03600a0a915081848161165a5761165a614744565b04955050840290911491506116a69050565b5f83131561169b5761167f83600a6148bc565b915061168b82856148c7565b9550600194506116a69350505050565b509193506001925050505b935093915050565b5f805f8412156116ea576116c284846131aa565b90945092506116d28585856116ae565b90945092506116e1848461140b565b915091506116a6565b5f806116f68686611b54565b9092509050845f80806117098585613748565b9194509250905061270d6127106117216001826148de565b8514611738576117328d8686613837565b90925090505b83156117c3575f61174a866001614904565b90505b80848583028161175f5761175f614744565b051461177657600a84059350600a8805975061174d565b6117b7611783858861492b565b8961178e878561492b565b8f87877ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6138f0565b909d509b506117ea9050565b819b507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc9a505b5050505050866117fb84835f611bbc565b611806886001614904565b6118109190614904565b94509450505050935093915050565b5f80838361182d828261398d565b90965094505f86136118ae57855f03611872576040517f561fc7b500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5d3fd4db00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016108ce565b5050837f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000036118ec576118e283604c614904565b5f915091506116a6565b7f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000008412158061193b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb561195d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb45b5f0b8412611b18575f805f805f8561197657604b611979565b604c5b611983908a614904565b90505f80876119b0577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000006119d1565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca0000000000000000005b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff169050808c81611a0357611a03614744565b05818102955090850193507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18019050611a3c8c826139e3565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000000295508594508a8414611ac8576123278114611aa357611a7e8c826001016139e3565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000002611ac5565b7f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000005b94505b50611af8838b848c89897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb46138f0565b909a509850611b098a8a835f612fa6565b975097505050505050506116a6565b611b22858561140b565b9095509350611b3286868661181f565b9095509350611b4185856131aa565b92509250506116a6565b50935093915050565b5f805f8312611b6757508290505f6106ad565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4831215611b9957505f9050826106ad565b5f839003600a0a808581611baf57611baf614744565b0794859003959350505050565b5f818303611bcb575082610695565b82821315611c0e57828203604c811380611be557505f8113155b15611bf3575f915050610695565b80600a0a8581611c0557611c05614744565b05915050610695565b818303604c811380611c2057505f8113155b15611c68576040517f1d5d6d100000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490526064016108ce565b600a81900a85810286828281611c8057611c80614744565b0514611cc9576040517f1d5d6d100000000000000000000000000000000000000000000000000000000081526004810188905260248101879052604481018690526064016108ce565b9250610695915050565b5f8085158415178015611ceb575f92505f9150611de8565b611cf58487614904565b91505f611d0188613a6a565b90505f611d0d87613a6a565b90505f611d1a8383613ad0565b5090505f6f0785ee10d5da46d900f436a000000000821115611d4f576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a7640000821115611d7057670de0b6b3a7640000820491506012015b633b9aca00821115611d8957633b9aca00820491506009015b612710821115611d9e57612710820491506004015b8115611db257600a82049150600101611d9e565b611dbc8187614904565b9550611dde8b8a611dd88787611dd387600a6148bc565b613b0b565b89613bf0565b9097509550505050505b5094509492505050565b5f80835f03611e37576040517f7a97930f00000000000000000000000000000000000000000000000000000000815260048101879052602481018690526044016108ce565b855f03611e4857505f90508061240d565b5f805f80611e568a8a613cf7565b919b5099509150611e678888613cf7565b919950975090505f611e788b613a6a565b90505f611e848a613a6a565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c818310156122a1578415611ee257507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000009050604b612260565b6f4b3b4ca85a86c47a098a22400000000083101561200e57678ac7230489e80000831015611f72576402540be400831015611f4057620186a0831015611f305750620186a0905060056121e9565b506402540be4009050600a6121e9565b655af3107a4000831015611f5f5750655af3107a40009050600e6121e9565b50678ac7230489e80000905060136121e9565b6b204fce5e3e25026110000000831015611fc45769152d02c7e14af6800000831015611fad575069152d02c7e14af6800000905060176121e9565b506b204fce5e3e250261100000009050601c6121e9565b6d314dc6448d9338c15b0a00000000831015611ff357506d314dc6448d9338c15b0a00000000905060216121e9565b506f4b3b4ca85a86c47a098a224000000000905060266121e9565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156121065773af298d050e4395d69670b12b7f410000000000008310156120a1577172cb5bd86321e38cb6ce6682e8000000000083101561208257507172cb5bd86321e38cb6ce6682e800000000009050602b6121e9565b5073af298d050e4395d69670b12b7f41000000000000905060306121e9565b76010b46c6cdd6e3e0828f4db456ff0c8ea00000000000008310156120e2575076010b46c6cdd6e3e0828f4db456ff0c8ea0000000000000905060356121e9565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a6121e9565b7c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000083101561219c577a026e4d30eccc3215dd8f3157d27e23acbdcfe6800000000000000083101561217457507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f6121e9565b507c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000905060446121e9565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca0000000000000000008310156121e957507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b81831161221d57600a820491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016121e9565b815f03612260576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018d9052602481018c90526044016108ce565b856122a1576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018f9052602481018e90526044016108ce565b807f8000000000000000000000000000000000000000000000000000000000000000018d126122d457808d039c50612347565b7f80000000000000000000000000000000000000000000000000000000000000009c90038c015f81131561234757807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038b1361233457998a0199612347565b5f8099509950505050505050505061240d565b5f808e12801561235657505f8c135b15612393577f80000000000000000000000000000000000000000000000000000000000000008e01808d1361238b575f61238f565b808d035b9150505b8b818f010397506123b08f8e6123aa888789613b0b565b8b613bf0565b90995097505f8113156123fa57604c8113156123da575f809a509a5050505050505050505061240d565b80600a0a89816123ec576123ec614744565b059850885f036123fa575f97505b5096985094965061240d95505050505050565b94509492505050565b5f612423858585856130d6565b1495945050505050565b6060612439838361398d565b90935091505f8061246a7f161bcca7119915b50764b4abe86529797775a5f171951000000000000000000086614976565b1561249a57507f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000009050604c6124c1565b507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000009050604b5b5f6124cc8387614976565b90505f6124d984886149dd565b90505f808312156124f3575060016124f0836149f0565b92505b5f82121561250a57506001612507826149f0565b91505b60408051602081019091525f81528215612613575f8061252b600a89614a20565b90505b6125388186614976565b5f0361255d57612549600a82614a20565b90508161255581614a33565b92505061252e565b60408051602081019091525f8082525b838110156125be57816040516020016125869190614a81565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052915060010161256d565b505b6125cb600a876149dd565b5f036125e3576125dc600a87614976565b95506125c0565b806125ed87613f98565b6040516020016125fe929190614ab9565b60405160208183030381529060405293505050505b5f61261d85613f98565b90505f61262a878b614904565b90505f81156126605761263c82613f98565b60405160200161264c9190614afb565b604051602081830303815290604052612670565b60405180602001604052805f8152505b90505f8561268c5760405180602001604052805f8152506126c3565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b9050808486846040516020016126dc9493929190614b2c565b6040516020818303038152906040529a505050505050505050505092915050565b60606103e882138061271857506127156103e86149f0565b82125b15612752576040517fe44c72b0000000000000000000000000000000000000000000000000000000008152600481018390526024016108ce565b5f80841290811561276d57612766856149f0565b9050612770565b50835b5f61277a82614024565b80519091505f5b81811080156127fd57508281612798600185614b56565b6127a29190614b56565b815181106127b2576127b2614b69565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f3000000000000000000000000000000000000000000000000000000000000000145b15612814578061280c81614a33565b915050612781565b5f61281f8284614b56565b90505f61282c838a614904565b90505f876128485760405180602001604052805f81525061287f565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b90505f82126129f957815f6128948286614b96565b67ffffffffffffffff8111156128ac576128ac614625565b6040519080825280601f01601f1916602001820160405280156128d6576020820181803683370190505b5090505f5b85811015612948578881815181106128f5576128f5614b69565b602001015160f81c60f81b82828151811061291257612912614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053506001016128db565b505f5b828110156129c5577f30000000000000000000000000000000000000000000000000000000000000008261297f8389614b96565b8151811061298f5761298f614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535060010161294b565b5082816040516020016129d9929190614ba9565b6040516020818303038152906040529a5050505050505050505050610684565b5f612a03836149f0565b905080841115612c1a575f612a188286614b56565b90505f612a26866001614b96565b67ffffffffffffffff811115612a3e57612a3e614625565b6040519080825280601f01601f191660200182016040528015612a68576020820181803683370190505b5090505f5b82811015612ada57898181518110612a8757612a87614b69565b602001015160f81c60f81b828281518110612aa457612aa4614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612a6d565b507f2e00000000000000000000000000000000000000000000000000000000000000818381518110612b0e57612b0e614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5b83811015612be55789612b518285614b96565b81518110612b6157612b61614b69565b01602001517fff00000000000000000000000000000000000000000000000000000000000000168282612b95866001614b96565b612b9f9190614b96565b81518110612baf57612baf614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612b3e565b508381604051602001612bf9929190614ba9565b6040516020818303038152906040529b505050505050505050505050610684565b5f612c258583614b56565b90505f85612c34836002614b96565b612c3e9190614b96565b67ffffffffffffffff811115612c5657612c56614625565b6040519080825280601f01601f191660200182016040528015612c80576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f81518110612cb657612cb6614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f2e0000000000000000000000000000000000000000000000000000000000000081600181518110612d1857612d18614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5b82811015612dc3577f300000000000000000000000000000000000000000000000000000000000000082612d7d836002614b96565b81518110612d8d57612d8d614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612d48565b505f5b86811015612be557898181518110612de057612de0614b69565b01602001517fff00000000000000000000000000000000000000000000000000000000000000168282612e14866002614b96565b612e1e9190614b96565b81518110612e2e57612e2e614b69565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612dc6565b5f805f805f612e7387876136ec565b92509250925080612eba576040517fc471796600000000000000000000000000000000000000000000000000000000815260048101849052602481018390526044016108ce565b50909590945092505050565b5f805f612ed38585611459565b9150915080612f18576040517f22c9f7bb00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016108ce565b509392505050565b5f80612f2c84846131aa565b9094509250612f3d86868686612fa6565b9150915094509492505050565b5f805f612f5886868661155f565b9150915080612f9d576040517f05e4767800000000000000000000000000000000000000000000000000000000815260048101879052602481018690526044016108ce565b50949350505050565b5f8085158415178015612fd257865f03612fc6578484925092505061240d565b8686925092505061240d565b612fdc878761398d565b9097509550612feb858561398d565b909550935085841315612fff579395929492935b838603604c81111561301857878793509350505061240d565b80600a0a868161302a5761302a614744565b0595505086850180881860ff90811c151589881890911c151680156130c557877f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff036130ac576040517fd556b111000000000000000000000000000000000000000000000000000000008152600481018a9052602481018990526044016108ce565b600a9687900596909805860197600197909701966130c9565b8198505b5096979596505050505050565b5f80851584151781871282861218178584141780156130fb578685925092505061240d565b505f8584131561310f575092949193919260015b8386035f8112604c8213178015613142578215613134575f899450945050505061240d565b885f9450945050505061240d565b600a82900a8981028a82828161315a5761315a614744565b0514613186578415613176575f8b96509650505050505061240d565b8a5f96509650505050505061240d565b841561319b57889650945061240d9350505050565b955087945061240d9350505050565b5f807f80000000000000000000000000000000000000000000000000000000000000008403613243577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8303613236576040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101859052602481018490526044016108ce565b600a840593508260010192505b50505f9190910391565b5f8281806132628386652000000000006140e0565b9250858314158361327c81886703ff0000000000006140e0565b94508085036132b657507f34bd20690000000000000000000000000000000000000000000000000000000094505f92508291506136e39050565b5f806132c28a88614109565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613300575095505f93508392506136e3915050565b86519095506540000000000060015f9290921a9190911b16151588871016915050801561358f57506001909301925f8461334381896703ff0000000000006140e0565b955080860361337e57507f7bfa48af0000000000000000000000000000000000000000000000000000000095505f93508392506136e3915050565b855b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018051908a1160015f9290921a9190911b6601000000000000161515166001036133ed577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613380565b818114613444575f806134008484614109565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613440575097505f95508594506136e39350505050565b9350505b5f83121561347f57507f7bfa48af0000000000000000000000000000000000000000000000000000000096505f94508493506136e392505050565b831561348b57825f0392505b80820394505f8513156134cb57507f013b2aaa0000000000000000000000000000000000000000000000000000000096505f94508493506136e392505050565b855f036134da5782955061358c565b5f859003604381111561351b57507f32b8b8be0000000000000000000000000000000000000000000000000000000097505f95508594506136e39350505050565b600a0a8681025f8883838161353257613532614744565b0514159050601b82900b82141581806135485750805b1561358457507f32b8b8be000000000000000000000000000000000000000000000000000000009a505f98508897506136e39650505050505050565b505084019650505b50505b84516c2000000020000000000000000060015f9290921a9190911b1615158786101680156136d457600190950194856135cf818a652000000000006140e0565b9650866135e5818b6703ff0000000000006140e0565b975080880361362257507f013b2aaa0000000000000000000000000000000000000000000000000000000097505f95508594506136e39350505050565b505f8061362f838a614109565b90925090507fffffffff0000000000000000000000000000000000000000000000000000000082161561366f575097505f95508594506136e39350505050565b9250508482015f8313801561368357508581125b8061369757505f8312801561369757508581135b156136d057507fd556b1110000000000000000000000000000000000000000000000000000000097505f95508594506136e39350505050565b9450505b845f036136df575f93505b5050505b92959194509250565b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86111561373757600a860460018201600a88065f1493509350935050613741565b8593509150600190505b9250925092565b5f805f837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0361378057508391505f90506001613741565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc84121561380e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb08412156137df57505f9150508215156001613741565b5f846004015f03600a0a90505f8187816137fb576137fb614744565b0594505080840286141592509050613741565b5f841261382357505f91508190506001613741565b50505060048101600a0a82025f6001613741565b5f80806064613849600a612328614a20565b613856600a612328614a20565b6138619060026148c7565b61386c906001614b96565b6138769190614b96565b6138809190614b96565b90506138c4565b5f8052600280600a8504028301601e833c5f80516107d0840193505f80526001600a8606600a6064880402018501601f853c5f5101949350505050565b6138cf858288613887565b92508315611b4b576138e5600186018288613887565b915050935093915050565b5f80888803613903575083905081613981565b5f805f806139138c8b8f8d612f20565b915091505f806139258a8a8d8c612f20565b9150915061393584848484611cd3565b8096508197505050505050505f8061394f8b8b8f8d612f20565b915091505f8061396186868686611df2565b915091505f8061397384848f8e612fa6565b909a50985050505050505050505b97509795505050505050565b5f805f805f61399c8787613cf7565b92509250925080612eba576040517f05e51ecb00000000000000000000000000000000000000000000000000000000815260048101889052602481018790526044016108ce565b5f806139f2600a612328614a20565b6139fd9060026148c7565b613a08906001614b96565b90505f613a18600a612328614a20565b90506002600a8504026001015f8052600281601e883c505f51617fff81169350618000811615613a4757918101915b505f80526001600a8506600a6064870402018301601f873c50505f510192915050565b5f80821215613ac7577f80000000000000000000000000000000000000000000000000000000000000008203613ac157507f8000000000000000000000000000000000000000000000000000000000000000919050565b505f0390565b5090565b919050565b5f807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83850993909202808410938190039390930393915050565b5f805f613b188686613ad0565b91509150815f03613b3c57838181613b3257613b32614744565b0492505050610695565b838210613b86576040517f6c59da120000000000000000000000000000000000000000000000000000000081526004810187905260248101869052604481018590526064016108ce565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f8587181215613cba577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115613ca757613c4f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001614b96565b8403613c7f57507f800000000000000000000000000000000000000000000000000000000000000090508161240d565b613c8a600a85614a20565b613c93906149f0565b613c9e846001614904565b9150915061240d565b613cb0846149f0565b839150915061240d565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115613ced57613c93600a85614a20565b508290508161240d565b5f805f845f03613d0f57505f91508190506001613741565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee800000000000000000085055f03613f23576f4b3b4ca85a86c47a098a2240000000008505158015613d7857507f80000000000000000000000000000000000000000000000000000000000000268412155b15613d99576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a000000000000008505158015613de157507f80000000000000000000000000000000000000000000000000000000000000138412155b15613dfa57678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c6400000000000000008505158015613e4657507f800000000000000000000000000000000000000000000000000000000000000a8412155b15613e5c576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e40000000000000000008505158015613eab57507f80000000000000000000000000000000000000000000000000000000000000028412155b15613ec157606485029450600284039350613e5c565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000008505158015613f1157507f80000000000000000000000000000000000000000000000000000000000000018412155b15613f2357600a850294506001840393505b600a80860290810586148015613f5957507f80000000000000000000000000000000000000000000000000000000000000018512155b15613f68578095506001850394505b50939492935050507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000008305151590565b60605f8212613fb55760405180602001604052805f815250613fec565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b613ffd60ff84901d80850118614024565b60405160200161400e929190614ba9565b6040516020818303038152906040529050919050565b60605f61403083614233565b60010190505f8167ffffffffffffffff81111561404f5761404f614625565b6040519080825280601f01601f191660200182016040528015614079576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461408357509392505050565b5f5b5f82600186515f1a1b16118385101615614101576001840193506140e2565b509192915050565b81515f90819065200000000000600191831a9190911b161515838510168085019082806141368488614314565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615614171575093505f92506106ad915050565b825f036141d4577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116141a5575f6141c7565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b955093506106ad92505050565b7f80000000000000000000000000000000000000000000000000000000000000008111614201575f614223565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95505f0393505050509250929050565b5f807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061427b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106142a7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106142c557662386f26fc10000830492506010015b6305f5e10083106142dd576305f5e100830492506008015b61271083106142f157612710830492506004015b60648310614303576064830492506002015b600a83106106845760010192915050565b5f8082841061434757507f34bd20690000000000000000000000000000000000000000000000000000000090505f6106ad565b835f03614380576040517fda6966d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60305f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501815b8782101580156143b85750604d83105b156143fb57815160018401937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90930192600a0a5f9190911a85900302016143a8565b8782106145215781515f1a849003600181111561444357507f0fdc26350000000000000000000000000000000000000000000000000000000095505f94506106ad9350505050565b600a84900a810282810183111561448657507f0fdc26350000000000000000000000000000000000000000000000000000000096505f95506106ad945050505050565b9190910190507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101905b8782106145215781515f1a603081146144f657507f0fdc26350000000000000000000000000000000000000000000000000000000095505f94506106ad9350505050565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101906144b2565b5f9890975095505050505050565b5f6020828403121561453f575f80fd5b5035919050565b5f8060408385031215614557575f80fd5b50508035926020909101359150565b803560ff81168114613acb575f80fd5b5f8060408385031215614587575f80fd5b8235915061459760208401614566565b90509250929050565b5f80604083850312156145b1575f80fd5b82359150602083013580151581146145c7575f80fd5b809150509250929050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60208284031215614662575f80fd5b813567ffffffffffffffff80821115614679575f80fd5b818401915084601f83011261468c575f80fd5b81358181111561469e5761469e614625565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156146e4576146e4614625565b816040528281528760208487010111156146fc575f80fd5b826020860160208301375f928101602001929092525095945050505050565b5f805f6060848603121561472d575f80fd5b505081359360208301359350604090920135919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b600181815b808511156147f757817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156147dd576147dd614771565b808516156147ea57918102915b93841c93908002906147a3565b509250929050565b5f8261480d57506001610684565b8161481957505f610684565b816001811461482f576002811461483957614855565b6001915050610684565b60ff84111561484a5761484a614771565b50506001821b610684565b5060208310610133831016604e8410600b8410161715614878575081810a610684565b614882838361479e565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156148b4576148b4614771565b029392505050565b5f61069583836147ff565b808202811582820484141761068457610684614771565b8181035f8312801583831316838312821617156148fd576148fd614771565b5092915050565b8082018281125f83128015821682158216171561492357614923614771565b505092915050565b8082025f82127f80000000000000000000000000000000000000000000000000000000000000008414161561496257614962614771565b818105831482151761068457610684614771565b5f8261498457614984614744565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f8000000000000000000000000000000000000000000000000000000000000000831416156149d8576149d8614771565b500590565b5f826149eb576149eb614744565b500790565b5f7f80000000000000000000000000000000000000000000000000000000000000008203613ac157613ac1614771565b5f82614a2e57614a2e614744565b500490565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a6357614a63614771565b5060010190565b5f81518060208401855e5f93019283525090919050565b5f614a8c8284614a6a565b7f300000000000000000000000000000000000000000000000000000000000000081526001019392505050565b7f2e0000000000000000000000000000000000000000000000000000000000000081525f614af3614aed6001840186614a6a565b84614a6a565b949350505050565b7f650000000000000000000000000000000000000000000000000000000000000081525f6106956001830184614a6a565b5f614b4c614aed614b46614b40858a614a6a565b88614a6a565b86614a6a565b9695505050505050565b8181038181111561068457610684614771565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b8082018082111561068457610684614771565b5f614af3614aed8386614a6a56" + } +} \ No newline at end of file diff --git a/crates/float/abi/TestDecimalFloat.json b/crates/float/abi/TestDecimalFloat.json index a1fd439..115936d 100644 --- a/crates/float/abi/TestDecimalFloat.json +++ b/crates/float/abi/TestDecimalFloat.json @@ -1 +1,90 @@ -{"abi":[{"type":"function","name":"packLossless","inputs":[{"name":"coefficient","type":"int224","internalType":"int224"},{"name":"exponent","type":"int32","internalType":"int32"}],"outputs":[{"name":"","type":"bytes32","internalType":"Float"}],"stateMutability":"pure"},{"type":"function","name":"unpack","inputs":[{"name":"float","type":"bytes32","internalType":"Float"}],"outputs":[{"name":"","type":"int256","internalType":"int256"},{"name":"","type":"int256","internalType":"int256"}],"stateMutability":"pure"},{"type":"error","name":"CoefficientOverflow","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"}]}],"bytecode":{"object":"0x6080604052348015600e575f80fd5b506102848061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610034575f3560e01c806371516dd914610038578063b702fecd1461008c575b5f80fd5b61007261004636600461022b565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b9160e09190911d90565b604080519283526020830191909152015b60405180910390f35b61009f61009a366004610242565b6100ad565b604051908152602001610083565b5f6100be83601b0b8360030b6100c5565b9392505050565b5f805f6100d28585610124565b915091508061011c576040517f22c9f7bb00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044015b60405180910390fd5b509392505050565b5f601b83900b8314838382610188577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561016857620186a0860595506005850194505b8586601b0b1461018357600a86059550846001019450610168565b61019e565b855f0361019e57505f9250600191506102249050565b848560030b146101fa575f8512156101be57505f92508291506102249050565b6040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610113565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791505b9250929050565b5f6020828403121561023b575f80fd5b5035919050565b5f8060408385031215610253575f80fd5b823580601b0b8114610263575f80fd5b91506020830135600381900b8114610279575f80fd5b80915050925092905056","sourceMap":"332:770:59:-:0;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561000f575f80fd5b5060043610610034575f3560e01c806371516dd914610038578063b702fecd1461008c575b5f80fd5b61007261004636600461022b565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b9160e09190911d90565b604080519283526020830191909152015b60405180910390f35b61009f61009a366004610242565b6100ad565b604051908152602001610083565b5f6100be83601b0b8360030b6100c5565b9392505050565b5f805f6100d28585610124565b915091508061011c576040517f22c9f7bb00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044015b60405180910390fd5b509392505050565b5f601b83900b8314838382610188577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561016857620186a0860595506005850194505b8586601b0b1461018357600a86059550846001019450610168565b61019e565b855f0361019e57505f9250600191506102249050565b848560030b146101fa575f8512156101be57505f92508291506102249050565b6040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610113565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791505b9250929050565b5f6020828403121561023b575f80fd5b5035919050565b5f8060408385031215610253575f80fd5b823580601b0b8114610263575f80fd5b91506020830135600381900b8114610279575f80fd5b80915050925092905056","sourceMap":"332:770:59:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;979:121;;;;;;:::i;:::-;19261:17:51;19363:16;;19359:2;19348:32;;19409:4;19405:16;;;;;979:121:59;;;;;396:25:145;;;452:2;437:18;;430:34;;;;369:18;979:121:59;;;;;;;;599:163;;;;;;:::i;:::-;;:::i;:::-;;;1097:25:145;;;1085:2;1070:18;599:163:59;924:204:145;599:163:59;680:5;704:51;733:11;704:51;;746:8;704:51;;:28;:51::i;:::-;697:58;599:163;-1:-1:-1;;;599:163:59:o;18451:299:51:-;18539:5;18557:7;18566:13;18583:38;18593:17;18612:8;18583:9;:38::i;:::-;18556:65;;;;18636:8;18631:95;;18667:48;;;;;;;;396:25:145;;;437:18;;;430:34;;;369:18;;18667:48:51;;;;;;;;18631:95;-1:-1:-1;18742:1:51;18451:299;-1:-1:-1;;;18451:299:51:o;15810:2402::-;15895:11;16327:46;;;;;;15991:17;16047:8;16327:46;16651:668;;16708:4;16688:17;:24;:29;16684:135;;16762:3;16741:24;;;;16799:1;16787:13;;;;16684:135;17058:17;17036;17029:46;;;17022:151;;17120:2;17099:23;;;;17144:10;;;;;17022:151;;;16651:668;;;17215:17;17236:1;17215:22;17211:94;;-1:-1:-1;3653:1:51;;-1:-1:-1;17281:4:51;;-1:-1:-1;17261:25:51;;-1:-1:-1;17261:25:51;17211:94;17529:8;17516;17510:27;;;17506:393;;17731:1;17720:8;:12;17716:85;;;-1:-1:-1;3653:1:51;;-1:-1:-1;3653:1:51;;-1:-1:-1;17756:26:51;;-1:-1:-1;17756:26:51;17716:85;17825:59;;;;;;;;396:25:145;;;437:18;;;430:34;;;369:18;;17825:59:51;226:244:145;17506:393:51;-1:-1:-1;;18046:17:51;18132:28;;18166:4;18162:19;;;18129:53;;-1:-1:-1;15810:2402:51;;;;;;:::o;14:207:145:-;100:6;153:2;141:9;132:7;128:23;124:32;121:52;;;169:1;166;159:12;121:52;-1:-1:-1;192:23:145;;14:207;-1:-1:-1;14:207:145:o;475:444::-;540:6;548;601:2;589:9;580:7;576:23;572:32;569:52;;;617:1;614;607:12;569:52;656:9;643:23;710:5;706:2;695:21;688:5;685:32;675:60;;731:1;728;721:12;675:60;754:5;-1:-1:-1;811:2:145;796:18;;783:32;857:1;846:22;;;834:35;;824:63;;883:1;880;873:12;824:63;906:7;896:17;;;475:444;;;;;:::o","linkReferences":{}},"methodIdentifiers":{"packLossless(int224,int32)":"b702fecd","unpack(bytes32)":"71516dd9"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"CoefficientOverflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"signedCoefficient\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exponent\",\"type\":\"int256\"}],\"name\":\"ExponentOverflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int224\",\"name\":\"coefficient\",\"type\":\"int224\"},{\"internalType\":\"int32\",\"name\":\"exponent\",\"type\":\"int32\"}],\"name\":\"packLossless\",\"outputs\":[{\"internalType\":\"Float\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Float\",\"name\":\"float\",\"type\":\"bytes32\"}],\"name\":\"unpack\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"CoefficientOverflow(int256,int256)\":[{\"details\":\"Thrown when a coefficient overflows.\"}],\"ExponentOverflow(int256,int256)\":[{\"details\":\"Thrown when an exponent overflows.\"}]},\"kind\":\"dev\",\"methods\":{\"packLossless(int224,int32)\":{\"params\":{\"coefficient\":\"The coefficient to pack.\",\"exponent\":\"The exponent to pack.\"},\"returns\":{\"_0\":\"The packed float.\"}},\"unpack(bytes32)\":{\"params\":{\"float\":\"The float to unpack.\"},\"returns\":{\"_0\":\"coefficient The coefficient of the float.\",\"_1\":\"exponent The exponent of the float.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"packLossless(int224,int32)\":{\"notice\":\"Exposes `LibDecimalFloat.packLossless` for offchain use.\"},\"unpack(bytes32)\":{\"notice\":\"Exposes `LibDecimalFloat.unpack` for offchain use.\"}},\"notice\":\"Additional exposed functions for testing the internals of floats from downstream environments, e.g. rust.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/concrete/TestDecimalFloat.sol\":\"TestDecimalFloat\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"appendCBOR\":false,\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[\":@openzeppelin-contracts-5.6.1/=dependencies/@openzeppelin-contracts-5.6.1/\",\":forge-std-1.16.1/=dependencies/forge-std-1.16.1/\",\":mut/=dependencies/rain-string-0.2.0/src/lib/mut/\",\":parse/=dependencies/rain-string-0.2.0/src/lib/parse/\",\":rain-datacontract-0.1.0/=dependencies/rain-datacontract-0.1.0/\",\":rain-deploy-0.1.2/=dependencies/rain-deploy-0.1.2/\",\":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/\"]},\"sources\":{\"src/error/ErrDecimalFloat.sol\":{\"keccak256\":\"0x53825ff4d1af4981100de46bd7536c611625fe7930b5c21921838cfed3a92243\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://961197f4c7b6d560f71f67892bfd5b64300be0f0fdb20162058938567653643e\",\"dweb:/ipfs/QmTJzmA5CEkmYrXJ2MHnfQ3wGm1Qj6xE1vNaqAqgUpEnvA\"]},\"src/lib/LibDecimalFloat.sol\":{\"keccak256\":\"0x59d2dad4b7e861ed835a79c61ae42b4b0d628f9c578f3bb3ecd7796ed530f196\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://e565148a37f06299de3b6bcb3385ea0336f65c6c02c9ebfbc6f227f4e56d1c03\",\"dweb:/ipfs/Qma6UNZifZc8zsf7J6B87CdCXhiCR6Zisyg9czsfaji6yY\"]},\"src/lib/implementation/LibDecimalFloatImplementation.sol\":{\"keccak256\":\"0x47d0eeb542875548689465407162a19e4a21fb4591af5bb48d5758c0d1b93634\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://631efb796ff17f277804f8a32df7d28630c2ae5300e7d74c37aa8ed1f86b5092\",\"dweb:/ipfs/QmSfmMGQyxKYxu8UrWDEtuCggQ9HtFJy5cbMsYLPZbcTZ7\"]},\"src/lib/table/LibLogTable.sol\":{\"keccak256\":\"0xccd2dea54cfb708c01e7e8e88c089742bbab18f5783be4632311fb4923d44c88\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://f45fb78c16b5d66d56ba0e78acdb0ca5d315eb05efa2cd7a81e191aabe7aec52\",\"dweb:/ipfs/QmQJ3TFFxTMu4HZ4qnjgmdmSNhGZLQRdCnSqAipEF1up1f\"]},\"test/concrete/TestDecimalFloat.sol\":{\"keccak256\":\"0x4cb7ac6a794d06ffcc482d9f0451e57de56d4b434411e70d61949634c56c36c7\",\"license\":\"LicenseRef-DCL-1.0\",\"urls\":[\"bzz-raw://c1776ad378af67be27a7c98225c58b70a33b0e6ffc4c68d69e23dcf303e8a929\",\"dweb:/ipfs/QmfK9C9g5ncMkHFvSvGFAru8bvPTY9qxTzB3KPgGAn1EyG\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.25+commit.b61c2a91"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"int256","name":"signedCoefficient","type":"int256"},{"internalType":"int256","name":"exponent","type":"int256"}],"type":"error","name":"CoefficientOverflow"},{"inputs":[{"internalType":"int256","name":"signedCoefficient","type":"int256"},{"internalType":"int256","name":"exponent","type":"int256"}],"type":"error","name":"ExponentOverflow"},{"inputs":[{"internalType":"int224","name":"coefficient","type":"int224"},{"internalType":"int32","name":"exponent","type":"int32"}],"stateMutability":"pure","type":"function","name":"packLossless","outputs":[{"internalType":"Float","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"Float","name":"float","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"unpack","outputs":[{"internalType":"int256","name":"","type":"int256"},{"internalType":"int256","name":"","type":"int256"}]}],"devdoc":{"kind":"dev","methods":{"packLossless(int224,int32)":{"params":{"coefficient":"The coefficient to pack.","exponent":"The exponent to pack."},"returns":{"_0":"The packed float."}},"unpack(bytes32)":{"params":{"float":"The float to unpack."},"returns":{"_0":"coefficient The coefficient of the float.","_1":"exponent The exponent of the float."}}},"version":1},"userdoc":{"kind":"user","methods":{"packLossless(int224,int32)":{"notice":"Exposes `LibDecimalFloat.packLossless` for offchain use."},"unpack(bytes32)":{"notice":"Exposes `LibDecimalFloat.unpack` for offchain use."}},"version":1}},"settings":{"remappings":["@openzeppelin-contracts-5.6.1/=dependencies/@openzeppelin-contracts-5.6.1/","forge-std-1.16.1/=dependencies/forge-std-1.16.1/","mut/=dependencies/rain-string-0.2.0/src/lib/mut/","parse/=dependencies/rain-string-0.2.0/src/lib/parse/","rain-datacontract-0.1.0/=dependencies/rain-datacontract-0.1.0/","rain-deploy-0.1.2/=dependencies/rain-deploy-0.1.2/","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/"],"optimizer":{"enabled":true,"runs":1000000},"metadata":{"bytecodeHash":"none","appendCBOR":false},"compilationTarget":{"test/concrete/TestDecimalFloat.sol":"TestDecimalFloat"},"evmVersion":"cancun","libraries":{}},"sources":{"src/error/ErrDecimalFloat.sol":{"keccak256":"0x53825ff4d1af4981100de46bd7536c611625fe7930b5c21921838cfed3a92243","urls":["bzz-raw://961197f4c7b6d560f71f67892bfd5b64300be0f0fdb20162058938567653643e","dweb:/ipfs/QmTJzmA5CEkmYrXJ2MHnfQ3wGm1Qj6xE1vNaqAqgUpEnvA"],"license":"LicenseRef-DCL-1.0"},"src/lib/LibDecimalFloat.sol":{"keccak256":"0x59d2dad4b7e861ed835a79c61ae42b4b0d628f9c578f3bb3ecd7796ed530f196","urls":["bzz-raw://e565148a37f06299de3b6bcb3385ea0336f65c6c02c9ebfbc6f227f4e56d1c03","dweb:/ipfs/Qma6UNZifZc8zsf7J6B87CdCXhiCR6Zisyg9czsfaji6yY"],"license":"LicenseRef-DCL-1.0"},"src/lib/implementation/LibDecimalFloatImplementation.sol":{"keccak256":"0x47d0eeb542875548689465407162a19e4a21fb4591af5bb48d5758c0d1b93634","urls":["bzz-raw://631efb796ff17f277804f8a32df7d28630c2ae5300e7d74c37aa8ed1f86b5092","dweb:/ipfs/QmSfmMGQyxKYxu8UrWDEtuCggQ9HtFJy5cbMsYLPZbcTZ7"],"license":"LicenseRef-DCL-1.0"},"src/lib/table/LibLogTable.sol":{"keccak256":"0xccd2dea54cfb708c01e7e8e88c089742bbab18f5783be4632311fb4923d44c88","urls":["bzz-raw://f45fb78c16b5d66d56ba0e78acdb0ca5d315eb05efa2cd7a81e191aabe7aec52","dweb:/ipfs/QmQJ3TFFxTMu4HZ4qnjgmdmSNhGZLQRdCnSqAipEF1up1f"],"license":"LicenseRef-DCL-1.0"},"test/concrete/TestDecimalFloat.sol":{"keccak256":"0x4cb7ac6a794d06ffcc482d9f0451e57de56d4b434411e70d61949634c56c36c7","urls":["bzz-raw://c1776ad378af67be27a7c98225c58b70a33b0e6ffc4c68d69e23dcf303e8a929","dweb:/ipfs/QmfK9C9g5ncMkHFvSvGFAru8bvPTY9qxTzB3KPgGAn1EyG"],"license":"LicenseRef-DCL-1.0"}},"version":1},"id":59} \ No newline at end of file +{ + "abi": [ + { + "type": "function", + "name": "packLossless", + "inputs": [ + { + "name": "coefficient", + "type": "int224", + "internalType": "int224" + }, + { + "name": "exponent", + "type": "int32", + "internalType": "int32" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "Float" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "unpack", + "inputs": [ + { + "name": "float", + "type": "bytes32", + "internalType": "Float" + } + ], + "outputs": [ + { + "name": "", + "type": "int256", + "internalType": "int256" + }, + { + "name": "", + "type": "int256", + "internalType": "int256" + } + ], + "stateMutability": "pure" + }, + { + "type": "error", + "name": "CoefficientOverflow", + "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" + } + ] + } + ], + "bytecode": { + "object": "0x6080604052348015600e575f80fd5b506102848061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610034575f3560e01c806371516dd914610038578063b702fecd1461008c575b5f80fd5b61007261004636600461022b565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b9160e09190911d90565b604080519283526020830191909152015b60405180910390f35b61009f61009a366004610242565b6100ad565b604051908152602001610083565b5f6100be83601b0b8360030b6100c5565b9392505050565b5f805f6100d28585610124565b915091508061011c576040517f22c9f7bb00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044015b60405180910390fd5b509392505050565b5f601b83900b8314838382610188577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561016857620186a0860595506005850194505b8586601b0b1461018357600a86059550846001019450610168565b61019e565b855f0361019e57505f9250600191506102249050565b848560030b146101fa575f8512156101be57505f92508291506102249050565b6040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610113565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791505b9250929050565b5f6020828403121561023b575f80fd5b5035919050565b5f8060408385031215610253575f80fd5b823580601b0b8114610263575f80fd5b91506020830135600381900b8114610279575f80fd5b80915050925092905056" + }, + "deployedBytecode": { + "object": "0x608060405234801561000f575f80fd5b5060043610610034575f3560e01c806371516dd914610038578063b702fecd1461008c575b5f80fd5b61007261004636600461022b565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b9160e09190911d90565b604080519283526020830191909152015b60405180910390f35b61009f61009a366004610242565b6100ad565b604051908152602001610083565b5f6100be83601b0b8360030b6100c5565b9392505050565b5f805f6100d28585610124565b915091508061011c576040517f22c9f7bb00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044015b60405180910390fd5b509392505050565b5f601b83900b8314838382610188577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561016857620186a0860595506005850194505b8586601b0b1461018357600a86059550846001019450610168565b61019e565b855f0361019e57505f9250600191506102249050565b848560030b146101fa575f8512156101be57505f92508291506102249050565b6040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610113565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791505b9250929050565b5f6020828403121561023b575f80fd5b5035919050565b5f8060408385031215610253575f80fd5b823580601b0b8114610263575f80fd5b91506020830135600381900b8114610279575f80fd5b80915050925092905056" + } +} \ No newline at end of file diff --git a/foundry.toml b/foundry.toml index 0122f9a..7a6d12e 100644 --- a/foundry.toml +++ b/foundry.toml @@ -23,6 +23,8 @@ evm_version = "cancun" bytecode_hash = "none" cbor_metadata = false +ffi = true + fs_permissions = [ { access = "read-write", path = "./src/generated" }, { access = "read", path = "./out" }, diff --git a/script/CopyArtifacts.sol b/script/CopyArtifacts.sol index 98f0a71..b55ead6 100644 --- a/script/CopyArtifacts.sol +++ b/script/CopyArtifacts.sol @@ -3,22 +3,24 @@ 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 { - _copyArtifact("DecimalFloat"); - _copyArtifact("TestDecimalFloat"); + string[] memory names = LibCopyArtifacts.contracts(); + for (uint256 i = 0; i < names.length; i++) { + _copyAbi(names[i]); + } } - function _copyArtifact(string memory contractName) internal { - string memory src = string.concat("out/", contractName, ".sol/", contractName, ".json"); - string memory dst = string.concat("crates/float/abi/", contractName, ".json"); - string memory contents = vm.readFile(src); + 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, contents); + vm.writeFile(dst, string(artifact)); } } diff --git a/script/lib/LibCopyArtifacts.sol b/script/lib/LibCopyArtifacts.sol new file mode 100644 index 0000000..9c7b7ae --- /dev/null +++ b/script/lib/LibCopyArtifacts.sol @@ -0,0 +1,48 @@ +// 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 crate consumes 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[](2); + names[0] = "DecimalFloat"; + names[1] = "TestDecimalFloat"; + 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 crate reads + /// at compile time. + function committedPath(string memory contractName) internal pure returns (string memory) { + return string.concat("crates/float/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 and the bytecode fields are consumed by the rust EVM + /// setup in `crates/float/src/evm.rs`. + 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/test/script/CopyArtifacts.t.sol b/test/script/CopyArtifacts.t.sol index 5858283..f566a65 100644 --- a/test/script/CopyArtifacts.t.sol +++ b/test/script/CopyArtifacts.t.sol @@ -3,25 +3,25 @@ pragma solidity =0.8.25; import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {LibCopyArtifacts} from "script/lib/LibCopyArtifacts.sol"; contract CopyArtifactsTest is Test { - function _assertCommittedMatches(string memory contractName) internal view { - string memory live = vm.readFile(string.concat("out/", contractName, ".sol/", contractName, ".json")); - string memory committed = vm.readFile(string.concat("crates/float/abi/", contractName, ".json")); + function _assertCommittedMatches(string memory contractName) internal { + bytes memory liveAbi = LibCopyArtifacts.extractStable(vm, contractName); + bytes memory committed = bytes(vm.readFile(LibCopyArtifacts.committedPath(contractName))); assertEq( - keccak256(bytes(live)), - keccak256(bytes(committed)), + keccak256(liveAbi), + keccak256(committed), string.concat( contractName, ": run `forge script script/CopyArtifacts.sol` to update the committed artifact" ) ); } - function testDecimalFloatArtifactCommitted() external view { - _assertCommittedMatches("DecimalFloat"); - } - - function testTestDecimalFloatArtifactCommitted() external view { - _assertCommittedMatches("TestDecimalFloat"); + function testArtifactsCommitted() external { + string[] memory names = LibCopyArtifacts.contracts(); + for (uint256 i = 0; i < names.length; i++) { + _assertCommittedMatches(names[i]); + } } } From 3dca49dec2a8f7360d047de427f8c6926aaaf3e5 Mon Sep 17 00:00:00 2001 From: thedavidmeister Date: Mon, 11 May 2026 00:17:52 +0400 Subject: [PATCH 7/9] ci: drop unused fetch-depth: 0 from copy-artifacts.yaml Mirrors the same change applied to rainix's reusable workflows in rainlanguage/rainix#148. Workflow does forge build + forge script + git diff --exit-code; default shallow clone covers HEAD which is all the diff check needs. Co-Authored-By: Claude Opus 4.7 (1M context) --- .github/workflows/copy-artifacts.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/copy-artifacts.yaml b/.github/workflows/copy-artifacts.yaml index 49f0bcd..027aebf 100644 --- a/.github/workflows/copy-artifacts.yaml +++ b/.github/workflows/copy-artifacts.yaml @@ -5,8 +5,6 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - with: - fetch-depth: 0 - uses: nixbuild/nix-quick-install-action@v30 with: nix_conf: | From 2983ae71c62de9365f1c8e36f061ae89b6cd7b24 Mon Sep 17 00:00:00 2001 From: thedavidmeister Date: Mon, 11 May 2026 00:19:59 +0400 Subject: [PATCH 8/9] ci: surface staleness fix instructions on copy-artifacts failure When the assertion fails, emit a GitHub Actions ::error:: annotation that names the directory and the regen command. The diff itself is already printed by `git diff --exit-code` immediately above; the annotation surfaces in the PR UI so contributors don't have to dig through the log. Co-Authored-By: Claude Opus 4.7 (1M context) --- .github/workflows/copy-artifacts.yaml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/copy-artifacts.yaml b/.github/workflows/copy-artifacts.yaml index 027aebf..2bf41e0 100644 --- a/.github/workflows/copy-artifacts.yaml +++ b/.github/workflows/copy-artifacts.yaml @@ -24,4 +24,8 @@ jobs: - name: Copy forge artifacts into committed location run: nix develop github:rainlanguage/rainix#sol-shell -c forge script ./script/CopyArtifacts.sol - name: Assert committed artifacts match freshly built - run: git diff --exit-code + run: | + if ! git diff --exit-code; then + echo "::error::Committed artifacts in crates/float/abi/ are stale. Run 'forge script script/CopyArtifacts.sol' and commit the updated files." + exit 1 + fi From 3cbb6756d5e52c2fafcedd67e585fcde2e20a805 Mon Sep 17 00:00:00 2001 From: thedavidmeister Date: Mon, 11 May 2026 00:21:33 +0400 Subject: [PATCH 9/9] chore: cover .prettierignore in REUSE.toml reuse lint flagged the new .prettierignore as missing copyright/license metadata. Add it to the existing umbrella annotation rather than inlining a comment header (matches how .gitignore, .envrc and the rest of the repo's metadata files are covered). Co-Authored-By: Claude Opus 4.7 (1M context) --- REUSE.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/REUSE.toml b/REUSE.toml index 30d6b7e..aaf481c 100644 --- a/REUSE.toml +++ b/REUSE.toml @@ -5,6 +5,7 @@ path = [ ".envrc", ".gas-snapshot", ".github/workflows/**/", + ".prettierignore", ".vscode/**/", ".soldeerignore", "audit/**/",