diff --git a/Developer/BACK_LOG.md b/Developer/BACK_LOG.md index 9579aae6..c1c14ced 100644 --- a/Developer/BACK_LOG.md +++ b/Developer/BACK_LOG.md @@ -31,9 +31,9 @@ | BL-22 | Daemon / SDK | `NonceManager._instances` never evicted | `NonceManager` (`dincli/sdk/tx.py` β€” lands with [PR #31](https://github.com/InfiniteZeroFoundation/DevNet/pull/31), not yet on `develop`) keys its per-`(chain_id, address)` cache in a class-level `_instances` dict with no eviction, so it grows for the process lifetime. Correct and irrelevant for the CLI (one invocation per process), but it's process-wide mutable state β€” worth a look once `dind` runs long-lived. Already caused real test pollution: reservations leaked between test classes until each cleared `NonceManager._instances` in `setup_method`. | P4-1.1 (before `dind` runs long-lived) | `task_300726_8` implementation note, Jul 31, 2026 | 🟒 Fixed on the PR branch, unmerged β€” [PR #31](https://github.com/InfiniteZeroFoundation/DevNet/pull/31)'s `dincli/sdk/tx.py` bounds `_instances` at `_MAX_INSTANCES` (strong cache, with live instances tracked separately so an in-flight reservation isn't dropped). Lands with PR #31. Checked 2026-09-30 | | BL-23 | DP / Privacy (cache_model_0) | `clip_scope: global` default paired with an unreviewed `clipping_norm: 1.0` may over-clip real weights | [PR #109](https://github.com/InfiniteZeroFoundation/DevNet/pull/109) (`fix/dp-sensitivity`) correctly ties noise to the clip (`noise_scale = noise_multiplier * clipping_norm`) and defaults `clip_scope` to `global` so the clip actually bounds the combined L2 norm the noise is calibrated against β€” the sensitivity-calibration fix itself is sound (`per_layer` only bounds the combined norm at `clipping_norm * sqrt(n)`, not `clipping_norm`, so pairing it with the new noise formula would under-noise as tensor count grows). But `cache_model_0/manifest.json`'s `clipping_norm: 1.0` was never revisited: under the old `per_layer` scope it bounded each tensor independently to norm 1.0; under `global` it bounds the *entire model's combined* L2 norm to 1.0, a much tighter constraint for any model with more than one floating tensor (`sqrt(Ξ£β€–tensor_iβ€–Β²)` grows with tensor count even if no individual tensor's norm changes). No test in PR #109 exercises this against `cache_model_0`'s real trained `state_dict` (the new tests use synthetic tensors), so it's unverified whether the new default clips β€” and thus degrades β€” the reference model's weights far more aggressively than before. Follow-up: run `apply_dp_mechanism`/`clip_state_dict` against `cache_model_0`'s actual trained weights under the new default and retune `clipping_norm` if the combined-norm bound turns out to be destructive. | P3 (verify before/at merge) | PR #109 review, Sep 8, 2026 | βœ… Fixed β€” PR No. 263 | | BL-24 | DP / Privacy (cache_model_0) | F4 β€” Laplace noise calibrated against an L2 clip, not the L1 sensitivity it's normally calibrated against | `post_training_laplace`'s `laplace_scale` is scaled by the same `clipping_norm` as the Gaussian mechanisms (`clip_state_dict`'s L2-norm clip), but the Laplace mechanism's textbook privacy guarantee is calibrated against L1 sensitivity, not L2. [PR #109](https://github.com/InfiniteZeroFoundation/DevNet/pull/109) flagged this explicitly rather than silently assuming it's fine (`Documentation/technical/services/clients.md:210-212`: "Laplace noise calibrated against an L2 clip is an open question tracked separately"), and [#99](https://github.com/InfiniteZeroFoundation/DevNet/issues/99)'s F4 (`Documentation/technical/audits/dp-mechanism-review.md` Β§F4) called the structural mismatch confirmed but left the exact magnitude/severity for a DP specialist's sign-off β€” explicitly excluded from #99's scope rather than fixed. [#119](https://github.com/InfiniteZeroFoundation/DevNet/pull/119) (which closed #99's remaining F8 items) left F4 untouched, so nothing currently tracks it now that #99 is closed. Needs either a DP specialist's opinion that L2-calibrated Laplace is acceptable as-is (and the open-question note downgraded to an explanation), or a fix (e.g. recalibrating against an actual L1 clip, or reclassifying `post_training_laplace` as experimental alongside F5's `per_layer` treatment) before any Ξ΅ is claimed for it. | P3/P4 (needs DP specialist input first) | [#99](https://github.com/InfiniteZeroFoundation/DevNet/issues/99) F4 (excluded from scope), `Documentation/technical/audits/dp-mechanism-review.md` Β§F4, Sep 10, 2026 | 🟑 Partially addressed β€” [issue #279](https://github.com/InfiniteZeroFoundation/DevNet/issues/279) Track A reclassified both `post_training_gaussian` and `post_training_laplace` as experimental (F5's recommended fix): `resolve_dp_config` now logs a warning on selection, and `Documentation/technical/services/clients.md` labels both accordingly. F4's actual L2-vs-L1 mismatch is still unfixed β€” needs a DP specialist's recommendation per issue #279 Track B before `post_training_laplace` can carry any Ξ΅ | -| BL-25 | Tooling / reference model (cache_model_0) | `cache_model_0/abis/` task-contract artifacts are stale vs. `foundry/src` | `cache_model_0/abis/DINTaskCoordinator.json` and `DINTaskAuditor.json` are full hardhat artifacts (abi + bytecode) last regenerated 2026-06-09, missing 67 ABI entries present in `foundry/src` for the coordinator (104 vs 170) and 96 for the auditor (68 vs 158), with pre-foundry constructors. [PR #171](https://github.com/InfiniteZeroFoundation/DevNet/pull/171) regenerated the six bundled `dincli/abis/` files from `foundry/out` but deliberately left these alone: [cache_model_0/manifest.json](../cache_model_0/manifest.json)'s `task_contracts` block pins each artifact to an IPFS CID, records `"type": "hardhat-artifact"` and a hardhat/cancun/optimizer-off `compilation` block, and carries deployed addresses, and dincli resolves task artifacts by CID. Regenerating the files locally would leave the manifest describing artifacts it no longer points to. Needs one pass: regenerate both from `foundry/out` (with bytecode, e.g. `dincli system dump-abi --bytecode --output cache_model_0/abis`), update the manifest's artifact type and compilation metadata to foundry, re-pin to IPFS and update the CIDs. Addresses only change on a redeploy. | P3/P4 | PR #171 merge (2026-09-26): out of scope for the PR's ABI refresh | 🟑 Fix in review β€” [PR #261](https://github.com/InfiniteZeroFoundation/DevNet/pull/261) regenerates both ABIs from `foundry/out` and updates `cache_model_0/manifest.json` (changes requested, Oct 22); tracked in [#246](https://github.com/InfiniteZeroFoundation/DevNet/issues/246) | +| BL-25 | Tooling / reference model (cache_model_0) | `cache_model_0/abis/` task-contract artifacts are stale vs. `foundry/src` | `cache_model_0/abis/DINTaskCoordinator.json` and `DINTaskAuditor.json` are full hardhat artifacts (abi + bytecode) last regenerated 2026-06-09, missing 67 ABI entries present in `foundry/src` for the coordinator (104 vs 170) and 96 for the auditor (68 vs 158), with pre-foundry constructors. [PR #171](https://github.com/InfiniteZeroFoundation/DevNet/pull/171) regenerated the six bundled `dincli/abis/` files from `foundry/out` but deliberately left these alone: [cache_model_0/manifest.json](../cache_model_0/manifest.json)'s `task_contracts` block pins each artifact to an IPFS CID, records `"type": "hardhat-artifact"` and a hardhat/cancun/optimizer-off `compilation` block, and carries deployed addresses, and dincli resolves task artifacts by CID. Regenerating the files locally would leave the manifest describing artifacts it no longer points to. Needs one pass: regenerate both from `foundry/out` (with bytecode, e.g. `dincli system dump-abi --bytecode --output cache_model_0/abis`), update the manifest's artifact type and compilation metadata to foundry, re-pin to IPFS and update the CIDs. Addresses only change on a redeploy. | P3/P4 | PR #171 merge (2026-09-26): out of scope for the PR's ABI refresh | βœ… Fixed β€” PR No. 261 | | BL-26 | Solidity/foundry (task contracts) | Batch-assignment seed lock (H-2) shares BL-11's re-roll residual, plus a new pool-reshaping gap | `DINTaskCoordinator.autoCreateTier1AndTier2`/`createAuditorsBatches` (task_240926_18 Part B, issue #156 H-2 aggregation side) reuse BL-11's future-block-seed + permissionless-lock pattern (`lockAggSeed`/`lockAuditSeed`), so they inherit its residual (2): the model owner can decline to lock a seed they dislike and wait out the ~256-block `blockhash` window for a fresh draw β€” repeatable, since nothing locks automatically today. A second, distinct gap not present in BL-11's `_assignFreshSubgroup` (which shuffles a fixed pool and only lets an exiting validator drop itself, not re-roll the rest): `_activeAggregatorPool`/`_activeAuditorPool` are evaluated at `autoCreateTier1AndTier2`/`createAuditorsBatches` call time, *after* the seed is already public, and Fisher-Yates re-rolls the whole assignment on any pool-size change β€” so a validator can unstake between lock and create to reshape everyone else's batch. Cost to the attacker is real but modest (their own Sybils sit out the GI and enter unbonding). Ready-made fix for the pool-reshaping gap: adopt `_assignFreshSubgroup`'s pattern β€” shuffle the fixed per-GI registration list (`dinAggregators[_GI]` / the auditor equivalent) with the locked seed, then skip inactive validators while filling seats, so an unstake only forfeits the leaver's own seat instead of re-rolling everyone else's. | P3/P4 | [PR #191](https://github.com/InfiniteZeroFoundation/DevNet/pull/191) review, Sep 29, 2026 | 🟑 Partially mitigated β€” the decline-to-lock re-roll is narrowed by a validator-side lock in dincli, added at the PR #191 merge (`dincli aggregator lock-seed` / `dincli auditor lock-seed`, and automatically in `show-t1-batches`/`show-t2-batches`/`lms-evaluation show-batch` before batches exist): any validator online after the seed block locks it, so the owner only gets a re-roll if nobody else is. A contract-side cap on re-anchors was considered and deferred: with no GI-abort path, a GI capped out would be stuck forever (`endGI` needs `AggregatorsSlashed`, `startGI` needs `GIended`), locking validators' registration slots and the reward pool β€” it needs a GI-abort design (who may abort, where the reward pool goes) first. Pool-reshaping gap unaddressed. Documented as residuals in the PR (`DINTaskCoordinator.md` Β§6.3). Sequencer-trust residual (shared with BL-11) tracked in [issue #178](https://github.com/InfiniteZeroFoundation/DevNet/issues/178); the pool-reshaping gap is now [#243](https://github.com/InfiniteZeroFoundation/DevNet/issues/243) (fix in review, [PR #253](https://github.com/InfiniteZeroFoundation/DevNet/pull/253)); the re-roll-by-declining-to-lock gap has no dedicated issue yet, same as BL-11's own un-issued residual (2) | -| BL-27 | dincli (model owner) | `dincli model-owner deploy` still uses the pre-foundry task-contract constructors | `dincli/cli/modelownerd/deploy.py` sends `DINTaskCoordinator.constructor(stake)` (`:35`) and `DINTaskAuditor.constructor(stake, coordinator)` (`:77`), but `foundry/src` takes `(stake, modelId)` and `(stake, coordinator, modelId)`. Against foundry artifacts, which are the bundled `dincli/abis/` since PR #171, the deploy fails at ABI encoding, so model owners can't deploy task contracts from dincli. The `tests/dincli/` harness hides this because it deploys task contracts from **hardhat** artifacts. The fix also has to settle where `modelId` comes from: the registry assigns it only at approval, after the contracts exist (`DINTaskCoordinator.md` Β§10 No. 4). | P3 (before any model-owner onboarding on DevNet 3.0) | PR No. 204 review, Sep 30, 2026 (caveats `DINTaskCoordinator.md` Β§10 No. 10, `DINTaskAuditor.md` Β§13 No. 8) | 🟑 Fix in review β€” [PR #261](https://github.com/InfiniteZeroFoundation/DevNet/pull/261) adds `--model-id` and passes it to both constructors (changes requested, Oct 22); tracked in [#223](https://github.com/InfiniteZeroFoundation/DevNet/issues/223) Part 1 | +| BL-27 | dincli (model owner) | `dincli model-owner deploy` still uses the pre-foundry task-contract constructors | `dincli/cli/modelownerd/deploy.py` sends `DINTaskCoordinator.constructor(stake)` (`:35`) and `DINTaskAuditor.constructor(stake, coordinator)` (`:77`), but `foundry/src` takes `(stake, modelId)` and `(stake, coordinator, modelId)`. Against foundry artifacts, which are the bundled `dincli/abis/` since PR #171, the deploy fails at ABI encoding, so model owners can't deploy task contracts from dincli. The `tests/dincli/` harness hides this because it deploys task contracts from **hardhat** artifacts. The fix also has to settle where `modelId` comes from: the registry assigns it only at approval, after the contracts exist (`DINTaskCoordinator.md` Β§10 No. 4). | P3 (before any model-owner onboarding on DevNet 3.0) | PR No. 204 review, Sep 30, 2026 (caveats `DINTaskCoordinator.md` Β§10 No. 10, `DINTaskAuditor.md` Β§13 No. 8) | βœ… Fixed β€” PR No. 261 | | BL-28 | dincli (model owner) | No dincli command for `releaseGIRegistrationSlots` | `DINTaskCoordinator.releaseGIRegistrationSlots(gi)` (owner-only, once per ended GI) is the only thing that decrements validators' `activeRegistrationCount`; `endGI` deliberately doesn't (BL-10). dincli ships the function in its ABI but has no command that calls it, so under a non-zero `maxConcurrentRegistrationsPerStakeUnit` every GI permanently consumes its validators' concurrent-registration slots until they hit `TC_/TA_ConcurrentRegistrationCapReached`. Harmless while the cap is 0 (the default). | P3 (before the cap is set on any network) | task_100926_12 / issue #37 fast-follow; PR No. 204 review | πŸ†• New β€” unaddressed; tracked in [#223](https://github.com/InfiniteZeroFoundation/DevNet/issues/223) Part 2. Planned as `dincli model-owner gi release-slots --gi N` in [task-plan-051026-2](tasks-plan/umermjd11/task-plan-051026-2.md) TP-3; not in [PR #261](https://github.com/InfiniteZeroFoundation/DevNet/pull/261) | | BL-29 | Solidity/foundry (fees) | `DinFeeRouter`'s non-treasury shares accrue with no way out | `routeFeeETH`/`routeFeeDIN` pay the treasury share out immediately but only *count* the `validatorPool`, `storage` and `publicGoods` shares in `accruedEth`/`accruedDin`. No function withdraws or distributes them, so with the default 95% validator-pool split, 95% of every swept faucet/registry fee stays in the router until an upgrade adds a path. Needs a decision on who can pull each bucket and where the validator-pool share goes (reward pools? `DinEmission`?). | P3/P4 | PR No. 204 review (`DinCoordinator.md` Β§14 No. 2), Sep 30, 2026; related to issue #43's open items | πŸ†• New β€” unaddressed; tracked in [#221](https://github.com/InfiniteZeroFoundation/DevNet/issues/221) | | BL-30 | Solidity/foundry (task contracts) | No recovery from a stalled GI | If a T1/T2 batch never reaches the reveal quorum, `finalizeT1Aggregation`/`finalizeT2Aggregation` revert forever (`TC_NoSubmissions`/`TC_InsufficientSubmissions`), and there is no owner path to skip the batch or abort the GI. `endGI` needs `AggregatorsSlashed` and `startGI` needs `GIended`, so the model is stuck: its reward pool and its validators' registration slots stay locked. This is also why BL-26's contract-side re-anchor cap was deferred. Needs a GI-abort design: who may abort, when, and where the reward pool goes. | P3/P4 | PR No. 191 review (BL-26); PR No. 204 review (`DINTaskCoordinator.md` Β§10 No. 6) | πŸ†• Decided, unimplemented β€” Abraham's GI-abort policy (Oct 26, [#222](https://github.com/InfiniteZeroFoundation/DevNet/issues/222)): anyone may abort after a stall timeout, locked rewards go back to their funders, slots are released, non-revealers are still penalised; the timeout value is set with the other testnet parameters in [#155](https://github.com/InfiniteZeroFoundation/DevNet/issues/155). Adds code to `DINTaskCoordinator`, which has 55 B above the size gate ([#201](https://github.com/InfiniteZeroFoundation/DevNet/issues/201)) | diff --git a/cache_model_0/abis/DINTaskAuditor.json b/cache_model_0/abis/DINTaskAuditor.json index fa5f1d37..26bcfa5c 100644 --- a/cache_model_0/abis/DINTaskAuditor.json +++ b/cache_model_0/abis/DINTaskAuditor.json @@ -1,1228 +1,2633 @@ { - "_format": "hh-sol-artifact-1", - "contractName": "DINTaskAuditor", - "sourceName": "contracts/DINTaskAuditor.sol", "abi": [ { + "type": "constructor", "inputs": [ { - "internalType": "address", "name": "_dinvalidatorStakeContract_address", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "_dintaskcoordinator_contract_address", - "type": "address" + "type": "address", + "internalType": "address" + }, + { + "name": "modelId_", + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "constructor" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "AuditorsBatchCount", "inputs": [ { - "internalType": "address", - "name": "owner", - "type": "address" + "name": "_GI", + "type": "uint256", + "internalType": "uint256" } ], - "name": "OwnableInvalidOwner", - "type": "error" - }, - { - "inputs": [ + "outputs": [ { - "internalType": "address", - "name": "account", - "type": "address" + "name": "", + "type": "uint256", + "internalType": "uint256" } ], - "name": "OwnableUnauthorizedAccount", - "type": "error" - }, - { - "inputs": [], - "name": "TA_AlreadySubmitted", - "type": "error" - }, - { - "inputs": [], - "name": "TA_AlreadyVoted", - "type": "error" - }, - { - "inputs": [], - "name": "TA_AuditorAlreadyRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "TA_AuditorNotActive", - "type": "error" - }, - { - "inputs": [], - "name": "TA_AuditorRegistrationNotOpen", - "type": "error" - }, - { - "inputs": [], - "name": "TA_BatchDoesNotExist", - "type": "error" - }, - { - "inputs": [], - "name": "TA_BatchIDMismatch", - "type": "error" - }, - { - "inputs": [], - "name": "TA_CannotCreateAuditorsBatches", - "type": "error" - }, - { - "inputs": [], - "name": "TA_CannotFinalizeEvaluation", - "type": "error" - }, - { - "inputs": [], - "name": "TA_CannotSetAuditScore", - "type": "error" - }, - { - "inputs": [], - "name": "TA_CannotSetTestDataAssignedFlag", - "type": "error" - }, - { - "inputs": [], - "name": "TA_FlagAlreadySet", - "type": "error" - }, - { - "inputs": [], - "name": "TA_FlagMustBeTrue", - "type": "error" + "stateMutability": "view" }, { - "inputs": [], - "name": "TA_InvalidModelIndex", - "type": "error" - }, - { - "inputs": [], - "name": "TA_InvalidPassScore", - "type": "error" - }, - { - "inputs": [], - "name": "TA_LMSubmissionsNotOpen", - "type": "error" - }, - { - "inputs": [], - "name": "TA_MaxLMSubmissionsReached", - "type": "error" - }, - { - "inputs": [], - "name": "TA_NotAssignedAuditor", - "type": "error" - }, - { - "inputs": [], - "name": "TA_NotEnoughAuditors", - "type": "error" - }, - { - "inputs": [], - "name": "TA_NotTaskCoordinator", - "type": "error" - }, - { - "inputs": [], - "name": "TA_ScoreOutOfRange", - "type": "error" - }, - { - "inputs": [], - "name": "TA_WrongGI", - "type": "error" - }, - { - "anonymous": false, + "type": "function", + "name": "LMeligibleVote", "inputs": [ { - "indexed": true, - "internalType": "uint256", - "name": "gi", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "batchId", - "type": "uint256" + "name": "", + "type": "uint256", + "internalType": "uint256" }, { - "indexed": true, - "internalType": "address", - "name": "auditor", - "type": "address" + "name": "", + "type": "uint256", + "internalType": "uint256" }, { - "indexed": false, - "internalType": "uint256", - "name": "modelIndex", - "type": "uint256" + "name": "", + "type": "address", + "internalType": "address" }, { - "indexed": false, - "internalType": "uint256", - "name": "score", - "type": "uint256" + "name": "", + "type": "uint256", + "internalType": "uint256" } ], - "name": "AuditScoreSubmitted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "gi", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "batchId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "auditor", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "reason", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "requested", - "type": "uint256" - }, + "outputs": [ { - "indexed": false, - "internalType": "uint256", - "name": "actual", - "type": "uint256" + "name": "", + "type": "bool", + "internalType": "bool" } ], - "name": "AuditorSlashed", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "GI", - "type": "uint256" - }, + "type": "function", + "name": "MAX_REGISTERED_AUDITORS", + "inputs": [], + "outputs": [ { - "indexed": true, - "internalType": "uint256", - "name": "batchId", - "type": "uint256" + "name": "", + "type": "uint256", + "internalType": "uint256" } ], - "name": "AuditorsBatchAuto", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, + "type": "function", + "name": "approvedModelIndexes", "inputs": [ { - "indexed": true, - "internalType": "uint256", - "name": "GI", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "batchCount", - "type": "uint256" + "name": "_GI", + "type": "uint256", + "internalType": "uint256" } ], - "name": "AuditorsBatchesCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "GI", - "type": "uint256" - }, + "outputs": [ { - "indexed": true, - "internalType": "address", - "name": "auditor", - "type": "address" + "name": "", + "type": "uint256[]", + "internalType": "uint256[]" } ], - "name": "DINAuditorRegistered", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, + "type": "function", + "name": "assignAuditTestDataset", "inputs": [ { - "indexed": true, - "internalType": "uint256", "name": "gi", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "indexed": true, - "internalType": "uint256", "name": "batchId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "indexed": true, - "internalType": "uint256", - "name": "modelIndex", - "type": "uint256" + "name": "testDataCID", + "type": "bytes", + "internalType": "bytes" }, { - "indexed": false, - "internalType": "bool", - "name": "eligible", - "type": "bool" + "name": "encryptedKeys", + "type": "bytes[]", + "internalType": "bytes[]" }, { - "indexed": false, - "internalType": "uint256", - "name": "totalVotes", - "type": "uint256" + "name": "commitment", + "type": "bytes32", + "internalType": "bytes32" } ], - "name": "EligibilityFinalized", - "type": "event" + "outputs": [], + "stateMutability": "nonpayable" }, { - "anonymous": false, + "type": "function", + "name": "auditScoreCommits", "inputs": [ { - "indexed": true, - "internalType": "uint256", - "name": "gi", - "type": "uint256" + "name": "", + "type": "uint256", + "internalType": "uint256" }, { - "indexed": true, - "internalType": "uint256", - "name": "batchId", - "type": "uint256" + "name": "", + "type": "uint256", + "internalType": "uint256" }, { - "indexed": true, - "internalType": "uint256", - "name": "modelIndex", - "type": "uint256" + "name": "", + "type": "address", + "internalType": "address" }, { - "indexed": false, - "internalType": "address", - "name": "auditor", - "type": "address" - }, + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ { - "indexed": false, - "internalType": "bool", - "name": "vote", - "type": "bool" + "name": "", + "type": "bytes32", + "internalType": "bytes32" } ], - "name": "EligibilityVoted", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, + "type": "function", + "name": "auditScores", "inputs": [ { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" + "name": "", + "type": "uint256", + "internalType": "uint256" }, { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ + "name": "", + "type": "uint256", + "internalType": "uint256" + }, { - "indexed": false, - "internalType": "uint256", - "name": "oldScore", - "type": "uint256" + "name": "", + "type": "address", + "internalType": "address" }, { - "indexed": false, - "internalType": "uint256", - "name": "newScore", - "type": "uint256" + "name": "", + "type": "uint256", + "internalType": "uint256" } ], - "name": "PassScoreUpdated", - "type": "event" + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" }, { - "anonymous": false, + "type": "function", + "name": "claimReward", "inputs": [ { - "indexed": true, - "internalType": "address", - "name": "modelOwner", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" + "name": "gi", + "type": "uint256", + "internalType": "uint256" } ], - "name": "RewardDeposited", - "type": "event" + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "claimRewards", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "claimable", "inputs": [ { - "internalType": "uint256", - "name": "_GI", - "type": "uint256" + "name": "", + "type": "address", + "internalType": "address" } ], - "name": "AuditorsBatchCount", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "clientHasSubmitted", "inputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "", + "type": "address", + "internalType": "address" } ], - "name": "Is_testdataCIDs_Assigned", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "clientSubmissionIndex", "inputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "", - "type": "uint256" - }, - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" + "type": "address", + "internalType": "address" } ], - "name": "LMeligibleVote", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "closeExpiredDispute", "inputs": [ { - "internalType": "uint256", - "name": "_GI", - "type": "uint256" - } - ], - "name": "approvedModelIndexes", - "outputs": [ + "name": "gi", + "type": "uint256", + "internalType": "uint256" + }, { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" + "name": "batchId", + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "outputs": [], + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "commitAuditScore", "inputs": [ { - "internalType": "uint256", "name": "gi", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "batchId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", - "name": "testDataCID", - "type": "bytes32" + "name": "modelIndex", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "commitHash", + "type": "bytes32", + "internalType": "bytes32" } ], - "name": "assignAuditTestDataset", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "createAuditorsBatches", "inputs": [ { - "internalType": "uint256", - "name": "", - "type": "uint256" + "name": "_GI", + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", - "name": "", - "type": "uint256" + "name": "seed", + "type": "bytes32", + "internalType": "bytes32" } ], - "name": "auditBatches", "outputs": [ { - "internalType": "uint256", - "name": "batchId", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "testDataCID", - "type": "bytes32" + "name": "", + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "decrementAuditorRegistrations", "inputs": [ { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, + "name": "_GI", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "depositRewards", + "inputs": [ { - "internalType": "address", - "name": "", - "type": "address" + "name": "gi", + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", - "name": "", - "type": "uint256" + "name": "amount", + "type": "uint256", + "internalType": "uint256" } ], - "name": "auditScores", + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "dinToken", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "address", + "internalType": "contract IERC20" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, + "type": "function", + "name": "dintaskcoordinatorContract", + "inputs": [], + "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "contract IDINTaskCoordinator" } ], - "name": "clientHasSubmitted", + "stateMutability": "view" + }, + { + "type": "function", + "name": "dinvalidatorStakeContract", + "inputs": [], "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "address", + "internalType": "contract IDinValidatorStake" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, + "type": "function", + "name": "disputeBondAmount", + "inputs": [], + "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "uint256", + "internalType": "uint256" } ], - "name": "clientSubmissionIndex", + "stateMutability": "view" + }, + { + "type": "function", + "name": "disputePenaltyBps", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [ - { - "internalType": "uint256", - "name": "_GI", - "type": "uint256" - } - ], - "name": "createAuditorsBatches", + "type": "function", + "name": "disputeWindowBlocks", + "inputs": [], "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "encryptedTestDataKey", "inputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "dinAuditors", - "outputs": [ - { - "internalType": "address", "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "dintaskcoordinatorContract", - "outputs": [ + "type": "uint256", + "internalType": "uint256" + }, { - "internalType": "contract IDINTaskCoordinator", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "dinvalidatorStakeContract", "outputs": [ { - "internalType": "contract IDinValidatorStake", "name": "", - "type": "address" + "type": "bytes", + "internalType": "bytes" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "finalizeEvaluation", "inputs": [ { - "internalType": "uint256", "name": "_GI", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "finalizeEvaluation", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "getAuditorsBatch", "inputs": [ { - "internalType": "uint256", "name": "_GI", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "_batchId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "getAuditorsBatch", "outputs": [ { - "internalType": "uint256", "name": "batchId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address[]", "name": "auditors", - "type": "address[]" + "type": "address[]", + "internalType": "address[]" }, { - "internalType": "uint256[]", "name": "modelIndexes", - "type": "uint256[]" + "type": "uint256[]", + "internalType": "uint256[]" }, { - "internalType": "bytes32", "name": "testDataCID", - "type": "bytes32" + "type": "bytes", + "internalType": "bytes" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getClientModels", "inputs": [ { - "internalType": "uint256", "name": "_GI", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "getClientModels", "outputs": [ { + "name": "", + "type": "tuple[]", + "internalType": "struct DINTaskAuditor.LMSubmission[]", "components": [ { - "internalType": "address", "name": "client", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes32", "name": "modelCID", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "uint40", "name": "submittedAt", - "type": "uint40" + "type": "uint40", + "internalType": "uint40" }, { - "internalType": "bool", "name": "eligible", - "type": "bool" + "type": "bool", + "internalType": "bool" }, { - "internalType": "bool", "name": "evaluated", - "type": "bool" + "type": "bool", + "internalType": "bool" }, { - "internalType": "bool", "name": "approved", - "type": "bool" + "type": "bool", + "internalType": "bool" }, { - "internalType": "uint256", "name": "finalMedianScore", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct DINTaskAuditor.LMSubmission[]", - "name": "", - "type": "tuple[]" + ] } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getDINtaskAuditors", "inputs": [ { - "internalType": "uint256", "name": "_GI", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address[]", + "internalType": "address[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "giRewardPool", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "giRewardSnapshot", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "clientPool", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "auditorPool", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "aggregatorPool", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "aggregatorTotalWeight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "settled", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "giTotalApprovedScore", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "giTotalAuditWeight", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" } ], - "name": "getDINtaskAuditors", "outputs": [ { - "internalType": "address[]", "name": "", - "type": "address[]" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "hasAuditedLM", "inputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "hasAuditedLM", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "hasCommittedLM", "inputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "", - "type": "address" + "type": "uint256", + "internalType": "uint256" } ], - "name": "isBatchAuditor", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "isBatchAuditor", "inputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "address", + "internalType": "address" } ], - "name": "isBatchModelIndex", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "isBatchModelIndex", "inputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "", - "type": "address" + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isEncryptionKeyEmpty", + "inputs": [ + { + "name": "gi", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "batchId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "auditor", + "type": "address", + "internalType": "address" } ], - "name": "isRegisteredAuditor", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "isRegisteredAuditor", "inputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" } ], + "stateMutability": "view" + }, + { + "type": "function", "name": "lmSubmissions", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], "outputs": [ { - "internalType": "address", "name": "client", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes32", "name": "modelCID", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "uint40", "name": "submittedAt", - "type": "uint40" + "type": "uint40", + "internalType": "uint40" }, { - "internalType": "bool", "name": "eligible", - "type": "bool" + "type": "bool", + "internalType": "bool" }, { - "internalType": "bool", "name": "evaluated", - "type": "bool" + "type": "bool", + "internalType": "bool" }, { - "internalType": "bool", "name": "approved", - "type": "bool" + "type": "bool", + "internalType": "bool" }, { - "internalType": "uint256", "name": "finalMedianScore", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "modelId", "inputs": [], - "name": "owner", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "openTestDataDispute", + "inputs": [ + { + "name": "gi", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "batchId", + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "outputs": [], + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "owner", "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", "name": "params", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "auditorsPerBatch", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "modelsPerBatch", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "minEligibilityQuorum", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "minScoreQuorum", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "passScore", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "MIN_MODELS_PER_BATCH", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_GI", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "registerDINAuditor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "reassignAuditTestDataset", "inputs": [ { - "internalType": "uint256", "name": "gi", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "batchId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", - "name": "modelIndex", - "type": "uint256" + "name": "newTestDataCID", + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "uint256", - "name": "score", - "type": "uint256" + "name": "newEncryptedKeys", + "type": "bytes[]", + "internalType": "bytes[]" }, { - "internalType": "bool", - "name": "vote", - "type": "bool" + "name": "newCommitment", + "type": "bytes32", + "internalType": "bytes32" } ], - "name": "setAuditScorenEligibility", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "registerDINAuditor", "inputs": [ { - "internalType": "uint256", "name": "_GI", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "flag", - "type": "bool" + "type": "uint256", + "internalType": "uint256" } ], - "name": "setTestDataAssignedFlag", - "outputs": [ + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "resolveTestDataDispute", + "inputs": [ + { + "name": "gi", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "batchId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "K", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "plaintextHash", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "revealAuditScore", + "inputs": [ + { + "name": "gi", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "batchId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "modelIndex", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "score", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "vote", + "type": "bool", + "internalType": "bool" + }, + { + "name": "salt", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "rewardClaimed", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "rewardSplit", + "inputs": [], + "outputs": [ + { + "name": "clientBps", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "auditorBps", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "aggregatorBps", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "treasuryBps", + "type": "uint16", + "internalType": "uint16" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "s1SlashFractionBps", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "s3DeviationThreshold", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "s3SlashingEnabled", + "inputs": [], + "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "setDinToken", + "inputs": [ + { + "name": "dinToken_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setDisputeBondAmount", + "inputs": [ + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setDisputePenaltyBps", + "inputs": [ + { + "name": "bps", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setDisputeWindowBlocks", + "inputs": [ + { + "name": "blocks", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setRewardSplit", + "inputs": [ + { + "name": "newSplit", + "type": "tuple", + "internalType": "struct DINTaskAuditor.RewardSplit", + "components": [ + { + "name": "clientBps", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "auditorBps", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "aggregatorBps", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "treasuryBps", + "type": "uint16", + "internalType": "uint16" + } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setS1SlashFractionBps", + "inputs": [ + { + "name": "bps", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setS3DeviationThreshold", + "inputs": [ + { + "name": "newThreshold", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setS3SlashingEnabled", + "inputs": [ + { + "name": "enabled", + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "nonpayable", - "type": "function" + "outputs": [], + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "setTestDataAssignedFlag", "inputs": [ { - "internalType": "uint256", "name": "_GI", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "flag", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "settleRewards", + "inputs": [ + { + "name": "gi", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "aggregatorTotalWeight", + "type": "uint256", + "internalType": "uint256" } ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", "name": "slashAuditors", + "inputs": [ + { + "name": "_GI", + "type": "uint256", + "internalType": "uint256" + } + ], "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "submitLocalModel", "inputs": [ { - "internalType": "bytes32", "name": "_clientModel", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "uint256", "name": "_GI", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "submitLocalModel", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { - "inputs": [], - "name": "totalDepositedRewards", + "type": "function", + "name": "testDataCommitments", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "bytes32", + "internalType": "bytes32" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "testDataDisputes", "inputs": [ { - "internalType": "address", - "name": "newOwner", - "type": "address" + "name": "", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "disputer", + "type": "address", + "internalType": "address" + }, + { + "name": "bond", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "expiresAtBlock", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "active", + "type": "bool", + "internalType": "bool" + }, + { + "name": "pendingReassignment", + "type": "bool", + "internalType": "bool" } ], + "stateMutability": "view" + }, + { + "type": "function", "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "treasuryAccrued", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" }, { + "type": "function", + "name": "updatePassScore", "inputs": [ { - "internalType": "uint256", "name": "newPassScore", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "updatePassScore", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "AuditScoreCommitted", + "inputs": [ + { + "name": "gi", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "batchId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "auditor", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "modelIndex", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "commitHash", + "type": "bytes32", + "indexed": false, + "internalType": "bytes32" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "AuditScoreSubmitted", + "inputs": [ + { + "name": "gi", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "batchId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "auditor", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "modelIndex", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "score", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "AuditorScoreDeviation", + "inputs": [ + { + "name": "gi", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "batchId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "modelIndex", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "auditor", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "auditorScore", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "medianScore", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "deviation", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "exceedsThreshold", + "type": "bool", + "indexed": false, + "internalType": "bool" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "AuditorSlashed", + "inputs": [ + { + "name": "gi", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "batchId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "auditor", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "reason", + "type": "bytes32", + "indexed": false, + "internalType": "bytes32" + }, + { + "name": "requested", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "actual", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "AuditorsBatchAuto", + "inputs": [ + { + "name": "GI", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "batchId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "AuditorsBatchesCreated", + "inputs": [ + { + "name": "GI", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "batchCount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "BatchPendingReassignment", + "inputs": [ + { + "name": "gi", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "batchId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "DINAuditorRegistered", + "inputs": [ + { + "name": "GI", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "auditor", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "DinTokenSet", + "inputs": [ + { + "name": "dinToken", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "DisputeExpired", + "inputs": [ + { + "name": "gi", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "batchId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "EligibilityFinalized", + "inputs": [ + { + "name": "gi", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "batchId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "modelIndex", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "eligible", + "type": "bool", + "indexed": false, + "internalType": "bool" + }, + { + "name": "totalVotes", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "EligibilityVoted", + "inputs": [ + { + "name": "gi", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "batchId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "modelIndex", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "auditor", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "vote", + "type": "bool", + "indexed": false, + "internalType": "bool" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "EncryptedTestDataKeysAssigned", + "inputs": [ + { + "name": "gi", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "batchId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "testDataCID", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + }, + { + "name": "auditorCount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "LocalModelSubmitted", + "inputs": [ + { + "name": "GI", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "modelIndex", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "client", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "modelCID", + "type": "bytes32", + "indexed": false, + "internalType": "bytes32" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "PassScoreUpdated", + "inputs": [ + { + "name": "oldScore", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "newScore", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RewardDeposited", + "inputs": [ + { + "name": "gi", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "depositor", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RewardSplitUpdated", + "inputs": [ + { + "name": "split", + "type": "tuple", + "indexed": false, + "internalType": "struct DINTaskAuditor.RewardSplit", + "components": [ + { + "name": "clientBps", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "auditorBps", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "aggregatorBps", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "treasuryBps", + "type": "uint16", + "internalType": "uint16" + } + ] + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RewardsClaimed", + "inputs": [ + { + "name": "claimant", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RewardsSettled", + "inputs": [ + { + "name": "gi", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "clientPool", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "auditorPool", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "aggregatorPool", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "treasuryShare", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "S1SlashFractionBpsUpdated", + "inputs": [ + { + "name": "oldBps", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "newBps", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "S3DeviationThresholdUpdated", + "inputs": [ + { + "name": "oldThreshold", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "newThreshold", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "S3SlashingEnabledUpdated", + "inputs": [ + { + "name": "oldValue", + "type": "bool", + "indexed": false, + "internalType": "bool" + }, + { + "name": "newValue", + "type": "bool", + "indexed": false, + "internalType": "bool" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "TestDataCommitmentStored", + "inputs": [ + { + "name": "gi", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "batchId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "commitment", + "type": "bytes32", + "indexed": false, + "internalType": "bytes32" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "TestDataDisputeOpened", + "inputs": [ + { + "name": "gi", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "batchId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "disputer", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "bond", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "expiresAtBlock", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "TestDataDisputeResolvedFalse", + "inputs": [ + { + "name": "gi", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "batchId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "disputer", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "bondForfeited", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "TestDataDisputeUpheld", + "inputs": [ + { + "name": "gi", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "batchId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "disputer", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "bondReturned", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "ownerPenalty", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "OwnableInvalidOwner", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "OwnableUnauthorizedAccount", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ReentrancyGuardReentrantCall", + "inputs": [] + }, + { + "type": "error", + "name": "SafeERC20FailedOperation", + "inputs": [ + { + "name": "token", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "TA_AlreadyCommitted", + "inputs": [] + }, + { + "type": "error", + "name": "TA_AlreadySubmitted", + "inputs": [] + }, + { + "type": "error", + "name": "TA_AlreadyVoted", + "inputs": [] + }, + { + "type": "error", + "name": "TA_AmountMustBePositive", + "inputs": [] + }, + { + "type": "error", + "name": "TA_AuditSeedNotLocked", + "inputs": [] + }, + { + "type": "error", + "name": "TA_AuditorAlreadyRegistered", + "inputs": [] + }, + { + "type": "error", + "name": "TA_AuditorEncryptionKeyNotRegistered", + "inputs": [] + }, + { + "type": "error", + "name": "TA_AuditorNotActive", + "inputs": [] + }, + { + "type": "error", + "name": "TA_AuditorRegistrationNotOpen", + "inputs": [] + }, + { + "type": "error", + "name": "TA_BatchDoesNotExist", + "inputs": [] + }, + { + "type": "error", + "name": "TA_BatchIDMismatch", + "inputs": [] + }, + { + "type": "error", + "name": "TA_BatchPendingReassignment", + "inputs": [] + }, + { + "type": "error", + "name": "TA_CannotCreateAuditorsBatches", + "inputs": [] + }, + { + "type": "error", + "name": "TA_CannotFinalizeEvaluation", + "inputs": [] + }, + { + "type": "error", + "name": "TA_CannotSetTestDataAssignedFlag", + "inputs": [] + }, + { + "type": "error", + "name": "TA_CannotSlashAuditors", + "inputs": [] + }, + { + "type": "error", + "name": "TA_CommitPhaseNotOpen", + "inputs": [] + }, + { + "type": "error", + "name": "TA_ConcurrentRegistrationCapReached", + "inputs": [] + }, + { + "type": "error", + "name": "TA_DisputeAlreadyActive", + "inputs": [] + }, + { + "type": "error", + "name": "TA_DisputeWindowClosed", + "inputs": [] + }, + { + "type": "error", + "name": "TA_DualRoleNotAllowed", + "inputs": [] + }, + { + "type": "error", + "name": "TA_EmptyCommitHash", + "inputs": [] + }, + { + "type": "error", + "name": "TA_EmptyScoreSet", + "inputs": [] + }, + { + "type": "error", + "name": "TA_EncryptedKeyCountMismatch", + "inputs": [] + }, + { + "type": "error", + "name": "TA_FlagAlreadySet", + "inputs": [] + }, + { + "type": "error", + "name": "TA_FlagMustBeTrue", + "inputs": [] + }, + { + "type": "error", + "name": "TA_InvalidAddress", + "inputs": [] + }, + { + "type": "error", + "name": "TA_InvalidDeviationThreshold", + "inputs": [] + }, + { + "type": "error", + "name": "TA_InvalidDisputeBond", + "inputs": [] + }, + { + "type": "error", + "name": "TA_InvalidModelIndex", + "inputs": [] + }, + { + "type": "error", + "name": "TA_InvalidPassScore", + "inputs": [] + }, + { + "type": "error", + "name": "TA_InvalidRewardGI", + "inputs": [] + }, + { + "type": "error", + "name": "TA_InvalidRewardSplit", + "inputs": [] + }, + { + "type": "error", + "name": "TA_InvalidSlashFraction", + "inputs": [] + }, + { + "type": "error", + "name": "TA_LMSubmissionsNotOpen", + "inputs": [] + }, + { + "type": "error", + "name": "TA_MaxLMSubmissionsReached", + "inputs": [] + }, + { + "type": "error", + "name": "TA_NoActiveDispute", + "inputs": [] + }, + { + "type": "error", + "name": "TA_NoCommitFound", + "inputs": [] + }, + { + "type": "error", + "name": "TA_NoCommitmentStored", + "inputs": [] + }, + { + "type": "error", + "name": "TA_NoRewardEarned", + "inputs": [] + }, + { + "type": "error", + "name": "TA_NoRewardsToClaim", + "inputs": [] + }, + { + "type": "error", + "name": "TA_NotAssignedAuditor", + "inputs": [] + }, + { + "type": "error", + "name": "TA_NotEnoughAuditors", + "inputs": [] + }, + { + "type": "error", + "name": "TA_NotTaskCoordinator", + "inputs": [] + }, + { + "type": "error", + "name": "TA_RegistrationCapReached", + "inputs": [] + }, + { + "type": "error", + "name": "TA_RevealHashMismatch", + "inputs": [] + }, + { + "type": "error", + "name": "TA_RevealPhaseNotOpen", + "inputs": [] + }, + { + "type": "error", + "name": "TA_RewardAlreadyClaimed", + "inputs": [] + }, + { + "type": "error", + "name": "TA_RewardsAlreadySettled", + "inputs": [] + }, + { + "type": "error", + "name": "TA_RewardsNotSettled", + "inputs": [] + }, + { + "type": "error", + "name": "TA_ScoreOutOfRange", + "inputs": [] + }, + { + "type": "error", + "name": "TA_StakeBelowModelFloor", + "inputs": [] + }, + { + "type": "error", + "name": "TA_WrongGI", + "inputs": [] } ], - "bytecode": "0x60806040523461017257604051601f61292f38819003918201601f19168301916001600160401b0383118484101761014b57808492604094855283398101031261017257610058602061005183610176565b9201610176565b90331561015f575f8054336001600160a01b0319821681178355916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a35f600355612710600455600180546001600160a01b039283166001600160a01b0319918216179091556002805493909216921691909117905560405160c081018181106001600160401b0382111761014b5760029160a09160405260038152600360208201528260408201528260608201526032608082015201526003600755600360085560026009556002600a556032600b556002600c556040516127a4908161018b8239f35b634e487b7160e01b5f52604160045260245ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b51906001600160a01b03821682036101725756fe60806040526004361015610011575f80fd5b5f3560e01c80630f68a9ea146122075780631a54d32b146121b9578063246116e61461206157806327f741c3146120195780632d8d2d6314611a2f57806332fd936714611a0057806333fb6a4b146119ad5780633ae117b1146117d95780635cbc26a0146117905780636d27f31714611773578063715018a61461171c5780638747214f146115a85780638da5cb5b146115815780639724e138146114ec578063982231b01461148c5780639d05ab34146113c05780639ea8414014611398578063a2e26ef2146110e9578063abe32a3a146110a5578063ad5ea7b714610fb8578063ad5ee39214610c99578063b323e22f14610c57578063bc7a7d56146108b1578063c13fb4081461086e578063cb404a7514610588578063cff0ab9614610541578063d3588413146104f8578063d5eb897c14610398578063d6f353a114610370578063e7e948f214610329578063f2fde38b146102a0578063fabf7aa51461020e5763fc8e9edc14610184575f80fd5b3461020a57602036600319011261020a57600254600435906001600160a01b031633036101fb57606481116101ec5760407fc15f800daae9273e961b7ab52ded9fbe213e65775b7e3ebe617f30f0c22f589d91600b549080600b5582519182526020820152a1005b63645bfacf60e11b5f5260045ffd5b63b701ef7360e01b5f5260045ffd5b5f80fd5b3461020a5761021c3661229e565b905f52600d60205260405f20805482101561020a5760e09161023d9161234c565b5060018060a01b038154169060ff6001820154916003600282015491015492604051948552602085015264ffffffffff81166040850152818160281c1615156060850152818160301c161515608085015260381c16151560a083015260c0820152f35b3461020a57602036600319011261020a576004356001600160a01b0381169081900361020a576102ce6125b5565b8015610316575f80546001600160a01b03198116831782556001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3005b631e4fbdf760e01b5f525f60045260245ffd5b3461020a57606036600319011261020a576004355f52601260205260405f206024355f5260205260405f206044355f52602052602060ff60405f2054166040519015158152f35b3461020a575f36600319011261020a576001546040516001600160a01b039091168152602090f35b3461020a57602036600319011261020a576004355f52600d60205260405f208054906103c3826123bb565b916103d16040519384612381565b8083526020830180925f5260205f205f915b838310610481578486604051918291602083019060208452518091526040830191905f5b818110610415575050500390f35b91935091602060e060019260c08751858060a01b038151168352848101518584015264ffffffffff604082015116604084015260608101511515606084015260808101511515608084015260a0810151151560a0840152015160c0820152019401910191849392610407565b6004602060019260405161049481612365565b848060a01b038654168152848601548382015260ff600287015464ffffffffff81166040840152818160281c1615156060840152818160301c161515608084015260381c16151560a0820152600386015460c08201528152019201920191906103e3565b3461020a57604036600319011261020a5761051161225a565b6004355f52600e60205260405f209060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b3461020a575f36600319011261020a5760c0600754600854600954600a54600b5491600c5493604051958652602086015260408501526060840152608083015260a0820152f35b3461020a57602036600319011261020a57600254600435906001600160a01b0316338190036101fb57602060049160405192838092633b0ff6bb60e01b82525afa908115610787575f9161083c575b50810361082d57600154604051631bad9e0560e11b81529190602090839060049082906001600160a01b03165afa918215610787575f926107f9575b50805f52601060205260405f20545f5b81811061063557602060405160018152f35b825f52601060205261064a8160405f2061234c565b50925f926002600186019501935b85548110156107ec5761066b81876122b4565b9054865460039290921b1c6001600160a01b031691905f9083825b828110610792575b5050506106a0575b6001915001610658565b600154604051637dd1602d60e11b815260048101849052602481018a90526a4155445f4e4f5f564f544560a81b60448201529290602090849060649082905f906001600160a01b03165af18015610787578587918b955f9161074a575b5060606001967f3a922abd76b9b7c1ea4bce9b738c36db4a39b390754c59a980916ffb688792c792604051916a4155445f4e4f5f564f544560a81b835260208301526040820152a4610696565b95505050506020833d821161077f575b8161076760209383612381565b8101031261020a5791518892908690869060606106fd565b3d915061075a565b6040513d5f823e3d90fd5b61079c818b6122b4565b90549060031b1c885f52601560205260405f208a5f5260205260405f20835f5260205260405f20905f5260205260ff60405f205416156107de57600101610686565b50505050600189808061068e565b5092509250600101610623565b9091506020813d602011610825575b8161081560209383612381565b8101031261020a57519082610613565b3d9150610808565b63c8c8f12360e01b5f5260045ffd5b90506020813d602011610866575b8161085760209383612381565b8101031261020a5751826105d7565b3d915061084a565b3461020a5761087c3661229e565b905f52601060205260405f20805482101561020a5760409161089d9161234c565b506003815491015482519182526020820152f35b3461020a5760a036600319011261020a576004356024356044359060643592608435938415159485810361020a57825f52601060205260405f2054841015610c48575f838152601160209081526040808320878452825280832033845290915290205460ff1615610c3957825f52601260205260405f20845f5260205260405f20855f5260205260ff60405f20541615610c2a57600254604051633b0ff6bb60e01b81526001600160a01b0390911690602081600481855afa908115610787575f91610bf8575b50840361082d576020600491604051928380926374e45da960e11b82525afa908115610787575f91610bc9575b506017811015610bb557600d03610ba6576001546040516310ab556b60e21b815233600482015290602090829060249082906001600160a01b03165afa908115610787575f91610b77575b5015610b685760648211610b59575f8381526015602090815260408083208784528252808320338452825280832088845290915290205460ff16610b4a57827fceb4d4eba5a8d7a52a7de69669091f419fd48ad8b6aedfe9f65f4c0593074bf26040610b48988895610acc8996865f526013602052845f20885f52602052845f2060018060a01b0333165f52602052845f20895f5260205282855f2055865f526014602052845f20885f52602052845f2060018060a01b0333165f52602052845f20895f52602052845f209060ff801983541691151516179055565b845f526015602052825f20865f52602052825f2060018060a01b0333165f52602052825f20875f52602052825f20600160ff19825416179055825190878252602082015285857fd419687a143d402bddbccfea67ace3394b824dc870e853cc3fc76849da2427ef853394a48151903382526020820152a46125db565b005b6304aba2b560e21b5f5260045ffd5b6357d5d01760e11b5f5260045ffd5b6335d7e52560e01b5f5260045ffd5b610b99915060203d602011610b9f575b610b918183612381565b810190612482565b876109f0565b503d610b87565b6376041b1d60e01b5f5260045ffd5b634e487b7160e01b5f52602160045260245ffd5b610beb915060203d602011610bf1575b610be38183612381565b8101906123a3565b876109a5565b503d610bd9565b90506020813d602011610c22575b81610c1360209383612381565b8101031261020a575188610978565b3d9150610c06565b6301695e1960e11b5f5260045ffd5b6350f67e6b60e01b5f5260045ffd5b635de291e760e11b5f5260045ffd5b3461020a57602036600319011261020a576004355f526005602052610c95610c8160405f2061249a565b6040519182916020835260208301906122dd565b0390f35b3461020a57602036600319011261020a57600254600435906001600160a01b0316338190036101fb57604051633b0ff6bb60e01b8152602081600481855afa908115610787575f91610f86575b50820361082d576020600491604051928380926374e45da960e11b82525afa908115610787575f91610f67575b506017811015610bb557600d03610f5857805f52600d60205260405f2090805f52601060205260405f2054905f915f935b818510610d58576020846040519015158152f35b825f94929394526010602052610d718560405f2061234c565b50935f936001600287019601945b8654811015610f4757610d9281886122b4565b90549060031b1c8454811015610f3e57610dac818661234c565b50600281019160ff835460281c1615610f2e575b5f5f915f908d8c54925b8d848210610e81575050505050600a54821015610df0575b505050506001905b01610d7f565b81989293949815610e6d57600194610e5694610e519360039304928391015560ff660100000000000066ff000000000000198354161780835560281c169182610e60575b509060ff60381b825491151560381b169060ff60381b1916179055565b612426565b9490898080610de2565b600b54111591508d610e34565b634e487b7160e01b5f52601260045260245ffd5b81610e8b916122b4565b90545f8d8152601560209081526040808320878452825280832060039590951b9390931c6001600160a01b0316808352938152828220878352905220548c9060ff16610edc575b5050600101610dca565b6001929796610f2692610f20925f52601360205260405f20865f5260205260405f2090858060a01b03165f5260205260405f20865f5260205260405f205490612419565b95612426565b95908b610ed2565b610f39818c886125db565b610dc0565b50600190610dea565b506001909601959294509250610d44565b63c85f922b60e01b5f5260045ffd5b610f80915060203d602011610bf157610be38183612381565b82610d13565b90506020813d602011610fb0575b81610fa160209383612381565b8101031261020a575183610ce6565b3d9150610f94565b3461020a57606036600319011261020a57600435602435610fd76125b5565b600254604051633b0ff6bb60e01b815290602090829060049082906001600160a01b03165afa908115610787575f91611073575b50820361082d57815f52601060205260405f2054811015610c4857815f5260106020528061103c8160405f2061234c565b50540361106457611057915f52601060205260405f2061234c565b5060036044359101555f80f35b637d7d0e5f60e01b5f5260045ffd5b90506020813d60201161109d575b8161108e60209383612381565b8101031261020a57518361100b565b3d9150611081565b3461020a57604036600319011261020a576110be61225a565b6004355f52600f60205260405f209060018060a01b03165f52602052602060405f2054604051908152f35b3461020a57604036600319011261020a57600254604051633b0ff6bb60e01b8152602435916001600160a01b031690602081600481855afa908115610787575f91611366575b50820361082d576020600491604051928380926374e45da960e11b82525afa908115610787575f91611347575b506017811015610bb557600a03611338575f818152600e6020908152604080832033845290915290205460ff1661132957805f52600d60205260405f2054600454111561131a575f818152600d602081815260408084208054600f84528286203387528452828620559385905291905251906111d782612365565b33825260208201906004358252604083019164ffffffffff4216835260608401925f8452608085015f815260a08601905f825260c08701945f86528054600160401b8110156113065761122f9160018201815561234c565b9790976112f3575187546001600160a01b039091166001600160a01b0319909116178755925160018701559051600286018054955165ff000000000090151560281b1664ffffffffff90921665ffffffffffff19909616959095171784556003936112ca92909190518254915167ffff0000000000001990921690151560301b66ff000000000000161790151560381b60ff60381b16179055565b519101555f908152600e602090815260408083203384529091529020805460ff19166001179055005b634e487b7160e01b5f525f60045260245ffd5b634e487b7160e01b5f52604160045260245ffd5b636cf178c360e11b5f5260045ffd5b63169ae8e160e11b5f5260045ffd5b6353d9694b60e01b5f5260045ffd5b611360915060203d602011610bf157610be38183612381565b8261115c565b90506020813d602011611390575b8161138160209383612381565b8101031261020a57518361112f565b3d9150611374565b3461020a575f36600319011261020a576002546040516001600160a01b039091168152602090f35b3461020a57602036600319011261020a576004355f52600d60205260405f205f5f908254915b82811061145657506113f7906123d3565b915f905f5b8381106114195760405160208082528190610c9590820188612319565b8060ff600261142a6001948661234c565b50015460381c1661143c575b016113fc565b8061145061144986612426565b9588612405565b52611436565b60ff6002611464838761234c565b50015460381c16611478575b6001016113e6565b90611484600191612426565b919050611470565b3461020a57606036600319011261020a576044356001600160a01b038116810361020a576004355f52601160205260405f206024355f5260205260405f209060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b3461020a57602036600319011261020a57600254604051633b0ff6bb60e01b81526004803592602091839182906001600160a01b03165afa908115610787575f9161154f575b50811161082d575f526010602052602060405f2054604051908152f35b90506020813d602011611579575b8161156a60209383612381565b8101031261020a575182611532565b3d915061155d565b3461020a575f36600319011261020a575f546040516001600160a01b039091168152602090f35b3461020a576115b63661229e565b600254604051633b0ff6bb60e01b815290602090829060049082906001600160a01b03165afa908115610787575f916116ea575b50821161082d57815f52601060205260405f2054811015610c4857611619915f52601060205260405f2061234c565b506040516080810181811067ffffffffffffffff82111761130657604052815481526116476001830161249a565b9060208101918252600283019260405180948591602082549182815201915f5260205f20905f5b8181106116d1575050509161168a6003926116c7940387612381565b856040850152015491826060820152519251936116b960405195869586526080602087015260808601906122dd565b908482036040860152612319565b9060608301520390f35b825484528894506020909301926001928301920161166e565b90506020813d602011611714575b8161170560209383612381565b8101031261020a5751836115ea565b3d91506116f8565b3461020a575f36600319011261020a576117346125b5565b5f80546001600160a01b0319811682556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461020a575f36600319011261020a576020600354604051908152f35b3461020a57604036600319011261020a576117a961225a565b6004355f52600660205260405f209060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b3461020a57602036600319011261020a57600254604051633b0ff6bb60e01b815260048035926001600160a01b03169190602090829081855afa908115610787575f9161197b575b50820361082d576020600491604051928380926374e45da960e11b82525afa908115610787575f9161195c575b506017811015610bb55760080361194d575f81815260066020908152604080832033845290915290205460ff1661193e576001546040516310ab556b60e21b815233600482015290602090829060249082906001600160a01b03165afa908115610787575f9161191f575b5015610b6857805f5260056020526118d43360405f20612434565b5f8181526006602090815260408083203380855292528220805460ff1916600117905591907f059cacf06f742fac570d6cd3760c2ffe4aebcdecd73804a6a9a4beb0eae079c89080a3005b611938915060203d602011610b9f57610b918183612381565b826118b9565b6335ced03760e11b5f5260045ffd5b634ff4ea3360e11b5f5260045ffd5b611975915060203d602011610bf157610be38183612381565b8261184e565b90506020813d6020116119a5575b8161199660209383612381565b8101031261020a575183611821565b3d9150611989565b3461020a576119bb36612270565b925f92919252601460205260405f20905f5260205260405f209060018060a01b03165f5260205260405f20905f52602052602060ff60405f2054166040519015158152f35b3461020a57602036600319011261020a576004355f526016602052602060ff60405f2054166040519015158152f35b3461020a57602036600319011261020a57600254600435906001600160a01b0316338190036101fb57604051633b0ff6bb60e01b8152602081600481855afa908115610787575f91611fe7575b50820361082d576020600491604051928380926374e45da960e11b82525afa908115610787575f91611fc8575b506017811015610bb557600b03611fb9575f818152600560205260408120805460015490916001600160a01b0390911690835b838110611f345750611aed846123bb565b93611afb6040519586612381565b808552611b0a601f19916123bb565b013660208601375f905f5b848110611ea3578686805160075411611e9457611b3181612503565b815f52600d60205260405f205490611b48826123d3565b915f5b818110611e7f57505081515f198101908111611e6b57803360601b915b611de95750505f5f925f945b611b8060075484612419565b8451101580611d95575b15611d5f57805f52601060205260405f208054600160401b81101561130657611bb89160018201815561234c565b5091611bc387612426565b96835560018301965f5b600754811015611c4c57600190611c006001600160a01b03611bf8611bf2848b612419565b8b612405565b51168b612434565b845f52601160205260405f2086545f5260205260405f20828060a01b03611c2a611bf2848b612419565b5116838060a01b03165f5260205260405f208260ff1982541617905501611bcd565b509291965094926008549182611c63868951612475565b10611d4c575b600281015f5b848110611cbe575050611cb69291611cb09154897fc7303d804f645ce5daea12e226f3bab498c9c6f97beca0db122209bef4b3da8c5f80a360075490612419565b93612419565b939094611b74565b611cd1611ccb8289612419565b8a612405565b5190825491600160401b83101561130657611cf38360018095018655856122b4565b819291549060031b91821b915f19901b19161790558a5f52601260205260405f2084545f5260205260405f20611d32611d2c838b612419565b8c612405565b515f5260205260405f208260ff1982541617905501611c6f565b9150611d59848751612475565b91611c69565b7fcfa1c723e12abd91d3583fb69d67fbde07903c41e311030508dc89f0714cb4ae602087604051908152a2602060405160018152f35b50600854611da38187612419565b83511090811591611db5575b50611b8a565b9050611dc3600c5487612419565b835110159081611dd5575b5087611daf565b611de0915086612419565b82511087611dce565b83516040516020810191428352836040830152606082015283608082015260748152611e16609482612381565b519020906001810191828211611e6b57611e6592611e33916124f9565b611e3d8187612405565b5190611e54611e4c8489612405565b519188612405565b52611e5f8287612405565b526124ed565b80611b68565b634e487b7160e01b5f52601160045260245ffd5b8080611e8d60019387612405565b5201611b4b565b6310ef86ed60e21b5f5260045ffd5b611ead81836122b4565b90546040516310ab556b60e21b815260039290921b1c6001600160a01b031660048201819052909190602083602481895afa8015610787576001935f91611f16575b50611efc575b5001611b15565b611f0f611f0886612426565b9589612405565b5288611ef5565b611f2e915060203d8111610b9f57610b918183612381565b8a611eef565b611f3e81836122b4565b90546040516310ab556b60e21b815260039290921b1c6001600160a01b03166004820152602081602481875afa908115610787575f91611f9b575b50611f87575b600101611adc565b93611f93600191612426565b949050611f7f565b611fb3915060203d8111610b9f57610b918183612381565b87611f79565b6315c6fd2560e11b5f5260045ffd5b611fe1915060203d602011610bf157610be38183612381565b82611aa9565b90506020813d602011612011575b8161200260209383612381565b8101031261020a575183611a7c565b3d9150611ff5565b3461020a576120273661229e565b905f52600560205260405f20805482101561020a57602091612048916122b4565b905460405160039290921b1c6001600160a01b03168152f35b3461020a57604036600319011261020a5760043560243580158015820361020a576002546001600160a01b0316338190036101fb57604051633b0ff6bb60e01b8152602081600481855afa908115610787575f91612187575b50840361082d576020600491604051928380926374e45da960e11b82525afa908115610787575f91612168575b506017811015610bb557600c036121595761214a57815f52601660205260ff60405f20541661213b57612130915f52601660205260405f209060ff801983541691151516179055565b602060405160018152f35b630d65d35760e11b5f5260045ffd5b63ac5e0cbb60e01b5f5260045ffd5b634d818d4960e11b5f5260045ffd5b612181915060203d602011610bf157610be38183612381565b846120e7565b90506020813d6020116121b1575b816121a260209383612381565b8101031261020a5751856120ba565b3d9150612195565b3461020a576121c736612270565b925f92919252601360205260405f20905f5260205260405f209060018060a01b03165f5260205260405f20905f52602052602060405f2054604051908152f35b3461020a5761221536612270565b925f92919252601560205260405f20905f5260205260405f209060018060a01b03165f5260205260405f20905f52602052602060ff60405f2054166040519015158152f35b602435906001600160a01b038216820361020a57565b608090600319011261020a5760043590602435906044356001600160a01b038116810361020a579060643590565b604090600319011261020a576004359060243590565b80548210156122c9575f5260205f2001905f90565b634e487b7160e01b5f52603260045260245ffd5b90602080835192838152019201905f5b8181106122fa5750505090565b82516001600160a01b03168452602093840193909201916001016122ed565b90602080835192838152019201905f5b8181106123365750505090565b8251845260209384019390920191600101612329565b80548210156122c9575f5260205f209060021b01905f90565b60e0810190811067ffffffffffffffff82111761130657604052565b90601f8019910116810190811067ffffffffffffffff82111761130657604052565b9081602091031261020a5751601781101561020a5790565b67ffffffffffffffff81116113065760051b60200190565b906123dd826123bb565b6123ea6040519182612381565b82815280926123fb601f19916123bb565b0190602036910137565b80518210156122c95760209160051b010190565b91908201809211611e6b57565b5f198114611e6b5760010190565b8054600160401b81101561130657612451916001820181556122b4565b81546001600160a01b0393841660039290921b91821b9390911b1916919091179055565b91908203918211611e6b57565b9081602091031261020a5751801515810361020a5790565b90604051918281549182825260208201905f5260205f20925f5b8181106124cb5750506124c992500383612381565b565b84546001600160a01b03168352600194850194879450602090930192016124b4565b8015611e6b575f190190565b8115610e6d570690565b8051600281106125b1575f198101908111611e6b575f19430190804383119240915b61252f5750505050565b82611e6b578351604051602081019184835283604083015260608201526060815261255b608082612381565b519020906001810191828211611e6b576125ab92612578916124f9565b6001600160a01b0361258a8288612405565b511690611e546001600160a01b036125a2858a612405565b51169188612405565b80612525565b5050565b5f546001600160a01b031633036125c857565b63118cdaa760e01b5f523360045260245ffd5b805f52601060205260405f2054821015610c4857805f5260106020526126048260405f2061234c565b50815f52600d602052600261261c8560405f2061234c565b50019060ff825460281c16612767575f915f9160015f91018054915b8281106126af57505050600954918281106126a6576126996040937f43f39e4e350f276d138c2bd9e8df24df2957632fd8151c885d7a2a148c795c8695101580939065ff0000000000825491151560281b169065ff00000000001916179055565b82519182526020820152a4565b50505050505050565b6126b981836122b4565b90545f8981526015602090815260408083208d8452825280832060039590951b9390931c6001600160a01b03168083529381528282208d83529052205460ff16612707575b50600101612638565b9461271190612426565b94875f52601460205260405f20895f5260205260405f209060018060a01b03165f5260205260405f20895f5260205260ff60405f205416612753575b5f6126fe565b9461275f600191612426565b95905061274d565b505050505056fea2646970667358221220b01d30532a794af751752a94fc50ff70d67f5d272cf42918e540dac22e69999e64736f6c634300081c0033", - "deployedBytecode": "0x60806040526004361015610011575f80fd5b5f3560e01c80630f68a9ea146122075780631a54d32b146121b9578063246116e61461206157806327f741c3146120195780632d8d2d6314611a2f57806332fd936714611a0057806333fb6a4b146119ad5780633ae117b1146117d95780635cbc26a0146117905780636d27f31714611773578063715018a61461171c5780638747214f146115a85780638da5cb5b146115815780639724e138146114ec578063982231b01461148c5780639d05ab34146113c05780639ea8414014611398578063a2e26ef2146110e9578063abe32a3a146110a5578063ad5ea7b714610fb8578063ad5ee39214610c99578063b323e22f14610c57578063bc7a7d56146108b1578063c13fb4081461086e578063cb404a7514610588578063cff0ab9614610541578063d3588413146104f8578063d5eb897c14610398578063d6f353a114610370578063e7e948f214610329578063f2fde38b146102a0578063fabf7aa51461020e5763fc8e9edc14610184575f80fd5b3461020a57602036600319011261020a57600254600435906001600160a01b031633036101fb57606481116101ec5760407fc15f800daae9273e961b7ab52ded9fbe213e65775b7e3ebe617f30f0c22f589d91600b549080600b5582519182526020820152a1005b63645bfacf60e11b5f5260045ffd5b63b701ef7360e01b5f5260045ffd5b5f80fd5b3461020a5761021c3661229e565b905f52600d60205260405f20805482101561020a5760e09161023d9161234c565b5060018060a01b038154169060ff6001820154916003600282015491015492604051948552602085015264ffffffffff81166040850152818160281c1615156060850152818160301c161515608085015260381c16151560a083015260c0820152f35b3461020a57602036600319011261020a576004356001600160a01b0381169081900361020a576102ce6125b5565b8015610316575f80546001600160a01b03198116831782556001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3005b631e4fbdf760e01b5f525f60045260245ffd5b3461020a57606036600319011261020a576004355f52601260205260405f206024355f5260205260405f206044355f52602052602060ff60405f2054166040519015158152f35b3461020a575f36600319011261020a576001546040516001600160a01b039091168152602090f35b3461020a57602036600319011261020a576004355f52600d60205260405f208054906103c3826123bb565b916103d16040519384612381565b8083526020830180925f5260205f205f915b838310610481578486604051918291602083019060208452518091526040830191905f5b818110610415575050500390f35b91935091602060e060019260c08751858060a01b038151168352848101518584015264ffffffffff604082015116604084015260608101511515606084015260808101511515608084015260a0810151151560a0840152015160c0820152019401910191849392610407565b6004602060019260405161049481612365565b848060a01b038654168152848601548382015260ff600287015464ffffffffff81166040840152818160281c1615156060840152818160301c161515608084015260381c16151560a0820152600386015460c08201528152019201920191906103e3565b3461020a57604036600319011261020a5761051161225a565b6004355f52600e60205260405f209060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b3461020a575f36600319011261020a5760c0600754600854600954600a54600b5491600c5493604051958652602086015260408501526060840152608083015260a0820152f35b3461020a57602036600319011261020a57600254600435906001600160a01b0316338190036101fb57602060049160405192838092633b0ff6bb60e01b82525afa908115610787575f9161083c575b50810361082d57600154604051631bad9e0560e11b81529190602090839060049082906001600160a01b03165afa918215610787575f926107f9575b50805f52601060205260405f20545f5b81811061063557602060405160018152f35b825f52601060205261064a8160405f2061234c565b50925f926002600186019501935b85548110156107ec5761066b81876122b4565b9054865460039290921b1c6001600160a01b031691905f9083825b828110610792575b5050506106a0575b6001915001610658565b600154604051637dd1602d60e11b815260048101849052602481018a90526a4155445f4e4f5f564f544560a81b60448201529290602090849060649082905f906001600160a01b03165af18015610787578587918b955f9161074a575b5060606001967f3a922abd76b9b7c1ea4bce9b738c36db4a39b390754c59a980916ffb688792c792604051916a4155445f4e4f5f564f544560a81b835260208301526040820152a4610696565b95505050506020833d821161077f575b8161076760209383612381565b8101031261020a5791518892908690869060606106fd565b3d915061075a565b6040513d5f823e3d90fd5b61079c818b6122b4565b90549060031b1c885f52601560205260405f208a5f5260205260405f20835f5260205260405f20905f5260205260ff60405f205416156107de57600101610686565b50505050600189808061068e565b5092509250600101610623565b9091506020813d602011610825575b8161081560209383612381565b8101031261020a57519082610613565b3d9150610808565b63c8c8f12360e01b5f5260045ffd5b90506020813d602011610866575b8161085760209383612381565b8101031261020a5751826105d7565b3d915061084a565b3461020a5761087c3661229e565b905f52601060205260405f20805482101561020a5760409161089d9161234c565b506003815491015482519182526020820152f35b3461020a5760a036600319011261020a576004356024356044359060643592608435938415159485810361020a57825f52601060205260405f2054841015610c48575f838152601160209081526040808320878452825280832033845290915290205460ff1615610c3957825f52601260205260405f20845f5260205260405f20855f5260205260ff60405f20541615610c2a57600254604051633b0ff6bb60e01b81526001600160a01b0390911690602081600481855afa908115610787575f91610bf8575b50840361082d576020600491604051928380926374e45da960e11b82525afa908115610787575f91610bc9575b506017811015610bb557600d03610ba6576001546040516310ab556b60e21b815233600482015290602090829060249082906001600160a01b03165afa908115610787575f91610b77575b5015610b685760648211610b59575f8381526015602090815260408083208784528252808320338452825280832088845290915290205460ff16610b4a57827fceb4d4eba5a8d7a52a7de69669091f419fd48ad8b6aedfe9f65f4c0593074bf26040610b48988895610acc8996865f526013602052845f20885f52602052845f2060018060a01b0333165f52602052845f20895f5260205282855f2055865f526014602052845f20885f52602052845f2060018060a01b0333165f52602052845f20895f52602052845f209060ff801983541691151516179055565b845f526015602052825f20865f52602052825f2060018060a01b0333165f52602052825f20875f52602052825f20600160ff19825416179055825190878252602082015285857fd419687a143d402bddbccfea67ace3394b824dc870e853cc3fc76849da2427ef853394a48151903382526020820152a46125db565b005b6304aba2b560e21b5f5260045ffd5b6357d5d01760e11b5f5260045ffd5b6335d7e52560e01b5f5260045ffd5b610b99915060203d602011610b9f575b610b918183612381565b810190612482565b876109f0565b503d610b87565b6376041b1d60e01b5f5260045ffd5b634e487b7160e01b5f52602160045260245ffd5b610beb915060203d602011610bf1575b610be38183612381565b8101906123a3565b876109a5565b503d610bd9565b90506020813d602011610c22575b81610c1360209383612381565b8101031261020a575188610978565b3d9150610c06565b6301695e1960e11b5f5260045ffd5b6350f67e6b60e01b5f5260045ffd5b635de291e760e11b5f5260045ffd5b3461020a57602036600319011261020a576004355f526005602052610c95610c8160405f2061249a565b6040519182916020835260208301906122dd565b0390f35b3461020a57602036600319011261020a57600254600435906001600160a01b0316338190036101fb57604051633b0ff6bb60e01b8152602081600481855afa908115610787575f91610f86575b50820361082d576020600491604051928380926374e45da960e11b82525afa908115610787575f91610f67575b506017811015610bb557600d03610f5857805f52600d60205260405f2090805f52601060205260405f2054905f915f935b818510610d58576020846040519015158152f35b825f94929394526010602052610d718560405f2061234c565b50935f936001600287019601945b8654811015610f4757610d9281886122b4565b90549060031b1c8454811015610f3e57610dac818661234c565b50600281019160ff835460281c1615610f2e575b5f5f915f908d8c54925b8d848210610e81575050505050600a54821015610df0575b505050506001905b01610d7f565b81989293949815610e6d57600194610e5694610e519360039304928391015560ff660100000000000066ff000000000000198354161780835560281c169182610e60575b509060ff60381b825491151560381b169060ff60381b1916179055565b612426565b9490898080610de2565b600b54111591508d610e34565b634e487b7160e01b5f52601260045260245ffd5b81610e8b916122b4565b90545f8d8152601560209081526040808320878452825280832060039590951b9390931c6001600160a01b0316808352938152828220878352905220548c9060ff16610edc575b5050600101610dca565b6001929796610f2692610f20925f52601360205260405f20865f5260205260405f2090858060a01b03165f5260205260405f20865f5260205260405f205490612419565b95612426565b95908b610ed2565b610f39818c886125db565b610dc0565b50600190610dea565b506001909601959294509250610d44565b63c85f922b60e01b5f5260045ffd5b610f80915060203d602011610bf157610be38183612381565b82610d13565b90506020813d602011610fb0575b81610fa160209383612381565b8101031261020a575183610ce6565b3d9150610f94565b3461020a57606036600319011261020a57600435602435610fd76125b5565b600254604051633b0ff6bb60e01b815290602090829060049082906001600160a01b03165afa908115610787575f91611073575b50820361082d57815f52601060205260405f2054811015610c4857815f5260106020528061103c8160405f2061234c565b50540361106457611057915f52601060205260405f2061234c565b5060036044359101555f80f35b637d7d0e5f60e01b5f5260045ffd5b90506020813d60201161109d575b8161108e60209383612381565b8101031261020a57518361100b565b3d9150611081565b3461020a57604036600319011261020a576110be61225a565b6004355f52600f60205260405f209060018060a01b03165f52602052602060405f2054604051908152f35b3461020a57604036600319011261020a57600254604051633b0ff6bb60e01b8152602435916001600160a01b031690602081600481855afa908115610787575f91611366575b50820361082d576020600491604051928380926374e45da960e11b82525afa908115610787575f91611347575b506017811015610bb557600a03611338575f818152600e6020908152604080832033845290915290205460ff1661132957805f52600d60205260405f2054600454111561131a575f818152600d602081815260408084208054600f84528286203387528452828620559385905291905251906111d782612365565b33825260208201906004358252604083019164ffffffffff4216835260608401925f8452608085015f815260a08601905f825260c08701945f86528054600160401b8110156113065761122f9160018201815561234c565b9790976112f3575187546001600160a01b039091166001600160a01b0319909116178755925160018701559051600286018054955165ff000000000090151560281b1664ffffffffff90921665ffffffffffff19909616959095171784556003936112ca92909190518254915167ffff0000000000001990921690151560301b66ff000000000000161790151560381b60ff60381b16179055565b519101555f908152600e602090815260408083203384529091529020805460ff19166001179055005b634e487b7160e01b5f525f60045260245ffd5b634e487b7160e01b5f52604160045260245ffd5b636cf178c360e11b5f5260045ffd5b63169ae8e160e11b5f5260045ffd5b6353d9694b60e01b5f5260045ffd5b611360915060203d602011610bf157610be38183612381565b8261115c565b90506020813d602011611390575b8161138160209383612381565b8101031261020a57518361112f565b3d9150611374565b3461020a575f36600319011261020a576002546040516001600160a01b039091168152602090f35b3461020a57602036600319011261020a576004355f52600d60205260405f205f5f908254915b82811061145657506113f7906123d3565b915f905f5b8381106114195760405160208082528190610c9590820188612319565b8060ff600261142a6001948661234c565b50015460381c1661143c575b016113fc565b8061145061144986612426565b9588612405565b52611436565b60ff6002611464838761234c565b50015460381c16611478575b6001016113e6565b90611484600191612426565b919050611470565b3461020a57606036600319011261020a576044356001600160a01b038116810361020a576004355f52601160205260405f206024355f5260205260405f209060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b3461020a57602036600319011261020a57600254604051633b0ff6bb60e01b81526004803592602091839182906001600160a01b03165afa908115610787575f9161154f575b50811161082d575f526010602052602060405f2054604051908152f35b90506020813d602011611579575b8161156a60209383612381565b8101031261020a575182611532565b3d915061155d565b3461020a575f36600319011261020a575f546040516001600160a01b039091168152602090f35b3461020a576115b63661229e565b600254604051633b0ff6bb60e01b815290602090829060049082906001600160a01b03165afa908115610787575f916116ea575b50821161082d57815f52601060205260405f2054811015610c4857611619915f52601060205260405f2061234c565b506040516080810181811067ffffffffffffffff82111761130657604052815481526116476001830161249a565b9060208101918252600283019260405180948591602082549182815201915f5260205f20905f5b8181106116d1575050509161168a6003926116c7940387612381565b856040850152015491826060820152519251936116b960405195869586526080602087015260808601906122dd565b908482036040860152612319565b9060608301520390f35b825484528894506020909301926001928301920161166e565b90506020813d602011611714575b8161170560209383612381565b8101031261020a5751836115ea565b3d91506116f8565b3461020a575f36600319011261020a576117346125b5565b5f80546001600160a01b0319811682556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461020a575f36600319011261020a576020600354604051908152f35b3461020a57604036600319011261020a576117a961225a565b6004355f52600660205260405f209060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b3461020a57602036600319011261020a57600254604051633b0ff6bb60e01b815260048035926001600160a01b03169190602090829081855afa908115610787575f9161197b575b50820361082d576020600491604051928380926374e45da960e11b82525afa908115610787575f9161195c575b506017811015610bb55760080361194d575f81815260066020908152604080832033845290915290205460ff1661193e576001546040516310ab556b60e21b815233600482015290602090829060249082906001600160a01b03165afa908115610787575f9161191f575b5015610b6857805f5260056020526118d43360405f20612434565b5f8181526006602090815260408083203380855292528220805460ff1916600117905591907f059cacf06f742fac570d6cd3760c2ffe4aebcdecd73804a6a9a4beb0eae079c89080a3005b611938915060203d602011610b9f57610b918183612381565b826118b9565b6335ced03760e11b5f5260045ffd5b634ff4ea3360e11b5f5260045ffd5b611975915060203d602011610bf157610be38183612381565b8261184e565b90506020813d6020116119a5575b8161199660209383612381565b8101031261020a575183611821565b3d9150611989565b3461020a576119bb36612270565b925f92919252601460205260405f20905f5260205260405f209060018060a01b03165f5260205260405f20905f52602052602060ff60405f2054166040519015158152f35b3461020a57602036600319011261020a576004355f526016602052602060ff60405f2054166040519015158152f35b3461020a57602036600319011261020a57600254600435906001600160a01b0316338190036101fb57604051633b0ff6bb60e01b8152602081600481855afa908115610787575f91611fe7575b50820361082d576020600491604051928380926374e45da960e11b82525afa908115610787575f91611fc8575b506017811015610bb557600b03611fb9575f818152600560205260408120805460015490916001600160a01b0390911690835b838110611f345750611aed846123bb565b93611afb6040519586612381565b808552611b0a601f19916123bb565b013660208601375f905f5b848110611ea3578686805160075411611e9457611b3181612503565b815f52600d60205260405f205490611b48826123d3565b915f5b818110611e7f57505081515f198101908111611e6b57803360601b915b611de95750505f5f925f945b611b8060075484612419565b8451101580611d95575b15611d5f57805f52601060205260405f208054600160401b81101561130657611bb89160018201815561234c565b5091611bc387612426565b96835560018301965f5b600754811015611c4c57600190611c006001600160a01b03611bf8611bf2848b612419565b8b612405565b51168b612434565b845f52601160205260405f2086545f5260205260405f20828060a01b03611c2a611bf2848b612419565b5116838060a01b03165f5260205260405f208260ff1982541617905501611bcd565b509291965094926008549182611c63868951612475565b10611d4c575b600281015f5b848110611cbe575050611cb69291611cb09154897fc7303d804f645ce5daea12e226f3bab498c9c6f97beca0db122209bef4b3da8c5f80a360075490612419565b93612419565b939094611b74565b611cd1611ccb8289612419565b8a612405565b5190825491600160401b83101561130657611cf38360018095018655856122b4565b819291549060031b91821b915f19901b19161790558a5f52601260205260405f2084545f5260205260405f20611d32611d2c838b612419565b8c612405565b515f5260205260405f208260ff1982541617905501611c6f565b9150611d59848751612475565b91611c69565b7fcfa1c723e12abd91d3583fb69d67fbde07903c41e311030508dc89f0714cb4ae602087604051908152a2602060405160018152f35b50600854611da38187612419565b83511090811591611db5575b50611b8a565b9050611dc3600c5487612419565b835110159081611dd5575b5087611daf565b611de0915086612419565b82511087611dce565b83516040516020810191428352836040830152606082015283608082015260748152611e16609482612381565b519020906001810191828211611e6b57611e6592611e33916124f9565b611e3d8187612405565b5190611e54611e4c8489612405565b519188612405565b52611e5f8287612405565b526124ed565b80611b68565b634e487b7160e01b5f52601160045260245ffd5b8080611e8d60019387612405565b5201611b4b565b6310ef86ed60e21b5f5260045ffd5b611ead81836122b4565b90546040516310ab556b60e21b815260039290921b1c6001600160a01b031660048201819052909190602083602481895afa8015610787576001935f91611f16575b50611efc575b5001611b15565b611f0f611f0886612426565b9589612405565b5288611ef5565b611f2e915060203d8111610b9f57610b918183612381565b8a611eef565b611f3e81836122b4565b90546040516310ab556b60e21b815260039290921b1c6001600160a01b03166004820152602081602481875afa908115610787575f91611f9b575b50611f87575b600101611adc565b93611f93600191612426565b949050611f7f565b611fb3915060203d8111610b9f57610b918183612381565b87611f79565b6315c6fd2560e11b5f5260045ffd5b611fe1915060203d602011610bf157610be38183612381565b82611aa9565b90506020813d602011612011575b8161200260209383612381565b8101031261020a575183611a7c565b3d9150611ff5565b3461020a576120273661229e565b905f52600560205260405f20805482101561020a57602091612048916122b4565b905460405160039290921b1c6001600160a01b03168152f35b3461020a57604036600319011261020a5760043560243580158015820361020a576002546001600160a01b0316338190036101fb57604051633b0ff6bb60e01b8152602081600481855afa908115610787575f91612187575b50840361082d576020600491604051928380926374e45da960e11b82525afa908115610787575f91612168575b506017811015610bb557600c036121595761214a57815f52601660205260ff60405f20541661213b57612130915f52601660205260405f209060ff801983541691151516179055565b602060405160018152f35b630d65d35760e11b5f5260045ffd5b63ac5e0cbb60e01b5f5260045ffd5b634d818d4960e11b5f5260045ffd5b612181915060203d602011610bf157610be38183612381565b846120e7565b90506020813d6020116121b1575b816121a260209383612381565b8101031261020a5751856120ba565b3d9150612195565b3461020a576121c736612270565b925f92919252601360205260405f20905f5260205260405f209060018060a01b03165f5260205260405f20905f52602052602060405f2054604051908152f35b3461020a5761221536612270565b925f92919252601560205260405f20905f5260205260405f209060018060a01b03165f5260205260405f20905f52602052602060ff60405f2054166040519015158152f35b602435906001600160a01b038216820361020a57565b608090600319011261020a5760043590602435906044356001600160a01b038116810361020a579060643590565b604090600319011261020a576004359060243590565b80548210156122c9575f5260205f2001905f90565b634e487b7160e01b5f52603260045260245ffd5b90602080835192838152019201905f5b8181106122fa5750505090565b82516001600160a01b03168452602093840193909201916001016122ed565b90602080835192838152019201905f5b8181106123365750505090565b8251845260209384019390920191600101612329565b80548210156122c9575f5260205f209060021b01905f90565b60e0810190811067ffffffffffffffff82111761130657604052565b90601f8019910116810190811067ffffffffffffffff82111761130657604052565b9081602091031261020a5751601781101561020a5790565b67ffffffffffffffff81116113065760051b60200190565b906123dd826123bb565b6123ea6040519182612381565b82815280926123fb601f19916123bb565b0190602036910137565b80518210156122c95760209160051b010190565b91908201809211611e6b57565b5f198114611e6b5760010190565b8054600160401b81101561130657612451916001820181556122b4565b81546001600160a01b0393841660039290921b91821b9390911b1916919091179055565b91908203918211611e6b57565b9081602091031261020a5751801515810361020a5790565b90604051918281549182825260208201905f5260205f20925f5b8181106124cb5750506124c992500383612381565b565b84546001600160a01b03168352600194850194879450602090930192016124b4565b8015611e6b575f190190565b8115610e6d570690565b8051600281106125b1575f198101908111611e6b575f19430190804383119240915b61252f5750505050565b82611e6b578351604051602081019184835283604083015260608201526060815261255b608082612381565b519020906001810191828211611e6b576125ab92612578916124f9565b6001600160a01b0361258a8288612405565b511690611e546001600160a01b036125a2858a612405565b51169188612405565b80612525565b5050565b5f546001600160a01b031633036125c857565b63118cdaa760e01b5f523360045260245ffd5b805f52601060205260405f2054821015610c4857805f5260106020526126048260405f2061234c565b50815f52600d602052600261261c8560405f2061234c565b50019060ff825460281c16612767575f915f9160015f91018054915b8281106126af57505050600954918281106126a6576126996040937f43f39e4e350f276d138c2bd9e8df24df2957632fd8151c885d7a2a148c795c8695101580939065ff0000000000825491151560281b169065ff00000000001916179055565b82519182526020820152a4565b50505050505050565b6126b981836122b4565b90545f8981526015602090815260408083208d8452825280832060039590951b9390931c6001600160a01b03168083529381528282208d83529052205460ff16612707575b50600101612638565b9461271190612426565b94875f52601460205260405f20895f5260205260405f209060018060a01b03165f5260205260405f20895f5260205260ff60405f205416612753575b5f6126fe565b9461275f600191612426565b95905061274d565b505050505056fea2646970667358221220b01d30532a794af751752a94fc50ff70d67f5d272cf42918e540dac22e69999e64736f6c634300081c0033", - "linkReferences": {}, - "deployedLinkReferences": {} -} + "bytecode": "0x60a06040523461024257604051601f61558538819003918201601f19168301916001600160401b038311848410176101fb578084926060946040528339810103126102425761004d81610246565b90604061005c60208301610246565b91015191331561022f575f8054336001600160a01b0319821681178355916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3604051608081016001600160401b038111828210176101fb57604090815261177082526107d060208301526105dc908201526101f4606090910152600580546001600160401b0319166701f405dc07d01770179055612710600d55602860168190556017805460ff19169055610bb860185568056bc75e2d631000009055611c206029556109c4602a556001600160a01b03168015801561021e575b61020f57600180546001600160a01b0319908116929092179055600280549091166001600160a01b039290921691909117905560805260405160c081016001600160401b038111828210176101fb5760029160a091604052600381526003602082015282604082015282606082015260326080820152015260036010556003601155600260125560026013556032601455600260155560405161532a908161025b82396080518181816135cf01526138a80152f35b634e487b7160e01b5f52604160045260245ffd5b632a86629560e21b5f5260045ffd5b506001600160a01b03821615610146565b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b51906001600160a01b03821682036102425756fe60806040526004361015610011575f80fd5b5f3560e01c8063097511f21461418c5780630e28f82b146141205780630f68a9ea146140cd5780631a54d32b1461407f578063224c19bb14613fce578063246116e614613e7657806324e168af14613dff57806333fb6a4b14613dad5780633670202714613d74578063372500ab14613cd65780633743887c14613cb95780633ae117b1146137665780633b6fbf851461371c5780633e20697c146136da5780633e35e48a14613670578063402914f51461363857806340ce01d21461361c578063426c87e9146135f257806343cdaad2146135b857806346635d0c146134eb5780634a7154ef1461346f5780634bfecdfa1461341c57806353fb6c5c146133d357806358aed7bc146133ab5780635cbc26a01461336257806362cc53c714613338578063715018a6146132e1578063773174cc146132935780637fec6535146132765780638747214f1461310257806389a29883146130d35780638da5cb5b146130ac5780638eace699146130415780639724e13814612fac57806397f03f1c14612f8f578063982231b014612f495780639ae8d14014612e4a5780639d05ab3414612d7e5780639ea8414014612d56578063a068399514612d34578063a2e26ef214612a63578063abe32a3a14612a1f578063ad5ee392146125ed578063ae169a501461238c578063b323e22f1461234a578063b658d4cd1461232d578063b8c88a2814612110578063bdd071fb14611fff578063be8768b914611fe2578063c299d8a014611e74578063c7b1389414611e4a578063c7faf422146117f6578063c8264bac146116ab578063cb23533b14611415578063cb404a7514610efe578063cc27900914610ee1578063cff0ab9614610e9a578063d358841314610e51578063d5eb897c14610cf1578063d6f353a114610cc9578063dbee7f6314610ca8578063e13b7b3114610ae6578063e4f679c414610a41578063e6f9f65314610591578063e7e948f21461054a578063f07a72b2146104dd578063f2fde38b14610458578063f76e4eaa14610437578063fabf7aa5146103a55763fc8e9edc1461031b575f80fd5b346103a15760203660031901126103a157600254600435906001600160a01b0316330361039257606481116103835760407fc15f800daae9273e961b7ab52ded9fbe213e65775b7e3ebe617f30f0c22f589d91601454908060145582519182526020820152a1005b63645bfacf60e11b5f5260045ffd5b63b701ef7360e01b5f5260045ffd5b5f80fd5b346103a1576103b3366143d3565b905f52601960205260405f2080548210156103a15760e0916103d491614505565b5060018060a01b038154169060ff6001820154916003600282015491015492604051948552602085015264ffffffffff81166040850152818160281c1615156060850152818160301c161515608085015260381c16151560a083015260c0820152f35b346103a15760203660031901126103a15761045061471e565b600435602955005b346103a15760203660031901126103a1576104716141e1565b61047961471e565b6001600160a01b031680156104ca575f80546001600160a01b03198116831782556001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3005b631e4fbdf760e01b5f525f60045260245ffd5b346103a15760203660031901126103a1576004358015158091036103a15760407f3f2db80a4ed2b1368e37435d4e3ed368e5aa688ee6aa6df9cba71e8d36a09de09161052761471e565b6017549060ff811660ff1983161760175560ff83519216151582526020820152a1005b346103a15760603660031901126103a1576004355f52601e60205260405f206024355f5260205260405f206044355f52602052602060ff60405f2054166040519015158152f35b346103a15760c03660031901126103a157600435602435604435906064359260843593841515948581036103a157825f52601c60205260405f2054841015610a32575f838152601d60209081526040808320878452825280832033845290915290205460ff1615610a2357825f52601e60205260405f20845f5260205260405f20855f5260205260ff60405f20541615610a1457600254604051633b0ff6bb60e01b81526001600160a01b0390911690602081600481855afa908115610976575f916109e2575b5084036109d3576020600491604051928380926374e45da960e11b82525afa908115610976575f916109a4575b50601a81101561099057600e03610981576001546040516310ab556b60e21b815233600482015290602090829060249082906001600160a01b03165afa908115610976575f91610947575b50156109385760648211610929575f8381526023602090815260408083208784528252808320338452825280832088845290915290205460ff161561091a575f8381526021602090815260408083208784528252808320338452825280832088845290915290205460ff1661090b57604051602081019083825287604082015260a43560608201523360808201528460a08201528560c08201528660e082015260e08152610780610100826142c0565b5190205f84815260226020908152604080832088845282528083203384528252808320898452909152902054036108fc57827fceb4d4eba5a8d7a52a7de69669091f419fd48ad8b6aedfe9f65f4c0593074bf260406108fa98889561084e8996865f52601f602052845f20885f52602052845f2060018060a01b0333165f52602052845f20895f5260205282855f2055865f5260208052845f20885f52602052845f2060018060a01b0333165f52602052845f20895f52602052845f209060ff801983541691151516179055565b5f858152602160209081528482208883528152848220338084529082528583208a84528252858320805460ff19166001179055878352600b82528583209083529052839020805461089e9061463a565b9055845f52600a602052825f206108b5815461463a565b9055825190878252602082015285857fd419687a143d402bddbccfea67ace3394b824dc870e853cc3fc76849da2427ef853394a48151903382526020820152a4614c57565b005b63389e443b60e11b5f5260045ffd5b6304aba2b560e21b5f5260045ffd5b63b82710dd60e01b5f5260045ffd5b6357d5d01760e11b5f5260045ffd5b6335d7e52560e01b5f5260045ffd5b610969915060203d60201161096f575b61096181836142c0565b81019061455f565b876106d0565b503d610957565b6040513d5f823e3d90fd5b6369f1a16560e01b5f5260045ffd5b634e487b7160e01b5f52602160045260245ffd5b6109c6915060203d6020116109cc575b6109be81836142c0565b810190614547565b87610685565b503d6109b4565b63c8c8f12360e01b5f5260045ffd5b90506020813d602011610a0c575b816109fd602093836142c0565b810103126103a1575188610658565b3d91506109f0565b6301695e1960e11b5f5260045ffd5b6350f67e6b60e01b5f5260045ffd5b635de291e760e11b5f5260045ffd5b346103a157610a4f366143d3565b610a57614744565b815f52602760205260405f20815f5260205260405f209060ff60038301541615610ad7576002820154431115610ac8578281610ab6947fb80257bd2788328d63afd027b3e298fe6a1808ad2bb105b3e1302ad0dcc739055f80a3614f57565b5f5f5160206152d55f395f51905f525d005b630ea6b21360e01b5f5260045ffd5b63bf09dff560e01b5f5260045ffd5b346103a157610af4366143d3565b6002546001600160a01b03163381900361039257602060049160405192838092633b0ff6bb60e01b82525afa908115610976575f91610c76575b5082036109d357608061ffff7f775b575ecc1d51193be35fb0d537bc28414f551a09db15d77e74ad4391eef08292845f52600360205260405f205482610c5e610bec60405193610b7d8561426f565b610be7600554610be7612710610bde81610bd281610bc68d60208e8a1691828152019e8f8f8b60101c16905260608f604083019b818160201c168d5260301c169101528a614595565b049d8e9c511688614595565b04988994511686614595565b049788946146b2565b6146b2565b93610bf6856151a5565b600460405191610c05836142a5565b878352602083019085825260408401878152606085019182528a850192600184528d5f52600860205260405f209551865551600186015551600285015551600384015551151591019060ff801983541691151516179055565b604051938452602084015260408301526060820152a2005b90506020813d602011610ca0575b81610c91602093836142c0565b810103126103a1575183610b2e565b3d9150610c84565b346103a15760203660031901126103a157610cc161471e565b600435602855005b346103a1575f3660031901126103a1576001546040516001600160a01b039091168152602090f35b346103a15760203660031901126103a1576004355f52601960205260405f20805490610d1c82614648565b91610d2a60405193846142c0565b8083526020830180925f5260205f205f915b838310610dda578486604051918291602083019060208452518091526040830191905f5b818110610d6e575050500390f35b91935091602060e060019260c08751858060a01b038151168352848101518584015264ffffffffff604082015116604084015260608101511515606084015260808101511515608084015260a0810151151560a0840152015160c0820152019401910191849392610d60565b60046020600192604051610ded8161428a565b848060a01b038654168152848601548382015260ff600287015464ffffffffff81166040840152818160281c1615156060840152818160301c161515608084015260381c16151560a0820152600386015460c0820152815201920192019190610d3c565b346103a15760403660031901126103a157610e6a6141f7565b6004355f52601a60205260405f209060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b346103a1575f3660031901126103a15760c06010546011546012546013546014549160155493604051958652602086015260408501526060840152608083015260a0820152f35b346103a1575f3660031901126103a1576020600654604051908152f35b346103a15760203660031901126103a157600254600435906001600160a01b03163381900361039257604051633b0ff6bb60e01b8152602081600481855afa908115610976575f916113e3575b5082036109d3576020600491604051928380926374e45da960e11b82525afa908115610976575f916113c4575b50601a811015610990576016036113b557600154604051631bad9e0560e11b81529190602090839060049082906001600160a01b03165afa918215610976575f92611381575b50612710610fce60185484614595565b0491815f52601c60205260405f205490825f52601960205260405f20925f915b83831061100057602060405160018152f35b815f52601c6020526110158360405f20614505565b50945f94876002600189019801965b885481101561136f57611037818a614532565b9054895460175460039390931b9190911c6001600160a01b0316915f918291849060ff168d8c8e865b86811061126d575b505050505050505f14611179575087878415611160575050600154604051630b6f9cd360e11b815260048101839052602481018d90526a4155445f4e4f5f564f544560a81b6044820152606481018990529350602090849060849082905f906001600160a01b03165af18015610976578789918d955f91611123575b5060606001965f5160206152b55f395f51905f52925b604051916a4155445f4e4f5f564f544560a81b835260208301526040820152a45b018890611024565b95505050506020833d8211611158575b81611140602093836142c0565b810103126103a15791518a92908890889060606110e4565b3d9150611133565b5f5160206152b55f395f51905f5260606001965f6110fa565b90925061118a575b6001915061111b565b5f91602060018060a01b0360015416606460405180968193637dd1602d60e11b83528660048401528b60248401527220aaa22fa9a1a7a922afa222ab24a0aa24a7a760691b60448401525af1928315610976578789915f95611229575b505f5160206152b55f395f51905f526060600196604051907220aaa22fa9a1a7a922afa222ab24a0aa24a7a760691b82528b60208301526040820152a4611181565b945050506020833d8211611265575b81611245602093836142c0565b810103126103a15791519187875f5160206152b55f395f51905f526111e7565b3d9150611238565b8d6112788286614532565b90549060031b1c845f52602160205260405f20845f5260205260405f20885f5260205260405f20815f5260205260ff60405f2054161561135757868061133c575b6112c8575b5050600101611060565b6112ff600391865f52601f60205260405f20865f5260205260405f208a5f5260205260405f20815f5260205260405f205493614505565b500154908181111561132e5790611315916146b2565b60165410611325575b8d5f6112be565b6001985061131e565b611337916146b2565b611315565b5060ff600261134b8385614505565b50015460301c166112b9565b5050505050505050505060018d80808d8c8e83611068565b50919650945050600190920191610fee565b9091506020813d6020116113ad575b8161139d602093836142c0565b810103126103a157519082610fbe565b3d9150611390565b633c727ea360e11b5f5260045ffd5b6113dd915060203d6020116109cc576109be81836142c0565b82610f78565b90506020813d60201161140d575b816113fe602093836142c0565b810103126103a1575183610f4b565b3d91506113f1565b346103a15760803660031901126103a15760043560243560443591606435815f52601c60205260405f2054831015610a32575f828152601d60209081526040808320868452825280832033845290915290205460ff1615610a2357815f52601e60205260405f20835f5260205260405f20845f5260205260ff60405f20541615610a1457600254604051633b0ff6bb60e01b81526001600160a01b0390911690602081600481855afa908115610976575f91611679575b5083036109d3576020600491604051928380926374e45da960e11b82525afa908115610976575f9161165a575b50601a81101561099057600d0361164b576001546040516310ab556b60e21b815233600482015290602090829060249082906001600160a01b03165afa908115610976575f9161162c575b501561093857801561161d575f8281526023602090815260408083208684528252808320338452825280832087845290915290205460ff1661160e575f82815260226020908152604080832086845282528083203380855290835281842088855283528184208590558584526023835281842087855283528184208185528352818420888552835292819020805460ff19166001179055805196875290860192909252937f41e011092ee86e0527dccd7793e354593cdb6869d5049a7b20f59f76e4a9c0849190a4005b6303bbddc160e41b5f5260045ffd5b63a4bcca0960e01b5f5260045ffd5b611645915060203d60201161096f5761096181836142c0565b85611544565b6329bfa12d60e01b5f5260045ffd5b611673915060203d6020116109cc576109be81836142c0565b856114f9565b90506020813d6020116116a3575b81611694602093836142c0565b810103126103a15751866114cc565b3d9150611687565b346103a15760803660031901126103a1576116c461471e565b6127106117046116f96116ee61ffff6116db6146da565b1661ffff6116e76146eb565b16906146a5565b61ffff6116e76146fc565b61ffff6116e761470d565b036117e75761ffff6117146146da565b1660055463ffff00006117256146eb565b60101b1665ffff000000006117386146fc565b60201b169167ffff00000000000061174e61470d565b60301b169367ffff000000000000199165ffffffffffff1916171617171760055560405160043561ffff81168091036103a157815260243561ffff81168091036103a157602082015260443561ffff81168091036103a157604082015260643561ffff81168091036103a1578160809160607ffa57d62d8e4143dd5783720cdd7ad606d15892c507177d88495b8d544620a3f0940152a1005b6387c966e360e01b5f5260045ffd5b346103a15760403660031901126103a15760025460043590602435906001600160a01b03163381900361039257604051633b0ff6bb60e01b8152602081600481855afa908115610976575f91611e18575b5083036109d3576020600491604051928380926374e45da960e11b82525afa908115610976575f91611df9575b50601a81101561099057600b03611dea578015611ddb575f828152600e602052604081208054600154919290916001600160a01b031690805b838110611d5657506118be9061465f565b925f905f5b848110611cc557878787805160105411611cb65761190e60405160208101908482526720aaa22fa0a2222960c11b6040820152602881526119056048826142c0565b519020826150f5565b825f52601960205260405f2054916119258361465f565b925f5b818110611ca15750506040516020810191825266082aa88be9288b60cb1b60408201526027815261195a6047826142c0565b51902082515f198101908111611c8d57805b611c015750505f5f925f945b611984601054846146a5565b8451101580611bad575b15611b7757805f52601c60205260405f208054600160401b811015611b50576119bc91600182018155614505565b50916119c78761463a565b96835560018301965f5b601054811015611a5057600190611a046001600160a01b036119fc6119f6848b6146a5565b8b614691565b51168b6145a8565b845f52601d60205260405f2086545f5260205260405f20828060a01b03611a2e6119f6848b6146a5565b5116838060a01b03165f5260205260405f208260ff19825416179055016119d1565b509291965094926011549182611a678689516146b2565b10611b64575b600281015f5b848110611ac2575050611aba9291611ab49154897fc7303d804f645ce5daea12e226f3bab498c9c6f97beca0db122209bef4b3da8c5f80a3601054906146a5565b936146a5565b939094611978565b611ad5611acf82896146a5565b8a614691565b5190825491600160401b831015611b5057611af7836001809501865585614532565b819291549060031b91821b915f19901b19161790558a5f52601e60205260405f2084545f5260205260405f20611b36611b30838b6146a5565b8c614691565b515f5260205260405f208260ff1982541617905501611a73565b634e487b7160e01b5f52604160045260245ffd5b9150611b718487516146b2565b91611a6d565b7fcfa1c723e12abd91d3583fb69d67fbde07903c41e311030508dc89f0714cb4ae602087604051908152a2602060405160018152f35b50601154611bbb81876146a5565b83511090811591611bcd575b5061198e565b9050611bdb601554876146a5565b835110159081611bed575b5087611bc7565b611bf89150866146a5565b82511087611be6565b8351604051611c3881611c2a602082019486888791606093918352602083015260408201520190565b03601f1981018352826142c0565b519020906001810191828211611c8d57611c8792611c5591614df5565b611c5f8187614691565b5190611c76611c6e8489614691565b519188614691565b52611c818287614691565b52614de9565b8061196c565b634e487b7160e01b5f52601160045260245ffd5b8080611caf60019388614691565b5201611928565b6310ef86ed60e21b5f5260045ffd5b611ccf8183614532565b90546040516310ab556b60e21b815260039290921b1c6001600160a01b031660048201819052909190602083602481895afa8015610976576001935f91611d38575b50611d1e575b50016118c3565b611d31611d2a8661463a565b9589614691565b5289611d17565b611d50915060203d811161096f5761096181836142c0565b8b611d11565b611d608186614532565b90546040516310ab556b60e21b815260039290921b1c6001600160a01b03166004820152602081602481875afa908115610976575f91611dbd575b50611da9575b6001016118ad565b90611db560019161463a565b919050611da1565b611dd5915060203d811161096f5761096181836142c0565b88611d9b565b6370d56aed60e01b5f5260045ffd5b6315c6fd2560e11b5f5260045ffd5b611e12915060203d6020116109cc576109be81836142c0565b83611874565b90506020813d602011611e42575b81611e33602093836142c0565b810103126103a1575184611847565b3d9150611e26565b346103a15760203660031901126103a1576004355f526003602052602060405f2054604051908152f35b346103a15760803660031901126103a1576004356024356044356001600160401b0381116103a157611eaa9036906004016143e9565b9290611eb461471e565b611ebc614744565b815f52602760205260405f20835f5260205260405f2090600382019460ff86541615610ad75760028301544311610ac857611ef6816146bf565b90611f0460405192836142c0565b808252602082019236828201116103a157815f9260209286378301015251902060405160208101918483528560408301526060820152606435608082015260808152611f5160a0826142c0565b519020825f52602660205260405f20845f5260205260405f2054145f14611fd15760208160017f2d7b75e83725d13c472b5ea1bc153d9e3f52ec0e7ff57919c18741843a06ceb79301549560ff198154169055611fad86615077565b546040519586526001600160a01b031694a45f5f5160206152d55f395f51905f525d005b9190611fdd9350614f57565b610ab6565b346103a1575f3660031901126103a1576020602954604051908152f35b346103a15761200d366143d3565b9081156121015780158015612092575b6120835760045461203c908390309033906001600160a01b0316614eee565b805f52600360205260405f206120538382546146a5565b90556040519182527f4e3c672324bfa4c8193ded7cce75b1e608180241cf3d89ca45bc08101f3594b360203393a3005b63388ecdff60e21b5f5260045ffd5b50600254604051633b0ff6bb60e01b815290602090829060049082906001600160a01b03165afa908115610976575f916120cf575b50811061201d565b90506020813d6020116120f9575b816120ea602093836142c0565b810103126103a15751836120c7565b3d91506120dd565b63445512df60e01b5f5260045ffd5b346103a15761211e366143d3565b612126614744565b815f52601c60205260405f2054811015610a32575f828152601d60209081526040808320848452825280832033845290915290205460ff1615610a2357815f52600860205260ff600460405f2001541661231e57815f52602660205260405f20815f5260205260405f20541561230f57815f52602760205260405f20815f52602052600360405f20015460ff81166123005760081c60ff166122f157602854806122d1575b506121d8602954436146a5565b91602854604051906121e9826142a5565b338252602082019081526122746003604084019387855260608101946001865260808201945f8652875f52602760205260405f20895f5260205260405f209260018060a01b039060018060a01b03905116166bffffffffffffffffffffffff60a01b8454161783555160018301555160028201550192511515839060ff801983541691151516179055565b51151561ff0082549160081b169061ff0019161790556028549260405193845260208401527f65ae6dac38bbdf2d8e9903b5f7f16daa039874c6edc0ad5c65084468423f80fb60403394a45f5f5160206152d55f395f51905f525d005b6004546122eb9190309033906001600160a01b0316614eee565b826121cb565b631fa9208960e21b5f5260045ffd5b6305dd195560e11b5f5260045ffd5b6308aae87d60e21b5f5260045ffd5b630c8d37bf60e31b5f5260045ffd5b346103a1575f3660031901126103a1576020602a54604051908152f35b346103a15760203660031901126103a1576004355f52600e60205261238861237460405f206145e9565b604051918291602083526020830190614496565b0390f35b346103a15760203660031901126103a157600435805f52600860205260405f2060ff600482015416156125de575f828152600c6020908152604080832033845290915290205460ff166125cf575f828152600c6020908152604080832033808552908352818420805460ff191660011790558584526009835281842054601a8452828520918552925282205491939160ff16806125c6575b612566575b50805f52600a60205260405f205480612522575b506003820154918261247d575b505050801561246e57335f52600760205261246a60405f209182546146a5565b9055005b634855efe360e01b5f5260045ffd5b600254604051630f5985ff60e11b81526004810193909352336024840152602090839060449082906001600160a01b03165afa918215610976575f926124ee575b50811561244a57916124db6124e09260026124e696950154614595565b614577565b906146a5565b81808061244a565b9091506020813d60201161251a575b8161250a602093836142c0565b810103126103a1575190846124be565b3d91506124fd565b5f828152600b6020908152604080832033845290915290205480612547575b5061243d565b61255e9294916124db6124e0926001870154614595565b918380612541565b5f828152601960209081526040808320601b83528184203385529092529091205461259091614505565b5060ff600282015460381c166125a7575b50612429565b6125be9294506124db906003855491015490614595565b9183806125a1565b50801515612424565b637f0966f960e01b5f5260045ffd5b63187132e160e21b5f5260045ffd5b346103a15760203660031901126103a157600254600435906001600160a01b03163381900361039257604051633b0ff6bb60e01b8152602081600481855afa908115610976575f916129ed575b5082036109d3576020600491604051928380926374e45da960e11b82525afa908115610976575f916129ce575b50601a81101561099057600e036129bf57805f52601960205260405f20815f52601c60205260405f2054915f915f5b8481106126aa576020846040519015158152f35b825f94939452601c6020526126c28160405f20614505565b506002810194906001015f5b86548110156129b1576126e18188614532565b90549060031b1c85548110156129a8576126fb8187614505565b50600281019160ff835460281c1615612998575b84549161271b8361465f565b936127258461465f565b945f945f5b8181106128d857505060135485101561274e575b5050505050506001905b016126ce565b9060ff612763866127c0959697989e94614dff565b94856003845492015581660100000000000066ff0000000000001983161780855560281c16806128cc575b835467ff00000000000000191690151560381b60ff60381b1617835560301c161590816128bd575b5061289f5761463a565b60165490995f5b8581101561273e576001906001600160a01b036127e48285614691565b51168a5f52601f60205260405f208c5f5260205260405f20838060a01b0382165f5260205260405f20875f526020528b8b7f76543dcb2ee57f6ed82a780c59bc9720db389ef1c39a8fdf85e80323dfe464db60405f205488818c8c8083115f1461288d5761285590612884936146b2565b6040805192835260208301959095529381018d90526060810184905291909211608082015290819060a0820190565b0390a4016127c7565b6128849261289a916146b2565b612855565b875f52600960205260405f206128b68482546146a5565b905561463a565b60ff91505460381c168e6127b6565b5060145486101561278e565b6128e2818b614532565b60018060a01b0391549060031b1c168b5f52602160205260405f208d5f5260205260405f2060018060a01b0382165f5260205260405f20875f526020528c8c60ff60405f205416612939575b50505060010161272a565b91600193999161298f935f52601f60205260405f20905f5260205260405f20848060a01b0382165f5260205260405f20895f5260205260405f205461297e8388614691565b52612989828c614691565b5261463a565b96908c8c61292e565b6129a3818888614c57565b61270f565b50600190612748565b509394509250600101612696565b63c85f922b60e01b5f5260045ffd5b6129e7915060203d6020116109cc576109be81836142c0565b82612667565b90506020813d602011612a17575b81612a08602093836142c0565b810103126103a157518361263a565b3d91506129fb565b346103a15760403660031901126103a157612a386141f7565b6004355f52601b60205260405f209060018060a01b03165f52602052602060405f2054604051908152f35b346103a15760403660031901126103a15760043560243560018060a01b0360025416604051633b0ff6bb60e01b8152602081600481855afa908115610976575f91612d02575b5082036109d3576020600491604051928380926374e45da960e11b82525afa908115610976575f91612ce3575b50601a81101561099057600a03612cd4575f818152601a6020908152604080832033845290915290205460ff16612cc557805f52601960205260405f2054600d541115612cb6575f8181526019602081815260408084208054601b8452828620338752845282862081905594869052929091525191929190612b578261428a565b3382526020820190858252604083019164ffffffffff4216835260608401925f8452608085015f815260a08601905f825260c08701945f86528054600160401b811015611b5057612bad91600182018155614505565b979097612ca3575187546001600160a01b039091166001600160a01b0319909116178755925160018701559051600286018054955165ff000000000090151560281b1664ffffffffff90921665ffffffffffff1990961695909517178455600393612c4892909190518254915167ffff0000000000001990921690151560301b66ff000000000000161790151560381b60ff60381b16179055565b51910155805f52601a60205260405f2060018060a01b0333165f5260205260405f20600160ff198254161790556040519283527f252ff0ddaf7e8904aaf91e8733a7cdc0fd737b41f4db319c377582046fbf549c60203394a4005b634e487b7160e01b5f525f60045260245ffd5b636cf178c360e11b5f5260045ffd5b63169ae8e160e11b5f5260045ffd5b6353d9694b60e01b5f5260045ffd5b612cfc915060203d6020116109cc576109be81836142c0565b83612ad6565b90506020813d602011612d2c575b81612d1d602093836142c0565b810103126103a1575184612aa9565b3d9150612d10565b346103a1575f3660031901126103a157602060ff601754166040519015158152f35b346103a1575f3660031901126103a1576002546040516001600160a01b039091168152602090f35b346103a15760203660031901126103a1576004355f52601960205260405f205f5f908254915b828110612e145750612db59061465f565b915f905f5b838110612dd75760405160208082528190612388908201886144d2565b8060ff6002612de860019486614505565b50015460381c16612dfa575b01612dba565b80612e0e612e078661463a565b9588614691565b52612df4565b60ff6002612e228387614505565b50015460381c16612e36575b600101612da4565b90612e4260019161463a565b919050612e2e565b346103a157612e5836614416565b94612e6794919493929361471e565b600254604051633b0ff6bb60e01b815290602090829060049082906001600160a01b03165afa908115610976575f91612f17575b5087036109d357612eac81886147fa565b90875f52602760205260405f20815f5260205260ff600360405f20015460081c1615610ad75760018201548603612f0857876108fa985f52602760205260405f20825f52602052600360405f200161ff0019815416905561483f565b630edcfc0760e41b5f5260045ffd5b90506020813d602011612f41575b81612f32602093836142c0565b810103126103a1575188612e9b565b3d9150612f25565b346103a157612f573661420d565b915f52601d60205260405f20905f5260205260405f209060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b346103a1575f3660031901126103a1576020602854604051908152f35b346103a15760203660031901126103a157600254604051633b0ff6bb60e01b81526004803592602091839182906001600160a01b03165afa908115610976575f9161300f575b5081116109d3575f52601c602052602060405f2054604051908152f35b90506020813d602011613039575b8161302a602093836142c0565b810103126103a1575182612ff2565b3d915061301d565b346103a15760203660031901126103a1576004355f52600860205260405f20805461238860018301549260028101549060ff6004600383015492015416916040519586958693909594919260809360a086019786526020860152604085015260608401521515910152565b346103a1575f3660031901126103a1575f546040516001600160a01b039091168152602090f35b346103a1576130e1366143d3565b905f52602660205260405f20905f52602052602060405f2054604051908152f35b346103a157613110366143d3565b600254604051633b0ff6bb60e01b815290602090829060049082906001600160a01b03165afa908115610976575f91613244575b5082116109d357815f52601c60205260405f2054811015610a3257613173915f52601c60205260405f20614505565b506040516131808161426f565b81548152613190600183016145e9565b9060208101918252600283019260405180948591602082549182815201915f5260205f20905f5b81811061322b57505050600361238894936131da61321d946131e79403896142c0565b60408501978852016142e1565b91826060820152519351945161320f6040519687968752608060208801526080870190614496565b9085820360408701526144d2565b908382036060850152614381565b82548452889450602090930192600192830192016131b7565b90506020813d60201161326e575b8161325f602093836142c0565b810103126103a1575183613144565b3d9150613252565b346103a1575f3660031901126103a1576020601854604051908152f35b346103a1576132a1366143a5565b925f92919252602260205260405f20905f5260205260405f209060018060a01b03165f5260205260405f20905f52602052602060405f2054604051908152f35b346103a1575f3660031901126103a1576132f961471e565b5f80546001600160a01b0319811682556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346103a15760203660031901126103a1576004355f526009602052602060405f2054604051908152f35b346103a15760403660031901126103a15761337b6141f7565b6004355f52600f60205260405f209060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b346103a1575f3660031901126103a1576004546040516001600160a01b039091168152602090f35b346103a15760403660031901126103a1576133ec6141f7565b6004355f52600c60205260405f209060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b346103a15761342a366143a5565b925f92919252602360205260405f20905f5260205260405f209060018060a01b03165f5260205260405f20905f52602052602060ff60405f2054166040519015158152f35b346103a15760203660031901126103a15760043561348b61471e565b801580156134e0575b6134d15760407fabaff455f95ee810233f80ebf495dba4360e49a2a3353ca5521be34c79ffc8a491601854908060185582519182526020820152a1005b63044fb52760e01b5f5260045ffd5b506127108111613494565b346103a1576134f936614416565b9461350894919493929361471e565b600254604051633b0ff6bb60e01b815290602090829060049082906001600160a01b03165afa908115610976575f91613586575b5087036109d35761354d81886147fa565b9060018201548603612f0857875f52602760205260405f20815f5260205260ff600360405f20015460081c166122f1576108fa9761483f565b90506020813d6020116135b0575b816135a1602093836142c0565b810103126103a157518861353c565b3d9150613594565b346103a1575f3660031901126103a15760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346103a15760203660031901126103a1576004355f52600a602052602060405f2054604051908152f35b346103a1575f3660031901126103a157602060405161012c8152f35b346103a15760203660031901126103a1576001600160a01b036136596141e1565b165f526007602052602060405f2054604051908152f35b346103a15761367e366143d3565b905f52602760205260405f20905f5260205260a060405f2060ff600180841b03825416916001810154906003600282015491015491604051948552602085015260408401528181161515606084015260081c1615156080820152f35b346103a1575f3660031901126103a157608060055461ffff604051918181168352818160101c166020840152818160201c16604084015260301c166060820152f35b346103a15761372a3661420d565b915f52602560205260405f20905f5260205260405f209060018060a01b03165f52602052602061375d60405f2054614237565b15604051908152f35b346103a15760203660031901126103a157600254604051633b0ff6bb60e01b815260048035926001600160a01b03169190602090829081855afa908115610976575f91613c87575b5082036109d3576040516374e45da960e11b8152602081600481855afa908115610976575f91613c68575b50601a81101561099057600803613c59575f828152600f6020908152604080832033845290915290205460ff16613c4a576040516372be4a1f60e11b81526004810183905233602482015290602090829060449082905afa908115610976575f91613c2b575b50613c1c57805f52600e60205261012c60405f20541015613c0d576001546040516310ab556b60e21b81523360048201526001600160a01b0390911690602081602481855afa908115610976575f91613bee575b501561093857604051634ab989d560e01b81527f00000000000000000000000000000000000000000000000000000000000000006004820152602081602481855afa908115610976575f91613bbc575b508015159081613b55575b50613b465760405163f2d679bf60e01b8152602081600481855afa908115610976575f91613b14575b50806139ce575b5050805f52600e6020526139353360405f206145a8565b5f818152600f602090815260408083203384529091529020805460ff19166001908117909155546001600160a01b0316803b156103a1575f80916024604051809481936347e91db160e01b83523360048401525af18015610976576139be575b5033907f059cacf06f742fac570d6cd3760c2ffe4aebcdecd73804a6a9a4beb0eae079c85f80a3005b5f6139c8916142c0565b81613995565b6040516303d3b32360e51b8152336004820152602081602481865afa908115610976575f91613ae2575b50604051631bad9e0560e11b815290602082600481875afa918215610976575f92613aad575b50602492613a31602093613a3693614577565b614595565b926040519283809263b998328360e01b82523360048301525afa908115610976575f91613a7b575b501015613a6c57818061391e565b632530883760e11b5f5260045ffd5b90506020813d602011613aa5575b81613a96602093836142c0565b810103126103a1575183613a5e565b3d9150613a89565b91506020823d602011613ada575b81613ac8602093836142c0565b810103126103a1579051906024613a1e565b3d9150613abb565b90506020813d602011613b0c575b81613afd602093836142c0565b810103126103a15751846139f8565b3d9150613af0565b90506020813d602011613b3e575b81613b2f602093836142c0565b810103126103a1575183613917565b3d9150613b22565b63fb2002c760e01b5f5260045ffd5b6040516303d3b32360e51b8152336004820152909150602081602481865afa908115610976575f91613b8a575b5010836138ee565b90506020813d602011613bb4575b81613ba5602093836142c0565b810103126103a1575184613b82565b3d9150613b98565b90506020813d602011613be6575b81613bd7602093836142c0565b810103126103a15751836138e3565b3d9150613bca565b613c07915060203d60201161096f5761096181836142c0565b83613893565b630350bbb360e31b5f5260045ffd5b631d47600f60e11b5f5260045ffd5b613c44915060203d60201161096f5761096181836142c0565b8261383f565b6335ced03760e11b5f5260045ffd5b634ff4ea3360e11b5f5260045ffd5b613c81915060203d6020116109cc576109be81836142c0565b836137d9565b90506020813d602011613cb1575b81613ca2602093836142c0565b810103126103a15751836137ae565b3d9150613c95565b346103a1575f3660031901126103a1576020601654604051908152f35b346103a1575f3660031901126103a157613cee614744565b335f52600760205260405f20548015613d6557335f81815260076020526040812055600454613d279183916001600160a01b0316614779565b6040519081527ffc30cddea38e2bf4d6ea7d3f9ed3b6ad7f176419f4963bd81318067a4aee73fe60203392a25f5f5160206152d55f395f51905f525d005b639677fa6360e01b5f5260045ffd5b346103a15760203660031901126103a157600435613d9061471e565b6127108111613d9e57602a55005b637956bd3560e11b5f5260045ffd5b346103a157613dbb366143a5565b925f929192526020805260405f20905f5260205260405f209060018060a01b03165f5260205260405f20905f52602052602060ff60405f2054166040519015158152f35b346103a15760203660031901126103a157613e186141e1565b613e2061471e565b6001600160a01b03168015613e6757600480546001600160a01b031916821790557f3cceaedf044d3b5af0dbf9cf80be3d5a7be17bdc9ee87aa77868aa3b6ad54e805f80a2005b632a86629560e21b5f5260045ffd5b346103a15760403660031901126103a1576004356024358015801582036103a1576002546001600160a01b03163381900361039257604051633b0ff6bb60e01b8152602081600481855afa908115610976575f91613f9c575b5084036109d3576020600491604051928380926374e45da960e11b82525afa908115610976575f91613f7d575b50601a81101561099057600c03613f6e57613f5f57815f52602460205260ff60405f205416613f5057613f45915f52602460205260405f209060ff801983541691151516179055565b602060405160018152f35b630d65d35760e11b5f5260045ffd5b63ac5e0cbb60e01b5f5260045ffd5b634d818d4960e11b5f5260045ffd5b613f96915060203d6020116109cc576109be81836142c0565b84613efc565b90506020813d602011613fc6575b81613fb7602093836142c0565b810103126103a1575185613ecf565b3d9150613faa565b346103a15760203660031901126103a1576002546001600160a01b03163303610392576004355f52600e60205260405f205f5b81548110156108fa576001546001600160a01b0316906140218184614532565b905460039190911b1c6001600160a01b0316823b156103a1575f92602484926040519586938492631bf8593960e31b845260048401525af19182156109765760019261406f575b5001614001565b5f614079916142c0565b83614068565b346103a15761408d366143a5565b925f92919252601f60205260405f20905f5260205260405f209060018060a01b03165f5260205260405f20905f52602052602060405f2054604051908152f35b346103a1576140db366143a5565b925f92919252602160205260405f20905f5260205260405f209060018060a01b03165f5260205260405f20905f52602052602060ff60405f2054166040519015158152f35b346103a15760203660031901126103a15760043561413c61471e565b6064811161417d5760407f8219a9db2aac1ea83dbd262fc148ad39af63c144f8caf76b4dc5ff5d250b004c91601654908060165582519182526020820152a1005b633ca0ab7b60e01b5f5260045ffd5b346103a15761419a3661420d565b915f52602560205260405f20905f5260205260405f209060018060a01b03165f526020526123886141cd60405f206142e1565b604051918291602083526020830190614381565b600435906001600160a01b03821682036103a157565b602435906001600160a01b03821682036103a157565b60609060031901126103a15760043590602435906044356001600160a01b03811681036103a15790565b90600182811c92168015614265575b602083101461425157565b634e487b7160e01b5f52602260045260245ffd5b91607f1691614246565b608081019081106001600160401b03821117611b5057604052565b60e081019081106001600160401b03821117611b5057604052565b60a081019081106001600160401b03821117611b5057604052565b90601f801991011681019081106001600160401b03821117611b5057604052565b9060405191825f8254926142f484614237565b808452936001811690811561435f575060011461431b575b50614319925003836142c0565b565b90505f9291925260205f20905f915b818310614343575050906020614319928201015f61430c565b602091935080600191548385890101520191019091849261432a565b90506020925061431994915060ff191682840152151560051b8201015f61430c565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b60809060031901126103a15760043590602435906044356001600160a01b03811681036103a1579060643590565b60409060031901126103a1576004359060243590565b9181601f840112156103a1578235916001600160401b0383116103a157602083818601950101116103a157565b9060a06003198301126103a15760043591602435916044356001600160401b0381116103a15782614449916004016143e9565b929092916064356001600160401b0381116103a157826023820112156103a1578060040135926001600160401b0384116103a15760248460051b830101116103a157602401919060843590565b90602080835192838152019201905f5b8181106144b35750505090565b82516001600160a01b03168452602093840193909201916001016144a6565b90602080835192838152019201905f5b8181106144ef5750505090565b82518452602093840193909201916001016144e2565b805482101561451e575f5260205f209060021b01905f90565b634e487b7160e01b5f52603260045260245ffd5b805482101561451e575f5260205f2001905f90565b908160209103126103a15751601a8110156103a15790565b908160209103126103a1575180151581036103a15790565b8115614581570490565b634e487b7160e01b5f52601260045260245ffd5b81810292918115918404141715611c8d57565b8054600160401b811015611b50576145c591600182018155614532565b81546001600160a01b0393841660039290921b91821b9390911b1916919091179055565b90604051918281549182825260208201905f5260205f20925f5b818110614618575050614319925003836142c0565b84546001600160a01b0316835260019485019487945060209093019201614603565b5f198114611c8d5760010190565b6001600160401b038111611b505760051b60200190565b9061466982614648565b61467660405191826142c0565b8281528092614687601f1991614648565b0190602036910137565b805182101561451e5760209160051b010190565b91908201809211611c8d57565b91908203918211611c8d57565b6001600160401b038111611b5057601f01601f191660200190565b60043561ffff811681036103a15790565b60243561ffff811681036103a15790565b60443561ffff811681036103a15790565b60643561ffff811681036103a15790565b5f546001600160a01b0316330361473157565b63118cdaa760e01b5f523360045260245ffd5b5f5160206152d55f395f51905f525c61476a5760015f5160206152d55f395f51905f525d565b633ee5aeb560e01b5f5260045ffd5b916040519163a9059cbb60e01b5f5260018060a01b031660045260245260205f60448180865af19060015f51148216156147d9575b604052156147b95750565b635274afe760e01b5f9081526001600160a01b0391909116600452602490fd5b9060018115166147f157823b15153d151616906147ae565b503d5f823e3d90fd5b919091805f52601c60205260405f2054831015610a32575f52601c6020526148258260405f20614505565b509182540361483057565b637d7d0e5f60e01b5f5260045ffd5b9596919493909792600386016001600160401b038311611b50576148638154614237565b601f8111614c12575b50825f601f8211600114614bae575f91614ba3575b508360011b905f198560031b1c19161790555b5f5b88811015614b035760018054908801906001600160a01b03165f6148ba8484614532565b9054604051632942541760e11b815260039290921b1c6001600160a01b0316600482015291829060249082905afa908115610976575f91614a8a575b505115614a7b578160051b870135601e19883603018112156103a1578701908135906001600160401b0382116103a15781360360208401136103a1578a5f52602560205260405f208d5f526020526149528460405f2092614532565b60018060a01b0391549060031b1c1660018060a01b03165f5260205260405f209161497d8354614237565b601f8111614a36575b505f90601f83116001146149c9576001949392915f91836149bb575b50505f19600383901b1c191690841b1790555b01614896565b602092500101355f806149a2565b601f19831691845f5260205f20925f5b818110614a1c575091600196959492918388959310614a00575b505050811b0190556149b5565b01602001355f19600384901b60f8161c191690555f80806149f3565b9193602060018192828888010135815501950192016149d9565b835f5260205f20601f840160051c81019160208510614a71575b601f0160051c01905b818110614a665750614986565b5f8155600101614a59565b9091508190614a50565b6316f7535160e11b5f5260045ffd5b90503d805f833e614a9b81836142c0565b8101906020818303126103a1578051906001600160401b0382116103a1570181601f820112156103a157805190614ad1826146bf565b92614adf60405194856142c0565b828452602083830101116103a157815f9260208093018386015e830101525f6148f6565b507fe20a8926756681a7b5a0012bbc9d06a1cef062fc77fd91f3a3e6e68d6cc7e39a9550602094508160607f19a47fa24c43060a3e1f39e943807c130a264b31560486108d3db2ea273202859289948c9b9c96979c865f5260268a5260405f20885f528a528860405f205560405194859360408552816040860152858501375f83830185015289830152601f01601f19168101030190a3604051908152a3565b90508201355f614881565b5f8381526020812092508590601f198216905b818110614bf7575010614bde575b5050600183811b019055614894565b8301355f19600386901b60f8161c191690555f80614bcf565b86840135855560019094019360209384019388935001614bc1565b815f5260205f20601f850160051c81019160208610614c4d575b601f0160051c01905b818110614c42575061486c565b5f8155600101614c35565b9091508190614c2c565b805f52601c60205260405f2054821015610a3257805f52601c602052614c808260405f20614505565b50815f5260196020526002614c988560405f20614505565b50019060ff825460281c16614de2575f915f9160015f91018054915b828110614d2b5750505060125491828110614d2257614d156040937f43f39e4e350f276d138c2bd9e8df24df2957632fd8151c885d7a2a148c795c8695101580939065ff0000000000825491151560281b169065ff00000000001916179055565b82519182526020820152a4565b50505050505050565b614d358183614532565b90545f8981526021602090815260408083208d8452825280832060039590951b9390931c6001600160a01b03168083529381528282208d83529052205460ff16614d83575b50600101614cb4565b94614d8d9061463a565b94875f526020805260405f20895f5260205260405f209060018060a01b03165f5260205260405f20895f5260205260ff60405f205416614dce575b5f614d7a565b94614dda60019161463a565b959050614dc8565b5050505050565b8015611c8d575f190190565b8115614581570690565b908015614edf5760015b818110614e615750600180821614614e4f5760011c905f198201828111611c8d57614e4992614e3b614e429284614691565b5192614691565b51906146a5565b60011c90565b90614e5d9160011c90614691565b5190565b90614e6e82849594614691565b5192825b80151580614ec1575b15614ea9575f19810190808211611c8d57614e99614ea49288614691565b51611c818289614691565b614e72565b93614eba6001939492969586614691565b5201614e09565b505f198101818111611c8d57614ed8869188614691565b5111614e7b565b6311298f6d60e11b5f5260045ffd5b6040516323b872dd60e01b5f9081526001600160a01b039384166004529290931660245260449390935260209060648180865af19060015f5114821615614f3f575b6040525f606052156147b95750565b9060018115166147f157823b15153d15161690614f30565b909182827f8faad919cbe9703e1bfaea79ce255b90cd7fdc25d976e997f2cf26a0ba8538b460406001850154600360018060a01b03875416960161010061ffff1982541617905580615059575b835f52600860205260ff6004835f200154165f14615038575f5b80151580615023575b614ffd575b82519182526020820152a47fe725be1a9d589008aa523bb5095c4ff62c7a8e4e9269b2850724c5f3c2298ba65f80a3565b845f526003602052825f206150138282546146b2565b905561501e81615077565b614fcc565b50845f52600360205280835f20541015614fc7565b835f526003602052612710615053835f2054602a5490614595565b04614fbe565b60045461507290829088906001600160a01b0316614779565b614fa4565b80156150f2576004546001600160a01b031690600181901c823b156103a1575f8093602460405180968193630852cd8d60e31b83528660048401525af191821561097657614319936150dd936150e2575b506150d5826006546146a5565b6006556146b2565b6151a5565b5f6150ec916142c0565b5f6150c8565b50565b908151600281106151a0575f198101908111611c8d57805b61511657505050565b825160405161513f81611c2a602082019486888791606093918352602083015260408201520190565b519020906001810191828211611c8d5761519a9261515c91614df5565b6001600160a01b0361516e8287614691565b51169061518f6001600160a01b036151868589614691565b51169187614691565b52611c818286614691565b8061510d565b505050565b80156150f257600154604051639958065160e01b815290602090829060049082906001600160a01b03165afa908115610976575f91615272575b506001600160a01b0381161561521957600454615214929161520c918391906001600160a01b0316614779565b6006546146a5565b600655565b506004546001600160a01b031690813b156103a1575f8092602460405180958193630852cd8d60e31b83528660048401525af19182156109765761521492615262575b5061520c565b5f61526c916142c0565b5f61525c565b90506020813d6020116152ac575b8161528d602093836142c0565b810103126103a157516001600160a01b03811681036103a1575f6151df565b3d915061528056fe3a922abd76b9b7c1ea4bce9b738c36db4a39b390754c59a980916ffb688792c79b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220dade069f02e8701a737f25b7123ece007a1afa25fd48cb4692e5ecab7473356564736f6c634300081c0033" +} \ No newline at end of file diff --git a/cache_model_0/abis/DINTaskCoordinator.json b/cache_model_0/abis/DINTaskCoordinator.json index 38a7523d..32eb49ef 100644 --- a/cache_model_0/abis/DINTaskCoordinator.json +++ b/cache_model_0/abis/DINTaskCoordinator.json @@ -1,1333 +1,2672 @@ { - "_format": "hh-sol-artifact-1", - "contractName": "DINTaskCoordinator", - "sourceName": "contracts/DINTaskCoordinator.sol", "abi": [ { + "type": "constructor", "inputs": [ { - "internalType": "address", "name": "dinvalidatorStakeContract_address", - "type": "address" + "type": "address", + "internalType": "address" + }, + { + "name": "modelId_", + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "constructor" + "stateMutability": "nonpayable" }, { - "inputs": [ + "type": "function", + "name": "GI", + "inputs": [], + "outputs": [ { - "internalType": "address", - "name": "owner", - "type": "address" + "name": "", + "type": "uint256", + "internalType": "uint256" } ], - "name": "OwnableInvalidOwner", - "type": "error" + "stateMutability": "view" }, { - "inputs": [ + "type": "function", + "name": "GIstate", + "inputs": [], + "outputs": [ { - "internalType": "address", - "name": "account", - "type": "address" + "name": "", + "type": "uint8", + "internalType": "enum GIstates" } ], - "name": "OwnableUnauthorizedAccount", - "type": "error" + "stateMutability": "view" }, { + "type": "function", + "name": "MAX_REGISTERED_AGGREGATORS", "inputs": [], - "name": "TC_AggregatorAlreadyRegistered", - "type": "error" + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" }, { + "type": "function", + "name": "MIN_T1_MODELS_PER_BATCH", "inputs": [], - "name": "TC_AggregatorNotActive", - "type": "error" + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" }, { + "type": "function", + "name": "T1_AGGREGATORS_PER_BATCH", "inputs": [], - "name": "TC_AggregatorsRegistrationCannotBeFinished", - "type": "error" + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" }, { + "type": "function", + "name": "T1_MODELS_PER_BATCH", "inputs": [], - "name": "TC_AggregatorsRegistrationCannotBeStarted", - "type": "error" + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" }, { - "inputs": [], - "name": "TC_AggregatorsRegistrationNotOpen", - "type": "error" + "type": "function", + "name": "aggSeed", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" }, { - "inputs": [], - "name": "TC_AlreadySubmitted", - "type": "error" + "type": "function", + "name": "aggSeedBlock", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint64", + "internalType": "uint64" + } + ], + "stateMutability": "view" }, { - "inputs": [], - "name": "TC_AuditorCannotBeSetAsSlasher", - "type": "error" + "type": "function", + "name": "aggregatorWeight", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" }, { - "inputs": [], - "name": "TC_AuditorIsNotSlasher", - "type": "error" + "type": "function", + "name": "auditSeed", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" }, { - "inputs": [], - "name": "TC_AuditorsRegistrationCannotBeFinished", - "type": "error" + "type": "function", + "name": "auditSeedBlock", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint64", + "internalType": "uint64" + } + ], + "stateMutability": "view" }, { - "inputs": [], - "name": "TC_AuditorsRegistrationCannotBeStarted", - "type": "error" + "type": "function", + "name": "autoCreateTier1AndTier2", + "inputs": [ + { + "name": "_GI", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "claimDisputeBond", "inputs": [], - "name": "TC_BatchNotFound", - "type": "error" + "outputs": [], + "stateMutability": "nonpayable" }, { - "inputs": [], - "name": "TC_CannotSetTestDataAssignedFlag", - "type": "error" + "type": "function", + "name": "closeDINaggregatorsRegistration", + "inputs": [ + { + "name": "_GI", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" }, { - "inputs": [], - "name": "TC_CoordinatorCannotBeSetAsSlasher", - "type": "error" + "type": "function", + "name": "closeDINauditorsRegistration", + "inputs": [ + { + "name": "_GI", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" }, { - "inputs": [], - "name": "TC_CoordinatorIsNotSlasher", - "type": "error" + "type": "function", + "name": "closeLMsubmissions", + "inputs": [ + { + "name": "_GI", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" }, { - "inputs": [], - "name": "TC_EvalPhaseNotClosed", - "type": "error" + "type": "function", + "name": "closeLMsubmissionsEvaluation", + "inputs": [ + { + "name": "_GI", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" }, { - "inputs": [], - "name": "TC_FailedToCreateAuditorsBatches", - "type": "error" + "type": "function", + "name": "commitT1Aggregation", + "inputs": [ + { + "name": "_GI", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "_batchId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "commitHash", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [], + "stateMutability": "nonpayable" }, { - "inputs": [], - "name": "TC_FailedToFinalizeEvaluation", - "type": "error" + "type": "function", + "name": "commitT2Aggregation", + "inputs": [ + { + "name": "_GI", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "_batchId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "commitHash", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [], + "stateMutability": "nonpayable" }, { - "inputs": [], - "name": "TC_FailedToSlashAuditors", - "type": "error" + "type": "function", + "name": "createAuditorsBatches", + "inputs": [ + { + "name": "_GI", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" }, { - "inputs": [], - "name": "TC_GICannotBeStarted", - "type": "error" + "type": "function", + "name": "dinAggregators", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" }, { + "type": "function", + "name": "dinTaskAuditorContract", "inputs": [], - "name": "TC_GenesisModelHashCannotBeSet", - "type": "error" + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IDINTaskAuditor" + } + ], + "stateMutability": "view" }, { + "type": "function", + "name": "dinToken", "inputs": [], - "name": "TC_InvalidBatch", - "type": "error" + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IERC20" + } + ], + "stateMutability": "view" }, { + "type": "function", + "name": "dinvalidatorStakeContract", "inputs": [], - "name": "TC_LMEvalCannotBeFinished", - "type": "error" + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IDinValidatorStake" + } + ], + "stateMutability": "view" }, { + "type": "function", + "name": "disputeBond", "inputs": [], - "name": "TC_LMEvalCannotBeStarted", - "type": "error" + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" }, { - "inputs": [], - "name": "TC_LMSubmissionsCannotBeStarted", - "type": "error" + "type": "function", + "name": "disputeBondClaimable", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" }, { + "type": "function", + "name": "disputeSeedDelay", "inputs": [], - "name": "TC_LMSubmissionsNotStarted", - "type": "error" + "outputs": [ + { + "name": "", + "type": "uint64", + "internalType": "uint64" + } + ], + "stateMutability": "view" }, { + "type": "function", + "name": "disputeWindow", "inputs": [], - "name": "TC_NoSubmissions", - "type": "error" + "outputs": [ + { + "name": "", + "type": "uint64", + "internalType": "uint64" + } + ], + "stateMutability": "view" }, { - "inputs": [], - "name": "TC_NotBatchAggregator", - "type": "error" - }, - { - "inputs": [], - "name": "TC_NotEnoughApprovedModels", - "type": "error" - }, - { - "inputs": [], - "name": "TC_NotEnoughValidators", - "type": "error" - }, - { - "inputs": [], - "name": "TC_NotReadyForT1Aggregation", - "type": "error" - }, - { - "inputs": [], - "name": "TC_NotReadyForT2Aggregation", - "type": "error" - }, - { - "inputs": [], - "name": "TC_NotReadyToEndGI", - "type": "error" - }, - { - "inputs": [], - "name": "TC_NotReadyToFinalizeT1", - "type": "error" - }, - { - "inputs": [], - "name": "TC_NotReadyToFinalizeT2", - "type": "error" - }, - { - "inputs": [], - "name": "TC_NotReadyToSetTier2Score", - "type": "error" - }, - { - "inputs": [], - "name": "TC_NotReadyToSlashAggregators", - "type": "error" - }, - { - "inputs": [], - "name": "TC_NotReadyToSlashAuditors", - "type": "error" - }, - { - "inputs": [], - "name": "TC_OnlyOneTier2Batch", - "type": "error" - }, - { - "inputs": [], - "name": "TC_T1AggregationNotStarted", - "type": "error" - }, - { - "inputs": [], - "name": "TC_T2AggregationNotStarted", - "type": "error" - }, - { - "inputs": [], - "name": "TC_TaskAuditorContractCannotBeSet", - "type": "error" - }, - { - "inputs": [], - "name": "TC_WrongGI", - "type": "error" - }, - { - "anonymous": false, + "type": "function", + "name": "disputes", "inputs": [ { - "indexed": true, - "internalType": "uint256", - "name": "GI", - "type": "uint256" + "name": "", + "type": "uint256", + "internalType": "uint256" }, { - "indexed": true, - "internalType": "uint256", - "name": "batchId", - "type": "uint256" + "name": "", + "type": "uint8", + "internalType": "enum DINTaskCoordinator.TierKind" }, { - "indexed": true, - "internalType": "address", - "name": "aggregator", - "type": "address" + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "challenger", + "type": "address", + "internalType": "address" }, { - "indexed": false, - "internalType": "bytes32", - "name": "reason", - "type": "bytes32" + "name": "bond", + "type": "uint256", + "internalType": "uint256" }, { - "indexed": false, - "internalType": "uint256", - "name": "requested", - "type": "uint256" + "name": "openedAt", + "type": "uint64", + "internalType": "uint64" }, { - "indexed": false, - "internalType": "uint256", - "name": "actual", - "type": "uint256" - } - ], - "name": "AggregatorSlashed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ + "name": "resolutionDeadline", + "type": "uint64", + "internalType": "uint64" + }, { - "indexed": true, - "internalType": "uint256", - "name": "GI", - "type": "uint256" + "name": "seedBlock", + "type": "uint64", + "internalType": "uint64" }, { - "indexed": true, - "internalType": "address", - "name": "validator", - "type": "address" + "name": "resolved", + "type": "bool", + "internalType": "bool" + }, + { + "name": "upheld", + "type": "bool", + "internalType": "bool" + }, + { + "name": "finalized", + "type": "bool", + "internalType": "bool" + }, + { + "name": "seed", + "type": "bytes32", + "internalType": "bytes32" } ], - "name": "DINValidatorRegistered", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, + "type": "function", + "name": "endGI", "inputs": [ { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" + "name": "_GI", + "type": "uint256", + "internalType": "uint256" } ], - "name": "OwnershipTransferred", - "type": "event" + "outputs": [], + "stateMutability": "nonpayable" }, { - "anonymous": false, + "type": "function", + "name": "expireDispute", "inputs": [ { - "indexed": true, - "internalType": "uint256", - "name": "GI", - "type": "uint256" + "name": "_GI", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "tierKind", + "type": "uint8", + "internalType": "enum DINTaskCoordinator.TierKind" }, { - "indexed": true, - "internalType": "uint256", "name": "batchId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "Tier1BatchAuto", - "type": "event" + "outputs": [], + "stateMutability": "nonpayable" }, { - "anonymous": false, + "type": "function", + "name": "finalizeT1Aggregation", "inputs": [ { - "indexed": true, - "internalType": "uint256", - "name": "GI", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "batchId", - "type": "uint256" + "name": "_GI", + "type": "uint256", + "internalType": "uint256" } ], - "name": "Tier2BatchAuto", - "type": "event" + "outputs": [], + "stateMutability": "nonpayable" }, { - "inputs": [], - "name": "GI", - "outputs": [ + "type": "function", + "name": "finalizeT2Aggregation", + "inputs": [ { - "internalType": "uint256", - "name": "", - "type": "uint256" + "name": "_GI", + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "outputs": [], + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "genesisModelIpfsHash", "inputs": [], - "name": "GIstate", "outputs": [ { - "internalType": "enum GIstates", "name": "", - "type": "uint8" + "type": "bytes32", + "internalType": "bytes32" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], - "name": "MIN_T1_MODELS_PER_BATCH", - "outputs": [ + "type": "function", + "name": "getAggregatorSubmission", + "inputs": [ { - "internalType": "uint256", - "name": "", - "type": "uint256" + "name": "_GI", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "tier", + "type": "uint8", + "internalType": "enum DINTaskCoordinator.TierKind" + }, + { + "name": "_batchId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "aggregator", + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "T1_AGGREGATORS_PER_BATCH", "outputs": [ { - "internalType": "uint256", - "name": "", - "type": "uint256" + "name": "committed", + "type": "bool", + "internalType": "bool" + }, + { + "name": "commitHash", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "submitted", + "type": "bool", + "internalType": "bool" + }, + { + "name": "cid", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "votes", + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], - "name": "T1_MODELS_PER_BATCH", + "type": "function", + "name": "getDINtaskAggregators", + "inputs": [ + { + "name": "_GI", + "type": "uint256", + "internalType": "uint256" + } + ], "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "address[]", + "internalType": "address[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getTier1Batch", "inputs": [ { - "internalType": "uint256", "name": "_GI", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "_id", + "type": "uint256", + "internalType": "uint256" } ], - "name": "autoCreateTier1AndTier2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "outputs": [ + { + "name": "batchId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "validators", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "modelIndexes", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "finalized", + "type": "bool", + "internalType": "bool" + }, + { + "name": "finalCID", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" }, { + "type": "function", + "name": "getTier2Batch", "inputs": [ { - "internalType": "uint256", "name": "_GI", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "_id", + "type": "uint256", + "internalType": "uint256" } ], - "name": "closeDINaggregatorsRegistration", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "outputs": [ + { + "name": "batchId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "validators", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "finalized", + "type": "bool", + "internalType": "bool" + }, + { + "name": "finalCID", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" }, { + "type": "function", + "name": "getTier2Score", "inputs": [ { - "internalType": "uint256", "name": "_GI", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "closeDINauditorsRegistration", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" }, { + "type": "function", + "name": "isDINAggregator", "inputs": [ { - "internalType": "uint256", - "name": "_GI", - "type": "uint256" + "name": "", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "", + "type": "address", + "internalType": "address" } ], - "name": "closeLMsubmissions", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" }, { + "type": "function", + "name": "lockAggSeed", "inputs": [ { - "internalType": "uint256", "name": "_GI", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "closeLMsubmissionsEvaluation", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "lockAuditSeed", "inputs": [ { - "internalType": "uint256", "name": "_GI", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "createAuditorsBatches", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "lockDisputeSeed", "inputs": [ { - "internalType": "uint256", - "name": "", - "type": "uint256" + "name": "_GI", + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "dinAggregators", - "outputs": [ + "name": "tierKind", + "type": "uint8", + "internalType": "enum DINTaskCoordinator.TierKind" + }, { - "internalType": "address", - "name": "", - "type": "address" + "name": "batchId", + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "outputs": [], + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "modelId", "inputs": [], - "name": "dinTaskAuditorContract", "outputs": [ { - "internalType": "contract IDINTaskAuditor", "name": "", - "type": "address" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "networkFeeFloor", "inputs": [], - "name": "dinvalidatorStakeContract", "outputs": [ { - "internalType": "contract IDinValidatorStake", "name": "", - "type": "address" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "openDispute", "inputs": [ { - "internalType": "uint256", "name": "_GI", - "type": "uint256" - } - ], - "name": "endGI", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ + "type": "uint256", + "internalType": "uint256" + }, { - "internalType": "uint256", - "name": "_GI", - "type": "uint256" - } - ], - "name": "finalizeT1Aggregation", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ + "name": "tierKind", + "type": "uint8", + "internalType": "enum DINTaskCoordinator.TierKind" + }, { - "internalType": "uint256", - "name": "_GI", - "type": "uint256" + "name": "batchId", + "type": "uint256", + "internalType": "uint256" } ], - "name": "finalizeT2Aggregation", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "owner", "inputs": [], - "name": "genesisModelIpfsHash", "outputs": [ { - "internalType": "bytes32", "name": "", - "type": "bytes32" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "reEvaluationAssignees", "inputs": [ { - "internalType": "uint256", - "name": "_GI", - "type": "uint256" + "name": "", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "", + "type": "uint8", + "internalType": "enum DINTaskCoordinator.TierKind" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" } ], - "name": "getDINtaskAggregators", "outputs": [ { - "internalType": "address[]", "name": "", - "type": "address[]" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "registerDINaggregator", "inputs": [ { - "internalType": "uint256", "name": "_GI", - "type": "uint256" - }, + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "registrationSlotsReleased", + "inputs": [ { - "internalType": "uint256", - "name": "_id", - "type": "uint256" + "name": "", + "type": "uint256", + "internalType": "uint256" } ], - "name": "getTier1Batch", "outputs": [ { - "internalType": "uint256", - "name": "batchId", - "type": "uint256" - }, - { - "internalType": "address[]", - "name": "validators", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "modelIndexes", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "finalized", - "type": "bool" - }, - { - "internalType": "bytes32", - "name": "finalCID", - "type": "bytes32" + "name": "", + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "releaseGIRegistrationSlots", "inputs": [ { - "internalType": "uint256", "name": "_GI", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "getTier2Batch", + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "resolutionWindow", + "inputs": [], "outputs": [ { - "internalType": "uint256", - "name": "batchId", - "type": "uint256" + "name": "", + "type": "uint64", + "internalType": "uint64" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "resolveDispute", + "inputs": [ + { + "name": "_GI", + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address[]", - "name": "validators", - "type": "address[]" + "name": "tierKind", + "type": "uint8", + "internalType": "enum DINTaskCoordinator.TierKind" }, { - "internalType": "bool", - "name": "finalized", - "type": "bool" + "name": "batchId", + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", - "name": "finalCID", - "type": "bytes32" + "name": "upheld", + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "outputs": [], + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "revealT1Aggregation", "inputs": [ { - "internalType": "uint256", "name": "_GI", - "type": "uint256" - } - ], - "name": "getTier2Score", - "outputs": [ + "type": "uint256", + "internalType": "uint256" + }, { - "internalType": "uint256", - "name": "", - "type": "uint256" + "name": "_batchId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "_aggregationCID", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "salt", + "type": "bytes32", + "internalType": "bytes32" } ], - "stateMutability": "view", - "type": "function" + "outputs": [], + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "revealT2Aggregation", "inputs": [ { - "internalType": "uint256", - "name": "", - "type": "uint256" + "name": "_GI", + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "isDINAggregator", - "outputs": [ + "name": "_batchId", + "type": "uint256", + "internalType": "uint256" + }, { - "internalType": "bool", - "name": "", - "type": "bool" + "name": "_aggregationCID", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "salt", + "type": "bytes32", + "internalType": "bytes32" } ], - "stateMutability": "view", - "type": "function" + "outputs": [], + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "s2SlashFractionBps", "inputs": [], - "name": "owner", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" + }, + { + "type": "function", + "name": "setDINTaskAuditorAsSlasher", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "setDINTaskAuditorContract", "inputs": [ { - "internalType": "uint256", - "name": "_GI", - "type": "uint256" + "name": "_dintaskauditor_contract_address", + "type": "address", + "internalType": "address" } ], - "name": "registerDINaggregator", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "setDINTaskCoordinatorAsSlasher", "inputs": [], - "name": "renounceOwnership", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { - "inputs": [], - "name": "setDINTaskAuditorAsSlasher", + "type": "function", + "name": "setDinToken", + "inputs": [ + { + "name": "_dinToken", + "type": "address", + "internalType": "address" + } + ], "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "setDisputeParams", "inputs": [ { - "internalType": "address", - "name": "_dintaskauditor_contract_address", - "type": "address" + "name": "_disputeBond", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "_disputeWindow", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "_resolutionWindow", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "_disputeSeedDelay", + "type": "uint64", + "internalType": "uint64" } ], - "name": "setDINTaskAuditorContract", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { - "inputs": [], - "name": "setDINTaskCoordinatorAsSlasher", + "type": "function", + "name": "setGenesisModelIpfsHash", + "inputs": [ + { + "name": "_genesisModelIpfsHash", + "type": "bytes32", + "internalType": "bytes32" + } + ], "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "setNetworkFeeFloor", "inputs": [ { - "internalType": "bytes32", - "name": "_genesisModelIpfsHash", - "type": "bytes32" + "name": "_floor", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setS2SlashFractionBps", + "inputs": [ + { + "name": "bps", + "type": "uint256", + "internalType": "uint256" } ], - "name": "setGenesisModelIpfsHash", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "setTestDataAssignedFlag", "inputs": [ { - "internalType": "uint256", "name": "_GI", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bool", "name": "flag", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "name": "setTestDataAssignedFlag", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "setTier2Score", "inputs": [ { - "internalType": "uint256", "name": "_GI", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "_score", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "setTier2Score", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "settleRecomputation", "inputs": [ { - "internalType": "uint256", "name": "_GI", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "tierKind", + "type": "uint8", + "internalType": "enum DINTaskCoordinator.TierKind" + }, + { + "name": "batchId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "confirmed", + "type": "bool", + "internalType": "bool" } ], - "name": "slashAggregators", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "slashAggregators", "inputs": [ { - "internalType": "uint256", "name": "_GI", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "slashAuditors", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "slashAuditors", "inputs": [ { - "internalType": "uint256", "name": "_GI", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "startDINaggregatorsRegistration", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "startDINaggregatorsRegistration", "inputs": [ { - "internalType": "uint256", "name": "_GI", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", "name": "startDINauditorsRegistration", + "inputs": [ + { + "name": "_GI", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "startGI", + "inputs": [ + { + "name": "_GI", + "type": "uint256", + "internalType": "uint256" + } + ], "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "startGI", "inputs": [ { - "internalType": "uint256", "name": "_GI", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "score", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "startGI", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "startLMsubmissions", "inputs": [ { - "internalType": "uint256", "name": "_GI", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "startLMsubmissions", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "startLMsubmissionsEvaluation", "inputs": [ { - "internalType": "uint256", "name": "_GI", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "startLMsubmissionsEvaluation", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "startLMsubmissionsEvaluationReveal", "inputs": [ { - "internalType": "uint256", "name": "_GI", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "startT1Aggregation", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "startT1Aggregation", "inputs": [ { - "internalType": "uint256", "name": "_GI", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "startT2Aggregation", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "startT1AggregationReveal", "inputs": [ { - "internalType": "uint256", "name": "_GI", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_batchId", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "_aggregationCID", - "type": "bytes32" + "type": "uint256", + "internalType": "uint256" } ], - "name": "submitT1Aggregation", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "startT2Aggregation", "inputs": [ { - "internalType": "uint256", "name": "_GI", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_batchId", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "_aggregationCID", - "type": "bytes32" + "type": "uint256", + "internalType": "uint256" } ], - "name": "submitT2Aggregation", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "startT2AggregationReveal", "inputs": [ { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, + "name": "_GI", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "tier1BatchCount", + "inputs": [ { - "internalType": "address", - "name": "", - "type": "address" + "name": "_GI", + "type": "uint256", + "internalType": "uint256" } ], - "name": "t1SubmissionCID", "outputs": [ { - "internalType": "bytes32", "name": "", - "type": "bytes32" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "tier1FinalizedAt", "inputs": [ { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "", - "type": "address" + "type": "uint256", + "internalType": "uint256" } ], - "name": "t1Submitted", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "uint64", + "internalType": "uint64" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "tier2FinalizedAt", "inputs": [ { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "", - "type": "bytes32" + "type": "uint256", + "internalType": "uint256" } ], - "name": "t1Votes", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint64", + "internalType": "uint64" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "tier2Score", "inputs": [ { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "address", "name": "", - "type": "address" + "type": "uint256", + "internalType": "uint256" } ], - "name": "t2SubmissionCID", "outputs": [ { - "internalType": "bytes32", "name": "", - "type": "bytes32" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "totalAggregatorWeight", "inputs": [ { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "address", "name": "", - "type": "address" + "type": "uint256", + "internalType": "uint256" } ], - "name": "t2Submitted", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "transferOwnership", "inputs": [ { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" + "name": "newOwner", + "type": "address", + "internalType": "address" } ], - "name": "t2Votes", + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "treasuryAccrued", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "event", + "name": "AggSeedLocked", "inputs": [ { - "internalType": "uint256", - "name": "_GI", - "type": "uint256" + "name": "GI", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "seed", + "type": "bytes32", + "indexed": false, + "internalType": "bytes32" } ], - "name": "tier1BatchCount", - "outputs": [ + "anonymous": false + }, + { + "type": "event", + "name": "AggSeedReanchored", + "inputs": [ { - "internalType": "uint256", - "name": "", - "type": "uint256" + "name": "GI", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "newSeedBlock", + "type": "uint64", + "indexed": false, + "internalType": "uint64" } ], - "stateMutability": "view", - "type": "function" + "anonymous": false }, { + "type": "event", + "name": "AggregatorSlashed", "inputs": [ { - "internalType": "uint256", - "name": "", - "type": "uint256" + "name": "GI", + "type": "uint256", + "indexed": true, + "internalType": "uint256" }, { - "internalType": "uint256", - "name": "", - "type": "uint256" + "name": "batchId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "aggregator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "reason", + "type": "bytes32", + "indexed": false, + "internalType": "bytes32" + }, + { + "name": "requested", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "actual", + "type": "uint256", + "indexed": false, + "internalType": "uint256" } ], - "name": "tier1Batches", - "outputs": [ + "anonymous": false + }, + { + "type": "event", + "name": "AuditSeedLocked", + "inputs": [ { - "internalType": "uint256", - "name": "batchId", - "type": "uint256" + "name": "GI", + "type": "uint256", + "indexed": true, + "internalType": "uint256" }, { - "internalType": "bool", - "name": "finalized", - "type": "bool" + "name": "seed", + "type": "bytes32", + "indexed": false, + "internalType": "bytes32" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "AuditSeedReanchored", + "inputs": [ + { + "name": "GI", + "type": "uint256", + "indexed": true, + "internalType": "uint256" }, { - "internalType": "bytes32", - "name": "finalCID", - "type": "bytes32" + "name": "newSeedBlock", + "type": "uint64", + "indexed": false, + "internalType": "uint64" } ], - "stateMutability": "view", - "type": "function" + "anonymous": false }, { + "type": "event", + "name": "DINValidatorRegistered", "inputs": [ { - "internalType": "uint256", - "name": "", - "type": "uint256" + "name": "GI", + "type": "uint256", + "indexed": true, + "internalType": "uint256" }, { - "internalType": "uint256", - "name": "", - "type": "uint256" + "name": "validator", + "type": "address", + "indexed": true, + "internalType": "address" } ], - "name": "tier2Batches", - "outputs": [ + "anonymous": false + }, + { + "type": "event", + "name": "DisputeBondClaimed", + "inputs": [ + { + "name": "challenger", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "DisputeExpired", + "inputs": [ + { + "name": "GI", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "tierKind", + "type": "uint8", + "indexed": false, + "internalType": "enum DINTaskCoordinator.TierKind" + }, { - "internalType": "uint256", "name": "batchId", - "type": "uint256" + "type": "uint256", + "indexed": true, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "DisputeOpened", + "inputs": [ + { + "name": "GI", + "type": "uint256", + "indexed": true, + "internalType": "uint256" }, { - "internalType": "bool", - "name": "finalized", - "type": "bool" + "name": "tierKind", + "type": "uint8", + "indexed": false, + "internalType": "enum DINTaskCoordinator.TierKind" }, { - "internalType": "bytes32", - "name": "finalCID", - "type": "bytes32" + "name": "batchId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "challenger", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "bond", + "type": "uint256", + "indexed": false, + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "anonymous": false }, { + "type": "event", + "name": "DisputeResolved", "inputs": [ { - "internalType": "uint256", - "name": "", - "type": "uint256" + "name": "GI", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "tierKind", + "type": "uint8", + "indexed": false, + "internalType": "enum DINTaskCoordinator.TierKind" + }, + { + "name": "batchId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "upheld", + "type": "bool", + "indexed": false, + "internalType": "bool" } ], - "name": "tier2Score", - "outputs": [ + "anonymous": false + }, + { + "type": "event", + "name": "DisputeSeedLocked", + "inputs": [ { - "internalType": "uint256", - "name": "", - "type": "uint256" + "name": "GI", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "tierKind", + "type": "uint8", + "indexed": false, + "internalType": "enum DINTaskCoordinator.TierKind" + }, + { + "name": "batchId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "seed", + "type": "bytes32", + "indexed": false, + "internalType": "bytes32" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "DisputeSeedReanchored", + "inputs": [ + { + "name": "GI", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "tierKind", + "type": "uint8", + "indexed": false, + "internalType": "enum DINTaskCoordinator.TierKind" + }, + { + "name": "batchId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "newSeedBlock", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "GIStateChanged", + "inputs": [ + { + "name": "GI", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "newState", + "type": "uint8", + "indexed": true, + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "anonymous": false }, { + "type": "event", + "name": "OwnershipTransferred", "inputs": [ { - "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { "name": "newOwner", - "type": "address" + "type": "address", + "indexed": true, + "internalType": "address" } ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "anonymous": false + }, + { + "type": "event", + "name": "ReEvaluationAssigned", + "inputs": [ + { + "name": "GI", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "tierKind", + "type": "uint8", + "indexed": false, + "internalType": "enum DINTaskCoordinator.TierKind" + }, + { + "name": "batchId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "freshAggregators", + "type": "address[]", + "indexed": false, + "internalType": "address[]" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RecomputationSettled", + "inputs": [ + { + "name": "GI", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "tierKind", + "type": "uint8", + "indexed": false, + "internalType": "enum DINTaskCoordinator.TierKind" + }, + { + "name": "batchId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "confirmed", + "type": "bool", + "indexed": false, + "internalType": "bool" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "S2SlashFractionBpsUpdated", + "inputs": [ + { + "name": "oldBps", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "newBps", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "T1AggregationCommitted", + "inputs": [ + { + "name": "GI", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "batchId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "aggregator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "commitHash", + "type": "bytes32", + "indexed": false, + "internalType": "bytes32" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "T1AggregationSubmitted", + "inputs": [ + { + "name": "GI", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "batchId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "aggregator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "cid", + "type": "bytes32", + "indexed": false, + "internalType": "bytes32" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "T1BatchFinalized", + "inputs": [ + { + "name": "GI", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "batchId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "winningCID", + "type": "bytes32", + "indexed": false, + "internalType": "bytes32" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "T2AggregationCommitted", + "inputs": [ + { + "name": "GI", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "batchId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "aggregator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "commitHash", + "type": "bytes32", + "indexed": false, + "internalType": "bytes32" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "T2AggregationSubmitted", + "inputs": [ + { + "name": "GI", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "batchId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "aggregator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "cid", + "type": "bytes32", + "indexed": false, + "internalType": "bytes32" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "T2Finalized", + "inputs": [ + { + "name": "GI", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "globalModelCID", + "type": "bytes32", + "indexed": false, + "internalType": "bytes32" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Tier1BatchAuto", + "inputs": [ + { + "name": "GI", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "batchId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Tier2BatchAuto", + "inputs": [ + { + "name": "GI", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "batchId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "OwnableInvalidOwner", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "OwnableUnauthorizedAccount", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ReentrancyGuardReentrantCall", + "inputs": [] + }, + { + "type": "error", + "name": "SafeERC20FailedOperation", + "inputs": [ + { + "name": "token", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "TC_AggSeedAlreadyLocked", + "inputs": [] + }, + { + "type": "error", + "name": "TC_AggSeedBlockNotMined", + "inputs": [] + }, + { + "type": "error", + "name": "TC_AggSeedNotAnchored", + "inputs": [] + }, + { + "type": "error", + "name": "TC_AggSeedNotLocked", + "inputs": [] + }, + { + "type": "error", + "name": "TC_AggregatorAlreadyRegistered", + "inputs": [] + }, + { + "type": "error", + "name": "TC_AggregatorNotActive", + "inputs": [] + }, + { + "type": "error", + "name": "TC_AggregatorsRegistrationCannotBeFinished", + "inputs": [] + }, + { + "type": "error", + "name": "TC_AggregatorsRegistrationCannotBeStarted", + "inputs": [] + }, + { + "type": "error", + "name": "TC_AggregatorsRegistrationNotOpen", + "inputs": [] + }, + { + "type": "error", + "name": "TC_AlreadySubmitted", + "inputs": [] + }, + { + "type": "error", + "name": "TC_AuditSeedAlreadyLocked", + "inputs": [] + }, + { + "type": "error", + "name": "TC_AuditSeedBlockNotMined", + "inputs": [] + }, + { + "type": "error", + "name": "TC_AuditSeedNotAnchored", + "inputs": [] + }, + { + "type": "error", + "name": "TC_AuditSeedNotLocked", + "inputs": [] + }, + { + "type": "error", + "name": "TC_AuditorCannotBeSetAsSlasher", + "inputs": [] + }, + { + "type": "error", + "name": "TC_AuditorIsNotSlasher", + "inputs": [] + }, + { + "type": "error", + "name": "TC_AuditorsRegistrationCannotBeFinished", + "inputs": [] + }, + { + "type": "error", + "name": "TC_AuditorsRegistrationCannotBeStarted", + "inputs": [] + }, + { + "type": "error", + "name": "TC_BatchNotFinalized", + "inputs": [] + }, + { + "type": "error", + "name": "TC_BatchNotFound", + "inputs": [] + }, + { + "type": "error", + "name": "TC_CannotSetTestDataAssignedFlag", + "inputs": [] + }, + { + "type": "error", + "name": "TC_ConcurrentRegistrationCapReached", + "inputs": [] + }, + { + "type": "error", + "name": "TC_CoordinatorCannotBeSetAsSlasher", + "inputs": [] + }, + { + "type": "error", + "name": "TC_CoordinatorIsNotSlasher", + "inputs": [] + }, + { + "type": "error", + "name": "TC_DisputeAlreadyFinalized", + "inputs": [] + }, + { + "type": "error", + "name": "TC_DisputeAlreadyOpen", + "inputs": [] + }, + { + "type": "error", + "name": "TC_DisputeAlreadyResolved", + "inputs": [] + }, + { + "type": "error", + "name": "TC_DisputeNotAwaitingRecomputation", + "inputs": [] + }, + { + "type": "error", + "name": "TC_DisputeNotOpen", + "inputs": [] + }, + { + "type": "error", + "name": "TC_DisputeSeedAlreadyLocked", + "inputs": [] + }, + { + "type": "error", + "name": "TC_DisputeSeedBlockNotMined", + "inputs": [] + }, + { + "type": "error", + "name": "TC_DisputeSeedNotLocked", + "inputs": [] + }, + { + "type": "error", + "name": "TC_DisputeWindowClosed", + "inputs": [] + }, + { + "type": "error", + "name": "TC_EvalPhaseNotClosed", + "inputs": [] + }, + { + "type": "error", + "name": "TC_FailedToCreateAuditorsBatches", + "inputs": [] + }, + { + "type": "error", + "name": "TC_FailedToFinalizeEvaluation", + "inputs": [] + }, + { + "type": "error", + "name": "TC_FailedToSlashAuditors", + "inputs": [] + }, + { + "type": "error", + "name": "TC_GICannotBeStarted", + "inputs": [] + }, + { + "type": "error", + "name": "TC_GIRewardPoolNotFunded", + "inputs": [] + }, + { + "type": "error", + "name": "TC_GenesisModelHashCannotBeSet", + "inputs": [] + }, + { + "type": "error", + "name": "TC_InsufficientSubmissions", + "inputs": [] + }, + { + "type": "error", + "name": "TC_InvalidAddress", + "inputs": [] + }, + { + "type": "error", + "name": "TC_InvalidBatch", + "inputs": [] + }, + { + "type": "error", + "name": "TC_InvalidDisputeParams", + "inputs": [] + }, + { + "type": "error", + "name": "TC_InvalidSlashFraction", + "inputs": [] + }, + { + "type": "error", + "name": "TC_LMEvalCannotBeFinished", + "inputs": [] + }, + { + "type": "error", + "name": "TC_LMEvalCannotBeStarted", + "inputs": [] + }, + { + "type": "error", + "name": "TC_LMSubmissionsCannotBeStarted", + "inputs": [] + }, + { + "type": "error", + "name": "TC_LMSubmissionsNotStarted", + "inputs": [] + }, + { + "type": "error", + "name": "TC_NoBondClaimable", + "inputs": [] + }, + { + "type": "error", + "name": "TC_NoSubmissions", + "inputs": [] + }, + { + "type": "error", + "name": "TC_NotBatchAggregator", + "inputs": [] + }, + { + "type": "error", + "name": "TC_NotEnoughApprovedModels", + "inputs": [] + }, + { + "type": "error", + "name": "TC_NotEnoughValidators", + "inputs": [] + }, + { + "type": "error", + "name": "TC_NotReadyForT1Aggregation", + "inputs": [] + }, + { + "type": "error", + "name": "TC_NotReadyForT2Aggregation", + "inputs": [] + }, + { + "type": "error", + "name": "TC_NotReadyToEndGI", + "inputs": [] + }, + { + "type": "error", + "name": "TC_NotReadyToFinalizeT1", + "inputs": [] + }, + { + "type": "error", + "name": "TC_NotReadyToFinalizeT2", + "inputs": [] + }, + { + "type": "error", + "name": "TC_NotReadyToSetTier2Score", + "inputs": [] + }, + { + "type": "error", + "name": "TC_NotReadyToSlashAggregators", + "inputs": [] + }, + { + "type": "error", + "name": "TC_NotReadyToSlashAuditors", + "inputs": [] + }, + { + "type": "error", + "name": "TC_OnlyOneTier2Batch", + "inputs": [] + }, + { + "type": "error", + "name": "TC_RegistrationCapReached", + "inputs": [] + }, + { + "type": "error", + "name": "TC_ResolutionWindowOpen", + "inputs": [] + }, + { + "type": "error", + "name": "TC_RevealCannotBeStarted", + "inputs": [] + }, + { + "type": "error", + "name": "TC_StakeBelowModelFloor", + "inputs": [] + }, + { + "type": "error", + "name": "TC_T1AggregationNotStarted", + "inputs": [] + }, + { + "type": "error", + "name": "TC_T1AlreadyCommitted", + "inputs": [] + }, + { + "type": "error", + "name": "TC_T1EmptyCommitHash", + "inputs": [] + }, + { + "type": "error", + "name": "TC_T1NoCommitFound", + "inputs": [] + }, + { + "type": "error", + "name": "TC_T1RevealCannotBeStarted", + "inputs": [] + }, + { + "type": "error", + "name": "TC_T1RevealHashMismatch", + "inputs": [] + }, + { + "type": "error", + "name": "TC_T1RevealPhaseNotOpen", + "inputs": [] + }, + { + "type": "error", + "name": "TC_T2AggregationNotStarted", + "inputs": [] + }, + { + "type": "error", + "name": "TC_T2AlreadyCommitted", + "inputs": [] + }, + { + "type": "error", + "name": "TC_T2EmptyCommitHash", + "inputs": [] + }, + { + "type": "error", + "name": "TC_T2NoCommitFound", + "inputs": [] + }, + { + "type": "error", + "name": "TC_T2RevealCannotBeStarted", + "inputs": [] + }, + { + "type": "error", + "name": "TC_T2RevealHashMismatch", + "inputs": [] + }, + { + "type": "error", + "name": "TC_T2RevealPhaseNotOpen", + "inputs": [] + }, + { + "type": "error", + "name": "TC_TaskAuditorContractCannotBeSet", + "inputs": [] + }, + { + "type": "error", + "name": "TC_WrongGI", + "inputs": [] + }, + { + "type": "error", + "name": "TC_ZeroCID", + "inputs": [] } ], - "bytecode": "0x60803460db57601f612bc038819003918201601f19168301916001600160401b0383118484101760df5780849260209460405283398101031260db57516001600160a01b0381169081900360db57331560c8575f8054336001600160a01b0319821681178355604051939290916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a35f600355600180546001600160a01b0319169190911790556004805460ff19169055612acc90816100f48239f35b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080806040526004361015610012575f80fd5b5f905f3560e01c90816304501eec1461272b575080630902e733146126f25780630a2b3382146126285780630ac04340146121475780631511c3a6146120895780631a336bfc14611a0c5780631c2c56bc146119e25780631dfa1ac21461198a5780631f1761d014611932578063246116e6146118545780632b143f03146117fa5780632d8d2d631461172e57806330e5e37f146116ed57806331823a22146116d15780633b0ff6bb146116b35780633b6dffe51461167457806342f775021461161a578063505663e9146115ba578063530a9fb11461152f578063576a91b31461141257806358cdcefa146112915780635bfd7d3a146112375780635fec207c146110f4578063633689411461109a5780636c3e447414610ec85780636d73f80e14610e93578063715018a614610e3957806378737a3914610e105780638b1de7be14610db65780638da5cb5b14610d8f5780639de2f2a014610c99578063aafebd5014610bdd578063acaf042a146102fa578063b3d227a114610b9c578063b4b9db4114610982578063b593d2d514610b48578063b759977014610afd578063b7a0e41c14610987578063bee3fe1714610982578063c0aeb10d14610928578063cad783b2146107a4578063cb404a75146106ae578063d58cc72a14610646578063d6f353a11461061d578063d86795ac146105c3578063e511e8f11461057d578063e547118e14610500578063e55ab71c146104ba578063e57c943e14610464578063e9c8bb5214610438578063f0f95f64146103aa578063f2fde38b14610324578063f34db55e146102fa5763f4eed25314610270575f80fd5b346102f75760203660031901126102f75761028961275f565b610291612971565b60ff6004541660178110156102e3576102d45760018060a01b03166bffffffffffffffffffffffff60a01b6002541617600255600160ff19600454161760045580f35b631f85a85960e31b8252600482fd5b634e487b7160e01b83526021600452602483fd5b80fd5b50346102f75760203660031901126102f75760406020916004358152600f83522054604051908152f35b50346102f75760203660031901126102f75761033e61275f565b610346612971565b6001600160a01b031680156103965781546001600160a01b03198116821783556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b631e4fbdf760e01b82526004829052602482fd5b50346102f7576103b9366127db565b906103c2612971565b60035481036104295760ff6004541660178110156104155760138114159081610409575b506103fa578252600f602052604082205580f35b63c7a0e6e160e01b8352600483fd5b6004915014155f6103e6565b634e487b7160e01b84526021600452602484fd5b6347ca2dcf60e01b8352600483fd5b50346102f757806003193601126102f75760ff600454166040519060178110156102e357602092508152f35b50346102f75760403660031901126102f757602435906001600160a01b03821682036102f75760409060043581526007602052209060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b50346102f75760406104cb36612775565b939182526011602052828220908252602052209060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b50346102f75760203660031901126102f75761051a612971565b6003546004350361056e5760ff60045416601781101561055a5760050361054b57600660ff19600454161760045580f35b6321012b6760e01b8152600490fd5b634e487b7160e01b82526021600452602482fd5b6347ca2dcf60e01b8152600490fd5b50346102f757604061058e36612775565b93918252600b602052828220908252602052209060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b50346102f75760203660031901126102f7576105dd612971565b6003546004350361056e5760ff60045416601781101561055a5760110361060e57601260ff19600454161760045580f35b631416b1a360e01b8152600490fd5b50346102f757806003193601126102f7576001546040516001600160a01b039091168152602090f35b50346102f757610655366127db565b908252600d6020526040822080548210156106aa57610674925061284e565b5080546106a6600360ff6002850154169301546040519384938460409194939260608201958252151560208201520152565b0390f35b8280fd5b50346102f75760203660031901126102f7576004356106cb612971565b60035481036107955760ff6004541660178110156102e3576013036107865760025460405163cb404a7560e01b815260048101929092526020908290602490829086906001600160a01b03165af190811561077b57829161074c575b501561073d57601460ff19600454161760045580f35b634b058d6560e11b8152600490fd5b61076e915060203d602011610774575b6107668183612867565b810190612889565b5f610727565b503d61075c565b6040513d84823e3d90fd5b63b52ae37160e01b8252600482fd5b6347ca2dcf60e01b8252600482fd5b50346102f75760203660031901126102f7576004356107c1612971565b60035481036107955760ff6004541660178110156102e35760120361091957808252600d6020526040822090825b825481101561090857610802818461284e565b506001810180548254879392849190825b84811061085057505050505081156108425790600382600260019594018560ff198254161790550155016107ef565b62b5305b60e51b8652600486fd5b61085a8183612839565b60018060a01b0391549060031b1c16898c52601160205260408c20848d5260205260408c2060018060a01b0382165f5260205260ff60405f2054166108a3575b50600101610813565b898c52601060205260408c20848d5260205260408c209060018060a01b03165f5260205260405f2054898c52601260205260408c20848d5260205260408c20818d5260205260408c20548581116108fb575b5061089a565b909750935060015f6108f5565b83601360ff19600454161760045580f35b63c4d5525560e01b8252600482fd5b50346102f75760203660031901126102f757610942612971565b6003546004350361056e5760ff60045416601781101561055a5760060361097357600760ff19600454161760045580f35b6301876fed60e21b8152600490fd5b61281e565b50346102f75760203660031901126102f7576004356109a4612971565b60035481036107955760ff6004541660178110156102e357601003610aee5780825260086020526040822090825b8254811015610add576109e581846127f1565b506001810180548254879392849190825b848110610a2557505050505081156108425790600482600360019594018560ff198254161790550155016109d2565b610a2f8183612839565b60018060a01b0391549060031b1c16898c52600b60205260408c20848d5260205260408c2060018060a01b0382165f5260205260ff60405f205416610a78575b506001016109f6565b898c52600a60205260408c20848d5260205260408c209060018060a01b03165f5260205260405f2054898c52600c60205260408c20848d5260205260408c20818d5260205260408c2054858111610ad0575b50610a6f565b909750935060015f610aca565b83601160ff19600454161760045580f35b638f5431c960e01b8252600482fd5b50346102f757610b0c366127db565b919081526006602052604081209081548310156102f7576020610b2f8484612839565b905460405160039290921b1c6001600160a01b03168152f35b50346102f75760203660031901126102f757610b62612971565b60ff60045416601781101561055a57600303610b8d57600435600555600460ff198154161760045580f35b631529e88760e31b8152600490fd5b50346102f7576040610bad36612775565b939182526010602052828220908252602052209060018060a01b03165f52602052602060405f2054604051908152f35b50346102f757806003193601126102f757610bf6612971565b60ff60045416601781101561055a57600103610c8a57600154604051633c1a477960e11b815230600482015290602090829060249082906001600160a01b03165afa90811561077b578291610c6b575b5015610c5c57600260ff19600454161760045580f35b634f3572c560e01b8152600490fd5b610c84915060203d602011610774576107668183612867565b5f610c46565b632748c52f60e21b8152600490fd5b50346102f757610ca8366127db565b90610cb1612971565b60ff6004541660178110156104155760048114159081610d83575b50610d74576003549060018201809211610d6057036107955760025482916001600160a01b0390911690813b15610d5c578291602483926040519485938492633f23a7b760e21b845260048401525af1801561077b57610d47575b5050600560ff196004541617600455610d416003546128ae565b60035580f35b81610d5191612867565b6102f757805f610d27565b5050fd5b634e487b7160e01b84526011600452602484fd5b63205400e160e21b8352600483fd5b6016915014155f610ccc565b50346102f757806003193601126102f757546040516001600160a01b039091168152602090f35b50346102f75760203660031901126102f757610dd0612971565b6003546004350361056e5760ff60045416601781101561055a57600703610e0157600860ff19600454161760045580f35b63ca5a3b5560e01b8152600490fd5b50346102f757806003193601126102f7576002546040516001600160a01b039091168152602090f35b50346102f757806003193601126102f757610e52612971565b80546001600160a01b03198116825581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50346102f7576040602091610ea736612745565b918352600c8552838320908352845282822090825283522054604051908152f35b50346102f757610ed736612745565b91600354810361108b5760ff60045416601781101561107757601203611068578161105957808452600e602090815260408086208487528252808620335f908152925290205460ff161561104a576001546040516310ab556b60e21b815233600482015290602090829060249082906001600160a01b03165afa90811561103f578591611020575b5015611011578084526011602090815260408086208487528252808620335f908152925290205460ff16611002578084526011602090815260408086208487528252808620335f818152918452828220805460ff1916600117905584885260108452828820868952845282882090825283528190208590559185526012815281852092855291825280842092845291905281208054610ffd906128ae565b905580f35b636e479ac960e01b8452600484fd5b636936304560e01b8452600484fd5b611039915060203d602011610774576107668183612867565b5f610f5f565b6040513d87823e3d90fd5b6328e28e8360e01b8452600484fd5b6327fda01d60e11b8452600484fd5b636582261960e11b8452600484fd5b634e487b7160e01b85526021600452602485fd5b6347ca2dcf60e01b8452600484fd5b50346102f75760203660031901126102f7576110b4612971565b6003546004350361056e5760ff60045416601781101561055a57600f036110e557601060ff19600454161760045580f35b63076b0ff760e01b8152600490fd5b50346102f75760203660031901126102f75760043560ff6004541660178110156102e357600603611228576001546040516310ab556b60e21b815233600482015290602090829060249082906001600160a01b03165afa90811561121d5783916111fe575b50156111ef57808252600760209081526040808420335f908152925290205460ff166111e057808252600660205261119433604084206128d0565b808252600760209081526040808420335f8181529190935220805460ff19166001179055907f88f3e7b00fb6a3104c7d2c8d3ff669b012e5724bd38e50559cb41d177a3a8ba18380a380f35b6306d4010b60e21b8252600482fd5b636936304560e01b8252600482fd5b611217915060203d602011610774576107668183612867565b5f611159565b6040513d85823e3d90fd5b6331fe69e760e21b8252600482fd5b50346102f75760203660031901126102f757611251612971565b6003546004350361056e5760ff60045416601781101561055a57600a0361128257600b60ff19600454161760045580f35b630d1f756d60e31b8152600490fd5b50346102f7576112a036612745565b91600354810361108b5760ff6004541660178110156110775760100361140357808452600860205260408420548210156113f4578084526009602090815260408086208487528252808620335f908152925290205460ff161561104a576001546040516310ab556b60e21b815233600482015290602090829060249082906001600160a01b03165afa90811561103f5785916113d5575b501561101157808452600b602090815260408086208487528252808620335f908152925290205460ff1661100257808452600b602090815260408086208487528252808620335f818152918452828220805460ff19166001179055848852600a845282882086895284528288209082528352819020859055918552600c815281852092855291825280842092845291905281208054610ffd906128ae565b6113ee915060203d602011610774576107668183612867565b5f611337565b633b554d2360e11b8452600484fd5b637100347160e01b8452600484fd5b50346102f757611421366127db565b906003548111610429578083526008602052604083205482101561152057906114549183526008602052604083206127f1565b50805490600281019060ff60038201541661147660016004840154930161291e565b94604051958660208654918281520190819684526020842090845b81811061150a575050506020916114ad896114c393038a612867565b60405197885260a08389015260a088019061279f565b9686880360408801525196878152019390955b8087106114f25750508394501515606084015260808301520390f35b909360208060019287518152019501960195906114d6565b8254845260209093019260019283019201611491565b631935ca8d60e01b8352600483fd5b50346102f75761153e366127db565b90816115ab57600354811161042957826040916115619452600d6020522061284e565b50805460ff60028301541661157d60016003850154940161291e565b9261159a604051948594855260806020860152608085019061279f565b911515604084015260608301520390f35b6327fda01d60e11b8352600483fd5b50346102f7576115c9366127db565b90825260086020526040822080548210156106aa576115e892506127f1565b5080546106a6600460ff6003850154169301546040519384938460409194939260608201958252151560208201520152565b50346102f75760203660031901126102f757611634612971565b6003546004350361056e5760ff60045416601781101561055a5760150361166557601660ff19600454161760045580f35b6303858c7f60e01b8152600490fd5b50346102f75760203660031901126102f75761169f60406106a692600435815260066020522061291e565b60405191829160208352602083019061279f565b50346102f757806003193601126102f7576020600354604051908152f35b50346102f757806003193601126102f757602060405160028152f35b50346102f75760406116fe36612775565b93918252600a602052828220908252602052209060018060a01b03165f52602052602060405f2054604051908152f35b50346102f75760203660031901126102f75760043561174b612971565b60035481036107955760ff6004541660178110156102e357600b036117eb57600254604051632d8d2d6360e01b815260048101929092526020908290602490829086906001600160a01b03165af190811561077b5782916117cc575b50156117bd57600c60ff19600454161760045580f35b63611d8f8760e01b8152600490fd5b6117e5915060203d602011610774576107668183612867565b5f6117a7565b63c827e84760e01b8252600482fd5b50346102f75760203660031901126102f757611814612971565b6003546004350361056e5760ff60045416601781101561055a5760080361184557600960ff19600454161760045580f35b63768c7a4d60e11b8152600490fd5b50346118fc5760403660031901126118fc57600435602435908115158092036118fc5761187f612971565b60035481036119235760ff60045416601781101561190f57600c03611900576002546001600160a01b031691823b156118fc5760445f928360405195869485936312308b7360e11b8552600485015260248401525af180156118f1576118e3575080f35b6118ef91505f90612867565b005b6040513d5f823e3d90fd5b5f80fd5b630c14724760e31b5f5260045ffd5b634e487b7160e01b5f52602160045260245ffd5b6347ca2dcf60e01b5f5260045ffd5b346118fc5760203660031901126118fc5761194b612971565b600354600435036119235760ff60045416601781101561190f5760090361197b576004805460ff1916600a179055005b63379ffc8d60e11b5f5260045ffd5b346118fc5760203660031901126118fc576119a3612971565b600354600435036119235760ff60045416601781101561190f57600c036119d3576004805460ff1916600d179055005b63c827e84760e01b5f5260045ffd5b346118fc5760203660031901126118fc576004355f526008602052602060405f2054604051908152f35b346118fc5760203660031901126118fc57600435611a28612971565b60035481036119235760ff60045416601781101561190f57600e0361207a575f818152600660205260408120805460015490916001600160a01b0390911690835b838110611ff55750611a7a84612997565b93611a886040519586612867565b808552611a97601f1991612997565b013660208601375f905f5b848110611f645786866003815110611f5557602491611ac0826129d9565b6002546040516327416acd60e21b815260048101839052935f9185919082906001600160a01b03165afa9283156118f1575f93611ec2575b506003835110611eb35782515f198101908111611e1d57803360601b915b611e315750505f915f915f935b60038101808211611e1d57835181111580611dd4575b15611cc957825f52600860205260405f208054600160401b811015611c3357611b67916001820181556127f1565b5091611b72876128ae565b96835560018301905f5b60038110611c5a5750505060039182611b96878a51612911565b10611c47575b600281015f5b848110611be357505090611bdd929154847fb9202018de9f7eba7cdf3f805001edb29b6629a2fd89f5bd9c667a9d99450f655f80a3946128a1565b92611b23565b611bf6611bf0828a6128a1565b8b6128bc565b5190825491600160401b831015611c3357611c18836001809501865585612839565b819291549060031b91821b915f19901b191617905501611ba2565b634e487b7160e01b5f52604160045260245ffd5b9150611c54858851612911565b91611b9c565b600190611c7d6001600160a01b03611c75611bf084876128a1565b5116856128d0565b865f52600960205260405f2086545f5260205260405f20828060a01b03611ca7611bf084876128a1565b5116838060a01b03165f5260205260405f208260ff1982541617905501611b7c565b5082906003611cd9828451612911565b1015611cef575b6004805460ff1916600f179055005b825f52600d60205260405f208054600160401b811015611c3357611d189160018201815561284e565b50915f83555f9160018401925b60038110611d5f575050505054907fcba6d1415af496acc567dab38af44a786626bc3e3c6d0057a8b34329bb31e6ef5f80a3808080611ce0565b600190611d886001600160a01b03611d80611d7a84876128a1565b876128bc565b5116866128d0565b865f52600e60205260405f2086545f5260205260405f20828060a01b03611db2611d7a84876128a1565b5116838060a01b03165f5260205260405f208260ff1982541617905501611d25565b5060038501808611611e1d578751811190811591611df3575b50611b39565b905060028601808711611e1d57885110159081611e12575b5088611ded565b905087511088611e0b565b634e487b7160e01b5f52601160045260245ffd5b84516040516020810191428352836040830152606082015283608082015260748152611e5e609482612867565b519020906001810191828211611e1d57611ead92611e7b916129bb565b611e8581886128bc565b5190611e9c611e94848a6128bc565b5191896128bc565b52611ea782886128bc565b526129af565b80611b16565b634607f5d560e01b5f5260045ffd5b9092503d805f833e611ed48183612867565b8101906020818303126118fc5780519067ffffffffffffffff82116118fc57019080601f830112156118fc578151611f0b81612997565b92611f196040519485612867565b81845260208085019260051b8201019283116118fc57602001905b828210611f45575050509183611af8565b8151815260209182019101611f34565b631571768360e31b5f5260045ffd5b611f6e8183612839565b90546040516310ab556b60e21b815260039290921b1c6001600160a01b031660048201819052909190602083602481895afa80156118f1576001935f91611fd7575b50611fbd575b5001611aa2565b611fd0611fc9866128ae565b95896128bc565b5288611fb6565b611fef915060203d8111610774576107668183612867565b8a611fb0565b611fff8183612839565b90546040516310ab556b60e21b815260039290921b1c6001600160a01b03166004820152602081602481875afa9081156118f1575f9161205c575b50612048575b600101611a69565b936120546001916128ae565b949050612040565b612074915060203d8111610774576107668183612867565b8761203a565b636be945dd60e01b5f5260045ffd5b346118fc575f3660031901126118fc576120a1612971565b60ff60045416601781101561190f5760020361213957600154600254604051633c1a477960e11b81526001600160a01b0391821660048201529160209183916024918391165afa9081156118f1575f9161211a575b501561210b576004805460ff19166003179055005b63f831404160e01b5f5260045ffd5b612133915060203d602011610774576107668183612867565b816120f6565b62bf1abb60e31b5f5260045ffd5b346118fc5760203660031901126118fc57600435612163612971565b60035481036119235760ff60045416601781101561190f5760140361261957600154604051631bad9e0560e11b81529190602090839060049082906001600160a01b03165afa9182156118f1575f926125e5575b50805f52600860205260405f20905f915b80548310156123c6576121db83826127f1565b509060018201905f5b82548110156123b7576121f78184612839565b90545f878152600b60209081526040808320895480855290835281842060039690961b9490941c6001600160a01b0316808452949091528120547320a3a3afaa18afa727afa9aaa126a4a9a9a4a7a760611b94939260ff91909116908161235a575b5015908115612351575b50612274575b5060019150016121e4565b600154604051637dd1602d60e11b81526001600160a01b038381166004830152602482018c9052604482018690529091602091839160649183915f91165af19081156118f1578a9489915f93612317575b506001957fd31b1ab070aba73480b7f863f37fefd98c16862672290e5cadbf1212bf1630cd9161230e8b5495604051938493846040919493926060820195825260208201520152565b0390a488612269565b95509150506020843d8211612349575b8161233460209383612867565b810103126118fc5792518993889060016122c5565b3d9150612327565b9050158a612263565b5f8a8152600a602090815260408083209383529281528282206001600160a01b03871683529052205460048901541491508115612398575b8b612259565b734147475f54315f4241445f434f4e53454e53555360601b9450612392565b509390506001915001916121c8565b8382805f52600d60205260405f20905f915b80548310156125d6576123eb838261284e565b509060018201905f5b82548110156125c7576124078184612839565b90545f878152601160209081526040808320895480855290835281842060039690961b9490941c6001600160a01b0316808452949091528120547320a3a3afaa192fa727afa9aaa126a4a9a9a4a7a760611b94939260ff91909116908161256a575b5015908115612561575b50612484575b5060019150016123f4565b600154604051637dd1602d60e11b81526001600160a01b038381166004830152602482018c9052604482018690529091602091839160649183915f91165af19081156118f1578a9489915f93612527575b506001957fd31b1ab070aba73480b7f863f37fefd98c16862672290e5cadbf1212bf1630cd9161251e8b5495604051938493846040919493926060820195825260208201520152565b0390a488612479565b95509150506020843d8211612559575b8161254460209383612867565b810103126118fc5792518993889060016124d5565b3d9150612537565b9050158a612473565b5f8a81526010602090815260408083209383529281528282206001600160a01b038716835290522054600389015414915081156125a8575b8b612469565b734147475f54325f4241445f434f4e53454e53555360601b94506125a2565b509390506001915001916123d8565b6004805460ff19166015179055005b9091506020813d602011612611575b8161260160209383612867565b810103126118fc575190826121b7565b3d91506125f4565b6360cd0e9960e01b5f5260045ffd5b346118fc5760203660031901126118fc57600435612644612971565b60035481036119235760ff60045416601781101561190f57600d036126e3576002546040516356af71c960e11b81526004810192909252602090829060249082905f906001600160a01b03165af19081156118f1575f916126c4575b50156126b5576004805460ff1916600e179055005b6307fb097360e41b5f5260045ffd5b6126dd915060203d602011610774576107668183612867565b816126a0565b63183dd1d160e21b5f5260045ffd5b346118fc5761270036612745565b915f52601260205260405f20905f5260205260405f20905f52602052602060405f2054604051908152f35b346118fc575f3660031901126118fc576020906005548152f35b60609060031901126118fc57600435906024359060443590565b600435906001600160a01b03821682036118fc57565b60609060031901126118fc5760043590602435906044356001600160a01b03811681036118fc5790565b90602080835192838152019201905f5b8181106127bc5750505090565b82516001600160a01b03168452602093840193909201916001016127af565b60409060031901126118fc576004359060243590565b805482101561280a575f52600560205f20910201905f90565b634e487b7160e01b5f52603260045260245ffd5b346118fc575f3660031901126118fc57602060405160038152f35b805482101561280a575f5260205f2001905f90565b805482101561280a575f5260205f209060021b01905f90565b90601f8019910116810190811067ffffffffffffffff821117611c3357604052565b908160209103126118fc575180151581036118fc5790565b91908201809211611e1d57565b5f198114611e1d5760010190565b805182101561280a5760209160051b010190565b8054600160401b811015611c33576128ed91600182018155612839565b81546001600160a01b0393841660039290921b91821b9390911b1916919091179055565b91908203918211611e1d57565b90604051918281549182825260208201905f5260205f20925f5b81811061294f57505061294d92500383612867565b565b84546001600160a01b0316835260019485019487945060209093019201612938565b5f546001600160a01b0316330361298457565b63118cdaa760e01b5f523360045260245ffd5b67ffffffffffffffff8111611c335760051b60200190565b8015611e1d575f190190565b81156129c5570690565b634e487b7160e01b5f52601260045260245ffd5b805160028110612a92575f198101908111611e1d575f19430190804383119240915b612a055750505050565b82611e1d5783516040516020810191848352836040830152606082015260608152612a31608082612867565b519020906001810191828211611e1d57612a8c92612a4e916129bb565b6001600160a01b03612a6082886128bc565b511690612a816001600160a01b03612a78858a6128bc565b511691886128bc565b52611ea782876128bc565b806129fb565b505056fea26469706673582212201434116cde36799bb1e213e8ff14f244bfd5ad895b2620a4014580d7ab49b3a964736f6c634300081c0033", - "deployedBytecode": "0x6080806040526004361015610012575f80fd5b5f905f3560e01c90816304501eec1461272b575080630902e733146126f25780630a2b3382146126285780630ac04340146121475780631511c3a6146120895780631a336bfc14611a0c5780631c2c56bc146119e25780631dfa1ac21461198a5780631f1761d014611932578063246116e6146118545780632b143f03146117fa5780632d8d2d631461172e57806330e5e37f146116ed57806331823a22146116d15780633b0ff6bb146116b35780633b6dffe51461167457806342f775021461161a578063505663e9146115ba578063530a9fb11461152f578063576a91b31461141257806358cdcefa146112915780635bfd7d3a146112375780635fec207c146110f4578063633689411461109a5780636c3e447414610ec85780636d73f80e14610e93578063715018a614610e3957806378737a3914610e105780638b1de7be14610db65780638da5cb5b14610d8f5780639de2f2a014610c99578063aafebd5014610bdd578063acaf042a146102fa578063b3d227a114610b9c578063b4b9db4114610982578063b593d2d514610b48578063b759977014610afd578063b7a0e41c14610987578063bee3fe1714610982578063c0aeb10d14610928578063cad783b2146107a4578063cb404a75146106ae578063d58cc72a14610646578063d6f353a11461061d578063d86795ac146105c3578063e511e8f11461057d578063e547118e14610500578063e55ab71c146104ba578063e57c943e14610464578063e9c8bb5214610438578063f0f95f64146103aa578063f2fde38b14610324578063f34db55e146102fa5763f4eed25314610270575f80fd5b346102f75760203660031901126102f75761028961275f565b610291612971565b60ff6004541660178110156102e3576102d45760018060a01b03166bffffffffffffffffffffffff60a01b6002541617600255600160ff19600454161760045580f35b631f85a85960e31b8252600482fd5b634e487b7160e01b83526021600452602483fd5b80fd5b50346102f75760203660031901126102f75760406020916004358152600f83522054604051908152f35b50346102f75760203660031901126102f75761033e61275f565b610346612971565b6001600160a01b031680156103965781546001600160a01b03198116821783556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b631e4fbdf760e01b82526004829052602482fd5b50346102f7576103b9366127db565b906103c2612971565b60035481036104295760ff6004541660178110156104155760138114159081610409575b506103fa578252600f602052604082205580f35b63c7a0e6e160e01b8352600483fd5b6004915014155f6103e6565b634e487b7160e01b84526021600452602484fd5b6347ca2dcf60e01b8352600483fd5b50346102f757806003193601126102f75760ff600454166040519060178110156102e357602092508152f35b50346102f75760403660031901126102f757602435906001600160a01b03821682036102f75760409060043581526007602052209060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b50346102f75760406104cb36612775565b939182526011602052828220908252602052209060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b50346102f75760203660031901126102f75761051a612971565b6003546004350361056e5760ff60045416601781101561055a5760050361054b57600660ff19600454161760045580f35b6321012b6760e01b8152600490fd5b634e487b7160e01b82526021600452602482fd5b6347ca2dcf60e01b8152600490fd5b50346102f757604061058e36612775565b93918252600b602052828220908252602052209060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b50346102f75760203660031901126102f7576105dd612971565b6003546004350361056e5760ff60045416601781101561055a5760110361060e57601260ff19600454161760045580f35b631416b1a360e01b8152600490fd5b50346102f757806003193601126102f7576001546040516001600160a01b039091168152602090f35b50346102f757610655366127db565b908252600d6020526040822080548210156106aa57610674925061284e565b5080546106a6600360ff6002850154169301546040519384938460409194939260608201958252151560208201520152565b0390f35b8280fd5b50346102f75760203660031901126102f7576004356106cb612971565b60035481036107955760ff6004541660178110156102e3576013036107865760025460405163cb404a7560e01b815260048101929092526020908290602490829086906001600160a01b03165af190811561077b57829161074c575b501561073d57601460ff19600454161760045580f35b634b058d6560e11b8152600490fd5b61076e915060203d602011610774575b6107668183612867565b810190612889565b5f610727565b503d61075c565b6040513d84823e3d90fd5b63b52ae37160e01b8252600482fd5b6347ca2dcf60e01b8252600482fd5b50346102f75760203660031901126102f7576004356107c1612971565b60035481036107955760ff6004541660178110156102e35760120361091957808252600d6020526040822090825b825481101561090857610802818461284e565b506001810180548254879392849190825b84811061085057505050505081156108425790600382600260019594018560ff198254161790550155016107ef565b62b5305b60e51b8652600486fd5b61085a8183612839565b60018060a01b0391549060031b1c16898c52601160205260408c20848d5260205260408c2060018060a01b0382165f5260205260ff60405f2054166108a3575b50600101610813565b898c52601060205260408c20848d5260205260408c209060018060a01b03165f5260205260405f2054898c52601260205260408c20848d5260205260408c20818d5260205260408c20548581116108fb575b5061089a565b909750935060015f6108f5565b83601360ff19600454161760045580f35b63c4d5525560e01b8252600482fd5b50346102f75760203660031901126102f757610942612971565b6003546004350361056e5760ff60045416601781101561055a5760060361097357600760ff19600454161760045580f35b6301876fed60e21b8152600490fd5b61281e565b50346102f75760203660031901126102f7576004356109a4612971565b60035481036107955760ff6004541660178110156102e357601003610aee5780825260086020526040822090825b8254811015610add576109e581846127f1565b506001810180548254879392849190825b848110610a2557505050505081156108425790600482600360019594018560ff198254161790550155016109d2565b610a2f8183612839565b60018060a01b0391549060031b1c16898c52600b60205260408c20848d5260205260408c2060018060a01b0382165f5260205260ff60405f205416610a78575b506001016109f6565b898c52600a60205260408c20848d5260205260408c209060018060a01b03165f5260205260405f2054898c52600c60205260408c20848d5260205260408c20818d5260205260408c2054858111610ad0575b50610a6f565b909750935060015f610aca565b83601160ff19600454161760045580f35b638f5431c960e01b8252600482fd5b50346102f757610b0c366127db565b919081526006602052604081209081548310156102f7576020610b2f8484612839565b905460405160039290921b1c6001600160a01b03168152f35b50346102f75760203660031901126102f757610b62612971565b60ff60045416601781101561055a57600303610b8d57600435600555600460ff198154161760045580f35b631529e88760e31b8152600490fd5b50346102f7576040610bad36612775565b939182526010602052828220908252602052209060018060a01b03165f52602052602060405f2054604051908152f35b50346102f757806003193601126102f757610bf6612971565b60ff60045416601781101561055a57600103610c8a57600154604051633c1a477960e11b815230600482015290602090829060249082906001600160a01b03165afa90811561077b578291610c6b575b5015610c5c57600260ff19600454161760045580f35b634f3572c560e01b8152600490fd5b610c84915060203d602011610774576107668183612867565b5f610c46565b632748c52f60e21b8152600490fd5b50346102f757610ca8366127db565b90610cb1612971565b60ff6004541660178110156104155760048114159081610d83575b50610d74576003549060018201809211610d6057036107955760025482916001600160a01b0390911690813b15610d5c578291602483926040519485938492633f23a7b760e21b845260048401525af1801561077b57610d47575b5050600560ff196004541617600455610d416003546128ae565b60035580f35b81610d5191612867565b6102f757805f610d27565b5050fd5b634e487b7160e01b84526011600452602484fd5b63205400e160e21b8352600483fd5b6016915014155f610ccc565b50346102f757806003193601126102f757546040516001600160a01b039091168152602090f35b50346102f75760203660031901126102f757610dd0612971565b6003546004350361056e5760ff60045416601781101561055a57600703610e0157600860ff19600454161760045580f35b63ca5a3b5560e01b8152600490fd5b50346102f757806003193601126102f7576002546040516001600160a01b039091168152602090f35b50346102f757806003193601126102f757610e52612971565b80546001600160a01b03198116825581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50346102f7576040602091610ea736612745565b918352600c8552838320908352845282822090825283522054604051908152f35b50346102f757610ed736612745565b91600354810361108b5760ff60045416601781101561107757601203611068578161105957808452600e602090815260408086208487528252808620335f908152925290205460ff161561104a576001546040516310ab556b60e21b815233600482015290602090829060249082906001600160a01b03165afa90811561103f578591611020575b5015611011578084526011602090815260408086208487528252808620335f908152925290205460ff16611002578084526011602090815260408086208487528252808620335f818152918452828220805460ff1916600117905584885260108452828820868952845282882090825283528190208590559185526012815281852092855291825280842092845291905281208054610ffd906128ae565b905580f35b636e479ac960e01b8452600484fd5b636936304560e01b8452600484fd5b611039915060203d602011610774576107668183612867565b5f610f5f565b6040513d87823e3d90fd5b6328e28e8360e01b8452600484fd5b6327fda01d60e11b8452600484fd5b636582261960e11b8452600484fd5b634e487b7160e01b85526021600452602485fd5b6347ca2dcf60e01b8452600484fd5b50346102f75760203660031901126102f7576110b4612971565b6003546004350361056e5760ff60045416601781101561055a57600f036110e557601060ff19600454161760045580f35b63076b0ff760e01b8152600490fd5b50346102f75760203660031901126102f75760043560ff6004541660178110156102e357600603611228576001546040516310ab556b60e21b815233600482015290602090829060249082906001600160a01b03165afa90811561121d5783916111fe575b50156111ef57808252600760209081526040808420335f908152925290205460ff166111e057808252600660205261119433604084206128d0565b808252600760209081526040808420335f8181529190935220805460ff19166001179055907f88f3e7b00fb6a3104c7d2c8d3ff669b012e5724bd38e50559cb41d177a3a8ba18380a380f35b6306d4010b60e21b8252600482fd5b636936304560e01b8252600482fd5b611217915060203d602011610774576107668183612867565b5f611159565b6040513d85823e3d90fd5b6331fe69e760e21b8252600482fd5b50346102f75760203660031901126102f757611251612971565b6003546004350361056e5760ff60045416601781101561055a57600a0361128257600b60ff19600454161760045580f35b630d1f756d60e31b8152600490fd5b50346102f7576112a036612745565b91600354810361108b5760ff6004541660178110156110775760100361140357808452600860205260408420548210156113f4578084526009602090815260408086208487528252808620335f908152925290205460ff161561104a576001546040516310ab556b60e21b815233600482015290602090829060249082906001600160a01b03165afa90811561103f5785916113d5575b501561101157808452600b602090815260408086208487528252808620335f908152925290205460ff1661100257808452600b602090815260408086208487528252808620335f818152918452828220805460ff19166001179055848852600a845282882086895284528288209082528352819020859055918552600c815281852092855291825280842092845291905281208054610ffd906128ae565b6113ee915060203d602011610774576107668183612867565b5f611337565b633b554d2360e11b8452600484fd5b637100347160e01b8452600484fd5b50346102f757611421366127db565b906003548111610429578083526008602052604083205482101561152057906114549183526008602052604083206127f1565b50805490600281019060ff60038201541661147660016004840154930161291e565b94604051958660208654918281520190819684526020842090845b81811061150a575050506020916114ad896114c393038a612867565b60405197885260a08389015260a088019061279f565b9686880360408801525196878152019390955b8087106114f25750508394501515606084015260808301520390f35b909360208060019287518152019501960195906114d6565b8254845260209093019260019283019201611491565b631935ca8d60e01b8352600483fd5b50346102f75761153e366127db565b90816115ab57600354811161042957826040916115619452600d6020522061284e565b50805460ff60028301541661157d60016003850154940161291e565b9261159a604051948594855260806020860152608085019061279f565b911515604084015260608301520390f35b6327fda01d60e11b8352600483fd5b50346102f7576115c9366127db565b90825260086020526040822080548210156106aa576115e892506127f1565b5080546106a6600460ff6003850154169301546040519384938460409194939260608201958252151560208201520152565b50346102f75760203660031901126102f757611634612971565b6003546004350361056e5760ff60045416601781101561055a5760150361166557601660ff19600454161760045580f35b6303858c7f60e01b8152600490fd5b50346102f75760203660031901126102f75761169f60406106a692600435815260066020522061291e565b60405191829160208352602083019061279f565b50346102f757806003193601126102f7576020600354604051908152f35b50346102f757806003193601126102f757602060405160028152f35b50346102f75760406116fe36612775565b93918252600a602052828220908252602052209060018060a01b03165f52602052602060405f2054604051908152f35b50346102f75760203660031901126102f75760043561174b612971565b60035481036107955760ff6004541660178110156102e357600b036117eb57600254604051632d8d2d6360e01b815260048101929092526020908290602490829086906001600160a01b03165af190811561077b5782916117cc575b50156117bd57600c60ff19600454161760045580f35b63611d8f8760e01b8152600490fd5b6117e5915060203d602011610774576107668183612867565b5f6117a7565b63c827e84760e01b8252600482fd5b50346102f75760203660031901126102f757611814612971565b6003546004350361056e5760ff60045416601781101561055a5760080361184557600960ff19600454161760045580f35b63768c7a4d60e11b8152600490fd5b50346118fc5760403660031901126118fc57600435602435908115158092036118fc5761187f612971565b60035481036119235760ff60045416601781101561190f57600c03611900576002546001600160a01b031691823b156118fc5760445f928360405195869485936312308b7360e11b8552600485015260248401525af180156118f1576118e3575080f35b6118ef91505f90612867565b005b6040513d5f823e3d90fd5b5f80fd5b630c14724760e31b5f5260045ffd5b634e487b7160e01b5f52602160045260245ffd5b6347ca2dcf60e01b5f5260045ffd5b346118fc5760203660031901126118fc5761194b612971565b600354600435036119235760ff60045416601781101561190f5760090361197b576004805460ff1916600a179055005b63379ffc8d60e11b5f5260045ffd5b346118fc5760203660031901126118fc576119a3612971565b600354600435036119235760ff60045416601781101561190f57600c036119d3576004805460ff1916600d179055005b63c827e84760e01b5f5260045ffd5b346118fc5760203660031901126118fc576004355f526008602052602060405f2054604051908152f35b346118fc5760203660031901126118fc57600435611a28612971565b60035481036119235760ff60045416601781101561190f57600e0361207a575f818152600660205260408120805460015490916001600160a01b0390911690835b838110611ff55750611a7a84612997565b93611a886040519586612867565b808552611a97601f1991612997565b013660208601375f905f5b848110611f645786866003815110611f5557602491611ac0826129d9565b6002546040516327416acd60e21b815260048101839052935f9185919082906001600160a01b03165afa9283156118f1575f93611ec2575b506003835110611eb35782515f198101908111611e1d57803360601b915b611e315750505f915f915f935b60038101808211611e1d57835181111580611dd4575b15611cc957825f52600860205260405f208054600160401b811015611c3357611b67916001820181556127f1565b5091611b72876128ae565b96835560018301905f5b60038110611c5a5750505060039182611b96878a51612911565b10611c47575b600281015f5b848110611be357505090611bdd929154847fb9202018de9f7eba7cdf3f805001edb29b6629a2fd89f5bd9c667a9d99450f655f80a3946128a1565b92611b23565b611bf6611bf0828a6128a1565b8b6128bc565b5190825491600160401b831015611c3357611c18836001809501865585612839565b819291549060031b91821b915f19901b191617905501611ba2565b634e487b7160e01b5f52604160045260245ffd5b9150611c54858851612911565b91611b9c565b600190611c7d6001600160a01b03611c75611bf084876128a1565b5116856128d0565b865f52600960205260405f2086545f5260205260405f20828060a01b03611ca7611bf084876128a1565b5116838060a01b03165f5260205260405f208260ff1982541617905501611b7c565b5082906003611cd9828451612911565b1015611cef575b6004805460ff1916600f179055005b825f52600d60205260405f208054600160401b811015611c3357611d189160018201815561284e565b50915f83555f9160018401925b60038110611d5f575050505054907fcba6d1415af496acc567dab38af44a786626bc3e3c6d0057a8b34329bb31e6ef5f80a3808080611ce0565b600190611d886001600160a01b03611d80611d7a84876128a1565b876128bc565b5116866128d0565b865f52600e60205260405f2086545f5260205260405f20828060a01b03611db2611d7a84876128a1565b5116838060a01b03165f5260205260405f208260ff1982541617905501611d25565b5060038501808611611e1d578751811190811591611df3575b50611b39565b905060028601808711611e1d57885110159081611e12575b5088611ded565b905087511088611e0b565b634e487b7160e01b5f52601160045260245ffd5b84516040516020810191428352836040830152606082015283608082015260748152611e5e609482612867565b519020906001810191828211611e1d57611ead92611e7b916129bb565b611e8581886128bc565b5190611e9c611e94848a6128bc565b5191896128bc565b52611ea782886128bc565b526129af565b80611b16565b634607f5d560e01b5f5260045ffd5b9092503d805f833e611ed48183612867565b8101906020818303126118fc5780519067ffffffffffffffff82116118fc57019080601f830112156118fc578151611f0b81612997565b92611f196040519485612867565b81845260208085019260051b8201019283116118fc57602001905b828210611f45575050509183611af8565b8151815260209182019101611f34565b631571768360e31b5f5260045ffd5b611f6e8183612839565b90546040516310ab556b60e21b815260039290921b1c6001600160a01b031660048201819052909190602083602481895afa80156118f1576001935f91611fd7575b50611fbd575b5001611aa2565b611fd0611fc9866128ae565b95896128bc565b5288611fb6565b611fef915060203d8111610774576107668183612867565b8a611fb0565b611fff8183612839565b90546040516310ab556b60e21b815260039290921b1c6001600160a01b03166004820152602081602481875afa9081156118f1575f9161205c575b50612048575b600101611a69565b936120546001916128ae565b949050612040565b612074915060203d8111610774576107668183612867565b8761203a565b636be945dd60e01b5f5260045ffd5b346118fc575f3660031901126118fc576120a1612971565b60ff60045416601781101561190f5760020361213957600154600254604051633c1a477960e11b81526001600160a01b0391821660048201529160209183916024918391165afa9081156118f1575f9161211a575b501561210b576004805460ff19166003179055005b63f831404160e01b5f5260045ffd5b612133915060203d602011610774576107668183612867565b816120f6565b62bf1abb60e31b5f5260045ffd5b346118fc5760203660031901126118fc57600435612163612971565b60035481036119235760ff60045416601781101561190f5760140361261957600154604051631bad9e0560e11b81529190602090839060049082906001600160a01b03165afa9182156118f1575f926125e5575b50805f52600860205260405f20905f915b80548310156123c6576121db83826127f1565b509060018201905f5b82548110156123b7576121f78184612839565b90545f878152600b60209081526040808320895480855290835281842060039690961b9490941c6001600160a01b0316808452949091528120547320a3a3afaa18afa727afa9aaa126a4a9a9a4a7a760611b94939260ff91909116908161235a575b5015908115612351575b50612274575b5060019150016121e4565b600154604051637dd1602d60e11b81526001600160a01b038381166004830152602482018c9052604482018690529091602091839160649183915f91165af19081156118f1578a9489915f93612317575b506001957fd31b1ab070aba73480b7f863f37fefd98c16862672290e5cadbf1212bf1630cd9161230e8b5495604051938493846040919493926060820195825260208201520152565b0390a488612269565b95509150506020843d8211612349575b8161233460209383612867565b810103126118fc5792518993889060016122c5565b3d9150612327565b9050158a612263565b5f8a8152600a602090815260408083209383529281528282206001600160a01b03871683529052205460048901541491508115612398575b8b612259565b734147475f54315f4241445f434f4e53454e53555360601b9450612392565b509390506001915001916121c8565b8382805f52600d60205260405f20905f915b80548310156125d6576123eb838261284e565b509060018201905f5b82548110156125c7576124078184612839565b90545f878152601160209081526040808320895480855290835281842060039690961b9490941c6001600160a01b0316808452949091528120547320a3a3afaa192fa727afa9aaa126a4a9a9a4a7a760611b94939260ff91909116908161256a575b5015908115612561575b50612484575b5060019150016123f4565b600154604051637dd1602d60e11b81526001600160a01b038381166004830152602482018c9052604482018690529091602091839160649183915f91165af19081156118f1578a9489915f93612527575b506001957fd31b1ab070aba73480b7f863f37fefd98c16862672290e5cadbf1212bf1630cd9161251e8b5495604051938493846040919493926060820195825260208201520152565b0390a488612479565b95509150506020843d8211612559575b8161254460209383612867565b810103126118fc5792518993889060016124d5565b3d9150612537565b9050158a612473565b5f8a81526010602090815260408083209383529281528282206001600160a01b038716835290522054600389015414915081156125a8575b8b612469565b734147475f54325f4241445f434f4e53454e53555360601b94506125a2565b509390506001915001916123d8565b6004805460ff19166015179055005b9091506020813d602011612611575b8161260160209383612867565b810103126118fc575190826121b7565b3d91506125f4565b6360cd0e9960e01b5f5260045ffd5b346118fc5760203660031901126118fc57600435612644612971565b60035481036119235760ff60045416601781101561190f57600d036126e3576002546040516356af71c960e11b81526004810192909252602090829060249082905f906001600160a01b03165af19081156118f1575f916126c4575b50156126b5576004805460ff1916600e179055005b6307fb097360e41b5f5260045ffd5b6126dd915060203d602011610774576107668183612867565b816126a0565b63183dd1d160e21b5f5260045ffd5b346118fc5761270036612745565b915f52601260205260405f20905f5260205260405f20905f52602052602060405f2054604051908152f35b346118fc575f3660031901126118fc576020906005548152f35b60609060031901126118fc57600435906024359060443590565b600435906001600160a01b03821682036118fc57565b60609060031901126118fc5760043590602435906044356001600160a01b03811681036118fc5790565b90602080835192838152019201905f5b8181106127bc5750505090565b82516001600160a01b03168452602093840193909201916001016127af565b60409060031901126118fc576004359060243590565b805482101561280a575f52600560205f20910201905f90565b634e487b7160e01b5f52603260045260245ffd5b346118fc575f3660031901126118fc57602060405160038152f35b805482101561280a575f5260205f2001905f90565b805482101561280a575f5260205f209060021b01905f90565b90601f8019910116810190811067ffffffffffffffff821117611c3357604052565b908160209103126118fc575180151581036118fc5790565b91908201809211611e1d57565b5f198114611e1d5760010190565b805182101561280a5760209160051b010190565b8054600160401b811015611c33576128ed91600182018155612839565b81546001600160a01b0393841660039290921b91821b9390911b1916919091179055565b91908203918211611e1d57565b90604051918281549182825260208201905f5260205f20925f5b81811061294f57505061294d92500383612867565b565b84546001600160a01b0316835260019485019487945060209093019201612938565b5f546001600160a01b0316330361298457565b63118cdaa760e01b5f523360045260245ffd5b67ffffffffffffffff8111611c335760051b60200190565b8015611e1d575f190190565b81156129c5570690565b634e487b7160e01b5f52601260045260245ffd5b805160028110612a92575f198101908111611e1d575f19430190804383119240915b612a055750505050565b82611e1d5783516040516020810191848352836040830152606082015260608152612a31608082612867565b519020906001810191828211611e1d57612a8c92612a4e916129bb565b6001600160a01b03612a6082886128bc565b511690612a816001600160a01b03612a78858a6128bc565b511691886128bc565b52611ea782876128bc565b806129fb565b505056fea26469706673582212201434116cde36799bb1e213e8ff14f244bfd5ad895b2620a4014580d7ab49b3a964736f6c634300081c0033", - "linkReferences": {}, - "deployedLinkReferences": {} -} + "bytecode": "0x60a03461016957601f615d4b38819003918201601f19168301916001600160401b0383118484101761016d5780849260409485528339810103126101695780516001600160a01b038116919082900361016957602001513315610156575f8054336001600160a01b0319821681178355604051949290916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a35f60035568056bc75e2d63100000601b55601c80546001600160c01b0319167007000000000002a3000000000000015180179055610bb8602355801561014757600180546001600160a01b0319169190911790556080526004805460ff191690555f807fa8f52d7b4405100a39ccc552ccc9426d860b1e822c71e97675d1623b49db6bab8180a3615bc990816101828239608051818181611f0c0152612cfb0152f35b63f70949a160e01b5f5260045ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080806040526004361015610012575f80fd5b5f3560e01c90816304501eec1461504a5750806309adabf514614c3e5780630a2b338214614b185780630ac043401461447f5780630e84af231461422c578063117f5f92146142065780631511c3a61461413357806317baaf2014614116578063199efdf4146140ec5780631a336bfc14613a015780631c2c56bc146139d75780631d9e72951461359e5780631dfa1ac21461353f5780631eb30bfe146134fb5780631f1761d01461348d5780631f83192c1461345e5780632059a899146133a55780632450922014613388578063246116e6146132ed57806324e168af146132a15780632a9cafbe146132805780632b143f03146132125780632d8d2d631461311057806331823a22146130f557806332280eed14612f2557806337d274c914612ef25780633a0ea70414612ec95780633b0ff6bb14612eac5780633b6dffe514612e595780633ce58bba14612deb57806342f7750214612d1e57806343cdaad214612ce457806346bf820a14612c765780634774b52414612bfa5780634e649ca71461281b578063530a9fb114612794578063576a91b31461266357806358aed7bc1461263b578063595e3411146125cd5780635b0283ef146123655780635bfd7d3a146122b05780635fec207c14611e555780636336894114611de7578063715018a614611d90578063747a21fe14611d7457806378737a3914611d4c5780637c4596c714611ba1578063868276ab14611b8457806388c2978514611aaa578063894f4dd114611a725780638b1de7be14611a045780638cfbd515146119de5780638da5cb5b146119b7578063914b92cd146116ec5780639de2f2a01461159c578063a120c41a14611576578063a7e10e281461153e578063aafebd501461146e578063ac0c7d5114611445578063ac9fc1001461142c578063acaf042a1461049a578063adabd801146113f9578063b4b9db4114610f89578063b593d2d514611394578063b61998b61461129d578063b6f104a814611273578063b759977014611244578063b7696bd6146111d3578063b7a0e41c14610f8e578063bee3fe1714610f89578063c0aeb10d14610f1b578063c6e8fc6f14610d61578063c9ad03c814610d29578063cad783b214610aca578063cb404a75146109cf578063cc279009146109b2578063d6f353a11461098a578063d86795ac1461091c578063e2852e3f146108f3578063e547118e14610885578063e57c943e1461083c578063e6f5e11914610689578063e9c8bb5214610660578063ead1df17146105c3578063f0f95f6414610549578063f2fde38b146104c4578063f34db55e1461049a5763f4eed253146103e4575f80fd5b34610496576020366003190112610496576103fd6150eb565b610405615769565b60ff60045416601a81101561048257610473576001600160a01b03168015610464576bffffffffffffffffffffffff60a01b6002541617600255600160ff19600454161760045560016003545f516020615b345f395f51905f525f80a3005b63f70949a160e01b5f5260045ffd5b631f85a85960e31b5f5260045ffd5b634e487b7160e01b5f52602160045260245ffd5b5f80fd5b34610496576020366003190112610496576004355f526012602052602060405f2054604051908152f35b34610496576020366003190112610496576104dd6150eb565b6104e5615769565b6001600160a01b03168015610536575f80546001600160a01b03198116831782556001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3005b631e4fbdf760e01b5f525f60045260245ffd5b346104965761055736615153565b90610560615769565b60035481036105b45760ff60045416601a81101561048257601681141590816105a8575b50610599575f52601260205260405f20555f80f35b63c7a0e6e160e01b5f5260045ffd5b60049150141583610584565b6347ca2dcf60e01b5f5260045ffd5b34610496575f366003190112610496576105db615a38565b335f52602860205260405f2054801561065257335f81815260286020526040812055601a546106149183916001600160a01b0316615a6d565b6040519081527fa09dd3797281514bc434a54ae8b69a6d02ae2fdbfab7c86dc8975163fd0045d060203392a25f5f516020615b745f395f51905f525d005b621db6b160e21b5f5260045ffd5b34610496575f3660031901126104965760ff60045416604051601a821015610482576020918152f35b346104965760803660031901126104965760243560043560028210156104965760643590604435906001600160a01b03831683036104965760a093610790575f818152600f6020908152604080832085845282528083205f196001891b019690961680845295825280832054848452600e83528184208685528352818420878552835281842054858552600c84528285208786528452828520888652845282852054868652600b8552838620888752855283862098865297845282852054958552600d84528285209685529583528184208585529092529091205460ff9182169490939116905b604051941515855260208501521515604084015260608301526080820152f35b5f81815260176020908152604080832085845282528083205f196001891b01969096168084529582528083205484845260168352818420868552835281842087855283528184205485855260148452828520878652845282852088865284528285205486865260138552838620888752855283862098865297845282852054958552601584528285209685529583528184208585529092529091205460ff918216949093911690610770565b34610496576040366003190112610496576108556150d5565b6004355f52600760205260405f209060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b346104965760203660031901126104965761089e615769565b600354600435036105b45760ff60045416601a811015610482576005036108e457600660ff19600454161760045560066003545f516020615b345f395f51905f525f80a3005b6321012b6760e01b5f5260045ffd5b34610496576020366003190112610496576004355f5260208052602060405f2054604051908152f35b3461049657602036600319011261049657610935615769565b600354600435036105b45760ff60045416601a8110156104825760130361097b57601460ff19600454161760045560146003545f516020615b345f395f51905f525f80a3005b631416b1a360e01b5f5260045ffd5b34610496575f366003190112610496576001546040516001600160a01b039091168152602090f35b34610496575f366003190112610496576020602154604051908152f35b34610496576020366003190112610496576004356109eb615769565b60035481036105b45760ff60045416601a81101561048257601603610abb5760025460405163cb404a7560e01b81526004810192909252602090829060249082905f906001600160a01b03165af1908115610ab0575f91610a81575b5015610a7257601760ff19600454161760045560176003545f516020615b345f395f51905f525f80a3005b634b058d6560e11b5f5260045ffd5b610aa3915060203d602011610aa9575b610a9b8183615222565b810190615243565b81610a47565b503d610a91565b6040513d5f823e3d90fd5b63b52ae37160e01b5f5260045ffd5b3461049657602036600319011261049657600435610ae6615769565b60035481036105b45760ff60045416601a81101561048257601503610d1a575f81815260106020526040812091426001600160401b0316915b8354811015610cf557610b328185615274565b505f5f905f935f9760018501985b8954811015610c5257610b53818b61519e565b60018060a01b0391549060031b1c16885f52601460205260405f20875490815f5260205260405f2060018060a01b0383165f5260205260ff60405f205416610be2575b5090600191895f52601860205260405f2090838060a01b03165f5260205260405f20610bc2815461528d565b9055885f52601960205260405f20610bda815461528d565b905501610b40565b97610bec9061528d565b97895f52601360205260405f20815f5260205260405f2060018060a01b0383165f5260205260405f2054908a5f52601560205260405f20905f5260205260405f20815f5260205260405f2054878111610c46575b50610b96565b9650945060018c610c40565b50969750929150928315610ce757600211610cd8577f9bca595da6d2d1ae0f0ef7abe316afdd467890adf8eb5a2234a8af80f8d151b760206001948360028895018760ff19825416179055816003820155845f526025835260405f2090545f52825260405f20896001600160401b0319825416179055604051908152a201929192610b1f565b6380c2216560e01b5f5260045ffd5b62b5305b60e51b5f5260045ffd5b601660ff19600454161760045560166003545f516020615b345f395f51905f525f80a3005b63c4d5525560e01b5f5260045ffd5b34610496576020366003190112610496576001600160a01b03610d4a6150eb565b165f526028602052602060405f2054604051908152f35b3461049657610d6f36615169565b9160035481036105b45760ff60045416601a81101561048257601403610f0c5781610efd575f818152601160209081526040808320858452825280832033845290915290205460ff1615610eee576001546040516310ab556b60e21b815233600482015290602090829060249082906001600160a01b03165afa908115610ab0575f91610ecf575b5015610ec0578215610eb1575f818152601760209081526040808320858452825280832033845290915290205460ff16610ea2575f818152601660209081526040808320858452825280832033808552908352818420879055848452601783528184208685528352818420818552835292819020805460ff191660011790555194855290937f430cf27dfb66aa7260b606dbba6d3d2600983f065b1e30ffcab0e6457f3776c39190a4005b6343a311af60e01b5f5260045ffd5b630e660de560e11b5f5260045ffd5b636936304560e01b5f5260045ffd5b610ee8915060203d602011610aa957610a9b8183615222565b84610df7565b6328e28e8360e01b5f5260045ffd5b6327fda01d60e11b5f5260045ffd5b636582261960e11b5f5260045ffd5b3461049657602036600319011261049657610f34615769565b600354600435036105b45760ff60045416601a81101561048257600603610f7a57600760ff19600454161760045560076003545f516020615b345f395f51905f525f80a3005b6301876fed60e21b5f5260045ffd5b615183565b3461049657602036600319011261049657600435610faa615769565b60035481036105b45760ff60045416601a811015610482576012036111c4575f81815260096020526040812091426001600160401b0316915b835481101561119f57610ff6818561525b565b5060018101945f9485938492835b895481101561111757611017818b61519e565b60018060a01b0391549060031b1c16885f52600c60205260405f20875490815f5260205260405f2060018060a01b0383165f5260205260ff60405f2054166110a6575b5090600191895f52601860205260405f2090838060a01b03165f5260205260405f20611086815461528d565b9055885f52601960205260405f2061109e815461528d565b905501611004565b976110b09061528d565b97895f52600b60205260405f20815f5260205260405f2060018060a01b0383165f5260205260405f2054908a5f52600d60205260405f20905f5260205260405f20815f5260205260405f205487811161110a575b5061105a565b909a50955060018c611104565b5096925092939096508115610ce757600211610cd857837fb1becb4dbd2440a1dbd1bac657cc9dbbe112f85f7a99012f71aff4bab4acc5a86020856003600197018760ff19825416179055846004820155835f526024825260405f2081545f52825260405f208a6001600160401b03198254161790555493604051908152a301929192610fe3565b601360ff19600454161760045560136003545f516020615b345f395f51905f525f80a3005b638f5431c960e01b5f5260045ffd5b346104965760803660031901126104965760243560028110156104965761120a606435916004355f52602760205260405f20615101565b6044355f5260205260405f2080548210156104965760209161122b9161519e565b905460405160039290921b1c6001600160a01b03168152f35b346104965761125236615153565b905f52600660205260405f2080548210156104965760209161122b9161519e565b34610496576020366003190112610496576004355f526019602052602060405f2054604051908152f35b3461049657608036600319011261049657600435602435906001600160401b03821680920361049657604435906001600160401b0382169283830361049657606435936001600160401b038516808603610496576112f9615769565b831591821561138b575b8215611382575b508115611379575b811561136d575b5061135e5767ffffffffffffffff60401b91601b55601c54936001600160401b0360801b9060801b16936001600160401b0360c01b16179160401b161717601c555f80f35b631218659f60e01b5f5260045ffd5b61010091501185611319565b80159150611312565b1591508661130a565b83159250611303565b34610496576020366003190112610496576113ad615769565b60ff60045416601a811015610482576003036113ea5760048035600555805460ff1916811781556003545f516020615b345f395f51905f525f80a3005b631529e88760e31b5f5260045ffd5b34610496576020366003190112610496576004355f52601f60205260206001600160401b0360405f205416604051908152f35b346104965761144361143d366150b2565b916155e7565b005b34610496575f3660031901126104965760206001600160401b03601c5460801c16604051908152f35b34610496575f36600319011261049657611486615769565b60ff60045416601a8110156104825760010361152f57600154604051633c1a477960e11b815230600482015290602090829060249082906001600160a01b03165afa908115610ab0575f91611510575b501561150157600260ff19600454161760045560026003545f516020615b345f395f51905f525f80a3005b634f3572c560e01b5f5260045ffd5b611529915060203d602011610aa957610a9b8183615222565b816114d6565b632748c52f60e21b5f5260045ffd5b346104965761154c36615153565b905f52602560205260405f20905f5260205260206001600160401b0360405f205416604051908152f35b346104965760203660031901126104965760043560035481036105b45761144390615497565b34610496576115aa36615153565b6115b2615769565b60ff60045416601a81101561048257600481141590816116e0575b506116d157600354600181018091116116bd5782036105b4576002546040516331ec4e2560e21b815260048101939093526001600160a01b031691602081602481865afa908115610ab0575f9161168b575b501561167c57813b15610496575f91602483926040519485938492633f23a7b760e21b845260048401525af18015610ab05761166c575b61166160035461528d565b60035561144361594d565b5f61167691615222565b80611656565b6333b8921f60e21b5f5260045ffd5b90506020813d6020116116b5575b816116a660209383615222565b8101031261049657518361161f565b3d9150611699565b634e487b7160e01b5f52601160045260245ffd5b63205400e160e21b5f5260045ffd5b601991501415836115cd565b34610496576116fa366150b2565b825f9392935260266020526117128360405f20615101565b815f5260205260405f2090600282019283549260ff8460c01c16806119aa575b1561199b5760ff8460d01c1661198c576001600160401b038460401c1642111561197d5760ff60d01b19909316600160d01b17909355600182015491546001600160a01b03165f90815260286020526040902080546117cb9460049490929161179b919061529b565b9055805f5260276020526117b28560405f20615101565b825f526020526117d260405f206040519586809261530a565b0385615222565b600154604051631bad9e0560e11b81529360209185919082906001600160a01b03165afa928315610ab0575f93611949575b505f5b8451811015611914576001545f91906020906001600160a01b0390811690606490611832858b6152a8565b51166040519586938492637dd1602d60e11b845260048401528a60248401527814cd17d1949154d217d4d55091d493d55417d512535153d555603a1b60448401525af18015610ab0575f906118e2575b6001925084845f516020615b545f395f51905f5260606001600160a01b036118aa878d6152a8565b511694604051907814cd17d1949154d217d4d55091d493d55417d512535153d555603a1b82528b60208301526040820152a401611807565b506020823d821161190c575b816118fb60209383615222565b810103126104965760019151611882565b3d91506118ee565b507ff42fd7a6ed54d90eb785299babf26fd989424f01778ddc07a710b65b7effc0ca60208661194660405180926151fa565ba3005b9092506020813d602011611975575b8161196560209383615222565b8101031261049657519185611804565b3d9150611958565b63aa161f2160e01b5f5260045ffd5b631a3b0bef60e01b5f5260045ffd5b630a18626760e21b5f5260045ffd5b5060ff8460c81c16611732565b34610496575f366003190112610496575f546040516001600160a01b039091168152602090f35b346104965760203660031901126104965760043560035481036105b4576114439061534a565b3461049657602036600319011261049657611a1d615769565b600354600435036105b45760ff60045416601a81101561048257600703611a6357600860ff19600454161760045560086003545f516020615b345f395f51905f525f80a3005b63ca5a3b5560e01b5f5260045ffd5b3461049657611a8036615153565b905f52602460205260405f20905f5260205260206001600160401b0360405f205416604051908152f35b3461049657602036600319011261049657600435611ac6615769565b60ff60045416601a8110156104825760048114159081611b78575b506116d157600354600181018091116116bd5781036105b4576002546040516331ec4e2560e21b81526004810192909252602090829060249082906001600160a01b03165afa908115610ab0575f91611b46575b501561167c5761166160035461528d565b90506020813d602011611b70575b81611b6160209383615222565b81010312610496575181611b35565b3d9150611b54565b60199150141582611ae1565b34610496575f366003190112610496576020602254604051908152f35b3461049657611baf36615169565b9160035481036105b45760ff60045416601a81101561048257601103611d3d57805f52600960205260405f2054821015611d2e575f818152600a60209081526040808320858452825280832033845290915290205460ff1615610eee576001546040516310ab556b60e21b815233600482015290602090829060249082906001600160a01b03165afa908115610ab0575f91611d0f575b5015610ec0578215611d00575f818152600f60209081526040808320858452825280832033845290915290205460ff16611cf1575f818152600e60209081526040808320858452825280832033808552908352818420879055848452600f83528184208685528352818420818552835292819020805460ff191660011790555194855290937fc33cb04355b8f36a3e3860fb823d630cc37a5833cf62828f742e70bdd3751eac9190a4005b63432cb74f60e11b5f5260045ffd5b63d5d0c92560e01b5f5260045ffd5b611d28915060203d602011610aa957610a9b8183615222565b84611c46565b633b554d2360e11b5f5260045ffd5b637100347160e01b5f5260045ffd5b34610496575f366003190112610496576002546040516001600160a01b039091168152602090f35b34610496575f36600319011261049657602060405161012c8152f35b34610496575f36600319011261049657611da8615769565b5f80546001600160a01b0319811682556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461049657602036600319011261049657611e00615769565b600354600435036105b45760ff60045416601a81101561048257601003611e4657601160ff19600454161760045560116003545f516020615b345f395f51905f525f80a3005b63076b0ff760e01b5f5260045ffd5b346104965760203660031901126104965760043560035481036105b45760ff60045416601a811015610482576006036122a1576001546040516310ab556b60e21b81523360048201526001600160a01b0390911690602081602481855afa908115610ab0575f91612282575b5015610ec0575f82815260076020908152604080832033845290915290205460ff1661227357815f52600660205261012c60405f2054101561226457604051634ab989d560e01b81527f00000000000000000000000000000000000000000000000000000000000000006004820152602081602481855afa908115610ab0575f91612232575b5080151590816121cb575b506121bc5760405163f2d679bf60e01b8152602081600481855afa908115610ab0575f9161218a575b5080612032575b5050805f526006602052611f993360405f206152bc565b5f8181526007602090815260408083203384529091529020805460ff19166001908117909155546001600160a01b0316803b15610496575f80916024604051809481936347e91db160e01b83523360048401525af18015610ab057612022575b5033907f88f3e7b00fb6a3104c7d2c8d3ff669b012e5724bd38e50559cb41d177a3a8ba15f80a3005b5f61202c91615222565b81611ff9565b6040516303d3b32360e51b8152336004820152602081602481865afa908115610ab0575f91612158575b50604051631bad9e0560e11b815290602082600481875afa918215610ab0575f92612124575b5081156121105760249260209261209992046151e7565b926040519283809263b998328360e01b82523360048301525afa908115610ab0575f916120de575b5010156120cf578180611f82565b634f21e5ed60e11b5f5260045ffd5b90506020813d602011612108575b816120f960209383615222565b810103126104965751836120c1565b3d91506120ec565b634e487b7160e01b5f52601260045260245ffd5b9091506020813d602011612150575b8161214060209383615222565b8101031261049657519085612082565b3d9150612133565b90506020813d602011612182575b8161217360209383615222565b8101031261049657518461205c565b3d9150612166565b90506020813d6020116121b4575b816121a560209383615222565b81010312610496575183611f7b565b3d9150612198565b631931d5eb60e01b5f5260045ffd5b6040516303d3b32360e51b8152336004820152909150602081602481865afa908115610ab0575f91612200575b501083611f52565b90506020813d60201161222a575b8161221b60209383615222565b810103126104965751846121f8565b3d915061220e565b90506020813d60201161225c575b8161224d60209383615222565b81010312610496575183611f47565b3d9150612240565b63083a2c5d60e01b5f5260045ffd5b6306d4010b60e21b5f5260045ffd5b61229b915060203d602011610aa957610a9b8183615222565b83611ec1565b6331fe69e760e21b5f5260045ffd5b34610496576020366003190112610496576004356122cc615769565b60035481036105b45760ff60045416601a81101561048257600a036123565761230c6001600160401b03601c5460801c166001600160401b0343166151c7565b905f52601f6020526001600160401b0360405f2091166001600160401b0319825416179055600b60ff196004541617600455600b6003545f516020615b345f395f51905f525f80a3005b630d1f756d60e31b5f5260045ffd5b346104965761237336615094565b60039391935482036105b45760ff60045416601a811015610482576015036125be5782610efd575f828152601160209081526040808320868452825280832033845290915290205460ff1615610eee576001546040516310ab556b60e21b815233600482015290602090829060249082906001600160a01b03165afa908115610ab0575f9161259f575b5015610ec0575f828152601760209081526040808320868452825280832033845290915290205460ff1615612590575f828152601460209081526040808320868452825280832033845290915290205460ff16612581578315612572576040805160208101868152918101929092523360608301526080820183905290600160a082015260c0808201859052815261249660e082615222565b5190205f828152601660209081526040808320868452825280832033845290915290205403612563575f818152601460209081526040808320858452825280832033808552908352818420805460ff1916600117905584845260138352818420868552835281842081855283529281902086905551858152849184917ff381116b332b24a3860f90e240a69b31a4eb09c27b59cc54e049aad99897e97c9190a45f52601560205260405f20905f5260205260405f20905f5260205260405f2061255f815461528d565b9055005b634407f1db60e01b5f5260045ffd5b63010e92c160e11b5f5260045ffd5b636e479ac960e01b5f5260045ffd5b6343d466b760e11b5f5260045ffd5b6125b8915060203d602011610aa957610a9b8183615222565b856123fd565b63e396ca2760e01b5f5260045ffd5b34610496576020366003190112610496576125e6615769565b600354600435036105b45760ff60045416601a8110156104825760110361262c57601260ff19600454161760045560126003545f516020615b345f395f51905f525f80a3005b63e89736d560e01b5f5260045ffd5b34610496575f36600319011261049657601a546040516001600160a01b039091168152602090f35b346104965761267136615153565b9060035481116105b457805f52600960205260405f2054821015612785576001916126a6915f52600960205260405f2061525b565b50805490600281019060ff6003820154166126d76004830154926126d0604051809881930161530a565b0386615222565b604051948580966020865491828152019081965f5260205f20905f5b81811061276c575050509161270f612725926020940389615222565b60405196875260a08388015260a0870190615117565b958587036040870152519586815201925f955b8087106127545750508394501515606084015260808301520390f35b90936020806001928751815201950196019590612738565b825484528a9450602090930192600192830192016126f3565b631935ca8d60e01b5f5260045ffd5b34610496576127a236615153565b9081610efd5760035481116105b4576001916127c8915f52601060205260405f20615274565b5080549060ff600282015416906127ee6003820154916117cb604051809781930161530a565b61280a6040519485948552608060208601526080850190615117565b911515604084015260608301520390f35b346104965761282936615064565b92612832615769565b805f5260266020526128478360405f20615101565b825f5260205260405f2060028101805460ff8160c01c1680612bed575b1561199b5760ff8160d01c1661198c5760ff60d01b1916600160d01b1790558415612bb657600181015490546001600160a01b03165f908152602860205260409020805490916128b39161529b565b905560028310156104825760046128f6948415805f14612b9557835f5260096020526128fd60016128e78760405f2061525b565b50015b6040519889809261530a565b0388615222565b8015612b7557835f526009602052826129198660405f2061525b565b500154915b600154604051631bad9e0560e11b81529460209186919082906001600160a01b03165afa938415610ab0575f94612b41575b505f5b8851811015612b01578215612ac057855f52600b60205260405f20875f5260205260405f2060018060a01b03612989838c6152a8565b511660018060a01b03165f526020528360405f20545b03612ab8576001545f91906020906001600160a01b03908116906064906129c6858f6152a8565b51166040519586938492637dd1602d60e11b845260048401528b602484015275299a2fa4a72b20a624a22fa0a3a3a922a3a0aa24a7a760511b60448401525af18015610ab05788888c945f93612a71575b505f516020615b545f395f51905f526060600196612a3b87898060a01b03926152a8565b5116946040519075299a2fa4a72b20a624a22fa0a3a3a922a3a0aa24a7a760511b82528c60208301526040820152a45b01612953565b94505050506020823d8211612ab0575b81612a8e60209383615222565b8101031261049657905189919088885f516020615b545f395f51905f52612a17565b3d9150612a81565b600190612a6b565b855f52601360205260405f20875f5260205260405f2060018060a01b03612ae7838c6152a8565b511660018060a01b03165f526020528360405f205461299f565b509395925050507f9086299cfbdc88752f050229a9e7b3563c343b687b7fa5f7ace411c049301d1a9294505b612b3c60405192839283615207565b0390a3005b9093506020813d602011612b6d575b81612b5d60209383615222565b8101031261049657519288612950565b3d9150612b50565b835f5260106020526003612b8c8660405f20615274565b5001549161291e565b835f5260106020526128fd6001612baf8760405f20615274565b50016128ea565b92612be860017f9086299cfbdc88752f050229a9e7b3563c343b687b7fa5f7ace411c049301d1a94969395015461578f565b612b2d565b5060ff8160c81c16612864565b3461049657602036600319011261049657600435612c16615769565b80158015612c6b575b612c5c5760407f6aa2abf97a85127b2d7e0a4a90f5bf57c815685cdf8a07985043f5298fd6190c91602354908060235582519182526020820152a1005b631e0e5cfb60e11b5f5260045ffd5b506127108111612c1f565b3461049657602036600319011261049657612c8f615769565b600354600435036105b45760ff60045416601a81101561048257601403612cd557601560ff19600454161760045560156003545f516020615b345f395f51905f525f80a3005b63106ff71f60e01b5f5260045ffd5b34610496575f3660031901126104965760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b3461049657602036600319011261049657600435612d3a615769565b60035481036105b45760ff60045416601a81101561048257601803612ddc5760018060a01b036002541690805f52601960205260405f2054823b156104965760445f9283604051958694859363e13b7b3160e01b8552600485015260248401525af18015610ab057612dcc575b601960ff19600454161760045560196003545f516020615b345f395f51905f525f80a3005b5f612dd691615222565b80612da7565b6303858c7f60e01b5f5260045ffd5b3461049657602036600319011261049657612e04615769565b600354600435036105b45760ff60045416601a81101561048257600d03612e4a57600e60ff196004541617600455600e6003545f516020615b345f395f51905f525f80a3005b636487147760e11b5f5260045ffd5b34610496576020366003190112610496576004355f526006602052612ea8612e8d612e9460405f206040519283809261530a565b0382615222565b604051918291602083526020830190615117565b0390f35b34610496575f366003190112610496576020600354604051908152f35b34610496575f3660031901126104965760206001600160401b03601c5460401c16604051908152f35b34610496576020366003190112610496576004355f52601d60205260206001600160401b0360405f205416604051908152f35b3461049657602036600319011261049657600435612f41615769565b6003548082109081156130cd575b501561309557805f52600860205260ff60405f20541661305757805f52600860205260405f20600160ff19825416179055805f52600660205260405f20905f5b825481101561300d576001546001600160a01b031690612faf818561519e565b905460039190911b1c6001600160a01b0316823b15610496575f92602484926040519586938492631bf8593960e31b845260048401525af1918215610ab057600192612ffd575b5001612f8f565b5f61300791615222565b84612ff6565b506002546001600160a01b031690813b15610496575f9160248392604051948593849263224c19bb60e01b845260048401525af18015610ab05761304d57005b5f61144391615222565b60405162461bcd60e51b81526020600482015260166024820152751cdb1bdd1cc8185b1c9958591e481c995b19585cd95960521b6044820152606490fd5b60405162461bcd60e51b815260206004820152601060248201526f11d2481a185cc81b9bdd08195b99195960821b6044820152606490fd5b90508114806130dd575b82612f4f565b5060ff60045416601a811015610482576019146130d7565b34610496575f36600319011261049657602060405160028152f35b346104965760203660031901126104965760043561312c615769565b60035481036105b45760ff60045416601a81101561048257600b0361320357805f526020805260405f205480156131f457602090604460018060a01b0360025416935f60405195869485936363fd7a1160e11b8552600485015260248401525af1908115610ab0575f916131d5575b50156131c657600c60ff196004541617600455600c6003545f516020615b345f395f51905f525f80a3005b63611d8f8760e01b5f5260045ffd5b6131ee915060203d602011610aa957610a9b8183615222565b8161319b565b63dbbb808560e01b5f5260045ffd5b63c827e84760e01b5f5260045ffd5b346104965760203660031901126104965761322b615769565b600354600435036105b45760ff60045416601a8110156104825760080361327157600960ff19600454161760045560096003545f516020615b345f395f51905f525f80a3005b63768c7a4d60e11b5f5260045ffd5b3461049657602036600319011261049657613299615769565b600435602255005b34610496576020366003190112610496576132ba6150eb565b6132c2615769565b6001600160a01b03168015610464576bffffffffffffffffffffffff60a01b601a541617601a555f80f35b34610496576040366003190112610496576004356024359081151580920361049657613317615769565b60035481036105b45760ff60045416601a81101561048257600c03613379576002546001600160a01b031691823b156104965760445f928360405195869485936312308b7360e11b8552600485015260248401525af18015610ab05761304d57005b630c14724760e31b5f5260045ffd5b34610496575f366003190112610496576020602354604051908152f35b34610496576133c86133b6366150b2565b92915f52602660205260405f20615101565b905f5260205261012060405f2060018060a01b038154169060ff600182015491600360028201549101549260405194855260208501526001600160401b03811660408501526001600160401b038160401c1660608501526001600160401b038160801c166080850152818160c01c16151560a0850152818160c81c16151560c085015260d01c16151560e0830152610100820152f35b34610496576020366003190112610496576004355f526008602052602060ff60405f2054166040519015158152f35b34610496576020366003190112610496576134a6615769565b600354600435036105b45760ff60045416601a811015610482576009036134ec57600a60ff196004541617600455600a6003545f516020615b345f395f51905f525f80a3005b63379ffc8d60e11b5f5260045ffd5b34610496576040366003190112610496576135146150d5565b6004355f52601860205260405f209060018060a01b03165f52602052602060405f2054604051908152f35b3461049657602036600319011261049657613558615769565b600354600435036105b45760ff60045416601a81101561048257600c0361320357600d60ff196004541617600455600d6003545f516020615b345f395f51905f525f80a3005b34610496576135ac366150b2565b90916135b6615a38565b801580156139cc575b6105b4576001546040516310ab556b60e21b815233600482015290602090829060249082906001600160a01b03165afa908115610ab0575f916139ad575b5015610ec0576002831015610482578261395657805f52600960205260405f2054821015611d2e57805f52600960205260ff600361363e8460405f2061525b565b50015416815f52602460205260405f20835f526020526001600160401b0360405f205416905b15613947576001600160401b03613681601c5492828416906151c7565b16421161393857815f52602660205261369d8460405f20615101565b835f5260205260018060a01b0360405f205416613929576136d66001600160401b03601b549260801c166001600160401b0343166151c7565b906040519161012083018381106001600160401b0382111761391557604052338352602083019182526040830190426001600160401b0316825260608401905f825260808501906001600160401b0316815260a085015f815260c08601915f835260e08701935f85526101008801965f8852895f5260266020528b60405f209061375f91615101565b5f8c815260209190915260409081902099518a546001600160a01b0319166001600160a01b0391909116178a55905160018a0155955160028901805492516fffffffffffffffffffffffffffffffff199093166001600160401b03909216919091179190961b67ffffffffffffffff60401b1617855551845467ffffffffffffffff60801b191660809190911b67ffffffffffffffff60801b16178455518354915161ffff60c01b1990921690151560c01b60ff60c01b161790151560c81b60ff60c81b1617825551815460ff60d01b191690151560d01b60ff60d01b1617905551600390910155601a54601b546040516323b872dd60e01b5f52336004523060245260449190915293906001600160a01b0316805a60645f806020948194f15f516001148116156138f6575b856040525f606052156138e457506138a784601b54926151fa565b60208401527f4c0dd383a6eb2a2f4b8f2a967e4365ca69b2d0012887044c0c509fa0ce676f2360403394a45f5f516020615b745f395f51905f525d005b635274afe760e01b5f5260045260245ffd5b600181151661390c57813b15153d15161661388c565b853d5f823e3d90fd5b634e487b7160e01b5f52604160045260245ffd5b633624f00960e21b5f5260045ffd5b63a4872ddd60e01b5f5260045ffd5b6355bc0ebf60e11b5f5260045ffd5b805f52601060205260405f2054821015611d2e57805f52601060205260ff60026139838460405f20615274565b50015416815f52602560205260405f20835f526020526001600160401b0360405f20541690613664565b6139c6915060203d602011610aa957610a9b8183615222565b846135fd565b5060035481116135bf565b34610496576020366003190112610496576004355f526009602052602060405f2054604051908152f35b3461049657602036600319011261049657600435613a1d615769565b60035481036105b45760ff60045416601a81101561048257600f036140dd57805f52601e60205260405f20549081156140ce57805f52600660205260405f20905f915f81549160018060a01b0360015416915b8381106140495750613a8185615936565b94613a8f6040519687615222565b808652613a9e601f1991615936565b013660208701375f905f5b848110613fb8578787876003825110613fa957602492613af660405160208101908382526720a3a3afa0a2222960c11b604082015260288152613aed604882615222565b51902084615988565b6002546040516327416acd60e21b815260048101849052945f9186919082906001600160a01b03165afa938415610ab0575f94613f17575b506003845110613f085760405160208101918252660828e8ebe9288b60cb1b604082015260278152613b61604782615222565b51902083515f1981019081116116bd57805b613e7c5750505f915f915f935b600381018082116116bd57835181111580613e33575b15613d1257825f52600960205260405f208054600160401b81101561391557613bc49160018201815561525b565b5091613bcf8761528d565b96835560018301905f5b60038110613ca35750505060039182613bf3878a516152fd565b10613c90575b600281015f5b848110613c4057505090613c3a929154847fb9202018de9f7eba7cdf3f805001edb29b6629a2fd89f5bd9c667a9d99450f655f80a39461529b565b92613b80565b613c53613c4d828a61529b565b8b6152a8565b5190825491600160401b83101561391557613c7583600180950186558561519e565b819291549060031b91821b915f19901b191617905501613bff565b9150613c9d8588516152fd565b91613bf9565b600190613cc66001600160a01b03613cbe613c4d848761529b565b5116856152bc565b865f52600a60205260405f2086545f5260205260405f20828060a01b03613cf0613c4d848761529b565b5116838060a01b03165f5260205260405f208260ff1982541617905501613bd9565b5082906003613d228284516152fd565b1015613d4e575b601060ff19600454161760045560106003545f516020615b345f395f51905f525f80a3005b825f52601060205260405f208054600160401b81101561391557613d7791600182018155615274565b50915f83555f9160018401925b60038110613dbe575050505054907fcba6d1415af496acc567dab38af44a786626bc3e3c6d0057a8b34329bb31e6ef5f80a3808080613d29565b600190613de76001600160a01b03613ddf613dd9848761529b565b876152a8565b5116866152bc565b865f52601160205260405f2086545f5260205260405f20828060a01b03613e11613dd9848761529b565b5116838060a01b03165f5260205260405f208260ff1982541617905501613d84565b50600385018086116116bd578751811190811591613e52575b50613b96565b9050600286018087116116bd57885110159081613e71575b5088613e4c565b905087511088613e6a565b8451604051613eb381613ea5602082019486888791606093918352602083015260408201520190565b03601f198101835282615222565b5190209060018101918282116116bd57613f0292613ed09161597e565b613eda81886152a8565b5190613ef1613ee9848a6152a8565b5191896152a8565b52613efc82886152a8565b52615972565b80613b73565b634607f5d560e01b5f5260045ffd5b9093503d805f833e613f298183615222565b810190602081830312610496578051906001600160401b03821161049657019080601f83011215610496578151613f5f81615936565b92613f6d6040519485615222565b81845260208085019260051b82010192831161049657602001905b828210613f99575050509284613b2e565b8151815260209182019101613f88565b631571768360e31b5f5260045ffd5b613fc2818361519e565b90546040516310ab556b60e21b815260039290921b1c6001600160a01b031660048201819052909190602083602481895afa8015610ab0576001935f9161402b575b50614011575b5001613aa9565b61402461401d8661528d565b958a6152a8565b528961400a565b614043915060203d8111610aa957610a9b8183615222565b8b614004565b614053818361519e565b90546040516310ab556b60e21b815260039290921b1c6001600160a01b03166004820152602081602481875afa908115610ab0575f916140b0575b5061409c575b600101613a70565b946140a860019161528d565b959050614094565b6140c8915060203d8111610aa957610a9b8183615222565b8861408e565b6366d7bd4760e01b5f5260045ffd5b636be945dd60e01b5f5260045ffd5b34610496576020366003190112610496576004355f52601e602052602060405f2054604051908152f35b34610496575f366003190112610496576020601b54604051908152f35b34610496575f3660031901126104965761414b615769565b60ff60045416601a811015610482576002036141f857600154600254604051633c1a477960e11b81526001600160a01b0391821660048201529160209183916024918391165afa908115610ab0575f916141d9575b50156141ca57600360ff196004541617600455600380545f516020615b345f395f51905f525f80a3005b63f831404160e01b5f5260045ffd5b6141f2915060203d602011610aa957610a9b8183615222565b816141a0565b62bf1abb60e31b5f5260045ffd5b34610496575f3660031901126104965760206001600160401b03601c5416604051908152f35b346104965761423a36615094565b60039391935482036105b45760ff60045416601a8110156104825760120361447057815f52600960205260405f2054831015611d2e575f828152600a60209081526040808320868452825280832033845290915290205460ff1615610eee576001546040516310ab556b60e21b815233600482015290602090829060249082906001600160a01b03165afa908115610ab0575f91614451575b5015610ec0575f828152600f60209081526040808320868452825280832033845290915290205460ff1615614442575f828152600c60209081526040808320868452825280832033845290915290205460ff166125815783156125725760408051602081018681529181019290925233606083015260808201839052905f60a082015260c0808201859052815261436b60e082615222565b5190205f828152600e60209081526040808320868452825280832033845290915290205403614433575f818152600c60209081526040808320858452825280832033808552908352818420805460ff19166001179055848452600b8352818420868552835281842081855283529281902086905551858152849184917e4ff64f8cc2f88940c535cfe6face7248dc5ebf1faba271d2f8052017e747c79190a45f52600d60205260405f20905f5260205260405f20905f5260205260405f2061255f815461528d565b635130b96560e11b5f5260045ffd5b632ccbe95160e01b5f5260045ffd5b61446a915060203d602011610aa957610a9b8183615222565b856142d3565b636f5ecfff60e11b5f5260045ffd5b346104965760203660031901126104965760043561449b615769565b60035481036105b45760ff60045416601a81101561048257601703614b0957600154604051631bad9e0560e11b815290602090829060049082906001600160a01b03165afa908115610ab0575f91614ad7575b50906127106144ff602354846151e7565b0491815f52600960205260405f20905f925b82548410156147e357614524848461525b565b5091825492600460018201910154945f5b82548110156147d057614548818461519e565b90545f878152600c602090815260408083208b8452825280832060039590951b9390931c6001600160a01b0316808352939052205490919060ff166146a657891561468c57600154604051630b6f9cd360e11b815260048101849052602481018c90527320a3a3afaa18afa727afa9aaa126a4a9a9a4a7a760611b6044820152606481018890529290602090849060849082905f906001600160a01b03165af18015610ab0578789918d955f91614642575b506001955f516020615b545f395f51905f52915b604080517320a3a3afaa18afa727afa9aaa126a4a9a9a4a7a760611b81526020810193909352820152606090a45b01614535565b95505050506020833d8211614684575b8161465f60209383615222565b810103126104965787875f516020615b545f395f51905f528d600196519150956145fa565b3d9150614652565b60019187875f516020615b545f395f51905f528d5f61460e565b855f52600b60205260405f20875f5260205260405f2060018060a01b0383165f526020528760405f2054036146df575b6001915061463c565b600154604051637dd1602d60e11b81526004810184905260248101879052734147475f54315f4241445f434f4e53454e53555360601b60448201529290602090849060649082905f906001600160a01b03165af1928315610ab0578789915f9561478c575b5060408051734147475f54315f4241445f434f4e53454e53555360601b8152602081018a9052908101959095526001945f516020615b545f395f51905f5290606090a46146d6565b945050506020833d82116147c8575b816147a860209383615222565b810103126104965791519187875f516020615b545f395f51905f52614744565b3d915061479b565b5095919350506001919350019291614511565b8491815f52601060205260405f20905f925b8254841015614ab2576148088484615274565b50805460038201549490937320a3a3afaa192fa727afa9aaa126a4a9a9a4a7a760611b929091734147475f54325f4241445f434f4e53454e53555360601b91600101905f905b8254821015614a9d578690614863838561519e565b60018060a01b0391549060031b1c1692825f52601460205260405f208a5f5260205260405f2060018060a01b0385165f526020528c60ff60405f205416155f146149935750878d8015614977579060846020925f60018060a01b03600154166040519889958694630b6f9cd360e11b86528c60048701526024860152604485015260648401525af1938415610ab0578a8a8f95968b975f91614934575b5060019596975f516020615b545f395f51905f52915b60408051928352602083018b9052820152606090a45b01915061484e565b95965050505093506020823d821161496f575b8161495460209383615222565b8101031261049657905187938d9392918b908b906001614900565b3d9150614947565b9490600193945f516020615b545f395f51905f528d925f614916565b9390919250885f52601360205260405f208a5f5260205260405f2060018060a01b0382165f526020528a60405f2054036149d1575b5060019061492c565b9250905f91602060018060a01b0360015416606460405180968193637dd1602d60e11b83528960048401528c60248401528b60448401525af1938415610ab0578a8a8f955f97614a52575b505f516020615b545f395f51905f5260019596978b8b60405192839260608401928452602084015260408301520390a4906149c8565b949550505093506020823d8211614a95575b81614a7160209383615222565b81010312610496579051928c9291908a8a5f516020615b545f395f51905f52614a1c565b3d9150614a64565b60019099019897509295506147f59350505050565b601860ff19600454161760045560186003545f516020615b345f395f51905f525f80a3005b90506020813d602011614b01575b81614af260209383615222565b810103126104965751826144ee565b3d9150614ae5565b6360cd0e9960e01b5f5260045ffd5b3461049657602036600319011261049657600435614b34615769565b60035481036105b45760ff60045416601a81101561048257600e03614c2f576002546040516356af71c960e11b81526004810183905290602090829060249082905f906001600160a01b03165af1908115610ab0575f91614c10575b5015614c0157614bb76001600160401b03601c5460801c166001600160401b0343166151c7565b905f52601d6020526001600160401b0360405f2091166001600160401b0319825416179055600f60ff196004541617600455600f6003545f516020615b345f395f51905f525f80a3005b6307fb097360e41b5f5260045ffd5b614c29915060203d602011610aa957610a9b8183615222565b82614b90565b63183dd1d160e21b5f5260045ffd5b3461049657614c4c36615064565b92614c55615769565b805f526026602052614c6a8360405f20615101565b825f5260205260405f2060018060a01b038154161561503b576002810190815460ff8160c01c1661502c5761ffff60c01b191686151560c81b60ff60c81b1617600160c01b1782558515614fe75760030190815415614fd857614d0f90614ce86001600160401b03601c5460401c166001600160401b0342166151c7565b67ffffffffffffffff60401b82549160401b169067ffffffffffffffff60401b1916179055565b546002841015610482576126d091614d766117cb9286155f14614fb757825f526009602052614d556001614d468860405f2061525b565b50015b6040519586809261530a565b825f526006602052614d7060405f206040519687809261530a565b84615988565b60405193614d85608086615222565b60038552602085019160603684375f975f5b8651811080614fad575b15614e7c57614dc3866001600160a01b03614dbc848b6152a8565b5116615aee565b1580614e0a575b90614dd891614ddd5761528d565b614d97565b6001600160a01b03614def828a6152a8565b5116614e04614dfd8d61528d565b9c8b6152a8565b5261528d565b506001546001600160a01b039081169190602090614e28838b6152a8565b51166024604051809581936310ab556b60e21b835260048301525afa8015610ab057614dd8925f91614e5e575b50909150614dca565b614e76915060203d8111610aa957610a9b8183615222565b8c614e55565b50945094919660039196935010613fa957835f526027602052614ea28260405f20615101565b855f5260205260405f20958151906001600160401b03821161391557600160401b8211613915578754828955808310614f87575b50965f5260205f20965f5b828110614f6a5750505084955093837f1aa282aabded606592d2cccbd78439ed03820b25543d6161b213b4b8c9651993614f587f5f2ed0b8a76b3e4bf8076e2e31d83602fef08c30bdb2b069d1db259c176e63ef9697604051918291614f4783896151fa565b604060208401526040830190615117565b0390a3612b3c60405192839283615207565b81516001600160a01b0316818a0155602090910190600101614ee1565b885f528260205f2091820191015b818110614fa25750614ed6565b5f8155600101614f95565b5060038a10614da1565b825f526010602052614d556001614fd18860405f20615274565b5001614d49565b632d5720c760e11b5f5260045ffd5b815460ff60d01b1916600160d01b1790915560010154919390927f5f2ed0b8a76b3e4bf8076e2e31d83602fef08c30bdb2b069d1db259c176e63ef92612be89061578f565b63450cfd7f60e11b5f5260045ffd5b63167f349d60e11b5f5260045ffd5b34610496575f366003190112610496576020906005548152f35b60809060031901126104965760043590602435600281101561049657906044359060643580151581036104965790565b60809060031901126104965760043590602435906044359060643590565b606090600319011261049657600435906024356002811015610496579060443590565b602435906001600160a01b038216820361049657565b600435906001600160a01b038216820361049657565b906002811015610482575f5260205260405f2090565b90602080835192838152019201905f5b8181106151345750505090565b82516001600160a01b0316845260209384019390920191600101615127565b6040906003190112610496576004359060243590565b606090600319011261049657600435906024359060443590565b34610496575f36600319011261049657602060405160038152f35b80548210156151b3575f5260205f2001905f90565b634e487b7160e01b5f52603260045260245ffd5b906001600160401b03809116911601906001600160401b0382116116bd57565b818102929181159184041417156116bd57565b9060028210156104825752565b90929160209061521b8360408101966151fa565b1515910152565b90601f801991011681019081106001600160401b0382111761391557604052565b90816020910312610496575180151581036104965790565b80548210156151b3575f52600560205f20910201905f90565b80548210156151b3575f5260205f209060021b01905f90565b5f1981146116bd5760010190565b919082018092116116bd57565b80518210156151b35760209160051b010190565b8054600160401b811015613915576152d99160018201815561519e565b81546001600160a01b0393841660039290921b91821b9390911b1916919091179055565b919082039182116116bd57565b90602082549182815201915f5260205f20905f5b81811061532b5750505090565b82546001600160a01b031684526020909301926001928301920161531e565b805f52601f6020526001600160401b0360405f205416801561548857815f526020805260405f2054615479578043111561546a574080156153ef57604051602081019182528260408201526210555160ea1b6060820152604381526153b0606382615222565b5190205f828152602080805260409182902083905590519182527fe53c25b43758bf910ba120923c7295303dcbc2369273c7985227b00293f3b56991a2565b506154116001600160401b03601c5460801c166001600160401b0343166151c7565b5f828152601f6020908152604091829020805467ffffffffffffffff19166001600160401b0394909416938417905590519182527f7e22e73285f299179a84bb3388a9dd94b3eac27a6de162455a42ee6ce6706f9491a2565b63de3f681d60e01b5f5260045ffd5b638d10dfef60e01b5f5260045ffd5b63906135ab60e01b5f5260045ffd5b805f52601d6020526001600160401b0360405f20541680156155d857815f52601e60205260405f20546155c957804311156155ba5740801561553f57604051602081019182528260408201526241474760e81b6060820152604381526154fe606382615222565b5190205f828152601e602090815260409182902083905590519182527f9dcaca5280e612f442cef14eea003bbece818a3fde40db4dc4a3887682aa07b691a2565b506155616001600160401b03601c5460801c166001600160401b0343166151c7565b5f828152601d6020908152604091829020805467ffffffffffffffff19166001600160401b0394909416938417905590519182527fbed5c9fb50b85a70b1ea0ab5bf64bbf34ba76521149788c3873abaf955d545c291a2565b632f9cb5e160e21b5f5260045ffd5b634653993f60e01b5f5260045ffd5b631c237c4160e31b5f5260045ffd5b90815f5260266020526155fd8160405f20615101565b835f5260205260405f209060018060a01b038254161561503b57600282019081549260ff8460c01c1661502c5760030192835461575a576001600160401b039060801c168043111561574b57409182156156cc57506002811015610482577ff1ac2abd9bfa2c470babc8a68c69061d1661d798dedc05ba6f20a5fdb6bfe51592604092835160208101918252868582015260ff60f81b8460f81b166060820152876061820152606181526156b2608182615222565b5190208091556156c4835180936151fa565b6020820152a3565b7f2bee25e87a4aab24a6e926580a5c7026c624938721cc23acc05733fe7a4deebd9350604092506001600160401b039061573a61571283601c5460801c168443166151c7565b825467ffffffffffffffff60801b191660809190911b67ffffffffffffffff60801b16178255565b5460801c166156c4835180936151fa565b63221198d360e11b5f5260045ffd5b63d6e8b91560e01b5f5260045ffd5b5f546001600160a01b0316330361577c57565b63118cdaa760e01b5f523360045260245ffd5b5f908015615932578060011c916157a683836152fd565b601a546001600160a01b031693909190843b15610496575f94602486926040519788938492630852cd8d60e31b845260048401525af1938415610ab05760049461591f575b50600154604051639958065160e01b81529460209186919082906001600160a01b03165afa9384156159125781946158ca575b506001600160a01b038416156158565750601a546158519361584992916001600160a01b0316615a6d565b60215461529b565b602155565b601a54929350916001600160a01b031690813b156158c6578291602483926040519485938492630852cd8d60e31b845260048401525af180156158bb576158a3575b505061585190615849565b6158ae828092615222565b6158b85780615898565b80fd5b6040513d84823e3d90fd5b8280fd5b9093506020813d60201161590a575b816158e660209383615222565b8101031261590657516001600160a01b038116810361590657925f61581e565b8380fd5b3d91506158d9565b50604051903d90823e3d90fd5b61592b91505f90615222565b5f5f6157eb565b5050565b6001600160401b0381116139155760051b60200190565b600560ff19600454161760045560056003545f516020615b345f395f51905f525f80a3565b80156116bd575f190190565b8115612110570690565b90815160028110615a33575f1981019081116116bd57805b6159a957505050565b82516040516159d281613ea5602082019486888791606093918352602083015260408201520190565b5190209060018101918282116116bd57615a2d926159ef9161597e565b6001600160a01b03615a0182876152a8565b511690615a226001600160a01b03615a1985896152a8565b511691876152a8565b52613efc82866152a8565b806159a0565b505050565b5f516020615b745f395f51905f525c615a5e5760015f516020615b745f395f51905f525d565b633ee5aeb560e01b5f5260045ffd5b916040519163a9059cbb60e01b5f5260018060a01b031660045260245260205f60448180865af19060015f5114821615615acd575b60405215615aad5750565b635274afe760e01b5f9081526001600160a01b0391909116600452602490fd5b906001811516615ae557823b15153d15161690615aa2565b503d5f823e3d90fd5b5f5b8251811015615b2c576001600160a01b03615b0b82856152a8565b51166001600160a01b03831614615b2457600101615af0565b505050600190565b5050505f9056fea8f52d7b4405100a39ccc552ccc9426d860b1e822c71e97675d1623b49db6babd31b1ab070aba73480b7f863f37fefd98c16862672290e5cadbf1212bf1630cd9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a264697066735822122000a241a2c46c062389f65f399665216c325230efce0e45a4053d88b85f212bfb64736f6c634300081c0033" +} \ No newline at end of file diff --git a/cache_model_0/manifest.json b/cache_model_0/manifest.json index 9334f86c..7b50439f 100644 --- a/cache_model_0/manifest.json +++ b/cache_model_0/manifest.json @@ -166,9 +166,9 @@ "name": "DINTaskCoordinator", "address": "0x8464135c8F25Da09e49BC8782676a84730C318bC", "artifact": { - "type": "hardhat-artifact", + "type": "foundry-artifact", "path": "contracts/abis/DINTaskCoordinator.json", - "ipfs": "bafybeickgth755xv6gxx2jlbtrk4bdc7jjqhoqbvpy56k7v4sups6w6cre", + "ipfs": "bafybeie4fki5rhunywzk5rybd6cfrqf4oce4u6xyzgq3uyxobsmlml43hi", "stakeholders": [ "modelowner", "auditors", @@ -177,32 +177,33 @@ ] }, "source": { - "path": "contracts/sources/DINTaskCoordinator.sol", + "path": "foundry/src/DINTaskCoordinator.sol", "ipfs": null }, "compilation": { - "toolchain": "hardhat", + "toolchain": "foundry", "solidity": "0.8.28", "evm_version": "cancun", + "via_ir": true, "optimizer": { - "enabled": false, + "enabled": true, "runs": 200 }, "config": { - "path": "contracts/compilation/hardhat.config.ts", + "path": "foundry/foundry.toml", "ipfs": null }, "sources": [ { - "path": "contracts/sources/DINTaskCoordinator.sol", + "path": "foundry/src/DINTaskCoordinator.sol", "ipfs": null }, { - "path": "contracts/sources/DINTaskAuditor.sol", + "path": "foundry/src/DINTaskAuditor.sol", "ipfs": null }, { - "path": "contracts/sources/DINShared.sol", + "path": "foundry/src/DINShared.sol", "ipfs": null } ], @@ -215,9 +216,9 @@ "name": "DINTaskAuditor", "address": "0x71C95911E9a5D330f4D621842EC243EE1343292e", "artifact": { - "type": "hardhat-artifact", + "type": "foundry-artifact", "path": "contracts/abis/DINTaskAuditor.json", - "ipfs": "bafybeifysyayopr2yng7qttryhzgo5obz7xdpapaeumszqtqtdqn6mzxla", + "ipfs": "bafybeic5e3e4b5ydtoicquggczta2ywxwoir4j53mutprfji5w4bjuzpj4", "stakeholders": [ "modelowner", "auditors", @@ -226,32 +227,33 @@ ] }, "source": { - "path": "contracts/sources/DINTaskAuditor.sol", + "path": "foundry/src/DINTaskAuditor.sol", "ipfs": null }, "compilation": { - "toolchain": "hardhat", + "toolchain": "foundry", "solidity": "0.8.28", "evm_version": "cancun", + "via_ir": true, "optimizer": { - "enabled": false, + "enabled": true, "runs": 200 }, "config": { - "path": "contracts/compilation/hardhat.config.ts", + "path": "foundry/foundry.toml", "ipfs": null }, "sources": [ { - "path": "contracts/sources/DINTaskCoordinator.sol", + "path": "foundry/src/DINTaskCoordinator.sol", "ipfs": null }, { - "path": "contracts/sources/DINTaskAuditor.sol", + "path": "foundry/src/DINTaskAuditor.sol", "ipfs": null }, { - "path": "contracts/sources/DINShared.sol", + "path": "foundry/src/DINShared.sol", "ipfs": null } ], diff --git a/dincli/cli/modelownerd/deploy.py b/dincli/cli/modelownerd/deploy.py index afb19960..bd752827 100644 --- a/dincli/cli/modelownerd/deploy.py +++ b/dincli/cli/modelownerd/deploy.py @@ -6,13 +6,19 @@ from dincli.cli.utils import (build_and_send_tx, get_env_key, load_din_info, resolve_task_coordinator_address, set_env_key) +_MODEL_ID_ABI = [ + {"inputs": [], "name": "modelId", "outputs": [{"name": "", "type": "uint256"}], + "stateMutability": "view", "type": "function"}, +] + # Deploy sub-app (for 'dincli modelowner deploy ...') deploy_app = typer.Typer(help="Deploy task-level smart contracts") @deploy_app.command() def task_coordinator( ctx: typer.Context, - artifact_path: str = typer.Option(..., "--artifact", help="Path to DINTaskCoordinator contract artifact JSON (Hardhat format). "), + artifact_path: str = typer.Option(..., "--artifact", help="Path to DINTaskCoordinator contract artifact JSON (Foundry format)."), + model_id: int = typer.Option(..., "--model-id", help="Model ID assigned by DinModelRegistry for this task contract."), ): """ Deploy the DINTaskCoordinator contract. @@ -21,18 +27,19 @@ def task_coordinator( # Load contract instance DINTaskCoordinator_contract = get_contract_instance(artifact_path, effective_network) - + # Resolve DINValidatorStake address din_info = load_din_info() if effective_network in din_info and "stake" in din_info[effective_network]: din_validator_stake_address = din_info[effective_network]["stake"] - + console.print(f"[bold green]Deploying DINTaskCoordinator on network:[/bold green] {effective_network}") console.print(f"[cyan]Using DINValidatorStake:[/cyan] {din_validator_stake_address}") - + console.print(f"[cyan]Model ID:[/cyan] {model_id}") + tx_receipt = build_and_send_tx( ctx, - DINTaskCoordinator_contract.constructor(din_validator_stake_address), + DINTaskCoordinator_contract.constructor(din_validator_stake_address, model_id), "Deploying DINTaskCoordinator", "DINTaskCoordinator contract deployed successfully", "Failed to deploy DINTaskCoordinator" @@ -48,17 +55,18 @@ def task_coordinator( @deploy_app.command() def task_auditor( ctx: typer.Context, - artifact_path: str = typer.Option(..., "--artifact", help="Path to DINTaskAuditor contract artifact JSON (Hardhat format)."), + artifact_path: str = typer.Option(..., "--artifact", help="Path to DINTaskAuditor contract artifact JSON (Foundry format)."), task_coordinator: str = typer.Option(None, "--taskCoordinator", help="DINTaskCoordinator contract address"), + model_id: int = typer.Option(..., "--model-id", help="Model ID assigned by DinModelRegistry for this task contract."), ): """ Deploy the DINTaskAuditor contract. """ effective_network, w3, account, console = ctx.obj.get_en_w3_account_console() - + # Load contract instance DINTaskAuditor_contract = get_contract_instance(artifact_path, effective_network) - + din_info = load_din_info() if effective_network in din_info and "stake" in din_info[effective_network]: din_validator_stake_address = din_info[effective_network]["stake"] @@ -67,14 +75,27 @@ def task_auditor( task_coordinator_address = resolve_task_coordinator_address( effective_network, task_coordinator, console ) - + + # Guard: --model-id must match the coordinator's immutable modelId(). + # Both IDs select per-model stake floors; pairing is one-shot and irreversible. + coord_view = w3.eth.contract(address=task_coordinator_address, abi=_MODEL_ID_ABI) + coord_model_id = coord_view.functions.modelId().call() + if coord_model_id != model_id: + console.print( + f"[bold red]Error:[/bold red] --model-id {model_id} does not match " + f"coordinator modelId() {coord_model_id}. " + "Aborting β€” pairing is one-shot and the IDs are immutable." + ) + raise typer.Exit(1) + console.print(f"[bold green]Deploying DINTaskAuditor on network:[/bold green] {effective_network}") console.print(f"[cyan]Using DINValidatorStake address:[/cyan] {din_validator_stake_address}") console.print(f"[cyan]Using DINTaskCoordinator address:[/cyan] {task_coordinator_address}") - + console.print(f"[cyan]Model ID:[/cyan] {model_id}") + tx_receipt = build_and_send_tx( ctx, - DINTaskAuditor_contract.constructor(din_validator_stake_address, task_coordinator_address), + DINTaskAuditor_contract.constructor(din_validator_stake_address, task_coordinator_address, model_id), "Deploying DINTaskAuditor", "DINTaskAuditor contract deployed successfully", "Failed to deploy DINTaskAuditor" diff --git a/tests/test_task_auditor_model_id_guard.py b/tests/test_task_auditor_model_id_guard.py new file mode 100644 index 00000000..f8fcb7b9 --- /dev/null +++ b/tests/test_task_auditor_model_id_guard.py @@ -0,0 +1,120 @@ +""" +Regression tests for the task_auditor model-ID guard (PR No. 261 / issue No. 223 TP-3). + +Before sending the deployment transaction, task_auditor() reads the coordinator's +immutable modelId() and rejects a mismatch. Both IDs select per-model stake floors +and pairing is one-shot, so a mismatched deploy can't be corrected without a full +redeployment. +""" +import time +from types import SimpleNamespace + +import pytest +import typer + +from dincli.cli.modelownerd import deploy + +COORD_ADDR = "0x000000000000000000000000000000000000000C" +AUDITOR_ADDR = "0x000000000000000000000000000000000000000A" +STAKE_ADDR = "0x0000000000000000000000000000000000000001" + + +class DummyConsole: + def __init__(self): + self.messages = [] + + def print(self, *args, **kwargs): + self.messages.append(" ".join(str(a) for a in args)) + + def text(self): + return "\n".join(self.messages) + + +def _make_w3(coord_model_id: int): + """Return a minimal web3 mock whose eth.contract().functions.modelId().call() returns coord_model_id.""" + def _contract(address, abi): + return SimpleNamespace( + functions=SimpleNamespace( + modelId=lambda: SimpleNamespace(call=lambda: coord_model_id), + ) + ) + return SimpleNamespace(eth=SimpleNamespace(contract=_contract)) + + +class DummyCtxObj: + def __init__(self, coord_model_id: int): + self.console = DummyConsole() + self._w3 = _make_w3(coord_model_id) + + def get_en_w3_account_console(self): + return "local", self._w3, SimpleNamespace(address=COORD_ADDR), self.console + + def get_deployed_din_task_coordinator_contract(self, verbose=False, model_id=None, taskCoordinator_address=None): + return SimpleNamespace( + functions=SimpleNamespace( + setDINTaskAuditorContract=lambda addr: ("set", addr), + ) + ) + + +@pytest.fixture(autouse=True) +def _patch_deploy(monkeypatch): + """Stub out I/O so tests run without real artifacts, chain, or filesystem.""" + monkeypatch.setattr( + deploy, "get_contract_instance", + lambda path, net: SimpleNamespace(constructor=lambda *a: "ctor"), + ) + monkeypatch.setattr( + deploy, "load_din_info", + lambda: {"local": {"stake": STAKE_ADDR}}, + ) + monkeypatch.setattr( + deploy, "resolve_task_coordinator_address", + lambda net, addr, console: COORD_ADDR, + ) + monkeypatch.setattr(deploy, "set_env_key", lambda *a, **kw: None) + monkeypatch.setattr(time, "sleep", lambda _: None) + + +@pytest.fixture +def sent(monkeypatch): + calls = [] + + def fake_build_and_send_tx(*args, **kwargs): + calls.append(args) + return SimpleNamespace(contractAddress=AUDITOR_ADDR) + + monkeypatch.setattr(deploy, "build_and_send_tx", fake_build_and_send_tx) + return calls + + +class TestModelIdGuard: + def test_mismatch_sends_no_transaction(self, sent): + ctx = SimpleNamespace(obj=DummyCtxObj(coord_model_id=0)) + + with pytest.raises(typer.Exit) as exc: + deploy.task_auditor( + ctx, + artifact_path="dummy.json", + task_coordinator=COORD_ADDR, + model_id=1, + ) + + assert exc.value.exit_code == 1 + assert sent == [], "No transaction must be sent on a model-ID mismatch" + assert any( + "does not match" in m or "mismatch" in m.lower() + for m in ctx.obj.console.messages + ), f"Expected mismatch error in output, got: {ctx.obj.console.messages}" + + def test_match_sends_deployment_transaction(self, sent): + ctx = SimpleNamespace(obj=DummyCtxObj(coord_model_id=1)) + + deploy.task_auditor( + ctx, + artifact_path="dummy.json", + task_coordinator=COORD_ADDR, + model_id=1, + ) + + assert len(sent) >= 1, "Deployment transaction must be sent when model IDs match"