From c7b6725e87638ea247804c9d6ceb1b236919a651 Mon Sep 17 00:00:00 2001 From: beauwilliams Date: Tue, 12 May 2026 20:59:56 +1000 Subject: [PATCH 1/2] sync: on-chain pitches, proofs, and AuctionAccepted event MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Brings the reference implementation in line with the private repo's v2 contract changes (PR #83 there). Contract changes: - New events: PitchSubmitted(taskId, worker, pitchHash), ProofSubmitted(taskId, worker, proofHash, proofType, metricValue), AuctionAccepted(taskId, worker, acceptedPrice). The auction event coexists with the legacy BidSubmitted + TaskWorkerSelected pair from acceptAuction so existing indexers keep working. - New functions: submitPitch(taskId, pitchHash) and submitProof(taskId, proofHash, proofType, metricValue) anchor a domain-separated content commitment on-chain. Both follow the existing PGTR forwarder pattern (onlyTrustedForwarder + _effectiveSender). - submitPitch enforces pitchDeadline as well as expiryTime. - Storage: two new mappings appended (taskPitchHashes at slot 10, taskProofHashes at slot 11). __gap shrunk from 48 to 46. The committed storage-layout.before.json and storage-layout.after.json + the new scripts/verify-storage-layout.ts make accidental reordering a CI failure for future upgrades. Other: - AddForwarder.s.sol and DeployForwarder.s.sol added (operational scripts that already existed in the private tree). - ABI artifact regenerated: 91 entries, including the three new events. Forge test: 149 passing. Storage-layout verifier: 11 existing slots unchanged, gap 48 → 46. --- abi/TaskMarket.json | 2 +- script/AddForwarder.s.sol | 20 ++ script/DeployForwarder.s.sol | 25 ++ scripts/verify-storage-layout.ts | 75 +++++ src/TaskMarket.sol | 90 +++++- src/TaskMarketForwarder.sol | 1 + storage-layout.after.json | 472 +++++++++++++++++++++++++++++++ storage-layout.before.json | 443 +++++++++++++++++++++++++++++ test/TaskMarket.t.sol | 123 ++++++++ 9 files changed, 1247 insertions(+), 4 deletions(-) create mode 100644 script/AddForwarder.s.sol create mode 100644 script/DeployForwarder.s.sol create mode 100644 scripts/verify-storage-layout.ts create mode 100644 storage-layout.after.json create mode 100644 storage-layout.before.json diff --git a/abi/TaskMarket.json b/abi/TaskMarket.json index 18774a3..1126270 100644 --- a/abi/TaskMarket.json +++ b/abi/TaskMarket.json @@ -1 +1 @@ -{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"AUCTION","inputs":[],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"view"},{"type":"function","name":"AUCTION_DUTCH","inputs":[],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"view"},{"type":"function","name":"AUCTION_ENGLISH","inputs":[],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"view"},{"type":"function","name":"AUCTION_REVERSE_DUTCH","inputs":[],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"view"},{"type":"function","name":"AUCTION_REVERSE_ENGLISH","inputs":[],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"view"},{"type":"function","name":"BENCHMARK","inputs":[],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"view"},{"type":"function","name":"BOUNTY","inputs":[],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"view"},{"type":"function","name":"CLAIM","inputs":[],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"view"},{"type":"function","name":"PITCH","inputs":[],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"view"},{"type":"function","name":"UPGRADE_INTERFACE_VERSION","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"acceptAuction","inputs":[{"name":"taskId","type":"bytes32","internalType":"bytes32"},{"name":"price","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"acceptSubmission","inputs":[{"name":"taskId","type":"bytes32","internalType":"bytes32"},{"name":"worker","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"addForwarder","inputs":[{"name":"forwarder","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"cancelTask","inputs":[{"name":"taskId","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"claimTask","inputs":[{"name":"taskId","type":"bytes32","internalType":"bytes32"},{"name":"stakeAmount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"createTask","inputs":[{"name":"reward","type":"uint256","internalType":"uint256"},{"name":"duration","type":"uint256","internalType":"uint256"},{"name":"mode","type":"bytes4","internalType":"bytes4"},{"name":"pitchDeadline","type":"uint256","internalType":"uint256"},{"name":"bidDeadline","type":"uint256","internalType":"uint256"},{"name":"contentHash","type":"bytes32","internalType":"bytes32"},{"name":"contentURI","type":"string","internalType":"string"},{"name":"auctionSubtype","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"taskId","type":"bytes32","internalType":"bytes32"}],"stateMutability":"nonpayable"},{"type":"function","name":"defaultFeeBps","inputs":[],"outputs":[{"name":"","type":"uint16","internalType":"uint16"}],"stateMutability":"view"},{"type":"function","name":"evaluatorFor","inputs":[{"name":"taskId","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"evaluator","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"feeForTask","inputs":[{"name":"taskId","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint16","internalType":"uint16"}],"stateMutability":"view"},{"type":"function","name":"feeRecipient","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"forfeitAndReopen","inputs":[{"name":"taskId","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getBids","inputs":[{"name":"taskId","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"tuple[]","internalType":"struct TaskMarket.Bid[]","components":[{"name":"worker","type":"address","internalType":"address"},{"name":"price","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"getTask","inputs":[{"name":"taskId","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"tuple","internalType":"struct ITMP.Task","components":[{"name":"id","type":"bytes32","internalType":"bytes32"},{"name":"requester","type":"address","internalType":"address"},{"name":"worker","type":"address","internalType":"address"},{"name":"reward","type":"uint256","internalType":"uint256"},{"name":"createdAt","type":"uint256","internalType":"uint256"},{"name":"expiryTime","type":"uint256","internalType":"uint256"},{"name":"status","type":"uint8","internalType":"enum ITMP.TaskStatus"},{"name":"rating","type":"uint8","internalType":"uint8"},{"name":"mode","type":"bytes4","internalType":"bytes4"},{"name":"stakeAmount","type":"uint256","internalType":"uint256"},{"name":"claimer","type":"address","internalType":"address"},{"name":"claimedAt","type":"uint256","internalType":"uint256"},{"name":"pitchDeadline","type":"uint256","internalType":"uint256"},{"name":"feeBps","type":"uint16","internalType":"uint16"},{"name":"bidDeadline","type":"uint256","internalType":"uint256"},{"name":"maxPrice","type":"uint256","internalType":"uint256"},{"name":"deliverable","type":"bytes32","internalType":"bytes32"},{"name":"contentHash","type":"bytes32","internalType":"bytes32"},{"name":"contentURI","type":"string","internalType":"string"},{"name":"auctionSubtype","type":"bytes4","internalType":"bytes4"},{"name":"lowestBidder","type":"address","internalType":"address"},{"name":"lowestBidPrice","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"getWorkerStats","inputs":[{"name":"worker","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"tuple","internalType":"struct ITMP.WorkerStats","components":[{"name":"completedTasks","type":"uint256","internalType":"uint256"},{"name":"ratedTasks","type":"uint256","internalType":"uint256"},{"name":"totalStars","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"_usdcToken","type":"address","internalType":"address"},{"name":"_feeRecipient","type":"address","internalType":"address"},{"name":"_defaultFeeBps","type":"uint16","internalType":"uint16"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"isTrustedForwarder","inputs":[{"name":"addr","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"proxiableUUID","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"rateTask","inputs":[{"name":"taskId","type":"bytes32","internalType":"bytes32"},{"name":"rating","type":"uint8","internalType":"uint8"},{"name":"workerAgentId","type":"uint256","internalType":"uint256"},{"name":"raterAgentId","type":"uint256","internalType":"uint256"},{"name":"feedbackURI","type":"string","internalType":"string"},{"name":"feedbackHash","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"refundExpired","inputs":[{"name":"taskId","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"removeForwarder","inputs":[{"name":"forwarder","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"reputationRegistry","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"requesterNonce","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"selectLowestBidder","inputs":[{"name":"taskId","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"selectWorker","inputs":[{"name":"taskId","type":"bytes32","internalType":"bytes32"},{"name":"worker","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setDefaultFeeBps","inputs":[{"name":"feeBps","type":"uint16","internalType":"uint16"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setFeeRecipient","inputs":[{"name":"recipient","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setReputationRegistry","inputs":[{"name":"registry","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"stakeForfeit","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"submitBid","inputs":[{"name":"taskId","type":"bytes32","internalType":"bytes32"},{"name":"price","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"submitWork","inputs":[{"name":"taskId","type":"bytes32","internalType":"bytes32"},{"name":"deliverable","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"taskBids","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"},{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"worker","type":"address","internalType":"address"},{"name":"price","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"tasks","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"id","type":"bytes32","internalType":"bytes32"},{"name":"requester","type":"address","internalType":"address"},{"name":"worker","type":"address","internalType":"address"},{"name":"reward","type":"uint256","internalType":"uint256"},{"name":"createdAt","type":"uint256","internalType":"uint256"},{"name":"expiryTime","type":"uint256","internalType":"uint256"},{"name":"status","type":"uint8","internalType":"enum ITMP.TaskStatus"},{"name":"rating","type":"uint8","internalType":"uint8"},{"name":"mode","type":"bytes4","internalType":"bytes4"},{"name":"stakeAmount","type":"uint256","internalType":"uint256"},{"name":"claimer","type":"address","internalType":"address"},{"name":"claimedAt","type":"uint256","internalType":"uint256"},{"name":"pitchDeadline","type":"uint256","internalType":"uint256"},{"name":"feeBps","type":"uint16","internalType":"uint16"},{"name":"bidDeadline","type":"uint256","internalType":"uint256"},{"name":"maxPrice","type":"uint256","internalType":"uint256"},{"name":"deliverable","type":"bytes32","internalType":"bytes32"},{"name":"contentHash","type":"bytes32","internalType":"bytes32"},{"name":"contentURI","type":"string","internalType":"string"},{"name":"auctionSubtype","type":"bytes4","internalType":"bytes4"},{"name":"lowestBidder","type":"address","internalType":"address"},{"name":"lowestBidPrice","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"totalFeesCollected","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"trustedForwarders","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"updateTask","inputs":[{"name":"taskId","type":"bytes32","internalType":"bytes32"},{"name":"newReward","type":"uint256","internalType":"uint256"},{"name":"newExpiryTime","type":"uint256","internalType":"uint256"},{"name":"newBidDeadline","type":"uint256","internalType":"uint256"},{"name":"newPitchDeadline","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"upgradeToAndCall","inputs":[{"name":"newImplementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"usdcToken","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IERC20"}],"stateMutability":"view"},{"type":"function","name":"workerStats","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"completedTasks","type":"uint256","internalType":"uint256"},{"name":"ratedTasks","type":"uint256","internalType":"uint256"},{"name":"totalStars","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"event","name":"BidSubmitted","inputs":[{"name":"taskId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"worker","type":"address","indexed":true,"internalType":"address"},{"name":"price","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"FeeRecipientUpdated","inputs":[{"name":"newRecipient","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"FeesUpdated","inputs":[{"name":"newFeeBps","type":"uint16","indexed":false,"internalType":"uint16"}],"anonymous":false},{"type":"event","name":"ForwarderUpdated","inputs":[{"name":"forwarder","type":"address","indexed":true,"internalType":"address"},{"name":"trusted","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"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":"ReputationRegistryUpdated","inputs":[{"name":"newRegistry","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"StakeForfeited","inputs":[{"name":"taskId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"claimer","type":"address","indexed":true,"internalType":"address"},{"name":"stakeAmount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"StakeReturned","inputs":[{"name":"taskId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"claimer","type":"address","indexed":true,"internalType":"address"},{"name":"stakeAmount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"TaskAccepted","inputs":[{"name":"taskId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"requester","type":"address","indexed":true,"internalType":"address"},{"name":"worker","type":"address","indexed":true,"internalType":"address"},{"name":"workerPayment","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"platformFee","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"TaskCancelled","inputs":[{"name":"taskId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"requester","type":"address","indexed":true,"internalType":"address"},{"name":"refundAmount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"TaskClaimed","inputs":[{"name":"taskId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"claimer","type":"address","indexed":true,"internalType":"address"},{"name":"stakeAmount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"TaskCreated","inputs":[{"name":"taskId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"requester","type":"address","indexed":true,"internalType":"address"},{"name":"reward","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"expiryTime","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"mode","type":"bytes4","indexed":false,"internalType":"bytes4"}],"anonymous":false},{"type":"event","name":"TaskExpired","inputs":[{"name":"taskId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"requester","type":"address","indexed":true,"internalType":"address"},{"name":"refundAmount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"TaskRated","inputs":[{"name":"taskId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"worker","type":"address","indexed":true,"internalType":"address"},{"name":"rating","type":"uint8","indexed":false,"internalType":"uint8"},{"name":"raterAgentId","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"TaskReopened","inputs":[{"name":"taskId","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"TaskSubmitted","inputs":[{"name":"taskId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"worker","type":"address","indexed":true,"internalType":"address"},{"name":"deliverable","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"TaskUpdated","inputs":[{"name":"taskId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"newReward","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"newExpiryTime","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"TaskWorkerSelected","inputs":[{"name":"taskId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"worker","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Upgraded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"AddressEmptyCode","inputs":[{"name":"target","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967InvalidImplementation","inputs":[{"name":"implementation","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967NonPayable","inputs":[]},{"type":"error","name":"FailedCall","inputs":[]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"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":"UUPSUnauthorizedCallContext","inputs":[]},{"type":"error","name":"UUPSUnsupportedProxiableUUID","inputs":[{"name":"slot","type":"bytes32","internalType":"bytes32"}]}],"bytecode":{"object":"0x60a08060405234620000f55760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055306080527ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009081549060ff8260401c16620000e657506001600160401b036002600160401b031982821601620000a0575b604051614b4e9081620000fa823960805181818161263f01526126f80152f35b6001600160401b031990911681179091556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f808062000080565b63f92ee8a960e01b8152600490fd5b5f80fdfe610140806040526004361015610013575f80fd5b5f905f3560e01c90816301ffc9a7146139c35750806311eac8551461399c57806315a29035146136485780631c8e57f8146136265780631e52fce714612e105780632144ea4914612a98578063365ba2dd14612a135780633f0ce714146129ab5780634488b65214612939578063469048401461290c5780634d93172d1461289f5780634f1ef286146126a957806352d1902d1461262c578063537da21f146124b157806354776bb914612472578063572b6c05146124725780635c41d2fe146123b757806360c6d8ae14612399578063633264591461237657806363779c7414612353578063715018a6146122ea57806373d74876146122c75780637ebef529146120e05780638c58d5fc14611f875780638da5cb5b14611f5257806391dc1d3014611d115780639d4f988b14611c115780639d691d3614611be05780639f63f2a614611ba7578063a6eecb7214611b50578063a86592ba146119ee578063ad3cb1cc146119a4578063ae2925a6146114bc578063aeb87ecf14610efc578063afdc54cd14610c88578063b2b7bdd514610c65578063bcae25a414610c43578063c104d24d14610c20578063c8db44e314610bf7578063cc3e049b14610bbe578063ce37a26314610a54578063d081f2b814610a31578063d864887114610a07578063da0eb223146109d6578063db7260bc1461077a578063e48a3a6014610729578063e579f5001461055b578063e74b981b14610499578063ee8ca3b5146102d0578063f152d325146102ad578063f2fde38b146102805763fe78aecf1461025b575f80fd5b3461027d578060031936011261027d57604051633c948d2360e01b8152602090f35b80fd5b503461027d57602036600319011261027d576102aa61029d613ad6565b6102a561497f565b614742565b80f35b503461027d578060031936011261027d5760405163687b54cd60e01b8152602090f35b503461027d576020908160031936011261027d576103486004353383526001845261030160ff604085205416613cd7565b6103096149b7565b6103116147b3565b818452600285526040842060018101805491966001600160a01b0392831695909386908490610341831515613dc5565b1614613d4a565b60068701805460ff811660078110156104855798859260066003936103736103d69a9b9c9d15613e49565b8c60d082901b6001600160e01b0319166334b1f22560e21b1461046a575b5060ff19161790550154885460405163a9059cbb60e01b81526001600160a01b0390991660048a015260248901829052909795869185169082908b9082906044820190565b03925af193841561045f577f9954d6823ea6810a4780ffb920d7c2a569d41b2d0c99ea5d9314f8ba805de4bc94610414918991610432575b506141c9565b541693604051908152a360015f80516020614ad98339815191525580f35b6104529150853d8711610458575b61044a8183613b54565b810190613fd2565b5f61040e565b503d610440565b6040513d89823e3d90fd5b6040818d61047f935260058952205415613f8c565b8c610391565b634e487b7160e01b89526021600452602489fd5b503461027d57602036600319011261027d576104b3613ad6565b6104bb61497f565b6001600160a01b038116908115610522576006805462010000600160b01b03191660109290921b62010000600160b01b03169190911790556040519081527f7a7b5a0a132f9e0581eb8527f66eae9ee89c2a3e79d4ac7e41a1f1f4d48a7fc290602090a180f35b60405162461bcd60e51b8152602060048201526011602482015270125b9d985b1a59081c9958da5c1a595b9d607a1b6044820152606490fd5b503461027d57602036600319011261027d57600480358252600260208190526040909220805460018201546001600160a01b03908116610100529382015484166101205260038201549282015460058301546006840154600785015460088601546009870154600a880154600b890154600c8a0154600d8b0154600e8c0154600f8d01549e909d919c929b61ffff9094169a9499959896169695949392909160129061060960108201613c35565b608052601181015460e052015460a05260405160c05260c0515261010051602060c051015261012051604060c0510152606060c0510152608060c051015260a060c051015261065f60c080510160ff8316613a5e565b60ff8160081c1660e060c051015263ffffffff60e01b9060d01b1661010060c051015261012060c051015261014060c051015261016060c051015261018060c05101526101a060c05101526101c060c05101526101e060c051015261020060c051015261022060c05101526102c061024060c05101526106e76102c060c05101608051613a6b565b63ffffffff60e01b60e05160e01b1661026060c051015260018060a01b0360e05160201c1661028060c051015260a0516102a060c051015260c051900360c051f35b503461027d57602036600319011261027d576060906040906001600160a01b03610751613ad6565b168152600360205220805490600260018201549101549060405192835260208301526040820152f35b503461027d57604036600319011261027d576004356024359033835260016020526107ab60ff604085205416613cd7565b6107b36147b3565b81845260026020526040842060018101546001600160a01b039291906107dc9084161515613dc5565b6107ec6005820154421115613f05565b600e8101805461099157859055600681018054909160d082901b6001600160e01b03191663a81913a560e01b81148015610981575b1561087d57505060ff8116600781101561086957916003602094926108555f80516020614af9833981519152979515613e49565b60ff19161790555b6040519586521693a380f35b634e487b7160e01b88526021600452602488fd5b909250631e61f6a360e31b81036108e5575060ff1660078110156108d157916108cc8460085f80516020614af983398151915296946108c060016020981461406a565b015416838316146140a9565b61085d565b634e487b7160e01b87526021600452602487fd5b63ec07e9d360e01b8114908115610970575b50610916575b50505f80516020614af98339815191529160209161085d565b60ff1660078110156108d1579161095c8460025f80516020614af98339815191529694610950878360209914908115610965575b50614028565b01541683831614613fea565b918193506108fd565b60019150145f61094a565b6334b1f22560e21b1490505f6108f7565b5063687b54cd60e01b8114610821565b60405162461bcd60e51b815260206004820152601760248201527f44656c6976657261626c6520616c7265616479207365740000000000000000006044820152606490fd5b503461027d57602036600319011261027d5761ffff600b604060209360043581526002855220015416604051908152f35b503461027d57602036600319011261027d5760406020916004358152600483522054604051908152f35b503461027d578060031936011261027d5760405163a81913a560e01b8152602090f35b503461027d57604036600319011261027d57600435610a71613aec565b903383526001602052610a8a60ff604085205416613cd7565b610a926147b3565b81845260026020526040842060018101546001600160a01b0392610abb91841690841614613d4a565b60068101805490926313f8162d60e01b60d083901b6001600160e01b03191601610b865760ff8216600781101561086957610af69015613ec4565b600a8301544211610b49576002809301951694856001600160601b0360a01b82541617905560ff19161790557f8259e46acb41c409f7763c24e2f5dba1221be1944b6960acbfaf4ee07ea8de1e8380a380f35b60405162461bcd60e51b8152602060048201526015602482015274141a5d18da08191958591b1a5b99481c185cdcd959605a1b6044820152606490fd5b60405162461bcd60e51b815260206004820152601060248201526f4e6f742061205069746368207461736b60801b6044820152606490fd5b503461027d57602036600319011261027d57610bd86149b7565b610be3600435614205565b60015f80516020614ad98339815191525580f35b503461027d578060031936011261027d576008546040516001600160a01b039091168152602090f35b503461027d578060031936011261027d576040516310cf2d7f60e01b8152602090f35b503461027d578060031936011261027d57602061ffff60065416604051908152f35b503461027d578060031936011261027d576040516360ce192b60e11b8152602090f35b503461027d57602080600319360112610ef8576004359033835260018152610cb660ff604085205416613cd7565b610cbe6147b3565b8284526002825260408420600181015490916001600160a01b0391610ce891831690831614613d4a565b600682019060ff8254610d0f631e61f6a360e31b63ffffffff60e01b8360d01b1614613e85565b1660078110156108d1576001610d25911461406a565b6005830154421115610ebc57908291600787959401938454918787526004825282604088205582610d9d575b5050815460ff1916909155506008810180546001600160a01b0319169055600901829055557fae5c872b4498d8e857e43522a12d5dfde96a0d5089787500d6495dade8e994fa8280a280f35b909192939495828483610de69354168460065460101c168c60405180968195829463a9059cbb60e01b84526004840160209093929193604081019460018060a01b031681520152565b03925af1908115610eb1578991610e94575b5015610e4f579282877fb18ae0fffd2ad14984107b582c2dec2fb6effb8bf06d43a59dd102d88d5a3e938a9897948997610e36600998600754613d3d565b60075560088701541693604051908152a3918193610d51565b60405162461bcd60e51b815260048101839052601760248201527f466f7266656974207472616e73666572206661696c65640000000000000000006044820152606490fd5b610eab9150833d85116104585761044a8183613b54565b5f610df8565b6040513d8b823e3d90fd5b60405162461bcd60e51b815260048101859052601460248201527315185cdac81b9bdd081e595d08195e1c1a5c995960621b6044820152606490fd5b5080fd5b503461027d57604036600319011261027d57610f16613aec565b3382526001602052610f2e60ff604084205416613cd7565b610f366149b7565b610f3e6147b3565b6004358352600260205260408320600181015491929091610f6c906001600160a01b03808616911614613d4a565b610f7c6005830154421115613f05565b600682015460d081901b6001600160e01b031916631e61f6a360e31b81036113c5575060ff811660078110156113b15790610fbb60016004931461406a565b6008840154610fd7906001600160a01b038581169116146140a9565b60ff19161760068301556002820180546001600160a01b0319166001600160a01b0383169081179091558452600360205260408420805461101790613d1b565b9055600682015460d01b6001600160e01b0319166334b1f22560e21b036113a75760078201545b61105e61271061105661ffff600b87015416846140ee565b048092613fc5565b855460405163a9059cbb60e01b81526001600160a01b038581166004830152602482018490529295929091602091839160449183918c91165af1801561045f576110af918891611388575b50614101565b816112fe575b600681015460d01b6001600160e01b031916631e61f6a360e31b14806112f1575b611235575b600681015460d01b6001600160e01b0319166334b1f22560e21b14611156575b506040805193845260208401919091526001600160a01b039182169390911691600435917f46c82fee4cedc2a273b6dc93ed59039d9208122b933b8f32bd87a0034e336a9791a460015f80516020614ad98339815191525580f35b611169600d820154600783015490613fc5565b9081611176575b506110fb565b86546001919091015460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810193909352602091839160449183918b91165af190811561122a57869161120b575b50156111ce575f80611170565b60405162461bcd60e51b8152602060048201526015602482015274105d58dd1a5bdb881c99599d5b990819985a5b1959605a1b6044820152606490fd5b611224915060203d6020116104585761044a8183613b54565b5f6111c1565b6040513d88823e3d90fd5b85546008820154600783015460405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291602091839160449183918c91165af1801561045f5761128d9188916112d2575b50614187565b60018060a01b0360088201541660078201546040519081527ffbf073a7709bd64bf3406dfd536abdbc9a3750eb99c8f26f543768c24a237b07602060043592a36110db565b6112eb915060203d6020116104585761044a8183613b54565b5f611287565b50600781015415156110d6565b855460065460405163a9059cbb60e01b81526001600160a01b0360109290921c821660048201526024810185905291602091839116818a816044810103925af1801561045f57611355918891611369575b50614145565b61136182600754613d3d565b6007556110b5565b611382915060203d6020116104585761044a8183613b54565b5f61134f565b6113a1915060203d6020116104585761044a8183613b54565b5f6110a9565b600382015461103e565b634e487b7160e01b86526021600452602486fd5b63ec07e9d360e01b8103611411575060ff811660078110156113b157906113f0600260049314614028565b600284015461140c906001600160a01b03858116911614613fea565b610fd7565b6334b1f22560e21b0361148d5760ff811660078110156113b1576001036114525760028301546004919061140c906001600160a01b03858116911614613fea565b60405162461bcd60e51b815260206004820152601360248201527215da5b9b995c881b9bdd081cd95b1958dd1959606a1b6044820152606490fd5b60ff811660078110156113b1579061140c82600493159081156114b1575b50613ec4565b60039150145f6114ab565b503461027d5760a036600319011261027d5733815260016020526114e660ff604083205416613cd7565b6114ee6149b7565b6114f66147b3565b60043582526002602052604082209061153160018060a01b036001840154168092611522821515613dc5565b6001600160a01b031614613d4a565b600682015460ff811660078110156119905761154d9015613e49565b60d01b6001600160e01b0319166334b1f22560e21b14611973575b60038201546005830154600c84015490600a85015491602435151594858096611967575b611850575b506044356117f4575b60643515159182806117d3575b611777575b6084351515948580611756575b6116fb575b866116ee575b5085156116c8575b508415611681575b5050821561163c575b50506115f9575b5060015f80516020614ad98339815191525580f35b6005600382015491015460405191825260208201527fd1530ce534a8c2beaea77a65ae6ad931e29c84727381c531cdfb47f2889ebe63604060043592a25f6115e4565b90915081611674575b5080611653575b5f806115dd565b50600681015460d01b6001600160e01b03191663ec07e9d360e01b1461164c565b905060843514155f611645565b91935090816116bb575b508061169a575b915f806115d4565b50600683015460d01b6001600160e01b0319166334b1f22560e21b14611692565b905060643514155f61168b565b9094506044351515906044356116e1575b50935f6115cc565b905060443514155f6116d9565b602435141595505f6115c4565b42608435111561171257608435600a8901556115be565b606460405162461bcd60e51b815260206004820152602060248201527f506974636820646561646c696e65206d75737420626520696e206675747572656044820152fd5b50600688015460d01b6001600160e01b03191663ec07e9d360e01b146115b9565b42606435111561178e57606435600c8801556115ac565b60405162461bcd60e51b815260206004820152601e60248201527f42696420646561646c696e65206d75737420626520696e2066757475726500006044820152606490fd5b50600687015460d01b6001600160e01b0319166334b1f22560e21b146115a7565b42604435111561180b57604435600587015561159a565b60405162461bcd60e51b815260206004820152601860248201527f457870697279206d75737420626520696e2066757475726500000000000000006044820152606490fd5b846024351115611897575b506024356003870155600686015460d01b6001600160e01b0319166334b1f22560e21b1461188a575b5f611591565b602435600d870155611884565b60206118e5916118a960243588613fc5565b8a5460405163a9059cbb60e01b81526001600160a01b0393841660048201526024810192909252909384929091169082908c9082906044820190565b03925af190811561195c57889161193d575b5015611903575f61185b565b60405162461bcd60e51b81526020600482015260126024820152711554d110c81c99599d5b990819985a5b195960721b6044820152606490fd5b611956915060203d6020116104585761044a8183613b54565b5f6118f7565b6040513d8a823e3d90fd5b5084602435141561158c565b6004358352600560205261198b604084205415613f8c565b611568565b634e487b7160e01b85526021600452602485fd5b503461027d578060031936011261027d576119ea6040516119c481613b39565b60058152640352e302e360dc1b6020820152604051918291602083526020830190613a6b565b0390f35b503461027d576119fd36613bba565b903383526001602052611a1660ff604085205416613cd7565b611a1e6147b3565b8184526002602052604084209260018060a01b03611a43816001870154161515613dc5565b6006850180549092611a6b60d083901b6001600160e01b0319166334b1f22560e21b14613e07565b60ff8216600781101561048557611a829015613e49565b600d8701548111611b0b57859360016020938360077f50fe806ad7090c0b4c89850edc7f5f0619df0b894aa98735d1d54c60548bf2869760028d019a169b8c9a8b6001600160601b0360a01b825416179055015560ff1916179055604051908152a37f8259e46acb41c409f7763c24e2f5dba1221be1944b6960acbfaf4ee07ea8de1e8380a380f35b60405162461bcd60e51b815260206004820152601760248201527f50726963652065786365656473206d61782070726963650000000000000000006044820152606490fd5b503461027d57611b5f36613bba565b9082526005602052604082208054821015611ba357611b7e9250613bd0565b508054600190910154604080516001600160a01b039093168352602083019190915290f35b8280fd5b503461027d57602036600319011261027d576020906040906001600160a01b03611bcf613ad6565b168152600983522054604051908152f35b503461027d57602036600319011261027d576020611bff600435613f40565b6040516001600160a01b039091168152f35b503461027d576020908160031936011261027d5760043581526005825260408120918254906001600160401b038211611cfd5791929060405190611c5a848260051b0183613b54565b8082528382018093865284862086915b838310611cc057505050506040519280840191818552518092526040840192945b828110611c985784840385f35b855180516001600160a01b031685528201518483015294810194604090930192600101611c8b565b60028760019260409a9997989a51611cd781613b39565b848060a01b03865416815284860154838201528152019201920191909694939596611c6a565b634e487b7160e01b83526041600452602483fd5b503461027d57611d2036613bba565b90338352602060018152611d3a60ff604086205416613cd7565b611d426147b3565b828552600282526040852060018101546001600160a01b0395929190611d6b9087161515613dc5565b600681015460ff90611d9360d082901b6001600160e01b0319166334b1f22560e21b14613e07565b16600781101561086957611da79015613e49565b600c810154421015611f1757600d8101548311611eda57848752600584526040872090828254158015611ecd575b611e90575b50508560405192611dea84613b39565b16958683528483019184835280549068010000000000000000821015611e7c5790611e1a91600182018155613bd0565b939093611e68575183546001600160a01b031916911617825551600191909101556040519081527f50fe806ad7090c0b4c89850edc7f5f0619df0b894aa98735d1d54c60548bf2869190a380f35b634e487b7160e01b89526004899052602489fd5b634e487b7160e01b8a52604160045260248afd5b601282018590556011919091018054640100000000600160c01b03191660209290921b640100000000600160c01b03169190911790555f82611dda565b5060128201548510611dd5565b60405162461bcd60e51b81526004810185905260156024820152744269642065786365656473206d617820707269636560581b6044820152606490fd5b60405162461bcd60e51b8152600481018590526013602482015272109a5908191958591b1a5b99481c185cdcd959606a1b6044820152606490fd5b503461027d578060031936011261027d575f80516020614ab9833981519152546040516001600160a01b039091168152602090f35b503461027d57611f9636613bba565b903383526001602052611faf60ff604085205416613cd7565b611fb76149b7565b611fbf6147b3565b81845260026020526040842060018101549093916001600160a01b0391611fe99083161515613dc5565b169283156120aa57600681018054909161201960d083901b6001600160e01b031916631e61f6a360e31b14613e85565b60ff821660078110156108695784927f0c94d586dd5b832830019d8f427e4aa13e8ddbbf614cc0817a6b8dd9c5ae24be9560076020969461205c60019515613ec4565b61206c6005820154421115613f05565b6008810180546001600160a01b0319168c179055426009820155015560ff1916179055604051908152a360015f80516020614ad98339815191525580f35b60405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b2103bb7b935b2b960911b6044820152606490fd5b503461027d57606036600319011261027d576120fa613ad6565b612102613aec565b9060443561ffff81168091036122c3577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009283549260ff8460401c1615936001600160401b038116801590816122bb575b60011490816122b1575b1590816122a8575b506122965767ffffffffffffffff198116600117865584612277575b5061218a6149e6565b6121926149e6565b61219b33614742565b6001600160a01b03908282161561223a576121ba612710851115613d86565b166001600160601b0360a01b8654161785556006549062010000600160b01b039060101b169069ffffffffffffffffffff60b01b1617176006556121fc575080f35b68ff00000000000000001981541690557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a180f35b60405162461bcd60e51b8152602060048201526015602482015274125b9d985b1a5908199959481c9958da5c1a595b9d605a1b6044820152606490fd5b68ffffffffffffffffff1916680100000000000000011785555f612181565b60405163f92ee8a960e01b8152600490fd5b9050155f612165565b303b15915061215d565b869150612153565b5f80fd5b503461027d578060031936011261027d57604051631e61f6a360e31b8152602090f35b503461027d578060031936011261027d5761230361497f565b5f80516020614ab983398151915280546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b503461027d578060031936011261027d576040516334b1f22560e21b8152602090f35b503461027d578060031936011261027d5760405163ec07e9d360e01b8152602090f35b503461027d578060031936011261027d576020600754604051908152f35b503461027d57602036600319011261027d576123d1613ad6565b6123d961497f565b6001600160a01b0316801561242d57808252600160205260408220600160ff198254161790557f8cc3357993414364e6add1411f4853a44efd6c6a279b45a373ad4376d9ea1262602060405160018152a280f35b60405162461bcd60e51b815260206004820152601960248201527f496e76616c696420666f727761726465722061646472657373000000000000006044820152606490fd5b503461027d57602036600319011261027d5760209060ff906040906001600160a01b0361249d613ad6565b168152600184522054166040519015158152f35b503461027d57602080600319360112610ef857600435338352600182526124de60ff604085205416613cd7565b808352600282526040832060018101546001600160a01b03906125049082161515613dc5565b6006820180549092909161252e60d084901b6001600160e01b0319166334b1f22560e21b14613e07565b60ff83166007811015610869576125459015613e49565b600c82015442106125e7576011820154861c169485156125af57506002810180546001600160a01b03191686179055601281015460079091015560ff191660011790557f8259e46acb41c409f7763c24e2f5dba1221be1944b6960acbfaf4ee07ea8de1e8380a380f35b6064906040519062461bcd60e51b825260048201526011602482015270139bc8189a591cc81cdd589b5a5d1d1959607a1b6044820152fd5b60405162461bcd60e51b815260048101879052601760248201527f42696420646561646c696e65206e6f74207061737365640000000000000000006044820152606490fd5b503461027d578060031936011261027d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630036126975760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b60405163703e46dd60e11b8152600490fd5b50604036600319011261027d576126be613ad6565b6024356001600160401b038111611ba35736602382011215611ba3576126ee903690602481600401359101613b75565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116308114908115612871575b506126975761273161497f565b8216916040516352d1902d60e01b8152602081600481875afa859181612839575b5061277057604051634c9c8ce360e01b815260048101859052602490fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc908181036128215750813b156128085780546001600160a01b03191684179055604051927fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8580a28151156127ee576127ea9250614a27565b5080f35b5050346127f9575080f35b63b398979f60e01b8152600490fd5b604051634c9c8ce360e01b815260048101859052602490fd5b60249060405190632a87526960e21b82526004820152fd5b9091506020813d602011612869575b8161285560209383613b54565b810103126128655751905f612752565b8580fd5b3d9150612848565b9050817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541614155f612724565b503461027d57602036600319011261027d576128b9613ad6565b6128c161497f565b6001600160a01b0316808252600160209081526040808420805460ff19169055518381527f8cc3357993414364e6add1411f4853a44efd6c6a279b45a373ad4376d9ea12629190a280f35b503461027d578060031936011261027d5760065460405160109190911c6001600160a01b03168152602090f35b503461027d57602036600319011261027d5760043561ffff81168091036122c35760207fb50f6c85631b448ef50a9b0055afaff00e6d81ec0ebf056cd4bef2d8b32dbbbc9161298661497f565b612994612710821115613d86565b8061ffff196006541617600655604051908152a180f35b503461027d57602036600319011261027d576129c5613ad6565b6129cd61497f565b600880546001600160a01b0319166001600160a01b039290921691821790557fae9f27c36d3aa52eba3f1db0e15d93fd0981a7ba056f20bed382a145202a301d8280a280f35b503461027d57602036600319011261027d576040606091612a32613ad6565b81838051612a3f81613b1e565b828152826020820152015260018060a01b03168152600360205220604051612a6681613b1e565b815491828252604060026001830154926020850193845201549201918252604051928352516020830152516040820152f35b50346122c35760c03660031901126122c35760ff60243516602435036122c3576084356001600160401b0381116122c357612ad7903690600401613aa9565b90335f526001602052612af060ff60405f205416613cd7565b612af86147b3565b6004355f90815260026020526040902060018101549091612b26916001600160a01b03918216911614613d4a565b600681015460ff81166007811015612dfc57600403612dc357606460ff6024351611612d875760081c60ff16612d525760068101805461ff00191660243560081b61ff00161790556002810180546001600160a01b03165f9081526003602052604090206001018054612b9890613d1b565b905560018060a01b038154165f526003602052600260405f2001612bc260ff602435168254613d3d565b905560018060a01b0390541660405160ff60243516815260643560208201527f5c9426dd920816b23cfd9daad6ecdbe1f542a77c85a30cbe25306443c8ede33c604060043592a3604435151580612d3e575b612c1c578380f35b6008546006909101546001600160a01b039190911690612c489060d01b6001600160e01b031916614831565b90803b156122c357612cc55f604086948296825198899788968794631e01b53f60e11b8652604435600487015260ff60243516600f0b60248701528760448701526101006064870152600f6101048701526e746d702e7461736b2e726174696e6760881b6101248701526101406084870152610144860190613a6b565b92601c858503600319810160a48801528886520160c486015281602085015285840137818101840185905260a43560e4840152601f01601f1916010301925af1612d10575b80808380f35b90506001600160401b038111612d2a576040525f80612d0a565b634e487b7160e01b5f52604160045260245ffd5b506008546001600160a01b03161515612c14565b60405162461bcd60e51b815260206004820152600d60248201526c105b1c9958591e481c985d1959609a1b6044820152606490fd5b60405162461bcd60e51b81526020600482015260146024820152730526174696e67206d75737420626520302d3130360641b6044820152606490fd5b60405162461bcd60e51b815260206004820152601160248201527015185cdac81b9bdd081858d8d95c1d1959607a1b6044820152606490fd5b634e487b7160e01b5f52602160045260245ffd5b346122c3576101003660031901126122c3576044356001600160e01b0319811681036122c35760c4356001600160401b0381116122c357612e55903690600401613aa9565b9060e4356001600160e01b0319811690036122c357335f526001602052612e8260ff60405f205416613cd7565b6001600160a01b03612e926147b3565b169081156135ed57600435156135a85760243515613563576001600160e01b0319841663a81913a560e01b148015613549575b801561352f575b8015613515575b80156134fb575b156134c7576001600160e01b031984166334b1f22560e21b146133ff575b815f52600960205260405f20805490612f1082613d1b565b9055604051904660208301523060408301528360608301526080820152608081528060a08101106001600160401b0360a083011117612d2a5760a081016040526020815191012092613082612f6760243542613d3d565b926001600160e01b0319871663ec07e9d360e01b036133f857612f8c60643542613d3d565b925b60065461ffff166001600160e01b031989166334b1f22560e21b036133f257612fb960843542613d3d565b6001600160e01b03198a166334b1f22560e21b036133eb57600435915b6001600160e01b03198b166334b1f22560e21b036133e45760e435965b604051986130008a613b02565b8b8a528a60208b01525f60408b015260043560608b01524260808b015260a08a01525f60c08a01525f60e08a015263ffffffff60e01b8c166101008a01525f6101208a01525f6101408a01525f6101608a01526101808901526101a08801526101c08701526101e08601525f61020086015260a4356102208601523691613b75565b61024083015263ffffffff60e01b166102608201525f6102808201525f6102a0820152825f52600260205260405f2090805182556001820160018060a01b036020830151166001600160601b0360a01b8254161790556002820160018060a01b036040830151166001600160601b0360a01b825416179055606081015160038301556080810151600483015560a0810151600583015560c08101516007811015612dfc5760068301805460e084015161010085015165ffffffffffff1990921660ff9490941693909317600893841b61ff00161760d09190911c65ffffffff000016179055610120820151600784015561014082015190830180546001600160a01b0319166001600160a01b03929092169190911790556101608101516009830155610180810151600a8301556101a0810151600b8301805461ffff191661ffff929092169190911790556101c0810151600c8301556101e0810151600d830155610200810151600e830155610220810151600f8301556102408101518051906001600160401b038211612d2a5761321d6010850154613bfd565b601f81116133a0575b5091859391602097938890601f8311600114613308577fbdfc881a16a3a04e41fed1091f413ffc0872156818c3b19a8331a07a020ca690959383606096946012946102a0945f926132fd575b50508160011b915f199060031b1c19161760108501555b610260810151601185018054610280840151640100000000600160c01b0360209190911b1660e09390931c6001600160c01b03199091161791909117905501519101556132d860243542613d3d565b906040519160043583528883015263ffffffff60e01b166040820152a3604051908152f35b015190508d80613272565b90601085015f52895f20915f5b601f19851681106133865750936001846012946102a0947fbdfc881a16a3a04e41fed1091f413ffc0872156818c3b19a8331a07a020ca6909a9860609a98601f1981161061336e575b505050811b016010850155613289565b01515f1960f88460031b161c191690558d808061335e565b8183015184558a9850600190930192918b01918b01613315565b601085015f5260205f20601f840160051c8101602085106133dd575b601f830160051c820181106133d2575050613226565b5f81556001016133bc565b50806133bc565b5f96612ff3565b5f91612fd6565b5f612fb9565b5f92612f8e565b60e4356001600160e01b031916633c948d2360e01b1480156134ab575b801561348f575b8015613473575b612ef85760405162461bcd60e51b815260206004820152601760248201527f496e76616c69642061756374696f6e20737562747970650000000000000000006044820152606490fd5b5060e4356001600160e01b0319166310cf2d7f60e01b1461342a565b5060e4356001600160e01b03191663e1022c5b60e01b14613423565b5060e4356001600160e01b0319166360ce192b60e11b1461341c565b60405162461bcd60e51b815260206004820152600c60248201526b496e76616c6964206d6f646560a01b6044820152606490fd5b506001600160e01b031984166334b1f22560e21b14612eda565b506001600160e01b0319841663687b54cd60e01b14612ed3565b506001600160e01b0319841663ec07e9d360e01b14612ecc565b506001600160e01b03198416631e61f6a360e31b14612ec5565b60405162461bcd60e51b815260206004820152601f60248201527f4475726174696f6e206d7573742062652067726561746572207468616e2030006044820152606490fd5b60405162461bcd60e51b815260206004820152601d60248201527f526577617264206d7573742062652067726561746572207468616e20300000006044820152606490fd5b60405162461bcd60e51b815260206004820152601160248201527024b73b30b634b2103932b8bab2b9ba32b960791b6044820152606490fd5b346122c3575f3660031901126122c35760405163e1022c5b60e01b8152602090f35b346122c35760203660031901126122c3575f6102a060405161366981613b02565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201528261010082015282610120820152826101408201528261016082015282610180820152826101a0820152826101c0820152826101e082015282610200820152826102208201526060610240820152826102608201528261028082015201526004355f52600260205260405f206040519061370f82613b02565b8054825260018101546001600160a01b03908116602084015260028201541660408301526003810154606083015260048101546080830152600581015460a0830152600681015490600760ff83161015612dfc5760ff80831660c0850152600883811c90911660e085015260d09290921b6001600160e01b0319166101008401526007810154610120840152908101546001600160a01b03166101408301526009810154610160830152600a810154610180830152600b81015461ffff166101a0830152600c8101546101c0830152600d8101546101e0830152600e810154610200830152600f81015461022083015260129061380e60108201613c35565b610240840152601181015463ffffffff60e01b8160e01b1661026085015260018060a01b039060201c1661028084015201546102a08201526040518091602082528051602083015260018060a01b03602082015116604083015260018060a01b03604082015116606083015260608101516080830152608081015160a083015260a081015160c08301526138aa60c082015160e0840190613a5e565b60ff60e08201511661010083015263ffffffff60e01b6101008201511661012083015261012081015161014083015260018060a01b03610140820151166101608301526101608101516101808301526101808101516101a083015261ffff6101a0820151166101c08301526101c08101516101e08301526101e08101516102008301526102008101516102208301526102208101516102408301526102408101516102a06139676102c092836102608701526102e0860190613a6b565b6102608401516001600160e01b031916610280868101919091528401516001600160a01b031682860152920151908301520390f35b346122c3575f3660031901126122c3575f546040516001600160a01b039091168152602090f35b346122c35760203660031901126122c3576004359063ffffffff60e01b82168092036122c35760209163528d9f5760e11b8114908115613a4d575b8115613a3c575b8115613a2b575b8115613a1a575b5015158152f35b6301ffc9a760e01b14905083613a13565b634eb48e9b60e11b81149150613a0c565b6340f6076960e01b81149150613a05565b63c8db44e360e01b811491506139fe565b906007821015612dfc5752565b91908251928382525f5b848110613a95575050825f602080949584010152601f8019910116010190565b602081830181015184830182015201613a75565b9181601f840112156122c3578235916001600160401b0383116122c357602083818601950101116122c357565b600435906001600160a01b03821682036122c357565b602435906001600160a01b03821682036122c357565b6102c081019081106001600160401b03821117612d2a57604052565b606081019081106001600160401b03821117612d2a57604052565b604081019081106001600160401b03821117612d2a57604052565b90601f801991011681019081106001600160401b03821117612d2a57604052565b9291926001600160401b038211612d2a5760405191613b9e601f8201601f191660200184613b54565b8294818452818301116122c3578281602093845f960137010152565b60409060031901126122c3576004359060243590565b8054821015613be9575f5260205f209060011b01905f90565b634e487b7160e01b5f52603260045260245ffd5b90600182811c92168015613c2b575b6020831014613c1757565b634e487b7160e01b5f52602260045260245ffd5b91607f1691613c0c565b9060405191825f8254613c4781613bfd565b908184526020946001916001811690815f14613cb55750600114613c77575b505050613c7592500383613b54565b565b5f90815285812095935091905b818310613c9d575050613c7593508201015f8080613c66565b85548884018501529485019487945091830191613c84565b92505050613c7594925060ff191682840152151560051b8201015f8080613c66565b15613cde57565b60405162461bcd60e51b81526020600482015260156024820152742737ba103a393ab9ba32b2103337b93bb0b93232b960591b6044820152606490fd5b5f198114613d295760010190565b634e487b7160e01b5f52601160045260245ffd5b91908201809211613d2957565b15613d5157565b60405162461bcd60e51b815260206004820152600d60248201526c2737ba103932b8bab2b9ba32b960991b6044820152606490fd5b15613d8d57565b60405162461bcd60e51b815260206004820152601060248201526f08ccaca4084a0a640e8dede40d0d2ced60831b6044820152606490fd5b15613dcc57565b60405162461bcd60e51b815260206004820152601360248201527215185cdac8191bd95cc81b9bdd08195e1a5cdd606a1b6044820152606490fd5b15613e0e57565b60405162461bcd60e51b81526020600482015260136024820152724e6f7420616e2041756374696f6e207461736b60681b6044820152606490fd5b15613e5057565b60405162461bcd60e51b815260206004820152600d60248201526c2a30b9b5903737ba1037b832b760991b6044820152606490fd5b15613e8c57565b60405162461bcd60e51b815260206004820152601060248201526f4e6f74206120436c61696d207461736b60801b6044820152606490fd5b15613ecb57565b60405162461bcd60e51b81526020600482015260126024820152715461736b206e6f7420617661696c61626c6560701b6044820152606490fd5b15613f0c57565b60405162461bcd60e51b815260206004820152600c60248201526b15185cdac8195e1c1a5c995960a21b6044820152606490fd5b5f908152600260205260409020600681015460d01b6001600160e01b03191663687b54cd60e01b14613f7c57600101546001600160a01b031690565b506008546001600160a01b031690565b15613f9357565b60405162461bcd60e51b815260206004820152600a602482015269109a591cc8195e1a5cdd60b21b6044820152606490fd5b91908203918211613d2957565b908160209103126122c3575180151581036122c35790565b15613ff157565b60405162461bcd60e51b815260206004820152600f60248201526e0aedee4d6cae440dad2e6dac2e8c6d608b1b6044820152606490fd5b1561402f57565b60405162461bcd60e51b815260206004820152601360248201527215dbdc9ad95c881b9bdd081cd95b1958dd1959606a1b6044820152606490fd5b1561407157565b60405162461bcd60e51b815260206004820152601060248201526f15185cdac81b9bdd0818db185a5b595960821b6044820152606490fd5b156140b057565b60405162461bcd60e51b81526020600482015260166024820152752bb7b935b2b91036bab9ba1031329031b630b4b6b2b960511b6044820152606490fd5b81810292918115918404141715613d2957565b1561410857565b60405162461bcd60e51b815260206004820152601560248201527415dbdc9ad95c881c185e5b595b9d0819985a5b1959605a1b6044820152606490fd5b1561414c57565b60405162461bcd60e51b8152602060048201526013602482015272119959481d1c985b9cd9995c8819985a5b1959606a1b6044820152606490fd5b1561418e57565b60405162461bcd60e51b815260206004820152601360248201527214dd185ad9481c995d1d5c9b8819985a5b1959606a1b6044820152606490fd5b156141d057565b60405162461bcd60e51b815260206004820152600d60248201526c1499599d5b990819985a5b1959609a1b6044820152606490fd5b805f52600260205260405f20906001820161422a60018060a01b038254161515613dc5565b600583015442111561470a576006830192835460ff81166007811015612dfc57600481146146cd57600681146146975760d082901b6001600160e01b0319166334b1f22560e21b14908161468c575b5061444a5750835460ff1916600517845560038101545f8054845460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810185905293979392602092849260449284929091165af18015614419576142e1915f9161443157506141c9565b5460d01b6001600160e01b031916631e61f6a360e31b1480614424575b61433d575b50546040519283526001600160a01b0316917fe4ec5a16418560274520eb1bbcfc0e4377564571957fcc2f8e2a7f44afba10de90602090a3565b5f80546008830180546007909401805460405163a9059cbb60e01b81526001600160a01b03968716600482015260248101919091529591949193909260209287926044928492165af1928315614419577ffbf073a7709bd64bf3406dfd536abdbc9a3750eb99c8f26f543768c24a237b07602087926143e582977fe4ec5a16418560274520eb1bbcfc0e4377564571957fcc2f8e2a7f44afba10de995f916144025750614187565b5493546040519081526001600160a01b0390941693a39150614303565b6112eb9150843d86116104585761044a8183613b54565b6040513d5f823e3d90fd5b50600781015415156142fe565b610452915060203d6020116104585761044a8183613b54565b9092916007840193845495600461447761271061446f61ffff600b870154168b6140ee565b048099613fc5565b9460ff1916179055600281019460018060a01b038654165f52600360205260405f206144a38154613d1b565b905583614638575b866145c4575b60036144c1920154905490613fc5565b8061450e575b505492546040805192835260208301959095526001600160a01b03908116949316927f46c82fee4cedc2a273b6dc93ed59039d9208122b933b8f32bd87a0034e336a9791a4565b5f8054835460405163a9059cbb60e01b81526001600160a01b03918216600482015260248101949094526020928492604492849291165af1908115614419575f916145a5575b5015614560575f6144c7565b60405162461bcd60e51b815260206004820152601760248201527f52657175657374657220726566756e64206661696c65640000000000000000006044820152606490fd5b6145be915060203d6020116104585761044a8183613b54565b5f614554565b5f805460065460405163a9059cbb60e01b81526001600160a01b0360109290921c82166004820152602481018b90529492602092869260449284929091165af1908115614419576146216003926144c1955f916113695750614145565b61462d89600754613d3d565b6007559250506144b1565b5f8054875460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810188905292602092849260449284929091165af1801561441957614687915f916113885750614101565b6144ab565b60019150145f614279565b60405162461bcd60e51b815260206004820152600e60248201526d15185cdac818d85b98d95b1b195960921b6044820152606490fd5b60405162461bcd60e51b815260206004820152601560248201527415185cdac8185b1c9958591e481858d8d95c1d1959605a1b6044820152606490fd5b60405162461bcd60e51b815260206004820152601060248201526f15185cdac81b9bdd08195e1c1a5c995960821b6044820152606490fd5b6001600160a01b0390811690811561479b575f80516020614ab983398151915280546001600160a01b031981168417909155167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b604051631e4fbdf760e01b81525f6004820152602490fd5b335f52600160205260ff60405f2054166147cb573390565b604051631cb9dd3760e21b8152602081600481335afa908115614419575f916147f2575090565b90506020813d602011614829575b8161480d60209383613b54565b810103126122c357516001600160a01b03811681036122c35790565b3d9150614800565b6001600160e01b03191663a81913a560e01b811461495357631e61f6a360e31b81146149285763ec07e9d360e01b81146148fd5763687b54cd60e01b81146148ce576334b1f22560e21b146148a257604051602081018181106001600160401b03821117612d2a576040525f815290565b6040516148ae81613b39565b601081526f3a36b81736b7b2329730bab1ba34b7b760811b602082015290565b506040516148db81613b39565b6012815271746d702e6d6f64652e62656e63686d61726b60701b602082015290565b5060405161490a81613b39565b600e81526d0e8dae05cdadec8ca5ce0d2e8c6d60931b602082015290565b5060405161493581613b39565b600e81526d746d702e6d6f64652e636c61696d60901b602082015290565b5060405161496081613b39565b600f81526e746d702e6d6f64652e626f756e747960881b602082015290565b5f80516020614ab9833981519152546001600160a01b0316330361499f57565b60405163118cdaa760e01b8152336004820152602490fd5b5f80516020614ad983398151915260028154146149d45760029055565b604051633ee5aeb560e01b8152600490fd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615614a1557565b604051631afcd79f60e31b8152600490fd5b905f8091602081519101845af48080614aa5575b15614a5b5750506040513d81523d5f602083013e60203d82010160405290565b15614a8257604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b3d15614a93576040513d5f823e3d90fd5b60405163d6bda27560e01b8152600490fd5b503d151580614a3b5750813b1515614a3b56fe9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f007d30d1881f77d1707467f58525863cb9ccbaedc1c4ddb2a4d9dd1349ca7a4e4ba26469706673582212203f41f1d27b847d018a9f2b772550cb9709ea3d8eebdef74b82b1bbbdd61f09e564736f6c63430008180033","sourceMap":"2182:33913:50:-:0;;;;;;;2365:1:44;1505:66;2365:1;1084:4:35;1076:13;;3147:66:34;2182:33913:50;;;;;;;;;7894:76:34;;-1:-1:-1;;;;;;;;;;;;2182:33913:50;;;7983:34:34;7979:146;;-1:-1:-1;2182:33913:50;;;;;;;;1076:13:35;2182:33913:50;;;;;;;;;;;7979:146:34;-1:-1:-1;;;;;;2182:33913:50;;;;;;;;;;;;;8085:29:34;;2182:33913:50;;8085:29:34;7979:146;;;;;7894:76;-1:-1:-1;;;7936:23:34;;;;;2182:33913:50;;;","linkReferences":{}},"deployedBytecode":{"object":"0x610140806040526004361015610013575f80fd5b5f905f3560e01c90816301ffc9a7146139c35750806311eac8551461399c57806315a29035146136485780631c8e57f8146136265780631e52fce714612e105780632144ea4914612a98578063365ba2dd14612a135780633f0ce714146129ab5780634488b65214612939578063469048401461290c5780634d93172d1461289f5780634f1ef286146126a957806352d1902d1461262c578063537da21f146124b157806354776bb914612472578063572b6c05146124725780635c41d2fe146123b757806360c6d8ae14612399578063633264591461237657806363779c7414612353578063715018a6146122ea57806373d74876146122c75780637ebef529146120e05780638c58d5fc14611f875780638da5cb5b14611f5257806391dc1d3014611d115780639d4f988b14611c115780639d691d3614611be05780639f63f2a614611ba7578063a6eecb7214611b50578063a86592ba146119ee578063ad3cb1cc146119a4578063ae2925a6146114bc578063aeb87ecf14610efc578063afdc54cd14610c88578063b2b7bdd514610c65578063bcae25a414610c43578063c104d24d14610c20578063c8db44e314610bf7578063cc3e049b14610bbe578063ce37a26314610a54578063d081f2b814610a31578063d864887114610a07578063da0eb223146109d6578063db7260bc1461077a578063e48a3a6014610729578063e579f5001461055b578063e74b981b14610499578063ee8ca3b5146102d0578063f152d325146102ad578063f2fde38b146102805763fe78aecf1461025b575f80fd5b3461027d578060031936011261027d57604051633c948d2360e01b8152602090f35b80fd5b503461027d57602036600319011261027d576102aa61029d613ad6565b6102a561497f565b614742565b80f35b503461027d578060031936011261027d5760405163687b54cd60e01b8152602090f35b503461027d576020908160031936011261027d576103486004353383526001845261030160ff604085205416613cd7565b6103096149b7565b6103116147b3565b818452600285526040842060018101805491966001600160a01b0392831695909386908490610341831515613dc5565b1614613d4a565b60068701805460ff811660078110156104855798859260066003936103736103d69a9b9c9d15613e49565b8c60d082901b6001600160e01b0319166334b1f22560e21b1461046a575b5060ff19161790550154885460405163a9059cbb60e01b81526001600160a01b0390991660048a015260248901829052909795869185169082908b9082906044820190565b03925af193841561045f577f9954d6823ea6810a4780ffb920d7c2a569d41b2d0c99ea5d9314f8ba805de4bc94610414918991610432575b506141c9565b541693604051908152a360015f80516020614ad98339815191525580f35b6104529150853d8711610458575b61044a8183613b54565b810190613fd2565b5f61040e565b503d610440565b6040513d89823e3d90fd5b6040818d61047f935260058952205415613f8c565b8c610391565b634e487b7160e01b89526021600452602489fd5b503461027d57602036600319011261027d576104b3613ad6565b6104bb61497f565b6001600160a01b038116908115610522576006805462010000600160b01b03191660109290921b62010000600160b01b03169190911790556040519081527f7a7b5a0a132f9e0581eb8527f66eae9ee89c2a3e79d4ac7e41a1f1f4d48a7fc290602090a180f35b60405162461bcd60e51b8152602060048201526011602482015270125b9d985b1a59081c9958da5c1a595b9d607a1b6044820152606490fd5b503461027d57602036600319011261027d57600480358252600260208190526040909220805460018201546001600160a01b03908116610100529382015484166101205260038201549282015460058301546006840154600785015460088601546009870154600a880154600b890154600c8a0154600d8b0154600e8c0154600f8d01549e909d919c929b61ffff9094169a9499959896169695949392909160129061060960108201613c35565b608052601181015460e052015460a05260405160c05260c0515261010051602060c051015261012051604060c0510152606060c0510152608060c051015260a060c051015261065f60c080510160ff8316613a5e565b60ff8160081c1660e060c051015263ffffffff60e01b9060d01b1661010060c051015261012060c051015261014060c051015261016060c051015261018060c05101526101a060c05101526101c060c05101526101e060c051015261020060c051015261022060c05101526102c061024060c05101526106e76102c060c05101608051613a6b565b63ffffffff60e01b60e05160e01b1661026060c051015260018060a01b0360e05160201c1661028060c051015260a0516102a060c051015260c051900360c051f35b503461027d57602036600319011261027d576060906040906001600160a01b03610751613ad6565b168152600360205220805490600260018201549101549060405192835260208301526040820152f35b503461027d57604036600319011261027d576004356024359033835260016020526107ab60ff604085205416613cd7565b6107b36147b3565b81845260026020526040842060018101546001600160a01b039291906107dc9084161515613dc5565b6107ec6005820154421115613f05565b600e8101805461099157859055600681018054909160d082901b6001600160e01b03191663a81913a560e01b81148015610981575b1561087d57505060ff8116600781101561086957916003602094926108555f80516020614af9833981519152979515613e49565b60ff19161790555b6040519586521693a380f35b634e487b7160e01b88526021600452602488fd5b909250631e61f6a360e31b81036108e5575060ff1660078110156108d157916108cc8460085f80516020614af983398151915296946108c060016020981461406a565b015416838316146140a9565b61085d565b634e487b7160e01b87526021600452602487fd5b63ec07e9d360e01b8114908115610970575b50610916575b50505f80516020614af98339815191529160209161085d565b60ff1660078110156108d1579161095c8460025f80516020614af98339815191529694610950878360209914908115610965575b50614028565b01541683831614613fea565b918193506108fd565b60019150145f61094a565b6334b1f22560e21b1490505f6108f7565b5063687b54cd60e01b8114610821565b60405162461bcd60e51b815260206004820152601760248201527f44656c6976657261626c6520616c7265616479207365740000000000000000006044820152606490fd5b503461027d57602036600319011261027d5761ffff600b604060209360043581526002855220015416604051908152f35b503461027d57602036600319011261027d5760406020916004358152600483522054604051908152f35b503461027d578060031936011261027d5760405163a81913a560e01b8152602090f35b503461027d57604036600319011261027d57600435610a71613aec565b903383526001602052610a8a60ff604085205416613cd7565b610a926147b3565b81845260026020526040842060018101546001600160a01b0392610abb91841690841614613d4a565b60068101805490926313f8162d60e01b60d083901b6001600160e01b03191601610b865760ff8216600781101561086957610af69015613ec4565b600a8301544211610b49576002809301951694856001600160601b0360a01b82541617905560ff19161790557f8259e46acb41c409f7763c24e2f5dba1221be1944b6960acbfaf4ee07ea8de1e8380a380f35b60405162461bcd60e51b8152602060048201526015602482015274141a5d18da08191958591b1a5b99481c185cdcd959605a1b6044820152606490fd5b60405162461bcd60e51b815260206004820152601060248201526f4e6f742061205069746368207461736b60801b6044820152606490fd5b503461027d57602036600319011261027d57610bd86149b7565b610be3600435614205565b60015f80516020614ad98339815191525580f35b503461027d578060031936011261027d576008546040516001600160a01b039091168152602090f35b503461027d578060031936011261027d576040516310cf2d7f60e01b8152602090f35b503461027d578060031936011261027d57602061ffff60065416604051908152f35b503461027d578060031936011261027d576040516360ce192b60e11b8152602090f35b503461027d57602080600319360112610ef8576004359033835260018152610cb660ff604085205416613cd7565b610cbe6147b3565b8284526002825260408420600181015490916001600160a01b0391610ce891831690831614613d4a565b600682019060ff8254610d0f631e61f6a360e31b63ffffffff60e01b8360d01b1614613e85565b1660078110156108d1576001610d25911461406a565b6005830154421115610ebc57908291600787959401938454918787526004825282604088205582610d9d575b5050815460ff1916909155506008810180546001600160a01b0319169055600901829055557fae5c872b4498d8e857e43522a12d5dfde96a0d5089787500d6495dade8e994fa8280a280f35b909192939495828483610de69354168460065460101c168c60405180968195829463a9059cbb60e01b84526004840160209093929193604081019460018060a01b031681520152565b03925af1908115610eb1578991610e94575b5015610e4f579282877fb18ae0fffd2ad14984107b582c2dec2fb6effb8bf06d43a59dd102d88d5a3e938a9897948997610e36600998600754613d3d565b60075560088701541693604051908152a3918193610d51565b60405162461bcd60e51b815260048101839052601760248201527f466f7266656974207472616e73666572206661696c65640000000000000000006044820152606490fd5b610eab9150833d85116104585761044a8183613b54565b5f610df8565b6040513d8b823e3d90fd5b60405162461bcd60e51b815260048101859052601460248201527315185cdac81b9bdd081e595d08195e1c1a5c995960621b6044820152606490fd5b5080fd5b503461027d57604036600319011261027d57610f16613aec565b3382526001602052610f2e60ff604084205416613cd7565b610f366149b7565b610f3e6147b3565b6004358352600260205260408320600181015491929091610f6c906001600160a01b03808616911614613d4a565b610f7c6005830154421115613f05565b600682015460d081901b6001600160e01b031916631e61f6a360e31b81036113c5575060ff811660078110156113b15790610fbb60016004931461406a565b6008840154610fd7906001600160a01b038581169116146140a9565b60ff19161760068301556002820180546001600160a01b0319166001600160a01b0383169081179091558452600360205260408420805461101790613d1b565b9055600682015460d01b6001600160e01b0319166334b1f22560e21b036113a75760078201545b61105e61271061105661ffff600b87015416846140ee565b048092613fc5565b855460405163a9059cbb60e01b81526001600160a01b038581166004830152602482018490529295929091602091839160449183918c91165af1801561045f576110af918891611388575b50614101565b816112fe575b600681015460d01b6001600160e01b031916631e61f6a360e31b14806112f1575b611235575b600681015460d01b6001600160e01b0319166334b1f22560e21b14611156575b506040805193845260208401919091526001600160a01b039182169390911691600435917f46c82fee4cedc2a273b6dc93ed59039d9208122b933b8f32bd87a0034e336a9791a460015f80516020614ad98339815191525580f35b611169600d820154600783015490613fc5565b9081611176575b506110fb565b86546001919091015460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810193909352602091839160449183918b91165af190811561122a57869161120b575b50156111ce575f80611170565b60405162461bcd60e51b8152602060048201526015602482015274105d58dd1a5bdb881c99599d5b990819985a5b1959605a1b6044820152606490fd5b611224915060203d6020116104585761044a8183613b54565b5f6111c1565b6040513d88823e3d90fd5b85546008820154600783015460405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291602091839160449183918c91165af1801561045f5761128d9188916112d2575b50614187565b60018060a01b0360088201541660078201546040519081527ffbf073a7709bd64bf3406dfd536abdbc9a3750eb99c8f26f543768c24a237b07602060043592a36110db565b6112eb915060203d6020116104585761044a8183613b54565b5f611287565b50600781015415156110d6565b855460065460405163a9059cbb60e01b81526001600160a01b0360109290921c821660048201526024810185905291602091839116818a816044810103925af1801561045f57611355918891611369575b50614145565b61136182600754613d3d565b6007556110b5565b611382915060203d6020116104585761044a8183613b54565b5f61134f565b6113a1915060203d6020116104585761044a8183613b54565b5f6110a9565b600382015461103e565b634e487b7160e01b86526021600452602486fd5b63ec07e9d360e01b8103611411575060ff811660078110156113b157906113f0600260049314614028565b600284015461140c906001600160a01b03858116911614613fea565b610fd7565b6334b1f22560e21b0361148d5760ff811660078110156113b1576001036114525760028301546004919061140c906001600160a01b03858116911614613fea565b60405162461bcd60e51b815260206004820152601360248201527215da5b9b995c881b9bdd081cd95b1958dd1959606a1b6044820152606490fd5b60ff811660078110156113b1579061140c82600493159081156114b1575b50613ec4565b60039150145f6114ab565b503461027d5760a036600319011261027d5733815260016020526114e660ff604083205416613cd7565b6114ee6149b7565b6114f66147b3565b60043582526002602052604082209061153160018060a01b036001840154168092611522821515613dc5565b6001600160a01b031614613d4a565b600682015460ff811660078110156119905761154d9015613e49565b60d01b6001600160e01b0319166334b1f22560e21b14611973575b60038201546005830154600c84015490600a85015491602435151594858096611967575b611850575b506044356117f4575b60643515159182806117d3575b611777575b6084351515948580611756575b6116fb575b866116ee575b5085156116c8575b508415611681575b5050821561163c575b50506115f9575b5060015f80516020614ad98339815191525580f35b6005600382015491015460405191825260208201527fd1530ce534a8c2beaea77a65ae6ad931e29c84727381c531cdfb47f2889ebe63604060043592a25f6115e4565b90915081611674575b5080611653575b5f806115dd565b50600681015460d01b6001600160e01b03191663ec07e9d360e01b1461164c565b905060843514155f611645565b91935090816116bb575b508061169a575b915f806115d4565b50600683015460d01b6001600160e01b0319166334b1f22560e21b14611692565b905060643514155f61168b565b9094506044351515906044356116e1575b50935f6115cc565b905060443514155f6116d9565b602435141595505f6115c4565b42608435111561171257608435600a8901556115be565b606460405162461bcd60e51b815260206004820152602060248201527f506974636820646561646c696e65206d75737420626520696e206675747572656044820152fd5b50600688015460d01b6001600160e01b03191663ec07e9d360e01b146115b9565b42606435111561178e57606435600c8801556115ac565b60405162461bcd60e51b815260206004820152601e60248201527f42696420646561646c696e65206d75737420626520696e2066757475726500006044820152606490fd5b50600687015460d01b6001600160e01b0319166334b1f22560e21b146115a7565b42604435111561180b57604435600587015561159a565b60405162461bcd60e51b815260206004820152601860248201527f457870697279206d75737420626520696e2066757475726500000000000000006044820152606490fd5b846024351115611897575b506024356003870155600686015460d01b6001600160e01b0319166334b1f22560e21b1461188a575b5f611591565b602435600d870155611884565b60206118e5916118a960243588613fc5565b8a5460405163a9059cbb60e01b81526001600160a01b0393841660048201526024810192909252909384929091169082908c9082906044820190565b03925af190811561195c57889161193d575b5015611903575f61185b565b60405162461bcd60e51b81526020600482015260126024820152711554d110c81c99599d5b990819985a5b195960721b6044820152606490fd5b611956915060203d6020116104585761044a8183613b54565b5f6118f7565b6040513d8a823e3d90fd5b5084602435141561158c565b6004358352600560205261198b604084205415613f8c565b611568565b634e487b7160e01b85526021600452602485fd5b503461027d578060031936011261027d576119ea6040516119c481613b39565b60058152640352e302e360dc1b6020820152604051918291602083526020830190613a6b565b0390f35b503461027d576119fd36613bba565b903383526001602052611a1660ff604085205416613cd7565b611a1e6147b3565b8184526002602052604084209260018060a01b03611a43816001870154161515613dc5565b6006850180549092611a6b60d083901b6001600160e01b0319166334b1f22560e21b14613e07565b60ff8216600781101561048557611a829015613e49565b600d8701548111611b0b57859360016020938360077f50fe806ad7090c0b4c89850edc7f5f0619df0b894aa98735d1d54c60548bf2869760028d019a169b8c9a8b6001600160601b0360a01b825416179055015560ff1916179055604051908152a37f8259e46acb41c409f7763c24e2f5dba1221be1944b6960acbfaf4ee07ea8de1e8380a380f35b60405162461bcd60e51b815260206004820152601760248201527f50726963652065786365656473206d61782070726963650000000000000000006044820152606490fd5b503461027d57611b5f36613bba565b9082526005602052604082208054821015611ba357611b7e9250613bd0565b508054600190910154604080516001600160a01b039093168352602083019190915290f35b8280fd5b503461027d57602036600319011261027d576020906040906001600160a01b03611bcf613ad6565b168152600983522054604051908152f35b503461027d57602036600319011261027d576020611bff600435613f40565b6040516001600160a01b039091168152f35b503461027d576020908160031936011261027d5760043581526005825260408120918254906001600160401b038211611cfd5791929060405190611c5a848260051b0183613b54565b8082528382018093865284862086915b838310611cc057505050506040519280840191818552518092526040840192945b828110611c985784840385f35b855180516001600160a01b031685528201518483015294810194604090930192600101611c8b565b60028760019260409a9997989a51611cd781613b39565b848060a01b03865416815284860154838201528152019201920191909694939596611c6a565b634e487b7160e01b83526041600452602483fd5b503461027d57611d2036613bba565b90338352602060018152611d3a60ff604086205416613cd7565b611d426147b3565b828552600282526040852060018101546001600160a01b0395929190611d6b9087161515613dc5565b600681015460ff90611d9360d082901b6001600160e01b0319166334b1f22560e21b14613e07565b16600781101561086957611da79015613e49565b600c810154421015611f1757600d8101548311611eda57848752600584526040872090828254158015611ecd575b611e90575b50508560405192611dea84613b39565b16958683528483019184835280549068010000000000000000821015611e7c5790611e1a91600182018155613bd0565b939093611e68575183546001600160a01b031916911617825551600191909101556040519081527f50fe806ad7090c0b4c89850edc7f5f0619df0b894aa98735d1d54c60548bf2869190a380f35b634e487b7160e01b89526004899052602489fd5b634e487b7160e01b8a52604160045260248afd5b601282018590556011919091018054640100000000600160c01b03191660209290921b640100000000600160c01b03169190911790555f82611dda565b5060128201548510611dd5565b60405162461bcd60e51b81526004810185905260156024820152744269642065786365656473206d617820707269636560581b6044820152606490fd5b60405162461bcd60e51b8152600481018590526013602482015272109a5908191958591b1a5b99481c185cdcd959606a1b6044820152606490fd5b503461027d578060031936011261027d575f80516020614ab9833981519152546040516001600160a01b039091168152602090f35b503461027d57611f9636613bba565b903383526001602052611faf60ff604085205416613cd7565b611fb76149b7565b611fbf6147b3565b81845260026020526040842060018101549093916001600160a01b0391611fe99083161515613dc5565b169283156120aa57600681018054909161201960d083901b6001600160e01b031916631e61f6a360e31b14613e85565b60ff821660078110156108695784927f0c94d586dd5b832830019d8f427e4aa13e8ddbbf614cc0817a6b8dd9c5ae24be9560076020969461205c60019515613ec4565b61206c6005820154421115613f05565b6008810180546001600160a01b0319168c179055426009820155015560ff1916179055604051908152a360015f80516020614ad98339815191525580f35b60405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b2103bb7b935b2b960911b6044820152606490fd5b503461027d57606036600319011261027d576120fa613ad6565b612102613aec565b9060443561ffff81168091036122c3577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009283549260ff8460401c1615936001600160401b038116801590816122bb575b60011490816122b1575b1590816122a8575b506122965767ffffffffffffffff198116600117865584612277575b5061218a6149e6565b6121926149e6565b61219b33614742565b6001600160a01b03908282161561223a576121ba612710851115613d86565b166001600160601b0360a01b8654161785556006549062010000600160b01b039060101b169069ffffffffffffffffffff60b01b1617176006556121fc575080f35b68ff00000000000000001981541690557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a180f35b60405162461bcd60e51b8152602060048201526015602482015274125b9d985b1a5908199959481c9958da5c1a595b9d605a1b6044820152606490fd5b68ffffffffffffffffff1916680100000000000000011785555f612181565b60405163f92ee8a960e01b8152600490fd5b9050155f612165565b303b15915061215d565b869150612153565b5f80fd5b503461027d578060031936011261027d57604051631e61f6a360e31b8152602090f35b503461027d578060031936011261027d5761230361497f565b5f80516020614ab983398151915280546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b503461027d578060031936011261027d576040516334b1f22560e21b8152602090f35b503461027d578060031936011261027d5760405163ec07e9d360e01b8152602090f35b503461027d578060031936011261027d576020600754604051908152f35b503461027d57602036600319011261027d576123d1613ad6565b6123d961497f565b6001600160a01b0316801561242d57808252600160205260408220600160ff198254161790557f8cc3357993414364e6add1411f4853a44efd6c6a279b45a373ad4376d9ea1262602060405160018152a280f35b60405162461bcd60e51b815260206004820152601960248201527f496e76616c696420666f727761726465722061646472657373000000000000006044820152606490fd5b503461027d57602036600319011261027d5760209060ff906040906001600160a01b0361249d613ad6565b168152600184522054166040519015158152f35b503461027d57602080600319360112610ef857600435338352600182526124de60ff604085205416613cd7565b808352600282526040832060018101546001600160a01b03906125049082161515613dc5565b6006820180549092909161252e60d084901b6001600160e01b0319166334b1f22560e21b14613e07565b60ff83166007811015610869576125459015613e49565b600c82015442106125e7576011820154861c169485156125af57506002810180546001600160a01b03191686179055601281015460079091015560ff191660011790557f8259e46acb41c409f7763c24e2f5dba1221be1944b6960acbfaf4ee07ea8de1e8380a380f35b6064906040519062461bcd60e51b825260048201526011602482015270139bc8189a591cc81cdd589b5a5d1d1959607a1b6044820152fd5b60405162461bcd60e51b815260048101879052601760248201527f42696420646561646c696e65206e6f74207061737365640000000000000000006044820152606490fd5b503461027d578060031936011261027d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630036126975760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b60405163703e46dd60e11b8152600490fd5b50604036600319011261027d576126be613ad6565b6024356001600160401b038111611ba35736602382011215611ba3576126ee903690602481600401359101613b75565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116308114908115612871575b506126975761273161497f565b8216916040516352d1902d60e01b8152602081600481875afa859181612839575b5061277057604051634c9c8ce360e01b815260048101859052602490fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc908181036128215750813b156128085780546001600160a01b03191684179055604051927fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8580a28151156127ee576127ea9250614a27565b5080f35b5050346127f9575080f35b63b398979f60e01b8152600490fd5b604051634c9c8ce360e01b815260048101859052602490fd5b60249060405190632a87526960e21b82526004820152fd5b9091506020813d602011612869575b8161285560209383613b54565b810103126128655751905f612752565b8580fd5b3d9150612848565b9050817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541614155f612724565b503461027d57602036600319011261027d576128b9613ad6565b6128c161497f565b6001600160a01b0316808252600160209081526040808420805460ff19169055518381527f8cc3357993414364e6add1411f4853a44efd6c6a279b45a373ad4376d9ea12629190a280f35b503461027d578060031936011261027d5760065460405160109190911c6001600160a01b03168152602090f35b503461027d57602036600319011261027d5760043561ffff81168091036122c35760207fb50f6c85631b448ef50a9b0055afaff00e6d81ec0ebf056cd4bef2d8b32dbbbc9161298661497f565b612994612710821115613d86565b8061ffff196006541617600655604051908152a180f35b503461027d57602036600319011261027d576129c5613ad6565b6129cd61497f565b600880546001600160a01b0319166001600160a01b039290921691821790557fae9f27c36d3aa52eba3f1db0e15d93fd0981a7ba056f20bed382a145202a301d8280a280f35b503461027d57602036600319011261027d576040606091612a32613ad6565b81838051612a3f81613b1e565b828152826020820152015260018060a01b03168152600360205220604051612a6681613b1e565b815491828252604060026001830154926020850193845201549201918252604051928352516020830152516040820152f35b50346122c35760c03660031901126122c35760ff60243516602435036122c3576084356001600160401b0381116122c357612ad7903690600401613aa9565b90335f526001602052612af060ff60405f205416613cd7565b612af86147b3565b6004355f90815260026020526040902060018101549091612b26916001600160a01b03918216911614613d4a565b600681015460ff81166007811015612dfc57600403612dc357606460ff6024351611612d875760081c60ff16612d525760068101805461ff00191660243560081b61ff00161790556002810180546001600160a01b03165f9081526003602052604090206001018054612b9890613d1b565b905560018060a01b038154165f526003602052600260405f2001612bc260ff602435168254613d3d565b905560018060a01b0390541660405160ff60243516815260643560208201527f5c9426dd920816b23cfd9daad6ecdbe1f542a77c85a30cbe25306443c8ede33c604060043592a3604435151580612d3e575b612c1c578380f35b6008546006909101546001600160a01b039190911690612c489060d01b6001600160e01b031916614831565b90803b156122c357612cc55f604086948296825198899788968794631e01b53f60e11b8652604435600487015260ff60243516600f0b60248701528760448701526101006064870152600f6101048701526e746d702e7461736b2e726174696e6760881b6101248701526101406084870152610144860190613a6b565b92601c858503600319810160a48801528886520160c486015281602085015285840137818101840185905260a43560e4840152601f01601f1916010301925af1612d10575b80808380f35b90506001600160401b038111612d2a576040525f80612d0a565b634e487b7160e01b5f52604160045260245ffd5b506008546001600160a01b03161515612c14565b60405162461bcd60e51b815260206004820152600d60248201526c105b1c9958591e481c985d1959609a1b6044820152606490fd5b60405162461bcd60e51b81526020600482015260146024820152730526174696e67206d75737420626520302d3130360641b6044820152606490fd5b60405162461bcd60e51b815260206004820152601160248201527015185cdac81b9bdd081858d8d95c1d1959607a1b6044820152606490fd5b634e487b7160e01b5f52602160045260245ffd5b346122c3576101003660031901126122c3576044356001600160e01b0319811681036122c35760c4356001600160401b0381116122c357612e55903690600401613aa9565b9060e4356001600160e01b0319811690036122c357335f526001602052612e8260ff60405f205416613cd7565b6001600160a01b03612e926147b3565b169081156135ed57600435156135a85760243515613563576001600160e01b0319841663a81913a560e01b148015613549575b801561352f575b8015613515575b80156134fb575b156134c7576001600160e01b031984166334b1f22560e21b146133ff575b815f52600960205260405f20805490612f1082613d1b565b9055604051904660208301523060408301528360608301526080820152608081528060a08101106001600160401b0360a083011117612d2a5760a081016040526020815191012092613082612f6760243542613d3d565b926001600160e01b0319871663ec07e9d360e01b036133f857612f8c60643542613d3d565b925b60065461ffff166001600160e01b031989166334b1f22560e21b036133f257612fb960843542613d3d565b6001600160e01b03198a166334b1f22560e21b036133eb57600435915b6001600160e01b03198b166334b1f22560e21b036133e45760e435965b604051986130008a613b02565b8b8a528a60208b01525f60408b015260043560608b01524260808b015260a08a01525f60c08a01525f60e08a015263ffffffff60e01b8c166101008a01525f6101208a01525f6101408a01525f6101608a01526101808901526101a08801526101c08701526101e08601525f61020086015260a4356102208601523691613b75565b61024083015263ffffffff60e01b166102608201525f6102808201525f6102a0820152825f52600260205260405f2090805182556001820160018060a01b036020830151166001600160601b0360a01b8254161790556002820160018060a01b036040830151166001600160601b0360a01b825416179055606081015160038301556080810151600483015560a0810151600583015560c08101516007811015612dfc5760068301805460e084015161010085015165ffffffffffff1990921660ff9490941693909317600893841b61ff00161760d09190911c65ffffffff000016179055610120820151600784015561014082015190830180546001600160a01b0319166001600160a01b03929092169190911790556101608101516009830155610180810151600a8301556101a0810151600b8301805461ffff191661ffff929092169190911790556101c0810151600c8301556101e0810151600d830155610200810151600e830155610220810151600f8301556102408101518051906001600160401b038211612d2a5761321d6010850154613bfd565b601f81116133a0575b5091859391602097938890601f8311600114613308577fbdfc881a16a3a04e41fed1091f413ffc0872156818c3b19a8331a07a020ca690959383606096946012946102a0945f926132fd575b50508160011b915f199060031b1c19161760108501555b610260810151601185018054610280840151640100000000600160c01b0360209190911b1660e09390931c6001600160c01b03199091161791909117905501519101556132d860243542613d3d565b906040519160043583528883015263ffffffff60e01b166040820152a3604051908152f35b015190508d80613272565b90601085015f52895f20915f5b601f19851681106133865750936001846012946102a0947fbdfc881a16a3a04e41fed1091f413ffc0872156818c3b19a8331a07a020ca6909a9860609a98601f1981161061336e575b505050811b016010850155613289565b01515f1960f88460031b161c191690558d808061335e565b8183015184558a9850600190930192918b01918b01613315565b601085015f5260205f20601f840160051c8101602085106133dd575b601f830160051c820181106133d2575050613226565b5f81556001016133bc565b50806133bc565b5f96612ff3565b5f91612fd6565b5f612fb9565b5f92612f8e565b60e4356001600160e01b031916633c948d2360e01b1480156134ab575b801561348f575b8015613473575b612ef85760405162461bcd60e51b815260206004820152601760248201527f496e76616c69642061756374696f6e20737562747970650000000000000000006044820152606490fd5b5060e4356001600160e01b0319166310cf2d7f60e01b1461342a565b5060e4356001600160e01b03191663e1022c5b60e01b14613423565b5060e4356001600160e01b0319166360ce192b60e11b1461341c565b60405162461bcd60e51b815260206004820152600c60248201526b496e76616c6964206d6f646560a01b6044820152606490fd5b506001600160e01b031984166334b1f22560e21b14612eda565b506001600160e01b0319841663687b54cd60e01b14612ed3565b506001600160e01b0319841663ec07e9d360e01b14612ecc565b506001600160e01b03198416631e61f6a360e31b14612ec5565b60405162461bcd60e51b815260206004820152601f60248201527f4475726174696f6e206d7573742062652067726561746572207468616e2030006044820152606490fd5b60405162461bcd60e51b815260206004820152601d60248201527f526577617264206d7573742062652067726561746572207468616e20300000006044820152606490fd5b60405162461bcd60e51b815260206004820152601160248201527024b73b30b634b2103932b8bab2b9ba32b960791b6044820152606490fd5b346122c3575f3660031901126122c35760405163e1022c5b60e01b8152602090f35b346122c35760203660031901126122c3575f6102a060405161366981613b02565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201528261010082015282610120820152826101408201528261016082015282610180820152826101a0820152826101c0820152826101e082015282610200820152826102208201526060610240820152826102608201528261028082015201526004355f52600260205260405f206040519061370f82613b02565b8054825260018101546001600160a01b03908116602084015260028201541660408301526003810154606083015260048101546080830152600581015460a0830152600681015490600760ff83161015612dfc5760ff80831660c0850152600883811c90911660e085015260d09290921b6001600160e01b0319166101008401526007810154610120840152908101546001600160a01b03166101408301526009810154610160830152600a810154610180830152600b81015461ffff166101a0830152600c8101546101c0830152600d8101546101e0830152600e810154610200830152600f81015461022083015260129061380e60108201613c35565b610240840152601181015463ffffffff60e01b8160e01b1661026085015260018060a01b039060201c1661028084015201546102a08201526040518091602082528051602083015260018060a01b03602082015116604083015260018060a01b03604082015116606083015260608101516080830152608081015160a083015260a081015160c08301526138aa60c082015160e0840190613a5e565b60ff60e08201511661010083015263ffffffff60e01b6101008201511661012083015261012081015161014083015260018060a01b03610140820151166101608301526101608101516101808301526101808101516101a083015261ffff6101a0820151166101c08301526101c08101516101e08301526101e08101516102008301526102008101516102208301526102208101516102408301526102408101516102a06139676102c092836102608701526102e0860190613a6b565b6102608401516001600160e01b031916610280868101919091528401516001600160a01b031682860152920151908301520390f35b346122c3575f3660031901126122c3575f546040516001600160a01b039091168152602090f35b346122c35760203660031901126122c3576004359063ffffffff60e01b82168092036122c35760209163528d9f5760e11b8114908115613a4d575b8115613a3c575b8115613a2b575b8115613a1a575b5015158152f35b6301ffc9a760e01b14905083613a13565b634eb48e9b60e11b81149150613a0c565b6340f6076960e01b81149150613a05565b63c8db44e360e01b811491506139fe565b906007821015612dfc5752565b91908251928382525f5b848110613a95575050825f602080949584010152601f8019910116010190565b602081830181015184830182015201613a75565b9181601f840112156122c3578235916001600160401b0383116122c357602083818601950101116122c357565b600435906001600160a01b03821682036122c357565b602435906001600160a01b03821682036122c357565b6102c081019081106001600160401b03821117612d2a57604052565b606081019081106001600160401b03821117612d2a57604052565b604081019081106001600160401b03821117612d2a57604052565b90601f801991011681019081106001600160401b03821117612d2a57604052565b9291926001600160401b038211612d2a5760405191613b9e601f8201601f191660200184613b54565b8294818452818301116122c3578281602093845f960137010152565b60409060031901126122c3576004359060243590565b8054821015613be9575f5260205f209060011b01905f90565b634e487b7160e01b5f52603260045260245ffd5b90600182811c92168015613c2b575b6020831014613c1757565b634e487b7160e01b5f52602260045260245ffd5b91607f1691613c0c565b9060405191825f8254613c4781613bfd565b908184526020946001916001811690815f14613cb55750600114613c77575b505050613c7592500383613b54565b565b5f90815285812095935091905b818310613c9d575050613c7593508201015f8080613c66565b85548884018501529485019487945091830191613c84565b92505050613c7594925060ff191682840152151560051b8201015f8080613c66565b15613cde57565b60405162461bcd60e51b81526020600482015260156024820152742737ba103a393ab9ba32b2103337b93bb0b93232b960591b6044820152606490fd5b5f198114613d295760010190565b634e487b7160e01b5f52601160045260245ffd5b91908201809211613d2957565b15613d5157565b60405162461bcd60e51b815260206004820152600d60248201526c2737ba103932b8bab2b9ba32b960991b6044820152606490fd5b15613d8d57565b60405162461bcd60e51b815260206004820152601060248201526f08ccaca4084a0a640e8dede40d0d2ced60831b6044820152606490fd5b15613dcc57565b60405162461bcd60e51b815260206004820152601360248201527215185cdac8191bd95cc81b9bdd08195e1a5cdd606a1b6044820152606490fd5b15613e0e57565b60405162461bcd60e51b81526020600482015260136024820152724e6f7420616e2041756374696f6e207461736b60681b6044820152606490fd5b15613e5057565b60405162461bcd60e51b815260206004820152600d60248201526c2a30b9b5903737ba1037b832b760991b6044820152606490fd5b15613e8c57565b60405162461bcd60e51b815260206004820152601060248201526f4e6f74206120436c61696d207461736b60801b6044820152606490fd5b15613ecb57565b60405162461bcd60e51b81526020600482015260126024820152715461736b206e6f7420617661696c61626c6560701b6044820152606490fd5b15613f0c57565b60405162461bcd60e51b815260206004820152600c60248201526b15185cdac8195e1c1a5c995960a21b6044820152606490fd5b5f908152600260205260409020600681015460d01b6001600160e01b03191663687b54cd60e01b14613f7c57600101546001600160a01b031690565b506008546001600160a01b031690565b15613f9357565b60405162461bcd60e51b815260206004820152600a602482015269109a591cc8195e1a5cdd60b21b6044820152606490fd5b91908203918211613d2957565b908160209103126122c3575180151581036122c35790565b15613ff157565b60405162461bcd60e51b815260206004820152600f60248201526e0aedee4d6cae440dad2e6dac2e8c6d608b1b6044820152606490fd5b1561402f57565b60405162461bcd60e51b815260206004820152601360248201527215dbdc9ad95c881b9bdd081cd95b1958dd1959606a1b6044820152606490fd5b1561407157565b60405162461bcd60e51b815260206004820152601060248201526f15185cdac81b9bdd0818db185a5b595960821b6044820152606490fd5b156140b057565b60405162461bcd60e51b81526020600482015260166024820152752bb7b935b2b91036bab9ba1031329031b630b4b6b2b960511b6044820152606490fd5b81810292918115918404141715613d2957565b1561410857565b60405162461bcd60e51b815260206004820152601560248201527415dbdc9ad95c881c185e5b595b9d0819985a5b1959605a1b6044820152606490fd5b1561414c57565b60405162461bcd60e51b8152602060048201526013602482015272119959481d1c985b9cd9995c8819985a5b1959606a1b6044820152606490fd5b1561418e57565b60405162461bcd60e51b815260206004820152601360248201527214dd185ad9481c995d1d5c9b8819985a5b1959606a1b6044820152606490fd5b156141d057565b60405162461bcd60e51b815260206004820152600d60248201526c1499599d5b990819985a5b1959609a1b6044820152606490fd5b805f52600260205260405f20906001820161422a60018060a01b038254161515613dc5565b600583015442111561470a576006830192835460ff81166007811015612dfc57600481146146cd57600681146146975760d082901b6001600160e01b0319166334b1f22560e21b14908161468c575b5061444a5750835460ff1916600517845560038101545f8054845460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810185905293979392602092849260449284929091165af18015614419576142e1915f9161443157506141c9565b5460d01b6001600160e01b031916631e61f6a360e31b1480614424575b61433d575b50546040519283526001600160a01b0316917fe4ec5a16418560274520eb1bbcfc0e4377564571957fcc2f8e2a7f44afba10de90602090a3565b5f80546008830180546007909401805460405163a9059cbb60e01b81526001600160a01b03968716600482015260248101919091529591949193909260209287926044928492165af1928315614419577ffbf073a7709bd64bf3406dfd536abdbc9a3750eb99c8f26f543768c24a237b07602087926143e582977fe4ec5a16418560274520eb1bbcfc0e4377564571957fcc2f8e2a7f44afba10de995f916144025750614187565b5493546040519081526001600160a01b0390941693a39150614303565b6112eb9150843d86116104585761044a8183613b54565b6040513d5f823e3d90fd5b50600781015415156142fe565b610452915060203d6020116104585761044a8183613b54565b9092916007840193845495600461447761271061446f61ffff600b870154168b6140ee565b048099613fc5565b9460ff1916179055600281019460018060a01b038654165f52600360205260405f206144a38154613d1b565b905583614638575b866145c4575b60036144c1920154905490613fc5565b8061450e575b505492546040805192835260208301959095526001600160a01b03908116949316927f46c82fee4cedc2a273b6dc93ed59039d9208122b933b8f32bd87a0034e336a9791a4565b5f8054835460405163a9059cbb60e01b81526001600160a01b03918216600482015260248101949094526020928492604492849291165af1908115614419575f916145a5575b5015614560575f6144c7565b60405162461bcd60e51b815260206004820152601760248201527f52657175657374657220726566756e64206661696c65640000000000000000006044820152606490fd5b6145be915060203d6020116104585761044a8183613b54565b5f614554565b5f805460065460405163a9059cbb60e01b81526001600160a01b0360109290921c82166004820152602481018b90529492602092869260449284929091165af1908115614419576146216003926144c1955f916113695750614145565b61462d89600754613d3d565b6007559250506144b1565b5f8054875460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810188905292602092849260449284929091165af1801561441957614687915f916113885750614101565b6144ab565b60019150145f614279565b60405162461bcd60e51b815260206004820152600e60248201526d15185cdac818d85b98d95b1b195960921b6044820152606490fd5b60405162461bcd60e51b815260206004820152601560248201527415185cdac8185b1c9958591e481858d8d95c1d1959605a1b6044820152606490fd5b60405162461bcd60e51b815260206004820152601060248201526f15185cdac81b9bdd08195e1c1a5c995960821b6044820152606490fd5b6001600160a01b0390811690811561479b575f80516020614ab983398151915280546001600160a01b031981168417909155167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b604051631e4fbdf760e01b81525f6004820152602490fd5b335f52600160205260ff60405f2054166147cb573390565b604051631cb9dd3760e21b8152602081600481335afa908115614419575f916147f2575090565b90506020813d602011614829575b8161480d60209383613b54565b810103126122c357516001600160a01b03811681036122c35790565b3d9150614800565b6001600160e01b03191663a81913a560e01b811461495357631e61f6a360e31b81146149285763ec07e9d360e01b81146148fd5763687b54cd60e01b81146148ce576334b1f22560e21b146148a257604051602081018181106001600160401b03821117612d2a576040525f815290565b6040516148ae81613b39565b601081526f3a36b81736b7b2329730bab1ba34b7b760811b602082015290565b506040516148db81613b39565b6012815271746d702e6d6f64652e62656e63686d61726b60701b602082015290565b5060405161490a81613b39565b600e81526d0e8dae05cdadec8ca5ce0d2e8c6d60931b602082015290565b5060405161493581613b39565b600e81526d746d702e6d6f64652e636c61696d60901b602082015290565b5060405161496081613b39565b600f81526e746d702e6d6f64652e626f756e747960881b602082015290565b5f80516020614ab9833981519152546001600160a01b0316330361499f57565b60405163118cdaa760e01b8152336004820152602490fd5b5f80516020614ad983398151915260028154146149d45760029055565b604051633ee5aeb560e01b8152600490fd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615614a1557565b604051631afcd79f60e31b8152600490fd5b905f8091602081519101845af48080614aa5575b15614a5b5750506040513d81523d5f602083013e60203d82010160405290565b15614a8257604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b3d15614a93576040513d5f823e3d90fd5b60405163d6bda27560e01b8152600490fd5b503d151580614a3b5750813b1515614a3b56fe9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f007d30d1881f77d1707467f58525863cb9ccbaedc1c4ddb2a4d9dd1349ca7a4e4ba26469706673582212203f41f1d27b847d018a9f2b772550cb9709ea3d8eebdef74b82b1bbbdd61f09e564736f6c63430008180033","sourceMap":"2182:33913:50:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;;;;-1:-1:-1;;2182:33913:50;;;;2378:1:20;2182:33913:50;;:::i;:::-;2324:62:20;;:::i;:::-;2378:1;:::i;:::-;2182:33913:50;;;;;;;;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;;;;;;;;;29795:53;2182:33913;;6035:10;2182:33913;;;;;6009:63;2182:33913;;;;;;6009:63;:::i;:::-;2989:103:44;;:::i;:::-;29654:18:50;;:::i;:::-;2182:33913;;;29702:5;2182:33913;;;;;;29733:14;;2182:33913;;;;-1:-1:-1;;;;;2182:33913:50;;;;;;;;;;29725:60;29733:28;;;29725:60;:::i;:::-;2182:33913;29803:27;29795:53;:::i;:::-;29866:11;;;2182:33913;;;;;;;;;;;29866:30;;;:11;30102;29866:30;29858:56;30131:48;29866:30;;;;;29858:56;:::i;:::-;2182:33913;;;;;-1:-1:-1;;;;;;2182:33913:50;-1:-1:-1;;;29928:20:50;29924:102;;2182:33913;-1:-1:-1;;;2182:33913:50;;;;30102:11;2182:33913;;;;;-1:-1:-1;;;30131:48:50;;-1:-1:-1;;;;;2182:33913:50;;;;30131:48;;2182:33913;;;;;;;;;;;;;;;;;;;;;;;;;;30131:48;;;;;;;;;;30212:51;30131:48;30123:74;30131:48;;;;;2182:33913;30123:74;;:::i;:::-;2182:33913;;;;;;;;30212:51;2182:33913;-1:-1:-1;;;;;;;;;;;2182:33913:50;;;30131:48;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;2182:33913;;;;;;;;;29924:102;2182:33913;;;29964:51;2182:33913;;29972:8;2182:33913;;;;29972:28;29964:51;:::i;:::-;29924:102;;;2182:33913;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;;;;-1:-1:-1;;2182:33913:50;;;;;;:::i;:::-;2324:62:20;;:::i;:::-;-1:-1:-1;;;;;2182:33913:50;;;10063:23;;2182:33913;;10118:24;2182:33913;;-1:-1:-1;;;;;;2182:33913:50;;;;;;-1:-1:-1;;;;;2182:33913:50;;;;;;;;;;;;10157:30;;2182:33913;;10157:30;2182:33913;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;;;-1:-1:-1;;2182:33913:50;;;;;;;;;3904:37;2182:33913;;;;;;;;;;;3904:37;;2182:33913;-1:-1:-1;;;;;2182:33913:50;;;;;3904:37;;;2182:33913;;;;;3904:37;;;2182:33913;3904:37;;;2182:33913;3904:37;;;2182:33913;3904:37;;;2182:33913;3904:37;;;2182:33913;;3904:37;;2182:33913;3904:37;;;2182:33913;3904:37;;;2182:33913;3904:37;;;2182:33913;3904:37;;;2182:33913;3904:37;;;2182:33913;3904:37;;;2182:33913;3904:37;;;2182:33913;;;;;;;;;;;;;;;;;;;;;;;;;;3904:37;;;2182:33913;3904:37;;;:::i;:::-;;;;;;2182:33913;;;3904:37;2182:33913;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2182:33913:50;;;;;;;;-1:-1:-1;;;;;2182:33913:50;;:::i;:::-;;;;3947:50;2182:33913;;;;;3947:50;;;;;2182:33913;3947:50;;2182:33913;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2182:33913:50;;;;;;;;6035:10;;2182:33913;;;;;6009:63;2182:33913;;;;;;6009:63;:::i;:::-;20586:18;;:::i;:::-;2182:33913;;;20634:5;2182:33913;;;;;;20665:14;;2182:33913;-1:-1:-1;;;;;2182:33913:50;;;20657:60;;2182:33913;;20665:28;;20657:60;:::i;:::-;20727:59;20754:15;;;2182:33913;20735:15;:34;;20727:59;:::i;:::-;20805:16;;;2182:33913;;;;;;;20918:9;;;2182:33913;;20918:9;;2182:33913;;;;-1:-1:-1;;;;;;2182:33913:50;-1:-1:-1;;;20918:19:50;;:45;;;;2182:33913;20914:625;;;2182:33913;;;;;;;;;;;20987:30;21063:26;2182:33913;20987:30;;20979:56;-1:-1:-1;;;;;;;;;;;20987:30:50;;;20979:56;:::i;:::-;-1:-1:-1;;2182:33913:50;;;;20914:625;2182:33913;;;;;;21554:42;;2182:33913;;;-1:-1:-1;;;2182:33913:50;;;;;;;;20914:625;2182:33913;;-1:-1:-1;;;;21110:18:50;;2182:33913;;;;;;;;;;;21152:33;21220:57;21152:33;21238:12;-1:-1:-1;;;;;;;;;;;21152:33:50;;21144:62;2182:33913;;21152:33;;21144:62;:::i;:::-;21238:12;2182:33913;;;;;21228:22;21220:57;:::i;:::-;20914:625;;2182:33913;-1:-1:-1;;;2182:33913:50;;;;;;;;21106:433;-1:-1:-1;;;21298:18:50;;;:42;;;;21106:433;21294:245;;;21106:433;;;-1:-1:-1;;;;;;;;;;;21106:433:50;2182:33913;21106:433;20914:625;;21294:245;2182:33913;;;;;;;;21364:40;21479:49;21364:40;20634:5;-1:-1:-1;;;;;;;;;;;21364:40:50;;21356:109;21364:40;;2182:33913;21364:40;;:77;;;;;21294:245;21356:109;;:::i;:::-;21497:11;2182:33913;;;;;21487:21;21479:49;:::i;:::-;21294:245;;;;;;21364:77;2182:33913;21408:33;;;21364:77;;;21298:42;-1:-1:-1;;;21320:20:50;;-1:-1:-1;21298:42:50;;;20918:45;-1:-1:-1;;;;20941:22:50;;20918:45;;2182:33913;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2182:33913:50;;;;;34490:20;2182:33913;;;;;;;34490:5;2182:33913;;;34490:20;2182:33913;;;;;;;;;;;;;;;-1:-1:-1;;2182:33913:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;-1:-1:-1;;2182:33913:50;;;;;;;;:::i;:::-;6035:10;;2182:33913;;;;;6009:63;2182:33913;;;;;;6009:63;:::i;:::-;16443:18;;:::i;:::-;2182:33913;;;16491:5;2182:33913;;;;;;16535:14;;2182:33913;-1:-1:-1;;;;;2182:33913:50;16514:53;;2182:33913;;;;;16522:27;16514:53;:::i;:::-;16585:9;;;2182:33913;;16585:9;;-1:-1:-1;;;2182:33913:50;;;;-1:-1:-1;;;;;;2182:33913:50;16585:18;2182:33913;;;;;;;;;;;16634:61;16642:30;;16634:61;:::i;:::-;16732:18;;;2182:33913;16713:15;:37;2182:33913;;16491:5;16787:11;;;2182:33913;;;;-1:-1:-1;;;;;2182:33913:50;;;;;;;;;;;;;;16872:34;;;;2182:33913;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;;;-1:-1:-1;;2182:33913:50;;;;2989:103:44;;:::i;:::-;3054:1;2182:33913:50;;3054:1:44;:::i;:::-;2182:33913:50;-1:-1:-1;;;;;;;;;;;2182:33913:50;;;;;;;;;;;;;;;;4209:33;2182:33913;;;-1:-1:-1;;;;;2182:33913:50;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;;;;;;;;;4104:27;2182:33913;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;;;;;;;;;;6035:10;;2182:33913;;;;;6009:63;2182:33913;;;;;;6009:63;:::i;:::-;24484:18;;:::i;:::-;2182:33913;;;24532:5;2182:33913;;;;;;24576:14;;2182:33913;;;-1:-1:-1;;;;;2182:33913:50;24555:53;;2182:33913;;;;;24563:27;24555:53;:::i;:::-;24626:9;;;2182:33913;;;;24618:47;2182:33913;;;;;;;;;;24626:18;24618:47;:::i;:::-;2182:33913;;;;;;;;24675:62;24683:33;;24675:62;:::i;:::-;24773:15;;;2182:33913;24755:15;:33;2182:33913;;;24844:16;;;2182:33913;24844:16;;;;2182:33913;;;;;;;;;;;;;;;24917:13;24913:234;;2182:33913;-1:-1:-1;;2182:33913:50;;-1:-1:-1;;2182:33913:50;;;;-1:-1:-1;25196:12:50;;;2182:33913;;-1:-1:-1;;;;;;2182:33913:50;;;25231:14;;2182:33913;;;;25295:20;;;;2182:33913;;24913:234;2182:33913;;;;;;;;;24954:43;2182:33913;;;;24626:9;2182:33913;;;;;;;;;;;;;;;;24954:43;;2182:33913;24954:43;;2182:33913;;;;;;;;;;;;;;;;;;;;;24954:43;;;;;;;;;;;;;;24913:234;2182:33913;;;;;;;25089:47;2182:33913;;;;;;25039:31;25231:14;2182:33913;;;25039:31;:::i;:::-;2182:33913;;25112:12;;;2182:33913;;;;;;;;25089:47;24913:234;;;;;2182:33913;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;;;;;;;;;;24954:43;;;;;;;;;;;;;;:::i;:::-;;;;;2182:33913;;;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;;;;;;;-1:-1:-1;;2182:33913:50;;;;;;:::i;:::-;6035:10;2182:33913;;;;;6009:63;2182:33913;;;;;;6009:63;:::i;:::-;2989:103:44;;:::i;:::-;21970:18:50;;:::i;:::-;2182:33913;;;;22018:5;2182:33913;;;;;;22062:14;;2182:33913;;;;;22041:53;;-1:-1:-1;;;;;2182:33913:50;;;;;22049:27;22041:53;:::i;:::-;22104:59;22131:15;;;2182:33913;22112:15;:34;;22104:59;:::i;:::-;22178:9;;;2182:33913;;;;;-1:-1:-1;;;;;;2182:33913:50;-1:-1:-1;;;22178:18:50;;2182:33913;;;;;;;;;;;;22220:33;22212:62;2182:33913;;22220:33;;22212:62;:::i;:::-;22306:12;;;2182:33913;22288:57;;-1:-1:-1;;;;;2182:33913:50;;;;;22296:22;22288:57;:::i;:::-;-1:-1:-1;;2182:33913:50;;22178:9;;;2182:33913;22018:5;22967:11;;2182:33913;;-1:-1:-1;;;;;;2182:33913:50;-1:-1:-1;;;;;2182:33913:50;;;;;;;;;;22998:11;2182:33913;;;;;;;22998:36;;;:::i;:::-;2182:33913;;22178:9;;;2182:33913;;;-1:-1:-1;;;;;;2182:33913:50;-1:-1:-1;;;23069:20:50;:53;;23092:16;;;2182:33913;23069:53;23217:19;23178:5;23147:27;2182:33913;23163:11;;;2182:33913;;23147:27;;:::i;:::-;2182:33913;23217:19;;;:::i;:::-;2182:33913;;;;-1:-1:-1;;;23255:41:50;;-1:-1:-1;;;;;2182:33913:50;;;;23255:41;;2182:33913;;;;;;;;;;;;;;;;;;;;;;;23255:41;;;;;;23247:75;23255:41;;;;;23069:53;23247:75;;:::i;:::-;23337:7;23333:146;;23069:53;22178:9;;;2182:33913;;;-1:-1:-1;;;;;;2182:33913:50;-1:-1:-1;;;23493:18:50;;:42;;23069:53;23489:227;;23069:53;22178:9;;;2182:33913;;;-1:-1:-1;;;;;;2182:33913:50;-1:-1:-1;;;23730:20:50;23726:238;;23069:53;-1:-1:-1;2182:33913:50;;;;;;;;;;;;;-1:-1:-1;;;;;2182:33913:50;;;;;;;;;;;23979:59;;;2182:33913;-1:-1:-1;;;;;;;;;;;2182:33913:50;;;23726:238;23783:32;:13;;;2182:33913;23799:16;;;2182:33913;23783:32;;:::i;:::-;23833:10;;23829:125;;23726:238;;;;23829:125;2182:33913;;;22062:14;;;;2182:33913;;;-1:-1:-1;;;23871:42:50;;-1:-1:-1;;;;;2182:33913:50;;;;23871:42;;2182:33913;;;;;;;;;;;;;;;;;;;23871:42;;;;;;;;;;;23829:125;2182:33913;;;;23829:125;;;;2182:33913;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;23871:42;;;;2182:33913;23871:42;2182:33913;23871:42;;;;;;;:::i;:::-;;;;;2182:33913;;;;;;;;;23489:227;2182:33913;;23578:12;;;2182:33913;23592:16;;;2182:33913;;;-1:-1:-1;;;23559:50:50;;-1:-1:-1;;;;;2182:33913:50;;;;23559:50;;2182:33913;;;;;;;;;;;;;;;;;;;;23559:50;;;;;;23551:82;23559:50;;;;;23489:227;23551:82;;:::i;:::-;2182:33913;;;;;23578:12;;;2182:33913;;23592:16;;;2182:33913;;;;;;23652:53;2182:33913;;;23652:53;;23489:227;;23559:50;;;;2182:33913;23559:50;2182:33913;23559:50;;;;;;;:::i;:::-;;;;23493:42;23515:16;;;;2182:33913;23515:20;;23493:42;;23333:146;2182:33913;;22178:9;2182:33913;;;-1:-1:-1;;;23368:37:50;;-1:-1:-1;;;;;2182:33913:50;;;;;;;;23368:37;;2182:33913;;;;;;;;;;;;;;;;;;;23368:37;;;;;;;;23360:69;23368:37;;;;;23333:146;23360:69;;:::i;:::-;23443:25;2182:33913;23443:25;2182:33913;23443:25;:::i;:::-;;2182:33913;23333:146;;23368:37;;;;2182:33913;23368:37;2182:33913;23368:37;;;;;;;:::i;:::-;;;;23255:41;;;;2182:33913;23255:41;2182:33913;23255:41;;;;;;;:::i;:::-;;;;23069:53;22998:11;23111;;2182:33913;23069:53;;2182:33913;-1:-1:-1;;;2182:33913:50;;;;;;;;22174:740;-1:-1:-1;;;22366:18:50;;2182:33913;;;;;;;;;;;;22408:40;22400:72;22018:5;2182:33913;22408:40;;22400:72;:::i;:::-;22018:5;22504:11;;2182:33913;22486:49;;-1:-1:-1;;;;;2182:33913:50;;;;;22494:21;22486:49;:::i;:::-;22174:740;;22362:552;-1:-1:-1;;;22556:20:50;2182:33913;;;;;;;;;;;;22600:33;2182:33913;;22018:5;22689:11;;2182:33913;;;;22671:49;;-1:-1:-1;;;;;2182:33913:50;;;;;22679:21;22671:49;:::i;2182:33913::-;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;22552:362;2182:33913;;;;;;;;;22776:30;22751:152;22776:30;2182:33913;22776:30;;:75;;;;;22552:362;22751:152;;:::i;22776:75::-;22825:26;22810:41;;;22776:75;;;2182:33913;;;;;;;-1:-1:-1;;2182:33913:50;;;;6035:10;2182:33913;;;;;6009:63;2182:33913;;;;;;6009:63;:::i;:::-;2989:103:44;;:::i;:::-;31332:18:50;;:::i;:::-;2182:33913;;;;31380:5;2182:33913;;;;;;31473:53;2182:33913;;;;;;31411:14;;2182:33913;;31411:28;;31403:60;31411:28;;;31403:60;:::i;:::-;-1:-1:-1;;;;;2182:33913:50;31481:27;31473:53;:::i;:::-;31544:11;;;2182:33913;;;;;;;;;;31536:56;31544:30;;31536:56;:::i;:::-;2182:33913;;-1:-1:-1;;;;;;2182:33913:50;-1:-1:-1;;;31606:20:50;31602:102;;2182:33913;31739:11;;;2182:33913;31789:15;;;2182:33913;31844:16;;;2182:33913;31902:18;;;;2182:33913;;;;31935:14;;:42;;;;;;2182:33913;31931:523;;2182:33913;;;;32463:162;;2182:33913;;;32638:19;;;;;:43;;2182:33913;32634:196;;2182:33913;;;32843:21;;;;;:43;;2182:33913;32839:204;;2182:33913;33069:45;;;2182:33913;33068:122;;;;;2182:33913;33068:224;;;;;2182:33913;33068:330;;;;;;2182:33913;33408:92;;;;2182:33913;;;-1:-1:-1;;;;;;;;;;;2182:33913:50;;;33408:92;31789:15;31739:11;;;2182:33913;31789:15;;2182:33913;;;;;;;;;;33440:49;2182:33913;;;33440:49;;33408:92;;;33068:330;33309:66;;-1:-1:-1;33309:66:50;;;33068:330;33309:88;;;;33068:330;;;;;33309:88;-1:-1:-1;31544:11:50;;;2182:33913;;;-1:-1:-1;;;;;;2182:33913:50;-1:-1:-1;;;33379:18:50;33309:88;;:66;2182:33913;;;;33334:41;;33309:66;;;33068:224;33207:60;;-1:-1:-1;33207:60:50;;;;33068:224;33207:84;;;;33068:224;;;;;;33207:84;-1:-1:-1;31544:11:50;;;2182:33913;;;-1:-1:-1;;;;;;2182:33913:50;-1:-1:-1;;;33271:20:50;33207:84;;:60;2182:33913;;;;33230:37;;33207:60;;;33068:122;2182:33913;;;;;32467:18;;2182:33913;;;33132:57;;33068:122;;;;;;33132:57;2182:33913;;;;33154:35;;33132:57;;;33069:45;2182:33913;;33087:27;;;-1:-1:-1;33069:45:50;;;32839:204;32929:15;2182:33913;;32910:34;2182:33913;;;;;31902:18;;;2182:33913;32839:204;;2182:33913;;;;;;;;;;;;;;;;;;;;;;;;;32843:43;-1:-1:-1;31544:11:50;;;2182:33913;;;-1:-1:-1;;;;;;2182:33913:50;-1:-1:-1;;;32868:18:50;32843:43;;32634:196;32722:15;2182:33913;;32705:32;2182:33913;;;;;31844:16;;;2182:33913;32634:196;;2182:33913;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;;;;;;;;;32638:43;-1:-1:-1;31544:11:50;;;2182:33913;;;-1:-1:-1;;;;;;2182:33913:50;-1:-1:-1;;;32661:20:50;32638:43;;32463:162;32525:15;2182:33913;;32509:31;2182:33913;;;;;31789:15;;;2182:33913;32463:162;;2182:33913;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;;;;;;;;;31931:523;2182:33913;;;31997:23;31993:317;;;31931:523;-1:-1:-1;2182:33913:50;;31739:11;;;2182:33913;31544:11;;;2182:33913;;;-1:-1:-1;;;;;;2182:33913:50;-1:-1:-1;;;32364:20:50;32360:84;;31931:523;;;;32360:84;2182:33913;;32404:13;;;2182:33913;32360:84;;31993:317;2182:33913;32230:42;2182:33913;32181:23;2182:33913;;32181:23;;:::i;:::-;2182:33913;;;;-1:-1:-1;;;32230:42:50;;-1:-1:-1;;;;;2182:33913:50;;;;32230:42;;2182:33913;;;;;;;;;;;;;;;;;;;;;;;;;;;32230:42;;;;;;;;;;;;;;31993:317;2182:33913;;;;31993:317;;;2182:33913;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;32230:42;;;;2182:33913;32230:42;2182:33913;32230:42;;;;;;;:::i;:::-;;;;;2182:33913;;;;;;;;;31935:42;2182:33913;;;;31953:24;;31935:42;;31602:102;2182:33913;;;;31650:8;2182:33913;;31642:51;2182:33913;;;;31650:28;31642:51;:::i;:::-;31602:102;;2182:33913;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;6035:10;;2182:33913;;6017:17;2182:33913;;6009:63;2182:33913;;;;;;6009:63;:::i;:::-;19394:18;;:::i;:::-;2182:33913;;;19442:5;2182:33913;;;;;;;;;;;19465:60;19473:14;6017:17;19473:14;;2182:33913;;19473:28;;19465:60;:::i;:::-;19543:9;;;2182:33913;;19543:9;;19535:52;2182:33913;;;;-1:-1:-1;;;;;;2182:33913:50;-1:-1:-1;;;19543:20:50;19535:52;:::i;:::-;2182:33913;;;;;;;;;19597:56;19605:30;;19597:56;:::i;:::-;19680:13;;;2182:33913;19671:22;;2182:33913;;19731:11;;6017:17;2182:33913;19731:11;;2182:33913;19842:35;19731:11;19442:5;19731:11;;2182:33913;;;;;;-1:-1:-1;;;;;2182:33913:50;;;;;;;;19761:16;2182:33913;;;;;;;;;;;;19842:35;19892:34;;;;2182:33913;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;4056:41;2182:33913;;;;;;;4056:41;;;;;;;;;:::i;:::-;-1:-1:-1;2182:33913:50;;4056:41;;;;2182:33913;;;;-1:-1:-1;;;;;2182:33913:50;;;;;;;;;;;;;;4056:41;;;;2182:33913;;;;;;;-1:-1:-1;;2182:33913:50;;;;;;;;-1:-1:-1;;;;;2182:33913:50;;:::i;:::-;;;;4412:49;2182:33913;;;;;;;;;;;;;;;;;-1:-1:-1;;2182:33913:50;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;2182:33913:50;;;;;;;;;;;;;;;;;;;;;;;;;35417:8;2182:33913;;;;;;;;;-1:-1:-1;;;;;2182:33913:50;;;;;;;;;;;;;35417:8;2182:33913;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2182:33913:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;;;;;:::i;:::-;6035:10;;2182:33913;;;6017:17;2182:33913;;6009:63;2182:33913;;;;;;6009:63;:::i;:::-;17256:18;;:::i;:::-;2182:33913;;;17304:5;2182:33913;;;;;;17335:14;;2182:33913;-1:-1:-1;;;;;2182:33913:50;;;;17327:60;;2182:33913;;17335:28;;17327:60;:::i;:::-;17405:9;;;2182:33913;;;17397:52;2182:33913;;;;-1:-1:-1;;;;;;2182:33913:50;-1:-1:-1;;;17405:20:50;17397:52;:::i;:::-;2182:33913;;;;;;;17459:56;17467:30;;17459:56;:::i;:::-;17551:16;;;2182:33913;17533:15;:34;2182:33913;;;17618:13;;;2182:33913;17609:22;;2182:33913;;;;;17756:8;2182:33913;;;;;;;;;17756:28;:59;;;;2182:33913;17752:157;;2182:33913;;;;;;;;;;:::i;:::-;;;;;;17941:37;;;2182:33913;;;;;;;;;;;;;;;;6017:17;2182:33913;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;;2182:33913:50;;;;;;;6017:17;2182:33913;;;;;;;;;;17995:35;;2182:33913;17995:35;2182:33913;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;17752:157;17831:19;;;2182:33913;;;17872:17;;;;;2182:33913;;-1:-1:-1;;;;;;2182:33913:50;;;;;;-1:-1:-1;;;;;2182:33913:50;;;;;;;17752:157;;;;17756:59;17796:19;;;;2182:33913;17788:27;;17756:59;;2182:33913;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2182:33913:50;;;-1:-1:-1;;;;;2182:33913:50;;;;;;;;;;;;;;;;:::i;:::-;6035:10;;2182:33913;;6017:17;2182:33913;;6009:63;2182:33913;;;;;;6009:63;:::i;:::-;2989:103:44;;:::i;:::-;15426:18:50;;:::i;:::-;2182:33913;;;15474:5;2182:33913;;;;;;15505:14;;2182:33913;;;;-1:-1:-1;;;;;2182:33913:50;15497:60;;2182:33913;;15505:28;;15497:60;:::i;:::-;2182:33913;15575:20;;;2182:33913;;15632:9;;;2182:33913;;15632:9;;15624:47;2182:33913;;;;-1:-1:-1;;;;;;2182:33913:50;-1:-1:-1;;;15632:18:50;15624:47;:::i;:::-;2182:33913;;;;;;;;;15689:30;;16076:40;15689:30;2182:33913;;15689:30;;15681:61;6017:17;15689:30;;15681:61;:::i;:::-;15752:59;15779:15;;;2182:33913;15760:15;:34;;15752:59;:::i;:::-;15915:12;;;2182:33913;;-1:-1:-1;;;;;;2182:33913:50;;;;;15760:15;15946:14;;;2182:33913;15988:16;2182:33913;-1:-1:-1;;2182:33913:50;;;;;;;;;16076:40;6017:17;-1:-1:-1;;;;;;;;;;;2182:33913:50;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;;;-1:-1:-1;;2182:33913:50;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;3147:66:34;2182:33913:50;;;;;;;;;4301:16:34;2182:33913:50;-1:-1:-1;;;;;2182:33913:50;;4724:16:34;;:34;;;;2182:33913:50;4803:1:34;4788:16;:50;;;;2182:33913:50;4853:13:34;:30;;;;2182:33913:50;4849:91:34;;;-1:-1:-1;;2182:33913:50;;4803:1:34;2182:33913:50;;;;4977:67:34;;2182:33913:50;6891:76:34;;;:::i;:::-;;;:::i;:::-;6959:1;7142:10:50;6959:1:34;:::i;:::-;-1:-1:-1;;;;;2182:33913:50;;;;7171:27;2182:33913;;7234:52;7260:5;7242:23;;;7234:52;:::i;:::-;2182:33913;-1:-1:-1;;;;;2182:33913:50;;;;;;;;7336:28;2182:33913;;;;;;;;;;;;;;;;;;7336:28;2182:33913;5064:101:34;;2182:33913:50;;;5064:101:34;2182:33913:50;;;;;;;5140:14:34;2182:33913:50;;;4803:1:34;2182:33913:50;;5140:14:34;2182:33913:50;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;4977:67:34;-1:-1:-1;;2182:33913:50;;;;;4977:67:34;;;4849:91;2182:33913:50;;-1:-1:-1;;;4906:23:34;;2182:33913:50;;4906:23:34;4853:30;4870:13;;;4853:30;;;4788:50;4816:4;4808:25;:30;;-1:-1:-1;4788:50:34;;4724:34;;;-1:-1:-1;4724:34:34;;2182:33913:50;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;;;;;;;2324:62:20;;:::i;:::-;-1:-1:-1;;;;;;;;;;;2182:33913:50;;-1:-1:-1;;;;;;2182:33913:50;;;;;;;-1:-1:-1;;;;;2182:33913:50;3996:40:20;2182:33913:50;;3996:40:20;2182:33913:50;;;;;;;;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;;;;;;;;4170:33;2182:33913;;;;;;;;;;;;;;-1:-1:-1;;2182:33913:50;;;;;;:::i;:::-;2324:62:20;;:::i;:::-;-1:-1:-1;;;;;2182:33913:50;8777:23;;2182:33913;;;;;8871:4;2182:33913;;;;;8871:4;2182:33913;;;;;;;;8890:33;2182:33913;;;8871:4;2182:33913;;8890:33;2182:33913;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2182:33913:50;;;;;;;;;;-1:-1:-1;;;;;2182:33913:50;;:::i;:::-;;;;6482:17;2182:33913;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6035:10;2182:33913;;;;;6009:63;2182:33913;;;;;;6009:63;:::i;:::-;2182:33913;;;18355:5;2182:33913;;;;;;18386:14;;2182:33913;-1:-1:-1;;;;;2182:33913:50;18378:60;;2182:33913;;18386:28;;18378:60;:::i;:::-;18456:9;;;2182:33913;;18456:9;;2182:33913;;18448:52;2182:33913;;;;-1:-1:-1;;;;;;2182:33913:50;-1:-1:-1;;;18456:20:50;18448:52;:::i;:::-;2182:33913;;;;;;;;;18510:56;18518:30;;18510:56;:::i;:::-;18603:16;;;2182:33913;18584:15;:35;2182:33913;;18665:17;;;2182:33913;;;;18665:31;;;2182:33913;;-1:-1:-1;18355:5:50;18729:11;;2182:33913;;-1:-1:-1;;;;;;2182:33913:50;;;;;18789:19;;;2182:33913;;18770:16;;;2182:33913;-1:-1:-1;;2182:33913:50;;;;;18866:45;;;;2182:33913;;;;;;;;;;;;;;;;;18665:17;2182:33913;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4840:6:35;-1:-1:-1;;;;;2182:33913:50;4831:4:35;4823:23;4819:145;;2182:33913:50;;;811:66:31;2182:33913:50;;;4819:145:35;2182:33913:50;;-1:-1:-1;;;4924:29:35;;2182:33913:50;;4924:29:35;2182:33913:50;-1:-1:-1;2182:33913:50;;-1:-1:-1;;2182:33913:50;;;;;;:::i;:::-;;;-1:-1:-1;;;;;2182:33913:50;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;4417:6:35;2182:33913:50;;4408:4:35;4400:23;;;:120;;;;2182:33913:50;4383:251:35;;;2324:62:20;;:::i;:::-;2182:33913:50;;;;;;;;5881:52:35;;2182:33913:50;5881:52:35;2182:33913:50;5881:52:35;;;;;;;;;2182:33913:50;-1:-1:-1;5877:437:35;;2182:33913:50;;-1:-1:-1;;;6243:60:35;;2182:33913:50;6243:60:35;;2182:33913:50;;;;;6243:60:35;5877:437;811:66:31;5975:40:35;;;;5971:120;;1748:29:31;;;:34;1744:119;;2182:33913:50;;-1:-1:-1;;;;;;2182:33913:50;;;;;;;;2407:36:31;;;;2182:33913:50;;2458:15:31;:11;;2489:53;;;;:::i;:::-;;2182:33913:50;;2454:148:31;6163:9;;;6159:70;;2454:148;2182:33913:50;;6159:70:31;-1:-1:-1;;;6199:19:31;;2182:33913:50;;6199:19:31;1744:119;2182:33913:50;;-1:-1:-1;;;1805:47:31;;2182:33913:50;1805:47:31;;2182:33913:50;;;;;1805:47:31;5971:120:35;2182:33913:50;;;;6042:34:35;;;;;;2182:33913:50;6042:34:35;;2182:33913:50;6042:34:35;5881:52;;;;2182:33913:50;5881:52:35;;2182:33913:50;5881:52:35;;;;;;2182:33913:50;5881:52:35;;;:::i;:::-;;;2182:33913:50;;;;;5881:52:35;;;;2182:33913:50;;;;5881:52:35;;;-1:-1:-1;5881:52:35;;4400:120;2182:33913:50;;;811:66:31;2182:33913:50;;4478:42:35;;4400:120;;;2182:33913:50;;;;;;;-1:-1:-1;;2182:33913:50;;;;;;:::i;:::-;2324:62:20;;:::i;:::-;-1:-1:-1;;;;;2182:33913:50;;;;;;;;;;;;;;;-1:-1:-1;;2182:33913:50;;;;;;;9202:34;;2182:33913;9202:34;2182:33913;;;;;;;;;;;;;;;4137:27;2182:33913;;;;;;;;-1:-1:-1;;;;;2182:33913:50;;;;;;;;;;;;;-1:-1:-1;;2182:33913:50;;;;;;;;;;;;;;;9838:19;2324:62:20;;;:::i;:::-;9747:44:50;9765:5;9755:15;;;9747:44;:::i;:::-;2182:33913;;;9801:22;2182:33913;;;9801:22;2182:33913;;;;;;9838:19;2182:33913;;;;;;;;;-1:-1:-1;;2182:33913:50;;;;;;:::i;:::-;2324:62:20;;:::i;:::-;9471:29:50;2182:33913;;-1:-1:-1;;;;;;2182:33913:50;-1:-1:-1;;;;;2182:33913:50;;;;;;;;;9515:35;;;;2182:33913;;;;;;;;;-1:-1:-1;;2182:33913:50;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33962:11;2182:33913;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2182:33913:50;;;;;;;;;;;;;;;-1:-1:-1;;;;;2182:33913:50;;;;;;;;;;;:::i;:::-;6035:10;;2182:33913;;;;;6009:63;2182:33913;;;;;;6009:63;:::i;:::-;26140:18;;:::i;:::-;2182:33913;;;;;;26188:5;2182:33913;;;;;;26232:14;;2182:33913;;;26211:53;;-1:-1:-1;;;;;2182:33913:50;;;;;26219:27;26211:53;:::i;:::-;26282:11;;;2182:33913;;;;;;;;;;;26282:34;2182:33913;;;;;;;26356:13;2182:33913;;;;;;;;26282:11;;;2182:33913;;-1:-1:-1;;2182:33913:50;;;;;;;;;;26188:5;26500:11;;2182:33913;;-1:-1:-1;;;;;2182:33913:50;;;;;26488:11;2182:33913;;;;;;26488:35;2182:33913;;26488:37;;;:::i;:::-;2182:33913;;;;;;;;;;;;26488:11;2182:33913;;26188:5;2182:33913;;;26535:35;:45;2182:33913;;;;;;26535:45;:::i;:::-;2182:33913;;;;;;;;;;;;;;;;;;;;;;;;26596:52;2182:33913;;;26596:52;;2182:33913;;26663:18;;:54;;;2182:33913;26659:417;;2182:33913;;;26659:417;2182:33913;;26282:11;;;;2182:33913;-1:-1:-1;;;;;2182:33913:50;;;;;26941:20;;2182:33913;;-1:-1:-1;;;;;;2182:33913:50;26941:20;:::i;:::-;26737:317;;;;;;2182:33913;;;;;;;;;;;;;;;;;;;26737:317;;2182:33913;;;26737:317;;2182:33913;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2182:33913:50;;26737:317;;;;;;;26659:417;;;2182:33913;;;26737:317;2182:33913;;-1:-1:-1;;;;;2182:33913:50;;;;;;;26737:317;;;2182:33913;;;;;;;;;;;;26663:54;-1:-1:-1;2182:33913:50;;-1:-1:-1;;;;;2182:33913:50;26685:32;;26663:54;;2182:33913;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2182:33913:50;;;;;;-1:-1:-1;;;;;;2182:33913:50;;;;;;;;-1:-1:-1;;;;;2182:33913:50;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;2182:33913:50;;;;;;6035:10;2182:33913;;;;;6009:63;2182:33913;;;;;;6009:63;:::i;:::-;-1:-1:-1;;;;;13037:18:50;;:::i;:::-;2182:33913;13073:23;;;2182:33913;;;;13136:10;2182:33913;;;;13198:12;2182:33913;;-1:-1:-1;;;;;;2182:33913:50;;-1:-1:-1;;;13277:14:50;:31;;;;2182:33913;13277:48;;;;2182:33913;13277:69;;;;2182:33913;13277:88;;;;2182:33913;;;;-1:-1:-1;;;;;;2182:33913:50;;-1:-1:-1;;;13417:15:50;13413:344;;2182:33913;;;;13838:14;2182:33913;;;;;;;13838:27;;;;:::i;:::-;2182:33913;;;;13797:13;;2182:33913;13786:80;;2182:33913;13820:4;2182:33913;;;;;;;;;;;;;;13786:80;;2182:33913;;;;;-1:-1:-1;;;;;2182:33913:50;;;;;;;;;;;;;;;13786:80;;13776:91;2182:33913;;14168:26;2182:33913;;14127:15;14168:26;:::i;:::-;14394:51;-1:-1:-1;;;;;;2182:33913:50;;-1:-1:-1;;;14394:13:50;2182:33913;;14410:31;2182:33913;;14127:15;14410:31;:::i;:::-;14394:51;;14467:13;2182:33913;;;-1:-1:-1;;;;;;2182:33913:50;;-1:-1:-1;;;13417:15:50;2182:33913;;14525:29;2182:33913;;14127:15;14525:29;:::i;:::-;-1:-1:-1;;;;;;2182:33913:50;;-1:-1:-1;;;13417:15:50;2182:33913;;;;14582:28;;-1:-1:-1;;;;;;2182:33913:50;;-1:-1:-1;;;13417:15:50;2182:33913;;;;14751:44;;2182:33913;;;;;;:::i;:::-;;;;13979:896;2182:33913;13979:896;;2182:33913;;;13979:896;;2182:33913;;;;13979:896;;2182:33913;14127:15;2182:33913;13979:896;;2182:33913;;13979:896;;2182:33913;;;13979:896;;2182:33913;;;13979:896;;2182:33913;;;;;;;13979:896;;2182:33913;;13979:896;;;2182:33913;;13979:896;;;2182:33913;;13979:896;;;2182:33913;13979:896;;;2182:33913;13979:896;;;2182:33913;13979:896;;;2182:33913;13979:896;;;2182:33913;;13979:896;;;2182:33913;;;13979:896;;;2182:33913;;;;:::i;:::-;13979:896;;;2182:33913;;;;;13979:896;;;2182:33913;;13979:896;;;2182:33913;;13979:896;;;2182:33913;;;;13963:5;2182:33913;;;;;;;;;;;;;;;;;;;13979:896;;2182:33913;;-1:-1:-1;;;;;2182:33913:50;;;;;;;;13963:5;2182:33913;;;;;;;;13979:896;;2182:33913;;-1:-1:-1;;;;;2182:33913:50;;;;;;;;;13979:896;;2182:33913;;;;;;13979:896;;2182:33913;;;;;;13979:896;;2182:33913;;;;;;13979:896;;2182:33913;;;;;;;14467:13;2182:33913;;;;;13979:896;;2182:33913;;13979:896;;2182:33913;-1:-1:-1;;2182:33913:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13979:896;;;2182:33913;;;;;13979:896;;;2182:33913;;;;;;-1:-1:-1;;;;;;2182:33913:50;-1:-1:-1;;;;;2182:33913:50;;;;;;;;;;13979:896;;;2182:33913;13838:14;2182:33913;;;13979:896;;;2182:33913;;;;;13979:896;;;2182:33913;;;;;;-1:-1:-1;;2182:33913:50;;;;;;;;;;;;13979:896;;;2182:33913;;;;;13979:896;;;2182:33913;;;;;13979:896;;;2182:33913;;;;;13979:896;;;2182:33913;;;;;13979:896;;;2182:33913;;;;-1:-1:-1;;;;;2182:33913:50;;;;;;;;;;:::i;:::-;;;;;;14751:44;2182:33913;;;;;;;;;;;;;;;;;14891:72;2182:33913;;;;;;;;13979:896;2182:33913;;;;;;;;;;;;;;;;;;;;;;;;;;13979:896;;;2182:33913;;;;;;13979:896;;;2182:33913;-1:-1:-1;;;;;2182:33913:50;;;;;;;;;;;-1:-1:-1;;;;;;2182:33913:50;;;;;;;;;;13979:896;2182:33913;;;;14930:26;2182:33913;;14127:15;14930:26;:::i;:::-;2182:33913;;;;;;;;;;;;;;;;;;;;14891:72;2182:33913;;;;;;;;;;-1:-1:-1;2182:33913:50;;;;;;;;;;;;;;;;;-1:-1:-1;;2182:33913:50;;;;;;13786:80;;2182:33913;13786:80;2182:33913;13786:80;13979:896;13786:80;14891:72;13786:80;;2182:33913;13786:80;;;;2182:33913;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2182:33913:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2182:33913:50;;;14751:44;2182:33913;14751:44;;;14582:28;2182:33913;14582:28;;;14507:51;2182:33913;14507:51;;14394;2182:33913;14394:51;;;13413:344;2182:33913;;-1:-1:-1;;;;;;2182:33913:50;-1:-1:-1;;;13473:31:50;:88;;;;13413:344;13473:151;;;;13413:344;13473:216;;;;13413:344;;2182:33913;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;;;;;;;;;13473:216;-1:-1:-1;2182:33913:50;;-1:-1:-1;;;;;;2182:33913:50;-1:-1:-1;;;13648:41:50;13473:216;;:151;-1:-1:-1;2182:33913:50;;-1:-1:-1;;;;;;2182:33913:50;-1:-1:-1;;;13585:39:50;13473:151;;:88;-1:-1:-1;2182:33913:50;;-1:-1:-1;;;;;;2182:33913:50;-1:-1:-1;;;13528:33:50;13473:88;;2182:33913;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;13277:88;-1:-1:-1;;;;;;;2182:33913:50;;-1:-1:-1;;;13350:15:50;13277:88;;:69;-1:-1:-1;;;;;;;2182:33913:50;;-1:-1:-1;;;13329:17:50;13277:69;;:48;-1:-1:-1;;;;;;;2182:33913:50;;-1:-1:-1;;;13312:13:50;13277:48;;:31;-1:-1:-1;;;;;;;2182:33913:50;;-1:-1:-1;;;13295:13:50;13277:31;;2182:33913;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;;-1:-1:-1;;2182:33913:50;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;-1:-1:-1;;2182:33913:50;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34197:5;2182:33913;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;2182:33913:50;;;;;;;34197:5;2182:33913;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2182:33913:50;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2182:33913:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;2182:33913:50;;;;;;;;;;;;-1:-1:-1;;;;;2182:33913:50;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2182:33913:50;;;;;;;;-1:-1:-1;;;;;2182:33913:50;;;;;;;;;;;;;;-1:-1:-1;;2182:33913:50;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8095:37:50;;;:100;;;;2182:33913;8095:157;;;;2182:33913;8095:214;;;;2182:33913;8095:270;;;;2182:33913;;;;;;;8095:270;-1:-1:-1;;;8325:40:50;;-1:-1:-1;8095:270:50;;;:214;-1:-1:-1;;;8268:41:50;;;-1:-1:-1;8095:214:50;;:157;-1:-1:-1;;;8211:41:50;;;-1:-1:-1;8095:157:50;;:100;-1:-1:-1;;;8148:47:50;;;-1:-1:-1;8095:100:50;;2182:33913;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13786:80;;2182:33913;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2182:33913:50;;;;;;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;2182:33913:50;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;2182:33913:50;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;2182:33913:50;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;2182:33913:50;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;2182:33913:50;;;;;;;:::o;:::-;;;13786:80;;2182:33913;;;;;;;;-1:-1:-1;;;;;2182:33913:50;;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;2182:33913:50;;;;;;;;13786:80;2182:33913;;-1:-1:-1;;2182:33913:50;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;2182:33913:50;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;2182:33913:50;;-1:-1:-1;2182:33913:50;;;;;;-1:-1:-1;2182:33913:50;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2182:33913:50;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:::o;:::-;-1:-1:-1;2182:33913:50;;;;;;;;-1:-1:-1;;2182:33913:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2182:33913:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;-1:-1:-1;;2182:33913:50;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;:::o;:::-;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;34897:294;-1:-1:-1;2182:33913:50;;;35007:5;2182:33913;;;;;35034:9;;;2182:33913;;;-1:-1:-1;;;;;;2182:33913:50;-1:-1:-1;;;35034:22:50;35030:124;;35170:14;;2182:33913;-1:-1:-1;;;;;2182:33913:50;;34897:294::o;35030:124::-;-1:-1:-1;35079:18:50;2182:33913;-1:-1:-1;;;;;2182:33913:50;;35072:25::o;2182:33913::-;;;;:::o;:::-;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;:::o;:::-;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;:::o;:::-;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;27429:1820;2182:33913;-1:-1:-1;2182:33913:50;27520:5;2182:33913;;;-1:-1:-1;2182:33913:50;27551:14;;;;27543:60;2182:33913;;;;;;;;27551:28;;27543:60;:::i;:::-;27639:15;;;2182:33913;27621:15;:33;2182:33913;;;27693:11;;;2182:33913;;;;;;;;;;;;27708:19;27693:34;;2182:33913;;27693:11;27771:35;;2182:33913;;;;;;-1:-1:-1;;;;;;2182:33913:50;-1:-1:-1;;;27840:20:50;;;:57;;27429:1820;27836:933;;;-1:-1:-1;2182:33913:50;;-1:-1:-1;;2182:33913:50;27639:15;2182:33913;;;28844:11;;;2182:33913;-1:-1:-1;2182:33913:50;;;;;;-1:-1:-1;;;28874:48:50;;-1:-1:-1;;;;;2182:33913:50;;;27708:19;28874:48;;2182:33913;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2182:33913:50;28874:48;;;;;;28866:74;28874:48;-1:-1:-1;28874:48:50;;;28866:74;;:::i;:::-;2182:33913;;;-1:-1:-1;;;;;;2182:33913:50;-1:-1:-1;;;28955:18:50;;:42;;27429:1820;28951:227;;27429:1820;-1:-1:-1;2182:33913:50;;;;;;-1:-1:-1;;;;;2182:33913:50;;29193:49;;2182:33913;;29193:49;27429:1820::o;28951:227::-;-1:-1:-1;2182:33913:50;;29040:12;;;2182:33913;;;29054:16;;;2182:33913;;;;-1:-1:-1;;;29021:50:50;;-1:-1:-1;;;;;2182:33913:50;;;27708:19;29021:50;;2182:33913;;;;;;;;;29040:12;;2182:33913;;29054:16;;2182:33913;;;;;;;;;29021:50;;;;;;;29114:53;2182:33913;29021:50;;29013:82;29021:50;;29193:49;29021:50;-1:-1:-1;29021:50:50;;;29013:82;;:::i;:::-;2182:33913;;;;;;;;-1:-1:-1;;;;;2182:33913:50;;;;29114:53;28951:227;;;;29021:50;;;;;;;;;;;;;;:::i;:::-;2182:33913;;;-1:-1:-1;2182:33913:50;;;;;28955:42;28977:16;2182:33913;28977:16;;2182:33913;28977:20;;28955:42;;28874:48;;;;2182:33913;28874:48;2182:33913;28874:48;;;;;;;:::i;27836:933::-;27928:16;;;2182:33913;27928:16;;2182:33913;;;27947:11;27708:19;28005:22;27962:5;27928:30;2182:33913;27947:11;;;2182:33913;;27928:30;;:::i;:::-;2182:33913;28005:22;;;:::i;:::-;2182:33913;;;;;;;27520:5;28100:11;;2182:33913;;;;;;;;;-1:-1:-1;2182:33913:50;28088:11;2182:33913;;;-1:-1:-1;2182:33913:50;28088:41;2182:33913;;28088:41;:::i;:::-;2182:33913;;28147:17;28143:136;;27836:933;28296:7;28292:158;;27836:933;28088:11;28480:30;:11;;2182:33913;;;28480:30;;:::i;:::-;28528:10;28524:127;;27836:933;-1:-1:-1;2182:33913:50;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2182:33913:50;;;;;;;28669:69;;;28752:7::o;28524:127::-;-1:-1:-1;2182:33913:50;;;;;;-1:-1:-1;;;28566:42:50;;-1:-1:-1;;;;;2182:33913:50;;;27708:19;28566:42;;2182:33913;;;;;;;;;;;;;;;;-1:-1:-1;2182:33913:50;28566:42;;;;;;;-1:-1:-1;28566:42:50;;;28524:127;2182:33913;;;;28524:127;;;2182:33913;;;-1:-1:-1;;;2182:33913:50;;;27708:19;2182:33913;;;;;;;;;;;;;;;;28566:42;;;;2182:33913;28566:42;2182:33913;28566:42;;;;;;;:::i;:::-;;;;28292:158;-1:-1:-1;2182:33913:50;;27693:11;2182:33913;;;-1:-1:-1;;;28331:37:50;;-1:-1:-1;;;;;2182:33913:50;;;;;;;27708:19;28331:37;;2182:33913;;;;;;;;;;;;;;;;;-1:-1:-1;;2182:33913:50;28331:37;;;;;;;28323:69;28088:11;28331:37;28480:30;28331:37;-1:-1:-1;28331:37:50;;;28323:69;;:::i;:::-;28410:25;2182:33913;;;28410:25;:::i;:::-;2182:33913;;28292:158;;;;;28143:136;-1:-1:-1;2182:33913:50;;;;;;-1:-1:-1;;;28192:46:50;;-1:-1:-1;;;;;2182:33913:50;;;27708:19;28192:46;;2182:33913;;;;;;;;;;;;;;;;-1:-1:-1;;2182:33913:50;28192:46;;;;;;28184:80;28192:46;-1:-1:-1;28192:46:50;;;28184:80;;:::i;:::-;28143:136;;27840:57;27551:14;27864:33;;;27840:57;;;2182:33913;;;-1:-1:-1;;;2182:33913:50;;;27708:19;2182:33913;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;27708:19;2182:33913;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;;;;;;-1:-1:-1;;;2182:33913:50;;;;;;;3426:215:20;-1:-1:-1;;;;;2182:33913:50;;;;3510:22:20;;3506:91;;-1:-1:-1;;;;;;;;;;;2182:33913:50;;-1:-1:-1;;;;;;2182:33913:50;;;;;;;;3996:40:20;-1:-1:-1;;3996:40:20;3426:215::o;3506:91::-;2182:33913:50;;-1:-1:-1;;;3555:31:20;;3530:1;3555:31;;;2182:33913:50;;;3555:31:20;10975:209:50;11067:10;-1:-1:-1;2182:33913:50;11049:17;2182:33913;;;;-1:-1:-1;2182:33913:50;;;11045:106;;11067:10;10975:209;:::o;11045:106::-;2182:33913;;-1:-1:-1;;;11101:39:50;;2182:33913;;11101:39;2182:33913;11067:10;11101:39;;;;;;;-1:-1:-1;11101:39:50;;;11094:46;;:::o;11101:39::-;;;2182:33913;11101:39;;2182:33913;11101:39;;;;;;2182:33913;11101:39;;;:::i;:::-;;;2182:33913;;;;;-1:-1:-1;;;;;2182:33913:50;;;;;;11094:46;:::o;11101:39::-;;;-1:-1:-1;11101:39:50;;35710:383;-1:-1:-1;;;;;;2182:33913:50;-1:-1:-1;;;35794:14:50;;35790:47;;-1:-1:-1;;;35851:13:50;;35847:46;;-1:-1:-1;;;35907:13:50;;35903:46;;-1:-1:-1;;;35963:17:50;;35959:50;;-1:-1:-1;;;36023:15:50;36019:48;;2182:33913;;;;;;;;-1:-1:-1;;;;;2182:33913:50;;;;;;;;;;35710:383;:::o;36019:48::-;2182:33913;;;;;:::i;:::-;;;;-1:-1:-1;;;2182:33913:50;;;;36042:25;:::o;35959:50::-;2182:33913;;;;;;:::i;:::-;;;;-1:-1:-1;;;2182:33913:50;;;;35982:27;:::o;35903:46::-;2182:33913;;;;;;:::i;:::-;;;;-1:-1:-1;;;2182:33913:50;;;;35926:23;:::o;35847:46::-;2182:33913;;;;;;:::i;:::-;;;;-1:-1:-1;;;2182:33913:50;;;;35870:23;:::o;35790:47::-;2182:33913;;;;;;:::i;:::-;;;;-1:-1:-1;;;2182:33913:50;;;;35813:24;:::o;2679:162:20:-;-1:-1:-1;;;;;;;;;;;2182:33913:50;-1:-1:-1;;;;;2182:33913:50;987:10:23;2738:23:20;2734:101;;2679:162::o;2734:101::-;2182:33913:50;;-1:-1:-1;;;2784:40:20;;987:10:23;2784:40:20;;;2182:33913:50;;;2784:40:20;3749:292:44;-1:-1:-1;;;;;;;;;;;2407:1:44;2182:33913:50;;4560:63:44;3644:93;;2407:1;2182:33913:50;;3749:292:44:o;3644:93::-;2182:33913:50;;-1:-1:-1;;;3696:30:44;;;;;7082:141:34;2182:33913:50;3147:66:34;2182:33913:50;;;;7148:18:34;7144:73;;7082:141::o;7144:73::-;2182:33913:50;;-1:-1:-1;;;7189:17:34;;;;;4691:549:40;;3490:129:43;4691:549:40;;3490:129:43;;;;;;;;4874:72:40;;;;4691:549;4870:364;;;4774:252:43;;;;;;;;3490:129;;4774:252;;;3490:129;4774:252;;;;;;4962:32:40;:::o;4870:364::-;5011:223;;;2182:33913:50;;-1:-1:-1;;;5045:24:40;;-1:-1:-1;;;;;2182:33913:50;;;5045:24:40;;;2182:33913:50;;;5045:24:40;5011:223;4536:73:43;5090:33:40;4536:73:43;;2182:33913:50;;;3490:129:43;2182:33913:50;;;;;5086:148:40;2182:33913:50;;-1:-1:-1;;;5204:19:40;;;;;4874:72;-1:-1:-1;4536:73:43;4886:33:40;;;4874:72;4886:59;4923:18;;;:22;;4874:72;","linkReferences":{},"immutableReferences":{"41022":[{"start":9791,"length":32},{"start":9976,"length":32}]}},"methodIdentifiers":{"AUCTION()":"63779c74","AUCTION_DUTCH()":"fe78aecf","AUCTION_ENGLISH()":"b2b7bdd5","AUCTION_REVERSE_DUTCH()":"1c8e57f8","AUCTION_REVERSE_ENGLISH()":"c104d24d","BENCHMARK()":"f152d325","BOUNTY()":"d081f2b8","CLAIM()":"73d74876","PITCH()":"63326459","UPGRADE_INTERFACE_VERSION()":"ad3cb1cc","acceptAuction(bytes32,uint256)":"a86592ba","acceptSubmission(bytes32,address)":"aeb87ecf","addForwarder(address)":"5c41d2fe","cancelTask(bytes32)":"ee8ca3b5","claimTask(bytes32,uint256)":"8c58d5fc","createTask(uint256,uint256,bytes4,uint256,uint256,bytes32,string,bytes4)":"1e52fce7","defaultFeeBps()":"bcae25a4","evaluatorFor(bytes32)":"9d691d36","feeForTask(bytes32)":"da0eb223","feeRecipient()":"46904840","forfeitAndReopen(bytes32)":"afdc54cd","getBids(bytes32)":"9d4f988b","getTask(bytes32)":"15a29035","getWorkerStats(address)":"365ba2dd","initialize(address,address,uint16)":"7ebef529","isTrustedForwarder(address)":"572b6c05","owner()":"8da5cb5b","proxiableUUID()":"52d1902d","rateTask(bytes32,uint8,uint256,uint256,string,bytes32)":"2144ea49","refundExpired(bytes32)":"cc3e049b","removeForwarder(address)":"4d93172d","renounceOwnership()":"715018a6","reputationRegistry()":"c8db44e3","requesterNonce(address)":"9f63f2a6","selectLowestBidder(bytes32)":"537da21f","selectWorker(bytes32,address)":"ce37a263","setDefaultFeeBps(uint16)":"4488b652","setFeeRecipient(address)":"e74b981b","setReputationRegistry(address)":"3f0ce714","stakeForfeit(bytes32)":"d8648871","submitBid(bytes32,uint256)":"91dc1d30","submitWork(bytes32,bytes32)":"db7260bc","supportsInterface(bytes4)":"01ffc9a7","taskBids(bytes32,uint256)":"a6eecb72","tasks(bytes32)":"e579f500","totalFeesCollected()":"60c6d8ae","transferOwnership(address)":"f2fde38b","trustedForwarders(address)":"54776bb9","updateTask(bytes32,uint256,uint256,uint256,uint256)":"ae2925a6","upgradeToAndCall(address,bytes)":"4f1ef286","usdcToken()":"11eac855","workerStats(address)":"e48a3a60"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"worker\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"name\":\"BidSubmitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newRecipient\",\"type\":\"address\"}],\"name\":\"FeeRecipientUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"newFeeBps\",\"type\":\"uint16\"}],\"name\":\"FeesUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"trusted\",\"type\":\"bool\"}],\"name\":\"ForwarderUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newRegistry\",\"type\":\"address\"}],\"name\":\"ReputationRegistryUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"StakeForfeited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"StakeReturned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"requester\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"worker\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"workerPayment\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"platformFee\",\"type\":\"uint256\"}],\"name\":\"TaskAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"requester\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"refundAmount\",\"type\":\"uint256\"}],\"name\":\"TaskCancelled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"TaskClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"requester\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"reward\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"expiryTime\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"mode\",\"type\":\"bytes4\"}],\"name\":\"TaskCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"requester\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"refundAmount\",\"type\":\"uint256\"}],\"name\":\"TaskExpired\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"worker\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"rating\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"raterAgentId\",\"type\":\"uint256\"}],\"name\":\"TaskRated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"}],\"name\":\"TaskReopened\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"worker\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"deliverable\",\"type\":\"bytes32\"}],\"name\":\"TaskSubmitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newReward\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newExpiryTime\",\"type\":\"uint256\"}],\"name\":\"TaskUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"worker\",\"type\":\"address\"}],\"name\":\"TaskWorkerSelected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"AUCTION\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"AUCTION_DUTCH\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"AUCTION_ENGLISH\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"AUCTION_REVERSE_DUTCH\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"AUCTION_REVERSE_ENGLISH\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BENCHMARK\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BOUNTY\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"CLAIM\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PITCH\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"name\":\"acceptAuction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"worker\",\"type\":\"address\"}],\"name\":\"acceptSubmission\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"}],\"name\":\"addForwarder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"}],\"name\":\"cancelTask\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"claimTask\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"reward\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"mode\",\"type\":\"bytes4\"},{\"internalType\":\"uint256\",\"name\":\"pitchDeadline\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bidDeadline\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"contentHash\",\"type\":\"bytes32\"},{\"internalType\":\"string\",\"name\":\"contentURI\",\"type\":\"string\"},{\"internalType\":\"bytes4\",\"name\":\"auctionSubtype\",\"type\":\"bytes4\"}],\"name\":\"createTask\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"defaultFeeBps\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"}],\"name\":\"evaluatorFor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"evaluator\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"}],\"name\":\"feeForTask\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeRecipient\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"}],\"name\":\"forfeitAndReopen\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"}],\"name\":\"getBids\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"worker\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"internalType\":\"struct TaskMarket.Bid[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"}],\"name\":\"getTask\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"requester\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"worker\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"reward\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"createdAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiryTime\",\"type\":\"uint256\"},{\"internalType\":\"enum ITMP.TaskStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"rating\",\"type\":\"uint8\"},{\"internalType\":\"bytes4\",\"name\":\"mode\",\"type\":\"bytes4\"},{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"claimedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pitchDeadline\",\"type\":\"uint256\"},{\"internalType\":\"uint16\",\"name\":\"feeBps\",\"type\":\"uint16\"},{\"internalType\":\"uint256\",\"name\":\"bidDeadline\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPrice\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"deliverable\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"contentHash\",\"type\":\"bytes32\"},{\"internalType\":\"string\",\"name\":\"contentURI\",\"type\":\"string\"},{\"internalType\":\"bytes4\",\"name\":\"auctionSubtype\",\"type\":\"bytes4\"},{\"internalType\":\"address\",\"name\":\"lowestBidder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lowestBidPrice\",\"type\":\"uint256\"}],\"internalType\":\"struct ITMP.Task\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"worker\",\"type\":\"address\"}],\"name\":\"getWorkerStats\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"completedTasks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"ratedTasks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalStars\",\"type\":\"uint256\"}],\"internalType\":\"struct ITMP.WorkerStats\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_usdcToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_feeRecipient\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"_defaultFeeBps\",\"type\":\"uint16\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"isTrustedForwarder\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"rating\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"workerAgentId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"raterAgentId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"feedbackURI\",\"type\":\"string\"},{\"internalType\":\"bytes32\",\"name\":\"feedbackHash\",\"type\":\"bytes32\"}],\"name\":\"rateTask\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"}],\"name\":\"refundExpired\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"}],\"name\":\"removeForwarder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reputationRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"requesterNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"}],\"name\":\"selectLowestBidder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"worker\",\"type\":\"address\"}],\"name\":\"selectWorker\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"feeBps\",\"type\":\"uint16\"}],\"name\":\"setDefaultFeeBps\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"setFeeRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"registry\",\"type\":\"address\"}],\"name\":\"setReputationRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"stakeForfeit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"name\":\"submitBid\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"deliverable\",\"type\":\"bytes32\"}],\"name\":\"submitWork\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"taskBids\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"worker\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"tasks\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"requester\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"worker\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"reward\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"createdAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiryTime\",\"type\":\"uint256\"},{\"internalType\":\"enum ITMP.TaskStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"rating\",\"type\":\"uint8\"},{\"internalType\":\"bytes4\",\"name\":\"mode\",\"type\":\"bytes4\"},{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"claimedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pitchDeadline\",\"type\":\"uint256\"},{\"internalType\":\"uint16\",\"name\":\"feeBps\",\"type\":\"uint16\"},{\"internalType\":\"uint256\",\"name\":\"bidDeadline\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPrice\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"deliverable\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"contentHash\",\"type\":\"bytes32\"},{\"internalType\":\"string\",\"name\":\"contentURI\",\"type\":\"string\"},{\"internalType\":\"bytes4\",\"name\":\"auctionSubtype\",\"type\":\"bytes4\"},{\"internalType\":\"address\",\"name\":\"lowestBidder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lowestBidPrice\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalFeesCollected\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"trustedForwarders\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"newReward\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newExpiryTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newBidDeadline\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newPitchDeadline\",\"type\":\"uint256\"}],\"name\":\"updateTask\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"usdcToken\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"workerStats\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"completedTasks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"ratedTasks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalStars\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Supports Bounty, Claim, Pitch, Benchmark, and Auction modes with platform fees and staking. All mutating functions are called by a trusted PGTR forwarder (ERC-8194). The authenticated actor (requester/worker) is read from the forwarder via _effectiveSender(), which calls IPGTRForwarder(msg.sender).pgtrSender(). Task IDs are contract-generated: keccak256(abi.encode(block.chainid, address(this), requester, requesterNonce[requester]++)) Backends can pre-compute the ID by reading requesterNonce[requester] before submitting the transaction. UUPS upgradeable \\u2014 proxy address is permanent; only the implementation changes. Storage layout rule: new state variables MUST be appended after existing ones and MUST consume slots from __gap. Never insert between existing variables.\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}],\"FailedCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"ReentrancyGuardReentrantCall()\":[{\"details\":\"Unauthorized reentrant call.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"acceptAuction(bytes32,uint256)\":{\"params\":{\"price\":\"Accepted price in USDC base units (must be <= task.maxPrice)\",\"taskId\":\"Task identifier\"}},\"acceptSubmission(bytes32,address)\":{\"params\":{\"taskId\":\"Task identifier\",\"worker\":\"Worker address to pay\"}},\"addForwarder(address)\":{\"params\":{\"forwarder\":\"Address to trust as a forwarder\"}},\"cancelTask(bytes32)\":{\"params\":{\"taskId\":\"Task identifier\"}},\"claimTask(bytes32,uint256)\":{\"params\":{\"stakeAmount\":\"USDC stake amount (0 = no stake required). If > 0, the forwarder must transfer the stake to this contract before calling.\",\"taskId\":\"Task identifier\"}},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"createTask(uint256,uint256,bytes4,uint256,uint256,bytes32,string,bytes4)\":{\"params\":{\"auctionSubtype\":\"Auction subtype selector (bytes4(0) for non-auction tasks)\",\"bidDeadline\":\"Seconds from now for bid window (Auction mode only, 0 otherwise)\",\"contentHash\":\"Optional keccak256 of off-chain task description (bytes32(0) if unused)\",\"contentURI\":\"Optional URI pointing to extended task metadata (empty string if unused)\",\"duration\":\"Task lifetime in seconds\",\"mode\":\"4-byte mode selector (use BOUNTY/CLAIM/PITCH/BENCHMARK/AUCTION)\",\"pitchDeadline\":\"Seconds from now for pitch window (Pitch mode only, 0 otherwise)\",\"reward\":\"USDC reward (6 decimals); for Auction = max price\"},\"returns\":{\"taskId\":\" Contract-generated canonical task identifier\"}},\"evaluatorFor(bytes32)\":{\"params\":{\"taskId\":\"Task identifier\"},\"returns\":{\"evaluator\":\"Address that can call acceptSubmission() for this task\"}},\"feeForTask(bytes32)\":{\"params\":{\"taskId\":\"Task identifier\"},\"returns\":{\"_0\":\"Fee in basis points for this task\"}},\"forfeitAndReopen(bytes32)\":{\"details\":\"Can only be called after the task has expired. Claimer's stake is transferred to fee recipient as a non-delivery penalty.\",\"params\":{\"taskId\":\"Task identifier\"}},\"getBids(bytes32)\":{\"params\":{\"taskId\":\"Task identifier\"},\"returns\":{\"_0\":\"bids Array of Bid structs\"}},\"getTask(bytes32)\":{\"params\":{\"taskId\":\"Task identifier\"},\"returns\":{\"_0\":\"task Task struct\"}},\"getWorkerStats(address)\":{\"params\":{\"worker\":\"Worker address\"},\"returns\":{\"_0\":\"Worker stats struct (completedTasks, ratedTasks, totalStars)\"}},\"initialize(address,address,uint16)\":{\"params\":{\"_defaultFeeBps\":\"Default platform fee in basis points (500 = 5%)\",\"_feeRecipient\":\"Address to receive platform fees\",\"_usdcToken\":\"USDC token address on Base\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"rateTask(bytes32,uint8,uint256,uint256,string,bytes32)\":{\"params\":{\"feedbackHash\":\"keccak256 hash of the feedback file content\",\"feedbackURI\":\"URI of the canonical off-chain feedback file\",\"raterAgentId\":\"ERC-8004 agentId of the requester giving the rating, or 0 if unknown\",\"rating\":\"Rating (0-100)\",\"taskId\":\"Task identifier\",\"workerAgentId\":\"ERC-8004 agentId of worker, or 0 if unknown\"}},\"refundExpired(bytes32)\":{\"params\":{\"taskId\":\"Task identifier\"}},\"removeForwarder(address)\":{\"params\":{\"forwarder\":\"Address to remove from trusted forwarders\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"selectLowestBidder(bytes32)\":{\"details\":\"O(1): submitBid() maintains a running minimum in task.lowestBidder/lowestBidPrice.\",\"params\":{\"taskId\":\"Task identifier\"}},\"selectWorker(bytes32,address)\":{\"params\":{\"taskId\":\"Task identifier\",\"worker\":\"Selected worker address\"}},\"setDefaultFeeBps(uint16)\":{\"params\":{\"feeBps\":\"New fee in basis points\"}},\"setFeeRecipient(address)\":{\"params\":{\"recipient\":\"New fee recipient address\"}},\"setReputationRegistry(address)\":{\"params\":{\"registry\":\"New reputation registry address\"}},\"submitBid(bytes32,uint256)\":{\"params\":{\"price\":\"Bid price in USDC base units (must be <= maxPrice)\",\"taskId\":\"Task identifier\"}},\"submitWork(bytes32,bytes32)\":{\"params\":{\"deliverable\":\"Content hash (keccak256, IPFS CID, or ZK commitment)\",\"taskId\":\"Task identifier\"}},\"supportsInterface(bytes4)\":{\"details\":\"Returns true for ITMP and IERC165 interface IDs.\",\"params\":{\"interfaceId\":\"4-byte interface selector to check\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"updateTask(bytes32,uint256,uint256,uint256,uint256)\":{\"params\":{\"newBidDeadline\":\"New absolute bid deadline (Auction only, 0 = no change)\",\"newExpiryTime\":\"New absolute expiry Unix timestamp (0 = no change)\",\"newPitchDeadline\":\"New absolute pitch deadline (Pitch only, 0 = no change)\",\"newReward\":\"New reward amount (0 = no change); if higher, forwarder pre-transfers delta\",\"taskId\":\"Task identifier\"}},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"title\":\"TaskMarket\",\"version\":1},\"userdoc\":{\"events\":{\"ReputationRegistryUpdated(address)\":{\"notice\":\"Emitted when a reputation registry is configured or changed.\"},\"TaskAccepted(bytes32,address,address,uint256,uint256)\":{\"notice\":\"Emitted when a task is completed and worker is paid.\"},\"TaskCancelled(bytes32,address,uint256)\":{\"notice\":\"Emitted when a requester cancels an open task and receives a refund.\"},\"TaskCreated(bytes32,address,uint256,uint256,bytes4)\":{\"notice\":\"Emitted when a task is created and reward is escrowed.\"},\"TaskExpired(bytes32,address,uint256)\":{\"notice\":\"Emitted when a task expires and the reward is refunded.\"},\"TaskRated(bytes32,address,uint8,uint256)\":{\"notice\":\"Emitted when a requester rates a completed task.\"},\"TaskSubmitted(bytes32,address,bytes32)\":{\"notice\":\"Emitted when a worker submits work (deliverable hash anchored on-chain).\"}},\"kind\":\"user\",\"methods\":{\"acceptAuction(bytes32,uint256)\":{\"notice\":\"Directly award an open auction task to a worker at a given price. Used by clock-based auction subtypes (dutch, reverse_dutch). The worker is the authenticated actor (pgtrSender).\"},\"acceptSubmission(bytes32,address)\":{\"notice\":\"Accept submission and release payment to worker. The requester is the authenticated actor (pgtrSender).\"},\"addForwarder(address)\":{\"notice\":\"Add a trusted PGTR forwarder (owner only)\"},\"cancelTask(bytes32)\":{\"notice\":\"Cancel an open task and refund the escrowed reward to the requester. The requester is the authenticated actor (pgtrSender). Auction tasks may only be cancelled if no bids have been submitted.\"},\"claimTask(bytes32,uint256)\":{\"notice\":\"Claim a Claim-mode task. The worker is the authenticated actor (pgtrSender).\"},\"createTask(uint256,uint256,bytes4,uint256,uint256,bytes32,string,bytes4)\":{\"notice\":\"Create a new task with USDC escrow. Task ID is contract-generated: keccak256(abi.encode(block.chainid, address(this), requester, nonce)) Callers SHOULD pre-compute the ID by reading requesterNonce[requester] before submitting this transaction. The requester is the authenticated actor from the PGTR forwarder (pgtrSender). The USDC reward MUST be transferred to this contract by the forwarder before calling.\"},\"defaultFeeBps()\":{\"notice\":\"Platform fee in basis points deducted from reward on task completion. Example: 500 = 5%.\"},\"evaluatorFor(bytes32)\":{\"notice\":\"Returns the address responsible for evaluating work on a task (ITMPMode). For all modes except Benchmark, this is the task requester. For Benchmark mode, this is the ERC-8004 Validation Registry.\"},\"feeForTask(bytes32)\":{\"notice\":\"Per-task fee in basis points stamped at task creation (ITMPFees).\"},\"feeRecipient()\":{\"notice\":\"Address that receives platform fees.\"},\"forfeitAndReopen(bytes32)\":{\"notice\":\"Forfeit claimer's stake and reopen Claim task. The requester is the authenticated actor (pgtrSender).\"},\"getBids(bytes32)\":{\"notice\":\"Get all bids for a task\"},\"getTask(bytes32)\":{\"notice\":\"Get task details\"},\"getWorkerStats(address)\":{\"notice\":\"Get worker statistics\"},\"initialize(address,address,uint16)\":{\"notice\":\"Initialize the proxy (replaces constructor for UUPS pattern)\"},\"isTrustedForwarder(address)\":{\"notice\":\"Returns true if addr is a trusted PGTR forwarder (ERC-8194 requirement).\"},\"rateTask(bytes32,uint8,uint256,uint256,string,bytes32)\":{\"notice\":\"Rate a completed task and submit ERC-8004 feedback. The requester is the authenticated actor (pgtrSender).\"},\"refundExpired(bytes32)\":{\"notice\":\"Refund expired task reward to requester. NORMATIVE: This function MUST bypass all hooks and extension contracts. Funds are ALWAYS recoverable after expiry. Special case: Auction tasks with a selected winner auto-pay the worker.\"},\"removeForwarder(address)\":{\"notice\":\"Remove a trusted PGTR forwarder (owner only)\"},\"reputationRegistry()\":{\"notice\":\"Address of the ERC-8004 Reputation Registry used for feedback. Returns address(0) if reputation integration is disabled.\"},\"requesterNonce(address)\":{\"notice\":\"Per-requester nonce used to generate canonical task IDs. Read this before calling createTask to pre-compute the task ID off-chain.\"},\"selectLowestBidder(bytes32)\":{\"notice\":\"Select the lowest bidder after bid deadline.\"},\"selectWorker(bytes32,address)\":{\"notice\":\"Select a worker for Pitch mode. The requester is the authenticated actor (pgtrSender).\"},\"setDefaultFeeBps(uint16)\":{\"notice\":\"Set default platform fee (owner only)\"},\"setFeeRecipient(address)\":{\"notice\":\"Set fee recipient (owner only)\"},\"setReputationRegistry(address)\":{\"notice\":\"Set the ERC-8004 reputation registry address (owner only)\"},\"submitBid(bytes32,uint256)\":{\"notice\":\"Submit a bid on an Auction mode task. The worker is the authenticated actor (pgtrSender).\"},\"submitWork(bytes32,bytes32)\":{\"notice\":\"Record that a worker has submitted deliverable work. The worker is the authenticated actor (pgtrSender). Anchors a content hash on-chain for tamper-evident audit trail. State change is mode-dependent: BOUNTY/BENCHMARK \\u2192 PendingApproval CLAIM/PITCH/AUCTION \\u2192 no state change (worker already locked)\"},\"supportsInterface(bytes4)\":{\"notice\":\"ERC-165 interface detection.\"},\"totalFeesCollected()\":{\"notice\":\"Cumulative platform fees collected since deployment.\"},\"trustedForwarders(address)\":{\"notice\":\"Mapping of trusted PGTR forwarders. Multiple forwarders are supported for rotation and redundancy.\"},\"updateTask(bytes32,uint256,uint256,uint256,uint256)\":{\"notice\":\"Update an open task's parameters. Pass 0 for any field to leave unchanged. The requester is the authenticated actor (pgtrSender). Auction tasks may only be updated if no bids have been submitted. If newReward > current reward, the forwarder must transfer the additional USDC to this contract before calling.\"}},\"notice\":\"Multi-mode decentralized task marketplace with USDC escrow on Base L2. Reference implementation of the Task Market Protocol (TMP) EIP.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/TaskMarket.sol\":\"TaskMarket\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/=lib/openzeppelin-contracts/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0x85c3b9bac35a90dce9ed9b31532c3739cae432359d8d7ff59cb6712f21c7ed14\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a084d32ad4ad5b1d4494124d7695334dbeff81c2d1846a01ef1215153dd38eed\",\"dweb:/ipfs/QmbzDrfeogDd3n65mADjLuy97oAMgh2CtiUxKKEpM3WB8b\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x30d125b8417684dbfea3e8d57284b353a86b22077237b4aaf098c0b54b153e16\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2813775a6326190e75dfa9005c1abbdb1e541c195c0bf5656dd4199e8c66fd8d\",\"dweb:/ipfs/QmYDKANBezQXNrEDyJ69RVXkgypW1hWj7MAvjfdNHTZY8L\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x4918e374e9ce84e9b196486bafbd46851d5e72ab315e31f0b1d7c443dcfea5bf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ced247afc54a93a13922ebbd63add61130abe483ab5b5b78e7e991d564d150e\",\"dweb:/ipfs/QmTfxjcTgfekiguegjvYMyfqhyRNffui17f8xi86BCZNVt\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xad316bdc3ee64a0e29773256245045dc57b92660799ff14f668f7c0da9456a9d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://66463434d266816fca2a3a2734ceee88544e61b7cc3899c50333b46e8e771455\",\"dweb:/ipfs/QmPYCzHjki1HQLvBub3uUqoUKGrwdgR3xP9Zpya14YTdXS\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol\":{\"keccak256\":\"0xbf2aefe54b76d7f7bcd4f6da1080b7b1662611937d870b880db584d09cea56b5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5e7e2f12e0feec75296e57f51f82fdaa8bd1551f4b8cc6560442c0bf60f818c\",\"dweb:/ipfs/QmcW9wDMaQ8RbQibMarfp17a3bABzY5KraWe2YDwuUrUoz\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0x82f757819bf2429a0d4db141b99a4bbe5039e4ef86dfb94e2e6d40577ed5b28b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://37c30ed931e19fb71fdb806bb504cfdb9913b7127545001b64d4487783374422\",\"dweb:/ipfs/QmUBHpv4hm3ZmwJ4GH8BeVzK4mv41Q6vBbWXxn8HExPXza\"]},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0xa1ad192cd45317c788618bef5cb1fb3ca4ce8b230f6433ac68cc1d850fb81618\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b43447bb85a53679d269a403c693b9d88d6c74177dfb35eddca63abaf7cf110a\",\"dweb:/ipfs/QmXSDmpd4bNZj1PDgegr6C4w1jDaWHXCconC3rYiw9TSkQ\"]},\"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0x20462ddb2665e9521372c76b001d0ce196e59dbbd989de9af5576cad0bd5628b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f417fd12aeec8fbfaceaa30e3a08a0724c0bc39de363e2acf6773c897abbaf6d\",\"dweb:/ipfs/QmU4Hko6sApdweVM92CsiuLKkCk8HfyBeutF89PCTz5Tye\"]},\"lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ab7b6d5b9e2b88176312967fe0f0e78f3d9a1422fa5e4b64e2440c35869b5d08\",\"dweb:/ipfs/QmXKYWWyzcLg1B2k7Sb1qkEXgLCYfXecR9wYW5obRzWP1Q\"]},\"lib/openzeppelin-contracts/contracts/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x1a26353563a2c63b4120ea0b94727253eeff84fe2241d42c1452308b9080e66a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://49a95e36d267828b4357186a79917002d616d8634e25d1f9818e2354cd2e7d34\",\"dweb:/ipfs/QmWDkqE4KkyLAS2UkLsRgXE1FGB1qfEgBC3zMXBVsVWfdk\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0x0fa9e0d3a859900b5a46f70a03c73adf259603d5e05027a37fe0b45529d85346\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c2add4da0240c9f2ce47649c8bb6b11b40e98cf6f88b8bdc76b2704e89391710\",\"dweb:/ipfs/QmNQTwF2uVzu4CRtNxr8bxyP9XuW6VsZuo2Nr4KR2bZr3d\"]},\"lib/openzeppelin-contracts/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol\":{\"keccak256\":\"0x5b4802a4352474792df3107e961d1cc593e47b820c14f69d3505cb28f5a6a583\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a6f86fd01f829499fe0545ff5dda07d4521988e88bfe0bf801fc15650921ed56\",\"dweb:/ipfs/QmUUKu4ZDffHAmfkf3asuQfmLTyfpuy2Amdncc3SqfzKPG\"]},\"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0xa516cbf1c7d15d3517c2d668601ce016c54395bf5171918a14e2686977465f53\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e1d079e8edfb58efd23a311e315a4807b01b5d1cf153f8fa2d0608b9dec3e99\",\"dweb:/ipfs/QmTBExeX2SDTkn5xbk5ssbYSx7VqRp9H4Ux1CY4uQM4b9N\"]},\"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]},\"src/TaskMarket.sol\":{\"keccak256\":\"0x9eddeeaaf89c1a1427e8c27fb0ebb38d138288aa9649f24d771b1c7509855a3c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3e2f27ecc319bc17dc1c49c52aa009a1979c2a2fc77606b8966abfd3f2c87d9b\",\"dweb:/ipfs/QmVDQXZbnf2gHweqbopgmafyep5Ymf664Q1J7eX5K38krJ\"]},\"src/interfaces/IPGTRForwarder.sol\":{\"keccak256\":\"0x4e8e8ab44c855662312bc8e28112a84b4d69f7879a22028ffc385ce6ed1f8e72\",\"license\":\"CC0-1.0\",\"urls\":[\"bzz-raw://9972ccae87abf7572f3449cd1858f1a419a91c3dacc95a873e609bdd8c9389b8\",\"dweb:/ipfs/QmZXdBJkzouLBgbo5ywUWV52Q9MzzS6HrELdJHYZzAS6mC\"]},\"src/interfaces/IReputationRegistry.sol\":{\"keccak256\":\"0x30c20f6294b6fa6497651efd80aa2fabaf4c79ad369db1a01ec5bea35c9ca3ca\",\"license\":\"CC0-1.0\",\"urls\":[\"bzz-raw://a5f382778af2bd4bf89d3276408f6789f7718d44879ef0fcea013582ac9e7a1b\",\"dweb:/ipfs/QmQhBsjpRom9rNHw1hACTrD2iFEnnQL8wpWu8mS276X4Ww\"]},\"src/interfaces/ITMP.sol\":{\"keccak256\":\"0xb5d47269a895a4f5ee197dd46f41b766ad224bb7dbd662f93061e5bafcb0cecc\",\"license\":\"CC0-1.0\",\"urls\":[\"bzz-raw://60807e3cb669219a88ef00f0f1a0d4f1d93a172e2fb33e349185057f697af3e1\",\"dweb:/ipfs/QmaKrx59ccYG37noU8BGiG5bKii8jtXmokziZpEKFXeaRA\"]},\"src/interfaces/ITMPFees.sol\":{\"keccak256\":\"0x58bcb2fe406abbfad75867fa39778dfbb9f29428eaa46d3e16fe2defc4a4ad98\",\"license\":\"CC0-1.0\",\"urls\":[\"bzz-raw://295f9cf41c7aafff1373c030afa062efbbf9e3f10ad058b6e53f5cff50ae7d40\",\"dweb:/ipfs/QmNkuAW92RzQPac9KgaxqdZUe7c1jTTVtw74gY8ci5Nv6f\"]},\"src/interfaces/ITMPMode.sol\":{\"keccak256\":\"0xb13102bcb1c2d73b4dc9fc4d8806176499233a47e4218c39f910ec0551c35b5a\",\"license\":\"CC0-1.0\",\"urls\":[\"bzz-raw://3ea90693a52ac25388751090004c3a8861e6147fe52c5111117093e49bfba4b5\",\"dweb:/ipfs/QmfLGkoF8AqTvoEmLgJHKF19V4hTFC5L5xy5icaTPVUqc8\"]},\"src/interfaces/ITMPReputation.sol\":{\"keccak256\":\"0x94f9110938e00dc0d585c5e90bbf548e6ceed945a56af504e0c73df2e18e3242\",\"license\":\"CC0-1.0\",\"urls\":[\"bzz-raw://b938b18f4e0a54dc39b3c60150000d5ea49a3beb97641a19aa2b2f09383292cb\",\"dweb:/ipfs/QmajcVipvxyyQTNdVPkDdDTEJLoAJDYUChL5gVjjWYFahb\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.24+commit.e11b9ed9"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"type":"error","name":"AddressEmptyCode"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"}],"type":"error","name":"ERC1967InvalidImplementation"},{"inputs":[],"type":"error","name":"ERC1967NonPayable"},{"inputs":[],"type":"error","name":"FailedCall"},{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"OwnableInvalidOwner"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"type":"error","name":"OwnableUnauthorizedAccount"},{"inputs":[],"type":"error","name":"ReentrancyGuardReentrantCall"},{"inputs":[],"type":"error","name":"UUPSUnauthorizedCallContext"},{"inputs":[{"internalType":"bytes32","name":"slot","type":"bytes32"}],"type":"error","name":"UUPSUnsupportedProxiableUUID"},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32","indexed":true},{"internalType":"address","name":"worker","type":"address","indexed":true},{"internalType":"uint256","name":"price","type":"uint256","indexed":false}],"type":"event","name":"BidSubmitted","anonymous":false},{"inputs":[{"internalType":"address","name":"newRecipient","type":"address","indexed":false}],"type":"event","name":"FeeRecipientUpdated","anonymous":false},{"inputs":[{"internalType":"uint16","name":"newFeeBps","type":"uint16","indexed":false}],"type":"event","name":"FeesUpdated","anonymous":false},{"inputs":[{"internalType":"address","name":"forwarder","type":"address","indexed":true},{"internalType":"bool","name":"trusted","type":"bool","indexed":false}],"type":"event","name":"ForwarderUpdated","anonymous":false},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"address","name":"newRegistry","type":"address","indexed":true}],"type":"event","name":"ReputationRegistryUpdated","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32","indexed":true},{"internalType":"address","name":"claimer","type":"address","indexed":true},{"internalType":"uint256","name":"stakeAmount","type":"uint256","indexed":false}],"type":"event","name":"StakeForfeited","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32","indexed":true},{"internalType":"address","name":"claimer","type":"address","indexed":true},{"internalType":"uint256","name":"stakeAmount","type":"uint256","indexed":false}],"type":"event","name":"StakeReturned","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32","indexed":true},{"internalType":"address","name":"requester","type":"address","indexed":true},{"internalType":"address","name":"worker","type":"address","indexed":true},{"internalType":"uint256","name":"workerPayment","type":"uint256","indexed":false},{"internalType":"uint256","name":"platformFee","type":"uint256","indexed":false}],"type":"event","name":"TaskAccepted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32","indexed":true},{"internalType":"address","name":"requester","type":"address","indexed":true},{"internalType":"uint256","name":"refundAmount","type":"uint256","indexed":false}],"type":"event","name":"TaskCancelled","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32","indexed":true},{"internalType":"address","name":"claimer","type":"address","indexed":true},{"internalType":"uint256","name":"stakeAmount","type":"uint256","indexed":false}],"type":"event","name":"TaskClaimed","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32","indexed":true},{"internalType":"address","name":"requester","type":"address","indexed":true},{"internalType":"uint256","name":"reward","type":"uint256","indexed":false},{"internalType":"uint256","name":"expiryTime","type":"uint256","indexed":false},{"internalType":"bytes4","name":"mode","type":"bytes4","indexed":false}],"type":"event","name":"TaskCreated","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32","indexed":true},{"internalType":"address","name":"requester","type":"address","indexed":true},{"internalType":"uint256","name":"refundAmount","type":"uint256","indexed":false}],"type":"event","name":"TaskExpired","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32","indexed":true},{"internalType":"address","name":"worker","type":"address","indexed":true},{"internalType":"uint8","name":"rating","type":"uint8","indexed":false},{"internalType":"uint256","name":"raterAgentId","type":"uint256","indexed":false}],"type":"event","name":"TaskRated","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32","indexed":true}],"type":"event","name":"TaskReopened","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32","indexed":true},{"internalType":"address","name":"worker","type":"address","indexed":true},{"internalType":"bytes32","name":"deliverable","type":"bytes32","indexed":false}],"type":"event","name":"TaskSubmitted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32","indexed":true},{"internalType":"uint256","name":"newReward","type":"uint256","indexed":false},{"internalType":"uint256","name":"newExpiryTime","type":"uint256","indexed":false}],"type":"event","name":"TaskUpdated","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32","indexed":true},{"internalType":"address","name":"worker","type":"address","indexed":true}],"type":"event","name":"TaskWorkerSelected","anonymous":false},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true}],"type":"event","name":"Upgraded","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"AUCTION","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"AUCTION_DUTCH","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"AUCTION_ENGLISH","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"AUCTION_REVERSE_DUTCH","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"AUCTION_REVERSE_ENGLISH","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"BENCHMARK","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"BOUNTY","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"CLAIM","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"PITCH","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"UPGRADE_INTERFACE_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32"},{"internalType":"uint256","name":"price","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"acceptAuction"},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32"},{"internalType":"address","name":"worker","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"acceptSubmission"},{"inputs":[{"internalType":"address","name":"forwarder","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"addForwarder"},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"cancelTask"},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32"},{"internalType":"uint256","name":"stakeAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"claimTask"},{"inputs":[{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"bytes4","name":"mode","type":"bytes4"},{"internalType":"uint256","name":"pitchDeadline","type":"uint256"},{"internalType":"uint256","name":"bidDeadline","type":"uint256"},{"internalType":"bytes32","name":"contentHash","type":"bytes32"},{"internalType":"string","name":"contentURI","type":"string"},{"internalType":"bytes4","name":"auctionSubtype","type":"bytes4"}],"stateMutability":"nonpayable","type":"function","name":"createTask","outputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"defaultFeeBps","outputs":[{"internalType":"uint16","name":"","type":"uint16"}]},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32"}],"stateMutability":"view","type":"function","name":"evaluatorFor","outputs":[{"internalType":"address","name":"evaluator","type":"address"}]},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32"}],"stateMutability":"view","type":"function","name":"feeForTask","outputs":[{"internalType":"uint16","name":"","type":"uint16"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"feeRecipient","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"forfeitAndReopen"},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getBids","outputs":[{"internalType":"struct TaskMarket.Bid[]","name":"","type":"tuple[]","components":[{"internalType":"address","name":"worker","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"}]}]},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getTask","outputs":[{"internalType":"struct ITMP.Task","name":"","type":"tuple","components":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"address","name":"requester","type":"address"},{"internalType":"address","name":"worker","type":"address"},{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint256","name":"createdAt","type":"uint256"},{"internalType":"uint256","name":"expiryTime","type":"uint256"},{"internalType":"enum ITMP.TaskStatus","name":"status","type":"uint8"},{"internalType":"uint8","name":"rating","type":"uint8"},{"internalType":"bytes4","name":"mode","type":"bytes4"},{"internalType":"uint256","name":"stakeAmount","type":"uint256"},{"internalType":"address","name":"claimer","type":"address"},{"internalType":"uint256","name":"claimedAt","type":"uint256"},{"internalType":"uint256","name":"pitchDeadline","type":"uint256"},{"internalType":"uint16","name":"feeBps","type":"uint16"},{"internalType":"uint256","name":"bidDeadline","type":"uint256"},{"internalType":"uint256","name":"maxPrice","type":"uint256"},{"internalType":"bytes32","name":"deliverable","type":"bytes32"},{"internalType":"bytes32","name":"contentHash","type":"bytes32"},{"internalType":"string","name":"contentURI","type":"string"},{"internalType":"bytes4","name":"auctionSubtype","type":"bytes4"},{"internalType":"address","name":"lowestBidder","type":"address"},{"internalType":"uint256","name":"lowestBidPrice","type":"uint256"}]}]},{"inputs":[{"internalType":"address","name":"worker","type":"address"}],"stateMutability":"view","type":"function","name":"getWorkerStats","outputs":[{"internalType":"struct ITMP.WorkerStats","name":"","type":"tuple","components":[{"internalType":"uint256","name":"completedTasks","type":"uint256"},{"internalType":"uint256","name":"ratedTasks","type":"uint256"},{"internalType":"uint256","name":"totalStars","type":"uint256"}]}]},{"inputs":[{"internalType":"address","name":"_usdcToken","type":"address"},{"internalType":"address","name":"_feeRecipient","type":"address"},{"internalType":"uint16","name":"_defaultFeeBps","type":"uint16"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"stateMutability":"view","type":"function","name":"isTrustedForwarder","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32"},{"internalType":"uint8","name":"rating","type":"uint8"},{"internalType":"uint256","name":"workerAgentId","type":"uint256"},{"internalType":"uint256","name":"raterAgentId","type":"uint256"},{"internalType":"string","name":"feedbackURI","type":"string"},{"internalType":"bytes32","name":"feedbackHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"rateTask"},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"refundExpired"},{"inputs":[{"internalType":"address","name":"forwarder","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"removeForwarder"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[],"stateMutability":"view","type":"function","name":"reputationRegistry","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"requesterNonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"selectLowestBidder"},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32"},{"internalType":"address","name":"worker","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"selectWorker"},{"inputs":[{"internalType":"uint16","name":"feeBps","type":"uint16"}],"stateMutability":"nonpayable","type":"function","name":"setDefaultFeeBps"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setFeeRecipient"},{"inputs":[{"internalType":"address","name":"registry","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setReputationRegistry"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"stakeForfeit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32"},{"internalType":"uint256","name":"price","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"submitBid"},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32"},{"internalType":"bytes32","name":"deliverable","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"submitWork"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"stateMutability":"pure","type":"function","name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"taskBids","outputs":[{"internalType":"address","name":"worker","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"tasks","outputs":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"address","name":"requester","type":"address"},{"internalType":"address","name":"worker","type":"address"},{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint256","name":"createdAt","type":"uint256"},{"internalType":"uint256","name":"expiryTime","type":"uint256"},{"internalType":"enum ITMP.TaskStatus","name":"status","type":"uint8"},{"internalType":"uint8","name":"rating","type":"uint8"},{"internalType":"bytes4","name":"mode","type":"bytes4"},{"internalType":"uint256","name":"stakeAmount","type":"uint256"},{"internalType":"address","name":"claimer","type":"address"},{"internalType":"uint256","name":"claimedAt","type":"uint256"},{"internalType":"uint256","name":"pitchDeadline","type":"uint256"},{"internalType":"uint16","name":"feeBps","type":"uint16"},{"internalType":"uint256","name":"bidDeadline","type":"uint256"},{"internalType":"uint256","name":"maxPrice","type":"uint256"},{"internalType":"bytes32","name":"deliverable","type":"bytes32"},{"internalType":"bytes32","name":"contentHash","type":"bytes32"},{"internalType":"string","name":"contentURI","type":"string"},{"internalType":"bytes4","name":"auctionSubtype","type":"bytes4"},{"internalType":"address","name":"lowestBidder","type":"address"},{"internalType":"uint256","name":"lowestBidPrice","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"totalFeesCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"trustedForwarders","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32"},{"internalType":"uint256","name":"newReward","type":"uint256"},{"internalType":"uint256","name":"newExpiryTime","type":"uint256"},{"internalType":"uint256","name":"newBidDeadline","type":"uint256"},{"internalType":"uint256","name":"newPitchDeadline","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"updateTask"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"payable","type":"function","name":"upgradeToAndCall"},{"inputs":[],"stateMutability":"view","type":"function","name":"usdcToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"workerStats","outputs":[{"internalType":"uint256","name":"completedTasks","type":"uint256"},{"internalType":"uint256","name":"ratedTasks","type":"uint256"},{"internalType":"uint256","name":"totalStars","type":"uint256"}]}],"devdoc":{"kind":"dev","methods":{"acceptAuction(bytes32,uint256)":{"params":{"price":"Accepted price in USDC base units (must be <= task.maxPrice)","taskId":"Task identifier"}},"acceptSubmission(bytes32,address)":{"params":{"taskId":"Task identifier","worker":"Worker address to pay"}},"addForwarder(address)":{"params":{"forwarder":"Address to trust as a forwarder"}},"cancelTask(bytes32)":{"params":{"taskId":"Task identifier"}},"claimTask(bytes32,uint256)":{"params":{"stakeAmount":"USDC stake amount (0 = no stake required). If > 0, the forwarder must transfer the stake to this contract before calling.","taskId":"Task identifier"}},"constructor":{"custom:oz-upgrades-unsafe-allow":"constructor"},"createTask(uint256,uint256,bytes4,uint256,uint256,bytes32,string,bytes4)":{"params":{"auctionSubtype":"Auction subtype selector (bytes4(0) for non-auction tasks)","bidDeadline":"Seconds from now for bid window (Auction mode only, 0 otherwise)","contentHash":"Optional keccak256 of off-chain task description (bytes32(0) if unused)","contentURI":"Optional URI pointing to extended task metadata (empty string if unused)","duration":"Task lifetime in seconds","mode":"4-byte mode selector (use BOUNTY/CLAIM/PITCH/BENCHMARK/AUCTION)","pitchDeadline":"Seconds from now for pitch window (Pitch mode only, 0 otherwise)","reward":"USDC reward (6 decimals); for Auction = max price"},"returns":{"taskId":" Contract-generated canonical task identifier"}},"evaluatorFor(bytes32)":{"params":{"taskId":"Task identifier"},"returns":{"evaluator":"Address that can call acceptSubmission() for this task"}},"feeForTask(bytes32)":{"params":{"taskId":"Task identifier"},"returns":{"_0":"Fee in basis points for this task"}},"forfeitAndReopen(bytes32)":{"details":"Can only be called after the task has expired. Claimer's stake is transferred to fee recipient as a non-delivery penalty.","params":{"taskId":"Task identifier"}},"getBids(bytes32)":{"params":{"taskId":"Task identifier"},"returns":{"_0":"bids Array of Bid structs"}},"getTask(bytes32)":{"params":{"taskId":"Task identifier"},"returns":{"_0":"task Task struct"}},"getWorkerStats(address)":{"params":{"worker":"Worker address"},"returns":{"_0":"Worker stats struct (completedTasks, ratedTasks, totalStars)"}},"initialize(address,address,uint16)":{"params":{"_defaultFeeBps":"Default platform fee in basis points (500 = 5%)","_feeRecipient":"Address to receive platform fees","_usdcToken":"USDC token address on Base"}},"owner()":{"details":"Returns the address of the current owner."},"proxiableUUID()":{"details":"Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier."},"rateTask(bytes32,uint8,uint256,uint256,string,bytes32)":{"params":{"feedbackHash":"keccak256 hash of the feedback file content","feedbackURI":"URI of the canonical off-chain feedback file","raterAgentId":"ERC-8004 agentId of the requester giving the rating, or 0 if unknown","rating":"Rating (0-100)","taskId":"Task identifier","workerAgentId":"ERC-8004 agentId of worker, or 0 if unknown"}},"refundExpired(bytes32)":{"params":{"taskId":"Task identifier"}},"removeForwarder(address)":{"params":{"forwarder":"Address to remove from trusted forwarders"}},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"selectLowestBidder(bytes32)":{"details":"O(1): submitBid() maintains a running minimum in task.lowestBidder/lowestBidPrice.","params":{"taskId":"Task identifier"}},"selectWorker(bytes32,address)":{"params":{"taskId":"Task identifier","worker":"Selected worker address"}},"setDefaultFeeBps(uint16)":{"params":{"feeBps":"New fee in basis points"}},"setFeeRecipient(address)":{"params":{"recipient":"New fee recipient address"}},"setReputationRegistry(address)":{"params":{"registry":"New reputation registry address"}},"submitBid(bytes32,uint256)":{"params":{"price":"Bid price in USDC base units (must be <= maxPrice)","taskId":"Task identifier"}},"submitWork(bytes32,bytes32)":{"params":{"deliverable":"Content hash (keccak256, IPFS CID, or ZK commitment)","taskId":"Task identifier"}},"supportsInterface(bytes4)":{"details":"Returns true for ITMP and IERC165 interface IDs.","params":{"interfaceId":"4-byte interface selector to check"}},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"updateTask(bytes32,uint256,uint256,uint256,uint256)":{"params":{"newBidDeadline":"New absolute bid deadline (Auction only, 0 = no change)","newExpiryTime":"New absolute expiry Unix timestamp (0 = no change)","newPitchDeadline":"New absolute pitch deadline (Pitch only, 0 = no change)","newReward":"New reward amount (0 = no change); if higher, forwarder pre-transfers delta","taskId":"Task identifier"}},"upgradeToAndCall(address,bytes)":{"custom:oz-upgrades-unsafe-allow-reachable":"delegatecall","details":"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."}},"version":1},"userdoc":{"kind":"user","methods":{"acceptAuction(bytes32,uint256)":{"notice":"Directly award an open auction task to a worker at a given price. Used by clock-based auction subtypes (dutch, reverse_dutch). The worker is the authenticated actor (pgtrSender)."},"acceptSubmission(bytes32,address)":{"notice":"Accept submission and release payment to worker. The requester is the authenticated actor (pgtrSender)."},"addForwarder(address)":{"notice":"Add a trusted PGTR forwarder (owner only)"},"cancelTask(bytes32)":{"notice":"Cancel an open task and refund the escrowed reward to the requester. The requester is the authenticated actor (pgtrSender). Auction tasks may only be cancelled if no bids have been submitted."},"claimTask(bytes32,uint256)":{"notice":"Claim a Claim-mode task. The worker is the authenticated actor (pgtrSender)."},"createTask(uint256,uint256,bytes4,uint256,uint256,bytes32,string,bytes4)":{"notice":"Create a new task with USDC escrow. Task ID is contract-generated: keccak256(abi.encode(block.chainid, address(this), requester, nonce)) Callers SHOULD pre-compute the ID by reading requesterNonce[requester] before submitting this transaction. The requester is the authenticated actor from the PGTR forwarder (pgtrSender). The USDC reward MUST be transferred to this contract by the forwarder before calling."},"defaultFeeBps()":{"notice":"Platform fee in basis points deducted from reward on task completion. Example: 500 = 5%."},"evaluatorFor(bytes32)":{"notice":"Returns the address responsible for evaluating work on a task (ITMPMode). For all modes except Benchmark, this is the task requester. For Benchmark mode, this is the ERC-8004 Validation Registry."},"feeForTask(bytes32)":{"notice":"Per-task fee in basis points stamped at task creation (ITMPFees)."},"feeRecipient()":{"notice":"Address that receives platform fees."},"forfeitAndReopen(bytes32)":{"notice":"Forfeit claimer's stake and reopen Claim task. The requester is the authenticated actor (pgtrSender)."},"getBids(bytes32)":{"notice":"Get all bids for a task"},"getTask(bytes32)":{"notice":"Get task details"},"getWorkerStats(address)":{"notice":"Get worker statistics"},"initialize(address,address,uint16)":{"notice":"Initialize the proxy (replaces constructor for UUPS pattern)"},"isTrustedForwarder(address)":{"notice":"Returns true if addr is a trusted PGTR forwarder (ERC-8194 requirement)."},"rateTask(bytes32,uint8,uint256,uint256,string,bytes32)":{"notice":"Rate a completed task and submit ERC-8004 feedback. The requester is the authenticated actor (pgtrSender)."},"refundExpired(bytes32)":{"notice":"Refund expired task reward to requester. NORMATIVE: This function MUST bypass all hooks and extension contracts. Funds are ALWAYS recoverable after expiry. Special case: Auction tasks with a selected winner auto-pay the worker."},"removeForwarder(address)":{"notice":"Remove a trusted PGTR forwarder (owner only)"},"reputationRegistry()":{"notice":"Address of the ERC-8004 Reputation Registry used for feedback. Returns address(0) if reputation integration is disabled."},"requesterNonce(address)":{"notice":"Per-requester nonce used to generate canonical task IDs. Read this before calling createTask to pre-compute the task ID off-chain."},"selectLowestBidder(bytes32)":{"notice":"Select the lowest bidder after bid deadline."},"selectWorker(bytes32,address)":{"notice":"Select a worker for Pitch mode. The requester is the authenticated actor (pgtrSender)."},"setDefaultFeeBps(uint16)":{"notice":"Set default platform fee (owner only)"},"setFeeRecipient(address)":{"notice":"Set fee recipient (owner only)"},"setReputationRegistry(address)":{"notice":"Set the ERC-8004 reputation registry address (owner only)"},"submitBid(bytes32,uint256)":{"notice":"Submit a bid on an Auction mode task. The worker is the authenticated actor (pgtrSender)."},"submitWork(bytes32,bytes32)":{"notice":"Record that a worker has submitted deliverable work. The worker is the authenticated actor (pgtrSender). Anchors a content hash on-chain for tamper-evident audit trail. State change is mode-dependent: BOUNTY/BENCHMARK → PendingApproval CLAIM/PITCH/AUCTION → no state change (worker already locked)"},"supportsInterface(bytes4)":{"notice":"ERC-165 interface detection."},"totalFeesCollected()":{"notice":"Cumulative platform fees collected since deployment."},"trustedForwarders(address)":{"notice":"Mapping of trusted PGTR forwarders. Multiple forwarders are supported for rotation and redundancy."},"updateTask(bytes32,uint256,uint256,uint256,uint256)":{"notice":"Update an open task's parameters. Pass 0 for any field to leave unchanged. The requester is the authenticated actor (pgtrSender). Auction tasks may only be updated if no bids have been submitted. If newReward > current reward, the forwarder must transfer the additional USDC to this contract before calling."}},"version":1}},"settings":{"remappings":["@openzeppelin/=lib/openzeppelin-contracts/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/TaskMarket.sol":"TaskMarket"},"evmVersion":"cancun","libraries":{},"viaIR":true},"sources":{"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0x85c3b9bac35a90dce9ed9b31532c3739cae432359d8d7ff59cb6712f21c7ed14","urls":["bzz-raw://a084d32ad4ad5b1d4494124d7695334dbeff81c2d1846a01ef1215153dd38eed","dweb:/ipfs/QmbzDrfeogDd3n65mADjLuy97oAMgh2CtiUxKKEpM3WB8b"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x30d125b8417684dbfea3e8d57284b353a86b22077237b4aaf098c0b54b153e16","urls":["bzz-raw://2813775a6326190e75dfa9005c1abbdb1e541c195c0bf5656dd4199e8c66fd8d","dweb:/ipfs/QmYDKANBezQXNrEDyJ69RVXkgypW1hWj7MAvjfdNHTZY8L"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol":{"keccak256":"0x4918e374e9ce84e9b196486bafbd46851d5e72ab315e31f0b1d7c443dcfea5bf","urls":["bzz-raw://2ced247afc54a93a13922ebbd63add61130abe483ab5b5b78e7e991d564d150e","dweb:/ipfs/QmTfxjcTgfekiguegjvYMyfqhyRNffui17f8xi86BCZNVt"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0xad316bdc3ee64a0e29773256245045dc57b92660799ff14f668f7c0da9456a9d","urls":["bzz-raw://66463434d266816fca2a3a2734ceee88544e61b7cc3899c50333b46e8e771455","dweb:/ipfs/QmPYCzHjki1HQLvBub3uUqoUKGrwdgR3xP9Zpya14YTdXS"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol":{"keccak256":"0xbf2aefe54b76d7f7bcd4f6da1080b7b1662611937d870b880db584d09cea56b5","urls":["bzz-raw://f5e7e2f12e0feec75296e57f51f82fdaa8bd1551f4b8cc6560442c0bf60f818c","dweb:/ipfs/QmcW9wDMaQ8RbQibMarfp17a3bABzY5KraWe2YDwuUrUoz"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol":{"keccak256":"0x82f757819bf2429a0d4db141b99a4bbe5039e4ef86dfb94e2e6d40577ed5b28b","urls":["bzz-raw://37c30ed931e19fb71fdb806bb504cfdb9913b7127545001b64d4487783374422","dweb:/ipfs/QmUBHpv4hm3ZmwJ4GH8BeVzK4mv41Q6vBbWXxn8HExPXza"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol":{"keccak256":"0xa1ad192cd45317c788618bef5cb1fb3ca4ce8b230f6433ac68cc1d850fb81618","urls":["bzz-raw://b43447bb85a53679d269a403c693b9d88d6c74177dfb35eddca63abaf7cf110a","dweb:/ipfs/QmXSDmpd4bNZj1PDgegr6C4w1jDaWHXCconC3rYiw9TSkQ"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol":{"keccak256":"0x20462ddb2665e9521372c76b001d0ce196e59dbbd989de9af5576cad0bd5628b","urls":["bzz-raw://f417fd12aeec8fbfaceaa30e3a08a0724c0bc39de363e2acf6773c897abbaf6d","dweb:/ipfs/QmU4Hko6sApdweVM92CsiuLKkCk8HfyBeutF89PCTz5Tye"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol":{"keccak256":"0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05","urls":["bzz-raw://ab7b6d5b9e2b88176312967fe0f0e78f3d9a1422fa5e4b64e2440c35869b5d08","dweb:/ipfs/QmXKYWWyzcLg1B2k7Sb1qkEXgLCYfXecR9wYW5obRzWP1Q"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/utils/UUPSUpgradeable.sol":{"keccak256":"0x1a26353563a2c63b4120ea0b94727253eeff84fe2241d42c1452308b9080e66a","urls":["bzz-raw://49a95e36d267828b4357186a79917002d616d8634e25d1f9818e2354cd2e7d34","dweb:/ipfs/QmWDkqE4KkyLAS2UkLsRgXE1FGB1qfEgBC3zMXBVsVWfdk"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2","urls":["bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303","dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0x0fa9e0d3a859900b5a46f70a03c73adf259603d5e05027a37fe0b45529d85346","urls":["bzz-raw://c2add4da0240c9f2ce47649c8bb6b11b40e98cf6f88b8bdc76b2704e89391710","dweb:/ipfs/QmNQTwF2uVzu4CRtNxr8bxyP9XuW6VsZuo2Nr4KR2bZr3d"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Errors.sol":{"keccak256":"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123","urls":["bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf","dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol":{"keccak256":"0x5b4802a4352474792df3107e961d1cc593e47b820c14f69d3505cb28f5a6a583","urls":["bzz-raw://a6f86fd01f829499fe0545ff5dda07d4521988e88bfe0bf801fc15650921ed56","dweb:/ipfs/QmUUKu4ZDffHAmfkf3asuQfmLTyfpuy2Amdncc3SqfzKPG"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol":{"keccak256":"0xa516cbf1c7d15d3517c2d668601ce016c54395bf5171918a14e2686977465f53","urls":["bzz-raw://1e1d079e8edfb58efd23a311e315a4807b01b5d1cf153f8fa2d0608b9dec3e99","dweb:/ipfs/QmTBExeX2SDTkn5xbk5ssbYSx7VqRp9H4Ux1CY4uQM4b9N"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol":{"keccak256":"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97","urls":["bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b","dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol":{"keccak256":"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c","urls":["bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617","dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u"],"license":"MIT"},"src/TaskMarket.sol":{"keccak256":"0x9eddeeaaf89c1a1427e8c27fb0ebb38d138288aa9649f24d771b1c7509855a3c","urls":["bzz-raw://3e2f27ecc319bc17dc1c49c52aa009a1979c2a2fc77606b8966abfd3f2c87d9b","dweb:/ipfs/QmVDQXZbnf2gHweqbopgmafyep5Ymf664Q1J7eX5K38krJ"],"license":"MIT"},"src/interfaces/IPGTRForwarder.sol":{"keccak256":"0x4e8e8ab44c855662312bc8e28112a84b4d69f7879a22028ffc385ce6ed1f8e72","urls":["bzz-raw://9972ccae87abf7572f3449cd1858f1a419a91c3dacc95a873e609bdd8c9389b8","dweb:/ipfs/QmZXdBJkzouLBgbo5ywUWV52Q9MzzS6HrELdJHYZzAS6mC"],"license":"CC0-1.0"},"src/interfaces/IReputationRegistry.sol":{"keccak256":"0x30c20f6294b6fa6497651efd80aa2fabaf4c79ad369db1a01ec5bea35c9ca3ca","urls":["bzz-raw://a5f382778af2bd4bf89d3276408f6789f7718d44879ef0fcea013582ac9e7a1b","dweb:/ipfs/QmQhBsjpRom9rNHw1hACTrD2iFEnnQL8wpWu8mS276X4Ww"],"license":"CC0-1.0"},"src/interfaces/ITMP.sol":{"keccak256":"0xb5d47269a895a4f5ee197dd46f41b766ad224bb7dbd662f93061e5bafcb0cecc","urls":["bzz-raw://60807e3cb669219a88ef00f0f1a0d4f1d93a172e2fb33e349185057f697af3e1","dweb:/ipfs/QmaKrx59ccYG37noU8BGiG5bKii8jtXmokziZpEKFXeaRA"],"license":"CC0-1.0"},"src/interfaces/ITMPFees.sol":{"keccak256":"0x58bcb2fe406abbfad75867fa39778dfbb9f29428eaa46d3e16fe2defc4a4ad98","urls":["bzz-raw://295f9cf41c7aafff1373c030afa062efbbf9e3f10ad058b6e53f5cff50ae7d40","dweb:/ipfs/QmNkuAW92RzQPac9KgaxqdZUe7c1jTTVtw74gY8ci5Nv6f"],"license":"CC0-1.0"},"src/interfaces/ITMPMode.sol":{"keccak256":"0xb13102bcb1c2d73b4dc9fc4d8806176499233a47e4218c39f910ec0551c35b5a","urls":["bzz-raw://3ea90693a52ac25388751090004c3a8861e6147fe52c5111117093e49bfba4b5","dweb:/ipfs/QmfLGkoF8AqTvoEmLgJHKF19V4hTFC5L5xy5icaTPVUqc8"],"license":"CC0-1.0"},"src/interfaces/ITMPReputation.sol":{"keccak256":"0x94f9110938e00dc0d585c5e90bbf548e6ceed945a56af504e0c73df2e18e3242","urls":["bzz-raw://b938b18f4e0a54dc39b3c60150000d5ea49a3beb97641a19aa2b2f09383292cb","dweb:/ipfs/QmajcVipvxyyQTNdVPkDdDTEJLoAJDYUChL5gVjjWYFahb"],"license":"CC0-1.0"}},"version":1},"id":50} \ No newline at end of file +{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"AUCTION","inputs":[],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"view"},{"type":"function","name":"AUCTION_DUTCH","inputs":[],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"view"},{"type":"function","name":"AUCTION_ENGLISH","inputs":[],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"view"},{"type":"function","name":"AUCTION_REVERSE_DUTCH","inputs":[],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"view"},{"type":"function","name":"AUCTION_REVERSE_ENGLISH","inputs":[],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"view"},{"type":"function","name":"BENCHMARK","inputs":[],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"view"},{"type":"function","name":"BOUNTY","inputs":[],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"view"},{"type":"function","name":"CLAIM","inputs":[],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"view"},{"type":"function","name":"PITCH","inputs":[],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"view"},{"type":"function","name":"UPGRADE_INTERFACE_VERSION","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"acceptAuction","inputs":[{"name":"taskId","type":"bytes32","internalType":"bytes32"},{"name":"price","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"acceptSubmission","inputs":[{"name":"taskId","type":"bytes32","internalType":"bytes32"},{"name":"worker","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"addForwarder","inputs":[{"name":"forwarder","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"cancelTask","inputs":[{"name":"taskId","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"claimTask","inputs":[{"name":"taskId","type":"bytes32","internalType":"bytes32"},{"name":"stakeAmount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"createTask","inputs":[{"name":"reward","type":"uint256","internalType":"uint256"},{"name":"duration","type":"uint256","internalType":"uint256"},{"name":"mode","type":"bytes4","internalType":"bytes4"},{"name":"pitchDeadline","type":"uint256","internalType":"uint256"},{"name":"bidDeadline","type":"uint256","internalType":"uint256"},{"name":"contentHash","type":"bytes32","internalType":"bytes32"},{"name":"contentURI","type":"string","internalType":"string"},{"name":"auctionSubtype","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"taskId","type":"bytes32","internalType":"bytes32"}],"stateMutability":"nonpayable"},{"type":"function","name":"defaultFeeBps","inputs":[],"outputs":[{"name":"","type":"uint16","internalType":"uint16"}],"stateMutability":"view"},{"type":"function","name":"evaluatorFor","inputs":[{"name":"taskId","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"evaluator","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"feeForTask","inputs":[{"name":"taskId","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint16","internalType":"uint16"}],"stateMutability":"view"},{"type":"function","name":"feeRecipient","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"forfeitAndReopen","inputs":[{"name":"taskId","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getBids","inputs":[{"name":"taskId","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"tuple[]","internalType":"struct TaskMarket.Bid[]","components":[{"name":"worker","type":"address","internalType":"address"},{"name":"price","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"getTask","inputs":[{"name":"taskId","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"tuple","internalType":"struct ITMP.Task","components":[{"name":"id","type":"bytes32","internalType":"bytes32"},{"name":"requester","type":"address","internalType":"address"},{"name":"worker","type":"address","internalType":"address"},{"name":"reward","type":"uint256","internalType":"uint256"},{"name":"createdAt","type":"uint256","internalType":"uint256"},{"name":"expiryTime","type":"uint256","internalType":"uint256"},{"name":"status","type":"uint8","internalType":"enum ITMP.TaskStatus"},{"name":"rating","type":"uint8","internalType":"uint8"},{"name":"mode","type":"bytes4","internalType":"bytes4"},{"name":"stakeAmount","type":"uint256","internalType":"uint256"},{"name":"claimer","type":"address","internalType":"address"},{"name":"claimedAt","type":"uint256","internalType":"uint256"},{"name":"pitchDeadline","type":"uint256","internalType":"uint256"},{"name":"feeBps","type":"uint16","internalType":"uint16"},{"name":"bidDeadline","type":"uint256","internalType":"uint256"},{"name":"maxPrice","type":"uint256","internalType":"uint256"},{"name":"deliverable","type":"bytes32","internalType":"bytes32"},{"name":"contentHash","type":"bytes32","internalType":"bytes32"},{"name":"contentURI","type":"string","internalType":"string"},{"name":"auctionSubtype","type":"bytes4","internalType":"bytes4"},{"name":"lowestBidder","type":"address","internalType":"address"},{"name":"lowestBidPrice","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"getWorkerStats","inputs":[{"name":"worker","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"tuple","internalType":"struct ITMP.WorkerStats","components":[{"name":"completedTasks","type":"uint256","internalType":"uint256"},{"name":"ratedTasks","type":"uint256","internalType":"uint256"},{"name":"totalStars","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"_usdcToken","type":"address","internalType":"address"},{"name":"_feeRecipient","type":"address","internalType":"address"},{"name":"_defaultFeeBps","type":"uint16","internalType":"uint16"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"isTrustedForwarder","inputs":[{"name":"addr","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"proxiableUUID","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"rateTask","inputs":[{"name":"taskId","type":"bytes32","internalType":"bytes32"},{"name":"rating","type":"uint8","internalType":"uint8"},{"name":"workerAgentId","type":"uint256","internalType":"uint256"},{"name":"raterAgentId","type":"uint256","internalType":"uint256"},{"name":"feedbackURI","type":"string","internalType":"string"},{"name":"feedbackHash","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"refundExpired","inputs":[{"name":"taskId","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"removeForwarder","inputs":[{"name":"forwarder","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"reputationRegistry","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"requesterNonce","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"selectLowestBidder","inputs":[{"name":"taskId","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"selectWorker","inputs":[{"name":"taskId","type":"bytes32","internalType":"bytes32"},{"name":"worker","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setDefaultFeeBps","inputs":[{"name":"feeBps","type":"uint16","internalType":"uint16"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setFeeRecipient","inputs":[{"name":"recipient","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setReputationRegistry","inputs":[{"name":"registry","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"stakeForfeit","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"submitBid","inputs":[{"name":"taskId","type":"bytes32","internalType":"bytes32"},{"name":"price","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"submitPitch","inputs":[{"name":"taskId","type":"bytes32","internalType":"bytes32"},{"name":"pitchHash","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"submitProof","inputs":[{"name":"taskId","type":"bytes32","internalType":"bytes32"},{"name":"proofHash","type":"bytes32","internalType":"bytes32"},{"name":"proofType","type":"bytes32","internalType":"bytes32"},{"name":"metricValue","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"submitWork","inputs":[{"name":"taskId","type":"bytes32","internalType":"bytes32"},{"name":"deliverable","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"taskBids","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"},{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"worker","type":"address","internalType":"address"},{"name":"price","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"taskPitchHashes","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"},{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"taskProofHashes","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"},{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"tasks","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"id","type":"bytes32","internalType":"bytes32"},{"name":"requester","type":"address","internalType":"address"},{"name":"worker","type":"address","internalType":"address"},{"name":"reward","type":"uint256","internalType":"uint256"},{"name":"createdAt","type":"uint256","internalType":"uint256"},{"name":"expiryTime","type":"uint256","internalType":"uint256"},{"name":"status","type":"uint8","internalType":"enum ITMP.TaskStatus"},{"name":"rating","type":"uint8","internalType":"uint8"},{"name":"mode","type":"bytes4","internalType":"bytes4"},{"name":"stakeAmount","type":"uint256","internalType":"uint256"},{"name":"claimer","type":"address","internalType":"address"},{"name":"claimedAt","type":"uint256","internalType":"uint256"},{"name":"pitchDeadline","type":"uint256","internalType":"uint256"},{"name":"feeBps","type":"uint16","internalType":"uint16"},{"name":"bidDeadline","type":"uint256","internalType":"uint256"},{"name":"maxPrice","type":"uint256","internalType":"uint256"},{"name":"deliverable","type":"bytes32","internalType":"bytes32"},{"name":"contentHash","type":"bytes32","internalType":"bytes32"},{"name":"contentURI","type":"string","internalType":"string"},{"name":"auctionSubtype","type":"bytes4","internalType":"bytes4"},{"name":"lowestBidder","type":"address","internalType":"address"},{"name":"lowestBidPrice","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"totalFeesCollected","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"trustedForwarders","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"updateTask","inputs":[{"name":"taskId","type":"bytes32","internalType":"bytes32"},{"name":"newReward","type":"uint256","internalType":"uint256"},{"name":"newExpiryTime","type":"uint256","internalType":"uint256"},{"name":"newBidDeadline","type":"uint256","internalType":"uint256"},{"name":"newPitchDeadline","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"upgradeToAndCall","inputs":[{"name":"newImplementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"usdcToken","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IERC20"}],"stateMutability":"view"},{"type":"function","name":"workerStats","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"completedTasks","type":"uint256","internalType":"uint256"},{"name":"ratedTasks","type":"uint256","internalType":"uint256"},{"name":"totalStars","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"event","name":"AuctionAccepted","inputs":[{"name":"taskId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"worker","type":"address","indexed":true,"internalType":"address"},{"name":"acceptedPrice","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"BidSubmitted","inputs":[{"name":"taskId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"worker","type":"address","indexed":true,"internalType":"address"},{"name":"price","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"FeeRecipientUpdated","inputs":[{"name":"newRecipient","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"FeesUpdated","inputs":[{"name":"newFeeBps","type":"uint16","indexed":false,"internalType":"uint16"}],"anonymous":false},{"type":"event","name":"ForwarderUpdated","inputs":[{"name":"forwarder","type":"address","indexed":true,"internalType":"address"},{"name":"trusted","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"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":"PitchSubmitted","inputs":[{"name":"taskId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"worker","type":"address","indexed":true,"internalType":"address"},{"name":"pitchHash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"ProofSubmitted","inputs":[{"name":"taskId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"worker","type":"address","indexed":true,"internalType":"address"},{"name":"proofHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"proofType","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"metricValue","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"ReputationRegistryUpdated","inputs":[{"name":"newRegistry","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"StakeForfeited","inputs":[{"name":"taskId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"claimer","type":"address","indexed":true,"internalType":"address"},{"name":"stakeAmount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"StakeReturned","inputs":[{"name":"taskId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"claimer","type":"address","indexed":true,"internalType":"address"},{"name":"stakeAmount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"TaskAccepted","inputs":[{"name":"taskId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"requester","type":"address","indexed":true,"internalType":"address"},{"name":"worker","type":"address","indexed":true,"internalType":"address"},{"name":"workerPayment","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"platformFee","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"TaskCancelled","inputs":[{"name":"taskId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"requester","type":"address","indexed":true,"internalType":"address"},{"name":"refundAmount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"TaskClaimed","inputs":[{"name":"taskId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"claimer","type":"address","indexed":true,"internalType":"address"},{"name":"stakeAmount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"TaskCreated","inputs":[{"name":"taskId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"requester","type":"address","indexed":true,"internalType":"address"},{"name":"reward","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"expiryTime","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"mode","type":"bytes4","indexed":false,"internalType":"bytes4"}],"anonymous":false},{"type":"event","name":"TaskExpired","inputs":[{"name":"taskId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"requester","type":"address","indexed":true,"internalType":"address"},{"name":"refundAmount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"TaskRated","inputs":[{"name":"taskId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"worker","type":"address","indexed":true,"internalType":"address"},{"name":"rating","type":"uint8","indexed":false,"internalType":"uint8"},{"name":"raterAgentId","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"TaskReopened","inputs":[{"name":"taskId","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"TaskSubmitted","inputs":[{"name":"taskId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"worker","type":"address","indexed":true,"internalType":"address"},{"name":"deliverable","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"TaskUpdated","inputs":[{"name":"taskId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"newReward","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"newExpiryTime","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"TaskWorkerSelected","inputs":[{"name":"taskId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"worker","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Upgraded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"AddressEmptyCode","inputs":[{"name":"target","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967InvalidImplementation","inputs":[{"name":"implementation","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967NonPayable","inputs":[]},{"type":"error","name":"FailedCall","inputs":[]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"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":"UUPSUnauthorizedCallContext","inputs":[]},{"type":"error","name":"UUPSUnsupportedProxiableUUID","inputs":[{"name":"slot","type":"bytes32","internalType":"bytes32"}]}],"bytecode":{"object":"0x60a08060405234620000f55760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055306080527ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009081549060ff8260401c16620000e657506001600160401b036002600160401b031982821601620000a0575b604051614f139081620000fa8239608051818181612694015261274d0152f35b6001600160401b031990911681179091556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f808062000080565b63f92ee8a960e01b8152600490fd5b5f80fdfe610140806040526004361015610013575f80fd5b5f905f3560e01c90816301ffc9a714613cbc5750806311eac85514613c9557806315a29035146139415780631a22aaa4146138145780631c8e57f8146137f25780631e52fce714612fdc5780632144ea4914612c64578063365ba2dd14612bdf5780633f0ce71414612b775780634488b65214612b0557806346170ca41461298e57806346904840146129615780634d93172d146128f45780634f1ef286146126fe57806352d1902d14612681578063537da21f1461250657806354776bb9146124c7578063572b6c05146124c75780635c41d2fe1461240c57806360c6d8ae146123ee57806363326459146123cb57806363779c74146123a8578063715018a61461233f57806373d748761461231c5780637ebef529146121355780638c58d5fc14611fdc5780638da5cb5b14611fa757806391dc1d3014611d6b5780639d4f988b14611c6b5780639d691d3614611c3a5780639f63f2a614611c01578063a1f0c25414611bcf578063a6eecb7214611b78578063a86592ba146119e9578063ad3cb1cc1461199f578063ae2925a6146114b7578063aeb87ecf14610ef7578063afdc54cd14610c83578063b2b7bdd514610c60578063b4f9d6ad14610c20578063bcae25a414610bfe578063c104d24d14610bdb578063c8db44e314610bb2578063cc3e049b14610b79578063ce37a26314610a77578063d081f2b814610a54578063d864887114610a2a578063da0eb223146109f9578063db7260bc146107a6578063e48a3a6014610755578063e579f50014610587578063e74b981b146104c5578063ee8ca3b5146102fc578063f152d325146102d9578063f2fde38b146102ac5763fe78aecf14610287575f80fd5b346102a957806003193601126102a957604051633c948d2360e01b8152602090f35b80fd5b50346102a95760203660031901126102a9576102d66102c9613de5565b6102d1614d44565b614b07565b80f35b50346102a957806003193601126102a95760405163687b54cd60e01b8152602090f35b50346102a957602090816003193601126102a9576103746004353383526001845261032d60ff604085205416613fe5565b610335614d7c565b61033d614b78565b818452600285526040842060018101805491966001600160a01b039283169590938690849061036d831515614029565b16146141c8565b60068701805460ff811660078110156104b157988592600660039361039f6104029a9b9c9d156140aa565b8c60d082901b6001600160e01b0319166334b1f22560e21b14610496575b5060ff19161790550154885460405163a9059cbb60e01b81526001600160a01b0390991660048a015260248901829052909795869185169082908b9082906044820190565b03925af193841561048b577f9954d6823ea6810a4780ffb920d7c2a569d41b2d0c99ea5d9314f8ba805de4bc9461044091899161045e575b5061458e565b541693604051908152a360015f80516020614e9e8339815191525580f35b61047e9150853d8711610484575b6104768183613e63565b810190614397565b5f61043a565b503d61046c565b6040513d89823e3d90fd5b6040818d6104ab935260058952205415614351565b8c6103bd565b634e487b7160e01b89526021600452602489fd5b50346102a95760203660031901126102a9576104df613de5565b6104e7614d44565b6001600160a01b03811690811561054e576006805462010000600160b01b03191660109290921b62010000600160b01b03169190911790556040519081527f7a7b5a0a132f9e0581eb8527f66eae9ee89c2a3e79d4ac7e41a1f1f4d48a7fc290602090a180f35b60405162461bcd60e51b8152602060048201526011602482015270125b9d985b1a59081c9958da5c1a595b9d607a1b6044820152606490fd5b50346102a95760203660031901126102a957600480358252600260208190526040909220805460018201546001600160a01b03908116610100529382015484166101205260038201549282015460058301546006840154600785015460088601546009870154600a880154600b890154600c8a0154600d8b0154600e8c0154600f8d01549e909d919c929b61ffff9094169a9499959896169695949392909160129061063560108201613f43565b608052601181015460e052015460a05260405160c05260c0515261010051602060c051015261012051604060c0510152606060c0510152608060c051015260a060c051015261068b60c080510160ff8316613d57565b60ff8160081c1660e060c051015263ffffffff60e01b9060d01b1661010060c051015261012060c051015261014060c051015261016060c051015261018060c05101526101a060c05101526101c060c05101526101e060c051015261020060c051015261022060c05101526102c061024060c05101526107136102c060c05101608051613d64565b63ffffffff60e01b60e05160e01b1661026060c051015260018060a01b0360e05160201c1661028060c051015260a0516102a060c051015260c051900360c051f35b50346102a95760203660031901126102a9576060906040906001600160a01b0361077d613de5565b168152600360205220805490600260018201549101549060405192835260208301526040820152f35b50346102a9576107b536613da2565b9033835260016020526107ce60ff604085205416613fe5565b6107d6614b78565b81845260026020526040842060018101546001600160a01b039291906107ff9084161515614029565b61080f600582015442111561412a565b600e810180546109b457859055600681018054909160d082901b6001600160e01b03191663a81913a560e01b811480156109a4575b156108a057505060ff8116600781101561088c57916003602094926108785f80516020614ebe8339815191529795156140aa565b60ff19161790555b6040519586521693a380f35b634e487b7160e01b88526021600452602488fd5b909250631e61f6a360e31b8103610908575060ff1660078110156108f457916108ef8460085f80516020614ebe83398151915296946108e360016020981461442f565b0154168383161461446e565b610880565b634e487b7160e01b87526021600452602487fd5b63ec07e9d360e01b8114908115610993575b50610939575b50505f80516020614ebe83398151915291602091610880565b60ff1660078110156108f4579161097f8460025f80516020614ebe8339815191529694610973878360209914908115610988575b506143ed565b015416838316146143af565b91819350610920565b60019150145f61096d565b6334b1f22560e21b1490505f61091a565b5063687b54cd60e01b8114610844565b60405162461bcd60e51b815260206004820152601760248201527f44656c6976657261626c6520616c7265616479207365740000000000000000006044820152606490fd5b50346102a95760203660031901126102a95761ffff600b604060209360043581526002855220015416604051908152f35b50346102a95760203660031901126102a95760406020916004358152600483522054604051908152f35b50346102a957806003193601126102a95760405163a81913a560e01b8152602090f35b50346102a95760403660031901126102a957600435610a94613dfb565b903383526001602052610aad60ff604085205416613fe5565b610ab5614b78565b81845260026020526040842060018101546001600160a01b0392610ade918416908416146141c8565b60068101805490929091610b0860d084901b6001600160e01b03191663ec07e9d360e01b1461406b565b60ff8316600781101561088c576002939291610b258592156142c4565b610b35600a8201544211156140e6565b01951694856001600160601b0360a01b82541617905560ff19161790557f8259e46acb41c409f7763c24e2f5dba1221be1944b6960acbfaf4ee07ea8de1e8380a380f35b50346102a95760203660031901126102a957610b93614d7c565b610b9e6004356145ca565b60015f80516020614e9e8339815191525580f35b50346102a957806003193601126102a9576008546040516001600160a01b039091168152602090f35b50346102a957806003193601126102a9576040516310cf2d7f60e01b8152602090f35b50346102a957806003193601126102a957602061ffff60065416604051908152f35b50346102a957610c2f36613da2565b91908152600a602052604081209081548310156102a9576020610c528484613ec9565b90546040519160031b1c8152f35b50346102a957806003193601126102a9576040516360ce192b60e11b8152602090f35b50346102a957602080600319360112610ef3576004359033835260018152610cb160ff604085205416613fe5565b610cb9614b78565b8284526002825260408420600181015490916001600160a01b0391610ce3918316908316146141c8565b600682019060ff8254610d0a631e61f6a360e31b63ffffffff60e01b8360d01b1614614285565b1660078110156108f4576001610d20911461442f565b6005830154421115610eb757908291600787959401938454918787526004825282604088205582610d98575b5050815460ff1916909155506008810180546001600160a01b0319169055600901829055557fae5c872b4498d8e857e43522a12d5dfde96a0d5089787500d6495dade8e994fa8280a280f35b909192939495828483610de19354168460065460101c168c60405180968195829463a9059cbb60e01b84526004840160209093929193604081019460018060a01b031681520152565b03925af1908115610eac578991610e8f575b5015610e4a579282877fb18ae0fffd2ad14984107b582c2dec2fb6effb8bf06d43a59dd102d88d5a3e938a9897948997610e316009986007546141bb565b60075560088701541693604051908152a3918193610d4c565b60405162461bcd60e51b815260048101839052601760248201527f466f7266656974207472616e73666572206661696c65640000000000000000006044820152606490fd5b610ea69150833d8511610484576104768183613e63565b5f610df3565b6040513d8b823e3d90fd5b60405162461bcd60e51b815260048101859052601460248201527315185cdac81b9bdd081e595d08195e1c1a5c995960621b6044820152606490fd5b5080fd5b50346102a95760403660031901126102a957610f11613dfb565b3382526001602052610f2960ff604084205416613fe5565b610f31614d7c565b610f39614b78565b6004358352600260205260408320600181015491929091610f67906001600160a01b038086169116146141c8565b610f77600583015442111561412a565b600682015460d081901b6001600160e01b031916631e61f6a360e31b81036113c0575060ff811660078110156113ac5790610fb660016004931461442f565b6008840154610fd2906001600160a01b0385811691161461446e565b60ff19161760068301556002820180546001600160a01b0319166001600160a01b0383169081179091558452600360205260408420805461101290614199565b9055600682015460d01b6001600160e01b0319166334b1f22560e21b036113a25760078201545b61105961271061105161ffff600b87015416846144b3565b04809261438a565b855460405163a9059cbb60e01b81526001600160a01b038581166004830152602482018490529295929091602091839160449183918c91165af1801561048b576110aa918891611383575b506144c6565b816112f9575b600681015460d01b6001600160e01b031916631e61f6a360e31b14806112ec575b611230575b600681015460d01b6001600160e01b0319166334b1f22560e21b14611151575b506040805193845260208401919091526001600160a01b039182169390911691600435917f46c82fee4cedc2a273b6dc93ed59039d9208122b933b8f32bd87a0034e336a9791a460015f80516020614e9e8339815191525580f35b611164600d82015460078301549061438a565b9081611171575b506110f6565b86546001919091015460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810193909352602091839160449183918b91165af1908115611225578691611206575b50156111c9575f8061116b565b60405162461bcd60e51b8152602060048201526015602482015274105d58dd1a5bdb881c99599d5b990819985a5b1959605a1b6044820152606490fd5b61121f915060203d602011610484576104768183613e63565b5f6111bc565b6040513d88823e3d90fd5b85546008820154600783015460405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291602091839160449183918c91165af1801561048b576112889188916112cd575b5061454c565b60018060a01b0360088201541660078201546040519081527ffbf073a7709bd64bf3406dfd536abdbc9a3750eb99c8f26f543768c24a237b07602060043592a36110d6565b6112e6915060203d602011610484576104768183613e63565b5f611282565b50600781015415156110d1565b855460065460405163a9059cbb60e01b81526001600160a01b0360109290921c821660048201526024810185905291602091839116818a816044810103925af1801561048b57611350918891611364575b5061450a565b61135c826007546141bb565b6007556110b0565b61137d915060203d602011610484576104768183613e63565b5f61134a565b61139c915060203d602011610484576104768183613e63565b5f6110a4565b6003820154611039565b634e487b7160e01b86526021600452602486fd5b63ec07e9d360e01b810361140c575060ff811660078110156113ac57906113eb6002600493146143ed565b6002840154611407906001600160a01b038581169116146143af565b610fd2565b6334b1f22560e21b036114885760ff811660078110156113ac5760010361144d57600283015460049190611407906001600160a01b038581169116146143af565b60405162461bcd60e51b815260206004820152601360248201527215da5b9b995c881b9bdd081cd95b1958dd1959606a1b6044820152606490fd5b60ff811660078110156113ac579061140782600493159081156114ac575b506142c4565b60039150145f6114a6565b50346102a95760a03660031901126102a95733815260016020526114e160ff604083205416613fe5565b6114e9614d7c565b6114f1614b78565b60043582526002602052604082209061152c60018060a01b03600184015416809261151d821515614029565b6001600160a01b0316146141c8565b600682015460ff8116600781101561198b5761154890156140aa565b60d01b6001600160e01b0319166334b1f22560e21b1461196e575b60038201546005830154600c84015490600a85015491602435151594858096611962575b61184b575b506044356117ef575b60643515159182806117ce575b611772575b6084351515948580611751575b6116f6575b866116e9575b5085156116c3575b50841561167c575b50508215611637575b50506115f4575b5060015f80516020614e9e8339815191525580f35b6005600382015491015460405191825260208201527fd1530ce534a8c2beaea77a65ae6ad931e29c84727381c531cdfb47f2889ebe63604060043592a25f6115df565b9091508161166f575b508061164e575b5f806115d8565b50600681015460d01b6001600160e01b03191663ec07e9d360e01b14611647565b905060843514155f611640565b91935090816116b6575b5080611695575b915f806115cf565b50600683015460d01b6001600160e01b0319166334b1f22560e21b1461168d565b905060643514155f611686565b9094506044351515906044356116dc575b50935f6115c7565b905060443514155f6116d4565b602435141595505f6115bf565b42608435111561170d57608435600a8901556115b9565b606460405162461bcd60e51b815260206004820152602060248201527f506974636820646561646c696e65206d75737420626520696e206675747572656044820152fd5b50600688015460d01b6001600160e01b03191663ec07e9d360e01b146115b4565b42606435111561178957606435600c8801556115a7565b60405162461bcd60e51b815260206004820152601e60248201527f42696420646561646c696e65206d75737420626520696e2066757475726500006044820152606490fd5b50600687015460d01b6001600160e01b0319166334b1f22560e21b146115a2565b426044351115611806576044356005870155611595565b60405162461bcd60e51b815260206004820152601860248201527f457870697279206d75737420626520696e2066757475726500000000000000006044820152606490fd5b846024351115611892575b506024356003870155600686015460d01b6001600160e01b0319166334b1f22560e21b14611885575b5f61158c565b602435600d87015561187f565b60206118e0916118a46024358861438a565b8a5460405163a9059cbb60e01b81526001600160a01b0393841660048201526024810192909252909384929091169082908c9082906044820190565b03925af1908115611957578891611938575b50156118fe575f611856565b60405162461bcd60e51b81526020600482015260126024820152711554d110c81c99599d5b990819985a5b195960721b6044820152606490fd5b611951915060203d602011610484576104768183613e63565b5f6118f2565b6040513d8a823e3d90fd5b50846024351415611587565b60043583526005602052611986604084205415614351565b611563565b634e487b7160e01b85526021600452602485fd5b50346102a957806003193601126102a9576119e56040516119bf81613e48565b60058152640352e302e360dc1b6020820152604051918291602083526020830190613d64565b0390f35b50346102a9576119f836613da2565b903383526001602052611a1160ff604085205416613fe5565b611a19614b78565b818452600260205260408420600181015491936001600160a01b0392611a429084161515614029565b60068201805493611a6960d086901b6001600160e01b0319166334b1f22560e21b14614243565b60ff851660078110156104b157611a8090156140aa565b600d8401548311611b33577fc1e633bd7fb39985d9c7807fad1a0d6c015b849846cfea9f1cb35236ca2c6b1394836007866001946002602099019b169a8b6001600160601b0360a01b825416179055015560ff191617905584847f50fe806ad7090c0b4c89850edc7f5f0619df0b894aa98735d1d54c60548bf28684604051858152a36040519085857f8259e46acb41c409f7763c24e2f5dba1221be1944b6960acbfaf4ee07ea8de1e8980a38152a380f35b60405162461bcd60e51b815260206004820152601760248201527f50726963652065786365656473206d61782070726963650000000000000000006044820152606490fd5b50346102a957611b8736613da2565b9082526005602052604082208054821015611bcb57611ba69250613ef2565b508054600190910154604080516001600160a01b039093168352602083019190915290f35b8280fd5b50346102a957611bde36613da2565b91908152600b602052604081209081548310156102a9576020610c528484613ec9565b50346102a95760203660031901126102a9576020906040906001600160a01b03611c29613de5565b168152600983522054604051908152f35b50346102a95760203660031901126102a9576020611c59600435614305565b6040516001600160a01b039091168152f35b50346102a957602090816003193601126102a95760043581526005825260408120918254906001600160401b038211611d575791929060405190611cb4848260051b0183613e63565b8082528382018093865284862086915b838310611d1a57505050506040519280840191818552518092526040840192945b828110611cf25784840385f35b855180516001600160a01b031685528201518483015294810194604090930192600101611ce5565b60028760019260409a9997989a51611d3181613e48565b848060a01b03865416815284860154838201528152019201920191909694939596611cc4565b634e487b7160e01b83526041600452602483fd5b50346102a957611d7a36613da2565b90338352602060018152611d9460ff604086205416613fe5565b611d9c614b78565b828552600282526040852060018101546001600160a01b0395929190611dc59087161515614029565b600681015460ff90611ded60d082901b6001600160e01b0319166334b1f22560e21b14614243565b16600781101561088c57611e0190156140aa565b600c810154421015611f6c57600d8101548311611f2f57848752600584526040872090828254158015611f22575b611ee5575b50508560405192611e4484613e48565b169586835284830191848352805490600160401b821015611ed15790611e6f91600182018155613ef2565b939093611ebd575183546001600160a01b031916911617825551600191909101556040519081527f50fe806ad7090c0b4c89850edc7f5f0619df0b894aa98735d1d54c60548bf2869190a380f35b634e487b7160e01b89526004899052602489fd5b634e487b7160e01b8a52604160045260248afd5b601282018590556011919091018054640100000000600160c01b03191660209290921b640100000000600160c01b03169190911790555f82611e34565b5060128201548510611e2f565b60405162461bcd60e51b81526004810185905260156024820152744269642065786365656473206d617820707269636560581b6044820152606490fd5b60405162461bcd60e51b8152600481018590526013602482015272109a5908191958591b1a5b99481c185cdcd959606a1b6044820152606490fd5b50346102a957806003193601126102a9575f80516020614e7e833981519152546040516001600160a01b039091168152602090f35b50346102a957611feb36613da2565b90338352600160205261200460ff604085205416613fe5565b61200c614d7c565b612014614b78565b81845260026020526040842060018101549093916001600160a01b039161203e9083161515614029565b169283156120ff57600681018054909161206e60d083901b6001600160e01b031916631e61f6a360e31b14614285565b60ff8216600781101561088c5784927f0c94d586dd5b832830019d8f427e4aa13e8ddbbf614cc0817a6b8dd9c5ae24be956007602096946120b1600195156142c4565b6120c1600582015442111561412a565b6008810180546001600160a01b0319168c179055426009820155015560ff1916179055604051908152a360015f80516020614e9e8339815191525580f35b60405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b2103bb7b935b2b960911b6044820152606490fd5b50346102a95760603660031901126102a95761214f613de5565b612157613dfb565b9060443561ffff8116809103612318577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009283549260ff8460401c1615936001600160401b03811680159081612310575b6001149081612306575b1590816122fd575b506122eb5767ffffffffffffffff1981166001178655846122cc575b506121df614dab565b6121e7614dab565b6121f033614b07565b6001600160a01b03908282161561228f5761220f612710851115614204565b166001600160601b0360a01b8654161785556006549062010000600160b01b039060101b169069ffffffffffffffffffff60b01b161717600655612251575080f35b68ff00000000000000001981541690557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a180f35b60405162461bcd60e51b8152602060048201526015602482015274125b9d985b1a5908199959481c9958da5c1a595b9d605a1b6044820152606490fd5b68ffffffffffffffffff1916680100000000000000011785555f6121d6565b60405163f92ee8a960e01b8152600490fd5b9050155f6121ba565b303b1591506121b2565b8691506121a8565b5f80fd5b50346102a957806003193601126102a957604051631e61f6a360e31b8152602090f35b50346102a957806003193601126102a957612358614d44565b5f80516020614e7e83398151915280546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50346102a957806003193601126102a9576040516334b1f22560e21b8152602090f35b50346102a957806003193601126102a95760405163ec07e9d360e01b8152602090f35b50346102a957806003193601126102a9576020600754604051908152f35b50346102a95760203660031901126102a957612426613de5565b61242e614d44565b6001600160a01b0316801561248257808252600160205260408220600160ff198254161790557f8cc3357993414364e6add1411f4853a44efd6c6a279b45a373ad4376d9ea1262602060405160018152a280f35b60405162461bcd60e51b815260206004820152601960248201527f496e76616c696420666f727761726465722061646472657373000000000000006044820152606490fd5b50346102a95760203660031901126102a95760209060ff906040906001600160a01b036124f2613de5565b168152600184522054166040519015158152f35b50346102a957602080600319360112610ef3576004353383526001825261253360ff604085205416613fe5565b808352600282526040832060018101546001600160a01b03906125599082161515614029565b6006820180549092909161258360d084901b6001600160e01b0319166334b1f22560e21b14614243565b60ff8316600781101561088c5761259a90156140aa565b600c820154421061263c576011820154861c1694851561260457506002810180546001600160a01b03191686179055601281015460079091015560ff191660011790557f8259e46acb41c409f7763c24e2f5dba1221be1944b6960acbfaf4ee07ea8de1e8380a380f35b6064906040519062461bcd60e51b825260048201526011602482015270139bc8189a591cc81cdd589b5a5d1d1959607a1b6044820152fd5b60405162461bcd60e51b815260048101879052601760248201527f42696420646561646c696e65206e6f74207061737365640000000000000000006044820152606490fd5b50346102a957806003193601126102a9577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630036126ec5760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b60405163703e46dd60e11b8152600490fd5b5060403660031901126102a957612713613de5565b6024356001600160401b038111611bcb5736602382011215611bcb57612743903690602481600401359101613e84565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081163081149081156128c6575b506126ec57612786614d44565b8216916040516352d1902d60e01b8152602081600481875afa85918161288e575b506127c557604051634c9c8ce360e01b815260048101859052602490fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc908181036128765750813b1561285d5780546001600160a01b03191684179055604051927fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8580a28151156128435761283f9250614dec565b5080f35b50503461284e575080f35b63b398979f60e01b8152600490fd5b604051634c9c8ce360e01b815260048101859052602490fd5b60249060405190632a87526960e21b82526004820152fd5b9091506020813d6020116128be575b816128aa60209383613e63565b810103126128ba5751905f6127a7565b8580fd5b3d915061289d565b9050817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541614155f612779565b50346102a95760203660031901126102a95761290e613de5565b612916614d44565b6001600160a01b0316808252600160209081526040808420805460ff19169055518381527f8cc3357993414364e6add1411f4853a44efd6c6a279b45a373ad4376d9ea12629190a280f35b50346102a957806003193601126102a95760065460405160109190911c6001600160a01b03168152602090f35b50346102a95760803660031901126102a957600435602435903383526020600181526129c060ff604086205416613fe5565b6129c8614b78565b828552600282526040852060018101546001600160a01b039391906129f09085161515614029565b6006810154639784ab3360e01b60d082901b6001600160e01b03191601612ac95760ff16600781101561088c57612a3791612a2d600592156140aa565b015442111561412a565b8415612a9257916060917fccb060b917f329d675d391651bbcec53c40371fd8cce745b38d1900a361bc40593858852600b8152612a778760408a20614165565b6040519687526044359087015260643560408701521693a380f35b6064906040519062461bcd60e51b82526004820152601060248201526f08adae0e8f240e0e4dedecc40d0c2e6d60831b6044820152fd5b60405162461bcd60e51b81526004810184905260146024820152734e6f7420612042656e63686d61726b207461736b60601b6044820152606490fd5b50346102a95760203660031901126102a95760043561ffff81168091036123185760207fb50f6c85631b448ef50a9b0055afaff00e6d81ec0ebf056cd4bef2d8b32dbbbc91612b52614d44565b612b60612710821115614204565b8061ffff196006541617600655604051908152a180f35b50346102a95760203660031901126102a957612b91613de5565b612b99614d44565b600880546001600160a01b0319166001600160a01b039290921691821790557fae9f27c36d3aa52eba3f1db0e15d93fd0981a7ba056f20bed382a145202a301d8280a280f35b50346102a95760203660031901126102a9576040606091612bfe613de5565b81838051612c0b81613e2d565b828152826020820152015260018060a01b03168152600360205220604051612c3281613e2d565b815491828252604060026001830154926020850193845201549201918252604051928352516020830152516040820152f35b50346123185760c03660031901126123185760ff6024351660243503612318576084356001600160401b03811161231857612ca3903690600401613db8565b90335f526001602052612cbc60ff60405f205416613fe5565b612cc4614b78565b6004355f90815260026020526040902060018101549091612cf2916001600160a01b039182169116146141c8565b600681015460ff81166007811015612fc857600403612f8f57606460ff6024351611612f535760081c60ff16612f1e5760068101805461ff00191660243560081b61ff00161790556002810180546001600160a01b03165f9081526003602052604090206001018054612d6490614199565b905560018060a01b038154165f526003602052600260405f2001612d8e60ff6024351682546141bb565b905560018060a01b0390541660405160ff60243516815260643560208201527f5c9426dd920816b23cfd9daad6ecdbe1f542a77c85a30cbe25306443c8ede33c604060043592a3604435151580612f0a575b612de8578380f35b6008546006909101546001600160a01b039190911690612e149060d01b6001600160e01b031916614bf6565b90803b1561231857612e915f604086948296825198899788968794631e01b53f60e11b8652604435600487015260ff60243516600f0b60248701528760448701526101006064870152600f6101048701526e746d702e7461736b2e726174696e6760881b6101248701526101406084870152610144860190613d64565b92601c858503600319810160a48801528886520160c486015281602085015285840137818101840185905260a43560e4840152601f01601f1916010301925af1612edc575b80808380f35b90506001600160401b038111612ef6576040525f80612ed6565b634e487b7160e01b5f52604160045260245ffd5b506008546001600160a01b03161515612de0565b60405162461bcd60e51b815260206004820152600d60248201526c105b1c9958591e481c985d1959609a1b6044820152606490fd5b60405162461bcd60e51b81526020600482015260146024820152730526174696e67206d75737420626520302d3130360641b6044820152606490fd5b60405162461bcd60e51b815260206004820152601160248201527015185cdac81b9bdd081858d8d95c1d1959607a1b6044820152606490fd5b634e487b7160e01b5f52602160045260245ffd5b3461231857610100366003190112612318576044356001600160e01b0319811681036123185760c4356001600160401b03811161231857613021903690600401613db8565b9060e4356001600160e01b03198116900361231857335f52600160205261304e60ff60405f205416613fe5565b6001600160a01b0361305e614b78565b169081156137b95760043515613774576024351561372f576001600160e01b0319841663a81913a560e01b148015613715575b80156136fb575b80156136e1575b80156136c7575b15613693576001600160e01b031984166334b1f22560e21b146135cb575b815f52600960205260405f208054906130dc82614199565b9055604051904660208301523060408301528360608301526080820152608081528060a08101106001600160401b0360a083011117612ef65760a08101604052602081519101209261324e613133602435426141bb565b926001600160e01b0319871663ec07e9d360e01b036135c457613158606435426141bb565b925b60065461ffff166001600160e01b031989166334b1f22560e21b036135be57613185608435426141bb565b6001600160e01b03198a166334b1f22560e21b036135b757600435915b6001600160e01b03198b166334b1f22560e21b036135b05760e435965b604051986131cc8a613e11565b8b8a528a60208b01525f60408b015260043560608b01524260808b015260a08a01525f60c08a01525f60e08a015263ffffffff60e01b8c166101008a01525f6101208a01525f6101408a01525f6101608a01526101808901526101a08801526101c08701526101e08601525f61020086015260a4356102208601523691613e84565b61024083015263ffffffff60e01b166102608201525f6102808201525f6102a0820152825f52600260205260405f2090805182556001820160018060a01b036020830151166001600160601b0360a01b8254161790556002820160018060a01b036040830151166001600160601b0360a01b825416179055606081015160038301556080810151600483015560a0810151600583015560c08101516007811015612fc85760068301805460e084015161010085015165ffffffffffff1990921660ff9490941693909317600893841b61ff00161760d09190911c65ffffffff000016179055610120820151600784015561014082015190830180546001600160a01b0319166001600160a01b03929092169190911790556101608101516009830155610180810151600a8301556101a0810151600b8301805461ffff191661ffff929092169190911790556101c0810151600c8301556101e0810151600d830155610200810151600e830155610220810151600f8301556102408101518051906001600160401b038211612ef6576133e96010850154613f0b565b601f811161356c575b5091859391602097938890601f83116001146134d4577fbdfc881a16a3a04e41fed1091f413ffc0872156818c3b19a8331a07a020ca690959383606096946012946102a0945f926134c9575b50508160011b915f199060031b1c19161760108501555b610260810151601185018054610280840151640100000000600160c01b0360209190911b1660e09390931c6001600160c01b03199091161791909117905501519101556134a4602435426141bb565b906040519160043583528883015263ffffffff60e01b166040820152a3604051908152f35b015190508d8061343e565b90601085015f52895f20915f5b601f19851681106135525750936001846012946102a0947fbdfc881a16a3a04e41fed1091f413ffc0872156818c3b19a8331a07a020ca6909a9860609a98601f1981161061353a575b505050811b016010850155613455565b01515f1960f88460031b161c191690558d808061352a565b8183015184558a9850600190930192918b01918b016134e1565b601085015f5260205f20601f840160051c8101602085106135a9575b601f830160051c8201811061359e5750506133f2565b5f8155600101613588565b5080613588565b5f966131bf565b5f916131a2565b5f613185565b5f9261315a565b60e4356001600160e01b031916633c948d2360e01b148015613677575b801561365b575b801561363f575b6130c45760405162461bcd60e51b815260206004820152601760248201527f496e76616c69642061756374696f6e20737562747970650000000000000000006044820152606490fd5b5060e4356001600160e01b0319166310cf2d7f60e01b146135f6565b5060e4356001600160e01b03191663e1022c5b60e01b146135ef565b5060e4356001600160e01b0319166360ce192b60e11b146135e8565b60405162461bcd60e51b815260206004820152600c60248201526b496e76616c6964206d6f646560a01b6044820152606490fd5b506001600160e01b031984166334b1f22560e21b146130a6565b506001600160e01b0319841663687b54cd60e01b1461309f565b506001600160e01b0319841663ec07e9d360e01b14613098565b506001600160e01b03198416631e61f6a360e31b14613091565b60405162461bcd60e51b815260206004820152601f60248201527f4475726174696f6e206d7573742062652067726561746572207468616e2030006044820152606490fd5b60405162461bcd60e51b815260206004820152601d60248201527f526577617264206d7573742062652067726561746572207468616e20300000006044820152606490fd5b60405162461bcd60e51b815260206004820152601160248201527024b73b30b634b2103932b8bab2b9ba32b960791b6044820152606490fd5b34612318575f3660031901126123185760405163e1022c5b60e01b8152602090f35b346123185761382236613da2565b90335f52600160205261383b60ff60405f205416613fe5565b613843614b78565b5f82815260026020526040902060018101546001600160a01b0392919061386d9084161515614029565b600681015460ff9061389560d082901b6001600160e01b03191663ec07e9d360e01b1461406b565b166007811015612fc8576138bf916138af600592156140aa565b612a2d600a8201544211156140e6565b8315613909577fb105b9a4b3e0c8cf9fe45e88657882e6a405a1903b318621e07d8e895c59ad3191602091845f52600a83526138fe8660405f20614165565b6040519586521693a3005b60405162461bcd60e51b815260206004820152601060248201526f08adae0e8f240e0d2e8c6d040d0c2e6d60831b6044820152606490fd5b34612318576020366003190112612318575f6102a060405161396281613e11565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201528261010082015282610120820152826101408201528261016082015282610180820152826101a0820152826101c0820152826101e082015282610200820152826102208201526060610240820152826102608201528261028082015201526004355f52600260205260405f2060405190613a0882613e11565b8054825260018101546001600160a01b03908116602084015260028201541660408301526003810154606083015260048101546080830152600581015460a0830152600681015490600760ff83161015612fc85760ff80831660c0850152600883811c90911660e085015260d09290921b6001600160e01b0319166101008401526007810154610120840152908101546001600160a01b03166101408301526009810154610160830152600a810154610180830152600b81015461ffff166101a0830152600c8101546101c0830152600d8101546101e0830152600e810154610200830152600f810154610220830152601290613b0760108201613f43565b610240840152601181015463ffffffff60e01b8160e01b1661026085015260018060a01b039060201c1661028084015201546102a08201526040518091602082528051602083015260018060a01b03602082015116604083015260018060a01b03604082015116606083015260608101516080830152608081015160a083015260a081015160c0830152613ba360c082015160e0840190613d57565b60ff60e08201511661010083015263ffffffff60e01b6101008201511661012083015261012081015161014083015260018060a01b03610140820151166101608301526101608101516101808301526101808101516101a083015261ffff6101a0820151166101c08301526101c08101516101e08301526101e08101516102008301526102008101516102208301526102208101516102408301526102408101516102a0613c606102c092836102608701526102e0860190613d64565b6102608401516001600160e01b031916610280868101919091528401516001600160a01b031682860152920151908301520390f35b34612318575f366003190112612318575f546040516001600160a01b039091168152602090f35b34612318576020366003190112612318576004359063ffffffff60e01b82168092036123185760209163528d9f5760e11b8114908115613d46575b8115613d35575b8115613d24575b8115613d13575b5015158152f35b6301ffc9a760e01b14905083613d0c565b634eb48e9b60e11b81149150613d05565b6340f6076960e01b81149150613cfe565b63c8db44e360e01b81149150613cf7565b906007821015612fc85752565b91908251928382525f5b848110613d8e575050825f602080949584010152601f8019910116010190565b602081830181015184830182015201613d6e565b6040906003190112612318576004359060243590565b9181601f84011215612318578235916001600160401b038311612318576020838186019501011161231857565b600435906001600160a01b038216820361231857565b602435906001600160a01b038216820361231857565b6102c081019081106001600160401b03821117612ef657604052565b606081019081106001600160401b03821117612ef657604052565b604081019081106001600160401b03821117612ef657604052565b90601f801991011681019081106001600160401b03821117612ef657604052565b9291926001600160401b038211612ef65760405191613ead601f8201601f191660200184613e63565b829481845281830111612318578281602093845f960137010152565b8054821015613ede575f5260205f2001905f90565b634e487b7160e01b5f52603260045260245ffd5b8054821015613ede575f5260205f209060011b01905f90565b90600182811c92168015613f39575b6020831014613f2557565b634e487b7160e01b5f52602260045260245ffd5b91607f1691613f1a565b9060405191825f8254613f5581613f0b565b908184526020946001916001811690815f14613fc35750600114613f85575b505050613f8392500383613e63565b565b5f90815285812095935091905b818310613fab575050613f8393508201015f8080613f74565b85548884018501529485019487945091830191613f92565b92505050613f8394925060ff191682840152151560051b8201015f8080613f74565b15613fec57565b60405162461bcd60e51b81526020600482015260156024820152742737ba103a393ab9ba32b2103337b93bb0b93232b960591b6044820152606490fd5b1561403057565b60405162461bcd60e51b815260206004820152601360248201527215185cdac8191bd95cc81b9bdd08195e1a5cdd606a1b6044820152606490fd5b1561407257565b60405162461bcd60e51b815260206004820152601060248201526f4e6f742061205069746368207461736b60801b6044820152606490fd5b156140b157565b60405162461bcd60e51b815260206004820152600d60248201526c2a30b9b5903737ba1037b832b760991b6044820152606490fd5b156140ed57565b60405162461bcd60e51b8152602060048201526015602482015274141a5d18da08191958591b1a5b99481c185cdcd959605a1b6044820152606490fd5b1561413157565b60405162461bcd60e51b815260206004820152600c60248201526b15185cdac8195e1c1a5c995960a21b6044820152606490fd5b8054600160401b811015612ef65761418291600182018155613ec9565b819291549060031b91821b915f19901b1916179055565b5f1981146141a75760010190565b634e487b7160e01b5f52601160045260245ffd5b919082018092116141a757565b156141cf57565b60405162461bcd60e51b815260206004820152600d60248201526c2737ba103932b8bab2b9ba32b960991b6044820152606490fd5b1561420b57565b60405162461bcd60e51b815260206004820152601060248201526f08ccaca4084a0a640e8dede40d0d2ced60831b6044820152606490fd5b1561424a57565b60405162461bcd60e51b81526020600482015260136024820152724e6f7420616e2041756374696f6e207461736b60681b6044820152606490fd5b1561428c57565b60405162461bcd60e51b815260206004820152601060248201526f4e6f74206120436c61696d207461736b60801b6044820152606490fd5b156142cb57565b60405162461bcd60e51b81526020600482015260126024820152715461736b206e6f7420617661696c61626c6560701b6044820152606490fd5b5f908152600260205260409020600681015460d01b6001600160e01b03191663687b54cd60e01b1461434157600101546001600160a01b031690565b506008546001600160a01b031690565b1561435857565b60405162461bcd60e51b815260206004820152600a602482015269109a591cc8195e1a5cdd60b21b6044820152606490fd5b919082039182116141a757565b90816020910312612318575180151581036123185790565b156143b657565b60405162461bcd60e51b815260206004820152600f60248201526e0aedee4d6cae440dad2e6dac2e8c6d608b1b6044820152606490fd5b156143f457565b60405162461bcd60e51b815260206004820152601360248201527215dbdc9ad95c881b9bdd081cd95b1958dd1959606a1b6044820152606490fd5b1561443657565b60405162461bcd60e51b815260206004820152601060248201526f15185cdac81b9bdd0818db185a5b595960821b6044820152606490fd5b1561447557565b60405162461bcd60e51b81526020600482015260166024820152752bb7b935b2b91036bab9ba1031329031b630b4b6b2b960511b6044820152606490fd5b818102929181159184041417156141a757565b156144cd57565b60405162461bcd60e51b815260206004820152601560248201527415dbdc9ad95c881c185e5b595b9d0819985a5b1959605a1b6044820152606490fd5b1561451157565b60405162461bcd60e51b8152602060048201526013602482015272119959481d1c985b9cd9995c8819985a5b1959606a1b6044820152606490fd5b1561455357565b60405162461bcd60e51b815260206004820152601360248201527214dd185ad9481c995d1d5c9b8819985a5b1959606a1b6044820152606490fd5b1561459557565b60405162461bcd60e51b815260206004820152600d60248201526c1499599d5b990819985a5b1959609a1b6044820152606490fd5b805f52600260205260405f2090600182016145ef60018060a01b038254161515614029565b6005830154421115614acf576006830192835460ff81166007811015612fc85760048114614a925760068114614a5c5760d082901b6001600160e01b0319166334b1f22560e21b149081614a51575b5061480f5750835460ff1916600517845560038101545f8054845460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810185905293979392602092849260449284929091165af180156147de576146a6915f916147f6575061458e565b5460d01b6001600160e01b031916631e61f6a360e31b14806147e9575b614702575b50546040519283526001600160a01b0316917fe4ec5a16418560274520eb1bbcfc0e4377564571957fcc2f8e2a7f44afba10de90602090a3565b5f80546008830180546007909401805460405163a9059cbb60e01b81526001600160a01b03968716600482015260248101919091529591949193909260209287926044928492165af19283156147de577ffbf073a7709bd64bf3406dfd536abdbc9a3750eb99c8f26f543768c24a237b07602087926147aa82977fe4ec5a16418560274520eb1bbcfc0e4377564571957fcc2f8e2a7f44afba10de995f916147c7575061454c565b5493546040519081526001600160a01b0390941693a391506146c8565b6112e69150843d8611610484576104768183613e63565b6040513d5f823e3d90fd5b50600781015415156146c3565b61047e915060203d602011610484576104768183613e63565b9092916007840193845495600461483c61271061483461ffff600b870154168b6144b3565b04809961438a565b9460ff1916179055600281019460018060a01b038654165f52600360205260405f206148688154614199565b9055836149fd575b86614989575b600361488692015490549061438a565b806148d3575b505492546040805192835260208301959095526001600160a01b03908116949316927f46c82fee4cedc2a273b6dc93ed59039d9208122b933b8f32bd87a0034e336a9791a4565b5f8054835460405163a9059cbb60e01b81526001600160a01b03918216600482015260248101949094526020928492604492849291165af19081156147de575f9161496a575b5015614925575f61488c565b60405162461bcd60e51b815260206004820152601760248201527f52657175657374657220726566756e64206661696c65640000000000000000006044820152606490fd5b614983915060203d602011610484576104768183613e63565b5f614919565b5f805460065460405163a9059cbb60e01b81526001600160a01b0360109290921c82166004820152602481018b90529492602092869260449284929091165af19081156147de576149e6600392614886955f91611364575061450a565b6149f2896007546141bb565b600755925050614876565b5f8054875460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810188905292602092849260449284929091165af180156147de57614a4c915f9161138357506144c6565b614870565b60019150145f61463e565b60405162461bcd60e51b815260206004820152600e60248201526d15185cdac818d85b98d95b1b195960921b6044820152606490fd5b60405162461bcd60e51b815260206004820152601560248201527415185cdac8185b1c9958591e481858d8d95c1d1959605a1b6044820152606490fd5b60405162461bcd60e51b815260206004820152601060248201526f15185cdac81b9bdd08195e1c1a5c995960821b6044820152606490fd5b6001600160a01b03908116908115614b60575f80516020614e7e83398151915280546001600160a01b031981168417909155167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b604051631e4fbdf760e01b81525f6004820152602490fd5b335f52600160205260ff60405f205416614b90573390565b604051631cb9dd3760e21b8152602081600481335afa9081156147de575f91614bb7575090565b90506020813d602011614bee575b81614bd260209383613e63565b8101031261231857516001600160a01b03811681036123185790565b3d9150614bc5565b6001600160e01b03191663a81913a560e01b8114614d1857631e61f6a360e31b8114614ced5763ec07e9d360e01b8114614cc25763687b54cd60e01b8114614c93576334b1f22560e21b14614c6757604051602081018181106001600160401b03821117612ef6576040525f815290565b604051614c7381613e48565b601081526f3a36b81736b7b2329730bab1ba34b7b760811b602082015290565b50604051614ca081613e48565b6012815271746d702e6d6f64652e62656e63686d61726b60701b602082015290565b50604051614ccf81613e48565b600e81526d0e8dae05cdadec8ca5ce0d2e8c6d60931b602082015290565b50604051614cfa81613e48565b600e81526d746d702e6d6f64652e636c61696d60901b602082015290565b50604051614d2581613e48565b600f81526e746d702e6d6f64652e626f756e747960881b602082015290565b5f80516020614e7e833981519152546001600160a01b03163303614d6457565b60405163118cdaa760e01b8152336004820152602490fd5b5f80516020614e9e8339815191526002815414614d995760029055565b604051633ee5aeb560e01b8152600490fd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615614dda57565b604051631afcd79f60e31b8152600490fd5b905f8091602081519101845af48080614e6a575b15614e205750506040513d81523d5f602083013e60203d82010160405290565b15614e4757604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b3d15614e58576040513d5f823e3d90fd5b60405163d6bda27560e01b8152600490fd5b503d151580614e005750813b1515614e0056fe9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f007d30d1881f77d1707467f58525863cb9ccbaedc1c4ddb2a4d9dd1349ca7a4e4ba26469706673582212200bb3c386437b329382faebd11a6528dfcec75237b7e8989082e73ebb499055b764736f6c63430008180033","sourceMap":"2182:38287:33:-:0;;;;;;;2365:1:29;1505:66;2365:1;1084:4:24;1076:13;;3147:66:23;2182:38287:33;;;;;;;;;7894:76:23;;-1:-1:-1;;;;;;;;;;;;2182:38287:33;;;7983:34:23;7979:146;;-1:-1:-1;2182:38287:33;;;;;;;;1076:13:24;2182:38287:33;;;;;;;;;;;7979:146:23;-1:-1:-1;;;;;;2182:38287:33;;;;;;;;;;;;;8085:29:23;;2182:38287:33;;8085:29:23;7979:146;;;;;7894:76;-1:-1:-1;;;7936:23:23;;;;;2182:38287:33;;;","linkReferences":{}},"deployedBytecode":{"object":"0x610140806040526004361015610013575f80fd5b5f905f3560e01c90816301ffc9a714613cbc5750806311eac85514613c9557806315a29035146139415780631a22aaa4146138145780631c8e57f8146137f25780631e52fce714612fdc5780632144ea4914612c64578063365ba2dd14612bdf5780633f0ce71414612b775780634488b65214612b0557806346170ca41461298e57806346904840146129615780634d93172d146128f45780634f1ef286146126fe57806352d1902d14612681578063537da21f1461250657806354776bb9146124c7578063572b6c05146124c75780635c41d2fe1461240c57806360c6d8ae146123ee57806363326459146123cb57806363779c74146123a8578063715018a61461233f57806373d748761461231c5780637ebef529146121355780638c58d5fc14611fdc5780638da5cb5b14611fa757806391dc1d3014611d6b5780639d4f988b14611c6b5780639d691d3614611c3a5780639f63f2a614611c01578063a1f0c25414611bcf578063a6eecb7214611b78578063a86592ba146119e9578063ad3cb1cc1461199f578063ae2925a6146114b7578063aeb87ecf14610ef7578063afdc54cd14610c83578063b2b7bdd514610c60578063b4f9d6ad14610c20578063bcae25a414610bfe578063c104d24d14610bdb578063c8db44e314610bb2578063cc3e049b14610b79578063ce37a26314610a77578063d081f2b814610a54578063d864887114610a2a578063da0eb223146109f9578063db7260bc146107a6578063e48a3a6014610755578063e579f50014610587578063e74b981b146104c5578063ee8ca3b5146102fc578063f152d325146102d9578063f2fde38b146102ac5763fe78aecf14610287575f80fd5b346102a957806003193601126102a957604051633c948d2360e01b8152602090f35b80fd5b50346102a95760203660031901126102a9576102d66102c9613de5565b6102d1614d44565b614b07565b80f35b50346102a957806003193601126102a95760405163687b54cd60e01b8152602090f35b50346102a957602090816003193601126102a9576103746004353383526001845261032d60ff604085205416613fe5565b610335614d7c565b61033d614b78565b818452600285526040842060018101805491966001600160a01b039283169590938690849061036d831515614029565b16146141c8565b60068701805460ff811660078110156104b157988592600660039361039f6104029a9b9c9d156140aa565b8c60d082901b6001600160e01b0319166334b1f22560e21b14610496575b5060ff19161790550154885460405163a9059cbb60e01b81526001600160a01b0390991660048a015260248901829052909795869185169082908b9082906044820190565b03925af193841561048b577f9954d6823ea6810a4780ffb920d7c2a569d41b2d0c99ea5d9314f8ba805de4bc9461044091899161045e575b5061458e565b541693604051908152a360015f80516020614e9e8339815191525580f35b61047e9150853d8711610484575b6104768183613e63565b810190614397565b5f61043a565b503d61046c565b6040513d89823e3d90fd5b6040818d6104ab935260058952205415614351565b8c6103bd565b634e487b7160e01b89526021600452602489fd5b50346102a95760203660031901126102a9576104df613de5565b6104e7614d44565b6001600160a01b03811690811561054e576006805462010000600160b01b03191660109290921b62010000600160b01b03169190911790556040519081527f7a7b5a0a132f9e0581eb8527f66eae9ee89c2a3e79d4ac7e41a1f1f4d48a7fc290602090a180f35b60405162461bcd60e51b8152602060048201526011602482015270125b9d985b1a59081c9958da5c1a595b9d607a1b6044820152606490fd5b50346102a95760203660031901126102a957600480358252600260208190526040909220805460018201546001600160a01b03908116610100529382015484166101205260038201549282015460058301546006840154600785015460088601546009870154600a880154600b890154600c8a0154600d8b0154600e8c0154600f8d01549e909d919c929b61ffff9094169a9499959896169695949392909160129061063560108201613f43565b608052601181015460e052015460a05260405160c05260c0515261010051602060c051015261012051604060c0510152606060c0510152608060c051015260a060c051015261068b60c080510160ff8316613d57565b60ff8160081c1660e060c051015263ffffffff60e01b9060d01b1661010060c051015261012060c051015261014060c051015261016060c051015261018060c05101526101a060c05101526101c060c05101526101e060c051015261020060c051015261022060c05101526102c061024060c05101526107136102c060c05101608051613d64565b63ffffffff60e01b60e05160e01b1661026060c051015260018060a01b0360e05160201c1661028060c051015260a0516102a060c051015260c051900360c051f35b50346102a95760203660031901126102a9576060906040906001600160a01b0361077d613de5565b168152600360205220805490600260018201549101549060405192835260208301526040820152f35b50346102a9576107b536613da2565b9033835260016020526107ce60ff604085205416613fe5565b6107d6614b78565b81845260026020526040842060018101546001600160a01b039291906107ff9084161515614029565b61080f600582015442111561412a565b600e810180546109b457859055600681018054909160d082901b6001600160e01b03191663a81913a560e01b811480156109a4575b156108a057505060ff8116600781101561088c57916003602094926108785f80516020614ebe8339815191529795156140aa565b60ff19161790555b6040519586521693a380f35b634e487b7160e01b88526021600452602488fd5b909250631e61f6a360e31b8103610908575060ff1660078110156108f457916108ef8460085f80516020614ebe83398151915296946108e360016020981461442f565b0154168383161461446e565b610880565b634e487b7160e01b87526021600452602487fd5b63ec07e9d360e01b8114908115610993575b50610939575b50505f80516020614ebe83398151915291602091610880565b60ff1660078110156108f4579161097f8460025f80516020614ebe8339815191529694610973878360209914908115610988575b506143ed565b015416838316146143af565b91819350610920565b60019150145f61096d565b6334b1f22560e21b1490505f61091a565b5063687b54cd60e01b8114610844565b60405162461bcd60e51b815260206004820152601760248201527f44656c6976657261626c6520616c7265616479207365740000000000000000006044820152606490fd5b50346102a95760203660031901126102a95761ffff600b604060209360043581526002855220015416604051908152f35b50346102a95760203660031901126102a95760406020916004358152600483522054604051908152f35b50346102a957806003193601126102a95760405163a81913a560e01b8152602090f35b50346102a95760403660031901126102a957600435610a94613dfb565b903383526001602052610aad60ff604085205416613fe5565b610ab5614b78565b81845260026020526040842060018101546001600160a01b0392610ade918416908416146141c8565b60068101805490929091610b0860d084901b6001600160e01b03191663ec07e9d360e01b1461406b565b60ff8316600781101561088c576002939291610b258592156142c4565b610b35600a8201544211156140e6565b01951694856001600160601b0360a01b82541617905560ff19161790557f8259e46acb41c409f7763c24e2f5dba1221be1944b6960acbfaf4ee07ea8de1e8380a380f35b50346102a95760203660031901126102a957610b93614d7c565b610b9e6004356145ca565b60015f80516020614e9e8339815191525580f35b50346102a957806003193601126102a9576008546040516001600160a01b039091168152602090f35b50346102a957806003193601126102a9576040516310cf2d7f60e01b8152602090f35b50346102a957806003193601126102a957602061ffff60065416604051908152f35b50346102a957610c2f36613da2565b91908152600a602052604081209081548310156102a9576020610c528484613ec9565b90546040519160031b1c8152f35b50346102a957806003193601126102a9576040516360ce192b60e11b8152602090f35b50346102a957602080600319360112610ef3576004359033835260018152610cb160ff604085205416613fe5565b610cb9614b78565b8284526002825260408420600181015490916001600160a01b0391610ce3918316908316146141c8565b600682019060ff8254610d0a631e61f6a360e31b63ffffffff60e01b8360d01b1614614285565b1660078110156108f4576001610d20911461442f565b6005830154421115610eb757908291600787959401938454918787526004825282604088205582610d98575b5050815460ff1916909155506008810180546001600160a01b0319169055600901829055557fae5c872b4498d8e857e43522a12d5dfde96a0d5089787500d6495dade8e994fa8280a280f35b909192939495828483610de19354168460065460101c168c60405180968195829463a9059cbb60e01b84526004840160209093929193604081019460018060a01b031681520152565b03925af1908115610eac578991610e8f575b5015610e4a579282877fb18ae0fffd2ad14984107b582c2dec2fb6effb8bf06d43a59dd102d88d5a3e938a9897948997610e316009986007546141bb565b60075560088701541693604051908152a3918193610d4c565b60405162461bcd60e51b815260048101839052601760248201527f466f7266656974207472616e73666572206661696c65640000000000000000006044820152606490fd5b610ea69150833d8511610484576104768183613e63565b5f610df3565b6040513d8b823e3d90fd5b60405162461bcd60e51b815260048101859052601460248201527315185cdac81b9bdd081e595d08195e1c1a5c995960621b6044820152606490fd5b5080fd5b50346102a95760403660031901126102a957610f11613dfb565b3382526001602052610f2960ff604084205416613fe5565b610f31614d7c565b610f39614b78565b6004358352600260205260408320600181015491929091610f67906001600160a01b038086169116146141c8565b610f77600583015442111561412a565b600682015460d081901b6001600160e01b031916631e61f6a360e31b81036113c0575060ff811660078110156113ac5790610fb660016004931461442f565b6008840154610fd2906001600160a01b0385811691161461446e565b60ff19161760068301556002820180546001600160a01b0319166001600160a01b0383169081179091558452600360205260408420805461101290614199565b9055600682015460d01b6001600160e01b0319166334b1f22560e21b036113a25760078201545b61105961271061105161ffff600b87015416846144b3565b04809261438a565b855460405163a9059cbb60e01b81526001600160a01b038581166004830152602482018490529295929091602091839160449183918c91165af1801561048b576110aa918891611383575b506144c6565b816112f9575b600681015460d01b6001600160e01b031916631e61f6a360e31b14806112ec575b611230575b600681015460d01b6001600160e01b0319166334b1f22560e21b14611151575b506040805193845260208401919091526001600160a01b039182169390911691600435917f46c82fee4cedc2a273b6dc93ed59039d9208122b933b8f32bd87a0034e336a9791a460015f80516020614e9e8339815191525580f35b611164600d82015460078301549061438a565b9081611171575b506110f6565b86546001919091015460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810193909352602091839160449183918b91165af1908115611225578691611206575b50156111c9575f8061116b565b60405162461bcd60e51b8152602060048201526015602482015274105d58dd1a5bdb881c99599d5b990819985a5b1959605a1b6044820152606490fd5b61121f915060203d602011610484576104768183613e63565b5f6111bc565b6040513d88823e3d90fd5b85546008820154600783015460405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291602091839160449183918c91165af1801561048b576112889188916112cd575b5061454c565b60018060a01b0360088201541660078201546040519081527ffbf073a7709bd64bf3406dfd536abdbc9a3750eb99c8f26f543768c24a237b07602060043592a36110d6565b6112e6915060203d602011610484576104768183613e63565b5f611282565b50600781015415156110d1565b855460065460405163a9059cbb60e01b81526001600160a01b0360109290921c821660048201526024810185905291602091839116818a816044810103925af1801561048b57611350918891611364575b5061450a565b61135c826007546141bb565b6007556110b0565b61137d915060203d602011610484576104768183613e63565b5f61134a565b61139c915060203d602011610484576104768183613e63565b5f6110a4565b6003820154611039565b634e487b7160e01b86526021600452602486fd5b63ec07e9d360e01b810361140c575060ff811660078110156113ac57906113eb6002600493146143ed565b6002840154611407906001600160a01b038581169116146143af565b610fd2565b6334b1f22560e21b036114885760ff811660078110156113ac5760010361144d57600283015460049190611407906001600160a01b038581169116146143af565b60405162461bcd60e51b815260206004820152601360248201527215da5b9b995c881b9bdd081cd95b1958dd1959606a1b6044820152606490fd5b60ff811660078110156113ac579061140782600493159081156114ac575b506142c4565b60039150145f6114a6565b50346102a95760a03660031901126102a95733815260016020526114e160ff604083205416613fe5565b6114e9614d7c565b6114f1614b78565b60043582526002602052604082209061152c60018060a01b03600184015416809261151d821515614029565b6001600160a01b0316146141c8565b600682015460ff8116600781101561198b5761154890156140aa565b60d01b6001600160e01b0319166334b1f22560e21b1461196e575b60038201546005830154600c84015490600a85015491602435151594858096611962575b61184b575b506044356117ef575b60643515159182806117ce575b611772575b6084351515948580611751575b6116f6575b866116e9575b5085156116c3575b50841561167c575b50508215611637575b50506115f4575b5060015f80516020614e9e8339815191525580f35b6005600382015491015460405191825260208201527fd1530ce534a8c2beaea77a65ae6ad931e29c84727381c531cdfb47f2889ebe63604060043592a25f6115df565b9091508161166f575b508061164e575b5f806115d8565b50600681015460d01b6001600160e01b03191663ec07e9d360e01b14611647565b905060843514155f611640565b91935090816116b6575b5080611695575b915f806115cf565b50600683015460d01b6001600160e01b0319166334b1f22560e21b1461168d565b905060643514155f611686565b9094506044351515906044356116dc575b50935f6115c7565b905060443514155f6116d4565b602435141595505f6115bf565b42608435111561170d57608435600a8901556115b9565b606460405162461bcd60e51b815260206004820152602060248201527f506974636820646561646c696e65206d75737420626520696e206675747572656044820152fd5b50600688015460d01b6001600160e01b03191663ec07e9d360e01b146115b4565b42606435111561178957606435600c8801556115a7565b60405162461bcd60e51b815260206004820152601e60248201527f42696420646561646c696e65206d75737420626520696e2066757475726500006044820152606490fd5b50600687015460d01b6001600160e01b0319166334b1f22560e21b146115a2565b426044351115611806576044356005870155611595565b60405162461bcd60e51b815260206004820152601860248201527f457870697279206d75737420626520696e2066757475726500000000000000006044820152606490fd5b846024351115611892575b506024356003870155600686015460d01b6001600160e01b0319166334b1f22560e21b14611885575b5f61158c565b602435600d87015561187f565b60206118e0916118a46024358861438a565b8a5460405163a9059cbb60e01b81526001600160a01b0393841660048201526024810192909252909384929091169082908c9082906044820190565b03925af1908115611957578891611938575b50156118fe575f611856565b60405162461bcd60e51b81526020600482015260126024820152711554d110c81c99599d5b990819985a5b195960721b6044820152606490fd5b611951915060203d602011610484576104768183613e63565b5f6118f2565b6040513d8a823e3d90fd5b50846024351415611587565b60043583526005602052611986604084205415614351565b611563565b634e487b7160e01b85526021600452602485fd5b50346102a957806003193601126102a9576119e56040516119bf81613e48565b60058152640352e302e360dc1b6020820152604051918291602083526020830190613d64565b0390f35b50346102a9576119f836613da2565b903383526001602052611a1160ff604085205416613fe5565b611a19614b78565b818452600260205260408420600181015491936001600160a01b0392611a429084161515614029565b60068201805493611a6960d086901b6001600160e01b0319166334b1f22560e21b14614243565b60ff851660078110156104b157611a8090156140aa565b600d8401548311611b33577fc1e633bd7fb39985d9c7807fad1a0d6c015b849846cfea9f1cb35236ca2c6b1394836007866001946002602099019b169a8b6001600160601b0360a01b825416179055015560ff191617905584847f50fe806ad7090c0b4c89850edc7f5f0619df0b894aa98735d1d54c60548bf28684604051858152a36040519085857f8259e46acb41c409f7763c24e2f5dba1221be1944b6960acbfaf4ee07ea8de1e8980a38152a380f35b60405162461bcd60e51b815260206004820152601760248201527f50726963652065786365656473206d61782070726963650000000000000000006044820152606490fd5b50346102a957611b8736613da2565b9082526005602052604082208054821015611bcb57611ba69250613ef2565b508054600190910154604080516001600160a01b039093168352602083019190915290f35b8280fd5b50346102a957611bde36613da2565b91908152600b602052604081209081548310156102a9576020610c528484613ec9565b50346102a95760203660031901126102a9576020906040906001600160a01b03611c29613de5565b168152600983522054604051908152f35b50346102a95760203660031901126102a9576020611c59600435614305565b6040516001600160a01b039091168152f35b50346102a957602090816003193601126102a95760043581526005825260408120918254906001600160401b038211611d575791929060405190611cb4848260051b0183613e63565b8082528382018093865284862086915b838310611d1a57505050506040519280840191818552518092526040840192945b828110611cf25784840385f35b855180516001600160a01b031685528201518483015294810194604090930192600101611ce5565b60028760019260409a9997989a51611d3181613e48565b848060a01b03865416815284860154838201528152019201920191909694939596611cc4565b634e487b7160e01b83526041600452602483fd5b50346102a957611d7a36613da2565b90338352602060018152611d9460ff604086205416613fe5565b611d9c614b78565b828552600282526040852060018101546001600160a01b0395929190611dc59087161515614029565b600681015460ff90611ded60d082901b6001600160e01b0319166334b1f22560e21b14614243565b16600781101561088c57611e0190156140aa565b600c810154421015611f6c57600d8101548311611f2f57848752600584526040872090828254158015611f22575b611ee5575b50508560405192611e4484613e48565b169586835284830191848352805490600160401b821015611ed15790611e6f91600182018155613ef2565b939093611ebd575183546001600160a01b031916911617825551600191909101556040519081527f50fe806ad7090c0b4c89850edc7f5f0619df0b894aa98735d1d54c60548bf2869190a380f35b634e487b7160e01b89526004899052602489fd5b634e487b7160e01b8a52604160045260248afd5b601282018590556011919091018054640100000000600160c01b03191660209290921b640100000000600160c01b03169190911790555f82611e34565b5060128201548510611e2f565b60405162461bcd60e51b81526004810185905260156024820152744269642065786365656473206d617820707269636560581b6044820152606490fd5b60405162461bcd60e51b8152600481018590526013602482015272109a5908191958591b1a5b99481c185cdcd959606a1b6044820152606490fd5b50346102a957806003193601126102a9575f80516020614e7e833981519152546040516001600160a01b039091168152602090f35b50346102a957611feb36613da2565b90338352600160205261200460ff604085205416613fe5565b61200c614d7c565b612014614b78565b81845260026020526040842060018101549093916001600160a01b039161203e9083161515614029565b169283156120ff57600681018054909161206e60d083901b6001600160e01b031916631e61f6a360e31b14614285565b60ff8216600781101561088c5784927f0c94d586dd5b832830019d8f427e4aa13e8ddbbf614cc0817a6b8dd9c5ae24be956007602096946120b1600195156142c4565b6120c1600582015442111561412a565b6008810180546001600160a01b0319168c179055426009820155015560ff1916179055604051908152a360015f80516020614e9e8339815191525580f35b60405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b2103bb7b935b2b960911b6044820152606490fd5b50346102a95760603660031901126102a95761214f613de5565b612157613dfb565b9060443561ffff8116809103612318577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009283549260ff8460401c1615936001600160401b03811680159081612310575b6001149081612306575b1590816122fd575b506122eb5767ffffffffffffffff1981166001178655846122cc575b506121df614dab565b6121e7614dab565b6121f033614b07565b6001600160a01b03908282161561228f5761220f612710851115614204565b166001600160601b0360a01b8654161785556006549062010000600160b01b039060101b169069ffffffffffffffffffff60b01b161717600655612251575080f35b68ff00000000000000001981541690557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a180f35b60405162461bcd60e51b8152602060048201526015602482015274125b9d985b1a5908199959481c9958da5c1a595b9d605a1b6044820152606490fd5b68ffffffffffffffffff1916680100000000000000011785555f6121d6565b60405163f92ee8a960e01b8152600490fd5b9050155f6121ba565b303b1591506121b2565b8691506121a8565b5f80fd5b50346102a957806003193601126102a957604051631e61f6a360e31b8152602090f35b50346102a957806003193601126102a957612358614d44565b5f80516020614e7e83398151915280546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50346102a957806003193601126102a9576040516334b1f22560e21b8152602090f35b50346102a957806003193601126102a95760405163ec07e9d360e01b8152602090f35b50346102a957806003193601126102a9576020600754604051908152f35b50346102a95760203660031901126102a957612426613de5565b61242e614d44565b6001600160a01b0316801561248257808252600160205260408220600160ff198254161790557f8cc3357993414364e6add1411f4853a44efd6c6a279b45a373ad4376d9ea1262602060405160018152a280f35b60405162461bcd60e51b815260206004820152601960248201527f496e76616c696420666f727761726465722061646472657373000000000000006044820152606490fd5b50346102a95760203660031901126102a95760209060ff906040906001600160a01b036124f2613de5565b168152600184522054166040519015158152f35b50346102a957602080600319360112610ef3576004353383526001825261253360ff604085205416613fe5565b808352600282526040832060018101546001600160a01b03906125599082161515614029565b6006820180549092909161258360d084901b6001600160e01b0319166334b1f22560e21b14614243565b60ff8316600781101561088c5761259a90156140aa565b600c820154421061263c576011820154861c1694851561260457506002810180546001600160a01b03191686179055601281015460079091015560ff191660011790557f8259e46acb41c409f7763c24e2f5dba1221be1944b6960acbfaf4ee07ea8de1e8380a380f35b6064906040519062461bcd60e51b825260048201526011602482015270139bc8189a591cc81cdd589b5a5d1d1959607a1b6044820152fd5b60405162461bcd60e51b815260048101879052601760248201527f42696420646561646c696e65206e6f74207061737365640000000000000000006044820152606490fd5b50346102a957806003193601126102a9577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630036126ec5760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b60405163703e46dd60e11b8152600490fd5b5060403660031901126102a957612713613de5565b6024356001600160401b038111611bcb5736602382011215611bcb57612743903690602481600401359101613e84565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081163081149081156128c6575b506126ec57612786614d44565b8216916040516352d1902d60e01b8152602081600481875afa85918161288e575b506127c557604051634c9c8ce360e01b815260048101859052602490fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc908181036128765750813b1561285d5780546001600160a01b03191684179055604051927fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8580a28151156128435761283f9250614dec565b5080f35b50503461284e575080f35b63b398979f60e01b8152600490fd5b604051634c9c8ce360e01b815260048101859052602490fd5b60249060405190632a87526960e21b82526004820152fd5b9091506020813d6020116128be575b816128aa60209383613e63565b810103126128ba5751905f6127a7565b8580fd5b3d915061289d565b9050817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541614155f612779565b50346102a95760203660031901126102a95761290e613de5565b612916614d44565b6001600160a01b0316808252600160209081526040808420805460ff19169055518381527f8cc3357993414364e6add1411f4853a44efd6c6a279b45a373ad4376d9ea12629190a280f35b50346102a957806003193601126102a95760065460405160109190911c6001600160a01b03168152602090f35b50346102a95760803660031901126102a957600435602435903383526020600181526129c060ff604086205416613fe5565b6129c8614b78565b828552600282526040852060018101546001600160a01b039391906129f09085161515614029565b6006810154639784ab3360e01b60d082901b6001600160e01b03191601612ac95760ff16600781101561088c57612a3791612a2d600592156140aa565b015442111561412a565b8415612a9257916060917fccb060b917f329d675d391651bbcec53c40371fd8cce745b38d1900a361bc40593858852600b8152612a778760408a20614165565b6040519687526044359087015260643560408701521693a380f35b6064906040519062461bcd60e51b82526004820152601060248201526f08adae0e8f240e0e4dedecc40d0c2e6d60831b6044820152fd5b60405162461bcd60e51b81526004810184905260146024820152734e6f7420612042656e63686d61726b207461736b60601b6044820152606490fd5b50346102a95760203660031901126102a95760043561ffff81168091036123185760207fb50f6c85631b448ef50a9b0055afaff00e6d81ec0ebf056cd4bef2d8b32dbbbc91612b52614d44565b612b60612710821115614204565b8061ffff196006541617600655604051908152a180f35b50346102a95760203660031901126102a957612b91613de5565b612b99614d44565b600880546001600160a01b0319166001600160a01b039290921691821790557fae9f27c36d3aa52eba3f1db0e15d93fd0981a7ba056f20bed382a145202a301d8280a280f35b50346102a95760203660031901126102a9576040606091612bfe613de5565b81838051612c0b81613e2d565b828152826020820152015260018060a01b03168152600360205220604051612c3281613e2d565b815491828252604060026001830154926020850193845201549201918252604051928352516020830152516040820152f35b50346123185760c03660031901126123185760ff6024351660243503612318576084356001600160401b03811161231857612ca3903690600401613db8565b90335f526001602052612cbc60ff60405f205416613fe5565b612cc4614b78565b6004355f90815260026020526040902060018101549091612cf2916001600160a01b039182169116146141c8565b600681015460ff81166007811015612fc857600403612f8f57606460ff6024351611612f535760081c60ff16612f1e5760068101805461ff00191660243560081b61ff00161790556002810180546001600160a01b03165f9081526003602052604090206001018054612d6490614199565b905560018060a01b038154165f526003602052600260405f2001612d8e60ff6024351682546141bb565b905560018060a01b0390541660405160ff60243516815260643560208201527f5c9426dd920816b23cfd9daad6ecdbe1f542a77c85a30cbe25306443c8ede33c604060043592a3604435151580612f0a575b612de8578380f35b6008546006909101546001600160a01b039190911690612e149060d01b6001600160e01b031916614bf6565b90803b1561231857612e915f604086948296825198899788968794631e01b53f60e11b8652604435600487015260ff60243516600f0b60248701528760448701526101006064870152600f6101048701526e746d702e7461736b2e726174696e6760881b6101248701526101406084870152610144860190613d64565b92601c858503600319810160a48801528886520160c486015281602085015285840137818101840185905260a43560e4840152601f01601f1916010301925af1612edc575b80808380f35b90506001600160401b038111612ef6576040525f80612ed6565b634e487b7160e01b5f52604160045260245ffd5b506008546001600160a01b03161515612de0565b60405162461bcd60e51b815260206004820152600d60248201526c105b1c9958591e481c985d1959609a1b6044820152606490fd5b60405162461bcd60e51b81526020600482015260146024820152730526174696e67206d75737420626520302d3130360641b6044820152606490fd5b60405162461bcd60e51b815260206004820152601160248201527015185cdac81b9bdd081858d8d95c1d1959607a1b6044820152606490fd5b634e487b7160e01b5f52602160045260245ffd5b3461231857610100366003190112612318576044356001600160e01b0319811681036123185760c4356001600160401b03811161231857613021903690600401613db8565b9060e4356001600160e01b03198116900361231857335f52600160205261304e60ff60405f205416613fe5565b6001600160a01b0361305e614b78565b169081156137b95760043515613774576024351561372f576001600160e01b0319841663a81913a560e01b148015613715575b80156136fb575b80156136e1575b80156136c7575b15613693576001600160e01b031984166334b1f22560e21b146135cb575b815f52600960205260405f208054906130dc82614199565b9055604051904660208301523060408301528360608301526080820152608081528060a08101106001600160401b0360a083011117612ef65760a08101604052602081519101209261324e613133602435426141bb565b926001600160e01b0319871663ec07e9d360e01b036135c457613158606435426141bb565b925b60065461ffff166001600160e01b031989166334b1f22560e21b036135be57613185608435426141bb565b6001600160e01b03198a166334b1f22560e21b036135b757600435915b6001600160e01b03198b166334b1f22560e21b036135b05760e435965b604051986131cc8a613e11565b8b8a528a60208b01525f60408b015260043560608b01524260808b015260a08a01525f60c08a01525f60e08a015263ffffffff60e01b8c166101008a01525f6101208a01525f6101408a01525f6101608a01526101808901526101a08801526101c08701526101e08601525f61020086015260a4356102208601523691613e84565b61024083015263ffffffff60e01b166102608201525f6102808201525f6102a0820152825f52600260205260405f2090805182556001820160018060a01b036020830151166001600160601b0360a01b8254161790556002820160018060a01b036040830151166001600160601b0360a01b825416179055606081015160038301556080810151600483015560a0810151600583015560c08101516007811015612fc85760068301805460e084015161010085015165ffffffffffff1990921660ff9490941693909317600893841b61ff00161760d09190911c65ffffffff000016179055610120820151600784015561014082015190830180546001600160a01b0319166001600160a01b03929092169190911790556101608101516009830155610180810151600a8301556101a0810151600b8301805461ffff191661ffff929092169190911790556101c0810151600c8301556101e0810151600d830155610200810151600e830155610220810151600f8301556102408101518051906001600160401b038211612ef6576133e96010850154613f0b565b601f811161356c575b5091859391602097938890601f83116001146134d4577fbdfc881a16a3a04e41fed1091f413ffc0872156818c3b19a8331a07a020ca690959383606096946012946102a0945f926134c9575b50508160011b915f199060031b1c19161760108501555b610260810151601185018054610280840151640100000000600160c01b0360209190911b1660e09390931c6001600160c01b03199091161791909117905501519101556134a4602435426141bb565b906040519160043583528883015263ffffffff60e01b166040820152a3604051908152f35b015190508d8061343e565b90601085015f52895f20915f5b601f19851681106135525750936001846012946102a0947fbdfc881a16a3a04e41fed1091f413ffc0872156818c3b19a8331a07a020ca6909a9860609a98601f1981161061353a575b505050811b016010850155613455565b01515f1960f88460031b161c191690558d808061352a565b8183015184558a9850600190930192918b01918b016134e1565b601085015f5260205f20601f840160051c8101602085106135a9575b601f830160051c8201811061359e5750506133f2565b5f8155600101613588565b5080613588565b5f966131bf565b5f916131a2565b5f613185565b5f9261315a565b60e4356001600160e01b031916633c948d2360e01b148015613677575b801561365b575b801561363f575b6130c45760405162461bcd60e51b815260206004820152601760248201527f496e76616c69642061756374696f6e20737562747970650000000000000000006044820152606490fd5b5060e4356001600160e01b0319166310cf2d7f60e01b146135f6565b5060e4356001600160e01b03191663e1022c5b60e01b146135ef565b5060e4356001600160e01b0319166360ce192b60e11b146135e8565b60405162461bcd60e51b815260206004820152600c60248201526b496e76616c6964206d6f646560a01b6044820152606490fd5b506001600160e01b031984166334b1f22560e21b146130a6565b506001600160e01b0319841663687b54cd60e01b1461309f565b506001600160e01b0319841663ec07e9d360e01b14613098565b506001600160e01b03198416631e61f6a360e31b14613091565b60405162461bcd60e51b815260206004820152601f60248201527f4475726174696f6e206d7573742062652067726561746572207468616e2030006044820152606490fd5b60405162461bcd60e51b815260206004820152601d60248201527f526577617264206d7573742062652067726561746572207468616e20300000006044820152606490fd5b60405162461bcd60e51b815260206004820152601160248201527024b73b30b634b2103932b8bab2b9ba32b960791b6044820152606490fd5b34612318575f3660031901126123185760405163e1022c5b60e01b8152602090f35b346123185761382236613da2565b90335f52600160205261383b60ff60405f205416613fe5565b613843614b78565b5f82815260026020526040902060018101546001600160a01b0392919061386d9084161515614029565b600681015460ff9061389560d082901b6001600160e01b03191663ec07e9d360e01b1461406b565b166007811015612fc8576138bf916138af600592156140aa565b612a2d600a8201544211156140e6565b8315613909577fb105b9a4b3e0c8cf9fe45e88657882e6a405a1903b318621e07d8e895c59ad3191602091845f52600a83526138fe8660405f20614165565b6040519586521693a3005b60405162461bcd60e51b815260206004820152601060248201526f08adae0e8f240e0d2e8c6d040d0c2e6d60831b6044820152606490fd5b34612318576020366003190112612318575f6102a060405161396281613e11565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201528261010082015282610120820152826101408201528261016082015282610180820152826101a0820152826101c0820152826101e082015282610200820152826102208201526060610240820152826102608201528261028082015201526004355f52600260205260405f2060405190613a0882613e11565b8054825260018101546001600160a01b03908116602084015260028201541660408301526003810154606083015260048101546080830152600581015460a0830152600681015490600760ff83161015612fc85760ff80831660c0850152600883811c90911660e085015260d09290921b6001600160e01b0319166101008401526007810154610120840152908101546001600160a01b03166101408301526009810154610160830152600a810154610180830152600b81015461ffff166101a0830152600c8101546101c0830152600d8101546101e0830152600e810154610200830152600f810154610220830152601290613b0760108201613f43565b610240840152601181015463ffffffff60e01b8160e01b1661026085015260018060a01b039060201c1661028084015201546102a08201526040518091602082528051602083015260018060a01b03602082015116604083015260018060a01b03604082015116606083015260608101516080830152608081015160a083015260a081015160c0830152613ba360c082015160e0840190613d57565b60ff60e08201511661010083015263ffffffff60e01b6101008201511661012083015261012081015161014083015260018060a01b03610140820151166101608301526101608101516101808301526101808101516101a083015261ffff6101a0820151166101c08301526101c08101516101e08301526101e08101516102008301526102008101516102208301526102208101516102408301526102408101516102a0613c606102c092836102608701526102e0860190613d64565b6102608401516001600160e01b031916610280868101919091528401516001600160a01b031682860152920151908301520390f35b34612318575f366003190112612318575f546040516001600160a01b039091168152602090f35b34612318576020366003190112612318576004359063ffffffff60e01b82168092036123185760209163528d9f5760e11b8114908115613d46575b8115613d35575b8115613d24575b8115613d13575b5015158152f35b6301ffc9a760e01b14905083613d0c565b634eb48e9b60e11b81149150613d05565b6340f6076960e01b81149150613cfe565b63c8db44e360e01b81149150613cf7565b906007821015612fc85752565b91908251928382525f5b848110613d8e575050825f602080949584010152601f8019910116010190565b602081830181015184830182015201613d6e565b6040906003190112612318576004359060243590565b9181601f84011215612318578235916001600160401b038311612318576020838186019501011161231857565b600435906001600160a01b038216820361231857565b602435906001600160a01b038216820361231857565b6102c081019081106001600160401b03821117612ef657604052565b606081019081106001600160401b03821117612ef657604052565b604081019081106001600160401b03821117612ef657604052565b90601f801991011681019081106001600160401b03821117612ef657604052565b9291926001600160401b038211612ef65760405191613ead601f8201601f191660200184613e63565b829481845281830111612318578281602093845f960137010152565b8054821015613ede575f5260205f2001905f90565b634e487b7160e01b5f52603260045260245ffd5b8054821015613ede575f5260205f209060011b01905f90565b90600182811c92168015613f39575b6020831014613f2557565b634e487b7160e01b5f52602260045260245ffd5b91607f1691613f1a565b9060405191825f8254613f5581613f0b565b908184526020946001916001811690815f14613fc35750600114613f85575b505050613f8392500383613e63565b565b5f90815285812095935091905b818310613fab575050613f8393508201015f8080613f74565b85548884018501529485019487945091830191613f92565b92505050613f8394925060ff191682840152151560051b8201015f8080613f74565b15613fec57565b60405162461bcd60e51b81526020600482015260156024820152742737ba103a393ab9ba32b2103337b93bb0b93232b960591b6044820152606490fd5b1561403057565b60405162461bcd60e51b815260206004820152601360248201527215185cdac8191bd95cc81b9bdd08195e1a5cdd606a1b6044820152606490fd5b1561407257565b60405162461bcd60e51b815260206004820152601060248201526f4e6f742061205069746368207461736b60801b6044820152606490fd5b156140b157565b60405162461bcd60e51b815260206004820152600d60248201526c2a30b9b5903737ba1037b832b760991b6044820152606490fd5b156140ed57565b60405162461bcd60e51b8152602060048201526015602482015274141a5d18da08191958591b1a5b99481c185cdcd959605a1b6044820152606490fd5b1561413157565b60405162461bcd60e51b815260206004820152600c60248201526b15185cdac8195e1c1a5c995960a21b6044820152606490fd5b8054600160401b811015612ef65761418291600182018155613ec9565b819291549060031b91821b915f19901b1916179055565b5f1981146141a75760010190565b634e487b7160e01b5f52601160045260245ffd5b919082018092116141a757565b156141cf57565b60405162461bcd60e51b815260206004820152600d60248201526c2737ba103932b8bab2b9ba32b960991b6044820152606490fd5b1561420b57565b60405162461bcd60e51b815260206004820152601060248201526f08ccaca4084a0a640e8dede40d0d2ced60831b6044820152606490fd5b1561424a57565b60405162461bcd60e51b81526020600482015260136024820152724e6f7420616e2041756374696f6e207461736b60681b6044820152606490fd5b1561428c57565b60405162461bcd60e51b815260206004820152601060248201526f4e6f74206120436c61696d207461736b60801b6044820152606490fd5b156142cb57565b60405162461bcd60e51b81526020600482015260126024820152715461736b206e6f7420617661696c61626c6560701b6044820152606490fd5b5f908152600260205260409020600681015460d01b6001600160e01b03191663687b54cd60e01b1461434157600101546001600160a01b031690565b506008546001600160a01b031690565b1561435857565b60405162461bcd60e51b815260206004820152600a602482015269109a591cc8195e1a5cdd60b21b6044820152606490fd5b919082039182116141a757565b90816020910312612318575180151581036123185790565b156143b657565b60405162461bcd60e51b815260206004820152600f60248201526e0aedee4d6cae440dad2e6dac2e8c6d608b1b6044820152606490fd5b156143f457565b60405162461bcd60e51b815260206004820152601360248201527215dbdc9ad95c881b9bdd081cd95b1958dd1959606a1b6044820152606490fd5b1561443657565b60405162461bcd60e51b815260206004820152601060248201526f15185cdac81b9bdd0818db185a5b595960821b6044820152606490fd5b1561447557565b60405162461bcd60e51b81526020600482015260166024820152752bb7b935b2b91036bab9ba1031329031b630b4b6b2b960511b6044820152606490fd5b818102929181159184041417156141a757565b156144cd57565b60405162461bcd60e51b815260206004820152601560248201527415dbdc9ad95c881c185e5b595b9d0819985a5b1959605a1b6044820152606490fd5b1561451157565b60405162461bcd60e51b8152602060048201526013602482015272119959481d1c985b9cd9995c8819985a5b1959606a1b6044820152606490fd5b1561455357565b60405162461bcd60e51b815260206004820152601360248201527214dd185ad9481c995d1d5c9b8819985a5b1959606a1b6044820152606490fd5b1561459557565b60405162461bcd60e51b815260206004820152600d60248201526c1499599d5b990819985a5b1959609a1b6044820152606490fd5b805f52600260205260405f2090600182016145ef60018060a01b038254161515614029565b6005830154421115614acf576006830192835460ff81166007811015612fc85760048114614a925760068114614a5c5760d082901b6001600160e01b0319166334b1f22560e21b149081614a51575b5061480f5750835460ff1916600517845560038101545f8054845460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810185905293979392602092849260449284929091165af180156147de576146a6915f916147f6575061458e565b5460d01b6001600160e01b031916631e61f6a360e31b14806147e9575b614702575b50546040519283526001600160a01b0316917fe4ec5a16418560274520eb1bbcfc0e4377564571957fcc2f8e2a7f44afba10de90602090a3565b5f80546008830180546007909401805460405163a9059cbb60e01b81526001600160a01b03968716600482015260248101919091529591949193909260209287926044928492165af19283156147de577ffbf073a7709bd64bf3406dfd536abdbc9a3750eb99c8f26f543768c24a237b07602087926147aa82977fe4ec5a16418560274520eb1bbcfc0e4377564571957fcc2f8e2a7f44afba10de995f916147c7575061454c565b5493546040519081526001600160a01b0390941693a391506146c8565b6112e69150843d8611610484576104768183613e63565b6040513d5f823e3d90fd5b50600781015415156146c3565b61047e915060203d602011610484576104768183613e63565b9092916007840193845495600461483c61271061483461ffff600b870154168b6144b3565b04809961438a565b9460ff1916179055600281019460018060a01b038654165f52600360205260405f206148688154614199565b9055836149fd575b86614989575b600361488692015490549061438a565b806148d3575b505492546040805192835260208301959095526001600160a01b03908116949316927f46c82fee4cedc2a273b6dc93ed59039d9208122b933b8f32bd87a0034e336a9791a4565b5f8054835460405163a9059cbb60e01b81526001600160a01b03918216600482015260248101949094526020928492604492849291165af19081156147de575f9161496a575b5015614925575f61488c565b60405162461bcd60e51b815260206004820152601760248201527f52657175657374657220726566756e64206661696c65640000000000000000006044820152606490fd5b614983915060203d602011610484576104768183613e63565b5f614919565b5f805460065460405163a9059cbb60e01b81526001600160a01b0360109290921c82166004820152602481018b90529492602092869260449284929091165af19081156147de576149e6600392614886955f91611364575061450a565b6149f2896007546141bb565b600755925050614876565b5f8054875460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810188905292602092849260449284929091165af180156147de57614a4c915f9161138357506144c6565b614870565b60019150145f61463e565b60405162461bcd60e51b815260206004820152600e60248201526d15185cdac818d85b98d95b1b195960921b6044820152606490fd5b60405162461bcd60e51b815260206004820152601560248201527415185cdac8185b1c9958591e481858d8d95c1d1959605a1b6044820152606490fd5b60405162461bcd60e51b815260206004820152601060248201526f15185cdac81b9bdd08195e1c1a5c995960821b6044820152606490fd5b6001600160a01b03908116908115614b60575f80516020614e7e83398151915280546001600160a01b031981168417909155167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b604051631e4fbdf760e01b81525f6004820152602490fd5b335f52600160205260ff60405f205416614b90573390565b604051631cb9dd3760e21b8152602081600481335afa9081156147de575f91614bb7575090565b90506020813d602011614bee575b81614bd260209383613e63565b8101031261231857516001600160a01b03811681036123185790565b3d9150614bc5565b6001600160e01b03191663a81913a560e01b8114614d1857631e61f6a360e31b8114614ced5763ec07e9d360e01b8114614cc25763687b54cd60e01b8114614c93576334b1f22560e21b14614c6757604051602081018181106001600160401b03821117612ef6576040525f815290565b604051614c7381613e48565b601081526f3a36b81736b7b2329730bab1ba34b7b760811b602082015290565b50604051614ca081613e48565b6012815271746d702e6d6f64652e62656e63686d61726b60701b602082015290565b50604051614ccf81613e48565b600e81526d0e8dae05cdadec8ca5ce0d2e8c6d60931b602082015290565b50604051614cfa81613e48565b600e81526d746d702e6d6f64652e636c61696d60901b602082015290565b50604051614d2581613e48565b600f81526e746d702e6d6f64652e626f756e747960881b602082015290565b5f80516020614e7e833981519152546001600160a01b03163303614d6457565b60405163118cdaa760e01b8152336004820152602490fd5b5f80516020614e9e8339815191526002815414614d995760029055565b604051633ee5aeb560e01b8152600490fd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615614dda57565b604051631afcd79f60e31b8152600490fd5b905f8091602081519101845af48080614e6a575b15614e205750506040513d81523d5f602083013e60203d82010160405290565b15614e4757604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b3d15614e58576040513d5f823e3d90fd5b60405163d6bda27560e01b8152600490fd5b503d151580614e005750813b1515614e0056fe9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f007d30d1881f77d1707467f58525863cb9ccbaedc1c4ddb2a4d9dd1349ca7a4e4ba26469706673582212200bb3c386437b329382faebd11a6528dfcec75237b7e8989082e73ebb499055b764736f6c63430008180033","sourceMap":"2182:38287:33:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;;;;-1:-1:-1;;2182:38287:33;;;;2378:1:15;2182:38287:33;;:::i;:::-;2324:62:15;;:::i;:::-;2378:1;:::i;:::-;2182:38287:33;;;;;;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;;;;;;;;;34169:53;2182:38287;;7569:10;2182:38287;;;;;7543:63;2182:38287;;;;;;7543:63;:::i;:::-;2989:103:29;;:::i;:::-;34028:18:33;;:::i;:::-;2182:38287;;;34076:5;2182:38287;;;;;;34107:14;;2182:38287;;;;-1:-1:-1;;;;;2182:38287:33;;;;;;;;;;34099:60;34107:28;;;34099:60;:::i;:::-;2182:38287;34177:27;34169:53;:::i;:::-;34240:11;;;2182:38287;;;;;;;;;;;34240:30;;;:11;34476;34240:30;34232:56;34505:48;34240:30;;;;;34232:56;:::i;:::-;2182:38287;;;;;-1:-1:-1;;;;;;2182:38287:33;-1:-1:-1;;;34302:20:33;34298:102;;2182:38287;-1:-1:-1;;;2182:38287:33;;;;34476:11;2182:38287;;;;;-1:-1:-1;;;34505:48:33;;-1:-1:-1;;;;;2182:38287:33;;;;34505:48;;2182:38287;;;;;;;;;;;;;;;;;;;;;;;;;;34505:48;;;;;;;;;;34586:51;34505:48;34497:74;34505:48;;;;;2182:38287;34497:74;;:::i;:::-;2182:38287;;;;;;;;34586:51;2182:38287;-1:-1:-1;;;;;;;;;;;2182:38287:33;;;34505:48;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;2182:38287;;;;;;;;;34298:102;2182:38287;;;34338:51;2182:38287;;34346:8;2182:38287;;;;34346:28;34338:51;:::i;:::-;34298:102;;;2182:38287;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;;;;-1:-1:-1;;2182:38287:33;;;;;;:::i;:::-;2324:62:15;;:::i;:::-;-1:-1:-1;;;;;2182:38287:33;;;11597:23;;2182:38287;;11652:24;2182:38287;;-1:-1:-1;;;;;;2182:38287:33;;;;;;-1:-1:-1;;;;;2182:38287:33;;;;;;;;;;;;11691:30;;2182:38287;;11691:30;2182:38287;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;;;-1:-1:-1;;2182:38287:33;;;;;;;;;3904:37;2182:38287;;;;;;;;;;;3904:37;;2182:38287;-1:-1:-1;;;;;2182:38287:33;;;;;3904:37;;;2182:38287;;;;;3904:37;;;2182:38287;3904:37;;;2182:38287;3904:37;;;2182:38287;3904:37;;;2182:38287;3904:37;;;2182:38287;;3904:37;;2182:38287;3904:37;;;2182:38287;3904:37;;;2182:38287;3904:37;;;2182:38287;3904:37;;;2182:38287;3904:37;;;2182:38287;3904:37;;;2182:38287;3904:37;;;2182:38287;;;;;;;;;;;;;;;;;;;;;;;;;;3904:37;;;2182:38287;3904:37;;;:::i;:::-;;;;;;2182:38287;;;3904:37;2182:38287;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2182:38287:33;;;;;;;;-1:-1:-1;;;;;2182:38287:33;;:::i;:::-;;;;3947:50;2182:38287;;;;;3947:50;;;;;2182:38287;3947:50;;2182:38287;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7569:10;;2182:38287;;7551:17;2182:38287;;7543:63;2182:38287;;;;;;7543:63;:::i;:::-;24960:18;;:::i;:::-;2182:38287;;;25008:5;2182:38287;;;;;;25039:14;;2182:38287;-1:-1:-1;;;;;2182:38287:33;;;25031:60;;2182:38287;;25039:28;;25031:60;:::i;:::-;25101:59;25128:15;;;2182:38287;25109:15;:34;;25101:59;:::i;:::-;25179:16;;;2182:38287;;;;;;;25292:9;;;2182:38287;;25292:9;;2182:38287;;;;-1:-1:-1;;;;;;2182:38287:33;-1:-1:-1;;;25292:19:33;;:45;;;;2182:38287;25288:625;;;2182:38287;;;;;;;;;;;25361:30;25437:26;2182:38287;25361:30;;25353:56;-1:-1:-1;;;;;;;;;;;25361:30:33;;;25353:56;:::i;:::-;-1:-1:-1;;2182:38287:33;;;;25288:625;2182:38287;;;;;;25928:42;;2182:38287;;;-1:-1:-1;;;2182:38287:33;;;;;;;;25288:625;2182:38287;;-1:-1:-1;;;;25484:18:33;;2182:38287;;;;;;;;;;;25526:33;25594:57;25526:33;25612:12;-1:-1:-1;;;;;;;;;;;25526:33:33;;25518:62;7551:17;2182:38287;25526:33;;25518:62;:::i;:::-;25612:12;2182:38287;;;;;25602:22;25594:57;:::i;:::-;25288:625;;2182:38287;-1:-1:-1;;;2182:38287:33;;;;;;;;25480:433;-1:-1:-1;;;25672:18:33;;;:42;;;;25480:433;25668:245;;;25480:433;;;-1:-1:-1;;;;;;;;;;;25480:433:33;2182:38287;25480:433;25288:625;;25668:245;2182:38287;;;;;;;;25738:40;25853:49;25738:40;25008:5;-1:-1:-1;;;;;;;;;;;25738:40:33;;25730:109;25738:40;;2182:38287;25738:40;;:77;;;;;25668:245;25730:109;;:::i;:::-;25871:11;2182:38287;;;;;25861:21;25853:49;:::i;:::-;25668:245;;;;;;25738:77;7551:17;25782:33;;;25738:77;;;25672:42;-1:-1:-1;;;25694:20:33;;-1:-1:-1;25672:42:33;;;25292:45;-1:-1:-1;;;;25315:22:33;;25292:45;;2182:38287;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2182:38287:33;;;;;38864:20;2182:38287;;;;;;;38864:5;2182:38287;;;38864:20;2182:38287;;;;;;;;;;;;;;;-1:-1:-1;;2182:38287:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;-1:-1:-1;;2182:38287:33;;;;;;;;:::i;:::-;7569:10;;2182:38287;;;;;7543:63;2182:38287;;;;;;7543:63;:::i;:::-;17977:18;;:::i;:::-;2182:38287;;;18025:5;2182:38287;;;;;;18069:14;;2182:38287;-1:-1:-1;;;;;2182:38287:33;18048:53;;2182:38287;;;;;18056:27;18048:53;:::i;:::-;18119:9;;;2182:38287;;18119:9;;2182:38287;;18111:47;2182:38287;;;;-1:-1:-1;;;;;;2182:38287:33;-1:-1:-1;;;18119:18:33;18111:47;:::i;:::-;2182:38287;;;;;;;;;18025:5;18176:30;;;18168:61;18176:30;;;18168:61;:::i;:::-;18239:71;18266:18;;;2182:38287;18247:15;:37;;18239:71;:::i;:::-;18321:11;2182:38287;;;;-1:-1:-1;;;;;2182:38287:33;;;;;;;;;;;;;;18406:34;;;;2182:38287;;;;;;;;;-1:-1:-1;;2182:38287:33;;;;2989:103:29;;:::i;:::-;3054:1;2182:38287:33;;3054:1:29;:::i;:::-;2182:38287:33;-1:-1:-1;;;;;;;;;;;2182:38287:33;;;;;;;;;;;;;;;;4209:33;2182:38287;;;-1:-1:-1;;;;;2182:38287:33;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;;;;;;;;;4104:27;2182:38287;;;;;;;;;;;;;;;;:::i;:::-;;;;;4720:52;2182:38287;;;;;;;;4720:52;;;;;2182:38287;4720:52;;;;:::i;:::-;2182:38287;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;;;;;;;;;;7569:10;;2182:38287;;;;;7543:63;2182:38287;;;;;;7543:63;:::i;:::-;28858:18;;:::i;:::-;2182:38287;;;28906:5;2182:38287;;;;;;28950:14;;2182:38287;;;-1:-1:-1;;;;;2182:38287:33;28929:53;;2182:38287;;;;;28937:27;28929:53;:::i;:::-;29000:9;;;2182:38287;;;;28992:47;2182:38287;;;;;;;;;;29000:18;28992:47;:::i;:::-;2182:38287;;;;;;;;29049:62;29057:33;;29049:62;:::i;:::-;29147:15;;;2182:38287;29129:15;:33;2182:38287;;;29218:16;;;2182:38287;29218:16;;;;2182:38287;;;;;;;;;;;;;;;29291:13;29287:234;;2182:38287;-1:-1:-1;;2182:38287:33;;-1:-1:-1;;2182:38287:33;;;;-1:-1:-1;29570:12:33;;;2182:38287;;-1:-1:-1;;;;;;2182:38287:33;;;29605:14;;2182:38287;;;;29669:20;;;;2182:38287;;29287:234;2182:38287;;;;;;;;;29328:43;2182:38287;;;;29000:9;2182:38287;;;;;;;;;;;;;;;;29328:43;;2182:38287;29328:43;;2182:38287;;;;;;;;;;;;;;;;;;;;;29328:43;;;;;;;;;;;;;;29287:234;2182:38287;;;;;;;29463:47;2182:38287;;;;;;29413:31;29605:14;2182:38287;;;29413:31;:::i;:::-;2182:38287;;29486:12;;;2182:38287;;;;;;;;29463:47;29287:234;;;;;2182:38287;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;;;;;;;;;;29328:43;;;;;;;;;;;;;;:::i;:::-;;;;;2182:38287;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;;;;;;;-1:-1:-1;;2182:38287:33;;;;;;:::i;:::-;7569:10;2182:38287;;;;;7543:63;2182:38287;;;;;;7543:63;:::i;:::-;2989:103:29;;:::i;:::-;26344:18:33;;:::i;:::-;2182:38287;;;;26392:5;2182:38287;;;;;;26436:14;;2182:38287;;;;;26415:53;;-1:-1:-1;;;;;2182:38287:33;;;;;26423:27;26415:53;:::i;:::-;26478:59;26505:15;;;2182:38287;26486:15;:34;;26478:59;:::i;:::-;26552:9;;;2182:38287;;;;;-1:-1:-1;;;;;;2182:38287:33;-1:-1:-1;;;26552:18:33;;2182:38287;;;;;;;;;;;;26594:33;26586:62;2182:38287;;26594:33;;26586:62;:::i;:::-;26680:12;;;2182:38287;26662:57;;-1:-1:-1;;;;;2182:38287:33;;;;;26670:22;26662:57;:::i;:::-;-1:-1:-1;;2182:38287:33;;26552:9;;;2182:38287;26392:5;27341:11;;2182:38287;;-1:-1:-1;;;;;;2182:38287:33;-1:-1:-1;;;;;2182:38287:33;;;;;;;;;;27372:11;2182:38287;;;;;;;27372:36;;;:::i;:::-;2182:38287;;26552:9;;;2182:38287;;;-1:-1:-1;;;;;;2182:38287:33;-1:-1:-1;;;27443:20:33;:53;;27466:16;;;2182:38287;27443:53;27591:19;27552:5;27521:27;2182:38287;27537:11;;;2182:38287;;27521:27;;:::i;:::-;2182:38287;27591:19;;;:::i;:::-;2182:38287;;;;-1:-1:-1;;;27629:41:33;;-1:-1:-1;;;;;2182:38287:33;;;;27629:41;;2182:38287;;;;;;;;;;;;;;;;;;;;;;;27629:41;;;;;;27621:75;27629:41;;;;;27443:53;27621:75;;:::i;:::-;27711:7;27707:146;;27443:53;26552:9;;;2182:38287;;;-1:-1:-1;;;;;;2182:38287:33;-1:-1:-1;;;27867:18:33;;:42;;27443:53;27863:227;;27443:53;26552:9;;;2182:38287;;;-1:-1:-1;;;;;;2182:38287:33;-1:-1:-1;;;28104:20:33;28100:238;;27443:53;-1:-1:-1;2182:38287:33;;;;;;;;;;;;;-1:-1:-1;;;;;2182:38287:33;;;;;;;;;;;28353:59;;;2182:38287;-1:-1:-1;;;;;;;;;;;2182:38287:33;;;28100:238;28157:32;:13;;;2182:38287;28173:16;;;2182:38287;28157:32;;:::i;:::-;28207:10;;28203:125;;28100:238;;;;28203:125;2182:38287;;;26436:14;;;;2182:38287;;;-1:-1:-1;;;28245:42:33;;-1:-1:-1;;;;;2182:38287:33;;;;28245:42;;2182:38287;;;;;;;;;;;;;;;;;;;28245:42;;;;;;;;;;;28203:125;2182:38287;;;;28203:125;;;;2182:38287;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;28245:42;;;;2182:38287;28245:42;2182:38287;28245:42;;;;;;;:::i;:::-;;;;;2182:38287;;;;;;;;;27863:227;2182:38287;;27952:12;;;2182:38287;27966:16;;;2182:38287;;;-1:-1:-1;;;27933:50:33;;-1:-1:-1;;;;;2182:38287:33;;;;27933:50;;2182:38287;;;;;;;;;;;;;;;;;;;;27933:50;;;;;;27925:82;27933:50;;;;;27863:227;27925:82;;:::i;:::-;2182:38287;;;;;27952:12;;;2182:38287;;27966:16;;;2182:38287;;;;;;28026:53;2182:38287;;;28026:53;;27863:227;;27933:50;;;;2182:38287;27933:50;2182:38287;27933:50;;;;;;;:::i;:::-;;;;27867:42;27889:16;;;;2182:38287;27889:20;;27867:42;;27707:146;2182:38287;;26552:9;2182:38287;;;-1:-1:-1;;;27742:37:33;;-1:-1:-1;;;;;2182:38287:33;;;;;;;;27742:37;;2182:38287;;;;;;;;;;;;;;;;;;;27742:37;;;;;;;;27734:69;27742:37;;;;;27707:146;27734:69;;:::i;:::-;27817:25;2182:38287;27817:25;2182:38287;27817:25;:::i;:::-;;2182:38287;27707:146;;27742:37;;;;2182:38287;27742:37;2182:38287;27742:37;;;;;;;:::i;:::-;;;;27629:41;;;;2182:38287;27629:41;2182:38287;27629:41;;;;;;;:::i;:::-;;;;27443:53;27372:11;27485;;2182:38287;27443:53;;2182:38287;-1:-1:-1;;;2182:38287:33;;;;;;;;26548:740;-1:-1:-1;;;26740:18:33;;2182:38287;;;;;;;;;;;;26782:40;26774:72;26392:5;2182:38287;26782:40;;26774:72;:::i;:::-;26392:5;26878:11;;2182:38287;26860:49;;-1:-1:-1;;;;;2182:38287:33;;;;;26868:21;26860:49;:::i;:::-;26548:740;;26736:552;-1:-1:-1;;;26930:20:33;2182:38287;;;;;;;;;;;;26974:33;2182:38287;;26392:5;27063:11;;2182:38287;;;;27045:49;;-1:-1:-1;;;;;2182:38287:33;;;;;27053:21;27045:49;:::i;2182:38287::-;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;26926:362;2182:38287;;;;;;;;;27150:30;27125:152;27150:30;2182:38287;27150:30;;:75;;;;;26926:362;27125:152;;:::i;27150:75::-;27199:26;27184:41;;;27150:75;;;2182:38287;;;;;;;-1:-1:-1;;2182:38287:33;;;;7569:10;2182:38287;;;;;7543:63;2182:38287;;;;;;7543:63;:::i;:::-;2989:103:29;;:::i;:::-;35706:18:33;;:::i;:::-;2182:38287;;;;35754:5;2182:38287;;;;;;35847:53;2182:38287;;;;;;35785:14;;2182:38287;;35785:28;;35777:60;35785:28;;;35777:60;:::i;:::-;-1:-1:-1;;;;;2182:38287:33;35855:27;35847:53;:::i;:::-;35918:11;;;2182:38287;;;;;;;;;;35910:56;35918:30;;35910:56;:::i;:::-;2182:38287;;-1:-1:-1;;;;;;2182:38287:33;-1:-1:-1;;;35980:20:33;35976:102;;2182:38287;36113:11;;;2182:38287;36163:15;;;2182:38287;36218:16;;;2182:38287;36276:18;;;;2182:38287;;;;36309:14;;:42;;;;;;2182:38287;36305:523;;2182:38287;;;;36837:162;;2182:38287;;;37012:19;;;;;:43;;2182:38287;37008:196;;2182:38287;;;37217:21;;;;;:43;;2182:38287;37213:204;;2182:38287;37443:45;;;2182:38287;37442:122;;;;;2182:38287;37442:224;;;;;2182:38287;37442:330;;;;;;2182:38287;37782:92;;;;2182:38287;;;-1:-1:-1;;;;;;;;;;;2182:38287:33;;;37782:92;36163:15;36113:11;;;2182:38287;36163:15;;2182:38287;;;;;;;;;;37814:49;2182:38287;;;37814:49;;37782:92;;;37442:330;37683:66;;-1:-1:-1;37683:66:33;;;37442:330;37683:88;;;;37442:330;;;;;37683:88;-1:-1:-1;35918:11:33;;;2182:38287;;;-1:-1:-1;;;;;;2182:38287:33;-1:-1:-1;;;37753:18:33;37683:88;;:66;2182:38287;;;;37708:41;;37683:66;;;37442:224;37581:60;;-1:-1:-1;37581:60:33;;;;37442:224;37581:84;;;;37442:224;;;;;;37581:84;-1:-1:-1;35918:11:33;;;2182:38287;;;-1:-1:-1;;;;;;2182:38287:33;-1:-1:-1;;;37645:20:33;37581:84;;:60;2182:38287;;;;37604:37;;37581:60;;;37442:122;2182:38287;;;;;36841:18;;2182:38287;;;37506:57;;37442:122;;;;;;37506:57;2182:38287;;;;37528:35;;37506:57;;;37443:45;2182:38287;;37461:27;;;-1:-1:-1;37443:45:33;;;37213:204;37303:15;2182:38287;;37284:34;2182:38287;;;;;36276:18;;;2182:38287;37213:204;;2182:38287;;;;;;;;;;;;;;;;;;;;;;;;;37217:43;-1:-1:-1;35918:11:33;;;2182:38287;;;-1:-1:-1;;;;;;2182:38287:33;-1:-1:-1;;;37242:18:33;37217:43;;37008:196;37096:15;2182:38287;;37079:32;2182:38287;;;;;36218:16;;;2182:38287;37008:196;;2182:38287;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;;;;;;;;;37012:43;-1:-1:-1;35918:11:33;;;2182:38287;;;-1:-1:-1;;;;;;2182:38287:33;-1:-1:-1;;;37035:20:33;37012:43;;36837:162;36899:15;2182:38287;;36883:31;2182:38287;;;;;36163:15;;;2182:38287;36837:162;;2182:38287;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;;;;;;;;;36305:523;2182:38287;;;36371:23;36367:317;;;36305:523;-1:-1:-1;2182:38287:33;;36113:11;;;2182:38287;35918:11;;;2182:38287;;;-1:-1:-1;;;;;;2182:38287:33;-1:-1:-1;;;36738:20:33;36734:84;;36305:523;;;;36734:84;2182:38287;;36778:13;;;2182:38287;36734:84;;36367:317;2182:38287;36604:42;2182:38287;36555:23;2182:38287;;36555:23;;:::i;:::-;2182:38287;;;;-1:-1:-1;;;36604:42:33;;-1:-1:-1;;;;;2182:38287:33;;;;36604:42;;2182:38287;;;;;;;;;;;;;;;;;;;;;;;;;;;36604:42;;;;;;;;;;;;;;36367:317;2182:38287;;;;36367:317;;;2182:38287;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;36604:42;;;;2182:38287;36604:42;2182:38287;36604:42;;;;;;;:::i;:::-;;;;;2182:38287;;;;;;;;;36309:42;2182:38287;;;;36327:24;;36309:42;;35976:102;2182:38287;;;;36024:8;2182:38287;;36016:51;2182:38287;;;;36024:28;36016:51;:::i;:::-;35976:102;;2182:38287;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;7569:10;;2182:38287;;7551:17;2182:38287;;7543:63;2182:38287;;;;;;7543:63;:::i;:::-;20928:18;;:::i;:::-;2182:38287;;;20976:5;2182:38287;;;;;;21007:14;;2182:38287;;;-1:-1:-1;;;;;2182:38287:33;20999:60;;2182:38287;;21007:28;;20999:60;:::i;:::-;21077:9;;;2182:38287;;;21069:52;2182:38287;;;;-1:-1:-1;;;;;;2182:38287:33;-1:-1:-1;;;21077:20:33;21069:52;:::i;:::-;2182:38287;;;;;;;;;21131:56;21139:30;;21131:56;:::i;:::-;21214:13;;;2182:38287;21205:22;;2182:38287;;21631:38;21265:11;;2182:38287;21265:11;7551:17;21265:11;20976:5;2182:38287;21265:11;;2182:38287;;;;-1:-1:-1;;;;;2182:38287:33;;;;;;;;21295:16;2182:38287;;;;;;;;;21457:35;2182:38287;;;;;;21457:35;2182:38287;;21507:34;;;;;;;2182:38287;;21631:38;2182:38287;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;4056:41;2182:38287;;;;;;;4056:41;;;;;;;;;:::i;:::-;-1:-1:-1;2182:38287:33;;4056:41;;;;2182:38287;;;;-1:-1:-1;;;;;2182:38287:33;;;;;;;;;;;;;;4056:41;;;;2182:38287;;;;;;;;:::i;:::-;;;;;4863:52;2182:38287;;;;;;;;4863:52;;;;;2182:38287;4863:52;;;;:::i;2182:38287::-;;;;;;;-1:-1:-1;;2182:38287:33;;;;;;;;-1:-1:-1;;;;;2182:38287:33;;:::i;:::-;;;;4412:49;2182:38287;;;;;;;;;;;;;;;;;-1:-1:-1;;2182:38287:33;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;2182:38287:33;;;;;;;;;;;;;;;;;;;;;;;;;39791:8;2182:38287;;;;;;;;;-1:-1:-1;;;;;2182:38287:33;;;;;;;;;;;;;39791:8;2182:38287;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2182:38287:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;;;;;:::i;:::-;7569:10;;2182:38287;;;7551:17;2182:38287;;7543:63;2182:38287;;;;;;7543:63;:::i;:::-;18790:18;;:::i;:::-;2182:38287;;;18838:5;2182:38287;;;;;;18869:14;;2182:38287;-1:-1:-1;;;;;2182:38287:33;;;;18861:60;;2182:38287;;18869:28;;18861:60;:::i;:::-;18939:9;;;2182:38287;;;18931:52;2182:38287;;;;-1:-1:-1;;;;;;2182:38287:33;-1:-1:-1;;;18939:20:33;18931:52;:::i;:::-;2182:38287;;;;;;;18993:56;19001:30;;18993:56;:::i;:::-;19085:16;;;2182:38287;19067:15;:34;2182:38287;;;19152:13;;;2182:38287;19143:22;;2182:38287;;;;;19290:8;2182:38287;;;;;;;;;19290:28;:59;;;;2182:38287;19286:157;;2182:38287;;;;;;;;;;:::i;:::-;;;;;;19475:37;;;2182:38287;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;7551:17;2182:38287;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;;2182:38287:33;;;;;;;7551:17;2182:38287;;;;;;;;;;19529:35;;2182:38287;19529:35;2182:38287;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;19286:157;19365:19;;;2182:38287;;;19406:17;;;;;2182:38287;;-1:-1:-1;;;;;;2182:38287:33;;;;;;-1:-1:-1;;;;;2182:38287:33;;;;;;;19286:157;;;;19290:59;19330:19;;;;2182:38287;19322:27;;19290:59;;2182:38287;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2182:38287:33;;;-1:-1:-1;;;;;2182:38287:33;;;;;;;;;;;;;;;;:::i;:::-;7569:10;;2182:38287;;7551:17;2182:38287;;7543:63;2182:38287;;;;;;7543:63;:::i;:::-;2989:103:29;;:::i;:::-;16960:18:33;;:::i;:::-;2182:38287;;;17008:5;2182:38287;;;;;;17039:14;;2182:38287;;;;-1:-1:-1;;;;;2182:38287:33;17031:60;;2182:38287;;17039:28;;17031:60;:::i;:::-;2182:38287;17109:20;;;2182:38287;;17166:9;;;2182:38287;;17166:9;;17158:47;2182:38287;;;;-1:-1:-1;;;;;;2182:38287:33;-1:-1:-1;;;17166:18:33;17158:47;:::i;:::-;2182:38287;;;;;;;;;17223:30;;17610:40;17223:30;2182:38287;;17223:30;;17215:61;7551:17;17223:30;;17215:61;:::i;:::-;17286:59;17313:15;;;2182:38287;17294:15;:34;;17286:59;:::i;:::-;17449:12;;;2182:38287;;-1:-1:-1;;;;;;2182:38287:33;;;;;17294:15;17480:14;;;2182:38287;17522:16;2182:38287;-1:-1:-1;;2182:38287:33;;;;;;;;;17610:40;7551:17;-1:-1:-1;;;;;;;;;;;2182:38287:33;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;;;-1:-1:-1;;2182:38287:33;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;3147:66:23;2182:38287:33;;;;;;;;;4301:16:23;2182:38287:33;-1:-1:-1;;;;;2182:38287:33;;4724:16:23;;:34;;;;2182:38287:33;4803:1:23;4788:16;:50;;;;2182:38287:33;4853:13:23;:30;;;;2182:38287:33;4849:91:23;;;-1:-1:-1;;2182:38287:33;;4803:1:23;2182:38287:33;;;;4977:67:23;;2182:38287:33;6891:76:23;;;:::i;:::-;;;:::i;:::-;6959:1;8676:10:33;6959:1:23;:::i;:::-;-1:-1:-1;;;;;2182:38287:33;;;;8705:27;2182:38287;;8768:52;8794:5;8776:23;;;8768:52;:::i;:::-;2182:38287;-1:-1:-1;;;;;2182:38287:33;;;;;;;;8870:28;2182:38287;;;;;;;;;;;;;;;;;;8870:28;2182:38287;5064:101:23;;2182:38287:33;;;5064:101:23;2182:38287:33;;;;;;;5140:14:23;2182:38287:33;;;4803:1:23;2182:38287:33;;5140:14:23;2182:38287:33;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;4977:67:23;-1:-1:-1;;2182:38287:33;;;;;4977:67:23;;;4849:91;2182:38287:33;;-1:-1:-1;;;4906:23:23;;2182:38287:33;;4906:23:23;4853:30;4870:13;;;4853:30;;;4788:50;4816:4;4808:25;:30;;-1:-1:-1;4788:50:23;;4724:34;;;-1:-1:-1;4724:34:23;;2182:38287:33;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;;;;;;;2324:62:15;;:::i;:::-;-1:-1:-1;;;;;;;;;;;2182:38287:33;;-1:-1:-1;;;;;;2182:38287:33;;;;;;;-1:-1:-1;;;;;2182:38287:33;3996:40:15;2182:38287:33;;3996:40:15;2182:38287:33;;;;;;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;;;;;;;;4170:33;2182:38287;;;;;;;;;;;;;;-1:-1:-1;;2182:38287:33;;;;;;:::i;:::-;2324:62:15;;:::i;:::-;-1:-1:-1;;;;;2182:38287:33;10311:23;;2182:38287;;;;;10405:4;2182:38287;;;;;10405:4;2182:38287;;;;;;;;10424:33;2182:38287;;;10405:4;2182:38287;;10424:33;2182:38287;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2182:38287:33;;;;;;;;;;-1:-1:-1;;;;;2182:38287:33;;:::i;:::-;;;;8016:17;2182:38287;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7569:10;2182:38287;;;;;7543:63;2182:38287;;;;;;7543:63;:::i;:::-;2182:38287;;;19889:5;2182:38287;;;;;;19920:14;;2182:38287;-1:-1:-1;;;;;2182:38287:33;19912:60;;2182:38287;;19920:28;;19912:60;:::i;:::-;19990:9;;;2182:38287;;19990:9;;2182:38287;;19982:52;2182:38287;;;;-1:-1:-1;;;;;;2182:38287:33;-1:-1:-1;;;19990:20:33;19982:52;:::i;:::-;2182:38287;;;;;;;;;20044:56;20052:30;;20044:56;:::i;:::-;20137:16;;;2182:38287;20118:15;:35;2182:38287;;20199:17;;;2182:38287;;;;20199:31;;;2182:38287;;-1:-1:-1;19889:5:33;20263:11;;2182:38287;;-1:-1:-1;;;;;;2182:38287:33;;;;;20323:19;;;2182:38287;;20304:16;;;2182:38287;-1:-1:-1;;2182:38287:33;;;;;20400:45;;;;2182:38287;;;;;;;;;;;;;;;;;20199:17;2182:38287;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4840:6:24;-1:-1:-1;;;;;2182:38287:33;4831:4:24;4823:23;4819:145;;2182:38287:33;;;811:66:21;2182:38287:33;;;4819:145:24;2182:38287:33;;-1:-1:-1;;;4924:29:24;;2182:38287:33;;4924:29:24;2182:38287:33;-1:-1:-1;2182:38287:33;;-1:-1:-1;;2182:38287:33;;;;;;:::i;:::-;;;-1:-1:-1;;;;;2182:38287:33;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;4417:6:24;2182:38287:33;;4408:4:24;4400:23;;;:120;;;;2182:38287:33;4383:251:24;;;2324:62:15;;:::i;:::-;2182:38287:33;;;;;;;;5881:52:24;;2182:38287:33;5881:52:24;2182:38287:33;5881:52:24;;;;;;;;;2182:38287:33;-1:-1:-1;5877:437:24;;2182:38287:33;;-1:-1:-1;;;6243:60:24;;2182:38287:33;6243:60:24;;2182:38287:33;;;;;6243:60:24;5877:437;811:66:21;5975:40:24;;;;5971:120;;1748:29:21;;;:34;1744:119;;2182:38287:33;;-1:-1:-1;;;;;;2182:38287:33;;;;;;;;2407:36:21;;;;2182:38287:33;;2458:15:21;:11;;2489:53;;;;:::i;:::-;;2182:38287:33;;2454:148:21;6163:9;;;6159:70;;2454:148;2182:38287:33;;6159:70:21;-1:-1:-1;;;6199:19:21;;2182:38287:33;;6199:19:21;1744:119;2182:38287:33;;-1:-1:-1;;;1805:47:21;;2182:38287:33;1805:47:21;;2182:38287:33;;;;;1805:47:21;5971:120:24;2182:38287:33;;;;6042:34:24;;;;;;2182:38287:33;6042:34:24;;2182:38287:33;6042:34:24;5881:52;;;;2182:38287:33;5881:52:24;;2182:38287:33;5881:52:24;;;;;;2182:38287:33;5881:52:24;;;:::i;:::-;;;2182:38287:33;;;;;5881:52:24;;;;2182:38287:33;;;;5881:52:24;;;-1:-1:-1;5881:52:24;;4400:120;2182:38287:33;;;811:66:21;2182:38287:33;;4478:42:24;;4400:120;;;2182:38287:33;;;;;;;-1:-1:-1;;2182:38287:33;;;;;;:::i;:::-;2324:62:15;;:::i;:::-;-1:-1:-1;;;;;2182:38287:33;;;;;;;;;;;;;;;-1:-1:-1;;2182:38287:33;;;;;;;10736:34;;2182:38287;10736:34;2182:38287;;;;;;;;;;;;;;;4137:27;2182:38287;;;;;;;;-1:-1:-1;;;;;2182:38287:33;;;;;;;;;;;;;-1:-1:-1;;2182:38287:33;;;;;;;;7569:10;;2182:38287;;;;;;7543:63;2182:38287;;;;;;7543:63;:::i;:::-;23777:18;;:::i;:::-;2182:38287;;;23825:5;2182:38287;;;;;;23856:14;;2182:38287;-1:-1:-1;;;;;2182:38287:33;;;23848:60;;2182:38287;;23856:28;;23848:60;:::i;:::-;23926:9;;;2182:38287;-1:-1:-1;;;2182:38287:33;;;;-1:-1:-1;;;;;;2182:38287:33;23926:22;2182:38287;;;;;;;;;;24049:59;23991:30;23983:56;24076:15;23991:30;;23983:56;:::i;:::-;24076:15;2182:38287;24057:15;:34;;24049:59;:::i;:::-;24126:23;;2182:38287;;;;;24235:65;2182:38287;;;;24181:15;2182:38287;;24181:39;2182:38287;;;;24181:39;:::i;:::-;2182:38287;;;;;;;;;;;;;;;;;;24235:65;;2182:38287;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;;;-1:-1:-1;;2182:38287:33;;;;;;;;;;;;;;;11372:19;2324:62:15;;;:::i;:::-;11281:44:33;11299:5;11289:15;;;11281:44;:::i;:::-;2182:38287;;;11335:22;2182:38287;;;11335:22;2182:38287;;;;;;11372:19;2182:38287;;;;;;;;;-1:-1:-1;;2182:38287:33;;;;;;:::i;:::-;2324:62:15;;:::i;:::-;11005:29:33;2182:38287;;-1:-1:-1;;;;;;2182:38287:33;-1:-1:-1;;;;;2182:38287:33;;;;;;;;;11049:35;;;;2182:38287;;;;;;;;;-1:-1:-1;;2182:38287:33;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;38336:11;2182:38287;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2182:38287:33;;;;;;;;;;;;;;;-1:-1:-1;;;;;2182:38287:33;;;;;;;;;;;:::i;:::-;7569:10;;2182:38287;;;;;7543:63;2182:38287;;;;;;7543:63;:::i;:::-;30514:18;;:::i;:::-;2182:38287;;;;;;30562:5;2182:38287;;;;;;30606:14;;2182:38287;;;30585:53;;-1:-1:-1;;;;;2182:38287:33;;;;;30593:27;30585:53;:::i;:::-;30656:11;;;2182:38287;;;;;;;;;;;30656:34;2182:38287;;;;;;;30730:13;2182:38287;;;;;;;;30656:11;;;2182:38287;;-1:-1:-1;;2182:38287:33;;;;;;;;;;30562:5;30874:11;;2182:38287;;-1:-1:-1;;;;;2182:38287:33;;;;;30862:11;2182:38287;;;;;;30862:35;2182:38287;;30862:37;;;:::i;:::-;2182:38287;;;;;;;;;;;;30862:11;2182:38287;;30562:5;2182:38287;;;30909:35;:45;2182:38287;;;;;;30909:45;:::i;:::-;2182:38287;;;;;;;;;;;;;;;;;;;;;;;;30970:52;2182:38287;;;30970:52;;2182:38287;;31037:18;;:54;;;2182:38287;31033:417;;2182:38287;;;31033:417;2182:38287;;30656:11;;;;2182:38287;-1:-1:-1;;;;;2182:38287:33;;;;;31315:20;;2182:38287;;-1:-1:-1;;;;;;2182:38287:33;31315:20;:::i;:::-;31111:317;;;;;;2182:38287;;;;;;;;;;;;;;;;;;;31111:317;;2182:38287;;;31111:317;;2182:38287;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2182:38287:33;;31111:317;;;;;;;31033:417;;;2182:38287;;;31111:317;2182:38287;;-1:-1:-1;;;;;2182:38287:33;;;;;;;31111:317;;;2182:38287;;;;;;;;;;;;31037:54;-1:-1:-1;2182:38287:33;;-1:-1:-1;;;;;2182:38287:33;31059:32;;31037:54;;2182:38287;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2182:38287:33;;;;;;-1:-1:-1;;;;;;2182:38287:33;;;;;;;;-1:-1:-1;;;;;2182:38287:33;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;2182:38287:33;;;;;;7569:10;2182:38287;;;;;7543:63;2182:38287;;;;;;7543:63;:::i;:::-;-1:-1:-1;;;;;14571:18:33;;:::i;:::-;2182:38287;14607:23;;;2182:38287;;;;14670:10;2182:38287;;;;14732:12;2182:38287;;-1:-1:-1;;;;;;2182:38287:33;;-1:-1:-1;;;14811:14:33;:31;;;;2182:38287;14811:48;;;;2182:38287;14811:69;;;;2182:38287;14811:88;;;;2182:38287;;;;-1:-1:-1;;;;;;2182:38287:33;;-1:-1:-1;;;14951:15:33;14947:344;;2182:38287;;;;15372:14;2182:38287;;;;;;;15372:27;;;;:::i;:::-;2182:38287;;;;15331:13;;2182:38287;15320:80;;2182:38287;15354:4;2182:38287;;;;;;;;;;;;;;15320:80;;2182:38287;;;;;-1:-1:-1;;;;;2182:38287:33;;;;;;;;;;;;;;;15320:80;;15310:91;2182:38287;;15702:26;2182:38287;;15661:15;15702:26;:::i;:::-;15928:51;-1:-1:-1;;;;;;2182:38287:33;;-1:-1:-1;;;15928:13:33;2182:38287;;15944:31;2182:38287;;15661:15;15944:31;:::i;:::-;15928:51;;16001:13;2182:38287;;;-1:-1:-1;;;;;;2182:38287:33;;-1:-1:-1;;;14951:15:33;2182:38287;;16059:29;2182:38287;;15661:15;16059:29;:::i;:::-;-1:-1:-1;;;;;;2182:38287:33;;-1:-1:-1;;;14951:15:33;2182:38287;;;;16116:28;;-1:-1:-1;;;;;;2182:38287:33;;-1:-1:-1;;;14951:15:33;2182:38287;;;;16285:44;;2182:38287;;;;;;:::i;:::-;;;;15513:896;2182:38287;15513:896;;2182:38287;;;15513:896;;2182:38287;;;;15513:896;;2182:38287;15661:15;2182:38287;15513:896;;2182:38287;;15513:896;;2182:38287;;;15513:896;;2182:38287;;;15513:896;;2182:38287;;;;;;;15513:896;;2182:38287;;15513:896;;;2182:38287;;15513:896;;;2182:38287;;15513:896;;;2182:38287;15513:896;;;2182:38287;15513:896;;;2182:38287;15513:896;;;2182:38287;15513:896;;;2182:38287;;15513:896;;;2182:38287;;;15513:896;;;2182:38287;;;;:::i;:::-;15513:896;;;2182:38287;;;;;15513:896;;;2182:38287;;15513:896;;;2182:38287;;15513:896;;;2182:38287;;;;15497:5;2182:38287;;;;;;;;;;;;;;;;;;;15513:896;;2182:38287;;-1:-1:-1;;;;;2182:38287:33;;;;;;;;15497:5;2182:38287;;;;;;;;15513:896;;2182:38287;;-1:-1:-1;;;;;2182:38287:33;;;;;;;;;15513:896;;2182:38287;;;;;;15513:896;;2182:38287;;;;;;15513:896;;2182:38287;;;;;;15513:896;;2182:38287;;;;;;;16001:13;2182:38287;;;;;15513:896;;2182:38287;;15513:896;;2182:38287;-1:-1:-1;;2182:38287:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15513:896;;;2182:38287;;;;;15513:896;;;2182:38287;;;;;;-1:-1:-1;;;;;;2182:38287:33;-1:-1:-1;;;;;2182:38287:33;;;;;;;;;;15513:896;;;2182:38287;15372:14;2182:38287;;;15513:896;;;2182:38287;;;;;15513:896;;;2182:38287;;;;;;-1:-1:-1;;2182:38287:33;;;;;;;;;;;;15513:896;;;2182:38287;;;;;15513:896;;;2182:38287;;;;;15513:896;;;2182:38287;;;;;15513:896;;;2182:38287;;;;;15513:896;;;2182:38287;;;;-1:-1:-1;;;;;2182:38287:33;;;;;;;;;;:::i;:::-;;;;;;16285:44;2182:38287;;;;;;;;;;;;;;;;;16425:72;2182:38287;;;;;;;;15513:896;2182:38287;;;;;;;;;;;;;;;;;;;;;;;;;;15513:896;;;2182:38287;;;;;;15513:896;;;2182:38287;-1:-1:-1;;;;;2182:38287:33;;;;;;;;;;;-1:-1:-1;;;;;;2182:38287:33;;;;;;;;;;15513:896;2182:38287;;;;16464:26;2182:38287;;15661:15;16464:26;:::i;:::-;2182:38287;;;;;;;;;;;;;;;;;;;;16425:72;2182:38287;;;;;;;;;;-1:-1:-1;2182:38287:33;;;;;;;;;;;;;;;;;-1:-1:-1;;2182:38287:33;;;;;;15320:80;;2182:38287;15320:80;2182:38287;15320:80;15513:896;15320:80;16425:72;15320:80;;2182:38287;15320:80;;;;2182:38287;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2182:38287:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2182:38287:33;;;16285:44;2182:38287;16285:44;;;16116:28;2182:38287;16116:28;;;16041:51;2182:38287;16041:51;;15928;2182:38287;15928:51;;;14947:344;2182:38287;;-1:-1:-1;;;;;;2182:38287:33;-1:-1:-1;;;15007:31:33;:88;;;;14947:344;15007:151;;;;14947:344;15007:216;;;;14947:344;;2182:38287;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;;;;;;;;;15007:216;-1:-1:-1;2182:38287:33;;-1:-1:-1;;;;;;2182:38287:33;-1:-1:-1;;;15182:41:33;15007:216;;:151;-1:-1:-1;2182:38287:33;;-1:-1:-1;;;;;;2182:38287:33;-1:-1:-1;;;15119:39:33;15007:151;;:88;-1:-1:-1;2182:38287:33;;-1:-1:-1;;;;;;2182:38287:33;-1:-1:-1;;;15062:33:33;15007:88;;2182:38287;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;14811:88;-1:-1:-1;;;;;;;2182:38287:33;;-1:-1:-1;;;14884:15:33;14811:88;;:69;-1:-1:-1;;;;;;;2182:38287:33;;-1:-1:-1;;;14863:17:33;14811:69;;:48;-1:-1:-1;;;;;;;2182:38287:33;;-1:-1:-1;;;14846:13:33;14811:48;;:31;-1:-1:-1;;;;;;;2182:38287:33;;-1:-1:-1;;;14829:13:33;14811:31;;2182:38287;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;;-1:-1:-1;;2182:38287:33;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;:::i;:::-;7569:10;;2182:38287;;7551:17;2182:38287;;7543:63;2182:38287;;;;;;7543:63;:::i;:::-;22325:18;;:::i;:::-;2182:38287;;;;22373:5;2182:38287;;;;;;22404:14;;2182:38287;-1:-1:-1;;;;;2182:38287:33;;;22396:60;;2182:38287;;22404:28;;22396:60;:::i;:::-;22474:9;;;2182:38287;;;22466:47;2182:38287;;;;-1:-1:-1;;;;;;2182:38287:33;-1:-1:-1;;;22474:18:33;22466:47;:::i;:::-;2182:38287;;;;;;;22670:59;22531:30;22523:56;22697:15;22531:30;;22523:56;:::i;:::-;22589:71;22616:18;;;2182:38287;22597:15;:37;;22589:71;:::i;22670:59::-;22747:23;;2182:38287;;22856:41;2182:38287;;;;;;22616:18;2182:38287;;22802:39;2182:38287;;;;22802:39;:::i;:::-;2182:38287;;;;;;22856:41;;2182:38287;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;;-1:-1:-1;;2182:38287:33;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38571:5;2182:38287;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;2182:38287:33;;;;;;;38571:5;2182:38287;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2182:38287:33;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2182:38287:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;2182:38287:33;;;;;;;;;;;;-1:-1:-1;;;;;2182:38287:33;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2182:38287:33;;;;;;;;-1:-1:-1;;;;;2182:38287:33;;;;;;;;;;;;;;-1:-1:-1;;2182:38287:33;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;9629:37:33;;;:100;;;;2182:38287;9629:157;;;;2182:38287;9629:214;;;;2182:38287;9629:270;;;;2182:38287;;;;;;;9629:270;-1:-1:-1;;;9859:40:33;;-1:-1:-1;9629:270:33;;;:214;-1:-1:-1;;;9802:41:33;;;-1:-1:-1;9629:214:33;;:157;-1:-1:-1;;;9745:41:33;;;-1:-1:-1;9629:157:33;;:100;-1:-1:-1;;;9682:47:33;;;-1:-1:-1;9629:100:33;;2182:38287;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15320:80;;2182:38287;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;2182:38287:33;;;;;;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;2182:38287:33;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;2182:38287:33;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;2182:38287:33;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;2182:38287:33;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;2182:38287:33;;;;;;;:::o;:::-;;;15320:80;;2182:38287;;;;;;;;-1:-1:-1;;;;;2182:38287:33;;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;2182:38287:33;;;;;;;;15320:80;2182:38287;;-1:-1:-1;;2182:38287:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;2182:38287:33;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;2182:38287:33;;-1:-1:-1;2182:38287:33;;;-1:-1:-1;2182:38287:33;:::o;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2182:38287:33;;-1:-1:-1;2182:38287:33;;;;;;-1:-1:-1;2182:38287:33;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2182:38287:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:::o;:::-;-1:-1:-1;2182:38287:33;;;;;;;;-1:-1:-1;;2182:38287:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2182:38287:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;;2182:38287:33;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;:::o;:::-;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;39271:294;-1:-1:-1;2182:38287:33;;;39381:5;2182:38287;;;;;39408:9;;;2182:38287;;;-1:-1:-1;;;;;;2182:38287:33;-1:-1:-1;;;39408:22:33;39404:124;;39544:14;;2182:38287;-1:-1:-1;;;;;2182:38287:33;;39271:294::o;39404:124::-;-1:-1:-1;39453:18:33;2182:38287;-1:-1:-1;;;;;2182:38287:33;;39446:25::o;2182:38287::-;;;;:::o;:::-;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;:::o;:::-;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;:::o;:::-;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;31803:1820;2182:38287;-1:-1:-1;2182:38287:33;31894:5;2182:38287;;;-1:-1:-1;2182:38287:33;31925:14;;;;31917:60;2182:38287;;;;;;;;31925:28;;31917:60;:::i;:::-;32013:15;;;2182:38287;31995:15;:33;2182:38287;;;32067:11;;;2182:38287;;;;;;;;;;;;32082:19;32067:34;;2182:38287;;32067:11;32145:35;;2182:38287;;;;;;-1:-1:-1;;;;;;2182:38287:33;-1:-1:-1;;;32214:20:33;;;:57;;31803:1820;32210:933;;;-1:-1:-1;2182:38287:33;;-1:-1:-1;;2182:38287:33;32013:15;2182:38287;;;33218:11;;;2182:38287;-1:-1:-1;2182:38287:33;;;;;;-1:-1:-1;;;33248:48:33;;-1:-1:-1;;;;;2182:38287:33;;;32082:19;33248:48;;2182:38287;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2182:38287:33;33248:48;;;;;;33240:74;33248:48;-1:-1:-1;33248:48:33;;;33240:74;;:::i;:::-;2182:38287;;;-1:-1:-1;;;;;;2182:38287:33;-1:-1:-1;;;33329:18:33;;:42;;31803:1820;33325:227;;31803:1820;-1:-1:-1;2182:38287:33;;;;;;-1:-1:-1;;;;;2182:38287:33;;33567:49;;2182:38287;;33567:49;31803:1820::o;33325:227::-;-1:-1:-1;2182:38287:33;;33414:12;;;2182:38287;;;33428:16;;;2182:38287;;;;-1:-1:-1;;;33395:50:33;;-1:-1:-1;;;;;2182:38287:33;;;32082:19;33395:50;;2182:38287;;;;;;;;;33414:12;;2182:38287;;33428:16;;2182:38287;;;;;;;;;33395:50;;;;;;;33488:53;2182:38287;33395:50;;33387:82;33395:50;;33567:49;33395:50;-1:-1:-1;33395:50:33;;;33387:82;;:::i;:::-;2182:38287;;;;;;;;-1:-1:-1;;;;;2182:38287:33;;;;33488:53;33325:227;;;;33395:50;;;;;;;;;;;;;;:::i;:::-;2182:38287;;;-1:-1:-1;2182:38287:33;;;;;33329:42;33351:16;2182:38287;33351:16;;2182:38287;33351:20;;33329:42;;33248:48;;;;2182:38287;33248:48;2182:38287;33248:48;;;;;;;:::i;32210:933::-;32302:16;;;2182:38287;32302:16;;2182:38287;;;32321:11;32082:19;32379:22;32336:5;32302:30;2182:38287;32321:11;;;2182:38287;;32302:30;;:::i;:::-;2182:38287;32379:22;;;:::i;:::-;2182:38287;;;;;;;31894:5;32474:11;;2182:38287;;;;;;;;;-1:-1:-1;2182:38287:33;32462:11;2182:38287;;;-1:-1:-1;2182:38287:33;32462:41;2182:38287;;32462:41;:::i;:::-;2182:38287;;32521:17;32517:136;;32210:933;32670:7;32666:158;;32210:933;32462:11;32854:30;:11;;2182:38287;;;32854:30;;:::i;:::-;32902:10;32898:127;;32210:933;-1:-1:-1;2182:38287:33;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2182:38287:33;;;;;;;33043:69;;;33126:7::o;32898:127::-;-1:-1:-1;2182:38287:33;;;;;;-1:-1:-1;;;32940:42:33;;-1:-1:-1;;;;;2182:38287:33;;;32082:19;32940:42;;2182:38287;;;;;;;;;;;;;;;;-1:-1:-1;2182:38287:33;32940:42;;;;;;;-1:-1:-1;32940:42:33;;;32898:127;2182:38287;;;;32898:127;;;2182:38287;;;-1:-1:-1;;;2182:38287:33;;;32082:19;2182:38287;;;;;;;;;;;;;;;;32940:42;;;;2182:38287;32940:42;2182:38287;32940:42;;;;;;;:::i;:::-;;;;32666:158;-1:-1:-1;2182:38287:33;;32067:11;2182:38287;;;-1:-1:-1;;;32705:37:33;;-1:-1:-1;;;;;2182:38287:33;;;;;;;32082:19;32705:37;;2182:38287;;;;;;;;;;;;;;;;;-1:-1:-1;;2182:38287:33;32705:37;;;;;;;32697:69;32462:11;32705:37;32854:30;32705:37;-1:-1:-1;32705:37:33;;;32697:69;;:::i;:::-;32784:25;2182:38287;;;32784:25;:::i;:::-;2182:38287;;32666:158;;;;;32517:136;-1:-1:-1;2182:38287:33;;;;;;-1:-1:-1;;;32566:46:33;;-1:-1:-1;;;;;2182:38287:33;;;32082:19;32566:46;;2182:38287;;;;;;;;;;;;;;;;-1:-1:-1;;2182:38287:33;32566:46;;;;;;32558:80;32566:46;-1:-1:-1;32566:46:33;;;32558:80;;:::i;:::-;32517:136;;32214:57;31925:14;32238:33;;;32214:57;;;2182:38287;;;-1:-1:-1;;;2182:38287:33;;;32082:19;2182:38287;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;32082:19;2182:38287;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;;;;;;-1:-1:-1;;;2182:38287:33;;;;;;;3426:215:15;-1:-1:-1;;;;;2182:38287:33;;;;3510:22:15;;3506:91;;-1:-1:-1;;;;;;;;;;;2182:38287:33;;-1:-1:-1;;;;;;2182:38287:33;;;;;;;;3996:40:15;-1:-1:-1;;3996:40:15;3426:215::o;3506:91::-;2182:38287:33;;-1:-1:-1;;;3555:31:15;;3530:1;3555:31;;;2182:38287:33;;;3555:31:15;12509:209:33;12601:10;-1:-1:-1;2182:38287:33;12583:17;2182:38287;;;;-1:-1:-1;2182:38287:33;;;12579:106;;12601:10;12509:209;:::o;12579:106::-;2182:38287;;-1:-1:-1;;;12635:39:33;;2182:38287;;12635:39;2182:38287;12601:10;12635:39;;;;;;;-1:-1:-1;12635:39:33;;;12628:46;;:::o;12635:39::-;;;2182:38287;12635:39;;2182:38287;12635:39;;;;;;2182:38287;12635:39;;;:::i;:::-;;;2182:38287;;;;;-1:-1:-1;;;;;2182:38287:33;;;;;;12628:46;:::o;12635:39::-;;;-1:-1:-1;12635:39:33;;40084:383;-1:-1:-1;;;;;;2182:38287:33;-1:-1:-1;;;40168:14:33;;40164:47;;-1:-1:-1;;;40225:13:33;;40221:46;;-1:-1:-1;;;40281:13:33;;40277:46;;-1:-1:-1;;;40337:17:33;;40333:50;;-1:-1:-1;;;40397:15:33;40393:48;;2182:38287;;;;;;;;-1:-1:-1;;;;;2182:38287:33;;;;;;;;;;40084:383;:::o;40393:48::-;2182:38287;;;;;:::i;:::-;;;;-1:-1:-1;;;2182:38287:33;;;;40416:25;:::o;40333:50::-;2182:38287;;;;;;:::i;:::-;;;;-1:-1:-1;;;2182:38287:33;;;;40356:27;:::o;40277:46::-;2182:38287;;;;;;:::i;:::-;;;;-1:-1:-1;;;2182:38287:33;;;;40300:23;:::o;40221:46::-;2182:38287;;;;;;:::i;:::-;;;;-1:-1:-1;;;2182:38287:33;;;;40244:23;:::o;40164:47::-;2182:38287;;;;;;:::i;:::-;;;;-1:-1:-1;;;2182:38287:33;;;;40187:24;:::o;2679:162:15:-;-1:-1:-1;;;;;;;;;;;2182:38287:33;-1:-1:-1;;;;;2182:38287:33;987:10:18;2738:23:15;2734:101;;2679:162::o;2734:101::-;2182:38287:33;;-1:-1:-1;;;2784:40:15;;987:10:18;2784:40:15;;;2182:38287:33;;;2784:40:15;3749:292:29;-1:-1:-1;;;;;;;;;;;2407:1:29;2182:38287:33;;4560:63:29;3644:93;;2407:1;2182:38287:33;;3749:292:29:o;3644:93::-;2182:38287:33;;-1:-1:-1;;;3696:30:29;;;;;7082:141:23;2182:38287:33;3147:66:23;2182:38287:33;;;;7148:18:23;7144:73;;7082:141::o;7144:73::-;2182:38287:33;;-1:-1:-1;;;7189:17:23;;;;;4691:549:26;;3490:129:28;4691:549:26;;3490:129:28;;;;;;;;4874:72:26;;;;4691:549;4870:364;;;4774:252:28;;;;;;;;3490:129;;4774:252;;;3490:129;4774:252;;;;;;4962:32:26;:::o;4870:364::-;5011:223;;;2182:38287:33;;-1:-1:-1;;;5045:24:26;;-1:-1:-1;;;;;2182:38287:33;;;5045:24:26;;;2182:38287:33;;;5045:24:26;5011:223;4536:73:28;5090:33:26;4536:73:28;;2182:38287:33;;;3490:129:28;2182:38287:33;;;;;5086:148:26;2182:38287:33;;-1:-1:-1;;;5204:19:26;;;;;4874:72;-1:-1:-1;4536:73:28;4886:33:26;;;4874:72;4886:59;4923:18;;;:22;;4874:72;","linkReferences":{},"immutableReferences":{"36508":[{"start":9876,"length":32},{"start":10061,"length":32}]}},"methodIdentifiers":{"AUCTION()":"63779c74","AUCTION_DUTCH()":"fe78aecf","AUCTION_ENGLISH()":"b2b7bdd5","AUCTION_REVERSE_DUTCH()":"1c8e57f8","AUCTION_REVERSE_ENGLISH()":"c104d24d","BENCHMARK()":"f152d325","BOUNTY()":"d081f2b8","CLAIM()":"73d74876","PITCH()":"63326459","UPGRADE_INTERFACE_VERSION()":"ad3cb1cc","acceptAuction(bytes32,uint256)":"a86592ba","acceptSubmission(bytes32,address)":"aeb87ecf","addForwarder(address)":"5c41d2fe","cancelTask(bytes32)":"ee8ca3b5","claimTask(bytes32,uint256)":"8c58d5fc","createTask(uint256,uint256,bytes4,uint256,uint256,bytes32,string,bytes4)":"1e52fce7","defaultFeeBps()":"bcae25a4","evaluatorFor(bytes32)":"9d691d36","feeForTask(bytes32)":"da0eb223","feeRecipient()":"46904840","forfeitAndReopen(bytes32)":"afdc54cd","getBids(bytes32)":"9d4f988b","getTask(bytes32)":"15a29035","getWorkerStats(address)":"365ba2dd","initialize(address,address,uint16)":"7ebef529","isTrustedForwarder(address)":"572b6c05","owner()":"8da5cb5b","proxiableUUID()":"52d1902d","rateTask(bytes32,uint8,uint256,uint256,string,bytes32)":"2144ea49","refundExpired(bytes32)":"cc3e049b","removeForwarder(address)":"4d93172d","renounceOwnership()":"715018a6","reputationRegistry()":"c8db44e3","requesterNonce(address)":"9f63f2a6","selectLowestBidder(bytes32)":"537da21f","selectWorker(bytes32,address)":"ce37a263","setDefaultFeeBps(uint16)":"4488b652","setFeeRecipient(address)":"e74b981b","setReputationRegistry(address)":"3f0ce714","stakeForfeit(bytes32)":"d8648871","submitBid(bytes32,uint256)":"91dc1d30","submitPitch(bytes32,bytes32)":"1a22aaa4","submitProof(bytes32,bytes32,bytes32,uint256)":"46170ca4","submitWork(bytes32,bytes32)":"db7260bc","supportsInterface(bytes4)":"01ffc9a7","taskBids(bytes32,uint256)":"a6eecb72","taskPitchHashes(bytes32,uint256)":"b4f9d6ad","taskProofHashes(bytes32,uint256)":"a1f0c254","tasks(bytes32)":"e579f500","totalFeesCollected()":"60c6d8ae","transferOwnership(address)":"f2fde38b","trustedForwarders(address)":"54776bb9","updateTask(bytes32,uint256,uint256,uint256,uint256)":"ae2925a6","upgradeToAndCall(address,bytes)":"4f1ef286","usdcToken()":"11eac855","workerStats(address)":"e48a3a60"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"worker\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"acceptedPrice\",\"type\":\"uint256\"}],\"name\":\"AuctionAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"worker\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"name\":\"BidSubmitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newRecipient\",\"type\":\"address\"}],\"name\":\"FeeRecipientUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"newFeeBps\",\"type\":\"uint16\"}],\"name\":\"FeesUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"trusted\",\"type\":\"bool\"}],\"name\":\"ForwarderUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"worker\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"pitchHash\",\"type\":\"bytes32\"}],\"name\":\"PitchSubmitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"worker\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"proofHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"proofType\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"metricValue\",\"type\":\"uint256\"}],\"name\":\"ProofSubmitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newRegistry\",\"type\":\"address\"}],\"name\":\"ReputationRegistryUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"StakeForfeited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"StakeReturned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"requester\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"worker\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"workerPayment\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"platformFee\",\"type\":\"uint256\"}],\"name\":\"TaskAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"requester\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"refundAmount\",\"type\":\"uint256\"}],\"name\":\"TaskCancelled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"TaskClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"requester\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"reward\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"expiryTime\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"mode\",\"type\":\"bytes4\"}],\"name\":\"TaskCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"requester\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"refundAmount\",\"type\":\"uint256\"}],\"name\":\"TaskExpired\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"worker\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"rating\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"raterAgentId\",\"type\":\"uint256\"}],\"name\":\"TaskRated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"}],\"name\":\"TaskReopened\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"worker\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"deliverable\",\"type\":\"bytes32\"}],\"name\":\"TaskSubmitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newReward\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newExpiryTime\",\"type\":\"uint256\"}],\"name\":\"TaskUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"worker\",\"type\":\"address\"}],\"name\":\"TaskWorkerSelected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"AUCTION\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"AUCTION_DUTCH\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"AUCTION_ENGLISH\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"AUCTION_REVERSE_DUTCH\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"AUCTION_REVERSE_ENGLISH\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BENCHMARK\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BOUNTY\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"CLAIM\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PITCH\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"name\":\"acceptAuction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"worker\",\"type\":\"address\"}],\"name\":\"acceptSubmission\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"}],\"name\":\"addForwarder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"}],\"name\":\"cancelTask\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"claimTask\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"reward\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"mode\",\"type\":\"bytes4\"},{\"internalType\":\"uint256\",\"name\":\"pitchDeadline\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bidDeadline\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"contentHash\",\"type\":\"bytes32\"},{\"internalType\":\"string\",\"name\":\"contentURI\",\"type\":\"string\"},{\"internalType\":\"bytes4\",\"name\":\"auctionSubtype\",\"type\":\"bytes4\"}],\"name\":\"createTask\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"defaultFeeBps\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"}],\"name\":\"evaluatorFor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"evaluator\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"}],\"name\":\"feeForTask\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeRecipient\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"}],\"name\":\"forfeitAndReopen\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"}],\"name\":\"getBids\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"worker\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"internalType\":\"struct TaskMarket.Bid[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"}],\"name\":\"getTask\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"requester\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"worker\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"reward\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"createdAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiryTime\",\"type\":\"uint256\"},{\"internalType\":\"enum ITMP.TaskStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"rating\",\"type\":\"uint8\"},{\"internalType\":\"bytes4\",\"name\":\"mode\",\"type\":\"bytes4\"},{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"claimedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pitchDeadline\",\"type\":\"uint256\"},{\"internalType\":\"uint16\",\"name\":\"feeBps\",\"type\":\"uint16\"},{\"internalType\":\"uint256\",\"name\":\"bidDeadline\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPrice\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"deliverable\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"contentHash\",\"type\":\"bytes32\"},{\"internalType\":\"string\",\"name\":\"contentURI\",\"type\":\"string\"},{\"internalType\":\"bytes4\",\"name\":\"auctionSubtype\",\"type\":\"bytes4\"},{\"internalType\":\"address\",\"name\":\"lowestBidder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lowestBidPrice\",\"type\":\"uint256\"}],\"internalType\":\"struct ITMP.Task\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"worker\",\"type\":\"address\"}],\"name\":\"getWorkerStats\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"completedTasks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"ratedTasks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalStars\",\"type\":\"uint256\"}],\"internalType\":\"struct ITMP.WorkerStats\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_usdcToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_feeRecipient\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"_defaultFeeBps\",\"type\":\"uint16\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"isTrustedForwarder\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"rating\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"workerAgentId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"raterAgentId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"feedbackURI\",\"type\":\"string\"},{\"internalType\":\"bytes32\",\"name\":\"feedbackHash\",\"type\":\"bytes32\"}],\"name\":\"rateTask\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"}],\"name\":\"refundExpired\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"}],\"name\":\"removeForwarder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reputationRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"requesterNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"}],\"name\":\"selectLowestBidder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"worker\",\"type\":\"address\"}],\"name\":\"selectWorker\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"feeBps\",\"type\":\"uint16\"}],\"name\":\"setDefaultFeeBps\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"setFeeRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"registry\",\"type\":\"address\"}],\"name\":\"setReputationRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"stakeForfeit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"name\":\"submitBid\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"pitchHash\",\"type\":\"bytes32\"}],\"name\":\"submitPitch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"proofHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"proofType\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"metricValue\",\"type\":\"uint256\"}],\"name\":\"submitProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"deliverable\",\"type\":\"bytes32\"}],\"name\":\"submitWork\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"taskBids\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"worker\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"taskPitchHashes\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"taskProofHashes\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"tasks\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"requester\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"worker\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"reward\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"createdAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiryTime\",\"type\":\"uint256\"},{\"internalType\":\"enum ITMP.TaskStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"rating\",\"type\":\"uint8\"},{\"internalType\":\"bytes4\",\"name\":\"mode\",\"type\":\"bytes4\"},{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"claimedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pitchDeadline\",\"type\":\"uint256\"},{\"internalType\":\"uint16\",\"name\":\"feeBps\",\"type\":\"uint16\"},{\"internalType\":\"uint256\",\"name\":\"bidDeadline\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPrice\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"deliverable\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"contentHash\",\"type\":\"bytes32\"},{\"internalType\":\"string\",\"name\":\"contentURI\",\"type\":\"string\"},{\"internalType\":\"bytes4\",\"name\":\"auctionSubtype\",\"type\":\"bytes4\"},{\"internalType\":\"address\",\"name\":\"lowestBidder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lowestBidPrice\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalFeesCollected\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"trustedForwarders\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"newReward\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newExpiryTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newBidDeadline\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newPitchDeadline\",\"type\":\"uint256\"}],\"name\":\"updateTask\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"usdcToken\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"workerStats\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"completedTasks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"ratedTasks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalStars\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Supports Bounty, Claim, Pitch, Benchmark, and Auction modes with platform fees and staking. All mutating functions are called by a trusted PGTR forwarder (ERC-8194). The authenticated actor (requester/worker) is read from the forwarder via _effectiveSender(), which calls IPGTRForwarder(msg.sender).pgtrSender(). Task IDs are contract-generated: keccak256(abi.encode(block.chainid, address(this), requester, requesterNonce[requester]++)) Backends can pre-compute the ID by reading requesterNonce[requester] before submitting the transaction. UUPS upgradeable \\u2014 proxy address is permanent; only the implementation changes. Storage layout rule: new state variables MUST be appended after existing ones and MUST consume slots from __gap. Never insert between existing variables.\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}],\"FailedCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"ReentrancyGuardReentrantCall()\":[{\"details\":\"Unauthorized reentrant call.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"acceptAuction(bytes32,uint256)\":{\"params\":{\"price\":\"Accepted price in USDC base units (must be <= task.maxPrice)\",\"taskId\":\"Task identifier\"}},\"acceptSubmission(bytes32,address)\":{\"params\":{\"taskId\":\"Task identifier\",\"worker\":\"Worker address to pay\"}},\"addForwarder(address)\":{\"params\":{\"forwarder\":\"Address to trust as a forwarder\"}},\"cancelTask(bytes32)\":{\"params\":{\"taskId\":\"Task identifier\"}},\"claimTask(bytes32,uint256)\":{\"params\":{\"stakeAmount\":\"USDC stake amount (0 = no stake required). If > 0, the forwarder must transfer the stake to this contract before calling.\",\"taskId\":\"Task identifier\"}},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"createTask(uint256,uint256,bytes4,uint256,uint256,bytes32,string,bytes4)\":{\"params\":{\"auctionSubtype\":\"Auction subtype selector (bytes4(0) for non-auction tasks)\",\"bidDeadline\":\"Seconds from now for bid window (Auction mode only, 0 otherwise)\",\"contentHash\":\"Optional keccak256 of off-chain task description (bytes32(0) if unused)\",\"contentURI\":\"Optional URI pointing to extended task metadata (empty string if unused)\",\"duration\":\"Task lifetime in seconds\",\"mode\":\"4-byte mode selector (use BOUNTY/CLAIM/PITCH/BENCHMARK/AUCTION)\",\"pitchDeadline\":\"Seconds from now for pitch window (Pitch mode only, 0 otherwise)\",\"reward\":\"USDC reward (6 decimals); for Auction = max price\"},\"returns\":{\"taskId\":\" Contract-generated canonical task identifier\"}},\"evaluatorFor(bytes32)\":{\"params\":{\"taskId\":\"Task identifier\"},\"returns\":{\"evaluator\":\"Address that can call acceptSubmission() for this task\"}},\"feeForTask(bytes32)\":{\"params\":{\"taskId\":\"Task identifier\"},\"returns\":{\"_0\":\"Fee in basis points for this task\"}},\"forfeitAndReopen(bytes32)\":{\"details\":\"Can only be called after the task has expired. Claimer's stake is transferred to fee recipient as a non-delivery penalty.\",\"params\":{\"taskId\":\"Task identifier\"}},\"getBids(bytes32)\":{\"params\":{\"taskId\":\"Task identifier\"},\"returns\":{\"_0\":\"bids Array of Bid structs\"}},\"getTask(bytes32)\":{\"params\":{\"taskId\":\"Task identifier\"},\"returns\":{\"_0\":\"task Task struct\"}},\"getWorkerStats(address)\":{\"params\":{\"worker\":\"Worker address\"},\"returns\":{\"_0\":\"Worker stats struct (completedTasks, ratedTasks, totalStars)\"}},\"initialize(address,address,uint16)\":{\"params\":{\"_defaultFeeBps\":\"Default platform fee in basis points (500 = 5%)\",\"_feeRecipient\":\"Address to receive platform fees\",\"_usdcToken\":\"USDC token address on Base\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"rateTask(bytes32,uint8,uint256,uint256,string,bytes32)\":{\"params\":{\"feedbackHash\":\"keccak256 hash of the feedback file content\",\"feedbackURI\":\"URI of the canonical off-chain feedback file\",\"raterAgentId\":\"ERC-8004 agentId of the requester giving the rating, or 0 if unknown\",\"rating\":\"Rating (0-100)\",\"taskId\":\"Task identifier\",\"workerAgentId\":\"ERC-8004 agentId of worker, or 0 if unknown\"}},\"refundExpired(bytes32)\":{\"params\":{\"taskId\":\"Task identifier\"}},\"removeForwarder(address)\":{\"params\":{\"forwarder\":\"Address to remove from trusted forwarders\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"selectLowestBidder(bytes32)\":{\"details\":\"O(1): submitBid() maintains a running minimum in task.lowestBidder/lowestBidPrice.\",\"params\":{\"taskId\":\"Task identifier\"}},\"selectWorker(bytes32,address)\":{\"params\":{\"taskId\":\"Task identifier\",\"worker\":\"Selected worker address\"}},\"setDefaultFeeBps(uint16)\":{\"params\":{\"feeBps\":\"New fee in basis points\"}},\"setFeeRecipient(address)\":{\"params\":{\"recipient\":\"New fee recipient address\"}},\"setReputationRegistry(address)\":{\"params\":{\"registry\":\"New reputation registry address\"}},\"submitBid(bytes32,uint256)\":{\"params\":{\"price\":\"Bid price in USDC base units (must be <= maxPrice)\",\"taskId\":\"Task identifier\"}},\"submitPitch(bytes32,bytes32)\":{\"params\":{\"pitchHash\":\"Content hash (typically keccak256(abi.encode(taskId, worker, pitchText)))\",\"taskId\":\"Task identifier\"}},\"submitProof(bytes32,bytes32,bytes32,uint256)\":{\"params\":{\"metricValue\":\"Task-specific numeric score\",\"proofHash\":\"Content hash (typically keccak256(abi.encode(taskId, worker, proofData)))\",\"proofType\":\"bytes32 selector identifying the proof scheme\",\"taskId\":\"Task identifier\"}},\"submitWork(bytes32,bytes32)\":{\"params\":{\"deliverable\":\"Content hash (keccak256, IPFS CID, or ZK commitment)\",\"taskId\":\"Task identifier\"}},\"supportsInterface(bytes4)\":{\"details\":\"Returns true for ITMP and IERC165 interface IDs.\",\"params\":{\"interfaceId\":\"4-byte interface selector to check\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"updateTask(bytes32,uint256,uint256,uint256,uint256)\":{\"params\":{\"newBidDeadline\":\"New absolute bid deadline (Auction only, 0 = no change)\",\"newExpiryTime\":\"New absolute expiry Unix timestamp (0 = no change)\",\"newPitchDeadline\":\"New absolute pitch deadline (Pitch only, 0 = no change)\",\"newReward\":\"New reward amount (0 = no change); if higher, forwarder pre-transfers delta\",\"taskId\":\"Task identifier\"}},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"title\":\"TaskMarket\",\"version\":1},\"userdoc\":{\"events\":{\"AuctionAccepted(bytes32,address,uint256)\":{\"notice\":\"Emitted when a worker accepts a dutch/reverse_dutch auction's clock price. Coexists with the legacy BidSubmitted + TaskWorkerSelected pair emitted by acceptAuction so older indexers keep working; new indexers should prefer this single event for clarity.\"},\"PitchSubmitted(bytes32,address,bytes32)\":{\"notice\":\"Emitted when a worker anchors a pitch hash for a pitch-mode task.\"},\"ProofSubmitted(bytes32,address,bytes32,bytes32,uint256)\":{\"notice\":\"Emitted when a worker anchors a proof hash for a benchmark-mode task. proofType is the keccak256(typeString) bytes32 selector; metricValue is a free-form numeric score whose meaning is task-specific.\"},\"ReputationRegistryUpdated(address)\":{\"notice\":\"Emitted when a reputation registry is configured or changed.\"},\"TaskAccepted(bytes32,address,address,uint256,uint256)\":{\"notice\":\"Emitted when a task is completed and worker is paid.\"},\"TaskCancelled(bytes32,address,uint256)\":{\"notice\":\"Emitted when a requester cancels an open task and receives a refund.\"},\"TaskCreated(bytes32,address,uint256,uint256,bytes4)\":{\"notice\":\"Emitted when a task is created and reward is escrowed.\"},\"TaskExpired(bytes32,address,uint256)\":{\"notice\":\"Emitted when a task expires and the reward is refunded.\"},\"TaskRated(bytes32,address,uint8,uint256)\":{\"notice\":\"Emitted when a requester rates a completed task.\"},\"TaskSubmitted(bytes32,address,bytes32)\":{\"notice\":\"Emitted when a worker submits work (deliverable hash anchored on-chain).\"}},\"kind\":\"user\",\"methods\":{\"acceptAuction(bytes32,uint256)\":{\"notice\":\"Directly award an open auction task to a worker at a given price. Used by clock-based auction subtypes (dutch, reverse_dutch). The worker is the authenticated actor (pgtrSender).\"},\"acceptSubmission(bytes32,address)\":{\"notice\":\"Accept submission and release payment to worker. The requester is the authenticated actor (pgtrSender).\"},\"addForwarder(address)\":{\"notice\":\"Add a trusted PGTR forwarder (owner only)\"},\"cancelTask(bytes32)\":{\"notice\":\"Cancel an open task and refund the escrowed reward to the requester. The requester is the authenticated actor (pgtrSender). Auction tasks may only be cancelled if no bids have been submitted.\"},\"claimTask(bytes32,uint256)\":{\"notice\":\"Claim a Claim-mode task. The worker is the authenticated actor (pgtrSender).\"},\"createTask(uint256,uint256,bytes4,uint256,uint256,bytes32,string,bytes4)\":{\"notice\":\"Create a new task with USDC escrow. Task ID is contract-generated: keccak256(abi.encode(block.chainid, address(this), requester, nonce)) Callers SHOULD pre-compute the ID by reading requesterNonce[requester] before submitting this transaction. The requester is the authenticated actor from the PGTR forwarder (pgtrSender). The USDC reward MUST be transferred to this contract by the forwarder before calling.\"},\"defaultFeeBps()\":{\"notice\":\"Platform fee in basis points deducted from reward on task completion. Example: 500 = 5%.\"},\"evaluatorFor(bytes32)\":{\"notice\":\"Returns the address responsible for evaluating work on a task (ITMPMode). For all modes except Benchmark, this is the task requester. For Benchmark mode, this is the ERC-8004 Validation Registry.\"},\"feeForTask(bytes32)\":{\"notice\":\"Per-task fee in basis points stamped at task creation (ITMPFees).\"},\"feeRecipient()\":{\"notice\":\"Address that receives platform fees.\"},\"forfeitAndReopen(bytes32)\":{\"notice\":\"Forfeit claimer's stake and reopen Claim task. The requester is the authenticated actor (pgtrSender).\"},\"getBids(bytes32)\":{\"notice\":\"Get all bids for a task\"},\"getTask(bytes32)\":{\"notice\":\"Get task details\"},\"getWorkerStats(address)\":{\"notice\":\"Get worker statistics\"},\"initialize(address,address,uint16)\":{\"notice\":\"Initialize the proxy (replaces constructor for UUPS pattern)\"},\"isTrustedForwarder(address)\":{\"notice\":\"Returns true if addr is a trusted PGTR forwarder (ERC-8194 requirement).\"},\"rateTask(bytes32,uint8,uint256,uint256,string,bytes32)\":{\"notice\":\"Rate a completed task and submit ERC-8004 feedback. The requester is the authenticated actor (pgtrSender).\"},\"refundExpired(bytes32)\":{\"notice\":\"Refund expired task reward to requester. NORMATIVE: This function MUST bypass all hooks and extension contracts. Funds are ALWAYS recoverable after expiry. Special case: Auction tasks with a selected winner auto-pay the worker.\"},\"removeForwarder(address)\":{\"notice\":\"Remove a trusted PGTR forwarder (owner only)\"},\"reputationRegistry()\":{\"notice\":\"Address of the ERC-8004 Reputation Registry used for feedback. Returns address(0) if reputation integration is disabled.\"},\"requesterNonce(address)\":{\"notice\":\"Per-requester nonce used to generate canonical task IDs. Read this before calling createTask to pre-compute the task ID off-chain.\"},\"selectLowestBidder(bytes32)\":{\"notice\":\"Select the lowest bidder after bid deadline.\"},\"selectWorker(bytes32,address)\":{\"notice\":\"Select a worker for Pitch mode. The requester is the authenticated actor (pgtrSender).\"},\"setDefaultFeeBps(uint16)\":{\"notice\":\"Set default platform fee (owner only)\"},\"setFeeRecipient(address)\":{\"notice\":\"Set fee recipient (owner only)\"},\"setReputationRegistry(address)\":{\"notice\":\"Set the ERC-8004 reputation registry address (owner only)\"},\"submitBid(bytes32,uint256)\":{\"notice\":\"Submit a bid on an Auction mode task. The worker is the authenticated actor (pgtrSender).\"},\"submitPitch(bytes32,bytes32)\":{\"notice\":\"Anchor a pitch-content hash on-chain for a pitch-mode task. The pitch text itself stays off-chain; the hash is a tamper-proof commitment that third parties can use to verify any operator-served pitch text matches what the worker actually submitted. The worker is the authenticated actor (pgtrSender).\"},\"submitProof(bytes32,bytes32,bytes32,uint256)\":{\"notice\":\"Anchor a benchmark-proof hash on-chain for a benchmark-mode task. The proof data stays off-chain; the hash here is a tamper-proof commitment. proofType is a free-form bytes32 selector (typically keccak256(typeString)); metricValue is a task-specific numeric score. The worker is the authenticated actor (pgtrSender).\"},\"submitWork(bytes32,bytes32)\":{\"notice\":\"Record that a worker has submitted deliverable work. The worker is the authenticated actor (pgtrSender). Anchors a content hash on-chain for tamper-evident audit trail. State change is mode-dependent: BOUNTY/BENCHMARK \\u2192 PendingApproval CLAIM/PITCH/AUCTION \\u2192 no state change (worker already locked)\"},\"supportsInterface(bytes4)\":{\"notice\":\"ERC-165 interface detection.\"},\"taskPitchHashes(bytes32,uint256)\":{\"notice\":\"Anchored pitch hashes per task. Pitch content stays off-chain; the hash here is a tamper-proof commitment so third parties can verify text retrieved from any operator matches what was submitted on-chain.\"},\"taskProofHashes(bytes32,uint256)\":{\"notice\":\"Anchored proof hashes per task. Same commitment pattern as pitches.\"},\"totalFeesCollected()\":{\"notice\":\"Cumulative platform fees collected since deployment.\"},\"trustedForwarders(address)\":{\"notice\":\"Mapping of trusted PGTR forwarders. Multiple forwarders are supported for rotation and redundancy.\"},\"updateTask(bytes32,uint256,uint256,uint256,uint256)\":{\"notice\":\"Update an open task's parameters. Pass 0 for any field to leave unchanged. The requester is the authenticated actor (pgtrSender). Auction tasks may only be updated if no bids have been submitted. If newReward > current reward, the forwarder must transfer the additional USDC to this contract before calling.\"}},\"notice\":\"Multi-mode decentralized task marketplace with USDC escrow on Base L2. Reference implementation of the Task Market Protocol (TMP) EIP.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/TaskMarket.sol\":\"TaskMarket\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/=lib/openzeppelin-contracts/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0x85c3b9bac35a90dce9ed9b31532c3739cae432359d8d7ff59cb6712f21c7ed14\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a084d32ad4ad5b1d4494124d7695334dbeff81c2d1846a01ef1215153dd38eed\",\"dweb:/ipfs/QmbzDrfeogDd3n65mADjLuy97oAMgh2CtiUxKKEpM3WB8b\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x30d125b8417684dbfea3e8d57284b353a86b22077237b4aaf098c0b54b153e16\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2813775a6326190e75dfa9005c1abbdb1e541c195c0bf5656dd4199e8c66fd8d\",\"dweb:/ipfs/QmYDKANBezQXNrEDyJ69RVXkgypW1hWj7MAvjfdNHTZY8L\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x4918e374e9ce84e9b196486bafbd46851d5e72ab315e31f0b1d7c443dcfea5bf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ced247afc54a93a13922ebbd63add61130abe483ab5b5b78e7e991d564d150e\",\"dweb:/ipfs/QmTfxjcTgfekiguegjvYMyfqhyRNffui17f8xi86BCZNVt\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xad316bdc3ee64a0e29773256245045dc57b92660799ff14f668f7c0da9456a9d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://66463434d266816fca2a3a2734ceee88544e61b7cc3899c50333b46e8e771455\",\"dweb:/ipfs/QmPYCzHjki1HQLvBub3uUqoUKGrwdgR3xP9Zpya14YTdXS\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol\":{\"keccak256\":\"0xbf2aefe54b76d7f7bcd4f6da1080b7b1662611937d870b880db584d09cea56b5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5e7e2f12e0feec75296e57f51f82fdaa8bd1551f4b8cc6560442c0bf60f818c\",\"dweb:/ipfs/QmcW9wDMaQ8RbQibMarfp17a3bABzY5KraWe2YDwuUrUoz\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0x82f757819bf2429a0d4db141b99a4bbe5039e4ef86dfb94e2e6d40577ed5b28b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://37c30ed931e19fb71fdb806bb504cfdb9913b7127545001b64d4487783374422\",\"dweb:/ipfs/QmUBHpv4hm3ZmwJ4GH8BeVzK4mv41Q6vBbWXxn8HExPXza\"]},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0xa1ad192cd45317c788618bef5cb1fb3ca4ce8b230f6433ac68cc1d850fb81618\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b43447bb85a53679d269a403c693b9d88d6c74177dfb35eddca63abaf7cf110a\",\"dweb:/ipfs/QmXSDmpd4bNZj1PDgegr6C4w1jDaWHXCconC3rYiw9TSkQ\"]},\"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0x20462ddb2665e9521372c76b001d0ce196e59dbbd989de9af5576cad0bd5628b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f417fd12aeec8fbfaceaa30e3a08a0724c0bc39de363e2acf6773c897abbaf6d\",\"dweb:/ipfs/QmU4Hko6sApdweVM92CsiuLKkCk8HfyBeutF89PCTz5Tye\"]},\"lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ab7b6d5b9e2b88176312967fe0f0e78f3d9a1422fa5e4b64e2440c35869b5d08\",\"dweb:/ipfs/QmXKYWWyzcLg1B2k7Sb1qkEXgLCYfXecR9wYW5obRzWP1Q\"]},\"lib/openzeppelin-contracts/contracts/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x1a26353563a2c63b4120ea0b94727253eeff84fe2241d42c1452308b9080e66a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://49a95e36d267828b4357186a79917002d616d8634e25d1f9818e2354cd2e7d34\",\"dweb:/ipfs/QmWDkqE4KkyLAS2UkLsRgXE1FGB1qfEgBC3zMXBVsVWfdk\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0x0fa9e0d3a859900b5a46f70a03c73adf259603d5e05027a37fe0b45529d85346\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c2add4da0240c9f2ce47649c8bb6b11b40e98cf6f88b8bdc76b2704e89391710\",\"dweb:/ipfs/QmNQTwF2uVzu4CRtNxr8bxyP9XuW6VsZuo2Nr4KR2bZr3d\"]},\"lib/openzeppelin-contracts/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol\":{\"keccak256\":\"0x5b4802a4352474792df3107e961d1cc593e47b820c14f69d3505cb28f5a6a583\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a6f86fd01f829499fe0545ff5dda07d4521988e88bfe0bf801fc15650921ed56\",\"dweb:/ipfs/QmUUKu4ZDffHAmfkf3asuQfmLTyfpuy2Amdncc3SqfzKPG\"]},\"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0xa516cbf1c7d15d3517c2d668601ce016c54395bf5171918a14e2686977465f53\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e1d079e8edfb58efd23a311e315a4807b01b5d1cf153f8fa2d0608b9dec3e99\",\"dweb:/ipfs/QmTBExeX2SDTkn5xbk5ssbYSx7VqRp9H4Ux1CY4uQM4b9N\"]},\"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]},\"src/TaskMarket.sol\":{\"keccak256\":\"0x2fbe94cfc27c541e18d64b595bef5b08d1583c3ea805cc83c46da4644ade6e74\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e3b562bb6fe1212b79455732f852c3f9756bc16392f83a62b4b863b68c3451e3\",\"dweb:/ipfs/QmQ8J8yjsywHnbWUACW3deJyT5xHGyjdmdXNmXWcY9hSvh\"]},\"src/interfaces/IPGTRForwarder.sol\":{\"keccak256\":\"0x4e8e8ab44c855662312bc8e28112a84b4d69f7879a22028ffc385ce6ed1f8e72\",\"license\":\"CC0-1.0\",\"urls\":[\"bzz-raw://9972ccae87abf7572f3449cd1858f1a419a91c3dacc95a873e609bdd8c9389b8\",\"dweb:/ipfs/QmZXdBJkzouLBgbo5ywUWV52Q9MzzS6HrELdJHYZzAS6mC\"]},\"src/interfaces/IReputationRegistry.sol\":{\"keccak256\":\"0x30c20f6294b6fa6497651efd80aa2fabaf4c79ad369db1a01ec5bea35c9ca3ca\",\"license\":\"CC0-1.0\",\"urls\":[\"bzz-raw://a5f382778af2bd4bf89d3276408f6789f7718d44879ef0fcea013582ac9e7a1b\",\"dweb:/ipfs/QmQhBsjpRom9rNHw1hACTrD2iFEnnQL8wpWu8mS276X4Ww\"]},\"src/interfaces/ITMP.sol\":{\"keccak256\":\"0xb5d47269a895a4f5ee197dd46f41b766ad224bb7dbd662f93061e5bafcb0cecc\",\"license\":\"CC0-1.0\",\"urls\":[\"bzz-raw://60807e3cb669219a88ef00f0f1a0d4f1d93a172e2fb33e349185057f697af3e1\",\"dweb:/ipfs/QmaKrx59ccYG37noU8BGiG5bKii8jtXmokziZpEKFXeaRA\"]},\"src/interfaces/ITMPFees.sol\":{\"keccak256\":\"0x58bcb2fe406abbfad75867fa39778dfbb9f29428eaa46d3e16fe2defc4a4ad98\",\"license\":\"CC0-1.0\",\"urls\":[\"bzz-raw://295f9cf41c7aafff1373c030afa062efbbf9e3f10ad058b6e53f5cff50ae7d40\",\"dweb:/ipfs/QmNkuAW92RzQPac9KgaxqdZUe7c1jTTVtw74gY8ci5Nv6f\"]},\"src/interfaces/ITMPMode.sol\":{\"keccak256\":\"0xb13102bcb1c2d73b4dc9fc4d8806176499233a47e4218c39f910ec0551c35b5a\",\"license\":\"CC0-1.0\",\"urls\":[\"bzz-raw://3ea90693a52ac25388751090004c3a8861e6147fe52c5111117093e49bfba4b5\",\"dweb:/ipfs/QmfLGkoF8AqTvoEmLgJHKF19V4hTFC5L5xy5icaTPVUqc8\"]},\"src/interfaces/ITMPReputation.sol\":{\"keccak256\":\"0x94f9110938e00dc0d585c5e90bbf548e6ceed945a56af504e0c73df2e18e3242\",\"license\":\"CC0-1.0\",\"urls\":[\"bzz-raw://b938b18f4e0a54dc39b3c60150000d5ea49a3beb97641a19aa2b2f09383292cb\",\"dweb:/ipfs/QmajcVipvxyyQTNdVPkDdDTEJLoAJDYUChL5gVjjWYFahb\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.24+commit.e11b9ed9"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"type":"error","name":"AddressEmptyCode"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"}],"type":"error","name":"ERC1967InvalidImplementation"},{"inputs":[],"type":"error","name":"ERC1967NonPayable"},{"inputs":[],"type":"error","name":"FailedCall"},{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"OwnableInvalidOwner"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"type":"error","name":"OwnableUnauthorizedAccount"},{"inputs":[],"type":"error","name":"ReentrancyGuardReentrantCall"},{"inputs":[],"type":"error","name":"UUPSUnauthorizedCallContext"},{"inputs":[{"internalType":"bytes32","name":"slot","type":"bytes32"}],"type":"error","name":"UUPSUnsupportedProxiableUUID"},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32","indexed":true},{"internalType":"address","name":"worker","type":"address","indexed":true},{"internalType":"uint256","name":"acceptedPrice","type":"uint256","indexed":false}],"type":"event","name":"AuctionAccepted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32","indexed":true},{"internalType":"address","name":"worker","type":"address","indexed":true},{"internalType":"uint256","name":"price","type":"uint256","indexed":false}],"type":"event","name":"BidSubmitted","anonymous":false},{"inputs":[{"internalType":"address","name":"newRecipient","type":"address","indexed":false}],"type":"event","name":"FeeRecipientUpdated","anonymous":false},{"inputs":[{"internalType":"uint16","name":"newFeeBps","type":"uint16","indexed":false}],"type":"event","name":"FeesUpdated","anonymous":false},{"inputs":[{"internalType":"address","name":"forwarder","type":"address","indexed":true},{"internalType":"bool","name":"trusted","type":"bool","indexed":false}],"type":"event","name":"ForwarderUpdated","anonymous":false},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32","indexed":true},{"internalType":"address","name":"worker","type":"address","indexed":true},{"internalType":"bytes32","name":"pitchHash","type":"bytes32","indexed":false}],"type":"event","name":"PitchSubmitted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32","indexed":true},{"internalType":"address","name":"worker","type":"address","indexed":true},{"internalType":"bytes32","name":"proofHash","type":"bytes32","indexed":false},{"internalType":"bytes32","name":"proofType","type":"bytes32","indexed":false},{"internalType":"uint256","name":"metricValue","type":"uint256","indexed":false}],"type":"event","name":"ProofSubmitted","anonymous":false},{"inputs":[{"internalType":"address","name":"newRegistry","type":"address","indexed":true}],"type":"event","name":"ReputationRegistryUpdated","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32","indexed":true},{"internalType":"address","name":"claimer","type":"address","indexed":true},{"internalType":"uint256","name":"stakeAmount","type":"uint256","indexed":false}],"type":"event","name":"StakeForfeited","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32","indexed":true},{"internalType":"address","name":"claimer","type":"address","indexed":true},{"internalType":"uint256","name":"stakeAmount","type":"uint256","indexed":false}],"type":"event","name":"StakeReturned","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32","indexed":true},{"internalType":"address","name":"requester","type":"address","indexed":true},{"internalType":"address","name":"worker","type":"address","indexed":true},{"internalType":"uint256","name":"workerPayment","type":"uint256","indexed":false},{"internalType":"uint256","name":"platformFee","type":"uint256","indexed":false}],"type":"event","name":"TaskAccepted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32","indexed":true},{"internalType":"address","name":"requester","type":"address","indexed":true},{"internalType":"uint256","name":"refundAmount","type":"uint256","indexed":false}],"type":"event","name":"TaskCancelled","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32","indexed":true},{"internalType":"address","name":"claimer","type":"address","indexed":true},{"internalType":"uint256","name":"stakeAmount","type":"uint256","indexed":false}],"type":"event","name":"TaskClaimed","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32","indexed":true},{"internalType":"address","name":"requester","type":"address","indexed":true},{"internalType":"uint256","name":"reward","type":"uint256","indexed":false},{"internalType":"uint256","name":"expiryTime","type":"uint256","indexed":false},{"internalType":"bytes4","name":"mode","type":"bytes4","indexed":false}],"type":"event","name":"TaskCreated","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32","indexed":true},{"internalType":"address","name":"requester","type":"address","indexed":true},{"internalType":"uint256","name":"refundAmount","type":"uint256","indexed":false}],"type":"event","name":"TaskExpired","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32","indexed":true},{"internalType":"address","name":"worker","type":"address","indexed":true},{"internalType":"uint8","name":"rating","type":"uint8","indexed":false},{"internalType":"uint256","name":"raterAgentId","type":"uint256","indexed":false}],"type":"event","name":"TaskRated","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32","indexed":true}],"type":"event","name":"TaskReopened","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32","indexed":true},{"internalType":"address","name":"worker","type":"address","indexed":true},{"internalType":"bytes32","name":"deliverable","type":"bytes32","indexed":false}],"type":"event","name":"TaskSubmitted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32","indexed":true},{"internalType":"uint256","name":"newReward","type":"uint256","indexed":false},{"internalType":"uint256","name":"newExpiryTime","type":"uint256","indexed":false}],"type":"event","name":"TaskUpdated","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32","indexed":true},{"internalType":"address","name":"worker","type":"address","indexed":true}],"type":"event","name":"TaskWorkerSelected","anonymous":false},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true}],"type":"event","name":"Upgraded","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"AUCTION","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"AUCTION_DUTCH","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"AUCTION_ENGLISH","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"AUCTION_REVERSE_DUTCH","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"AUCTION_REVERSE_ENGLISH","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"BENCHMARK","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"BOUNTY","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"CLAIM","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"PITCH","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"UPGRADE_INTERFACE_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32"},{"internalType":"uint256","name":"price","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"acceptAuction"},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32"},{"internalType":"address","name":"worker","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"acceptSubmission"},{"inputs":[{"internalType":"address","name":"forwarder","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"addForwarder"},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"cancelTask"},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32"},{"internalType":"uint256","name":"stakeAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"claimTask"},{"inputs":[{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"bytes4","name":"mode","type":"bytes4"},{"internalType":"uint256","name":"pitchDeadline","type":"uint256"},{"internalType":"uint256","name":"bidDeadline","type":"uint256"},{"internalType":"bytes32","name":"contentHash","type":"bytes32"},{"internalType":"string","name":"contentURI","type":"string"},{"internalType":"bytes4","name":"auctionSubtype","type":"bytes4"}],"stateMutability":"nonpayable","type":"function","name":"createTask","outputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"defaultFeeBps","outputs":[{"internalType":"uint16","name":"","type":"uint16"}]},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32"}],"stateMutability":"view","type":"function","name":"evaluatorFor","outputs":[{"internalType":"address","name":"evaluator","type":"address"}]},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32"}],"stateMutability":"view","type":"function","name":"feeForTask","outputs":[{"internalType":"uint16","name":"","type":"uint16"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"feeRecipient","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"forfeitAndReopen"},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getBids","outputs":[{"internalType":"struct TaskMarket.Bid[]","name":"","type":"tuple[]","components":[{"internalType":"address","name":"worker","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"}]}]},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getTask","outputs":[{"internalType":"struct ITMP.Task","name":"","type":"tuple","components":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"address","name":"requester","type":"address"},{"internalType":"address","name":"worker","type":"address"},{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint256","name":"createdAt","type":"uint256"},{"internalType":"uint256","name":"expiryTime","type":"uint256"},{"internalType":"enum ITMP.TaskStatus","name":"status","type":"uint8"},{"internalType":"uint8","name":"rating","type":"uint8"},{"internalType":"bytes4","name":"mode","type":"bytes4"},{"internalType":"uint256","name":"stakeAmount","type":"uint256"},{"internalType":"address","name":"claimer","type":"address"},{"internalType":"uint256","name":"claimedAt","type":"uint256"},{"internalType":"uint256","name":"pitchDeadline","type":"uint256"},{"internalType":"uint16","name":"feeBps","type":"uint16"},{"internalType":"uint256","name":"bidDeadline","type":"uint256"},{"internalType":"uint256","name":"maxPrice","type":"uint256"},{"internalType":"bytes32","name":"deliverable","type":"bytes32"},{"internalType":"bytes32","name":"contentHash","type":"bytes32"},{"internalType":"string","name":"contentURI","type":"string"},{"internalType":"bytes4","name":"auctionSubtype","type":"bytes4"},{"internalType":"address","name":"lowestBidder","type":"address"},{"internalType":"uint256","name":"lowestBidPrice","type":"uint256"}]}]},{"inputs":[{"internalType":"address","name":"worker","type":"address"}],"stateMutability":"view","type":"function","name":"getWorkerStats","outputs":[{"internalType":"struct ITMP.WorkerStats","name":"","type":"tuple","components":[{"internalType":"uint256","name":"completedTasks","type":"uint256"},{"internalType":"uint256","name":"ratedTasks","type":"uint256"},{"internalType":"uint256","name":"totalStars","type":"uint256"}]}]},{"inputs":[{"internalType":"address","name":"_usdcToken","type":"address"},{"internalType":"address","name":"_feeRecipient","type":"address"},{"internalType":"uint16","name":"_defaultFeeBps","type":"uint16"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"stateMutability":"view","type":"function","name":"isTrustedForwarder","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32"},{"internalType":"uint8","name":"rating","type":"uint8"},{"internalType":"uint256","name":"workerAgentId","type":"uint256"},{"internalType":"uint256","name":"raterAgentId","type":"uint256"},{"internalType":"string","name":"feedbackURI","type":"string"},{"internalType":"bytes32","name":"feedbackHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"rateTask"},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"refundExpired"},{"inputs":[{"internalType":"address","name":"forwarder","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"removeForwarder"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[],"stateMutability":"view","type":"function","name":"reputationRegistry","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"requesterNonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"selectLowestBidder"},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32"},{"internalType":"address","name":"worker","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"selectWorker"},{"inputs":[{"internalType":"uint16","name":"feeBps","type":"uint16"}],"stateMutability":"nonpayable","type":"function","name":"setDefaultFeeBps"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setFeeRecipient"},{"inputs":[{"internalType":"address","name":"registry","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setReputationRegistry"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"stakeForfeit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32"},{"internalType":"uint256","name":"price","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"submitBid"},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32"},{"internalType":"bytes32","name":"pitchHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"submitPitch"},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32"},{"internalType":"bytes32","name":"proofHash","type":"bytes32"},{"internalType":"bytes32","name":"proofType","type":"bytes32"},{"internalType":"uint256","name":"metricValue","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"submitProof"},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32"},{"internalType":"bytes32","name":"deliverable","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"submitWork"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"stateMutability":"pure","type":"function","name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"taskBids","outputs":[{"internalType":"address","name":"worker","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"taskPitchHashes","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"taskProofHashes","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"tasks","outputs":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"address","name":"requester","type":"address"},{"internalType":"address","name":"worker","type":"address"},{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint256","name":"createdAt","type":"uint256"},{"internalType":"uint256","name":"expiryTime","type":"uint256"},{"internalType":"enum ITMP.TaskStatus","name":"status","type":"uint8"},{"internalType":"uint8","name":"rating","type":"uint8"},{"internalType":"bytes4","name":"mode","type":"bytes4"},{"internalType":"uint256","name":"stakeAmount","type":"uint256"},{"internalType":"address","name":"claimer","type":"address"},{"internalType":"uint256","name":"claimedAt","type":"uint256"},{"internalType":"uint256","name":"pitchDeadline","type":"uint256"},{"internalType":"uint16","name":"feeBps","type":"uint16"},{"internalType":"uint256","name":"bidDeadline","type":"uint256"},{"internalType":"uint256","name":"maxPrice","type":"uint256"},{"internalType":"bytes32","name":"deliverable","type":"bytes32"},{"internalType":"bytes32","name":"contentHash","type":"bytes32"},{"internalType":"string","name":"contentURI","type":"string"},{"internalType":"bytes4","name":"auctionSubtype","type":"bytes4"},{"internalType":"address","name":"lowestBidder","type":"address"},{"internalType":"uint256","name":"lowestBidPrice","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"totalFeesCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"trustedForwarders","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"bytes32","name":"taskId","type":"bytes32"},{"internalType":"uint256","name":"newReward","type":"uint256"},{"internalType":"uint256","name":"newExpiryTime","type":"uint256"},{"internalType":"uint256","name":"newBidDeadline","type":"uint256"},{"internalType":"uint256","name":"newPitchDeadline","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"updateTask"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"payable","type":"function","name":"upgradeToAndCall"},{"inputs":[],"stateMutability":"view","type":"function","name":"usdcToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"workerStats","outputs":[{"internalType":"uint256","name":"completedTasks","type":"uint256"},{"internalType":"uint256","name":"ratedTasks","type":"uint256"},{"internalType":"uint256","name":"totalStars","type":"uint256"}]}],"devdoc":{"kind":"dev","methods":{"acceptAuction(bytes32,uint256)":{"params":{"price":"Accepted price in USDC base units (must be <= task.maxPrice)","taskId":"Task identifier"}},"acceptSubmission(bytes32,address)":{"params":{"taskId":"Task identifier","worker":"Worker address to pay"}},"addForwarder(address)":{"params":{"forwarder":"Address to trust as a forwarder"}},"cancelTask(bytes32)":{"params":{"taskId":"Task identifier"}},"claimTask(bytes32,uint256)":{"params":{"stakeAmount":"USDC stake amount (0 = no stake required). If > 0, the forwarder must transfer the stake to this contract before calling.","taskId":"Task identifier"}},"constructor":{"custom:oz-upgrades-unsafe-allow":"constructor"},"createTask(uint256,uint256,bytes4,uint256,uint256,bytes32,string,bytes4)":{"params":{"auctionSubtype":"Auction subtype selector (bytes4(0) for non-auction tasks)","bidDeadline":"Seconds from now for bid window (Auction mode only, 0 otherwise)","contentHash":"Optional keccak256 of off-chain task description (bytes32(0) if unused)","contentURI":"Optional URI pointing to extended task metadata (empty string if unused)","duration":"Task lifetime in seconds","mode":"4-byte mode selector (use BOUNTY/CLAIM/PITCH/BENCHMARK/AUCTION)","pitchDeadline":"Seconds from now for pitch window (Pitch mode only, 0 otherwise)","reward":"USDC reward (6 decimals); for Auction = max price"},"returns":{"taskId":" Contract-generated canonical task identifier"}},"evaluatorFor(bytes32)":{"params":{"taskId":"Task identifier"},"returns":{"evaluator":"Address that can call acceptSubmission() for this task"}},"feeForTask(bytes32)":{"params":{"taskId":"Task identifier"},"returns":{"_0":"Fee in basis points for this task"}},"forfeitAndReopen(bytes32)":{"details":"Can only be called after the task has expired. Claimer's stake is transferred to fee recipient as a non-delivery penalty.","params":{"taskId":"Task identifier"}},"getBids(bytes32)":{"params":{"taskId":"Task identifier"},"returns":{"_0":"bids Array of Bid structs"}},"getTask(bytes32)":{"params":{"taskId":"Task identifier"},"returns":{"_0":"task Task struct"}},"getWorkerStats(address)":{"params":{"worker":"Worker address"},"returns":{"_0":"Worker stats struct (completedTasks, ratedTasks, totalStars)"}},"initialize(address,address,uint16)":{"params":{"_defaultFeeBps":"Default platform fee in basis points (500 = 5%)","_feeRecipient":"Address to receive platform fees","_usdcToken":"USDC token address on Base"}},"owner()":{"details":"Returns the address of the current owner."},"proxiableUUID()":{"details":"Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier."},"rateTask(bytes32,uint8,uint256,uint256,string,bytes32)":{"params":{"feedbackHash":"keccak256 hash of the feedback file content","feedbackURI":"URI of the canonical off-chain feedback file","raterAgentId":"ERC-8004 agentId of the requester giving the rating, or 0 if unknown","rating":"Rating (0-100)","taskId":"Task identifier","workerAgentId":"ERC-8004 agentId of worker, or 0 if unknown"}},"refundExpired(bytes32)":{"params":{"taskId":"Task identifier"}},"removeForwarder(address)":{"params":{"forwarder":"Address to remove from trusted forwarders"}},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"selectLowestBidder(bytes32)":{"details":"O(1): submitBid() maintains a running minimum in task.lowestBidder/lowestBidPrice.","params":{"taskId":"Task identifier"}},"selectWorker(bytes32,address)":{"params":{"taskId":"Task identifier","worker":"Selected worker address"}},"setDefaultFeeBps(uint16)":{"params":{"feeBps":"New fee in basis points"}},"setFeeRecipient(address)":{"params":{"recipient":"New fee recipient address"}},"setReputationRegistry(address)":{"params":{"registry":"New reputation registry address"}},"submitBid(bytes32,uint256)":{"params":{"price":"Bid price in USDC base units (must be <= maxPrice)","taskId":"Task identifier"}},"submitPitch(bytes32,bytes32)":{"params":{"pitchHash":"Content hash (typically keccak256(abi.encode(taskId, worker, pitchText)))","taskId":"Task identifier"}},"submitProof(bytes32,bytes32,bytes32,uint256)":{"params":{"metricValue":"Task-specific numeric score","proofHash":"Content hash (typically keccak256(abi.encode(taskId, worker, proofData)))","proofType":"bytes32 selector identifying the proof scheme","taskId":"Task identifier"}},"submitWork(bytes32,bytes32)":{"params":{"deliverable":"Content hash (keccak256, IPFS CID, or ZK commitment)","taskId":"Task identifier"}},"supportsInterface(bytes4)":{"details":"Returns true for ITMP and IERC165 interface IDs.","params":{"interfaceId":"4-byte interface selector to check"}},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"updateTask(bytes32,uint256,uint256,uint256,uint256)":{"params":{"newBidDeadline":"New absolute bid deadline (Auction only, 0 = no change)","newExpiryTime":"New absolute expiry Unix timestamp (0 = no change)","newPitchDeadline":"New absolute pitch deadline (Pitch only, 0 = no change)","newReward":"New reward amount (0 = no change); if higher, forwarder pre-transfers delta","taskId":"Task identifier"}},"upgradeToAndCall(address,bytes)":{"custom:oz-upgrades-unsafe-allow-reachable":"delegatecall","details":"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."}},"version":1},"userdoc":{"kind":"user","methods":{"acceptAuction(bytes32,uint256)":{"notice":"Directly award an open auction task to a worker at a given price. Used by clock-based auction subtypes (dutch, reverse_dutch). The worker is the authenticated actor (pgtrSender)."},"acceptSubmission(bytes32,address)":{"notice":"Accept submission and release payment to worker. The requester is the authenticated actor (pgtrSender)."},"addForwarder(address)":{"notice":"Add a trusted PGTR forwarder (owner only)"},"cancelTask(bytes32)":{"notice":"Cancel an open task and refund the escrowed reward to the requester. The requester is the authenticated actor (pgtrSender). Auction tasks may only be cancelled if no bids have been submitted."},"claimTask(bytes32,uint256)":{"notice":"Claim a Claim-mode task. The worker is the authenticated actor (pgtrSender)."},"createTask(uint256,uint256,bytes4,uint256,uint256,bytes32,string,bytes4)":{"notice":"Create a new task with USDC escrow. Task ID is contract-generated: keccak256(abi.encode(block.chainid, address(this), requester, nonce)) Callers SHOULD pre-compute the ID by reading requesterNonce[requester] before submitting this transaction. The requester is the authenticated actor from the PGTR forwarder (pgtrSender). The USDC reward MUST be transferred to this contract by the forwarder before calling."},"defaultFeeBps()":{"notice":"Platform fee in basis points deducted from reward on task completion. Example: 500 = 5%."},"evaluatorFor(bytes32)":{"notice":"Returns the address responsible for evaluating work on a task (ITMPMode). For all modes except Benchmark, this is the task requester. For Benchmark mode, this is the ERC-8004 Validation Registry."},"feeForTask(bytes32)":{"notice":"Per-task fee in basis points stamped at task creation (ITMPFees)."},"feeRecipient()":{"notice":"Address that receives platform fees."},"forfeitAndReopen(bytes32)":{"notice":"Forfeit claimer's stake and reopen Claim task. The requester is the authenticated actor (pgtrSender)."},"getBids(bytes32)":{"notice":"Get all bids for a task"},"getTask(bytes32)":{"notice":"Get task details"},"getWorkerStats(address)":{"notice":"Get worker statistics"},"initialize(address,address,uint16)":{"notice":"Initialize the proxy (replaces constructor for UUPS pattern)"},"isTrustedForwarder(address)":{"notice":"Returns true if addr is a trusted PGTR forwarder (ERC-8194 requirement)."},"rateTask(bytes32,uint8,uint256,uint256,string,bytes32)":{"notice":"Rate a completed task and submit ERC-8004 feedback. The requester is the authenticated actor (pgtrSender)."},"refundExpired(bytes32)":{"notice":"Refund expired task reward to requester. NORMATIVE: This function MUST bypass all hooks and extension contracts. Funds are ALWAYS recoverable after expiry. Special case: Auction tasks with a selected winner auto-pay the worker."},"removeForwarder(address)":{"notice":"Remove a trusted PGTR forwarder (owner only)"},"reputationRegistry()":{"notice":"Address of the ERC-8004 Reputation Registry used for feedback. Returns address(0) if reputation integration is disabled."},"requesterNonce(address)":{"notice":"Per-requester nonce used to generate canonical task IDs. Read this before calling createTask to pre-compute the task ID off-chain."},"selectLowestBidder(bytes32)":{"notice":"Select the lowest bidder after bid deadline."},"selectWorker(bytes32,address)":{"notice":"Select a worker for Pitch mode. The requester is the authenticated actor (pgtrSender)."},"setDefaultFeeBps(uint16)":{"notice":"Set default platform fee (owner only)"},"setFeeRecipient(address)":{"notice":"Set fee recipient (owner only)"},"setReputationRegistry(address)":{"notice":"Set the ERC-8004 reputation registry address (owner only)"},"submitBid(bytes32,uint256)":{"notice":"Submit a bid on an Auction mode task. The worker is the authenticated actor (pgtrSender)."},"submitPitch(bytes32,bytes32)":{"notice":"Anchor a pitch-content hash on-chain for a pitch-mode task. The pitch text itself stays off-chain; the hash is a tamper-proof commitment that third parties can use to verify any operator-served pitch text matches what the worker actually submitted. The worker is the authenticated actor (pgtrSender)."},"submitProof(bytes32,bytes32,bytes32,uint256)":{"notice":"Anchor a benchmark-proof hash on-chain for a benchmark-mode task. The proof data stays off-chain; the hash here is a tamper-proof commitment. proofType is a free-form bytes32 selector (typically keccak256(typeString)); metricValue is a task-specific numeric score. The worker is the authenticated actor (pgtrSender)."},"submitWork(bytes32,bytes32)":{"notice":"Record that a worker has submitted deliverable work. The worker is the authenticated actor (pgtrSender). Anchors a content hash on-chain for tamper-evident audit trail. State change is mode-dependent: BOUNTY/BENCHMARK → PendingApproval CLAIM/PITCH/AUCTION → no state change (worker already locked)"},"supportsInterface(bytes4)":{"notice":"ERC-165 interface detection."},"taskPitchHashes(bytes32,uint256)":{"notice":"Anchored pitch hashes per task. Pitch content stays off-chain; the hash here is a tamper-proof commitment so third parties can verify text retrieved from any operator matches what was submitted on-chain."},"taskProofHashes(bytes32,uint256)":{"notice":"Anchored proof hashes per task. Same commitment pattern as pitches."},"totalFeesCollected()":{"notice":"Cumulative platform fees collected since deployment."},"trustedForwarders(address)":{"notice":"Mapping of trusted PGTR forwarders. Multiple forwarders are supported for rotation and redundancy."},"updateTask(bytes32,uint256,uint256,uint256,uint256)":{"notice":"Update an open task's parameters. Pass 0 for any field to leave unchanged. The requester is the authenticated actor (pgtrSender). Auction tasks may only be updated if no bids have been submitted. If newReward > current reward, the forwarder must transfer the additional USDC to this contract before calling."}},"version":1}},"settings":{"remappings":["@openzeppelin/=lib/openzeppelin-contracts/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/TaskMarket.sol":"TaskMarket"},"evmVersion":"cancun","libraries":{},"viaIR":true},"sources":{"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0x85c3b9bac35a90dce9ed9b31532c3739cae432359d8d7ff59cb6712f21c7ed14","urls":["bzz-raw://a084d32ad4ad5b1d4494124d7695334dbeff81c2d1846a01ef1215153dd38eed","dweb:/ipfs/QmbzDrfeogDd3n65mADjLuy97oAMgh2CtiUxKKEpM3WB8b"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x30d125b8417684dbfea3e8d57284b353a86b22077237b4aaf098c0b54b153e16","urls":["bzz-raw://2813775a6326190e75dfa9005c1abbdb1e541c195c0bf5656dd4199e8c66fd8d","dweb:/ipfs/QmYDKANBezQXNrEDyJ69RVXkgypW1hWj7MAvjfdNHTZY8L"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol":{"keccak256":"0x4918e374e9ce84e9b196486bafbd46851d5e72ab315e31f0b1d7c443dcfea5bf","urls":["bzz-raw://2ced247afc54a93a13922ebbd63add61130abe483ab5b5b78e7e991d564d150e","dweb:/ipfs/QmTfxjcTgfekiguegjvYMyfqhyRNffui17f8xi86BCZNVt"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0xad316bdc3ee64a0e29773256245045dc57b92660799ff14f668f7c0da9456a9d","urls":["bzz-raw://66463434d266816fca2a3a2734ceee88544e61b7cc3899c50333b46e8e771455","dweb:/ipfs/QmPYCzHjki1HQLvBub3uUqoUKGrwdgR3xP9Zpya14YTdXS"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol":{"keccak256":"0xbf2aefe54b76d7f7bcd4f6da1080b7b1662611937d870b880db584d09cea56b5","urls":["bzz-raw://f5e7e2f12e0feec75296e57f51f82fdaa8bd1551f4b8cc6560442c0bf60f818c","dweb:/ipfs/QmcW9wDMaQ8RbQibMarfp17a3bABzY5KraWe2YDwuUrUoz"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol":{"keccak256":"0x82f757819bf2429a0d4db141b99a4bbe5039e4ef86dfb94e2e6d40577ed5b28b","urls":["bzz-raw://37c30ed931e19fb71fdb806bb504cfdb9913b7127545001b64d4487783374422","dweb:/ipfs/QmUBHpv4hm3ZmwJ4GH8BeVzK4mv41Q6vBbWXxn8HExPXza"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol":{"keccak256":"0xa1ad192cd45317c788618bef5cb1fb3ca4ce8b230f6433ac68cc1d850fb81618","urls":["bzz-raw://b43447bb85a53679d269a403c693b9d88d6c74177dfb35eddca63abaf7cf110a","dweb:/ipfs/QmXSDmpd4bNZj1PDgegr6C4w1jDaWHXCconC3rYiw9TSkQ"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol":{"keccak256":"0x20462ddb2665e9521372c76b001d0ce196e59dbbd989de9af5576cad0bd5628b","urls":["bzz-raw://f417fd12aeec8fbfaceaa30e3a08a0724c0bc39de363e2acf6773c897abbaf6d","dweb:/ipfs/QmU4Hko6sApdweVM92CsiuLKkCk8HfyBeutF89PCTz5Tye"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol":{"keccak256":"0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05","urls":["bzz-raw://ab7b6d5b9e2b88176312967fe0f0e78f3d9a1422fa5e4b64e2440c35869b5d08","dweb:/ipfs/QmXKYWWyzcLg1B2k7Sb1qkEXgLCYfXecR9wYW5obRzWP1Q"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/utils/UUPSUpgradeable.sol":{"keccak256":"0x1a26353563a2c63b4120ea0b94727253eeff84fe2241d42c1452308b9080e66a","urls":["bzz-raw://49a95e36d267828b4357186a79917002d616d8634e25d1f9818e2354cd2e7d34","dweb:/ipfs/QmWDkqE4KkyLAS2UkLsRgXE1FGB1qfEgBC3zMXBVsVWfdk"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2","urls":["bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303","dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0x0fa9e0d3a859900b5a46f70a03c73adf259603d5e05027a37fe0b45529d85346","urls":["bzz-raw://c2add4da0240c9f2ce47649c8bb6b11b40e98cf6f88b8bdc76b2704e89391710","dweb:/ipfs/QmNQTwF2uVzu4CRtNxr8bxyP9XuW6VsZuo2Nr4KR2bZr3d"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Errors.sol":{"keccak256":"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123","urls":["bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf","dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol":{"keccak256":"0x5b4802a4352474792df3107e961d1cc593e47b820c14f69d3505cb28f5a6a583","urls":["bzz-raw://a6f86fd01f829499fe0545ff5dda07d4521988e88bfe0bf801fc15650921ed56","dweb:/ipfs/QmUUKu4ZDffHAmfkf3asuQfmLTyfpuy2Amdncc3SqfzKPG"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol":{"keccak256":"0xa516cbf1c7d15d3517c2d668601ce016c54395bf5171918a14e2686977465f53","urls":["bzz-raw://1e1d079e8edfb58efd23a311e315a4807b01b5d1cf153f8fa2d0608b9dec3e99","dweb:/ipfs/QmTBExeX2SDTkn5xbk5ssbYSx7VqRp9H4Ux1CY4uQM4b9N"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol":{"keccak256":"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97","urls":["bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b","dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol":{"keccak256":"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c","urls":["bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617","dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u"],"license":"MIT"},"src/TaskMarket.sol":{"keccak256":"0x2fbe94cfc27c541e18d64b595bef5b08d1583c3ea805cc83c46da4644ade6e74","urls":["bzz-raw://e3b562bb6fe1212b79455732f852c3f9756bc16392f83a62b4b863b68c3451e3","dweb:/ipfs/QmQ8J8yjsywHnbWUACW3deJyT5xHGyjdmdXNmXWcY9hSvh"],"license":"MIT"},"src/interfaces/IPGTRForwarder.sol":{"keccak256":"0x4e8e8ab44c855662312bc8e28112a84b4d69f7879a22028ffc385ce6ed1f8e72","urls":["bzz-raw://9972ccae87abf7572f3449cd1858f1a419a91c3dacc95a873e609bdd8c9389b8","dweb:/ipfs/QmZXdBJkzouLBgbo5ywUWV52Q9MzzS6HrELdJHYZzAS6mC"],"license":"CC0-1.0"},"src/interfaces/IReputationRegistry.sol":{"keccak256":"0x30c20f6294b6fa6497651efd80aa2fabaf4c79ad369db1a01ec5bea35c9ca3ca","urls":["bzz-raw://a5f382778af2bd4bf89d3276408f6789f7718d44879ef0fcea013582ac9e7a1b","dweb:/ipfs/QmQhBsjpRom9rNHw1hACTrD2iFEnnQL8wpWu8mS276X4Ww"],"license":"CC0-1.0"},"src/interfaces/ITMP.sol":{"keccak256":"0xb5d47269a895a4f5ee197dd46f41b766ad224bb7dbd662f93061e5bafcb0cecc","urls":["bzz-raw://60807e3cb669219a88ef00f0f1a0d4f1d93a172e2fb33e349185057f697af3e1","dweb:/ipfs/QmaKrx59ccYG37noU8BGiG5bKii8jtXmokziZpEKFXeaRA"],"license":"CC0-1.0"},"src/interfaces/ITMPFees.sol":{"keccak256":"0x58bcb2fe406abbfad75867fa39778dfbb9f29428eaa46d3e16fe2defc4a4ad98","urls":["bzz-raw://295f9cf41c7aafff1373c030afa062efbbf9e3f10ad058b6e53f5cff50ae7d40","dweb:/ipfs/QmNkuAW92RzQPac9KgaxqdZUe7c1jTTVtw74gY8ci5Nv6f"],"license":"CC0-1.0"},"src/interfaces/ITMPMode.sol":{"keccak256":"0xb13102bcb1c2d73b4dc9fc4d8806176499233a47e4218c39f910ec0551c35b5a","urls":["bzz-raw://3ea90693a52ac25388751090004c3a8861e6147fe52c5111117093e49bfba4b5","dweb:/ipfs/QmfLGkoF8AqTvoEmLgJHKF19V4hTFC5L5xy5icaTPVUqc8"],"license":"CC0-1.0"},"src/interfaces/ITMPReputation.sol":{"keccak256":"0x94f9110938e00dc0d585c5e90bbf548e6ceed945a56af504e0c73df2e18e3242","urls":["bzz-raw://b938b18f4e0a54dc39b3c60150000d5ea49a3beb97641a19aa2b2f09383292cb","dweb:/ipfs/QmajcVipvxyyQTNdVPkDdDTEJLoAJDYUChL5gVjjWYFahb"],"license":"CC0-1.0"}},"version":1},"id":33} \ No newline at end of file diff --git a/script/AddForwarder.s.sol b/script/AddForwarder.s.sol new file mode 100644 index 0000000..980e2d7 --- /dev/null +++ b/script/AddForwarder.s.sol @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import "forge-std/Script.sol"; +import "../src/TaskMarket.sol"; + +contract AddForwarder is Script { + function run() external { + uint256 deployerPrivateKey = vm.envUint("FORGE_DEV_PRIVATE_KEY"); + address taskMarket = vm.envAddress("CONTRACT_ADDRESS"); + address forwarder = vm.envAddress("FORWARDER_ADDRESS"); + + vm.startBroadcast(deployerPrivateKey); + TaskMarket(taskMarket).addForwarder(forwarder); + vm.stopBroadcast(); + + console.log("Added forwarder:", forwarder); + console.log("To TaskMarket:", taskMarket); + } +} diff --git a/script/DeployForwarder.s.sol b/script/DeployForwarder.s.sol new file mode 100644 index 0000000..08a260b --- /dev/null +++ b/script/DeployForwarder.s.sol @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import "forge-std/Script.sol"; +import "../src/TaskMarketForwarder.sol"; + +contract DeployForwarder is Script { + function run() external { + uint256 deployerPrivateKey = vm.envUint("FORGE_DEV_PRIVATE_KEY"); + address usdc = vm.envAddress("USDC_TOKEN_ADDRESS"); + address taskMarket = vm.envAddress("CONTRACT_ADDRESS"); + address authorizedRelayer = vm.envAddress("FORGE_SERVER_ADDRESS"); + + vm.startBroadcast(deployerPrivateKey); + + TaskMarketForwarder forwarder = new TaskMarketForwarder(usdc, taskMarket, authorizedRelayer); + + vm.stopBroadcast(); + + console.log("Forwarder (FORWARDER_ADDRESS):", address(forwarder)); + console.log("USDC:", usdc); + console.log("TaskMarket:", taskMarket); + console.log("Authorized relayer:", authorizedRelayer); + } +} diff --git a/scripts/verify-storage-layout.ts b/scripts/verify-storage-layout.ts new file mode 100644 index 0000000..d3d0e39 --- /dev/null +++ b/scripts/verify-storage-layout.ts @@ -0,0 +1,75 @@ +#!/usr/bin/env tsx +/** + * Asserts that every existing slot in storage-layout.before.json appears at the + * same slot index in storage-layout.after.json — appending new state is fine, + * reordering or removing existing state is not (UUPS upgrade hazard). + * + * Internal Solidity type IDs (e.g. `t_struct(Task)4574_storage`) are stripped + * before comparison because they change on every recompile without affecting + * actual storage layout. + * + * Run via: cd packages/contracts && tsx scripts/verify-storage-layout.ts + */ +import { readFileSync } from 'node:fs'; +import { resolve, dirname } from 'node:path'; +import { fileURLToPath } from 'node:url'; + +type StorageEntry = { slot: string; label: string; type: string; offset: number }; +type StorageLayout = { storage: StorageEntry[] }; + +const root = dirname(fileURLToPath(import.meta.url)); +const before: StorageLayout = JSON.parse( + readFileSync(resolve(root, '..', 'storage-layout.before.json'), 'utf8') +); +const after: StorageLayout = JSON.parse( + readFileSync(resolve(root, '..', 'storage-layout.after.json'), 'utf8') +); + +function normaliseType(t: string): string { + // Drop internal struct/contract type IDs that vary across compiles. + // `t_struct(Task)4574_storage` → `t_struct(Task)_storage` + return t.replace(/(\(\w+\))\d+_storage/g, '$1_storage'); +} + +function keyOf(entry: StorageEntry): string { + return `slot=${entry.slot}|offset=${entry.offset}|label=${entry.label}|type=${normaliseType( + entry.type + )}`; +} + +// `__gap` is intentionally consumable — it can shrink and move as we append +// new state variables. Compare its size separately. +const beforeNonGap = before.storage.filter((e) => e.label !== '__gap'); +const afterNonGap = after.storage.filter((e) => e.label !== '__gap'); +const beforeKeys = new Set(beforeNonGap.map(keyOf)); +const afterKeys = new Set(afterNonGap.map(keyOf)); + +const missing = [...beforeKeys].filter((k) => !afterKeys.has(k)); +const added = [...afterKeys].filter((k) => !beforeKeys.has(k)); + +function gapSize(layout: StorageLayout): number { + const gap = layout.storage.find((e) => e.label === '__gap'); + if (!gap) return 0; + const m = gap.type.match(/t_array\(t_uint256\)(\d+)_storage/); + return m ? Number(m[1]) : 0; +} + +const beforeGap = gapSize(before); +const afterGap = gapSize(after); +if (afterGap > beforeGap) { + console.error(`__gap grew from ${beforeGap} to ${afterGap} — that should be impossible.`); + process.exit(1); +} + +if (missing.length > 0) { + console.error('Storage layout drift — these slots from BEFORE are missing or moved in AFTER:'); + for (const k of missing) console.error(' -', k); + process.exit(1); +} + +console.log(`Storage layout verified: ${beforeKeys.size} existing slots unchanged.`); +console.log(`__gap: ${beforeGap} → ${afterGap} (${beforeGap - afterGap} slots consumed).`); +if (added.length > 0) { + console.log(`New slots appended: ${added.length}`); + for (const k of added) console.log(' +', k); +} diff --git a/src/TaskMarket.sol b/src/TaskMarket.sol index 9ea72c2..80726b5 100644 --- a/src/TaskMarket.sol +++ b/src/TaskMarket.sol @@ -97,9 +97,18 @@ contract TaskMarket is ITMP, ITMPReputation, ITMPFees, ITMPMode, Initializable, /// Read this before calling createTask to pre-compute the task ID off-chain. mapping(address => uint256) public requesterNonce; - // Reserve 48 slots for future state variables (was 50; requesterNonce consumed 1, - // and trustedForwarders replaced authorizedServer at the same logical position). - uint256[48] private __gap; + /// @notice Anchored pitch hashes per task. Pitch content stays off-chain; the hash + /// here is a tamper-proof commitment so third parties can verify text + /// retrieved from any operator matches what was submitted on-chain. + mapping(bytes32 => bytes32[]) public taskPitchHashes; + + /// @notice Anchored proof hashes per task. Same commitment pattern as pitches. + mapping(bytes32 => bytes32[]) public taskProofHashes; + + // Reserve 46 slots for future state variables (was 50; trustedForwarders replaced + // authorizedServer at the same logical position, requesterNonce consumed 1, + // taskPitchHashes consumed 1, taskProofHashes consumed 1). + uint256[46] private __gap; // ------------------------------------------------------------------------- // Events @@ -120,6 +129,26 @@ contract TaskMarket is ITMP, ITMPReputation, ITMPFees, ITMPMode, Initializable, event BidSubmitted(bytes32 indexed taskId, address indexed worker, uint256 price); event TaskUpdated(bytes32 indexed taskId, uint256 newReward, uint256 newExpiryTime); + /// @notice Emitted when a worker anchors a pitch hash for a pitch-mode task. + event PitchSubmitted(bytes32 indexed taskId, address indexed worker, bytes32 pitchHash); + + /// @notice Emitted when a worker anchors a proof hash for a benchmark-mode task. + /// proofType is the keccak256(typeString) bytes32 selector; metricValue is + /// a free-form numeric score whose meaning is task-specific. + event ProofSubmitted( + bytes32 indexed taskId, + address indexed worker, + bytes32 proofHash, + bytes32 proofType, + uint256 metricValue + ); + + /// @notice Emitted when a worker accepts a dutch/reverse_dutch auction's clock + /// price. Coexists with the legacy BidSubmitted + TaskWorkerSelected pair + /// emitted by acceptAuction so older indexers keep working; new indexers + /// should prefer this single event for clarity. + event AuctionAccepted(bytes32 indexed taskId, address indexed worker, uint256 acceptedPrice); + // ------------------------------------------------------------------------- // Modifiers // ------------------------------------------------------------------------- @@ -446,8 +475,63 @@ contract TaskMarket is ITMP, ITMPReputation, ITMPFees, ITMPMode, Initializable, task.worker = worker; task.stakeAmount = price; task.status = TaskStatus.Claimed; + // Legacy event pair, kept for backward compatibility with old indexers. emit BidSubmitted(taskId, worker, price); emit TaskWorkerSelected(taskId, worker); + // Dedicated event: new indexers should prefer this single signal. + emit AuctionAccepted(taskId, worker, price); + } + + /** + * @notice Anchor a pitch-content hash on-chain for a pitch-mode task. + * The pitch text itself stays off-chain; the hash is a tamper-proof + * commitment that third parties can use to verify any operator-served + * pitch text matches what the worker actually submitted. + * The worker is the authenticated actor (pgtrSender). + * @param taskId Task identifier + * @param pitchHash Content hash (typically keccak256(abi.encode(taskId, worker, pitchText))) + */ + function submitPitch(bytes32 taskId, bytes32 pitchHash) external onlyTrustedForwarder { + address worker = _effectiveSender(); + Task storage task = tasks[taskId]; + require(task.requester != address(0), "Task does not exist"); + require(task.mode == PITCH, "Not a Pitch task"); + require(task.status == TaskStatus.Open, "Task not open"); + require(block.timestamp <= task.pitchDeadline, "Pitch deadline passed"); + require(block.timestamp <= task.expiryTime, "Task expired"); + require(pitchHash != bytes32(0), "Empty pitch hash"); + + taskPitchHashes[taskId].push(pitchHash); + emit PitchSubmitted(taskId, worker, pitchHash); + } + + /** + * @notice Anchor a benchmark-proof hash on-chain for a benchmark-mode task. + * The proof data stays off-chain; the hash here is a tamper-proof + * commitment. proofType is a free-form bytes32 selector (typically + * keccak256(typeString)); metricValue is a task-specific numeric score. + * The worker is the authenticated actor (pgtrSender). + * @param taskId Task identifier + * @param proofHash Content hash (typically keccak256(abi.encode(taskId, worker, proofData))) + * @param proofType bytes32 selector identifying the proof scheme + * @param metricValue Task-specific numeric score + */ + function submitProof( + bytes32 taskId, + bytes32 proofHash, + bytes32 proofType, + uint256 metricValue + ) external onlyTrustedForwarder { + address worker = _effectiveSender(); + Task storage task = tasks[taskId]; + require(task.requester != address(0), "Task does not exist"); + require(task.mode == BENCHMARK, "Not a Benchmark task"); + require(task.status == TaskStatus.Open, "Task not open"); + require(block.timestamp <= task.expiryTime, "Task expired"); + require(proofHash != bytes32(0), "Empty proof hash"); + + taskProofHashes[taskId].push(proofHash); + emit ProofSubmitted(taskId, worker, proofHash, proofType, metricValue); } /** diff --git a/src/TaskMarketForwarder.sol b/src/TaskMarketForwarder.sol index 17c8c69..15c07d5 100644 --- a/src/TaskMarketForwarder.sol +++ b/src/TaskMarketForwarder.sol @@ -116,6 +116,7 @@ contract TaskMarketForwarder is IPGTRForwarder, ReentrancyGuard { ) external nonReentrant { if (msg.sender != authorizedRelayer) revert UnauthorizedRelayer(); if (block.timestamp > validBefore) revert ReceiptExpired(); + if (data.length < 4) revert("Calldata too short"); bytes4 selector = bytes4(data[:4]); bytes32 receiptHash = keccak256(abi.encode( diff --git a/storage-layout.after.json b/storage-layout.after.json new file mode 100644 index 0000000..684d38a --- /dev/null +++ b/storage-layout.after.json @@ -0,0 +1,472 @@ +{ + "storage": [ + { + "astId": 2007, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "usdcToken", + "offset": 0, + "slot": "0", + "type": "t_contract(IERC20)1095" + }, + { + "astId": 2012, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "trustedForwarders", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 2017, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "tasks", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_bytes32,t_struct(Task)4795_storage)" + }, + { + "astId": 2022, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "workerStats", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_address,t_struct(WorkerStats)4803_storage)" + }, + { + "astId": 2026, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "stakeForfeit", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_bytes32,t_uint256)" + }, + { + "astId": 2032, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "taskBids", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_bytes32,t_array(t_struct(Bid)2004_storage)dyn_storage)" + }, + { + "astId": 2034, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "defaultFeeBps", + "offset": 0, + "slot": "6", + "type": "t_uint16" + }, + { + "astId": 2036, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "feeRecipient", + "offset": 2, + "slot": "6", + "type": "t_address" + }, + { + "astId": 2038, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "totalFeesCollected", + "offset": 0, + "slot": "7", + "type": "t_uint256" + }, + { + "astId": 2040, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "reputationRegistry", + "offset": 0, + "slot": "8", + "type": "t_address" + }, + { + "astId": 2045, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "requesterNonce", + "offset": 0, + "slot": "9", + "type": "t_mapping(t_address,t_uint256)" + }, + { + "astId": 2051, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "taskPitchHashes", + "offset": 0, + "slot": "10", + "type": "t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)" + }, + { + "astId": 2057, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "taskProofHashes", + "offset": 0, + "slot": "11", + "type": "t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)" + }, + { + "astId": 2061, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "__gap", + "offset": 0, + "slot": "12", + "type": "t_array(t_uint256)46_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_bytes32)dyn_storage": { + "encoding": "dynamic_array", + "label": "bytes32[]", + "numberOfBytes": "32", + "base": "t_bytes32" + }, + "t_array(t_struct(Bid)2004_storage)dyn_storage": { + "encoding": "dynamic_array", + "label": "struct TaskMarket.Bid[]", + "numberOfBytes": "32", + "base": "t_struct(Bid)2004_storage" + }, + "t_array(t_uint256)46_storage": { + "encoding": "inplace", + "label": "uint256[46]", + "numberOfBytes": "1472", + "base": "t_uint256" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_bytes4": { + "encoding": "inplace", + "label": "bytes4", + "numberOfBytes": "4" + }, + "t_contract(IERC20)1095": { + "encoding": "inplace", + "label": "contract IERC20", + "numberOfBytes": "20" + }, + "t_enum(TaskStatus)4748": { + "encoding": "inplace", + "label": "enum ITMP.TaskStatus", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_address,t_struct(WorkerStats)4803_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct ITMP.WorkerStats)", + "numberOfBytes": "32", + "value": "t_struct(WorkerStats)4803_storage" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => bytes32[])", + "numberOfBytes": "32", + "value": "t_array(t_bytes32)dyn_storage" + }, + "t_mapping(t_bytes32,t_array(t_struct(Bid)2004_storage)dyn_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct TaskMarket.Bid[])", + "numberOfBytes": "32", + "value": "t_array(t_struct(Bid)2004_storage)dyn_storage" + }, + "t_mapping(t_bytes32,t_struct(Task)4795_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct ITMP.Task)", + "numberOfBytes": "32", + "value": "t_struct(Task)4795_storage" + }, + "t_mapping(t_bytes32,t_uint256)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_string_storage": { + "encoding": "bytes", + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(Bid)2004_storage": { + "encoding": "inplace", + "label": "struct TaskMarket.Bid", + "numberOfBytes": "64", + "members": [ + { + "astId": 2001, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "worker", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 2003, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "price", + "offset": 0, + "slot": "1", + "type": "t_uint256" + } + ] + }, + "t_struct(Task)4795_storage": { + "encoding": "inplace", + "label": "struct ITMP.Task", + "numberOfBytes": "608", + "members": [ + { + "astId": 4751, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "id", + "offset": 0, + "slot": "0", + "type": "t_bytes32" + }, + { + "astId": 4753, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "requester", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 4755, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "worker", + "offset": 0, + "slot": "2", + "type": "t_address" + }, + { + "astId": 4757, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "reward", + "offset": 0, + "slot": "3", + "type": "t_uint256" + }, + { + "astId": 4759, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "createdAt", + "offset": 0, + "slot": "4", + "type": "t_uint256" + }, + { + "astId": 4761, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "expiryTime", + "offset": 0, + "slot": "5", + "type": "t_uint256" + }, + { + "astId": 4764, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "status", + "offset": 0, + "slot": "6", + "type": "t_enum(TaskStatus)4748" + }, + { + "astId": 4766, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "rating", + "offset": 1, + "slot": "6", + "type": "t_uint8" + }, + { + "astId": 4768, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "mode", + "offset": 2, + "slot": "6", + "type": "t_bytes4" + }, + { + "astId": 4770, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "stakeAmount", + "offset": 0, + "slot": "7", + "type": "t_uint256" + }, + { + "astId": 4772, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "claimer", + "offset": 0, + "slot": "8", + "type": "t_address" + }, + { + "astId": 4774, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "claimedAt", + "offset": 0, + "slot": "9", + "type": "t_uint256" + }, + { + "astId": 4776, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "pitchDeadline", + "offset": 0, + "slot": "10", + "type": "t_uint256" + }, + { + "astId": 4778, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "feeBps", + "offset": 0, + "slot": "11", + "type": "t_uint16" + }, + { + "astId": 4780, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "bidDeadline", + "offset": 0, + "slot": "12", + "type": "t_uint256" + }, + { + "astId": 4782, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "maxPrice", + "offset": 0, + "slot": "13", + "type": "t_uint256" + }, + { + "astId": 4784, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "deliverable", + "offset": 0, + "slot": "14", + "type": "t_bytes32" + }, + { + "astId": 4786, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "contentHash", + "offset": 0, + "slot": "15", + "type": "t_bytes32" + }, + { + "astId": 4788, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "contentURI", + "offset": 0, + "slot": "16", + "type": "t_string_storage" + }, + { + "astId": 4790, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "auctionSubtype", + "offset": 0, + "slot": "17", + "type": "t_bytes4" + }, + { + "astId": 4792, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "lowestBidder", + "offset": 4, + "slot": "17", + "type": "t_address" + }, + { + "astId": 4794, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "lowestBidPrice", + "offset": 0, + "slot": "18", + "type": "t_uint256" + } + ] + }, + "t_struct(WorkerStats)4803_storage": { + "encoding": "inplace", + "label": "struct ITMP.WorkerStats", + "numberOfBytes": "96", + "members": [ + { + "astId": 4798, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "completedTasks", + "offset": 0, + "slot": "0", + "type": "t_uint256" + }, + { + "astId": 4800, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "ratedTasks", + "offset": 0, + "slot": "1", + "type": "t_uint256" + }, + { + "astId": 4802, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "totalStars", + "offset": 0, + "slot": "2", + "type": "t_uint256" + } + ] + }, + "t_uint16": { + "encoding": "inplace", + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } +} diff --git a/storage-layout.before.json b/storage-layout.before.json new file mode 100644 index 0000000..6eb4a21 --- /dev/null +++ b/storage-layout.before.json @@ -0,0 +1,443 @@ +{ + "storage": [ + { + "astId": 2007, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "usdcToken", + "offset": 0, + "slot": "0", + "type": "t_contract(IERC20)1095" + }, + { + "astId": 2012, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "trustedForwarders", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 2017, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "tasks", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_bytes32,t_struct(Task)4574_storage)" + }, + { + "astId": 2022, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "workerStats", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_address,t_struct(WorkerStats)4582_storage)" + }, + { + "astId": 2026, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "stakeForfeit", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_bytes32,t_uint256)" + }, + { + "astId": 2032, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "taskBids", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_bytes32,t_array(t_struct(Bid)2004_storage)dyn_storage)" + }, + { + "astId": 2034, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "defaultFeeBps", + "offset": 0, + "slot": "6", + "type": "t_uint16" + }, + { + "astId": 2036, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "feeRecipient", + "offset": 2, + "slot": "6", + "type": "t_address" + }, + { + "astId": 2038, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "totalFeesCollected", + "offset": 0, + "slot": "7", + "type": "t_uint256" + }, + { + "astId": 2040, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "reputationRegistry", + "offset": 0, + "slot": "8", + "type": "t_address" + }, + { + "astId": 2045, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "requesterNonce", + "offset": 0, + "slot": "9", + "type": "t_mapping(t_address,t_uint256)" + }, + { + "astId": 2049, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "__gap", + "offset": 0, + "slot": "10", + "type": "t_array(t_uint256)48_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_struct(Bid)2004_storage)dyn_storage": { + "encoding": "dynamic_array", + "label": "struct TaskMarket.Bid[]", + "numberOfBytes": "32", + "base": "t_struct(Bid)2004_storage" + }, + "t_array(t_uint256)48_storage": { + "encoding": "inplace", + "label": "uint256[48]", + "numberOfBytes": "1536", + "base": "t_uint256" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_bytes4": { + "encoding": "inplace", + "label": "bytes4", + "numberOfBytes": "4" + }, + "t_contract(IERC20)1095": { + "encoding": "inplace", + "label": "contract IERC20", + "numberOfBytes": "20" + }, + "t_enum(TaskStatus)4527": { + "encoding": "inplace", + "label": "enum ITMP.TaskStatus", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_address,t_struct(WorkerStats)4582_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct ITMP.WorkerStats)", + "numberOfBytes": "32", + "value": "t_struct(WorkerStats)4582_storage" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_bytes32,t_array(t_struct(Bid)2004_storage)dyn_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct TaskMarket.Bid[])", + "numberOfBytes": "32", + "value": "t_array(t_struct(Bid)2004_storage)dyn_storage" + }, + "t_mapping(t_bytes32,t_struct(Task)4574_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct ITMP.Task)", + "numberOfBytes": "32", + "value": "t_struct(Task)4574_storage" + }, + "t_mapping(t_bytes32,t_uint256)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_string_storage": { + "encoding": "bytes", + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(Bid)2004_storage": { + "encoding": "inplace", + "label": "struct TaskMarket.Bid", + "numberOfBytes": "64", + "members": [ + { + "astId": 2001, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "worker", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 2003, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "price", + "offset": 0, + "slot": "1", + "type": "t_uint256" + } + ] + }, + "t_struct(Task)4574_storage": { + "encoding": "inplace", + "label": "struct ITMP.Task", + "numberOfBytes": "608", + "members": [ + { + "astId": 4530, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "id", + "offset": 0, + "slot": "0", + "type": "t_bytes32" + }, + { + "astId": 4532, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "requester", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 4534, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "worker", + "offset": 0, + "slot": "2", + "type": "t_address" + }, + { + "astId": 4536, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "reward", + "offset": 0, + "slot": "3", + "type": "t_uint256" + }, + { + "astId": 4538, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "createdAt", + "offset": 0, + "slot": "4", + "type": "t_uint256" + }, + { + "astId": 4540, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "expiryTime", + "offset": 0, + "slot": "5", + "type": "t_uint256" + }, + { + "astId": 4543, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "status", + "offset": 0, + "slot": "6", + "type": "t_enum(TaskStatus)4527" + }, + { + "astId": 4545, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "rating", + "offset": 1, + "slot": "6", + "type": "t_uint8" + }, + { + "astId": 4547, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "mode", + "offset": 2, + "slot": "6", + "type": "t_bytes4" + }, + { + "astId": 4549, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "stakeAmount", + "offset": 0, + "slot": "7", + "type": "t_uint256" + }, + { + "astId": 4551, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "claimer", + "offset": 0, + "slot": "8", + "type": "t_address" + }, + { + "astId": 4553, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "claimedAt", + "offset": 0, + "slot": "9", + "type": "t_uint256" + }, + { + "astId": 4555, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "pitchDeadline", + "offset": 0, + "slot": "10", + "type": "t_uint256" + }, + { + "astId": 4557, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "feeBps", + "offset": 0, + "slot": "11", + "type": "t_uint16" + }, + { + "astId": 4559, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "bidDeadline", + "offset": 0, + "slot": "12", + "type": "t_uint256" + }, + { + "astId": 4561, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "maxPrice", + "offset": 0, + "slot": "13", + "type": "t_uint256" + }, + { + "astId": 4563, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "deliverable", + "offset": 0, + "slot": "14", + "type": "t_bytes32" + }, + { + "astId": 4565, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "contentHash", + "offset": 0, + "slot": "15", + "type": "t_bytes32" + }, + { + "astId": 4567, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "contentURI", + "offset": 0, + "slot": "16", + "type": "t_string_storage" + }, + { + "astId": 4569, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "auctionSubtype", + "offset": 0, + "slot": "17", + "type": "t_bytes4" + }, + { + "astId": 4571, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "lowestBidder", + "offset": 4, + "slot": "17", + "type": "t_address" + }, + { + "astId": 4573, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "lowestBidPrice", + "offset": 0, + "slot": "18", + "type": "t_uint256" + } + ] + }, + "t_struct(WorkerStats)4582_storage": { + "encoding": "inplace", + "label": "struct ITMP.WorkerStats", + "numberOfBytes": "96", + "members": [ + { + "astId": 4577, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "completedTasks", + "offset": 0, + "slot": "0", + "type": "t_uint256" + }, + { + "astId": 4579, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "ratedTasks", + "offset": 0, + "slot": "1", + "type": "t_uint256" + }, + { + "astId": 4581, + "contract": "src/TaskMarket.sol:TaskMarket", + "label": "totalStars", + "offset": 0, + "slot": "2", + "type": "t_uint256" + } + ] + }, + "t_uint16": { + "encoding": "inplace", + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } +} diff --git a/test/TaskMarket.t.sol b/test/TaskMarket.t.sol index 038fe0c..ed534bf 100644 --- a/test/TaskMarket.t.sol +++ b/test/TaskMarket.t.sol @@ -923,10 +923,14 @@ contract TaskMarketTest is Test { uint256 acceptPrice = 40 * 10 ** 6; bytes32 taskId = _createTask(requester, REWARD, DURATION, market.AUCTION(), 0, 1 days, market.AUCTION_DUTCH()); + // Legacy event pair, kept for indexer backward compatibility. vm.expectEmit(true, true, false, true); emit TaskMarket.BidSubmitted(taskId, worker1, acceptPrice); vm.expectEmit(true, true, false, false); emit TaskMarket.TaskWorkerSelected(taskId, worker1); + // New dedicated event — preferred by new indexers. + vm.expectEmit(true, true, false, true); + emit TaskMarket.AuctionAccepted(taskId, worker1, acceptPrice); _acceptAuction(taskId, worker1, acceptPrice); TaskMarket.Task memory task = market.getTask(taskId); @@ -1174,4 +1178,123 @@ contract TaskMarketTest is Test { TaskMarket.Task memory task = market.getTask(taskId); assertEq(task.reward, newReward); } + + // ----------------------------------------------------------------------- + // submitPitch tests + // ----------------------------------------------------------------------- + + function _submitPitch(bytes32 taskId, address _worker, bytes32 pitchHash) internal { + _relay(_worker, 0, abi.encodeCall(market.submitPitch, (taskId, pitchHash))); + } + + function test_SubmitPitch_emitsEventAndStoresHash() public { + bytes32 taskId = _createTask(requester, REWARD, DURATION, market.PITCH(), 2 days, 0); + bytes32 pitchHash = keccak256(abi.encode(taskId, worker1, "my pitch text")); + + vm.expectEmit(true, true, false, true); + emit TaskMarket.PitchSubmitted(taskId, worker1, pitchHash); + _submitPitch(taskId, worker1, pitchHash); + + assertEq(market.taskPitchHashes(taskId, 0), pitchHash); + } + + function test_SubmitPitch_appendsMultiple() public { + bytes32 taskId = _createTask(requester, REWARD, DURATION, market.PITCH(), 2 days, 0); + bytes32 hash1 = keccak256(abi.encode(taskId, worker1, "pitch 1")); + bytes32 hash2 = keccak256(abi.encode(taskId, worker2, "pitch 2")); + + _submitPitch(taskId, worker1, hash1); + _submitPitch(taskId, worker2, hash2); + + assertEq(market.taskPitchHashes(taskId, 0), hash1); + assertEq(market.taskPitchHashes(taskId, 1), hash2); + } + + function test_SubmitPitch_revertsOnWrongMode() public { + bytes32 taskId = _createTask(requester, REWARD, DURATION, market.BOUNTY(), 0, 0); + vm.expectRevert("Not a Pitch task"); + _submitPitch(taskId, worker1, keccak256("pitch")); + } + + function test_SubmitPitch_revertsAfterPitchDeadline() public { + // Task has a 2-day pitch window inside a 7-day expiry. + // Warping past the pitch deadline (but not the expiry) must revert. + bytes32 taskId = _createTask(requester, REWARD, DURATION, market.PITCH(), 2 days, 0); + vm.warp(block.timestamp + 2 days + 1); + vm.expectRevert("Pitch deadline passed"); + _submitPitch(taskId, worker1, keccak256("late pitch")); + } + + function test_SubmitPitch_revertsWhenBothDeadlinesPassed() public { + // Warping past the full task duration (7 days) exceeds both the pitch + // deadline (2 days) and the expiry time. The pitch-deadline check fires + // first; this test just confirms the overall "too late" path reverts. + bytes32 taskId = _createTask(requester, REWARD, DURATION, market.PITCH(), 2 days, 0); + vm.warp(block.timestamp + DURATION + 1); + vm.expectRevert("Pitch deadline passed"); + _submitPitch(taskId, worker1, keccak256("pitch")); + } + + function test_SubmitPitch_revertsOnEmptyHash() public { + bytes32 taskId = _createTask(requester, REWARD, DURATION, market.PITCH(), 2 days, 0); + vm.expectRevert("Empty pitch hash"); + _submitPitch(taskId, worker1, bytes32(0)); + } + + // ----------------------------------------------------------------------- + // submitProof tests + // ----------------------------------------------------------------------- + + function _submitProof(bytes32 taskId, address _worker, bytes32 proofHash, bytes32 proofType, uint256 metricValue) internal { + _relay(_worker, 0, abi.encodeCall(market.submitProof, (taskId, proofHash, proofType, metricValue))); + } + + function test_SubmitProof_emitsEventAndStoresHash() public { + bytes32 taskId = _createTask(requester, REWARD, DURATION, market.BENCHMARK(), 0, 0); + bytes32 proofHash = keccak256(abi.encode(taskId, worker1, "proof data")); + bytes32 proofType = keccak256("eval"); + uint256 metricValue = 9500; + + vm.expectEmit(true, true, false, true); + emit TaskMarket.ProofSubmitted(taskId, worker1, proofHash, proofType, metricValue); + _submitProof(taskId, worker1, proofHash, proofType, metricValue); + + assertEq(market.taskProofHashes(taskId, 0), proofHash); + } + + function test_SubmitProof_revertsOnWrongMode() public { + bytes32 taskId = _createTask(requester, REWARD, DURATION, market.BOUNTY(), 0, 0); + vm.expectRevert("Not a Benchmark task"); + _submitProof(taskId, worker1, keccak256("proof"), keccak256("eval"), 0); + } + + function test_SubmitProof_revertsAfterExpiry() public { + bytes32 taskId = _createTask(requester, REWARD, DURATION, market.BENCHMARK(), 0, 0); + vm.warp(block.timestamp + DURATION + 1); + vm.expectRevert("Task expired"); + _submitProof(taskId, worker1, keccak256("proof"), keccak256("eval"), 0); + } + + function test_SubmitProof_revertsOnEmptyHash() public { + bytes32 taskId = _createTask(requester, REWARD, DURATION, market.BENCHMARK(), 0, 0); + vm.expectRevert("Empty proof hash"); + _submitProof(taskId, worker1, bytes32(0), keccak256("eval"), 0); + } + + // ----------------------------------------------------------------------- + // Storage layout — __gap is now 46 slots after consuming 2 for the new + // pitch / proof hash mappings. If a future upgrade reorders or shrinks + // gap incorrectly, this read of the last gap slot will fail. + // ----------------------------------------------------------------------- + + function test_StorageGapIs46Slots() public view { + // taskPitchHashes is at slot 10, taskProofHashes at 11, gap starts at 12. + // The last gap slot is 12 + 46 - 1 = 57; reading slot 58 should be a + // brand-new uninitialised slot just past the gap (zero) — and reading + // slot 57 should also be zero (the gap is just uint256[46] uninitialised). + bytes32 firstGapSlot = vm.load(address(market), bytes32(uint256(12))); + bytes32 lastGapSlot = vm.load(address(market), bytes32(uint256(57))); + assertEq(firstGapSlot, bytes32(0)); + assertEq(lastGapSlot, bytes32(0)); + } } From 0c25b54a677fbb01169fdf05aaa15bf69a49e4a4 Mon Sep 17 00:00:00 2001 From: beauwilliams Date: Tue, 12 May 2026 21:06:11 +1000 Subject: [PATCH 2/2] spec(erc-8195): on-chain pitches, proofs, and AuctionAccepted MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Brings the ERC-8195 draft in line with the v2 reference implementation. - ITMP interface gains submitPitch, submitProof, acceptAuction functions and PitchSubmitted, ProofSubmitted, AuctionAccepted events. - Pitch state machine no longer says "off-chain"; pitch hashes are anchored on-chain via submitPitch and indexed via PitchSubmitted. - Benchmark mode documents submitProof as the canonical on-chain anchor path. Validation Registry acceptance remains supported. - Auction mode adds the acceptAuction* transition (Dutch / reverse-Dutch); AuctionAccepted event documented as the primary signal, with the legacy BidSubmitted + TaskWorkerSelected pair marked OPTIONAL for backward compatibility. - Part IV renamed "Deliverable Anchoring" -> "Content Anchoring"; generalized to cover all three anchor types. Pitch and proof hashes MUST be domain-separated as keccak256(abi.encode(taskId, worker, content)) — rationale added. - Part VIII indexer requirements extended to require PitchSubmitted, ProofSubmitted, and AuctionAccepted with their full argument lists. - Appendix A.3 adds a Proof Payload schema mirroring the existing Pitch Payload. - Reference Implementation paragraph updated to mention the new test coverage and storage-layout verifier script. --- erc-8195.md | 186 +++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 162 insertions(+), 24 deletions(-) diff --git a/erc-8195.md b/erc-8195.md index 7a6ff85..151f0e3 100644 --- a/erc-8195.md +++ b/erc-8195.md @@ -187,6 +187,29 @@ interface ITMP is IERC165 { bytes32 deliverable ); + /// @notice Emitted when a worker anchors a pitch hash for a Pitch-mode task. + event PitchSubmitted( + bytes32 indexed taskId, + address indexed worker, + bytes32 pitchHash + ); + + /// @notice Emitted when a worker anchors a proof hash for a Benchmark-mode task. + event ProofSubmitted( + bytes32 indexed taskId, + address indexed worker, + bytes32 proofHash, + bytes32 proofType, + uint256 metricValue + ); + + /// @notice Emitted when a worker accepts a clock price on a Dutch / reverse-Dutch auction. + event AuctionAccepted( + bytes32 indexed taskId, + address indexed worker, + uint256 acceptedPrice + ); + /// @notice Emitted when the requester accepts a submission and payment is released. event TaskCompleted( bytes32 indexed taskId, @@ -220,6 +243,23 @@ interface ITMP is IERC165 { /// @notice Record a deliverable hash submitted by a worker. function submitWork(bytes32 taskId, address worker, bytes32 deliverable) external; + /// @notice Anchor a pitch hash on a Pitch-mode task before pitchDeadline. + /// @dev pitchHash MUST be a domain-separated commitment over (taskId, worker, pitchText). + function submitPitch(bytes32 taskId, bytes32 pitchHash) external; + + /// @notice Anchor a proof hash on a Benchmark-mode task. + /// @dev proofHash MUST be a domain-separated commitment over (taskId, worker, proofData). + /// proofType is `bytes32(keccak256(proofTypeString))`; metricValue is the claimed result. + function submitProof( + bytes32 taskId, + bytes32 proofHash, + bytes32 proofType, + uint256 metricValue + ) external; + + /// @notice Accept a Dutch / reverse-Dutch auction clock price on behalf of the worker. + function acceptAuction(bytes32 taskId, address worker, uint256 acceptedPrice) external; + /// @notice Accept a worker's submission and release the escrowed reward. function acceptSubmission(bytes32 taskId, address requester, address worker) external; @@ -293,7 +333,7 @@ Requester selects a worker from pitches before work begins. ``` Open - --[submitPitch*]----> Open (pitch recorded off-chain; status unchanged) + --[submitPitch*]----> Open (pitch hash anchored on-chain; status unchanged) --[selectWorker]----> WorkerSelected --[expire]----------> Expired @@ -303,33 +343,47 @@ WorkerSelected --[expire]----------> Expired ``` +`submitPitch` MUST revert after `pitchDeadline`. The pitch text itself stays off-chain; +the on-chain anchor is `keccak256(abi.encode(taskId, worker, pitchText))` and `PitchSubmitted` +provides indexable provenance. + ### Benchmark Mode -Work is validated automatically by the ERC-8004 Validation Registry. +Workers anchor a proof hash on-chain; the requester (or an automated validator) accepts. ``` Open - --[submitWork]--> PendingApproval - --[expire]------> Expired + --[submitProof*]--> Open (proof hash anchored on-chain; status unchanged) + --[submitWork]----> PendingApproval (legacy deliverable-only submission) + --[expire]--------> Expired PendingApproval + --[acceptSubmission]----------------------------> Accepted --[acceptSubmission (via Validation Registry)]--> Accepted - --[expire]-----> Expired (deliverable retained) + --[expire]--------------------------------------> Expired (deliverable retained) ``` -In Benchmark mode, `evaluatorFor(taskId)` returns the ERC-8004 Validation Registry address. -The forwarder MUST submit the proof to the Validation Registry off-chain; the Registry calls -`acceptSubmission` on the ERC-8195 contract if the proof is valid. +`submitProof` anchors `proofHash = keccak256(abi.encode(taskId, worker, proofData))` together +with a `bytes32 proofType` (`keccak256(proofTypeString)`) and a `uint256 metricValue` (the +claimed benchmark result). Acceptance is still a requester action — `acceptSubmission` — +performed either directly or by an ERC-8004 Validation Registry contract delegated via +`evaluatorFor(taskId)`. Implementations MAY route the proof to a Validation Registry +off-chain for automated acceptance; the on-chain `ProofSubmitted` event provides the audit +trail regardless of which path produces the eventual `TaskCompleted`. ### Auction Mode -Workers submit sealed bids; lowest bidder wins the right to do the work. +Auction Mode covers four price-discovery subtypes. English and reverse-English +auctions use `submitBid` + `selectLowestBidder`; Dutch and reverse-Dutch +auctions use `acceptAuction` to lock in a clock price the moment a worker +accepts it. ``` Open - --[submitBid*]-------> Open (bid recorded; status unchanged) - --[selectLowestBidder]--> Claimed (winning bidder locked) - --[expire]-----------> Expired + --[submitBid*]-----------> Open (English / reverse-English; bid recorded) + --[selectLowestBidder]----> Claimed (English / reverse-English; winner locked) + --[acceptAuction*]--------> Claimed (Dutch / reverse-Dutch; clock price accepted) + --[expire]----------------> Expired Claimed (winner locked) --[submitWork*]----> Claimed (deliverable hash recorded; status unchanged) @@ -337,6 +391,10 @@ Claimed (winner locked) --[expire]----------> Expired ``` +`acceptAuction(taskId, worker, acceptedPrice)` MUST emit `AuctionAccepted`. Implementations +MAY additionally emit the legacy `BidSubmitted + TaskWorkerSelected` pair for +backward compatibility with indexers that pre-date `AuctionAccepted`. + Note: `selectLowestBidder` performs an O(n) scan over all bids. Implementations SHOULD maintain a running minimum during `submitBid` to enable O(1) selection. @@ -364,19 +422,51 @@ This scheme guarantees: --- -### Part IV: Deliverable Anchoring +### Part IV: Content Anchoring + +ERC-8195 anchors three classes of off-chain content via `bytes32` hash commitments: -The `submitWork` function MUST accept a `bytes32 deliverable` parameter and store it on-chain -as part of the task record. The deliverable hash provides a tamper-evident anchor for: +| Anchor | Function | Storage | Event | +|--------|----------|---------|-------| +| Deliverable | `submitWork(taskId, worker, deliverable)` | `Task.deliverable` (single value) | `TaskSubmitted` | +| Pitch | `submitPitch(taskId, pitchHash)` | append-only list per task | `PitchSubmitted` | +| Proof | `submitProof(taskId, proofHash, proofType, metricValue)` | append-only list per task | `ProofSubmitted` | + +Hash commitments provide tamper-evident anchors for: - **IPFS CIDs** — keccak256 of the CID bytes - **File content** — keccak256 of the raw file - **ZK commitments** — commitment value from a zero-knowledge proof - **Merkle roots** — root of a structured proof tree +- **Structured manifests** — keccak256 of a canonical JSON serialization + +#### Domain separation (normative) + +Pitch and proof hashes MUST be domain-separated to prevent replay across tasks or workers. +Compliant implementations MUST compute: -The deliverable field MUST be zero for tasks where no submission has been recorded. +```text +pitchHash = keccak256(abi.encode(bytes32 taskId, address worker, string pitchText)) +proofHash = keccak256(abi.encode(bytes32 taskId, address worker, string proofData)) +``` + +This binding ensures that the same off-chain content submitted by a different worker, or to a +different task, produces a different on-chain hash. The contract itself MAY treat `pitchHash` +and `proofHash` as opaque bytes32 values; the binding rule is enforced by the backend computing +the hash and is verifiable by any third party with access to the off-chain preimage. + +#### Deliverable field invariant + +The `Task.deliverable` field MUST be zero for tasks where no submission has been recorded. Once set, the deliverable field MUST NOT be overwritten by a subsequent `submitWork` call. +#### Pitch and proof list invariants + +`submitPitch` and `submitProof` MUST append to the per-task list and emit the corresponding +event. Implementations MAY enforce a single-submission-per-worker policy at the application +layer, but the contract itself MUST NOT reject a second submission solely on the basis that the +caller has submitted previously. + --- ### Part V: ERC-8004 Integration (Normative) @@ -525,6 +615,13 @@ from a stateless event scan. Specifically: - `TaskCreated` MUST include all parameters needed to reconstruct the initial task state. - `TaskSubmitted` MUST include the deliverable hash. +- `PitchSubmitted` MUST be emitted by every successful `submitPitch` call and MUST include + `taskId`, `worker`, and `pitchHash`. +- `ProofSubmitted` MUST be emitted by every successful `submitProof` call and MUST include + `taskId`, `worker`, `proofHash`, `proofType`, and `metricValue`. +- `AuctionAccepted` MUST be emitted by every successful `acceptAuction` call and MUST include + `taskId`, `worker`, and `acceptedPrice`. Implementations MAY additionally emit the legacy + `BidSubmitted + TaskWorkerSelected` pair for backward compatibility. - `TaskCompleted` MUST include worker address and reward amount. - `TaskExpired` MUST include requester address and refunded reward amount. - `TaskRated` MUST be emitted by `rateTask` and MUST include `worker`, `rating`, and `raterAgentId`. @@ -549,12 +646,33 @@ ID, and the second will fail on-chain after paying gas. They also require the cl entropy, which is non-trivial for lightweight agents. Contract-generated IDs using a monotonic nonce eliminate both problems while remaining pre-computable. -### submitWork as a separate step +### Content anchoring as a separate step -Separating `submitWork` from `acceptSubmission` provides an on-chain audit trail: -- The deliverable hash is anchored before the requester evaluates it. +Separating content-anchoring functions (`submitWork`, `submitPitch`, `submitProof`) from +`acceptSubmission` provides an on-chain audit trail across the whole task lifecycle: + +- The content hash is anchored before the requester evaluates it. - ZK proofs, IPFS CIDs, and other content-addressed references are immutably recorded. -- Disputes have an on-chain record of exactly what was submitted and when. +- Disputes have an on-chain record of exactly what was submitted, by whom, and when. + +Pitch and proof anchoring extend the same pattern to procurement-time content: a worker's +proposed approach (pitch) or their benchmark result (proof) becomes part of the on-chain +record, not just deliverables submitted after worker selection. This closes a class of +disputes where the operator could previously rewrite pitch text or proof data between +submission and selection without leaving an on-chain trace. + +### Domain separation of pitch and proof hashes + +`pitchHash` and `proofHash` are required to commit to `(taskId, worker, content)` rather +than `keccak256(content)` alone. Two reasons: + +1. **Cross-task replay** — without `taskId` binding, a worker could submit one pitch to + multiple tasks and the on-chain hash would match for all of them, breaking the + one-pitch-per-worker-per-task semantic. +2. **Worker spoofing** — without `worker` binding, an operator could attribute a pitch to + the wrong worker and the on-chain hash would not detect the swap. + +Using `abi.encode` (not `abi.encodePacked`) avoids ambiguity for variable-length strings. ### Off-chain submission in Claim/Pitch/Auction modes @@ -575,7 +693,7 @@ additive upgrade, provided the underlying function signatures match the ITMP int ## Reference Implementation -See [daydreamsai/taskmarket-contracts](https://github.com/daydreamsai/taskmarket-contracts) for the reference implementation (`src/TaskMarket.sol`) and compliance test suite (`test/ITMP.t.sol`). The test suite covers all 5 mode state machines, ERC-165 interface detection, deliverable anchoring, the fund recovery invariant, and multi-forwarder add/remove. +See [daydreamsai/taskmarket-contracts](https://github.com/daydreamsai/taskmarket-contracts) for the reference implementation (`src/TaskMarket.sol`) and compliance test suite (`test/ITMP.t.sol`). The test suite covers all 5 mode state machines, ERC-165 interface detection, deliverable / pitch / proof anchoring with domain separation, the `AuctionAccepted` event coexisting with the legacy bid-pair, the fund recovery invariant, and multi-forwarder add/remove. The repository also commits before/after storage-layout snapshots and a verifier script (`scripts/verify-storage-layout.ts`) demonstrating the UUPS upgrade-safety pattern used by the reference implementation. ### Appendix A: Canonical Task Metadata JSON Schema @@ -692,10 +810,11 @@ choose to integrate one. The following schemas define canonical off-chain payloads for mode-specific coordination actions. Forwarder backends SHOULD use these schemas for interoperability. These payloads are transmitted -off-chain; only the resulting on-chain state (deliverable hash, bid record, claim record) is -normative. +off-chain; only the resulting on-chain state (deliverable hash, pitch hash, proof hash, bid +record, claim record) is normative. -**Pitch Payload** (submitted when `submitPitch*` is relayed): +**Pitch Payload** (submitted when `submitPitch*` is relayed; the resulting on-chain `pitchHash` +MUST equal `keccak256(abi.encode(taskId, worker, pitchText))`): ```json { @@ -713,6 +832,25 @@ normative. } ``` +**Proof Payload** (submitted when `submitProof*` is relayed; the resulting on-chain `proofHash` +MUST equal `keccak256(abi.encode(taskId, worker, proofData))`): + +```json +{ + "title": "ERC-8195 Proof Payload", + "type": "object", + "required": ["taskId", "worker", "proofData", "proofType", "submittedAt"], + "properties": { + "taskId": { "type": "string" }, + "worker": { "type": "string" }, + "proofData": { "type": "string" }, + "proofType": { "type": "string", "description": "Pre-image of the on-chain bytes32 proofType (e.g. 'tlsn', 'zk', 'eval', 'custom')" }, + "metricValue": { "type": "string", "description": "Non-negative integer as decimal string; anchored on-chain as uint256" }, + "submittedAt": { "type": "integer" } + } +} +``` + **Bid Payload** (submitted when `submitBid*` is relayed): ```json