diff --git a/cmd/curio/tasks/tasks.go b/cmd/curio/tasks/tasks.go index abfa0b1b2..e10b88270 100644 --- a/cmd/curio/tasks/tasks.go +++ b/cmd/curio/tasks/tasks.go @@ -293,8 +293,7 @@ func StartTasks(ctx context.Context, dependencies *deps.Deps, shutdownChan chan es := getSenderEth() sdeps.EthSender = es - pdp.NewWatcherCreate(db, must.One(dependencies.EthClient.Val()), chainSched) - pdp.NewWatcherPieceAdd(db, must.One(dependencies.EthClient.Val()), chainSched) + pdp.NewProofSetWatch(db, must.One(dependencies.EthClient.Val()), chainSched) pdpProveTask := pdp.NewProveTask(chainSched, db, must.One(dependencies.EthClient.Val()), dependencies.Chain, es, dependencies.CachedPieceReader) pdpNextProvingPeriodTask := pdp.NewNextProvingPeriodTask(db, must.One(dependencies.EthClient.Val()), dependencies.Chain, chainSched, es) @@ -512,7 +511,7 @@ func machineDetails(deps *deps.Deps, activeTasks []harmonytask.TaskInterface, ma }) sort.Strings(miners) - _, err := deps.DB.Exec(context.Background(), `INSERT INTO harmony_machine_details + _, err := deps.DB.Exec(context.Background(), `INSERT INTO harmony_machine_details (tasks, layers, startup_time, miners, machine_id, machine_name) VALUES ($1, $2, $3, $4, $5, $6) ON CONFLICT (machine_id) DO UPDATE SET tasks=$1, layers=$2, startup_time=$3, miners=$4, machine_id=$5, machine_name=$6`, strings.Join(taskNames, ","), strings.Join(deps.Layers, ","), diff --git a/harmony/harmonydb/sql/20251014-pdp-piece-adds-datasetid-nullable.sql b/harmony/harmonydb/sql/20251014-pdp-piece-adds-datasetid-nullable.sql new file mode 100644 index 000000000..80b9263ff --- /dev/null +++ b/harmony/harmonydb/sql/20251014-pdp-piece-adds-datasetid-nullable.sql @@ -0,0 +1,35 @@ +-- Changes the data_set column to be nullable in the pdp_data_set_piece_adds table to faciliate create-and-add workflow. +-- Combined migration: make `data_set` nullable and adjust PK +-- New primary key: (add_message_hash HASH, add_message_index ASC) +-- Old primary key: (data_set HASH, add_message_hash ASC, add_message_index ASC) + +DO $$ +BEGIN + -- Step 1: Drop existing PK if it still uses data_set + IF EXISTS ( + SELECT 1 + FROM pg_constraint + WHERE conname = 'pdp_data_set_piece_adds_pk' + AND conrelid = 'pdp_data_set_piece_adds'::regclass + ) THEN + ALTER TABLE pdp_data_set_piece_adds + DROP CONSTRAINT pdp_data_set_piece_adds_pk; + END IF; + + -- Step 2: Create new PK with add_message_hash as HASH key + ALTER TABLE pdp_data_set_piece_adds + ADD CONSTRAINT pdp_data_set_piece_adds_pk + PRIMARY KEY (add_message_hash HASH, add_message_index ASC); + + -- Step 3: Make `data_set` nullable if it is currently NOT NULL + IF EXISTS ( + SELECT 1 + FROM information_schema.columns + WHERE table_name = 'pdp_data_set_piece_adds' + AND column_name = 'data_set' + AND is_nullable = 'NO' + ) THEN + ALTER TABLE pdp_data_set_piece_adds + ALTER COLUMN data_set DROP NOT NULL; + END IF; +END $$; diff --git a/pdp/contract/PDPVerifier.abi b/pdp/contract/PDPVerifier.abi index 069b9a0bb..dea36e789 100644 --- a/pdp/contract/PDPVerifier.abi +++ b/pdp/contract/PDPVerifier.abi @@ -4,19 +4,6 @@ "inputs": [], "stateMutability": "nonpayable" }, - { - "type": "function", - "name": "BURN_ACTOR", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "view" - }, { "type": "function", "name": "EXTRA_DATA_MAX_SIZE", @@ -30,32 +17,6 @@ ], "stateMutability": "view" }, - { - "type": "function", - "name": "FIL_USD_PRICE_FEED_ID", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "LEAF_SIZE", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, { "type": "function", "name": "MAX_ENQUEUED_REMOVALS", @@ -108,45 +69,6 @@ ], "stateMutability": "view" }, - { - "type": "function", - "name": "PYTH", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract IPyth" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "RANDOMNESS_PRECOMPILE", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "SECONDS_IN_DAY", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, { "type": "function", "name": "UPGRADE_INTERFACE_VERSION", @@ -182,6 +104,11 @@ "type": "uint256", "internalType": "uint256" }, + { + "name": "listenerAddr", + "type": "address", + "internalType": "address" + }, { "name": "pieceData", "type": "tuple[]", @@ -207,7 +134,7 @@ "internalType": "uint256" } ], - "stateMutability": "nonpayable" + "stateMutability": "payable" }, { "type": "function", @@ -217,9 +144,23 @@ "name": "setId", "type": "uint256", "internalType": "uint256" - }, + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "calculateProofFeeForSize", + "inputs": [ { - "name": "estimatedGasFee", + "name": "rawSize", "type": "uint256", "internalType": "uint256" } @@ -312,6 +253,32 @@ "outputs": [], "stateMutability": "nonpayable" }, + { + "type": "function", + "name": "feeEffectiveTime", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint64", + "internalType": "uint64" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "feePerTiB", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint96", + "internalType": "uint96" + } + ], + "stateMutability": "view" + }, { "type": "function", "name": "findPieceIds", @@ -531,24 +498,6 @@ ], "stateMutability": "view" }, - { - "type": "function", - "name": "getFILUSDPrice", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "", - "type": "int32", - "internalType": "int32" - } - ], - "stateMutability": "view" - }, { "type": "function", "name": "getNextChallengeEpoch", @@ -815,6 +764,19 @@ "outputs": [], "stateMutability": "nonpayable" }, + { + "type": "function", + "name": "proposedFeePerTiB", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint96", + "internalType": "uint96" + } + ], + "stateMutability": "view" + }, { "type": "function", "name": "provePossession", @@ -901,6 +863,19 @@ "outputs": [], "stateMutability": "nonpayable" }, + { + "type": "function", + "name": "updateProofFee", + "inputs": [ + { + "name": "newFeePerTiB", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, { "type": "function", "name": "upgradeToAndCall", @@ -989,6 +964,31 @@ ], "anonymous": false }, + { + "type": "event", + "name": "FeeUpdateProposed", + "inputs": [ + { + "name": "currentFee", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "newFee", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "effectiveTime", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, { "type": "event", "name": "Initialized", @@ -1143,18 +1143,6 @@ "type": "uint256", "indexed": false, "internalType": "uint256" - }, - { - "name": "price", - "type": "uint64", - "indexed": false, - "internalType": "uint64" - }, - { - "name": "expo", - "type": "int32", - "indexed": false, - "internalType": "int32" } ], "anonymous": false diff --git a/pdp/contract/PDPVerifier.go b/pdp/contract/PDPVerifier.go index e1957bdf0..1390bc8fa 100644 --- a/pdp/contract/PDPVerifier.go +++ b/pdp/contract/PDPVerifier.go @@ -48,7 +48,7 @@ type IPDPTypesProof struct { // PDPVerifierMetaData contains all meta data concerning the PDPVerifier contract. var PDPVerifierMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"BURN_ACTOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"EXTRA_DATA_MAX_SIZE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"FIL_USD_PRICE_FEED_ID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"LEAF_SIZE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_ENQUEUED_REMOVALS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_PIECE_SIZE_LOG2\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"NO_CHALLENGE_SCHEDULED\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"NO_PROVEN_EPOCH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PYTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPyth\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RANDOMNESS_PRECOMPILE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"SECONDS_IN_DAY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"addPieces\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"pieceData\",\"type\":\"tuple[]\",\"internalType\":\"structCids.Cid[]\",\"components\":[{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"calculateProofFee\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"estimatedGasFee\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"claimDataSetStorageProvider\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createDataSet\",\"inputs\":[{\"name\":\"listenerAddr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"dataSetLive\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deleteDataSet\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"findPieceIds\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"leafIndexs\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structIPDPTypes.PieceIdAndOffset[]\",\"components\":[{\"name\":\"pieceId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"offset\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getActivePieceCount\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"activeCount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getActivePieces\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"offset\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"limit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"pieces\",\"type\":\"tuple[]\",\"internalType\":\"structCids.Cid[]\",\"components\":[{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"pieceIds\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"rawSizes\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"hasMore\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getChallengeFinality\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getChallengeRange\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDataSetLastProvenEpoch\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDataSetLeafCount\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDataSetListener\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDataSetStorageProvider\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getFILUSDPrice\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"\",\"type\":\"int32\",\"internalType\":\"int32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getNextChallengeEpoch\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getNextDataSetId\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getNextPieceId\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getPieceCid\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"pieceId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structCids.Cid\",\"components\":[{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getPieceLeafCount\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"pieceId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRandomness\",\"inputs\":[{\"name\":\"epoch\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getScheduledRemovals\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_challengeFinality\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"migrate\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"nextProvingPeriod\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"challengeEpoch\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pieceChallengable\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"pieceId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pieceLive\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"pieceId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposeDataSetStorageProvider\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"newStorageProvider\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"provePossession\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"proofs\",\"type\":\"tuple[]\",\"internalType\":\"structIPDPTypes.Proof[]\",\"components\":[{\"name\":\"leaf\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proof\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"schedulePieceDeletions\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"pieceIds\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"event\",\"name\":\"ContractUpgraded\",\"inputs\":[{\"name\":\"version\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DataSetCreated\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"storageProvider\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DataSetDeleted\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"deletedLeafCount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DataSetEmpty\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NextProvingPeriod\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"challengeEpoch\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"leafCount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"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\":\"PiecesAdded\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"pieceIds\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"pieceCids\",\"type\":\"tuple[]\",\"indexed\":false,\"internalType\":\"structCids.Cid[]\",\"components\":[{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PiecesRemoved\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"pieceIds\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PossessionProven\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"challenges\",\"type\":\"tuple[]\",\"indexed\":false,\"internalType\":\"structIPDPTypes.PieceIdAndOffset[]\",\"components\":[{\"name\":\"pieceId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"offset\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ProofFeePaid\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"fee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"price\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"expo\",\"type\":\"int32\",\"indexed\":false,\"internalType\":\"int32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StorageProviderChanged\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"oldStorageProvider\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newStorageProvider\",\"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\":\"IndexedError\",\"inputs\":[{\"name\":\"idx\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"msg\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"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\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]}]", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"EXTRA_DATA_MAX_SIZE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_ENQUEUED_REMOVALS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_PIECE_SIZE_LOG2\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"NO_CHALLENGE_SCHEDULED\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"NO_PROVEN_EPOCH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"addPieces\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"listenerAddr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"pieceData\",\"type\":\"tuple[]\",\"internalType\":\"structCids.Cid[]\",\"components\":[{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"calculateProofFee\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateProofFeeForSize\",\"inputs\":[{\"name\":\"rawSize\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"claimDataSetStorageProvider\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createDataSet\",\"inputs\":[{\"name\":\"listenerAddr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"dataSetLive\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deleteDataSet\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"feeEffectiveTime\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"feePerTiB\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint96\",\"internalType\":\"uint96\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"findPieceIds\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"leafIndexs\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structIPDPTypes.PieceIdAndOffset[]\",\"components\":[{\"name\":\"pieceId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"offset\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getActivePieceCount\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"activeCount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getActivePieces\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"offset\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"limit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"pieces\",\"type\":\"tuple[]\",\"internalType\":\"structCids.Cid[]\",\"components\":[{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"pieceIds\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"rawSizes\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"hasMore\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getChallengeFinality\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getChallengeRange\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDataSetLastProvenEpoch\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDataSetLeafCount\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDataSetListener\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDataSetStorageProvider\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getNextChallengeEpoch\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getNextDataSetId\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getNextPieceId\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getPieceCid\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"pieceId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structCids.Cid\",\"components\":[{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getPieceLeafCount\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"pieceId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRandomness\",\"inputs\":[{\"name\":\"epoch\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getScheduledRemovals\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_challengeFinality\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"migrate\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"nextProvingPeriod\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"challengeEpoch\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pieceChallengable\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"pieceId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pieceLive\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"pieceId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposeDataSetStorageProvider\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"newStorageProvider\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"proposedFeePerTiB\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint96\",\"internalType\":\"uint96\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"provePossession\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"proofs\",\"type\":\"tuple[]\",\"internalType\":\"structIPDPTypes.Proof[]\",\"components\":[{\"name\":\"leaf\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proof\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"schedulePieceDeletions\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"pieceIds\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateProofFee\",\"inputs\":[{\"name\":\"newFeePerTiB\",\"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\":\"event\",\"name\":\"ContractUpgraded\",\"inputs\":[{\"name\":\"version\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DataSetCreated\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"storageProvider\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DataSetDeleted\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"deletedLeafCount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DataSetEmpty\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"FeeUpdateProposed\",\"inputs\":[{\"name\":\"currentFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"effectiveTime\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NextProvingPeriod\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"challengeEpoch\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"leafCount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"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\":\"PiecesAdded\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"pieceIds\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"pieceCids\",\"type\":\"tuple[]\",\"indexed\":false,\"internalType\":\"structCids.Cid[]\",\"components\":[{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PiecesRemoved\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"pieceIds\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PossessionProven\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"challenges\",\"type\":\"tuple[]\",\"indexed\":false,\"internalType\":\"structIPDPTypes.PieceIdAndOffset[]\",\"components\":[{\"name\":\"pieceId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"offset\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ProofFeePaid\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"fee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StorageProviderChanged\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"oldStorageProvider\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newStorageProvider\",\"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\":\"IndexedError\",\"inputs\":[{\"name\":\"idx\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"msg\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"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\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]}]", } // PDPVerifierABI is the input ABI used to generate the binding from. @@ -197,37 +197,6 @@ func (_PDPVerifier *PDPVerifierTransactorRaw) Transact(opts *bind.TransactOpts, return _PDPVerifier.Contract.contract.Transact(opts, method, params...) } -// BURNACTOR is a free data retrieval call binding the contract method 0x0a6a63f1. -// -// Solidity: function BURN_ACTOR() view returns(address) -func (_PDPVerifier *PDPVerifierCaller) BURNACTOR(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _PDPVerifier.contract.Call(opts, &out, "BURN_ACTOR") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// BURNACTOR is a free data retrieval call binding the contract method 0x0a6a63f1. -// -// Solidity: function BURN_ACTOR() view returns(address) -func (_PDPVerifier *PDPVerifierSession) BURNACTOR() (common.Address, error) { - return _PDPVerifier.Contract.BURNACTOR(&_PDPVerifier.CallOpts) -} - -// BURNACTOR is a free data retrieval call binding the contract method 0x0a6a63f1. -// -// Solidity: function BURN_ACTOR() view returns(address) -func (_PDPVerifier *PDPVerifierCallerSession) BURNACTOR() (common.Address, error) { - return _PDPVerifier.Contract.BURNACTOR(&_PDPVerifier.CallOpts) -} - // EXTRADATAMAXSIZE is a free data retrieval call binding the contract method 0x029b4646. // // Solidity: function EXTRA_DATA_MAX_SIZE() view returns(uint256) @@ -259,68 +228,6 @@ func (_PDPVerifier *PDPVerifierCallerSession) EXTRADATAMAXSIZE() (*big.Int, erro return _PDPVerifier.Contract.EXTRADATAMAXSIZE(&_PDPVerifier.CallOpts) } -// FILUSDPRICEFEEDID is a free data retrieval call binding the contract method 0x19c75950. -// -// Solidity: function FIL_USD_PRICE_FEED_ID() view returns(bytes32) -func (_PDPVerifier *PDPVerifierCaller) FILUSDPRICEFEEDID(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _PDPVerifier.contract.Call(opts, &out, "FIL_USD_PRICE_FEED_ID") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// FILUSDPRICEFEEDID is a free data retrieval call binding the contract method 0x19c75950. -// -// Solidity: function FIL_USD_PRICE_FEED_ID() view returns(bytes32) -func (_PDPVerifier *PDPVerifierSession) FILUSDPRICEFEEDID() ([32]byte, error) { - return _PDPVerifier.Contract.FILUSDPRICEFEEDID(&_PDPVerifier.CallOpts) -} - -// FILUSDPRICEFEEDID is a free data retrieval call binding the contract method 0x19c75950. -// -// Solidity: function FIL_USD_PRICE_FEED_ID() view returns(bytes32) -func (_PDPVerifier *PDPVerifierCallerSession) FILUSDPRICEFEEDID() ([32]byte, error) { - return _PDPVerifier.Contract.FILUSDPRICEFEEDID(&_PDPVerifier.CallOpts) -} - -// LEAFSIZE is a free data retrieval call binding the contract method 0xc0e15949. -// -// Solidity: function LEAF_SIZE() view returns(uint256) -func (_PDPVerifier *PDPVerifierCaller) LEAFSIZE(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _PDPVerifier.contract.Call(opts, &out, "LEAF_SIZE") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// LEAFSIZE is a free data retrieval call binding the contract method 0xc0e15949. -// -// Solidity: function LEAF_SIZE() view returns(uint256) -func (_PDPVerifier *PDPVerifierSession) LEAFSIZE() (*big.Int, error) { - return _PDPVerifier.Contract.LEAFSIZE(&_PDPVerifier.CallOpts) -} - -// LEAFSIZE is a free data retrieval call binding the contract method 0xc0e15949. -// -// Solidity: function LEAF_SIZE() view returns(uint256) -func (_PDPVerifier *PDPVerifierCallerSession) LEAFSIZE() (*big.Int, error) { - return _PDPVerifier.Contract.LEAFSIZE(&_PDPVerifier.CallOpts) -} - // MAXENQUEUEDREMOVALS is a free data retrieval call binding the contract method 0x9f8cb3bd. // // Solidity: function MAX_ENQUEUED_REMOVALS() view returns(uint256) @@ -445,74 +352,74 @@ func (_PDPVerifier *PDPVerifierCallerSession) NOPROVENEPOCH() (*big.Int, error) return _PDPVerifier.Contract.NOPROVENEPOCH(&_PDPVerifier.CallOpts) } -// PYTH is a free data retrieval call binding the contract method 0x67e406d5. +// UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc. // -// Solidity: function PYTH() view returns(address) -func (_PDPVerifier *PDPVerifierCaller) PYTH(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string) +func (_PDPVerifier *PDPVerifierCaller) UPGRADEINTERFACEVERSION(opts *bind.CallOpts) (string, error) { var out []interface{} - err := _PDPVerifier.contract.Call(opts, &out, "PYTH") + err := _PDPVerifier.contract.Call(opts, &out, "UPGRADE_INTERFACE_VERSION") if err != nil { - return *new(common.Address), err + return *new(string), err } - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + out0 := *abi.ConvertType(out[0], new(string)).(*string) return out0, err } -// PYTH is a free data retrieval call binding the contract method 0x67e406d5. +// UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc. // -// Solidity: function PYTH() view returns(address) -func (_PDPVerifier *PDPVerifierSession) PYTH() (common.Address, error) { - return _PDPVerifier.Contract.PYTH(&_PDPVerifier.CallOpts) +// Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string) +func (_PDPVerifier *PDPVerifierSession) UPGRADEINTERFACEVERSION() (string, error) { + return _PDPVerifier.Contract.UPGRADEINTERFACEVERSION(&_PDPVerifier.CallOpts) } -// PYTH is a free data retrieval call binding the contract method 0x67e406d5. +// UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc. // -// Solidity: function PYTH() view returns(address) -func (_PDPVerifier *PDPVerifierCallerSession) PYTH() (common.Address, error) { - return _PDPVerifier.Contract.PYTH(&_PDPVerifier.CallOpts) +// Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string) +func (_PDPVerifier *PDPVerifierCallerSession) UPGRADEINTERFACEVERSION() (string, error) { + return _PDPVerifier.Contract.UPGRADEINTERFACEVERSION(&_PDPVerifier.CallOpts) } -// RANDOMNESSPRECOMPILE is a free data retrieval call binding the contract method 0x15b17570. +// VERSION is a free data retrieval call binding the contract method 0xffa1ad74. // -// Solidity: function RANDOMNESS_PRECOMPILE() view returns(address) -func (_PDPVerifier *PDPVerifierCaller) RANDOMNESSPRECOMPILE(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function VERSION() view returns(string) +func (_PDPVerifier *PDPVerifierCaller) VERSION(opts *bind.CallOpts) (string, error) { var out []interface{} - err := _PDPVerifier.contract.Call(opts, &out, "RANDOMNESS_PRECOMPILE") + err := _PDPVerifier.contract.Call(opts, &out, "VERSION") if err != nil { - return *new(common.Address), err + return *new(string), err } - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + out0 := *abi.ConvertType(out[0], new(string)).(*string) return out0, err } -// RANDOMNESSPRECOMPILE is a free data retrieval call binding the contract method 0x15b17570. +// VERSION is a free data retrieval call binding the contract method 0xffa1ad74. // -// Solidity: function RANDOMNESS_PRECOMPILE() view returns(address) -func (_PDPVerifier *PDPVerifierSession) RANDOMNESSPRECOMPILE() (common.Address, error) { - return _PDPVerifier.Contract.RANDOMNESSPRECOMPILE(&_PDPVerifier.CallOpts) +// Solidity: function VERSION() view returns(string) +func (_PDPVerifier *PDPVerifierSession) VERSION() (string, error) { + return _PDPVerifier.Contract.VERSION(&_PDPVerifier.CallOpts) } -// RANDOMNESSPRECOMPILE is a free data retrieval call binding the contract method 0x15b17570. +// VERSION is a free data retrieval call binding the contract method 0xffa1ad74. // -// Solidity: function RANDOMNESS_PRECOMPILE() view returns(address) -func (_PDPVerifier *PDPVerifierCallerSession) RANDOMNESSPRECOMPILE() (common.Address, error) { - return _PDPVerifier.Contract.RANDOMNESSPRECOMPILE(&_PDPVerifier.CallOpts) +// Solidity: function VERSION() view returns(string) +func (_PDPVerifier *PDPVerifierCallerSession) VERSION() (string, error) { + return _PDPVerifier.Contract.VERSION(&_PDPVerifier.CallOpts) } -// SECONDSINDAY is a free data retrieval call binding the contract method 0x61a52a36. +// CalculateProofFee is a free data retrieval call binding the contract method 0x86981308. // -// Solidity: function SECONDS_IN_DAY() view returns(uint256) -func (_PDPVerifier *PDPVerifierCaller) SECONDSINDAY(opts *bind.CallOpts) (*big.Int, error) { +// Solidity: function calculateProofFee(uint256 setId) view returns(uint256) +func (_PDPVerifier *PDPVerifierCaller) CalculateProofFee(opts *bind.CallOpts, setId *big.Int) (*big.Int, error) { var out []interface{} - err := _PDPVerifier.contract.Call(opts, &out, "SECONDS_IN_DAY") + err := _PDPVerifier.contract.Call(opts, &out, "calculateProofFee", setId) if err != nil { return *new(*big.Int), err @@ -524,142 +431,142 @@ func (_PDPVerifier *PDPVerifierCaller) SECONDSINDAY(opts *bind.CallOpts) (*big.I } -// SECONDSINDAY is a free data retrieval call binding the contract method 0x61a52a36. +// CalculateProofFee is a free data retrieval call binding the contract method 0x86981308. // -// Solidity: function SECONDS_IN_DAY() view returns(uint256) -func (_PDPVerifier *PDPVerifierSession) SECONDSINDAY() (*big.Int, error) { - return _PDPVerifier.Contract.SECONDSINDAY(&_PDPVerifier.CallOpts) +// Solidity: function calculateProofFee(uint256 setId) view returns(uint256) +func (_PDPVerifier *PDPVerifierSession) CalculateProofFee(setId *big.Int) (*big.Int, error) { + return _PDPVerifier.Contract.CalculateProofFee(&_PDPVerifier.CallOpts, setId) } -// SECONDSINDAY is a free data retrieval call binding the contract method 0x61a52a36. +// CalculateProofFee is a free data retrieval call binding the contract method 0x86981308. // -// Solidity: function SECONDS_IN_DAY() view returns(uint256) -func (_PDPVerifier *PDPVerifierCallerSession) SECONDSINDAY() (*big.Int, error) { - return _PDPVerifier.Contract.SECONDSINDAY(&_PDPVerifier.CallOpts) +// Solidity: function calculateProofFee(uint256 setId) view returns(uint256) +func (_PDPVerifier *PDPVerifierCallerSession) CalculateProofFee(setId *big.Int) (*big.Int, error) { + return _PDPVerifier.Contract.CalculateProofFee(&_PDPVerifier.CallOpts, setId) } -// UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc. +// CalculateProofFeeForSize is a free data retrieval call binding the contract method 0xe9a31a55. // -// Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string) -func (_PDPVerifier *PDPVerifierCaller) UPGRADEINTERFACEVERSION(opts *bind.CallOpts) (string, error) { +// Solidity: function calculateProofFeeForSize(uint256 rawSize) view returns(uint256) +func (_PDPVerifier *PDPVerifierCaller) CalculateProofFeeForSize(opts *bind.CallOpts, rawSize *big.Int) (*big.Int, error) { var out []interface{} - err := _PDPVerifier.contract.Call(opts, &out, "UPGRADE_INTERFACE_VERSION") + err := _PDPVerifier.contract.Call(opts, &out, "calculateProofFeeForSize", rawSize) if err != nil { - return *new(string), err + return *new(*big.Int), err } - out0 := *abi.ConvertType(out[0], new(string)).(*string) + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) return out0, err } -// UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc. +// CalculateProofFeeForSize is a free data retrieval call binding the contract method 0xe9a31a55. // -// Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string) -func (_PDPVerifier *PDPVerifierSession) UPGRADEINTERFACEVERSION() (string, error) { - return _PDPVerifier.Contract.UPGRADEINTERFACEVERSION(&_PDPVerifier.CallOpts) +// Solidity: function calculateProofFeeForSize(uint256 rawSize) view returns(uint256) +func (_PDPVerifier *PDPVerifierSession) CalculateProofFeeForSize(rawSize *big.Int) (*big.Int, error) { + return _PDPVerifier.Contract.CalculateProofFeeForSize(&_PDPVerifier.CallOpts, rawSize) } -// UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc. +// CalculateProofFeeForSize is a free data retrieval call binding the contract method 0xe9a31a55. // -// Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string) -func (_PDPVerifier *PDPVerifierCallerSession) UPGRADEINTERFACEVERSION() (string, error) { - return _PDPVerifier.Contract.UPGRADEINTERFACEVERSION(&_PDPVerifier.CallOpts) +// Solidity: function calculateProofFeeForSize(uint256 rawSize) view returns(uint256) +func (_PDPVerifier *PDPVerifierCallerSession) CalculateProofFeeForSize(rawSize *big.Int) (*big.Int, error) { + return _PDPVerifier.Contract.CalculateProofFeeForSize(&_PDPVerifier.CallOpts, rawSize) } -// VERSION is a free data retrieval call binding the contract method 0xffa1ad74. +// DataSetLive is a free data retrieval call binding the contract method 0xca759f27. // -// Solidity: function VERSION() view returns(string) -func (_PDPVerifier *PDPVerifierCaller) VERSION(opts *bind.CallOpts) (string, error) { +// Solidity: function dataSetLive(uint256 setId) view returns(bool) +func (_PDPVerifier *PDPVerifierCaller) DataSetLive(opts *bind.CallOpts, setId *big.Int) (bool, error) { var out []interface{} - err := _PDPVerifier.contract.Call(opts, &out, "VERSION") + err := _PDPVerifier.contract.Call(opts, &out, "dataSetLive", setId) if err != nil { - return *new(string), err + return *new(bool), err } - out0 := *abi.ConvertType(out[0], new(string)).(*string) + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) return out0, err } -// VERSION is a free data retrieval call binding the contract method 0xffa1ad74. +// DataSetLive is a free data retrieval call binding the contract method 0xca759f27. // -// Solidity: function VERSION() view returns(string) -func (_PDPVerifier *PDPVerifierSession) VERSION() (string, error) { - return _PDPVerifier.Contract.VERSION(&_PDPVerifier.CallOpts) +// Solidity: function dataSetLive(uint256 setId) view returns(bool) +func (_PDPVerifier *PDPVerifierSession) DataSetLive(setId *big.Int) (bool, error) { + return _PDPVerifier.Contract.DataSetLive(&_PDPVerifier.CallOpts, setId) } -// VERSION is a free data retrieval call binding the contract method 0xffa1ad74. +// DataSetLive is a free data retrieval call binding the contract method 0xca759f27. // -// Solidity: function VERSION() view returns(string) -func (_PDPVerifier *PDPVerifierCallerSession) VERSION() (string, error) { - return _PDPVerifier.Contract.VERSION(&_PDPVerifier.CallOpts) +// Solidity: function dataSetLive(uint256 setId) view returns(bool) +func (_PDPVerifier *PDPVerifierCallerSession) DataSetLive(setId *big.Int) (bool, error) { + return _PDPVerifier.Contract.DataSetLive(&_PDPVerifier.CallOpts, setId) } -// CalculateProofFee is a free data retrieval call binding the contract method 0x4903704a. +// FeeEffectiveTime is a free data retrieval call binding the contract method 0x996ad96a. // -// Solidity: function calculateProofFee(uint256 setId, uint256 estimatedGasFee) view returns(uint256) -func (_PDPVerifier *PDPVerifierCaller) CalculateProofFee(opts *bind.CallOpts, setId *big.Int, estimatedGasFee *big.Int) (*big.Int, error) { +// Solidity: function feeEffectiveTime() view returns(uint64) +func (_PDPVerifier *PDPVerifierCaller) FeeEffectiveTime(opts *bind.CallOpts) (uint64, error) { var out []interface{} - err := _PDPVerifier.contract.Call(opts, &out, "calculateProofFee", setId, estimatedGasFee) + err := _PDPVerifier.contract.Call(opts, &out, "feeEffectiveTime") if err != nil { - return *new(*big.Int), err + return *new(uint64), err } - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) return out0, err } -// CalculateProofFee is a free data retrieval call binding the contract method 0x4903704a. +// FeeEffectiveTime is a free data retrieval call binding the contract method 0x996ad96a. // -// Solidity: function calculateProofFee(uint256 setId, uint256 estimatedGasFee) view returns(uint256) -func (_PDPVerifier *PDPVerifierSession) CalculateProofFee(setId *big.Int, estimatedGasFee *big.Int) (*big.Int, error) { - return _PDPVerifier.Contract.CalculateProofFee(&_PDPVerifier.CallOpts, setId, estimatedGasFee) +// Solidity: function feeEffectiveTime() view returns(uint64) +func (_PDPVerifier *PDPVerifierSession) FeeEffectiveTime() (uint64, error) { + return _PDPVerifier.Contract.FeeEffectiveTime(&_PDPVerifier.CallOpts) } -// CalculateProofFee is a free data retrieval call binding the contract method 0x4903704a. +// FeeEffectiveTime is a free data retrieval call binding the contract method 0x996ad96a. // -// Solidity: function calculateProofFee(uint256 setId, uint256 estimatedGasFee) view returns(uint256) -func (_PDPVerifier *PDPVerifierCallerSession) CalculateProofFee(setId *big.Int, estimatedGasFee *big.Int) (*big.Int, error) { - return _PDPVerifier.Contract.CalculateProofFee(&_PDPVerifier.CallOpts, setId, estimatedGasFee) +// Solidity: function feeEffectiveTime() view returns(uint64) +func (_PDPVerifier *PDPVerifierCallerSession) FeeEffectiveTime() (uint64, error) { + return _PDPVerifier.Contract.FeeEffectiveTime(&_PDPVerifier.CallOpts) } -// DataSetLive is a free data retrieval call binding the contract method 0xca759f27. +// FeePerTiB is a free data retrieval call binding the contract method 0x22ef3f73. // -// Solidity: function dataSetLive(uint256 setId) view returns(bool) -func (_PDPVerifier *PDPVerifierCaller) DataSetLive(opts *bind.CallOpts, setId *big.Int) (bool, error) { +// Solidity: function feePerTiB() view returns(uint96) +func (_PDPVerifier *PDPVerifierCaller) FeePerTiB(opts *bind.CallOpts) (*big.Int, error) { var out []interface{} - err := _PDPVerifier.contract.Call(opts, &out, "dataSetLive", setId) + err := _PDPVerifier.contract.Call(opts, &out, "feePerTiB") if err != nil { - return *new(bool), err + return *new(*big.Int), err } - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) return out0, err } -// DataSetLive is a free data retrieval call binding the contract method 0xca759f27. +// FeePerTiB is a free data retrieval call binding the contract method 0x22ef3f73. // -// Solidity: function dataSetLive(uint256 setId) view returns(bool) -func (_PDPVerifier *PDPVerifierSession) DataSetLive(setId *big.Int) (bool, error) { - return _PDPVerifier.Contract.DataSetLive(&_PDPVerifier.CallOpts, setId) +// Solidity: function feePerTiB() view returns(uint96) +func (_PDPVerifier *PDPVerifierSession) FeePerTiB() (*big.Int, error) { + return _PDPVerifier.Contract.FeePerTiB(&_PDPVerifier.CallOpts) } -// DataSetLive is a free data retrieval call binding the contract method 0xca759f27. +// FeePerTiB is a free data retrieval call binding the contract method 0x22ef3f73. // -// Solidity: function dataSetLive(uint256 setId) view returns(bool) -func (_PDPVerifier *PDPVerifierCallerSession) DataSetLive(setId *big.Int) (bool, error) { - return _PDPVerifier.Contract.DataSetLive(&_PDPVerifier.CallOpts, setId) +// Solidity: function feePerTiB() view returns(uint96) +func (_PDPVerifier *PDPVerifierCallerSession) FeePerTiB() (*big.Int, error) { + return _PDPVerifier.Contract.FeePerTiB(&_PDPVerifier.CallOpts) } // FindPieceIds is a free data retrieval call binding the contract method 0x349c9179. @@ -966,38 +873,6 @@ func (_PDPVerifier *PDPVerifierCallerSession) GetDataSetStorageProvider(setId *b return _PDPVerifier.Contract.GetDataSetStorageProvider(&_PDPVerifier.CallOpts, setId) } -// GetFILUSDPrice is a free data retrieval call binding the contract method 0x4fa27920. -// -// Solidity: function getFILUSDPrice() view returns(uint64, int32) -func (_PDPVerifier *PDPVerifierCaller) GetFILUSDPrice(opts *bind.CallOpts) (uint64, int32, error) { - var out []interface{} - err := _PDPVerifier.contract.Call(opts, &out, "getFILUSDPrice") - - if err != nil { - return *new(uint64), *new(int32), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - out1 := *abi.ConvertType(out[1], new(int32)).(*int32) - - return out0, out1, err - -} - -// GetFILUSDPrice is a free data retrieval call binding the contract method 0x4fa27920. -// -// Solidity: function getFILUSDPrice() view returns(uint64, int32) -func (_PDPVerifier *PDPVerifierSession) GetFILUSDPrice() (uint64, int32, error) { - return _PDPVerifier.Contract.GetFILUSDPrice(&_PDPVerifier.CallOpts) -} - -// GetFILUSDPrice is a free data retrieval call binding the contract method 0x4fa27920. -// -// Solidity: function getFILUSDPrice() view returns(uint64, int32) -func (_PDPVerifier *PDPVerifierCallerSession) GetFILUSDPrice() (uint64, int32, error) { - return _PDPVerifier.Contract.GetFILUSDPrice(&_PDPVerifier.CallOpts) -} - // GetNextChallengeEpoch is a free data retrieval call binding the contract method 0x6ba4608f. // // Solidity: function getNextChallengeEpoch(uint256 setId) view returns(uint256) @@ -1308,6 +1183,37 @@ func (_PDPVerifier *PDPVerifierCallerSession) PieceLive(setId *big.Int, pieceId return _PDPVerifier.Contract.PieceLive(&_PDPVerifier.CallOpts, setId, pieceId) } +// ProposedFeePerTiB is a free data retrieval call binding the contract method 0xba74d94c. +// +// Solidity: function proposedFeePerTiB() view returns(uint96) +func (_PDPVerifier *PDPVerifierCaller) ProposedFeePerTiB(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _PDPVerifier.contract.Call(opts, &out, "proposedFeePerTiB") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// ProposedFeePerTiB is a free data retrieval call binding the contract method 0xba74d94c. +// +// Solidity: function proposedFeePerTiB() view returns(uint96) +func (_PDPVerifier *PDPVerifierSession) ProposedFeePerTiB() (*big.Int, error) { + return _PDPVerifier.Contract.ProposedFeePerTiB(&_PDPVerifier.CallOpts) +} + +// ProposedFeePerTiB is a free data retrieval call binding the contract method 0xba74d94c. +// +// Solidity: function proposedFeePerTiB() view returns(uint96) +func (_PDPVerifier *PDPVerifierCallerSession) ProposedFeePerTiB() (*big.Int, error) { + return _PDPVerifier.Contract.ProposedFeePerTiB(&_PDPVerifier.CallOpts) +} + // ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. // // Solidity: function proxiableUUID() view returns(bytes32) @@ -1339,25 +1245,25 @@ func (_PDPVerifier *PDPVerifierCallerSession) ProxiableUUID() ([32]byte, error) return _PDPVerifier.Contract.ProxiableUUID(&_PDPVerifier.CallOpts) } -// AddPieces is a paid mutator transaction binding the contract method 0x306fc8be. +// AddPieces is a paid mutator transaction binding the contract method 0x9afd37f2. // -// Solidity: function addPieces(uint256 setId, (bytes)[] pieceData, bytes extraData) returns(uint256) -func (_PDPVerifier *PDPVerifierTransactor) AddPieces(opts *bind.TransactOpts, setId *big.Int, pieceData []CidsCid, extraData []byte) (*types.Transaction, error) { - return _PDPVerifier.contract.Transact(opts, "addPieces", setId, pieceData, extraData) +// Solidity: function addPieces(uint256 setId, address listenerAddr, (bytes)[] pieceData, bytes extraData) payable returns(uint256) +func (_PDPVerifier *PDPVerifierTransactor) AddPieces(opts *bind.TransactOpts, setId *big.Int, listenerAddr common.Address, pieceData []CidsCid, extraData []byte) (*types.Transaction, error) { + return _PDPVerifier.contract.Transact(opts, "addPieces", setId, listenerAddr, pieceData, extraData) } -// AddPieces is a paid mutator transaction binding the contract method 0x306fc8be. +// AddPieces is a paid mutator transaction binding the contract method 0x9afd37f2. // -// Solidity: function addPieces(uint256 setId, (bytes)[] pieceData, bytes extraData) returns(uint256) -func (_PDPVerifier *PDPVerifierSession) AddPieces(setId *big.Int, pieceData []CidsCid, extraData []byte) (*types.Transaction, error) { - return _PDPVerifier.Contract.AddPieces(&_PDPVerifier.TransactOpts, setId, pieceData, extraData) +// Solidity: function addPieces(uint256 setId, address listenerAddr, (bytes)[] pieceData, bytes extraData) payable returns(uint256) +func (_PDPVerifier *PDPVerifierSession) AddPieces(setId *big.Int, listenerAddr common.Address, pieceData []CidsCid, extraData []byte) (*types.Transaction, error) { + return _PDPVerifier.Contract.AddPieces(&_PDPVerifier.TransactOpts, setId, listenerAddr, pieceData, extraData) } -// AddPieces is a paid mutator transaction binding the contract method 0x306fc8be. +// AddPieces is a paid mutator transaction binding the contract method 0x9afd37f2. // -// Solidity: function addPieces(uint256 setId, (bytes)[] pieceData, bytes extraData) returns(uint256) -func (_PDPVerifier *PDPVerifierTransactorSession) AddPieces(setId *big.Int, pieceData []CidsCid, extraData []byte) (*types.Transaction, error) { - return _PDPVerifier.Contract.AddPieces(&_PDPVerifier.TransactOpts, setId, pieceData, extraData) +// Solidity: function addPieces(uint256 setId, address listenerAddr, (bytes)[] pieceData, bytes extraData) payable returns(uint256) +func (_PDPVerifier *PDPVerifierTransactorSession) AddPieces(setId *big.Int, listenerAddr common.Address, pieceData []CidsCid, extraData []byte) (*types.Transaction, error) { + return _PDPVerifier.Contract.AddPieces(&_PDPVerifier.TransactOpts, setId, listenerAddr, pieceData, extraData) } // ClaimDataSetStorageProvider is a paid mutator transaction binding the contract method 0xdf0f3248. @@ -1591,6 +1497,27 @@ func (_PDPVerifier *PDPVerifierTransactorSession) TransferOwnership(newOwner com return _PDPVerifier.Contract.TransferOwnership(&_PDPVerifier.TransactOpts, newOwner) } +// UpdateProofFee is a paid mutator transaction binding the contract method 0x46bf7ed3. +// +// Solidity: function updateProofFee(uint256 newFeePerTiB) returns() +func (_PDPVerifier *PDPVerifierTransactor) UpdateProofFee(opts *bind.TransactOpts, newFeePerTiB *big.Int) (*types.Transaction, error) { + return _PDPVerifier.contract.Transact(opts, "updateProofFee", newFeePerTiB) +} + +// UpdateProofFee is a paid mutator transaction binding the contract method 0x46bf7ed3. +// +// Solidity: function updateProofFee(uint256 newFeePerTiB) returns() +func (_PDPVerifier *PDPVerifierSession) UpdateProofFee(newFeePerTiB *big.Int) (*types.Transaction, error) { + return _PDPVerifier.Contract.UpdateProofFee(&_PDPVerifier.TransactOpts, newFeePerTiB) +} + +// UpdateProofFee is a paid mutator transaction binding the contract method 0x46bf7ed3. +// +// Solidity: function updateProofFee(uint256 newFeePerTiB) returns() +func (_PDPVerifier *PDPVerifierTransactorSession) UpdateProofFee(newFeePerTiB *big.Int) (*types.Transaction, error) { + return _PDPVerifier.Contract.UpdateProofFee(&_PDPVerifier.TransactOpts, newFeePerTiB) +} + // UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. // // Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() @@ -2189,6 +2116,142 @@ func (_PDPVerifier *PDPVerifierFilterer) ParseDataSetEmpty(log types.Log) (*PDPV return event, nil } +// PDPVerifierFeeUpdateProposedIterator is returned from FilterFeeUpdateProposed and is used to iterate over the raw logs and unpacked data for FeeUpdateProposed events raised by the PDPVerifier contract. +type PDPVerifierFeeUpdateProposedIterator struct { + Event *PDPVerifierFeeUpdateProposed // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *PDPVerifierFeeUpdateProposedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(PDPVerifierFeeUpdateProposed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(PDPVerifierFeeUpdateProposed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *PDPVerifierFeeUpdateProposedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PDPVerifierFeeUpdateProposedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PDPVerifierFeeUpdateProposed represents a FeeUpdateProposed event raised by the PDPVerifier contract. +type PDPVerifierFeeUpdateProposed struct { + CurrentFee *big.Int + NewFee *big.Int + EffectiveTime *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterFeeUpdateProposed is a free log retrieval operation binding the contract event 0x239c396012e4038117d18910fba2aab3452e37696f685a457098e4c4864d8bcb. +// +// Solidity: event FeeUpdateProposed(uint256 currentFee, uint256 newFee, uint256 effectiveTime) +func (_PDPVerifier *PDPVerifierFilterer) FilterFeeUpdateProposed(opts *bind.FilterOpts) (*PDPVerifierFeeUpdateProposedIterator, error) { + + logs, sub, err := _PDPVerifier.contract.FilterLogs(opts, "FeeUpdateProposed") + if err != nil { + return nil, err + } + return &PDPVerifierFeeUpdateProposedIterator{contract: _PDPVerifier.contract, event: "FeeUpdateProposed", logs: logs, sub: sub}, nil +} + +// WatchFeeUpdateProposed is a free log subscription operation binding the contract event 0x239c396012e4038117d18910fba2aab3452e37696f685a457098e4c4864d8bcb. +// +// Solidity: event FeeUpdateProposed(uint256 currentFee, uint256 newFee, uint256 effectiveTime) +func (_PDPVerifier *PDPVerifierFilterer) WatchFeeUpdateProposed(opts *bind.WatchOpts, sink chan<- *PDPVerifierFeeUpdateProposed) (event.Subscription, error) { + + logs, sub, err := _PDPVerifier.contract.WatchLogs(opts, "FeeUpdateProposed") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(PDPVerifierFeeUpdateProposed) + if err := _PDPVerifier.contract.UnpackLog(event, "FeeUpdateProposed", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseFeeUpdateProposed is a log parse operation binding the contract event 0x239c396012e4038117d18910fba2aab3452e37696f685a457098e4c4864d8bcb. +// +// Solidity: event FeeUpdateProposed(uint256 currentFee, uint256 newFee, uint256 effectiveTime) +func (_PDPVerifier *PDPVerifierFilterer) ParseFeeUpdateProposed(log types.Log) (*PDPVerifierFeeUpdateProposed, error) { + event := new(PDPVerifierFeeUpdateProposed) + if err := _PDPVerifier.contract.UnpackLog(event, "FeeUpdateProposed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // PDPVerifierInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the PDPVerifier contract. type PDPVerifierInitializedIterator struct { Event *PDPVerifierInitialized // Event containing the contract specifics and raw log @@ -3129,14 +3192,12 @@ func (it *PDPVerifierProofFeePaidIterator) Close() error { type PDPVerifierProofFeePaid struct { SetId *big.Int Fee *big.Int - Price uint64 - Expo int32 Raw types.Log // Blockchain specific contextual infos } -// FilterProofFeePaid is a free log retrieval operation binding the contract event 0x928bbf5188022bf8b9a0e59f5e81e179d0a4c729bdba2856ac971af2063fbf2b. +// FilterProofFeePaid is a free log retrieval operation binding the contract event 0x58b7742b13c8873fc0ba58f695b33ca0044b2db7ff9c5208181dbaec2a5b291e. // -// Solidity: event ProofFeePaid(uint256 indexed setId, uint256 fee, uint64 price, int32 expo) +// Solidity: event ProofFeePaid(uint256 indexed setId, uint256 fee) func (_PDPVerifier *PDPVerifierFilterer) FilterProofFeePaid(opts *bind.FilterOpts, setId []*big.Int) (*PDPVerifierProofFeePaidIterator, error) { var setIdRule []interface{} @@ -3151,9 +3212,9 @@ func (_PDPVerifier *PDPVerifierFilterer) FilterProofFeePaid(opts *bind.FilterOpt return &PDPVerifierProofFeePaidIterator{contract: _PDPVerifier.contract, event: "ProofFeePaid", logs: logs, sub: sub}, nil } -// WatchProofFeePaid is a free log subscription operation binding the contract event 0x928bbf5188022bf8b9a0e59f5e81e179d0a4c729bdba2856ac971af2063fbf2b. +// WatchProofFeePaid is a free log subscription operation binding the contract event 0x58b7742b13c8873fc0ba58f695b33ca0044b2db7ff9c5208181dbaec2a5b291e. // -// Solidity: event ProofFeePaid(uint256 indexed setId, uint256 fee, uint64 price, int32 expo) +// Solidity: event ProofFeePaid(uint256 indexed setId, uint256 fee) func (_PDPVerifier *PDPVerifierFilterer) WatchProofFeePaid(opts *bind.WatchOpts, sink chan<- *PDPVerifierProofFeePaid, setId []*big.Int) (event.Subscription, error) { var setIdRule []interface{} @@ -3193,9 +3254,9 @@ func (_PDPVerifier *PDPVerifierFilterer) WatchProofFeePaid(opts *bind.WatchOpts, }), nil } -// ParseProofFeePaid is a log parse operation binding the contract event 0x928bbf5188022bf8b9a0e59f5e81e179d0a4c729bdba2856ac971af2063fbf2b. +// ParseProofFeePaid is a log parse operation binding the contract event 0x58b7742b13c8873fc0ba58f695b33ca0044b2db7ff9c5208181dbaec2a5b291e. // -// Solidity: event ProofFeePaid(uint256 indexed setId, uint256 fee, uint64 price, int32 expo) +// Solidity: event ProofFeePaid(uint256 indexed setId, uint256 fee) func (_PDPVerifier *PDPVerifierFilterer) ParseProofFeePaid(log types.Log) (*PDPVerifierProofFeePaid, error) { event := new(PDPVerifierProofFeePaid) if err := _PDPVerifier.contract.UnpackLog(event, "ProofFeePaid", log); err != nil { diff --git a/pdp/contract/PDPVerifier.json b/pdp/contract/PDPVerifier.json deleted file mode 100644 index a41c01c75..000000000 --- a/pdp/contract/PDPVerifier.json +++ /dev/null @@ -1 +0,0 @@ -{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"BURN_ACTOR","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"EXTRA_DATA_MAX_SIZE","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"FIL_USD_PRICE_FEED_ID","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"LEAF_SIZE","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"MAX_ENQUEUED_REMOVALS","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"MAX_PIECE_SIZE_LOG2","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"NO_CHALLENGE_SCHEDULED","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"NO_PROVEN_EPOCH","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"PYTH","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IPyth"}],"stateMutability":"view"},{"type":"function","name":"RANDOMNESS_PRECOMPILE","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"SECONDS_IN_DAY","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"UPGRADE_INTERFACE_VERSION","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"VERSION","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"addPieces","inputs":[{"name":"setId","type":"uint256","internalType":"uint256"},{"name":"pieceData","type":"tuple[]","internalType":"struct Cids.Cid[]","components":[{"name":"data","type":"bytes","internalType":"bytes"}]},{"name":"extraData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"calculateProofFee","inputs":[{"name":"setId","type":"uint256","internalType":"uint256"},{"name":"estimatedGasFee","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"claimDataSetStorageProvider","inputs":[{"name":"setId","type":"uint256","internalType":"uint256"},{"name":"extraData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"createDataSet","inputs":[{"name":"listenerAddr","type":"address","internalType":"address"},{"name":"extraData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"payable"},{"type":"function","name":"dataSetLive","inputs":[{"name":"setId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"deleteDataSet","inputs":[{"name":"setId","type":"uint256","internalType":"uint256"},{"name":"extraData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"findPieceIds","inputs":[{"name":"setId","type":"uint256","internalType":"uint256"},{"name":"leafIndexs","type":"uint256[]","internalType":"uint256[]"}],"outputs":[{"name":"","type":"tuple[]","internalType":"struct IPDPTypes.PieceIdAndOffset[]","components":[{"name":"pieceId","type":"uint256","internalType":"uint256"},{"name":"offset","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"getActivePieceCount","inputs":[{"name":"setId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"activeCount","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getActivePieces","inputs":[{"name":"setId","type":"uint256","internalType":"uint256"},{"name":"offset","type":"uint256","internalType":"uint256"},{"name":"limit","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"pieces","type":"tuple[]","internalType":"struct Cids.Cid[]","components":[{"name":"data","type":"bytes","internalType":"bytes"}]},{"name":"pieceIds","type":"uint256[]","internalType":"uint256[]"},{"name":"rawSizes","type":"uint256[]","internalType":"uint256[]"},{"name":"hasMore","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"getChallengeFinality","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getChallengeRange","inputs":[{"name":"setId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getDataSetLastProvenEpoch","inputs":[{"name":"setId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getDataSetLeafCount","inputs":[{"name":"setId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getDataSetListener","inputs":[{"name":"setId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getDataSetStorageProvider","inputs":[{"name":"setId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getFILUSDPrice","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"},{"name":"","type":"int32","internalType":"int32"}],"stateMutability":"view"},{"type":"function","name":"getNextChallengeEpoch","inputs":[{"name":"setId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getNextDataSetId","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"getNextPieceId","inputs":[{"name":"setId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getPieceCid","inputs":[{"name":"setId","type":"uint256","internalType":"uint256"},{"name":"pieceId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"tuple","internalType":"struct Cids.Cid","components":[{"name":"data","type":"bytes","internalType":"bytes"}]}],"stateMutability":"view"},{"type":"function","name":"getPieceLeafCount","inputs":[{"name":"setId","type":"uint256","internalType":"uint256"},{"name":"pieceId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getRandomness","inputs":[{"name":"epoch","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getScheduledRemovals","inputs":[{"name":"setId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"_challengeFinality","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"migrate","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"nextProvingPeriod","inputs":[{"name":"setId","type":"uint256","internalType":"uint256"},{"name":"challengeEpoch","type":"uint256","internalType":"uint256"},{"name":"extraData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"pieceChallengable","inputs":[{"name":"setId","type":"uint256","internalType":"uint256"},{"name":"pieceId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"pieceLive","inputs":[{"name":"setId","type":"uint256","internalType":"uint256"},{"name":"pieceId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"proposeDataSetStorageProvider","inputs":[{"name":"setId","type":"uint256","internalType":"uint256"},{"name":"newStorageProvider","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"provePossession","inputs":[{"name":"setId","type":"uint256","internalType":"uint256"},{"name":"proofs","type":"tuple[]","internalType":"struct IPDPTypes.Proof[]","components":[{"name":"leaf","type":"bytes32","internalType":"bytes32"},{"name":"proof","type":"bytes32[]","internalType":"bytes32[]"}]}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"proxiableUUID","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"schedulePieceDeletions","inputs":[{"name":"setId","type":"uint256","internalType":"uint256"},{"name":"pieceIds","type":"uint256[]","internalType":"uint256[]"},{"name":"extraData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"upgradeToAndCall","inputs":[{"name":"newImplementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"event","name":"ContractUpgraded","inputs":[{"name":"version","type":"string","indexed":false,"internalType":"string"},{"name":"implementation","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"DataSetCreated","inputs":[{"name":"setId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"storageProvider","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"DataSetDeleted","inputs":[{"name":"setId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"deletedLeafCount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"DataSetEmpty","inputs":[{"name":"setId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"NextProvingPeriod","inputs":[{"name":"setId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"challengeEpoch","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"leafCount","type":"uint256","indexed":false,"internalType":"uint256"}],"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":"PiecesAdded","inputs":[{"name":"setId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"pieceIds","type":"uint256[]","indexed":false,"internalType":"uint256[]"},{"name":"pieceCids","type":"tuple[]","indexed":false,"internalType":"struct Cids.Cid[]","components":[{"name":"data","type":"bytes","internalType":"bytes"}]}],"anonymous":false},{"type":"event","name":"PiecesRemoved","inputs":[{"name":"setId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"pieceIds","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"PossessionProven","inputs":[{"name":"setId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"challenges","type":"tuple[]","indexed":false,"internalType":"struct IPDPTypes.PieceIdAndOffset[]","components":[{"name":"pieceId","type":"uint256","internalType":"uint256"},{"name":"offset","type":"uint256","internalType":"uint256"}]}],"anonymous":false},{"type":"event","name":"ProofFeePaid","inputs":[{"name":"setId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"fee","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"price","type":"uint64","indexed":false,"internalType":"uint64"},{"name":"expo","type":"int32","indexed":false,"internalType":"int32"}],"anonymous":false},{"type":"event","name":"StorageProviderChanged","inputs":[{"name":"setId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"oldStorageProvider","type":"address","indexed":true,"internalType":"address"},{"name":"newStorageProvider","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":"IndexedError","inputs":[{"name":"idx","type":"uint256","internalType":"uint256"},{"name":"msg","type":"string","internalType":"string"}]},{"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":"UUPSUnauthorizedCallContext","inputs":[]},{"type":"error","name":"UUPSUnsupportedProxiableUUID","inputs":[{"name":"slot","type":"bytes32","internalType":"bytes32"}]}],"bytecode":{"object":"0x60a080604052346100c257306080525f5160206149d45f395f51905f525460ff8160401c166100b3576002600160401b03196001600160401b03821601610060575b60405161490d90816100c78239608051818181611789015261184f0152f35b6001600160401b0319166001600160401b039081175f5160206149d45f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80610041565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe610100806040526004361015610013575f80fd5b5f905f3560e01c908163029b4646146130fc5750806304595c1a146130c65780630a6a63f1146130a45780630c29202414612db45780630cd7b88014612d7b57806315b1757014612d5857806319c7595014612d1d5780631a27122514612d035780631c5ae80f14612ccd57806321b7cd1c14612c7757806325bbbedf14612c415780632b3129bb14612c02578063306fc8be146122c4578063349c91791461222757806339f51544146121ba57806343186080146120ad578063442cded314612086578063453f4f621461206757806345c0b92d14611a55578063462dd44914610bd05780634903704a146119f95780634f1ef286146118105780634fa27920146117dd57806352d1902d146117765780635353bdfd146116fa57806361a52a36146116dc57806367e406d5146116ad5780636ba4608f146116775780636fa44692146115fb578063715018a6146115925780637a1e29901461139957806389208ba9146113635780638da5cb5b1461132e5780638fd3ab80146112245780639f8cb3bd14611207578063a531998c146111d1578063ad3cb1cc14611189578063bbae41cb14610f4e578063c0e1594914610f33578063ca759f2714610f0a578063dc63526614610da8578063df0f324814610bd5578063f178b1be14610bd0578063f2fde38b14610ba3578063f58f952b146103fd578063f83758fe146103e0578063f8eb8276146103c4578063fe4b84df146102705763ffa1ad741461023a575f80fd5b3461026d578060031936011261026d57610269610255613420565b6040519182916020835260208301906131de565b0390f35b80fd5b503461026d57602036600319011261026d575f5160206148b85f395f51905f525460ff8160401c1615906001600160401b038116801590816103bc575b60011490816103b2575b1590816103a9575b5061039a5767ffffffffffffffff1981166001175f5160206148b85f395f51905f52558161036e575b506102f161459c565b6102f961459c565b61030233613e5d565b61030a61459c565b60043582556103165780f35b68ff0000000000000000195f5160206148b85f395f51905f5254165f5160206148b85f395f51905f52557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a180f35b68ffffffffffffffffff191668010000000000000001175f5160206148b85f395f51905f52555f6102e8565b63f92ee8a960e01b8352600483fd5b9050155f6102bf565b303b1591506102b7565b8391506102ad565b503461026d578060031936011261026d57602060405160328152f35b503461026d578060031936011261026d5760209054604051908152f35b5061040736613202565b929091925a848352600b60205260408320549093906001600160a01b03163303610b47578115610b145784835260076020526040832054804310610add5715610a9f576104538261379c565b9085845260076020526104696040852054613bbb565b9580855260096020526040852054818652600560205261048c6040872054613f3b565b610100039061010082116107cb578787878b95969782986040985b836001600160401b038c16101561086157895160208101908a8252828c8201526001600160401b0360c01b8d60c01b166060820152604881526104eb60688261336f565b519020871561084d57888861050192068361403a565b6105146001600160401b038d1685613741565b526105286001600160401b038c1684613741565b5061054761053f6001600160401b038d1685613741565b5151826135a0565b61055660208251511015614547565b8a516105628c8261336f565b6020808252810190601f198d01368337875b602081106107f657508760a05251905160a052602081106107df575b506105a060218251511015614547565b518051601f198101919080831161078f57602019019182116107cb576001916105c89161458b565b5160f81c0160ff81116107b7578b906001600160401b0360206106186105fd6105f48487168b8a613ece565b83810190613ef0565b93909561060d8282168c8b613ece565b356080521688613741565b510151926106258261367f565b60e0528d5160c05261063b60e05160c05161336f565b60c08051839052516020019036600584901b8201116107b35780915b8360051b820183106107a3575050505060ff1660c051515f19820191821161078f570361073b576080519598909789965b60c051518b10156106d1576001906106a28c60c051613741565b51908b83166106c257906106b59161485a565b995b811c9a019998610688565b6106cb9161485a565b996106b7565b919599509397509a90949891959a60a05103610700576106f090613dcb565b99949097939692969591956104a7565b895162461bcd60e51b815260206004820152601460248201527370726f6f6620646964206e6f742076657269667960601b6044820152606490fd5b8a5162461bcd60e51b815260206004820152602760248201527f70726f6f66206c656e67746820646f6573206e6f74206d617463682074726565604482015266081a195a59da1d60ca1b6064820152608490fd5b634e487b7160e01b88526011600452602488fd5b8235815260209283019201610657565b8980fd5b634e487b7160e01b86526011600452602486fd5b634e487b7160e01b87526011600452602487fd5b5f199060200360031b1b60a0511660a0528c610590565b83518051601f198101919082116108395790610824839261081e60019560ff60f81b946134c6565b9061458b565b51168a1a610832828561458b565b5301610574565b634e487b7160e01b8b52601160045260248bfd5b634e487b7160e01b86526012600452602486fd5b9289916108718a96975a9061378f565b879188905b848210610a525750506020820180921161078f57610514820291808304610514149015171561078f576108b3916108ac916134c6565b4890613816565b848752600960205282872054906001600160fb1b038216820361078f57610920867f928bbf5188022bf8b9a0e59f5e81e179d0a4c729bdba2856ac971af2063fbf2b60608761092a8d9897610956978a61090b613c54565b998196838b8d9552600d60205220544361378f565b9360051b926141fb565b94610934866144af565b6001600160401b038a519287845216602083015260030b89820152a23461378f565b95858352600860205260018060a01b03848420541690816109db575b505050916109b291847f1acf7df9f0c1b0208c23be6178950c0273f89b766805a2c0bd1e53d25c700e509452600d60205243818820555191829182613231565b0390a281816109be5780f35b8080806109d694335af16109d0613b8c565b50613de8565b818180f35b86845260066020528484205491803b15610a44578492836084928851968795869463356de02b60e01b86528d60048701526024860152604485015260648401525af18015610a4857610a2f575b8080610972565b81610a399161336f565b610a44578486610a28565b8480fd5b83513d84823e3d90fd5b9092610a6c610a62858785613ece565b6020810190613ef0565b80915060051b90808204602014901517156108395786019081871161083957600191610a97916134c6565b930190610876565b60405162461bcd60e51b81526020600482015260166024820152751b9bc818da185b1b195b99d9481cd8da19591d5b195960521b6044820152606490fd5b60405162461bcd60e51b815260206004820152600f60248201526e383932b6b0ba3ab93290383937b7b360891b6044820152606490fd5b60405162461bcd60e51b815260206004820152600b60248201526a32b6b83a3c90383937b7b360a91b6044820152606490fd5b60405162461bcd60e51b815260206004820152602e60248201527f4f6e6c79207468652073746f726167652070726f76696465722063616e20707260448201526d37bb32903837b9b9b2b9b9b4b7b760911b6064820152608490fd5b503461026d57602036600319011261026d57610bcd610bc0613309565b610bc861447c565b613e5d565b80f35b61331f565b503461026d57610be4366133f1565b610bf5610bf084613e27565b613443565b828452600c60205260408420546001600160a01b03163303610d32578284938452600b60205260018060a01b0360408520541691818552600b6020526040852060018060a01b0333166001600160601b0360a01b825416179055818552600c602052604085206001600160601b0360a01b8154169055604051933384847f686146a80f2bf4dc855942926481871515b39b508826d7982a2e0212d20552c98980a4828652600860205260408620546001600160a01b03169182610cb6578680f35b823b15610d2e5785610cf681959389979388948496634059b6d760e01b8652600486015260248501523360448501526080606485015260848401916134f8565b03925af18015610d2357610d0e575b80808080808680f35b81610d189161336f565b61026d57805f610d05565b6040513d84823e3d90fd5b8680fd5b60405162461bcd60e51b815260206004820152604260248201527f4f6e6c79207468652070726f706f7365642073746f726167652070726f76696460448201527f65722063616e20636c61696d2073746f726167652070726f766964657220726f6064820152616c6560f01b608482015260a490fd5b503461026d57610db7366131c8565b81839293526005602052610dce6040832054613f3b565b610100036101008111610ef657838352600960205260408320545f198101908111610ee25790610dfe918561403a565b916020830151848252600360205260408220845183526020526040822054915f198301928311610ece575003610e5957610e3a81602094613518565b9182610e4d575b50506040519015158152f35b51101590505f80610e41565b60405162461bcd60e51b815260206004820152604160248201527f6368616c6c656e676552616e6765202d312073686f756c6420616c69676e207760448201527f697468207468652076657279206c617374206c656166206f66206120706965636064820152606560f81b608482015260a490fd5b634e487b7160e01b81526011600452602490fd5b634e487b7160e01b84526011600452602484fd5b634e487b7160e01b83526011600452602483fd5b503461026d57602036600319011261026d576020610f29600435613e27565b6040519015158152f35b503461026d578060031936011261026d576020604051818152f35b50604036600319011261026d57610f63613309565b6024356001600160401b03811161118557610f82903690600401613146565b90610f91610800831115613483565b67016345785d8a0000341061114c578391610fb367016345785d8a00006144af565b600154936001600160401b038516946001600160401b03610fd387613dcb565b67ffffffffffffffff1990921691161760015584845260066020908152604080862086905586865260078252808620869055868652600b825280862080546001600160a01b031990811633179091558787526008835281872080549091166001600160a01b03949094169384179055868652600d909152842084905591826110db575b5050505033817f11369440e1b7135015c16acb9bc14b55b0f4b23b02010c363d34aec2e5b962818480a367016345785d8a0000341161109b575b602090604051908152f35b67016345785d8a000034033481116110c7578280806020956110c294335af16109d0613b8c565b611090565b634e487b7160e01b5f52601160045260245ffd5b823b15611148576111199284928360405180968195829463101c1eab60e01b84528b60048501523360248501526060604485015260648401916134f8565b03925af18015610d235761112f575b8080611056565b816111399161336f565b61114457815f611128565b5080fd5b8380fd5b60405162461bcd60e51b81526020600482015260116024820152701cde589a5b08199959481b9bdd081b595d607a1b6044820152606490fd5b8280fd5b503461026d578060031936011261026d576102696040516111ab60408261336f565b60058152640352e302e360dc1b60208201526040519182916020835260208301906131de565b503461026d57602036600319011261026d5760406020916004356111f7610bf082613e27565b8152600683522054604051908152f35b503461026d578060031936011261026d5760206040516107d08152f35b503461026d578060031936011261026d5761123d61447c565b5f5160206148b85f395f51905f525460ff8160401c16801561131a575b61130b576002907f2b51ff7c4cc8e6fe1c72e9d9685b7d2a88a5d82ad3a644afbdceb0272c89c1c36112b861128d613420565b60018060a01b035f5160206148985f395f51905f5254166040519283926040845260408401906131de565b9060208301520390a168ffffffffffffffffff1916175f5160206148b85f395f51905f52557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160028152a180f35b63f92ee8a960e01b8252600482fd5b5060026001600160401b038216101561125a565b503461026d578060031936011261026d575f5160206148785f395f51905f52546040516001600160a01b039091168152602090f35b503461026d57602036600319011261026d576040602091600435611389610bf082613e27565b8152600983522054604051908152f35b503461026d576113a8366133f1565b906113b7610800831115613483565b6001600160401b036001541683101561154d57828452600b60205260408420546001600160a01b031633036114f157839083825260066020526040822054928483526006602052826040812055848352600b602052604083206001600160601b0360a01b81541690558483526007602052826040812055848352600d602052826040812055848352600860205260018060a01b036040842054169182611488575b83867f14eeeef7679fcb051c6572811f61c07bedccd0f1cfc1f9b79b23e47c5c52aeb7602088604051908152a280f35b823b15611148576114c692849283604051809681958294630aaf519760e21b84528c60048501528b60248501526060604485015260648401916134f8565b03925af18015610d23576114dc575b8080611458565b816114e69161336f565b61118557825f6114d5565b60405162461bcd60e51b815260206004820152602e60248201527f4f6e6c79207468652073746f726167652070726f76696465722063616e20646560448201526d6c6574652064617461207365747360901b6064820152608490fd5b60405162461bcd60e51b815260206004820152601960248201527f6461746120736574206964206f7574206f6620626f756e6473000000000000006044820152606490fd5b503461026d578060031936011261026d576115ab61447c565b5f5160206148785f395f51905f5280546001600160a01b0319811690915581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b503461026d57602036600319011261026d5760043561161c610bf082613e27565b8152600a6020526040812080549061163382613696565b925b8281106116525760405160208082528190610269908201876132d6565b8061165f600192846134e3565b90549060031b1c6116708287613741565b5201611635565b503461026d57602036600319011261026d57604060209160043561169d610bf082613e27565b8152600783522054604051908152f35b503461026d578060031936011261026d57602060405173a2aa501b19aff244d90cc15a4cf739d2725b57298152f35b503461026d578060031936011261026d576020604051620151808152f35b503461026d57602036600319011261026d576004358161171c610bf083613e27565b8181526005602052604081205491815b83811061173e57602085604051908152f35b8183526003602052604083208184526020526040832054611762575b60010161172c565b9361176e600191613829565b94905061175a565b503461026d578060031936011261026d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630036117ce5760206040515f5160206148985f395f51905f528152f35b63703e46dd60e11b8152600490fd5b503461026d578060031936011261026d5760406117f8613c54565b6001600160401b0383519216825260030b6020820152f35b50604036600319011261026d57611825613309565b906024356001600160401b038111611144576118459036906004016133ab565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163081149081156119d7575b506119c85761188761447c565b6040516352d1902d60e01b8152926001600160a01b0381169190602085600481865afa80958596611994575b506118cc57634c9c8ce360e01b84526004839052602484fd5b9091845f5160206148985f395f51905f5281036119825750813b15611970575f5160206148985f395f51905f5280546001600160a01b031916821790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8480a28151839015611956578083602061195295519101845af461194c613b8c565b916147fc565b5080f35b505050346119615780f35b63b398979f60e01b8152600490fd5b634c9c8ce360e01b8452600452602483fd5b632a87526960e21b8552600452602484fd5b9095506020813d6020116119c0575b816119b06020938361336f565b81010312610a445751945f6118b3565b3d91506119a3565b63703e46dd60e11b8252600482fd5b5f5160206148985f395f51905f52546001600160a01b0316141590505f61187a565b503461026d57611a08366131c8565b81835260096020526040832054916001600160fb1b0383168303610ee25790602093611a4d93926109206040611a3c613c54565b9490938152600d895220544361378f565b604051908152f35b503461026d57606036600319011261026d576004356024356044356001600160401b03811161114857611a8c903690600401613146565b611a9a610800821115613483565b838552600b60205260408520546001600160a01b03163303611ffc578385526006602052604085205415611fa257838552600d602052604085205415611f8f575b838552600a60205260408520805480611cea575b50508385526006602052604085205484865260096020526040862055611b168554436134c6565b8310611c6f57849184835260076020528360408420558483526006602052604083205415611c29575b848352600860205260408320546001600160a01b031680611b9c575b5050507fc099ffec4e3e773644a4d1dda368c46af853a0eeb15babde217f53a657396e1e91836040925260066020528185205482519182526020820152a280f35b85845260076020526040842054908685526006602052604085205491813b15611c25578588611bfa829660405198899788968795632a89faf360e21b87526004870152602486015260448501526080606485015260848401916134f8565b03925af18015610d2357611c10575b8080611b5b565b81611c1a9161336f565b61118557825f611c09565b8580fd5b847f02a8400fc343f45098cb00c3a6ea694174771939a5503f663e0ff6f4eb7c28428480a2848352600d6020528260408120558483526007602052826040812055611b3f565b60405162461bcd60e51b815260206004820152604760248201527f6368616c6c656e67652065706f6368206d757374206265206174206c6561737460448201527f206368616c6c656e676546696e616c6974792065706f63687320696e207468656064820152662066757475726560c81b608482015260a490fd5b611cf78196939496613696565b91875b828110611f2057505050611d10610bf083613e27565b8586915b8051831015611ebd57611d278382613741565b5196848952600360205260408920888a526020526040892054958892868b526005602052611d5860408c2054613f3b565b61010003986101008a11611ea95760018b01808c11611dda57611d7d909591956145c7565b8c8b82111580611e93575b15611dee57611dbd92916040828c60019452600460205281812085825260205220611db48d825461378f565b90551b906134c6565b9360018501808611611dda57611dd2906145c7565b949094611d7d565b634e487b7160e01b8d52601160045260248dfd5b50505095975095611e4691936001939599898c52600360205260408c20818d526020528b6040812055898c52600260205260408c20908c526020528a60408120611e388154613568565b80611e53575b5050506134c6565b9601919492959095611d14565b601f81118714611e685750555b8a5f80611e3e565b81835260208320611e8391601f0160051c8101908801613f25565b8082528160208120915555611e60565b5089905260056020528c60408120548310611d88565b634e487b7160e01b8c52601160045260248cfd5b839694939250611f16907f6e87df804629ac17804b57ba7abbdfac8bdc36bab504fb8a8801eb313a8ce7b192848a526006602052611f0060408b2091825461378f565b90556040519182916020835260208301906132d6565b0390a25f80611aef565b8154949693945f1981019080821161083957611f3c82856134e3565b90549060031b1c611f4d8489613741565b5215611f7b579081611f61600193856134e3565b8154905f199060031b1b1916905583550195939295611cfa565b634e487b7160e01b8a52603160045260248afd5b838552600d602052436040862055611adb565b60405162461bcd60e51b815260206004820152602c60248201527f63616e206f6e6c792073746172742070726f76696e67206f6e6365206c65617660448201526b195cc8185c9948185919195960a21b6064820152608490fd5b60405162461bcd60e51b815260206004820152603960248201527f6f6e6c79207468652073746f726167652070726f76696465722063616e206d6f60448201527f766520746f206e6578742070726f76696e6720706572696f64000000000000006064820152608490fd5b503461026d57602036600319011261026d576020611a4d600435613bbb565b503461026d578060031936011261026d5760206001600160401b0360015416604051908152f35b503461026d57604036600319011261026d576004356024356001600160a01b03811690819003611185576120e3610bf083613e27565b818352600b60205260408320546001600160a01b031633810361214357810361212357508152600c6020526040812080546001600160a01b031916905580f35b908252600c6020526040822080546001600160a01b031916909117905580f35b60a460405162461bcd60e51b815260206004820152604460248201527f4f6e6c79207468652063757272656e742073746f726167652070726f7669646560448201527f722063616e2070726f706f73652061206e65772073746f726167652070726f7660648201526334b232b960e11b6084820152fd5b503461026d57606036600319011261026d576121ff61220d61221b6121e6604435602435600435613837565b9392949091604051968796608088526080880190613276565b9086820360208801526132d6565b9084820360408601526132d6565b90151560608301520390f35b503461026d5761223636613202565b9091808452600560205261224d6040852054613f3b565b610100039161010083116122b0576122648161379c565b945b81811061227b57604051806102698882613231565b806122948561228d600194868a6134d3565b358661403a565b61229e8289613741565b526122a98188613741565b5001612266565b634e487b7160e01b85526011600452602485fd5b503461026d576122d336613173565b6122e66108008296959493961115613483565b6122f2610bf085613e27565b8115612bbd57838652600b60205260408620546001600160a01b03163303612b6757838652600560205260408620549461232b83613696565b612334846136c8565b885b8581106124ed575061237c879261238a7f396df50222a87662e94bb7d173792d5e61fe0b193b6ccf791f7ce433f0b28207936040519384936040855260408501906132d6565b908382036020850152613276565b0390a2848752600860205260408720546001600160a01b031693846123b5575b602087604051908152f35b843b156124e957918395939188959360405197889663f6814d7960e01b8852608488019060048901528a6024890152608060448901525260a4860160a48560051b88010194828990601e19813603015b8383106124655750505050505061242c8593879385936003198584030160648601526134f8565b03925af1801561245a57612445575b80808080806123aa565b61245083809261336f565b611144578161243b565b6040513d85823e3d90fd5b92959791949950929597995060a3198b82030186528835828112156124e55783018035601e19823603018112156124e15701602081359101906001600160401b0381116124e15780360382136124e1576124cb60209283928386816001985201916134f8565b9a01960193018c99979593928b99979592612405565b8e80fd5b8d80fd5b8780fd5b90612500828789959c9b979a969961371f565b9261250b3685613755565b968a5b60048110612af757508751998b908b5160041015612ae35760248c015160f81c607f16915b806004018060041161259f578d612554600160ff1b9260ff60f81b9261458b565b5116106125b35761256490613829565b91826004018060041161259f5761257d607f918f61458b565b5160f81c168360078102046007148415171561259f57600784021b1791612533565b634e487b7160e01b8f52601160045260248ffd5b6125cb919e949698929b9a9d9c509892949698613829565b600401998a600411611ea95760228110612a89578a6125e9916134c6565b8c515103612a28578b51988b607f6126018d8d61458b565b5160f81c16905b8b8d612622600160ff1b9261081e8560ff60f81b946134c6565b5116106126795790607f6126458d8f9461263e61081e91613829565b80966134c6565b5160f81c166007830283810460071484151715612664571b1790612608565b50634e487b7160e01b8f52601160045260248ffd5b6126aa91939d9f9a9598979c949e946126b4939a979c5061269c6126a292613829565b906134c6565b80945161458b565b5160f81c92613829565b506001600160f91b0381168103611dda57607f9060071b046005820160ff811161297b5760ff600191161b8110156129e5576032821161298f579060016126ff9260051c911b61378f565b90898c52600560205260408c209081549161271983613829565b90556001820180831161297b57906127348e959493926145c7565b8c849187915b81831061293757915050865260046020526040862083875260205260408620558b85526002602052604085208286526020526040852090803590601e1981360301821215610d2e576001600160401b038282013511610d2e5781810135360360208383010113610d2e576127ae8354613568565b601f81116128fa575b508690601f838201351160011461287457876001989284830135612864575b505082810135881b925f1991013560031b1c19161790555b8a8d52600360205260408d20908d526020528060408d2055898c52600660205261281d60408d209182546134c6565b9055612829818b6134c6565b6128338286613741565b5261284836612843838a8c61371f565b613755565b6128528285613741565b5261285d8184613741565b5001612336565b828501016020013592505f6127d6565b9192939495969084825260208220915b83850135601f191681106128de57506001979695949388939092909183830135601f198116106128bd575b50500135811b0190556127ee565b60205f1960f88686013560031b161c19918585010101351690555f806128af565b9091602060018192828689890101013581550193019101612884565b83885260208089206129279284860135601f810160051c8301931161292d575b601f0160051c0190613f25565b5f6127b7565b909150819061291a565b92604083959697989961296c9395612953600180971b8b61378f565b90825260046020528282209082526020522054906134c6565b92018f9695949392918e61273a565b634e487b7160e01b8e52601160045260248efd5b60a4846040519063c7b67cf360e01b8252600482015260406024820152602160448201527f50696563652073697a65206d757374206265206c657373207468616e20325e356064820152600360fc1b6084820152fd5b6084846040519063c7b67cf360e01b8252600482015260406024820152601460448201527350616464696e6720697320746f6f206c6172676560601b6064820152fd5b60405162461bcd60e51b815260206004820152603360248201527f436f6d6d507632206d756c746968617368206c656e67746820646f6573206e6f6044820152720e840dac2e8c6d040c8c2e8c240d8cadccee8d606b1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602c60248201527f436f6d6d507632206d756c746968617368206c656e677468206d75737420626560448201526b08185d081b19585cdd080ccd60a21b6064820152608490fd5b634e487b7160e01b5f52603260045260245ffd5b60ff60f81b612b07828b5161458b565b5116620aac8960e51b821a60f81b6001600160f81b03191603612b2c5760010161250e565b60405162461bcd60e51b815260206004820152601360248201527221b4b21036bab9ba1031329021b7b6b6a83b1960691b6044820152606490fd5b60405162461bcd60e51b815260206004820152602860248201527f4f6e6c79207468652073746f726167652070726f76696465722063616e206164604482015267642070696563657360c01b6064820152608490fd5b60405162461bcd60e51b815260206004820152601b60248201527f4d75737420616464206174206c65617374206f6e6520706965636500000000006044820152606490fd5b503461026d57602036600319011261026d57602090600435612c26610bf082613e27565b815260088252604060018060a01b0391205416604051908152f35b503461026d57610269612c5c612c56366131c8565b906135a0565b604051918291602083525160208084015260408301906131de565b503461026d57602036600319011261026d5760409060043590612c9c610bf083613e27565b818152600b602090815283822054928252600c8152908390205483516001600160a01b039384168152921690820152f35b503461026d57602036600319011261026d576040602091600435612cf3610bf082613e27565b8152600583522054604051908152f35b503461026d576020610f29612d17366131c8565b90613518565b503461026d578060031936011261026d5760206040517f150ac9b959aee0051e4091f0ef5216d941f590e1c5e7f91cf7635b5c11628c0e8152f35b503461026d578060031936011261026d576040516006607f60991b018152602090f35b503461026d576040602091612d8f366131c8565b90612d9c610bf082613e27565b82526003845282822090825283522054604051908152f35b5034612ee457612dc336613173565b90612dd5610800839594951115613483565b612de1610bf086613e27565b5f858152600b60205260409020546001600160a01b0316330361303957845f52600a6020526107d0612e1760405f2054866134c6565b11612fce575f5b848110612ee857505f858152600860205260409020546001600160a01b03169182612e47578680f35b823b15612ee45760405163e7954aa760e01b8152600481019690965260606024870152606486018590526001600160fb1b038511612ee45785612eaf8195935f9793608484968a9660051b8091838801378501858103820160031901604487015201916134f8565b03925af18015612ed957612ec65780808080808680f35b612ed291505f9061336f565b5f5f610d05565b6040513d5f823e3d90fd5b5f80fd5b612ef38186866134d3565b35865f52600560205260405f20541115612f7457855f52600a60205260405f2090612f1f8187876134d3565b3582549268010000000000000000841015612f605783612f4591600180960181556134e3565b819291549060031b91821b915f19901b191617905501612e1e565b634e487b7160e01b5f52604160045260245ffd5b60405162461bcd60e51b815260206004820152602c60248201527f43616e206f6e6c79207363686564756c652072656d6f76616c206f662065786960448201526b7374696e672070696563657360a01b6064820152608490fd5b60405162461bcd60e51b815260206004820152603a60248201527f546f6f206d616e792072656d6f76616c73207761697420666f72206e6578742060448201527f70726f76696e6720706572696f6420746f207363686564756c650000000000006064820152608490fd5b60405162461bcd60e51b815260206004820152603860248201527f4f6e6c79207468652073746f726167652070726f76696465722063616e20736360448201527f686564756c652072656d6f76616c206f662070696563657300000000000000006064820152608490fd5b34612ee4575f366003190112612ee457604051606360ff60981b018152602090f35b34612ee4576020366003190112612ee4576004356130e6610bf082613e27565b5f52600d602052602060405f2054604051908152f35b34612ee4575f366003190112612ee4578061080060209252f35b9181601f84011215612ee4578235916001600160401b038311612ee4576020808501948460051b010111612ee457565b9181601f84011215612ee4578235916001600160401b038311612ee45760208381860195010111612ee457565b906060600319830112612ee457600435916024356001600160401b038111612ee457816131a291600401613116565b92909291604435906001600160401b038211612ee4576131c491600401613146565b9091565b6040906003190112612ee4576004359060243590565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b906040600319830112612ee45760043591602435906001600160401b038211612ee4576131c491600401613116565b60206040818301928281528451809452019201905f5b8181106132545750505090565b8251805185526020908101518186015260409094019390920191600101613247565b9080602083519182815201916020808360051b8301019401925f915b8383106132a157505050505090565b90919293946020806132c7600193601f19868203018752828a51519181815201906131de565b97019301930191939290613292565b90602080835192838152019201905f5b8181106132f35750505090565b82518452602093840193909201916001016132e6565b600435906001600160a01b0382168203612ee457565b34612ee4575f366003190112612ee45760206040515f8152f35b602081019081106001600160401b03821117612f6057604052565b604081019081106001600160401b03821117612f6057604052565b90601f801991011681019081106001600160401b03821117612f6057604052565b6001600160401b038111612f6057601f01601f191660200190565b81601f82011215612ee4578035906133c282613390565b926133d0604051948561336f565b82845260208383010111612ee457815f926020809301838601378301015290565b906040600319830112612ee45760043591602435906001600160401b038211612ee4576131c491600401613146565b6040519061342f60408361336f565b60058252640322e302e360dc1b6020830152565b1561344a57565b60405162461bcd60e51b81526020600482015260116024820152704461746120736574206e6f74206c69766560781b6044820152606490fd5b1561348a57565b60405162461bcd60e51b81526020600482015260146024820152734578747261206461746120746f6f206c6172676560601b6044820152606490fd5b919082018092116110c757565b9190811015612ae35760051b0190565b8054821015612ae3575f5260205f2001905f90565b908060209392818452848401375f828201840152601f01601f1916010190565b9061352282613e27565b9182613551575b8261353357505090565b9091505f52600360205260405f20905f5260205260405f2054151590565b8092505f52600560205260405f2054811091613529565b90600182811c92168015613596575b602083101461358257565b634e487b7160e01b5f52602260045260245ffd5b91607f1691613577565b60606040516135ae81613339565b526135bb610bf082613e27565b5f52600260205260405f20905f5260205260405f20604051906135dd82613339565b60405190815f8254926135ef84613568565b808452936001811690811561365d5750600114613619575b506136149250038261336f565b815290565b90505f9291925260205f20905f915b818310613641575050906020613614928201015f613607565b6020919350806001915483858801015201910190918392613628565b90506020925061361494915060ff191682840152151560051b8201015f613607565b6001600160401b038111612f605760051b60200190565b906136a08261367f565b6136ad604051918261336f565b82815280926136be601f199161367f565b0190602036910137565b906136d28261367f565b6136df604051918261336f565b82815280926136f0601f199161367f565b01905f5b82811061370057505050565b60209060405161370f81613339565b60608152828285010152016136f4565b9190811015612ae35760051b81013590601e1981360301821215612ee4570190565b8051821015612ae35760209160051b010190565b919091602081840312612ee4576040519061376f82613339565b819381356001600160401b038111612ee45761378b92016133ab565b9052565b919082039182116110c757565b906137a68261367f565b6137b3604051918261336f565b82815280926137c4601f199161367f565b01905f5b8281106137d457505050565b6020906040516137e381613354565b5f81525f83820152828285010152016137c8565b908167015180000000000002916701518000000000008304036110c757565b818102929181159184041417156110c757565b5f1981146110c75760010190565b915f613845610bf085613e27565b8115613b4757835f52600560205260405f205492613862836136c8565b9261386c81613696565b9461387682613696565b965f905f945f5b8481106139a2575b505050505081155f1461390a57505050505050604051906138a760208361336f565b5f82525f805b8181106138eb575050602090604051926138c7838561336f565b5f84525f368137604051926138dc818561336f565b5f8452505f3681379291905f90565b6020906040516138fa81613339565b60608152828287010152016138ad565b81969293949596105f1461399c57613921816136c8565b9561392b82613696565b9561393583613696565b955f5b848110613946575050505050565b8061395360019284613741565b5161395e828d613741565b52613969818c613741565b506139748185613741565b5161397f828c613741565b5261398a8186613741565b51613995828b613741565b5201613938565b50919391565b825f52600360205260405f20815f5260205260405f20546139c6575b60010161387d565b92958187101580613b3e575b15613b0d57825f52600260205260405f20845f5260205260405f20604051906139fa82613339565b60405190815f825492613a0c84613568565b8084529360018116908115613aeb5750600114613aa9575b50613a319250038261336f565b8152613a3d828b613741565b52613a48818a613741565b5083613a54828c613741565b52825f52600360205260405f20845f5260205260405f2054908160051b91808304602014901517156110c757613a9b81600193613a958f94613aa195613741565b52613829565b97613829565b9390506139be565b9150505f528160205f20915f925b818410613acf5750506020613a31928201015f613a24565b6020919250806001915483868801015201920191908391613ab7565b905060209250613a3194915060ff191682840152151560051b8201015f613a24565b95613b1886836134c6565b811015613b2a57613aa1600191613829565b505050505091506001915f80808080613885565b508581106139d2565b60405162461bcd60e51b815260206004820152601c60248201527f4c696d6974206d7573742062652067726561746572207468616e2030000000006044820152606490fd5b3d15613bb6573d90613b9d82613390565b91613bab604051938461336f565b82523d5f602084013e565b606090565b5f80916040516020810191825260208152613bd760408261336f565b51906006607f60991b015afa613beb613b8c565b9015613c0557602081805181010312612ee4576020015190565b60405162461bcd60e51b815260206004820152602160248201527f52616e646f6d6e65737320707265636f6d70696c652063616c6c206661696c656044820152601960fa1b6064820152608490fd5b6040516396834ad360e01b81527f150ac9b959aee0051e4091f0ef5216d941f590e1c5e7f91cf7635b5c11628c0e60048201529060808260248173a2aa501b19aff244d90cc15a4cf739d2725b57295afa918215612ed9575f92613d34575b505f825160070b1315613cd657604082516001600160401b031692015160030b90565b60405162461bcd60e51b815260206004820152603060248201527f6661696c656420746f2076616c69646174653a207072696365206d757374206260448201526f0652067726561746572207468616e20360841b6064820152608490fd5b9091506080813d608011613dc3575b81613d506080938361336f565b81010312612ee45760405190608082018281106001600160401b03821117612f605760405280518060070b8103612ee457825260208101516001600160401b0381168103612ee45760208301526040810151908160030b8203612ee457606091604084015201516060820152905f613cb3565b3d9150613d43565b6001600160401b03166001600160401b0381146110c75760010190565b15613def57565b60405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b6044820152606490fd5b6001600160401b036001541681109081613e3f575090565b5f908152600b60205260409020546001600160a01b03161515919050565b6001600160a01b03168015613ebb575f5160206148785f395f51905f5280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b9190811015612ae35760051b81013590603e1981360301821215612ee4570190565b903590601e1981360301821215612ee457018035906001600160401b038211612ee457602001918160051b36038313612ee457565b818110613f30575050565b5f8155600101613f25565b610100908060801c8061402e575b508060401c80614019575b508060201c80614004575b508060101c80613fef575b508060081c80613fda575b508060041c80613fc5575b508060021c80613fb0575b508060011c613fa057613f9d9161378f565b90565b5060011981019081116110c75790565b916001198101915081116110c757905f613f8b565b916003198101915081116110c757905f613f80565b916007198101915081116110c757905f613f75565b91600f198101915081116110c757905f613f6a565b91601f198101915081116110c757905f613f5f565b91603f198101915081116110c757905f613f54565b9150506080905f613f49565b9160405161404781613354565b5f81525f602082015250825f52600660205260405f2054821015614184576001811b5f1981019081116110c757925f91805b6140dc57505f52600460205260405f20835f5260205261409d60405f2054826134c6565b828111156140c657506140af9161378f565b604051916140bc83613354565b8252602082015290565b9050600183018093116110c7576140af9161378f565b9391815f52600560205260405f205483101561416457815f52600460205260405f20835f526020528361411360405f2054836134c6565b116141645761413990825f52600460205260405f20845f5260205260405f2054906134c6565b915f198501908582116110c7576001614153921b906134c6565b935b80156110c7575f190180614079565b915f198501908582116110c757600161417e921b9061378f565b93614155565b60405162461bcd60e51b815260206004820152601860248201527f4c65616620696e646578206f7574206f6620626f756e647300000000000000006044820152606490fd5b63ffffffff16604d81116110c757600a0a90565b81156141e7570490565b634e487b7160e01b5f52601260045260245ffd5b929093915f948415801590614474575b15614409576001600160401b0316801561439e57821561433d57600382900b5f81126142ea5750856107b75790614253614247614259936137f7565b9163ffffffff166141c9565b90613816565b80156141e75761427b9261427691671bc16d674ec8000004613816565b613816565b90600582028215908381046005148217156122b05760649004908360021b8481046004148217156107b7578284106142b557505050505090565b939492939192916064900484106142d2575050613f9d925061378f565b915091508280046001141715610ece57506064900490565b5f965090939150637fffffff1981146110c75761430e905f0363ffffffff166141c9565b671bc16d674ec800008082029291908304036110c7576142766142769261433761427b966137f7565b906141dd565b60405162461bcd60e51b815260206004820152603360248201527f6661696c656420746f2076616c69646174653a207261772073697a65206d75736044820152720742062652067726561746572207468616e203606c1b6064820152608490fd5b60405162461bcd60e51b815260206004820152603860248201527f6661696c656420746f2076616c69646174653a204174746f46494c207072696360448201527f65206d7573742062652067726561746572207468616e203000000000000000006064820152608490fd5b60405162461bcd60e51b815260206004820152603c60248201527f6661696c656420746f2076616c69646174653a20657374696d6174656420676160448201527f7320666565206d7573742062652067726561746572207468616e2030000000006064820152608490fd5b50481561420b565b5f5160206148785f395f51905f52546001600160a01b0316330361449c57565b63118cdaa760e01b5f523360045260245ffd5b80341061450b575f90819081908190606360ff60981b015af16144d0613b8c565b50156144d857565b60405162461bcd60e51b815260206004820152600b60248201526a109d5c9b8819985a5b195960aa1b6044820152606490fd5b60405162461bcd60e51b8152602060048201526014602482015273125b98dbdc9c9958dd0819995948185b5bdd5b9d60621b6044820152606490fd5b1561454e57565b60405162461bcd60e51b815260206004820152601560248201527410da590819185d18481a5cc81d1bdbc81cda1bdc9d605a1b6044820152606490fd5b908151811015612ae3570160200190565b60ff5f5160206148b85f395f51905f525460401c16156145b857565b631afcd79f60e31b5f5260045ffd5b6001600160ff1b0381116147ac5761010090600160ff1b81146110c757805f0316806147a3575b6fffffffffffffffffffffffffffffffff8116614790575b77ffffffffffffffff0000000000000000ffffffffffffffff811661477d575b7bffffffff00000000ffffffff00000000ffffffff00000000ffffffff811661476a575b7dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff8116614757575b7eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff8116614744575b7f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f8116614731575b7f3333333333333333333333333333333333333333333333333333333333333333811661471e575b7f5555555555555555555555555555555555555555555555555555555555555555166147105790565b5f1981019081116110c75790565b9060011981019081116110c757906146e7565b9060031981019081116110c757906146bf565b9060071981019081116110c75790614697565b90600f1981019081116110c75790614670565b90601f1981019081116110c7579061464a565b90603f1981019081116110c75790614626565b90607f1981019081116110c75790614606565b60ff91506145ee565b60405162461bcd60e51b815260206004820152602260248201527f496e7075742065786365656473206d6178696d756d20696e743235362076616c604482015261756560f01b6064820152608490fd5b90614820575080511561481157602081519101fd5b63d6bda27560e01b5f5260045ffd5b81511580614851575b614831575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b15614829565b5f5260205260205f60408160025afa15612ee4575f5160c019169056fe9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a26469706673582212200a2707b042e9008339d01cf98ad5d54211b724a7bcb444e5c2a5433fd78655e064736f6c634300081e0033f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00","sourceMap":"2099:36650:42:-:0;;;;;;;1171:4:33;1163:13;;-1:-1:-1;;;;;;;;;;;2099:36650:42;;;;;;7896:76:32;;-1:-1:-1;;;;;;;;;;;2099:36650:42;;7985:34:32;7981:146;;-1:-1:-1;2099:36650:42;;;;;;;;1163:13:33;2099:36650:42;;;;;;;;;;;7981:146:32;-1:-1:-1;;;;;;2099:36650:42;-1:-1:-1;;;;;2099:36650:42;;;-1:-1:-1;;;;;;;;;;;2099:36650:42;;;8087:29:32;;2099:36650:42;;8087:29:32;7981:146;;;;7896:76;7938:23;;;-1:-1:-1;7938:23:32;;-1:-1:-1;7938:23:32;2099:36650:42;;;","linkReferences":{}},"deployedBytecode":{"object":"0x610100806040526004361015610013575f80fd5b5f905f3560e01c908163029b4646146130fc5750806304595c1a146130c65780630a6a63f1146130a45780630c29202414612db45780630cd7b88014612d7b57806315b1757014612d5857806319c7595014612d1d5780631a27122514612d035780631c5ae80f14612ccd57806321b7cd1c14612c7757806325bbbedf14612c415780632b3129bb14612c02578063306fc8be146122c4578063349c91791461222757806339f51544146121ba57806343186080146120ad578063442cded314612086578063453f4f621461206757806345c0b92d14611a55578063462dd44914610bd05780634903704a146119f95780634f1ef286146118105780634fa27920146117dd57806352d1902d146117765780635353bdfd146116fa57806361a52a36146116dc57806367e406d5146116ad5780636ba4608f146116775780636fa44692146115fb578063715018a6146115925780637a1e29901461139957806389208ba9146113635780638da5cb5b1461132e5780638fd3ab80146112245780639f8cb3bd14611207578063a531998c146111d1578063ad3cb1cc14611189578063bbae41cb14610f4e578063c0e1594914610f33578063ca759f2714610f0a578063dc63526614610da8578063df0f324814610bd5578063f178b1be14610bd0578063f2fde38b14610ba3578063f58f952b146103fd578063f83758fe146103e0578063f8eb8276146103c4578063fe4b84df146102705763ffa1ad741461023a575f80fd5b3461026d578060031936011261026d57610269610255613420565b6040519182916020835260208301906131de565b0390f35b80fd5b503461026d57602036600319011261026d575f5160206148b85f395f51905f525460ff8160401c1615906001600160401b038116801590816103bc575b60011490816103b2575b1590816103a9575b5061039a5767ffffffffffffffff1981166001175f5160206148b85f395f51905f52558161036e575b506102f161459c565b6102f961459c565b61030233613e5d565b61030a61459c565b60043582556103165780f35b68ff0000000000000000195f5160206148b85f395f51905f5254165f5160206148b85f395f51905f52557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a180f35b68ffffffffffffffffff191668010000000000000001175f5160206148b85f395f51905f52555f6102e8565b63f92ee8a960e01b8352600483fd5b9050155f6102bf565b303b1591506102b7565b8391506102ad565b503461026d578060031936011261026d57602060405160328152f35b503461026d578060031936011261026d5760209054604051908152f35b5061040736613202565b929091925a848352600b60205260408320549093906001600160a01b03163303610b47578115610b145784835260076020526040832054804310610add5715610a9f576104538261379c565b9085845260076020526104696040852054613bbb565b9580855260096020526040852054818652600560205261048c6040872054613f3b565b610100039061010082116107cb578787878b95969782986040985b836001600160401b038c16101561086157895160208101908a8252828c8201526001600160401b0360c01b8d60c01b166060820152604881526104eb60688261336f565b519020871561084d57888861050192068361403a565b6105146001600160401b038d1685613741565b526105286001600160401b038c1684613741565b5061054761053f6001600160401b038d1685613741565b5151826135a0565b61055660208251511015614547565b8a516105628c8261336f565b6020808252810190601f198d01368337875b602081106107f657508760a05251905160a052602081106107df575b506105a060218251511015614547565b518051601f198101919080831161078f57602019019182116107cb576001916105c89161458b565b5160f81c0160ff81116107b7578b906001600160401b0360206106186105fd6105f48487168b8a613ece565b83810190613ef0565b93909561060d8282168c8b613ece565b356080521688613741565b510151926106258261367f565b60e0528d5160c05261063b60e05160c05161336f565b60c08051839052516020019036600584901b8201116107b35780915b8360051b820183106107a3575050505060ff1660c051515f19820191821161078f570361073b576080519598909789965b60c051518b10156106d1576001906106a28c60c051613741565b51908b83166106c257906106b59161485a565b995b811c9a019998610688565b6106cb9161485a565b996106b7565b919599509397509a90949891959a60a05103610700576106f090613dcb565b99949097939692969591956104a7565b895162461bcd60e51b815260206004820152601460248201527370726f6f6620646964206e6f742076657269667960601b6044820152606490fd5b8a5162461bcd60e51b815260206004820152602760248201527f70726f6f66206c656e67746820646f6573206e6f74206d617463682074726565604482015266081a195a59da1d60ca1b6064820152608490fd5b634e487b7160e01b88526011600452602488fd5b8235815260209283019201610657565b8980fd5b634e487b7160e01b86526011600452602486fd5b634e487b7160e01b87526011600452602487fd5b5f199060200360031b1b60a0511660a0528c610590565b83518051601f198101919082116108395790610824839261081e60019560ff60f81b946134c6565b9061458b565b51168a1a610832828561458b565b5301610574565b634e487b7160e01b8b52601160045260248bfd5b634e487b7160e01b86526012600452602486fd5b9289916108718a96975a9061378f565b879188905b848210610a525750506020820180921161078f57610514820291808304610514149015171561078f576108b3916108ac916134c6565b4890613816565b848752600960205282872054906001600160fb1b038216820361078f57610920867f928bbf5188022bf8b9a0e59f5e81e179d0a4c729bdba2856ac971af2063fbf2b60608761092a8d9897610956978a61090b613c54565b998196838b8d9552600d60205220544361378f565b9360051b926141fb565b94610934866144af565b6001600160401b038a519287845216602083015260030b89820152a23461378f565b95858352600860205260018060a01b03848420541690816109db575b505050916109b291847f1acf7df9f0c1b0208c23be6178950c0273f89b766805a2c0bd1e53d25c700e509452600d60205243818820555191829182613231565b0390a281816109be5780f35b8080806109d694335af16109d0613b8c565b50613de8565b818180f35b86845260066020528484205491803b15610a44578492836084928851968795869463356de02b60e01b86528d60048701526024860152604485015260648401525af18015610a4857610a2f575b8080610972565b81610a399161336f565b610a44578486610a28565b8480fd5b83513d84823e3d90fd5b9092610a6c610a62858785613ece565b6020810190613ef0565b80915060051b90808204602014901517156108395786019081871161083957600191610a97916134c6565b930190610876565b60405162461bcd60e51b81526020600482015260166024820152751b9bc818da185b1b195b99d9481cd8da19591d5b195960521b6044820152606490fd5b60405162461bcd60e51b815260206004820152600f60248201526e383932b6b0ba3ab93290383937b7b360891b6044820152606490fd5b60405162461bcd60e51b815260206004820152600b60248201526a32b6b83a3c90383937b7b360a91b6044820152606490fd5b60405162461bcd60e51b815260206004820152602e60248201527f4f6e6c79207468652073746f726167652070726f76696465722063616e20707260448201526d37bb32903837b9b9b2b9b9b4b7b760911b6064820152608490fd5b503461026d57602036600319011261026d57610bcd610bc0613309565b610bc861447c565b613e5d565b80f35b61331f565b503461026d57610be4366133f1565b610bf5610bf084613e27565b613443565b828452600c60205260408420546001600160a01b03163303610d32578284938452600b60205260018060a01b0360408520541691818552600b6020526040852060018060a01b0333166001600160601b0360a01b825416179055818552600c602052604085206001600160601b0360a01b8154169055604051933384847f686146a80f2bf4dc855942926481871515b39b508826d7982a2e0212d20552c98980a4828652600860205260408620546001600160a01b03169182610cb6578680f35b823b15610d2e5785610cf681959389979388948496634059b6d760e01b8652600486015260248501523360448501526080606485015260848401916134f8565b03925af18015610d2357610d0e575b80808080808680f35b81610d189161336f565b61026d57805f610d05565b6040513d84823e3d90fd5b8680fd5b60405162461bcd60e51b815260206004820152604260248201527f4f6e6c79207468652070726f706f7365642073746f726167652070726f76696460448201527f65722063616e20636c61696d2073746f726167652070726f766964657220726f6064820152616c6560f01b608482015260a490fd5b503461026d57610db7366131c8565b81839293526005602052610dce6040832054613f3b565b610100036101008111610ef657838352600960205260408320545f198101908111610ee25790610dfe918561403a565b916020830151848252600360205260408220845183526020526040822054915f198301928311610ece575003610e5957610e3a81602094613518565b9182610e4d575b50506040519015158152f35b51101590505f80610e41565b60405162461bcd60e51b815260206004820152604160248201527f6368616c6c656e676552616e6765202d312073686f756c6420616c69676e207760448201527f697468207468652076657279206c617374206c656166206f66206120706965636064820152606560f81b608482015260a490fd5b634e487b7160e01b81526011600452602490fd5b634e487b7160e01b84526011600452602484fd5b634e487b7160e01b83526011600452602483fd5b503461026d57602036600319011261026d576020610f29600435613e27565b6040519015158152f35b503461026d578060031936011261026d576020604051818152f35b50604036600319011261026d57610f63613309565b6024356001600160401b03811161118557610f82903690600401613146565b90610f91610800831115613483565b67016345785d8a0000341061114c578391610fb367016345785d8a00006144af565b600154936001600160401b038516946001600160401b03610fd387613dcb565b67ffffffffffffffff1990921691161760015584845260066020908152604080862086905586865260078252808620869055868652600b825280862080546001600160a01b031990811633179091558787526008835281872080549091166001600160a01b03949094169384179055868652600d909152842084905591826110db575b5050505033817f11369440e1b7135015c16acb9bc14b55b0f4b23b02010c363d34aec2e5b962818480a367016345785d8a0000341161109b575b602090604051908152f35b67016345785d8a000034033481116110c7578280806020956110c294335af16109d0613b8c565b611090565b634e487b7160e01b5f52601160045260245ffd5b823b15611148576111199284928360405180968195829463101c1eab60e01b84528b60048501523360248501526060604485015260648401916134f8565b03925af18015610d235761112f575b8080611056565b816111399161336f565b61114457815f611128565b5080fd5b8380fd5b60405162461bcd60e51b81526020600482015260116024820152701cde589a5b08199959481b9bdd081b595d607a1b6044820152606490fd5b8280fd5b503461026d578060031936011261026d576102696040516111ab60408261336f565b60058152640352e302e360dc1b60208201526040519182916020835260208301906131de565b503461026d57602036600319011261026d5760406020916004356111f7610bf082613e27565b8152600683522054604051908152f35b503461026d578060031936011261026d5760206040516107d08152f35b503461026d578060031936011261026d5761123d61447c565b5f5160206148b85f395f51905f525460ff8160401c16801561131a575b61130b576002907f2b51ff7c4cc8e6fe1c72e9d9685b7d2a88a5d82ad3a644afbdceb0272c89c1c36112b861128d613420565b60018060a01b035f5160206148985f395f51905f5254166040519283926040845260408401906131de565b9060208301520390a168ffffffffffffffffff1916175f5160206148b85f395f51905f52557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160028152a180f35b63f92ee8a960e01b8252600482fd5b5060026001600160401b038216101561125a565b503461026d578060031936011261026d575f5160206148785f395f51905f52546040516001600160a01b039091168152602090f35b503461026d57602036600319011261026d576040602091600435611389610bf082613e27565b8152600983522054604051908152f35b503461026d576113a8366133f1565b906113b7610800831115613483565b6001600160401b036001541683101561154d57828452600b60205260408420546001600160a01b031633036114f157839083825260066020526040822054928483526006602052826040812055848352600b602052604083206001600160601b0360a01b81541690558483526007602052826040812055848352600d602052826040812055848352600860205260018060a01b036040842054169182611488575b83867f14eeeef7679fcb051c6572811f61c07bedccd0f1cfc1f9b79b23e47c5c52aeb7602088604051908152a280f35b823b15611148576114c692849283604051809681958294630aaf519760e21b84528c60048501528b60248501526060604485015260648401916134f8565b03925af18015610d23576114dc575b8080611458565b816114e69161336f565b61118557825f6114d5565b60405162461bcd60e51b815260206004820152602e60248201527f4f6e6c79207468652073746f726167652070726f76696465722063616e20646560448201526d6c6574652064617461207365747360901b6064820152608490fd5b60405162461bcd60e51b815260206004820152601960248201527f6461746120736574206964206f7574206f6620626f756e6473000000000000006044820152606490fd5b503461026d578060031936011261026d576115ab61447c565b5f5160206148785f395f51905f5280546001600160a01b0319811690915581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b503461026d57602036600319011261026d5760043561161c610bf082613e27565b8152600a6020526040812080549061163382613696565b925b8281106116525760405160208082528190610269908201876132d6565b8061165f600192846134e3565b90549060031b1c6116708287613741565b5201611635565b503461026d57602036600319011261026d57604060209160043561169d610bf082613e27565b8152600783522054604051908152f35b503461026d578060031936011261026d57602060405173a2aa501b19aff244d90cc15a4cf739d2725b57298152f35b503461026d578060031936011261026d576020604051620151808152f35b503461026d57602036600319011261026d576004358161171c610bf083613e27565b8181526005602052604081205491815b83811061173e57602085604051908152f35b8183526003602052604083208184526020526040832054611762575b60010161172c565b9361176e600191613829565b94905061175a565b503461026d578060031936011261026d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630036117ce5760206040515f5160206148985f395f51905f528152f35b63703e46dd60e11b8152600490fd5b503461026d578060031936011261026d5760406117f8613c54565b6001600160401b0383519216825260030b6020820152f35b50604036600319011261026d57611825613309565b906024356001600160401b038111611144576118459036906004016133ab565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163081149081156119d7575b506119c85761188761447c565b6040516352d1902d60e01b8152926001600160a01b0381169190602085600481865afa80958596611994575b506118cc57634c9c8ce360e01b84526004839052602484fd5b9091845f5160206148985f395f51905f5281036119825750813b15611970575f5160206148985f395f51905f5280546001600160a01b031916821790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8480a28151839015611956578083602061195295519101845af461194c613b8c565b916147fc565b5080f35b505050346119615780f35b63b398979f60e01b8152600490fd5b634c9c8ce360e01b8452600452602483fd5b632a87526960e21b8552600452602484fd5b9095506020813d6020116119c0575b816119b06020938361336f565b81010312610a445751945f6118b3565b3d91506119a3565b63703e46dd60e11b8252600482fd5b5f5160206148985f395f51905f52546001600160a01b0316141590505f61187a565b503461026d57611a08366131c8565b81835260096020526040832054916001600160fb1b0383168303610ee25790602093611a4d93926109206040611a3c613c54565b9490938152600d895220544361378f565b604051908152f35b503461026d57606036600319011261026d576004356024356044356001600160401b03811161114857611a8c903690600401613146565b611a9a610800821115613483565b838552600b60205260408520546001600160a01b03163303611ffc578385526006602052604085205415611fa257838552600d602052604085205415611f8f575b838552600a60205260408520805480611cea575b50508385526006602052604085205484865260096020526040862055611b168554436134c6565b8310611c6f57849184835260076020528360408420558483526006602052604083205415611c29575b848352600860205260408320546001600160a01b031680611b9c575b5050507fc099ffec4e3e773644a4d1dda368c46af853a0eeb15babde217f53a657396e1e91836040925260066020528185205482519182526020820152a280f35b85845260076020526040842054908685526006602052604085205491813b15611c25578588611bfa829660405198899788968795632a89faf360e21b87526004870152602486015260448501526080606485015260848401916134f8565b03925af18015610d2357611c10575b8080611b5b565b81611c1a9161336f565b61118557825f611c09565b8580fd5b847f02a8400fc343f45098cb00c3a6ea694174771939a5503f663e0ff6f4eb7c28428480a2848352600d6020528260408120558483526007602052826040812055611b3f565b60405162461bcd60e51b815260206004820152604760248201527f6368616c6c656e67652065706f6368206d757374206265206174206c6561737460448201527f206368616c6c656e676546696e616c6974792065706f63687320696e207468656064820152662066757475726560c81b608482015260a490fd5b611cf78196939496613696565b91875b828110611f2057505050611d10610bf083613e27565b8586915b8051831015611ebd57611d278382613741565b5196848952600360205260408920888a526020526040892054958892868b526005602052611d5860408c2054613f3b565b61010003986101008a11611ea95760018b01808c11611dda57611d7d909591956145c7565b8c8b82111580611e93575b15611dee57611dbd92916040828c60019452600460205281812085825260205220611db48d825461378f565b90551b906134c6565b9360018501808611611dda57611dd2906145c7565b949094611d7d565b634e487b7160e01b8d52601160045260248dfd5b50505095975095611e4691936001939599898c52600360205260408c20818d526020528b6040812055898c52600260205260408c20908c526020528a60408120611e388154613568565b80611e53575b5050506134c6565b9601919492959095611d14565b601f81118714611e685750555b8a5f80611e3e565b81835260208320611e8391601f0160051c8101908801613f25565b8082528160208120915555611e60565b5089905260056020528c60408120548310611d88565b634e487b7160e01b8c52601160045260248cfd5b839694939250611f16907f6e87df804629ac17804b57ba7abbdfac8bdc36bab504fb8a8801eb313a8ce7b192848a526006602052611f0060408b2091825461378f565b90556040519182916020835260208301906132d6565b0390a25f80611aef565b8154949693945f1981019080821161083957611f3c82856134e3565b90549060031b1c611f4d8489613741565b5215611f7b579081611f61600193856134e3565b8154905f199060031b1b1916905583550195939295611cfa565b634e487b7160e01b8a52603160045260248afd5b838552600d602052436040862055611adb565b60405162461bcd60e51b815260206004820152602c60248201527f63616e206f6e6c792073746172742070726f76696e67206f6e6365206c65617660448201526b195cc8185c9948185919195960a21b6064820152608490fd5b60405162461bcd60e51b815260206004820152603960248201527f6f6e6c79207468652073746f726167652070726f76696465722063616e206d6f60448201527f766520746f206e6578742070726f76696e6720706572696f64000000000000006064820152608490fd5b503461026d57602036600319011261026d576020611a4d600435613bbb565b503461026d578060031936011261026d5760206001600160401b0360015416604051908152f35b503461026d57604036600319011261026d576004356024356001600160a01b03811690819003611185576120e3610bf083613e27565b818352600b60205260408320546001600160a01b031633810361214357810361212357508152600c6020526040812080546001600160a01b031916905580f35b908252600c6020526040822080546001600160a01b031916909117905580f35b60a460405162461bcd60e51b815260206004820152604460248201527f4f6e6c79207468652063757272656e742073746f726167652070726f7669646560448201527f722063616e2070726f706f73652061206e65772073746f726167652070726f7660648201526334b232b960e11b6084820152fd5b503461026d57606036600319011261026d576121ff61220d61221b6121e6604435602435600435613837565b9392949091604051968796608088526080880190613276565b9086820360208801526132d6565b9084820360408601526132d6565b90151560608301520390f35b503461026d5761223636613202565b9091808452600560205261224d6040852054613f3b565b610100039161010083116122b0576122648161379c565b945b81811061227b57604051806102698882613231565b806122948561228d600194868a6134d3565b358661403a565b61229e8289613741565b526122a98188613741565b5001612266565b634e487b7160e01b85526011600452602485fd5b503461026d576122d336613173565b6122e66108008296959493961115613483565b6122f2610bf085613e27565b8115612bbd57838652600b60205260408620546001600160a01b03163303612b6757838652600560205260408620549461232b83613696565b612334846136c8565b885b8581106124ed575061237c879261238a7f396df50222a87662e94bb7d173792d5e61fe0b193b6ccf791f7ce433f0b28207936040519384936040855260408501906132d6565b908382036020850152613276565b0390a2848752600860205260408720546001600160a01b031693846123b5575b602087604051908152f35b843b156124e957918395939188959360405197889663f6814d7960e01b8852608488019060048901528a6024890152608060448901525260a4860160a48560051b88010194828990601e19813603015b8383106124655750505050505061242c8593879385936003198584030160648601526134f8565b03925af1801561245a57612445575b80808080806123aa565b61245083809261336f565b611144578161243b565b6040513d85823e3d90fd5b92959791949950929597995060a3198b82030186528835828112156124e55783018035601e19823603018112156124e15701602081359101906001600160401b0381116124e15780360382136124e1576124cb60209283928386816001985201916134f8565b9a01960193018c99979593928b99979592612405565b8e80fd5b8d80fd5b8780fd5b90612500828789959c9b979a969961371f565b9261250b3685613755565b968a5b60048110612af757508751998b908b5160041015612ae35760248c015160f81c607f16915b806004018060041161259f578d612554600160ff1b9260ff60f81b9261458b565b5116106125b35761256490613829565b91826004018060041161259f5761257d607f918f61458b565b5160f81c168360078102046007148415171561259f57600784021b1791612533565b634e487b7160e01b8f52601160045260248ffd5b6125cb919e949698929b9a9d9c509892949698613829565b600401998a600411611ea95760228110612a89578a6125e9916134c6565b8c515103612a28578b51988b607f6126018d8d61458b565b5160f81c16905b8b8d612622600160ff1b9261081e8560ff60f81b946134c6565b5116106126795790607f6126458d8f9461263e61081e91613829565b80966134c6565b5160f81c166007830283810460071484151715612664571b1790612608565b50634e487b7160e01b8f52601160045260248ffd5b6126aa91939d9f9a9598979c949e946126b4939a979c5061269c6126a292613829565b906134c6565b80945161458b565b5160f81c92613829565b506001600160f91b0381168103611dda57607f9060071b046005820160ff811161297b5760ff600191161b8110156129e5576032821161298f579060016126ff9260051c911b61378f565b90898c52600560205260408c209081549161271983613829565b90556001820180831161297b57906127348e959493926145c7565b8c849187915b81831061293757915050865260046020526040862083875260205260408620558b85526002602052604085208286526020526040852090803590601e1981360301821215610d2e576001600160401b038282013511610d2e5781810135360360208383010113610d2e576127ae8354613568565b601f81116128fa575b508690601f838201351160011461287457876001989284830135612864575b505082810135881b925f1991013560031b1c19161790555b8a8d52600360205260408d20908d526020528060408d2055898c52600660205261281d60408d209182546134c6565b9055612829818b6134c6565b6128338286613741565b5261284836612843838a8c61371f565b613755565b6128528285613741565b5261285d8184613741565b5001612336565b828501016020013592505f6127d6565b9192939495969084825260208220915b83850135601f191681106128de57506001979695949388939092909183830135601f198116106128bd575b50500135811b0190556127ee565b60205f1960f88686013560031b161c19918585010101351690555f806128af565b9091602060018192828689890101013581550193019101612884565b83885260208089206129279284860135601f810160051c8301931161292d575b601f0160051c0190613f25565b5f6127b7565b909150819061291a565b92604083959697989961296c9395612953600180971b8b61378f565b90825260046020528282209082526020522054906134c6565b92018f9695949392918e61273a565b634e487b7160e01b8e52601160045260248efd5b60a4846040519063c7b67cf360e01b8252600482015260406024820152602160448201527f50696563652073697a65206d757374206265206c657373207468616e20325e356064820152600360fc1b6084820152fd5b6084846040519063c7b67cf360e01b8252600482015260406024820152601460448201527350616464696e6720697320746f6f206c6172676560601b6064820152fd5b60405162461bcd60e51b815260206004820152603360248201527f436f6d6d507632206d756c746968617368206c656e67746820646f6573206e6f6044820152720e840dac2e8c6d040c8c2e8c240d8cadccee8d606b1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602c60248201527f436f6d6d507632206d756c746968617368206c656e677468206d75737420626560448201526b08185d081b19585cdd080ccd60a21b6064820152608490fd5b634e487b7160e01b5f52603260045260245ffd5b60ff60f81b612b07828b5161458b565b5116620aac8960e51b821a60f81b6001600160f81b03191603612b2c5760010161250e565b60405162461bcd60e51b815260206004820152601360248201527221b4b21036bab9ba1031329021b7b6b6a83b1960691b6044820152606490fd5b60405162461bcd60e51b815260206004820152602860248201527f4f6e6c79207468652073746f726167652070726f76696465722063616e206164604482015267642070696563657360c01b6064820152608490fd5b60405162461bcd60e51b815260206004820152601b60248201527f4d75737420616464206174206c65617374206f6e6520706965636500000000006044820152606490fd5b503461026d57602036600319011261026d57602090600435612c26610bf082613e27565b815260088252604060018060a01b0391205416604051908152f35b503461026d57610269612c5c612c56366131c8565b906135a0565b604051918291602083525160208084015260408301906131de565b503461026d57602036600319011261026d5760409060043590612c9c610bf083613e27565b818152600b602090815283822054928252600c8152908390205483516001600160a01b039384168152921690820152f35b503461026d57602036600319011261026d576040602091600435612cf3610bf082613e27565b8152600583522054604051908152f35b503461026d576020610f29612d17366131c8565b90613518565b503461026d578060031936011261026d5760206040517f150ac9b959aee0051e4091f0ef5216d941f590e1c5e7f91cf7635b5c11628c0e8152f35b503461026d578060031936011261026d576040516006607f60991b018152602090f35b503461026d576040602091612d8f366131c8565b90612d9c610bf082613e27565b82526003845282822090825283522054604051908152f35b5034612ee457612dc336613173565b90612dd5610800839594951115613483565b612de1610bf086613e27565b5f858152600b60205260409020546001600160a01b0316330361303957845f52600a6020526107d0612e1760405f2054866134c6565b11612fce575f5b848110612ee857505f858152600860205260409020546001600160a01b03169182612e47578680f35b823b15612ee45760405163e7954aa760e01b8152600481019690965260606024870152606486018590526001600160fb1b038511612ee45785612eaf8195935f9793608484968a9660051b8091838801378501858103820160031901604487015201916134f8565b03925af18015612ed957612ec65780808080808680f35b612ed291505f9061336f565b5f5f610d05565b6040513d5f823e3d90fd5b5f80fd5b612ef38186866134d3565b35865f52600560205260405f20541115612f7457855f52600a60205260405f2090612f1f8187876134d3565b3582549268010000000000000000841015612f605783612f4591600180960181556134e3565b819291549060031b91821b915f19901b191617905501612e1e565b634e487b7160e01b5f52604160045260245ffd5b60405162461bcd60e51b815260206004820152602c60248201527f43616e206f6e6c79207363686564756c652072656d6f76616c206f662065786960448201526b7374696e672070696563657360a01b6064820152608490fd5b60405162461bcd60e51b815260206004820152603a60248201527f546f6f206d616e792072656d6f76616c73207761697420666f72206e6578742060448201527f70726f76696e6720706572696f6420746f207363686564756c650000000000006064820152608490fd5b60405162461bcd60e51b815260206004820152603860248201527f4f6e6c79207468652073746f726167652070726f76696465722063616e20736360448201527f686564756c652072656d6f76616c206f662070696563657300000000000000006064820152608490fd5b34612ee4575f366003190112612ee457604051606360ff60981b018152602090f35b34612ee4576020366003190112612ee4576004356130e6610bf082613e27565b5f52600d602052602060405f2054604051908152f35b34612ee4575f366003190112612ee4578061080060209252f35b9181601f84011215612ee4578235916001600160401b038311612ee4576020808501948460051b010111612ee457565b9181601f84011215612ee4578235916001600160401b038311612ee45760208381860195010111612ee457565b906060600319830112612ee457600435916024356001600160401b038111612ee457816131a291600401613116565b92909291604435906001600160401b038211612ee4576131c491600401613146565b9091565b6040906003190112612ee4576004359060243590565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b906040600319830112612ee45760043591602435906001600160401b038211612ee4576131c491600401613116565b60206040818301928281528451809452019201905f5b8181106132545750505090565b8251805185526020908101518186015260409094019390920191600101613247565b9080602083519182815201916020808360051b8301019401925f915b8383106132a157505050505090565b90919293946020806132c7600193601f19868203018752828a51519181815201906131de565b97019301930191939290613292565b90602080835192838152019201905f5b8181106132f35750505090565b82518452602093840193909201916001016132e6565b600435906001600160a01b0382168203612ee457565b34612ee4575f366003190112612ee45760206040515f8152f35b602081019081106001600160401b03821117612f6057604052565b604081019081106001600160401b03821117612f6057604052565b90601f801991011681019081106001600160401b03821117612f6057604052565b6001600160401b038111612f6057601f01601f191660200190565b81601f82011215612ee4578035906133c282613390565b926133d0604051948561336f565b82845260208383010111612ee457815f926020809301838601378301015290565b906040600319830112612ee45760043591602435906001600160401b038211612ee4576131c491600401613146565b6040519061342f60408361336f565b60058252640322e302e360dc1b6020830152565b1561344a57565b60405162461bcd60e51b81526020600482015260116024820152704461746120736574206e6f74206c69766560781b6044820152606490fd5b1561348a57565b60405162461bcd60e51b81526020600482015260146024820152734578747261206461746120746f6f206c6172676560601b6044820152606490fd5b919082018092116110c757565b9190811015612ae35760051b0190565b8054821015612ae3575f5260205f2001905f90565b908060209392818452848401375f828201840152601f01601f1916010190565b9061352282613e27565b9182613551575b8261353357505090565b9091505f52600360205260405f20905f5260205260405f2054151590565b8092505f52600560205260405f2054811091613529565b90600182811c92168015613596575b602083101461358257565b634e487b7160e01b5f52602260045260245ffd5b91607f1691613577565b60606040516135ae81613339565b526135bb610bf082613e27565b5f52600260205260405f20905f5260205260405f20604051906135dd82613339565b60405190815f8254926135ef84613568565b808452936001811690811561365d5750600114613619575b506136149250038261336f565b815290565b90505f9291925260205f20905f915b818310613641575050906020613614928201015f613607565b6020919350806001915483858801015201910190918392613628565b90506020925061361494915060ff191682840152151560051b8201015f613607565b6001600160401b038111612f605760051b60200190565b906136a08261367f565b6136ad604051918261336f565b82815280926136be601f199161367f565b0190602036910137565b906136d28261367f565b6136df604051918261336f565b82815280926136f0601f199161367f565b01905f5b82811061370057505050565b60209060405161370f81613339565b60608152828285010152016136f4565b9190811015612ae35760051b81013590601e1981360301821215612ee4570190565b8051821015612ae35760209160051b010190565b919091602081840312612ee4576040519061376f82613339565b819381356001600160401b038111612ee45761378b92016133ab565b9052565b919082039182116110c757565b906137a68261367f565b6137b3604051918261336f565b82815280926137c4601f199161367f565b01905f5b8281106137d457505050565b6020906040516137e381613354565b5f81525f83820152828285010152016137c8565b908167015180000000000002916701518000000000008304036110c757565b818102929181159184041417156110c757565b5f1981146110c75760010190565b915f613845610bf085613e27565b8115613b4757835f52600560205260405f205492613862836136c8565b9261386c81613696565b9461387682613696565b965f905f945f5b8481106139a2575b505050505081155f1461390a57505050505050604051906138a760208361336f565b5f82525f805b8181106138eb575050602090604051926138c7838561336f565b5f84525f368137604051926138dc818561336f565b5f8452505f3681379291905f90565b6020906040516138fa81613339565b60608152828287010152016138ad565b81969293949596105f1461399c57613921816136c8565b9561392b82613696565b9561393583613696565b955f5b848110613946575050505050565b8061395360019284613741565b5161395e828d613741565b52613969818c613741565b506139748185613741565b5161397f828c613741565b5261398a8186613741565b51613995828b613741565b5201613938565b50919391565b825f52600360205260405f20815f5260205260405f20546139c6575b60010161387d565b92958187101580613b3e575b15613b0d57825f52600260205260405f20845f5260205260405f20604051906139fa82613339565b60405190815f825492613a0c84613568565b8084529360018116908115613aeb5750600114613aa9575b50613a319250038261336f565b8152613a3d828b613741565b52613a48818a613741565b5083613a54828c613741565b52825f52600360205260405f20845f5260205260405f2054908160051b91808304602014901517156110c757613a9b81600193613a958f94613aa195613741565b52613829565b97613829565b9390506139be565b9150505f528160205f20915f925b818410613acf5750506020613a31928201015f613a24565b6020919250806001915483868801015201920191908391613ab7565b905060209250613a3194915060ff191682840152151560051b8201015f613a24565b95613b1886836134c6565b811015613b2a57613aa1600191613829565b505050505091506001915f80808080613885565b508581106139d2565b60405162461bcd60e51b815260206004820152601c60248201527f4c696d6974206d7573742062652067726561746572207468616e2030000000006044820152606490fd5b3d15613bb6573d90613b9d82613390565b91613bab604051938461336f565b82523d5f602084013e565b606090565b5f80916040516020810191825260208152613bd760408261336f565b51906006607f60991b015afa613beb613b8c565b9015613c0557602081805181010312612ee4576020015190565b60405162461bcd60e51b815260206004820152602160248201527f52616e646f6d6e65737320707265636f6d70696c652063616c6c206661696c656044820152601960fa1b6064820152608490fd5b6040516396834ad360e01b81527f150ac9b959aee0051e4091f0ef5216d941f590e1c5e7f91cf7635b5c11628c0e60048201529060808260248173a2aa501b19aff244d90cc15a4cf739d2725b57295afa918215612ed9575f92613d34575b505f825160070b1315613cd657604082516001600160401b031692015160030b90565b60405162461bcd60e51b815260206004820152603060248201527f6661696c656420746f2076616c69646174653a207072696365206d757374206260448201526f0652067726561746572207468616e20360841b6064820152608490fd5b9091506080813d608011613dc3575b81613d506080938361336f565b81010312612ee45760405190608082018281106001600160401b03821117612f605760405280518060070b8103612ee457825260208101516001600160401b0381168103612ee45760208301526040810151908160030b8203612ee457606091604084015201516060820152905f613cb3565b3d9150613d43565b6001600160401b03166001600160401b0381146110c75760010190565b15613def57565b60405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b6044820152606490fd5b6001600160401b036001541681109081613e3f575090565b5f908152600b60205260409020546001600160a01b03161515919050565b6001600160a01b03168015613ebb575f5160206148785f395f51905f5280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b9190811015612ae35760051b81013590603e1981360301821215612ee4570190565b903590601e1981360301821215612ee457018035906001600160401b038211612ee457602001918160051b36038313612ee457565b818110613f30575050565b5f8155600101613f25565b610100908060801c8061402e575b508060401c80614019575b508060201c80614004575b508060101c80613fef575b508060081c80613fda575b508060041c80613fc5575b508060021c80613fb0575b508060011c613fa057613f9d9161378f565b90565b5060011981019081116110c75790565b916001198101915081116110c757905f613f8b565b916003198101915081116110c757905f613f80565b916007198101915081116110c757905f613f75565b91600f198101915081116110c757905f613f6a565b91601f198101915081116110c757905f613f5f565b91603f198101915081116110c757905f613f54565b9150506080905f613f49565b9160405161404781613354565b5f81525f602082015250825f52600660205260405f2054821015614184576001811b5f1981019081116110c757925f91805b6140dc57505f52600460205260405f20835f5260205261409d60405f2054826134c6565b828111156140c657506140af9161378f565b604051916140bc83613354565b8252602082015290565b9050600183018093116110c7576140af9161378f565b9391815f52600560205260405f205483101561416457815f52600460205260405f20835f526020528361411360405f2054836134c6565b116141645761413990825f52600460205260405f20845f5260205260405f2054906134c6565b915f198501908582116110c7576001614153921b906134c6565b935b80156110c7575f190180614079565b915f198501908582116110c757600161417e921b9061378f565b93614155565b60405162461bcd60e51b815260206004820152601860248201527f4c65616620696e646578206f7574206f6620626f756e647300000000000000006044820152606490fd5b63ffffffff16604d81116110c757600a0a90565b81156141e7570490565b634e487b7160e01b5f52601260045260245ffd5b929093915f948415801590614474575b15614409576001600160401b0316801561439e57821561433d57600382900b5f81126142ea5750856107b75790614253614247614259936137f7565b9163ffffffff166141c9565b90613816565b80156141e75761427b9261427691671bc16d674ec8000004613816565b613816565b90600582028215908381046005148217156122b05760649004908360021b8481046004148217156107b7578284106142b557505050505090565b939492939192916064900484106142d2575050613f9d925061378f565b915091508280046001141715610ece57506064900490565b5f965090939150637fffffff1981146110c75761430e905f0363ffffffff166141c9565b671bc16d674ec800008082029291908304036110c7576142766142769261433761427b966137f7565b906141dd565b60405162461bcd60e51b815260206004820152603360248201527f6661696c656420746f2076616c69646174653a207261772073697a65206d75736044820152720742062652067726561746572207468616e203606c1b6064820152608490fd5b60405162461bcd60e51b815260206004820152603860248201527f6661696c656420746f2076616c69646174653a204174746f46494c207072696360448201527f65206d7573742062652067726561746572207468616e203000000000000000006064820152608490fd5b60405162461bcd60e51b815260206004820152603c60248201527f6661696c656420746f2076616c69646174653a20657374696d6174656420676160448201527f7320666565206d7573742062652067726561746572207468616e2030000000006064820152608490fd5b50481561420b565b5f5160206148785f395f51905f52546001600160a01b0316330361449c57565b63118cdaa760e01b5f523360045260245ffd5b80341061450b575f90819081908190606360ff60981b015af16144d0613b8c565b50156144d857565b60405162461bcd60e51b815260206004820152600b60248201526a109d5c9b8819985a5b195960aa1b6044820152606490fd5b60405162461bcd60e51b8152602060048201526014602482015273125b98dbdc9c9958dd0819995948185b5bdd5b9d60621b6044820152606490fd5b1561454e57565b60405162461bcd60e51b815260206004820152601560248201527410da590819185d18481a5cc81d1bdbc81cda1bdc9d605a1b6044820152606490fd5b908151811015612ae3570160200190565b60ff5f5160206148b85f395f51905f525460401c16156145b857565b631afcd79f60e31b5f5260045ffd5b6001600160ff1b0381116147ac5761010090600160ff1b81146110c757805f0316806147a3575b6fffffffffffffffffffffffffffffffff8116614790575b77ffffffffffffffff0000000000000000ffffffffffffffff811661477d575b7bffffffff00000000ffffffff00000000ffffffff00000000ffffffff811661476a575b7dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff8116614757575b7eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff8116614744575b7f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f8116614731575b7f3333333333333333333333333333333333333333333333333333333333333333811661471e575b7f5555555555555555555555555555555555555555555555555555555555555555166147105790565b5f1981019081116110c75790565b9060011981019081116110c757906146e7565b9060031981019081116110c757906146bf565b9060071981019081116110c75790614697565b90600f1981019081116110c75790614670565b90601f1981019081116110c7579061464a565b90603f1981019081116110c75790614626565b90607f1981019081116110c75790614606565b60ff91506145ee565b60405162461bcd60e51b815260206004820152602260248201527f496e7075742065786365656473206d6178696d756d20696e743235362076616c604482015261756560f01b6064820152608490fd5b90614820575080511561481157602081519101fd5b63d6bda27560e01b5f5260045ffd5b81511580614851575b614831575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b15614829565b5f5260205260205f60408160025afa15612ee4575f5160c019169056fe9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a26469706673582212200a2707b042e9008339d01cf98ad5d54211b724a7bcb444e5c2a5433fd78655e064736f6c634300081e0033","sourceMap":"2099:36650:42:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2318:2;2099:36650;2318:2;;;2099:36650;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;2099:36650:42;;;;-1:-1:-1;;;;;;;;;;;2099:36650:42;;;;;;4301:16:32;2099:36650:42;-1:-1:-1;;;;;2099:36650:42;;4726:16:32;;:34;;;;2099:36650:42;;4790:16:32;:50;;;;2099:36650:42;4855:13:32;:30;;;;2099:36650:42;4851:91:32;;;-1:-1:-1;;2099:36650:42;;;;-1:-1:-1;;;;;;;;;;;2099:36650:42;;4979:67:32;;2099:36650:42;6893:76:32;;;:::i;:::-;;;:::i;:::-;6961:1;7819:10:42;6961:1:32;:::i;:::-;6893:76;;:::i;:::-;2099:36650:42;;;;5066:101:32;;2099:36650:42;;5066:101:32;2099:36650:42;;-1:-1:-1;;;;;;;;;;;2099:36650:42;;-1:-1:-1;;;;;;;;;;;2099:36650:42;5142:14:32;2099:36650:42;;;;;;5142:14:32;2099:36650:42;;4979:67:32;-1:-1:-1;;2099:36650:42;;;-1:-1:-1;;;;;;;;;;;2099:36650:42;4979:67:32;;;4851:91;-1:-1:-1;;;4908:23:32;;2099:36650:42;6498:23:32;4908;4855:30;4872:13;;;4855:30;;;4790:50;4818:4;4810:25;:30;;-1:-1:-1;4790:50:32;;4726:34;;;-1:-1:-1;4726:34:32;;2099:36650:42;;;;;;;;;;;;;;;;2372:2;2099:36650;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23643:9;;;;;2099:36650;;;23725:15;2099:36650;;;;;;;;;-1:-1:-1;;;;;2099:36650:42;23711:10;:36;2099:36650;;23816:11;;2099:36650;;;;;23892:18;2099:36650;;;;;;23939:12;;:30;2099:36650;;24011:40;2099:36650;;24148:47;;;:::i;:::-;2099:36650;;;;23892:18;2099:36650;;29613:40;2099:36650;;;;29613:40;:::i;:::-;2099:36650;;;;24289:14;2099:36650;;;;;;;;;24362:11;2099:36650;;24351:30;2099:36650;;;;24351:30;:::i;:::-;24345:3;2099:36650;;24345:3;2099:36650;;;;24400:12;;;;;;;;2099:36650;;24395:1977;24427:3;2099:36650;-1:-1:-1;;;;;2099:36650:42;;24414:11;;;;2099:36650;;;25582:32;;2099:36650;;;;;;;;;-1:-1:-1;;;;;2099:36650:42;;;;;;;;;;25582:32;;;;;;;:::i;:::-;2099:36650;25663:18;;2099:36650;;;;;;25829:47;2099:36650;;25829:47;;:::i;:::-;25813:63;-1:-1:-1;;;;;2099:36650:42;;25813:63;;:::i;:::-;;;-1:-1:-1;;;;;2099:36650:42;;25813:63;;:::i;:::-;;25921:41;25940:13;-1:-1:-1;;;;;2099:36650:42;;25940:13;;:::i;:::-;;2099:36650;25921:41;;:::i;:::-;679:55:39;2099:36650:42;687:8:39;;2099:36650:42;687:21:39;;679:55;:::i;:::-;2099:36650:42;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;2099:36650:42;;;;;797:13:39;812:6;2099:36650:42;812:6:39;;;;915:18;;;;2099:36650:42;;;;;;;;;;792:107:39;1085:8;1077:55;1104:2;1085:8;;2099:36650:42;1085:21:39;;1077:55;:::i;:::-;1155:8;2099:36650:42;;-1:-1:-1;;2099:36650:42;;;1155:8:39;2099:36650:42;;;;;-1:-1:-1;;2099:36650:42;;;;;;26097:1;1155:34:39;;;;:::i;:::-;2099:36650:42;;;;;;;;;;;-1:-1:-1;;;;;2099:36650:42;26270:13;26226:15;:9;2099:36650;;;26226:9;;;:::i;:::-;:15;;;;;:::i;:::-;2099:36650;;;26254:9;2099:36650;;;26254:9;;;:::i;:::-;2099:36650;;;;26270:13;;:::i;:::-;;:20;2099:36650;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;24362:11;2099:36650;;;;;;;;;;;;24362:11;2099:36650;;;;;;;;;;;;;1286:12:43;;2099:36650:42;;;;;;;;;;1286:30:43;2099:36650:42;;1888:27:43;;1930:13;;1377:50;;1930:13;;1963:3;1949:12;;2099:36650:42;1945:16:43;;;;;26097:1:42;2094:8:43;;;;;;:::i;:::-;2099:36650:42;;;;;26097:1;;10432:22:43;;;;:::i;:::-;2116:207;;1025:5:40;;1963:3:43;2099:36650:42;1930:13:43;;;;2116:207;10432:22;;;:::i;:::-;2116:207;;;1945:16;;;;;;;;;;;;;;;1377:58;;;2099:36650:42;;24427:3;;;:::i;:::-;24400:12;;;;;;;;;;;;;2099:36650;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;;;;;;;;;-1:-1:-1;;;2099:36650:42;;;;;;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;;;;;;;;;;;;;;;;;820:3:39;854:8;;2099:36650:42;;-1:-1:-1;;2099:36650:42;;;854:8:39;2099:36650:42;;;;;854:34:39;2099:36650:42;;863:24:39;26097:1:42;2099:36650;2234:42;2099:36650;;863:24:39;;:::i;:::-;854:34;;:::i;:::-;2099:36650:42;;839:49:39;;;;;;:::i;:::-;;2099:36650:42;797:13:39;;2099:36650:42;-1:-1:-1;;;2099:36650:42;;;;;;;;;-1:-1:-1;;;2099:36650:42;;;;;;;;24414:11;;;;26775:22;24414:11;;;26788:9;26775:22;;:::i;:::-;28818:24;28857:13;;28852:217;28872:17;;;;;;2099:36650;;;;;;;;;;26841:4;2099:36650;;;;;;26841:4;2099:36650;;;;;;;28177:23;26774:72;;;;:::i;:::-;28187:13;28177:23;;:::i;:::-;2099:36650;;;24289:14;2099:36650;;;;;;;-1:-1:-1;;;;;2099:36650:42;;;;;;28457:44;28310:16;28553:59;2099:36650;28310:16;28356:155;28310:16;;;28630:20;28310:16;;;;:::i;:::-;2099:36650;;;;;;;;28472:22;2099:36650;;;;23939:12;28457:44;:::i;:::-;2099:36650;24362:11;2099:36650;28356:155;;:::i;:::-;28529:8;;;;:::i;:::-;-1:-1:-1;;;;;2099:36650:42;;;;;;;;;;;;;;;;;28553:59;28630:9;:20;:::i;:::-;2099:36650;;;;26961:15;2099:36650;;2234:42;2099:36650;;;;;;;;;27001:26;;26997:160;;28852:217;2099:36650;;;;27236:35;2099:36650;;27236:35;2099:36650;;28472:22;2099:36650;;23939:12;2099:36650;;;;;27236:35;;;;;:::i;:::-;;;;27481:10;;27477:143;;2099:36650;;27477:143;23711:10;;;27573:36;23711:10;;27525:34;;;;:::i;:::-;;27573:36;:::i;:::-;27477:143;;2099:36650;;26997:160;2099:36650;;;27097:16;2099:36650;;;;;;27047:95;;;;;;2099:36650;;;27047:95;2099:36650;;;;;;;;;;;27047:95;;;2099:36650;27047:95;;2099:36650;;;;;;;;;;;;;27047:95;;;;;;;;26997:160;;;;;27047:95;;;;;:::i;:::-;2099:36650;;27047:95;;;;2099:36650;;;;27047:95;2099:36650;;;;;;;;;28891:3;29030:9;;:15;:9;;;;;:::i;:::-;2099:36650;29030:15;;;;:::i;:::-;2099:36650;;;24362:11;2099:36650;;;;;;;;;;;;;;;;;;;;;26097:1;29008:50;;;;:::i;:::-;28891:3;2099:36650;28857:13;;;2099:36650;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;;-1:-1:-1;;;2099:36650:42;;;;;;;23725:15;2099:36650;;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;;;;;;;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;;;;;;-1:-1:-1;;2099:36650:42;;;;2357:1:31;2099:36650:42;;:::i;:::-;2303:62:31;;:::i;:::-;2357:1;:::i;:::-;2099:36650:42;;;;:::i;:::-;;;;;;;;:::i;:::-;17039:48;17047:18;;;:::i;:::-;17039:48;:::i;:::-;2099:36650;;;17118:30;2099:36650;;;;;;-1:-1:-1;;;;;2099:36650:42;17159:10;17118:51;2099:36650;;;;;;;17300:15;2099:36650;;2234:42;2099:36650;;;;;;;;;;;;;17300:15;2099:36650;;;;;2234:42;2099:36650;;;;17159:10;2099:36650;-1:-1:-1;;;;;2099:36650:42;;;;;;;;;;;17118:30;2099:36650;;;;;-1:-1:-1;;;;;2099:36650:42;;;;;;;;;17159:10;;17436:61;;;;;;2099:36650;;;17530:15;2099:36650;;;;;;-1:-1:-1;;;;;2099:36650:42;;;17562:155;;2099:36650;;;17562:155;17608:98;;;;;2099:36650;;;;;;;;;;;;;;;17608:98;;2099:36650;17608:98;;2099:36650;;;;;17159:10;2099:36650;;;;;;;;;;;;;;:::i;:::-;17608:98;;;;;;;;;;17562:155;;;;;;2099:36650;;;17608:98;;;;;:::i;:::-;2099:36650;;17608:98;;;;;2099:36650;;;;;;;;;17608:98;2099:36650;;;;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;9534:11;2099:36650;;9523:30;2099:36650;;;;9523:30;:::i;:::-;9517:3;2099:36650;9517:3;2099:36650;;;;;;;9625:14;2099:36650;;;;;;-1:-1:-1;;2099:36650:42;;;;;;;9603:53;;;;;:::i;:::-;9687:10;2099:36650;9687:10;;2099:36650;;;;9701:15;2099:36650;;;;;;;;;;;;;;;;;;;;;;;;;9687:53;;2099:36650;;9848:25;;2099:36650;9848:25;;:::i;:::-;:51;;;;2099:36650;;;;;;;;;;;9848:51;2099:36650;-1:-1:-1;9877:22:42;;-1:-1:-1;9848:51:42;;;;2099:36650;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2099:36650:42;;;;;;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;;;;;;;-1:-1:-1;;2099:36650:42;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;2318:2;2099:36650;;;;;;;-1:-1:-1;2099:36650:42;;-1:-1:-1;;2099:36650:42;;;;;;:::i;:::-;;;-1:-1:-1;;;;;2099:36650:42;;;;;;;;;;;:::i;:::-;18030:39;18022:72;2580:4;18030:39;;;18022:72;:::i;:::-;1025:5:40;18159:9:42;:21;2099:36650;;18220:8;;;1025:5:40;18220:8:42;:::i;:::-;18256:15;2099:36650;;-1:-1:-1;;;;;2099:36650:42;;18256:15;-1:-1:-1;;;;;18256:15:42;;;:::i;:::-;-1:-1:-1;;2099:36650:42;;;;;;18256:15;2099:36650;;;;18281:16;2099:36650;;;;;;;;;;;;;;18318:18;2099:36650;;;;;;;;;;;18428:15;2099:36650;;;;;;;-1:-1:-1;;;;;;2099:36650:42;;;18453:10;2099:36650;;;;;;;18473:15;2099:36650;;;;;;;;;;-1:-1:-1;;;;;2099:36650:42;;;;;;;;;;;;18520:22;2099:36650;;;;;;;;;;18578:127;;2099:36650;18453:10;;;;;18719:33;;;;;1025:5:40;18159:9:42;18842:20;18838:167;;2099:36650;;;;;;;;;18838:167;1025:5:40;18159:9:42;2099:36650;18159:9;2099:36650;;;;18453:10;;;2099:36650;18453:10;18958:36;18453:10;;18896:48;;;;:::i;18958:36::-;18838:167;;2099:36650;;;;;;;;;;;;18578:127;18624:70;;;;;2099:36650;;;;;;;;;;;;;;;;18624:70;;;2099:36650;18624:70;;2099:36650;18453:10;2099:36650;;;;;;;;;;;;;;:::i;:::-;18624:70;;;;;;;;;;18578:127;;;;;18624:70;;;;;:::i;:::-;2099:36650;;18624:70;;;;2099:36650;;;;18624:70;2099:36650;;;;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;2099:36650:42;;;;;;;;;10040:48;10048:18;;;:::i;10040:48::-;2099:36650;;10105:16;2099:36650;;;;;;;;;;;;;;;;;;;;;;;;;;2428:4;2099:36650;;;;;;;;;;;;;;;;2303:62:31;;:::i;:::-;-1:-1:-1;;;;;;;;;;;2099:36650:42;;;;;;6431:44:32;;;;2099:36650:42;6427:105:32;;8093:1:42;2099:36650;8111:59;2099:36650;;;:::i;:::-;2234:42;2099:36650;;;;-1:-1:-1;;;;;;;;;;;2099:36650:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;8111:59;;;2099:36650;;;;-1:-1:-1;;;;;;;;;;;2099:36650:42;6656:20:32;2099:36650:42;;;8093:1;2099:36650;;6656:20:32;2099:36650:42;;6427:105:32;-1:-1:-1;;;6498:23:32;;2099:36650:42;6498:23:32;;6431:44;2099:36650:42;8093:1;-1:-1:-1;;;;;2099:36650:42;;6450:25:32;;6431:44;;2099:36650:42;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2099:36650:42;;;-1:-1:-1;;;;;2099:36650:42;;;;;;;;;;;;;;;-1:-1:-1;;2099:36650:42;;;;;;;;;12106:48;12114:18;;;:::i;12106:48::-;2099:36650;;12171:14;2099:36650;;;;;;;;;;;;;;;;;;:::i;:::-;19195:39;19187:72;2580:4;19195:39;;;19187:72;:::i;:::-;-1:-1:-1;;;;;19282:13:42;2099:36650;;19273:22;;;19269:88;;2099:36650;;;19375:15;2099:36650;;;;;;-1:-1:-1;;;;;2099:36650:42;19401:10;19375:36;2099:36650;;;;;;;19499:16;2099:36650;;;;;;;;;;19499:16;2099:36650;;;;;;;;;;19375:15;2099:36650;;;;;-1:-1:-1;;;;;2099:36650:42;;;;;;;;;;19614:18;2099:36650;;;;;;;;;;19653:22;2099:36650;;;;;;;;;;19734:15;2099:36650;;2234:42;2099:36650;;;;;;;;;19770:26;;19766:133;;2099:36650;;;19913:39;2099:36650;;;;;;;19913:39;2099:36650;;19766:133;19812:76;;;;;2099:36650;;;;;;;;;;;;;;;;19812:76;;;2099:36650;19812:76;;2099:36650;;;;;;;;;;;;;;;;:::i;:::-;19812:76;;;;;;;;;;19766:133;;;;;19812:76;;;;;:::i;:::-;2099:36650;;19812:76;;;;2099:36650;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;;;;;;;;;-1:-1:-1;;;2099:36650:42;;;;;;;19269:88;2099:36650;;-1:-1:-1;;;19311:35:42;;2099:36650;;19311:35;;2099:36650;;;;;;;;;;;19311:35;;;2099:36650;;;;;;;;;;;;;2303:62:31;;:::i;:::-;-1:-1:-1;;;;;;;;;;;2099:36650:42;;-1:-1:-1;;;;;;2099:36650:42;;;;;;;-1:-1:-1;;;;;2099:36650:42;3975:40:31;2099:36650:42;;3975:40:31;2099:36650:42;;;;;;;;;-1:-1:-1;;2099:36650:42;;;;;;12404:48;12412:18;;;:::i;12404:48::-;2099:36650;;12491:17;2099:36650;;;;;;;12551:30;;;;:::i;:::-;12596:13;12611:19;;;;;;2099:36650;;;;;;;;;;;;;;:::i;12632:3::-;12663:11;;2099:36650;12663:11;;;:::i;:::-;2099:36650;;;;;;12651:23;;;;:::i;:::-;2099:36650;;12596:13;;2099:36650;;;;;;;-1:-1:-1;;2099:36650:42;;;;;;;;;10505:48;10513:18;;;:::i;10505:48::-;2099:36650;;10570:18;2099:36650;;;;;;;;;;;;;;;;;;;;;;;;;;2677:42;2099:36650;;;;;;;;;;;;;;;;;;;2631:5;2099:36650;;;;;;;;;;-1:-1:-1;;2099:36650:42;;;;;;12995:19;13026:48;13034:18;;;:::i;13026:48::-;2099:36650;;;13106:11;2099:36650;;;;;;13139:13;;13154:14;;;;;;2099:36650;;;;;;;;13170:3;2099:36650;;;13193:15;2099:36650;;;;;;;;;;;;;;13189:81;;13170:3;2099:36650;;13139:13;;13189:81;13242:13;;2099:36650;13242:13;;:::i;:::-;13189:81;;;;;2099:36650;;;;;;;;;;;;;5115:6:33;-1:-1:-1;;;;;2099:36650:42;5106:4:33;5098:23;5094:145;;2099:36650:42;;;-1:-1:-1;;;;;;;;;;;2099:36650:42;;;5094:145:33;-1:-1:-1;;;5199:29:33;;2099:36650:42;;5199:29:33;2099:36650:42;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2099:36650:42;;;;;;;;;;;;;;-1:-1:-1;2099:36650:42;;-1:-1:-1;;2099:36650:42;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;2099:36650:42;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;4692:6:33;2099:36650:42;4683:4:33;4675:23;;;:120;;;;2099:36650:42;4658:251:33;;;2303:62:31;;:::i;:::-;2099:36650:42;;-1:-1:-1;;;6156:52:33;;2099:36650:42;-1:-1:-1;;;;;2099:36650:42;;;;;;;;;6156:52:33;;;;;;;;2099:36650:42;-1:-1:-1;6152:437:33;;-1:-1:-1;;;6518:60:33;;2099:36650:42;;;;;1805:47:15;6518:60:33;6152:437;6250:40;;;-1:-1:-1;;;;;;;;;;;6250:40:33;;6246:120;;1748:29:15;;;:34;1744:119;;-1:-1:-1;;;;;;;;;;;2099:36650:42;;-1:-1:-1;;;;;;2099:36650:42;;;;;2407:36:15;;;;2099:36650:42;;;;2458:15:15;:11;;4065:25:21;;2099:36650:42;4107:55:21;4065:25;;;;;;;;;:::i;:::-;4107:55;;:::i;:::-;;2099:36650:42;;2454:148:15;6163:9;;;;6159:70;;2099:36650:42;;6159:70:15;-1:-1:-1;;;6199:19:15;;2099:36650:42;;6199:19:15;1744:119;-1:-1:-1;;;1805:47:15;;2099:36650:42;;;1805:47:15;;6246:120:33;-1:-1:-1;;;6317:34:33;;2099:36650:42;;;6317:34:33;;6156:52;;;;2099:36650:42;6156:52:33;;2099:36650:42;6156:52:33;;;;;;2099:36650:42;6156:52:33;;;:::i;:::-;;;2099:36650:42;;;;;6156:52:33;;;;;;;-1:-1:-1;6156:52:33;;4658:251;-1:-1:-1;;;4869:29:33;;2099:36650:42;4869:29:33;;4675:120;-1:-1:-1;;;;;;;;;;;2099:36650:42;-1:-1:-1;;;;;2099:36650:42;4753:42:33;;;-1:-1:-1;4675:120:33;;;2099:36650:42;;;;;;;;:::i;:::-;;;;27762:14;2099:36650;;;;;;;-1:-1:-1;;;;;2099:36650:42;;;;;;27839:16;2099:36650;27839:16;27873:155;27839:16;;27974:44;2099:36650;27839:16;;:::i;:::-;2099:36650;;;;;27989:22;2099:36650;;;;27974:12;:44;:::i;27873:155::-;2099:36650;;;;;;;;;;;;;-1:-1:-1;;2099:36650:42;;;;;;;;;;-1:-1:-1;;;;;2099:36650:42;;;;;;;;;;;:::i;:::-;30672:72;2580:4;30680:39;;;30672:72;:::i;:::-;2099:36650;;;30776:15;2099:36650;;;;;;-1:-1:-1;;;;;2099:36650:42;30762:10;:36;2099:36650;;;;;30878:16;2099:36650;;;;;;30878:27;2099:36650;;;;;30969:22;2099:36650;;;;;;30969:48;30965:123;;2099:36650;;;;31177:17;2099:36650;;;;;;;31260:13;31256:387;;2099:36650;;;;;;30878:16;2099:36650;;;;;;;;;31700:14;2099:36650;;;;;;31778:32;2099:36650;;31778:12;:32;:::i;:::-;31761:49;;31757:161;;2099:36650;;;;;31927:18;2099:36650;;;;;;;;;;30878:16;2099:36650;;;;;;32133:28;32129:208;;2099:36650;;;;32370:15;2099:36650;;;;;;-1:-1:-1;;;;;2099:36650:42;;32402:200;;2099:36650;;;;32616:65;2099:36650;;;;;30878:16;2099:36650;;;;;;;;;;;;;;;32616:65;2099:36650;;32402:200;2099:36650;;;31927:18;2099:36650;;;;;;;;;;30878:16;2099:36650;;;;;;32448:143;;;;;;2099:36650;;;;;;;;;;;;;;;;;32448:143;;2099:36650;32448:143;;2099:36650;;;;;;;;;;;;;;;;;;;:::i;:::-;32448:143;;;;;;;;;;32402:200;;;;;32448:143;;;;;:::i;:::-;2099:36650;;32448:143;;;;;2099:36650;;;32129:208;32182:19;;;;;2099:36650;;;30969:22;2099:36650;;;;;;;;;;31927:18;2099:36650;;;;;;;32129:208;;31757:161;2099:36650;;-1:-1:-1;;;31826:81:42;;2099:36650;;31826:81;;2099:36650;;;;;;;;;;;;;;;;-1:-1:-1;;;2099:36650:42;;;;31826:81;;;31256:387;31326:24;;;;;;;:::i;:::-;31370:13;;31385;;;;;;32832:18;;;32824:48;32832:18;;;:::i;32824:48::-;32882:22;32919:13;32914:119;32955:3;2099:36650;;32934:19;;;;;33010:11;;;;:::i;:::-;2099:36650;;;;;;;;;;;;;;;;;;;;33440:5;;2099:36650;;;;35695:11;2099:36650;;35684:30;2099:36650;;;;35684:30;:::i;:::-;35678:3;2099:36650;;35678:3;2099:36650;;;;;;;;;;;;38366:21;;;;;;:::i;:::-;35932:8;;;;;:38;;;35925:177;35932:38;;;36036:15;2099:36650;;;;;;;;;;;;;;;;;;;;35986:36;2099:36650;;;35986:36;:::i;:::-;2099:36650;;;36036:15;;:::i;:::-;2099:36650;;;;;;;;;38366:21;;;:::i;:::-;35925:177;;;;;2099:36650;-1:-1:-1;;;2099:36650:42;;;;;;;;35932:38;;;;;;;;32974:48;35932:38;;2099:36650;35932:38;;;2099:36650;;;;;;;;;;;;;;;;;;;;;;33511:9;2099:36650;;;;;;;;;;;;;;;;;;:::i;:::-;;;;35925:177;32974:48;;;;:::i;:::-;32955:3;2099:36650;32919:13;;;;;;;;2099:36650;;;;;;;;;;;;;;;;;;;;;;;;;;;35695:11;2099:36650;;;;;;;:::i;:::-;;;;;;;;;;;;;35932:38;2099:36650;;;;35695:11;2099:36650;;;;;;;35944:26;;35932:38;;2099:36650;-1:-1:-1;;;2099:36650:42;;;;;;;;32934:19;;;;;;;2099:36650;32934:19;31593:39;32934:19;2099:36650;;;30878:16;2099:36650;;33042:37;2099:36650;;;;;;33042:37;:::i;:::-;2099:36650;;;;;;;;;;;;;;;:::i;:::-;31593:39;;;31256:387;;;;31400:3;2099:36650;;;;;;-1:-1:-1;;2099:36650:42;;;;;;;;31446:29;;;;:::i;:::-;2099:36650;;;;;;31423:52;;;;:::i;:::-;2099:36650;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;31370:13;;;;;;2099:36650;-1:-1:-1;;;2099:36650:42;;;;;;;;30965:123;2099:36650;;;30969:22;2099:36650;;31065:12;2099:36650;;;;30965:123;;2099:36650;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;;;;;;;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2099:36650:42;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;;;;8764:13:42;2099:36650;;;;;;;;;;;;;;;-1:-1:-1;;2099:36650:42;;;;;;;;-1:-1:-1;;;;;2099:36650:42;;;;;;;;16346:48;16354:18;;;:::i;16346:48::-;2099:36650;;;16437:15;2099:36650;;;;;;-1:-1:-1;;;;;2099:36650:42;16516:10;16490:36;;2099:36650;;16622:44;;2099:36650;;-1:-1:-1;2099:36650:42;;16795:30;2099:36650;;;;;;;-1:-1:-1;;;;;;2099:36650:42;;;;;16618:314;2099:36650;;;16863:30;2099:36650;;;;;;;-1:-1:-1;;;;;;2099:36650:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;;;;-1:-1:-1;;2099:36650:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;37862:11;2099:36650;;37851:30;2099:36650;;;;37851:30;:::i;:::-;37845:3;2099:36650;;37845:3;2099:36650;;;;37936:51;;;:::i;:::-;38002:13;38017:21;;;;;;2099:36650;;;;;;;:::i;38040:3::-;38093:13;38071:41;38093:13;;2099:36650;38093:13;;;;:::i;:::-;2099:36650;38071:41;;:::i;:::-;38059:53;;;;:::i;:::-;;;;;;:::i;:::-;;2099:36650;38002:13;;2099:36650;-1:-1:-1;;;2099:36650:42;;;;;;;;;;;;;;;;:::i;:::-;20340:72;2580:4;20348:39;;;;;;;;20340:72;:::i;:::-;20422:48;20430:18;;;:::i;20422:48::-;20488:11;;2099:36650;;;;;20549:15;2099:36650;;;;;;-1:-1:-1;;;;;2099:36650:42;20575:10;20549:36;2099:36650;;;;;20661:11;2099:36650;;;;;;20717:31;;;;:::i;:::-;20793:32;;;:::i;:::-;20841:13;20856:11;;;;;;2099:36650;;;;;21036:44;2099:36650;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;21036:44;;;2099:36650;;;21114:15;2099:36650;;;;;;-1:-1:-1;;;;;2099:36650:42;;;21146:135;;20836:186;2099:36650;;;;;;;;21146:135;21192:78;;;;;2099:36650;;;;;;;;;;;;;;;;21192:78;;2099:36650;;;21192:78;2099:36650;21192:78;;2099:36650;;;;;;2367:3:39;2099:36650:42;;;;;;;;;;20661:11;2099:36650;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21192:78;;;;;;;;;;2099:36650;21146:135;;;;;;;21192:78;;;;;;:::i;:::-;2099:36650;;21192:78;;;;2099:36650;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2099:36650:42;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;21192:78;2099:36650;;;20869:3;20910:12;;;;;;;;;;;;;:::i;:::-;2099:36650;;;;;:::i;:::-;1518:13:39;;1533:5;2099:36650:42;1533:5:39;;;;1767:8;;;1754:30;6125:13;6178:12;2099:36650:42;;;;;;;;;;;382:13:39;2099:36650:42;2384:3:39;6164:35;;6209:141;2099:36650:42;;;;;;;;382:13:39;6216:16;2234:42:42;382:13:39;;2099:36650:42;2234:42;2099:36650;;6216:16:39;;:::i;:::-;2099:36650:42;;6216:24:39;;;6256:3;;;:::i;:::-;6308:10;2099:36650:42;;;;;;;;6303:16:39;2384:3;6303:16;;;:::i;:::-;2099:36650:42;382:13:39;2099:36650:42;6297:30:39;2099:36650:42;6337:1:39;2099:36650:42;;;6337:1:39;2099:36650:42;;;;;;;6337:1:39;2099:36650:42;;;6281:58:39;6209:141;;;2099:36650:42;-1:-1:-1;;;2099:36650:42;;;;;;;;6216:24:39;6359:3;6216:24;;;;;;;;;;;;;;;;6359:3;:::i;:::-;2099:36650:42;;;;;;;;1814:2:39;1802:14;;382:13;;1879:17;;;;:::i;:::-;1900:8;;2099:36650:42;1879:36:39;1875:128;;2045:8;;2032:30;6125:13;2384:3;6178:12;;;;:::i;:::-;2099:36650:42;382:13:39;2099:36650:42;6164:35:39;6209:141;;382:13;;6216:16;2234:42:42;382:13:39;;2099:36650:42;6221:10:39;2099:36650:42;2234:42;2099:36650;;6221:10:39;;:::i;6216:16::-;2099:36650:42;;6216:24:39;;;6256:3;2384;6303:16;6256:3;;;;6308:10;6256:3;;:::i;:::-;6308:10;;;:::i;6303:16::-;2099:36650:42;382:13:39;2099:36650:42;6297:30:39;6337:1;2099:36650:42;;;;;6337:1:39;2099:36650:42;;;;;;;;6281:58:39;6209:141;;;2099:36650:42;-1:-1:-1;;;;2099:36650:42;;;;;;;;6216:24:39;2088:16;6216:24;;;;;;;;;;;;2115:8;6216:24;;;;;6359:3;6387:10;6216:24;6359:3;:::i;:::-;6387:10;;:::i;:::-;6372:26;;2088:8;:16;:::i;:::-;2099:36650:42;382:13:39;2099:36650:42;2115:8:39;;:::i;:::-;-1:-1:-1;;;;;;2099:36650:42;;;;;;2384:3:39;2099:36650:42;6337:1:39;2099:36650:42;1025:5:40;20661:11:42;2099:36650;;;;;;;;;;;;2366:42:39;;;21558:123:42;;2372:2;21694:28;;21690:124;;2099:36650;;3553:37:39;2099:36650:42;20661:11;2099:36650;;;3553:37:39;:::i;:::-;2099:36650:42;;;;20661:11;2099:36650;;;;;;;;21903:20;;;;:::i;:::-;2099:36650;;;;;;;;;;38366:21;;;;;;;;:::i;:::-;35266:19;;35350:13;;35345:129;35365:5;;;;;;2099:36650;;;;;;;;;;;;;;;;;;;;;;;21980:9;2099:36650;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2099:36650:42;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;35345:129;2099:36650;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22023:15;2099:36650;;;;;;;;;;;22023:15;2099:36650;;;;;;;;;;;;;;;;;;22076:16;2099:36650;;22076:36;2099:36650;;;;;;22076:36;:::i;:::-;2099:36650;;20951:14;;;;:::i;:::-;20937:28;;;;:::i;:::-;2099:36650;;;20999:12;;;;;:::i;:::-;2099:36650;:::i;:::-;20979:32;;;;:::i;:::-;;;;;;:::i;:::-;;2099:36650;20841:13;;2099:36650;;;;;;;;;-1:-1:-1;2099:36650:42;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2099:36650:42;;;;;-1:-1:-1;2099:36650:42;;;;;;;;;;;;;;;;-1:-1:-1;;2099:36650:42;;;;;;;;;;;;;;;;;;;;;382:13:39;2099:36650:42;;;;22023:15;2099:36650;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20661:11;2099:36650;;;;-1:-1:-1;2099:36650:42;;;;;20661:11;2099:36650;;;;:::i;:::-;;;;;;;-1:-1:-1;2099:36650:42;;;;35372:3;2099:36650;;;;;;;;35433:30;2099:36650;;35403:16;2099:36650;;;;35403:16;;:::i;:::-;2099:36650;;;;;;;;;;;;;;;;35433:30;;:::i;:::-;35372:3;2099:36650;35350:13;;;;;;;;;;2099:36650;-1:-1:-1;;;2099:36650:42;;;;;;;;21690:124;21745:58;2099:36650;;;21625:45;;;;21745:58;;2099:36650;21745:58;;2099:36650;;;;;;;;;;;;;;;;-1:-1:-1;;;2099:36650:42;;;;21745:58;21558:123;21625:45;2099:36650;;;21625:45;;;;;;2099:36650;21625:45;;2099:36650;;;;;;;;;;;-1:-1:-1;;;2099:36650:42;;;;21625:45;1875:128:39;2099:36650:42;;-1:-1:-1;;;1931:61:39;;2099:36650:42;;1931:61:39;;382:13;;;;;2099:36650:42;382:13:39;2099:36650:42;;;382:13:39;-1:-1:-1;;;382:13:39;;;;1931:61;;;382:13;2099:36650:42;;-1:-1:-1;;;382:13:39;;2099:36650:42;;382:13:39;;;;;;;2099:36650:42;382:13:39;2099:36650:42;;;382:13:39;-1:-1:-1;;;382:13:39;;;;;;;2099:36650:42;;;;-1:-1:-1;2099:36650:42;;;;;-1:-1:-1;2099:36650:42;1540:3:39;2234:42:42;2099:36650;;1563:11:39;:8;;;:11;:::i;:::-;2099:36650:42;;-1:-1:-1;;;1578:18:39;;2099:36650:42;382:13:39;-1:-1:-1;;;;;;2099:36650:42;1563:33:39;1559:101;;2099:36650:42;;1518:13:39;;1559:101;2099:36650:42;;-1:-1:-1;;;1616:29:39;;2099:36650:42;;1616:29:39;;382:13;;;;;2099:36650:42;-1:-1:-1;;;2099:36650:42;;;382:13:39;1616:29;;;2099:36650:42;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;;;;;;;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2099:36650:42;;;;;;;;10742:48;10750:18;;;:::i;10742:48::-;2099:36650;;10807:15;2099:36650;;;2234:42;2099:36650;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;2099:36650:42;;;;;;;;11040:18;11032:48;11040:18;;;:::i;11032:48::-;2099:36650;;;11098:15;2099:36650;;;;;;;;;;;11122:30;2099:36650;;;;;;;;;-1:-1:-1;;;;;2099:36650:42;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2099:36650:42;;;;;;;;;10268:48;10276:18;;;:::i;10268:48::-;2099:36650;;10333:11;2099:36650;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;2830:66;2099:36650;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2099:36650:42;;;;;;;;;;;;;;;;:::i;:::-;11814:18;11806:48;11814:18;;;:::i;11806:48::-;2099:36650;;11871:15;2099:36650;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22454:39;22446:72;2580:4;22454:39;;;;;;22446:72;:::i;:::-;22528:48;22536:18;;;:::i;22528:48::-;2099:36650;;;;22594:15;2099:36650;;;;;;-1:-1:-1;;;;;2099:36650:42;22620:10;22594:36;2099:36650;;;;;22740:17;2099:36650;;2428:4;22722:49;2099:36650;;;;22722:49;;:::i;:::-;:74;2099:36650;;;22911:19;;;;;;-1:-1:-1;2099:36650:42;;;;23140:15;2099:36650;;;;;;-1:-1:-1;;;;;2099:36650:42;;;23172:132;;2099:36650;;;23172:132;23218:75;;;;;2099:36650;;-1:-1:-1;;;23218:75:42;;2099:36650;23218:75;;2099:36650;;;;;;;;;;;;;;;-1:-1:-1;;;;;2099:36650:42;;;;;;;;;;;;;;;;;22973:11;2099:36650;;;;;;;;;;;;;;-1:-1:-1;;2099:36650:42;;;;;;;;:::i;:::-;23218:75;;;;;;;;;;23172:132;;;;;2099:36650;;;23218:75;;;;2099:36650;23218:75;;:::i;:::-;2099:36650;23218:75;;;;2099:36650;;;;;;;;;;;;;22932:3;22959:11;;;;;:::i;:::-;2099:36650;;;;22973:11;2099:36650;;;;;;-1:-1:-1;2099:36650:42;;;;;;22740:17;2099:36650;;;;;23084:11;;;;;;:::i;:::-;2099:36650;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;22896:13;;2099:36650;;;;;;;;;;;;;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;;;;;;;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2099:36650:42;;;;;;-1:-1:-1;;;;;2099:36650:42;;;;;;;;;;;-1:-1:-1;;2099:36650:42;;;;;;11263:48;11271:18;;;:::i;11263:48::-;2099:36650;;11328:22;2099:36650;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2099:36650:42;;;;;2580:4;2099:36650;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2099:36650:42;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;2099:36650:42;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;2099:36650:42;;;;;;;;;;-1:-1:-1;;;;;2099:36650:42;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;2099:36650:42;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;2099:36650:42;;;;;;;;-1:-1:-1;;2099:36650:42;;;;:::o;:::-;;;-1:-1:-1;;2099:36650:42;;;;;;;;;;;-1:-1:-1;;;;;2099:36650:42;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2099:36650:42;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2099:36650:42;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2099:36650:42;;;;;;:::o;:::-;;;;;;-1:-1:-1;;2099:36650:42;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2099:36650:42;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;2099:36650:42;;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;2099:36650:42;;;;;;;:::o;:::-;-1:-1:-1;;;;;2099:36650:42;;;;;;-1:-1:-1;;2099:36650:42;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;2099:36650:42;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;2099:36650:42;;;;;;;;;;;-1:-1:-1;;;;;2099:36650:42;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;2099:36650:42;;;;:::o;:::-;;;;:::o;:::-;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;2099:36650:42;;-1:-1:-1;2099:36650:42;;;-1:-1:-1;2099:36650:42;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;2099:36650:42;;;;;;;;-1:-1:-1;;2099:36650:42;;;;:::o;9115:191::-;;9210:18;;;:::i;:::-;:50;;;;9115:191;9210:89;;;9203:96;;9115:191;:::o;9210:89::-;2099:36650;;;-1:-1:-1;2099:36650:42;9264:15;2099:36650;;;-1:-1:-1;2099:36650:42;;-1:-1:-1;2099:36650:42;;;;-1:-1:-1;2099:36650:42;;9264:35;;9115:191;:::o;9210:50::-;2099:36650;;;-1:-1:-1;2099:36650:42;9242:11;2099:36650;;;-1:-1:-1;2099:36650:42;;9232:28;;9210:50;;;2099:36650;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;11433:198;2099:36650;;;;;;:::i;:::-;;11534:48;11542:18;;;:::i;11534:48::-;-1:-1:-1;2099:36650:42;11599:9;2099:36650;;;-1:-1:-1;2099:36650:42;;-1:-1:-1;2099:36650:42;;;;-1:-1:-1;2099:36650:42;;;;;;;:::i;:::-;;;;;-1:-1:-1;2099:36650:42;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;11433:198;:::o;2099:36650::-;;;-1:-1:-1;2099:36650:42;;;;;-1:-1:-1;2099:36650:42;;-1:-1:-1;2099:36650:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2234:42;2099:36650;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2099:36650:42;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;2099:36650:42;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;2099:36650:42;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;2099:36650:42;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;-1:-1:-1;2099:36650:42;;-1:-1:-1;2099:36650:42;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;;2099:36650:42;;;;;;;:::o;13795:2299::-;;2099:36650;14019:48;14027:18;;;:::i;14019:48::-;14085:9;;2099:36650;;;;;14215:11;2099:36650;;;;;;14321:21;;;;:::i;:::-;14384:20;;;;:::i;:::-;14446;;;;:::i;:::-;14477:23;2099:36650;14510:23;2099:36650;14549:13;2099:36650;14564:14;;;;;;14544:665;15284:16;;;;;;;15280:808;15284:16;;;-1:-1:-1;;;;;;2099:36650:42;;;;;;;:::i;:::-;;;;-1:-1:-1;;2099:36650:42;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;15346:69;;;2099:36650;15346:69;:::o;2099:36650::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;15280:808;15436:19;;;;;;;;15432:656;15436:19;;;15548:27;;;:::i;:::-;15600:26;;;;:::i;:::-;15651;;;;:::i;:::-;15697:13;2099:36650;15712:15;;;;;;15432:656;;;;;13795:2299::o;15729:3::-;15764:13;;2099:36650;15764:13;;;:::i;:::-;;15752:25;;;;:::i;:::-;;;;;;:::i;:::-;;15809:15;;;;:::i;:::-;2099:36650;15795:29;;;;:::i;:::-;2099:36650;15856:15;;;;:::i;:::-;2099:36650;15842:29;;;;:::i;:::-;2099:36650;;15697:13;;15432:656;15984:19;;;15432:656;13795:2299::o;14580:3::-;2099:36650;;;14603:15;2099:36650;;;;;;;;;;;;;;14599:600;;14580:3;2099:36650;;14549:13;;14599:600;14656:21;;;;;;:44;;;14599:600;14652:502;;;2099:36650;;;14750:9;2099:36650;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;14724:45;;;;:::i;:::-;;;;;;:::i;:::-;;14791:29;;;;;:::i;:::-;2099:36650;;;;14603:15;2099:36650;;;;;;;;;;;;;;;;14215:11;2099:36650;;;;;;;;;;;;;14922:13;14842:58;2099:36650;14842:58;;;;15171:13;14842:58;;:::i;:::-;2099:36650;14922:13;:::i;:::-;14652:502;15171:13;:::i;:::-;14599:600;;;;;2099:36650;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2234:42;2099:36650;;;;;;;;14215:11;2099:36650;;;;;;;14652:502;14979:14;;;;;:::i;:::-;14964:29;;;14960:194;;15171:13;2099:36650;14652:502;15171:13;:::i;14960:194::-;15094:14;;;;;;;2099:36650;15130:5;;;;;;;;14656:44;14681:19;;;;14656:44;;2099:36650;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;2099:36650:42;;;;:::o;:::-;;;:::o;29110:406::-;-1:-1:-1;29110:406:42;;2099:36650;;29290:23;;;2099:36650;;;29290:23;;;;2099:36650;29290:23;;:::i;:::-;29257:57;;-1:-1:-1;;;;;29257:57:42;;;;:::i;:::-;2099:36650;;;;29290:23;2099:36650;;;29480:29;;2099:36650;;;;29290:23;29480:29;2099:36650;29110:406;:::o;2099:36650::-;;;-1:-1:-1;;;2099:36650:42;;29290:23;2099:36650;;;;;;;;;;;;;;-1:-1:-1;;;2099:36650:42;;;;;;;38441:306;2099:36650;;-1:-1:-1;;;38550:42:42;;2830:66;38550:42;;;2099:36650;;38550:42;2099:36650;38550:42;2099:36650;2677:42;38550;;;;;;;-1:-1:-1;38550:42:42;;;38441:306;2099:36650;-1:-1:-1;2099:36650:42;;;;38610:19;2099:36650;;;;;;-1:-1:-1;;;;;2099:36650:42;38725:14;;2099:36650;;;38441:306;:::o;2099:36650::-;;;-1:-1:-1;;;2099:36650:42;;;38550:42;2099:36650;;;;38550:42;2099:36650;;;;;;;;-1:-1:-1;;;2099:36650:42;;;;;;;38550:42;;;;;;;;;;;;;;;;;;:::i;:::-;;;2099:36650;;;;;;;38550:42;2099:36650;;;;;-1:-1:-1;;;;;2099:36650:42;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2099:36650:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38550:42;;;;;;;-1:-1:-1;38550:42:42;;2099:36650;-1:-1:-1;;;;;2099:36650:42;-1:-1:-1;;;;;2099:36650:42;;;;;;;:::o;:::-;;;;:::o;:::-;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;;;;-1:-1:-1;;;2099:36650:42;;;;;;;8860:148;-1:-1:-1;;;;;8948:13:42;2099:36650;;8940:21;;:61;;;;8933:68;8860:148;:::o;8940:61::-;-1:-1:-1;2099:36650:42;;;8965:15;2099:36650;;;;;;-1:-1:-1;;;;;2099:36650:42;8965:36;;;8860:148;-1:-1:-1;8860:148:42:o;3405:215:31:-;-1:-1:-1;;;;;2099:36650:42;3489:22:31;;3485:91;;-1:-1:-1;;;;;;;;;;;2099:36650:42;;-1:-1:-1;;;;;;2099:36650:42;;;;;;;-1:-1:-1;;;;;2099:36650:42;3975:40:31;-1:-1:-1;;3975:40:31;3405:215::o;3485:91::-;3534:31;;;3509:1;3534:31;3509:1;3534:31;2099:36650:42;;3509:1:31;3534:31;2099:36650:42;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2099:36650:42;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;196:831:38;274:3;2099:36650:42;;316:3:38;2099:36650:42;333:6:38;329:64;;196:831;2099:36650:42;;411:2:38;2099:36650:42;427:6:38;423:63;;196:831;2099:36650:42;;504:2:38;2099:36650:42;520:6:38;516:63;;196:831;2099:36650:42;;597:2:38;2099:36650:42;613:6:38;609:63;;196:831;2099:36650:42;;690:1:38;2099:36650:42;705:6:38;701:62;;196:831;2099:36650:42;;781:1:38;2099:36650:42;796:6:38;792:62;;196:831;2099:36650:42;;872:1:38;2099:36650:42;887:6:38;883:62;;196:831;2099:36650:42;;963:1:38;2099:36650:42;974:24:38;;1015:5;;;:::i;:::-;196:831;:::o;974:24::-;-1:-1:-1;;;2099:36650:42;;;;;;;986:12:38;:::o;883:62::-;2099:36650:42;-1:-1:-1;;2099:36650:42;;;-1:-1:-1;2099:36650:42;;;;929:5:38;883:62;;;792;2099:36650:42;-1:-1:-1;;2099:36650:42;;;-1:-1:-1;2099:36650:42;;;;838:5:38;792:62;;;701;2099:36650:42;-1:-1:-1;;2099:36650:42;;;-1:-1:-1;2099:36650:42;;;;747:5:38;701:62;;;609:63;2099:36650:42;-1:-1:-1;;2099:36650:42;;;-1:-1:-1;2099:36650:42;;;;656:5:38;609:63;;;516;2099:36650:42;-1:-1:-1;;2099:36650:42;;;-1:-1:-1;2099:36650:42;;;;563:5:38;516:63;;;423;2099:36650:42;-1:-1:-1;;2099:36650:42;;;-1:-1:-1;2099:36650:42;;;;470:5:38;423:63;;;329:64;355:8;;;316:3;377:5;329:64;;;36142:1369:42;;2099:36650;;;;;:::i;:::-;-1:-1:-1;2099:36650:42;;-1:-1:-1;2099:36650:42;;;;;;-1:-1:-1;2099:36650:42;36329:16;2099:36650;;;-1:-1:-1;2099:36650:42;;36317:35;;2099:36650;;;36412:1;2099:36650;;;;;;;;;;;36435:15;-1:-1:-1;36587:15:42;36582:617;36604:5;;;2099:36650;-1:-1:-1;2099:36650:42;36887:13;2099:36650;;;-1:-1:-1;2099:36650:42;;-1:-1:-1;2099:36650:42;;;37220:37;2099:36650;-1:-1:-1;2099:36650:42;;37220:37;;:::i;:::-;37271:22;;;;37267:152;;37488:15;;;;:::i;:::-;2099:36650;;;;;;:::i;:::-;;;;37450:54;;2099:36650;36142:1369;:::o;37267:152::-;2099:36650;;36412:1;2099:36650;;;;;;;37386:21;;;:::i;36611:3::-;2099:36650;;;-1:-1:-1;2099:36650:42;36751:11;2099:36650;;;-1:-1:-1;2099:36650:42;;36738:31;;;36734:121;;2099:36650;-1:-1:-1;2099:36650:42;36887:13;2099:36650;;;-1:-1:-1;2099:36650:42;;-1:-1:-1;2099:36650:42;;;;36881:37;2099:36650;-1:-1:-1;2099:36650:42;;36881:37;;:::i;:::-;36960:22;;;37002:38;2099:36650;;-1:-1:-1;2099:36650:42;36887:13;2099:36650;;;-1:-1:-1;2099:36650:42;;-1:-1:-1;2099:36650:42;;;;-1:-1:-1;2099:36650:42;;37002:38;;:::i;:::-;2099:36650;-1:-1:-1;;2099:36650:42;;;;;;;;36412:1;37058:25;2099:36650;;37058:25;;:::i;:::-;36956:233;;2099:36650;;;;-1:-1:-1;;2099:36650:42;;36587:15;;36956:233;2099:36650;-1:-1:-1;;2099:36650:42;;;;;;;;36412:1;37149:25;2099:36650;;37149:25;;:::i;:::-;36956:233;;;2099:36650;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;;;;;;;;;;;;277:15:40;;;;;;;;;;;:::o;1025:5::-;;;;;;;:::o;:::-;2099:36650:42;;;;;;;;;;;1669:1861:40;;;;;1950:1;1932:19;;;;;:41;;;1669:1861;2099:36650:42;;;-1:-1:-1;;;;;2099:36650:42;2065:15:40;;2099:36650:42;;2159:11:40;;2099:36650:42;;;;;;1950:1:40;2340:20;;1950:1;;2444:15;277;2099:36650:42;;2480:45:40;2529:29;2480:45;:79;:45;;:::i;:::-;277:15;;;2529:29;:::i;:::-;2480:79;;:::i;:::-;1025:5;;;;2901:46;1025:5;2901:36;1025:5;2099:36650:42;1025:5:40;2901:36;:::i;:::-;:46;:::i;:::-;2099:36650:42;799:1:40;2099:36650:42;;;;;;;;799:1:40;2099:36650:42;;;;;;3070:3:40;1025:5;;2099:36650:42;;;;;;;689:1:40;2099:36650:42;;;;;;3179:32:40;;;;;3227:8;;;;;;:::o;3175:349::-;1025:5;;;;;;;3070:3;1025:5;;3304:31;;3070:3;;3358:31;;;;;;:::i;3300:224::-;2099:36650:42;;;;;;;235:1:40;2099:36650:42;;;;;1025:5:40;3070:3;1025:5;;3453:60;:::o;2336:465::-;1950:1;;-1:-1:-1;2676:15:40;;;-1:-1:-1;;;277:15:40;;;;2695:30;277:15;-1:-1:-1;277:15:40;;;2695:30;:::i;:::-;2099:36650:42;;;;;2633:93:40;2099:36650:42;;;;;;2615:175:40;2901:36;2744:45;;2901:46;2744:45;;:::i;:::-;2615:175;;:::i;2099:36650:42:-;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;;;;;;;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;;;;;;;;;;;;;;;;;1932:41:40;1955:13;;:18;1932:41;;2658:162:31;-1:-1:-1;;;;;;;;;;;2099:36650:42;-1:-1:-1;;;;;2099:36650:42;966:10:34;2717:23:31;2713:101;;2658:162::o;2713:101::-;2763:40;;;-1:-1:-1;2763:40:31;966:10:34;2763:40:31;2099:36650:42;;-1:-1:-1;2763:40:31;8273:214:42;8333:9;;:19;2099:36650;;8405:34;;;;;;;;-1:-1:-1;;;;;8405:34:42;;;;:::i;:::-;;2099:36650;;;8273:214::o;2099:36650::-;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;;;;;;;;;;;;:::o;7084:141:32:-;2099:36650:42;-1:-1:-1;;;;;;;;;;;2099:36650:42;;;;7150:18:32;7146:73;;7084:141::o;7146:73::-;7191:17;;;-1:-1:-1;7191:17:32;;-1:-1:-1;7191:17:32;1880:792:38;-1:-1:-1;;;;;1954:30:38;;2099:36650:42;;2045:3:38;;-1:-1:-1;;;2099:36650:42;;;;;-1:-1:-1;2099:36650:42;2094:13:38;2121:6;2117:40;;1880:792;1059:66;2170:11;;2166:55;;1880:792;1156:66;2234:10;;2230:53;;1880:792;1253:66;2296:10;;2292:53;;1880:792;1350:66;2358:10;;2354:53;;1880:792;1446:66;2420:9;;2416:51;;1880:792;1542:66;2480:9;;2476:51;;1880:792;1638:66;2540:9;;2536:51;;1880:792;1734:66;2600:9;2596:51;;1880:792;:::o;2596:51::-;-1:-1:-1;;2099:36650:42;;;;;;;1880:792:38;:::o;2536:51::-;2099:36650:42;-1:-1:-1;;2099:36650:42;;;;;;;2570:6:38;2536:51;;2476;2099:36650:42;-1:-1:-1;;2099:36650:42;;;;;;;2476:51:38;;;2416;2099:36650:42;-1:-1:-1;;2099:36650:42;;;;;;;2416:51:38;;;2354:53;2099:36650:42;-1:-1:-1;;2099:36650:42;;;;;;;2354:53:38;;;2292;2099:36650:42;-1:-1:-1;;2099:36650:42;;;;;;;2292:53:38;;;2230;2099:36650:42;-1:-1:-1;;2099:36650:42;;;;;;;2230:53:38;;;2166:55;2099:36650:42;-1:-1:-1;;2099:36650:42;;;;;;;2166:55:38;;;2117:40;2099:36650:42;;-1:-1:-1;2117:40:38;;2099:36650:42;;;-1:-1:-1;;;2099:36650:42;;;;;;;;;;;;;;;;;-1:-1:-1;;;2099:36650:42;;;;;;;4437:582:21;;4609:8;;-1:-1:-1;2099:36650:42;;5690:21:21;:17;;5815:105;;;;;;5686:301;5957:19;;;5710:1;5957:19;;5710:1;5957:19;4605:408;2099:36650:42;;4857:22:21;:49;;;4605:408;4853:119;;4985:17;;:::o;4853:119::-;-1:-1:-1;;;4878:1:21;4933:24;;;-1:-1:-1;;;;;2099:36650:42;;;;4933:24:21;2099:36650:42;;;4933:24:21;4857:49;4883:18;;;:23;4857:49;;10590:480:43;10685:379;;;;;;;;;;;;;;;;-1:-1:-1;;10685:379:43;;10590:480::o","linkReferences":{},"immutableReferences":{"13413":[{"start":6025,"length":32},{"start":6223,"length":32}]}},"methodIdentifiers":{"BURN_ACTOR()":"0a6a63f1","EXTRA_DATA_MAX_SIZE()":"029b4646","FIL_USD_PRICE_FEED_ID()":"19c75950","LEAF_SIZE()":"c0e15949","MAX_ENQUEUED_REMOVALS()":"9f8cb3bd","MAX_PIECE_SIZE_LOG2()":"f8eb8276","NO_CHALLENGE_SCHEDULED()":"462dd449","NO_PROVEN_EPOCH()":"f178b1be","PYTH()":"67e406d5","RANDOMNESS_PRECOMPILE()":"15b17570","SECONDS_IN_DAY()":"61a52a36","UPGRADE_INTERFACE_VERSION()":"ad3cb1cc","VERSION()":"ffa1ad74","addPieces(uint256,(bytes)[],bytes)":"306fc8be","calculateProofFee(uint256,uint256)":"4903704a","claimDataSetStorageProvider(uint256,bytes)":"df0f3248","createDataSet(address,bytes)":"bbae41cb","dataSetLive(uint256)":"ca759f27","deleteDataSet(uint256,bytes)":"7a1e2990","findPieceIds(uint256,uint256[])":"349c9179","getActivePieceCount(uint256)":"5353bdfd","getActivePieces(uint256,uint256,uint256)":"39f51544","getChallengeFinality()":"f83758fe","getChallengeRange(uint256)":"89208ba9","getDataSetLastProvenEpoch(uint256)":"04595c1a","getDataSetLeafCount(uint256)":"a531998c","getDataSetListener(uint256)":"2b3129bb","getDataSetStorageProvider(uint256)":"21b7cd1c","getFILUSDPrice()":"4fa27920","getNextChallengeEpoch(uint256)":"6ba4608f","getNextDataSetId()":"442cded3","getNextPieceId(uint256)":"1c5ae80f","getPieceCid(uint256,uint256)":"25bbbedf","getPieceLeafCount(uint256,uint256)":"0cd7b880","getRandomness(uint256)":"453f4f62","getScheduledRemovals(uint256)":"6fa44692","initialize(uint256)":"fe4b84df","migrate()":"8fd3ab80","nextProvingPeriod(uint256,uint256,bytes)":"45c0b92d","owner()":"8da5cb5b","pieceChallengable(uint256,uint256)":"dc635266","pieceLive(uint256,uint256)":"1a271225","proposeDataSetStorageProvider(uint256,address)":"43186080","provePossession(uint256,(bytes32,bytes32[])[])":"f58f952b","proxiableUUID()":"52d1902d","renounceOwnership()":"715018a6","schedulePieceDeletions(uint256,uint256[],bytes)":"0c292024","transferOwnership(address)":"f2fde38b","upgradeToAndCall(address,bytes)":"4f1ef286"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.30+commit.73712a01\"},\"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\":[{\"internalType\":\"uint256\",\"name\":\"idx\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"msg\",\"type\":\"string\"}],\"name\":\"IndexedError\",\"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\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ContractUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"setId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"storageProvider\",\"type\":\"address\"}],\"name\":\"DataSetCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"setId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"deletedLeafCount\",\"type\":\"uint256\"}],\"name\":\"DataSetDeleted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"setId\",\"type\":\"uint256\"}],\"name\":\"DataSetEmpty\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"setId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"challengeEpoch\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"leafCount\",\"type\":\"uint256\"}],\"name\":\"NextProvingPeriod\",\"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\":\"uint256\",\"name\":\"setId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"pieceIds\",\"type\":\"uint256[]\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct Cids.Cid[]\",\"name\":\"pieceCids\",\"type\":\"tuple[]\"}],\"name\":\"PiecesAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"setId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"pieceIds\",\"type\":\"uint256[]\"}],\"name\":\"PiecesRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"setId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"pieceId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"offset\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct IPDPTypes.PieceIdAndOffset[]\",\"name\":\"challenges\",\"type\":\"tuple[]\"}],\"name\":\"PossessionProven\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"setId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"price\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"int32\",\"name\":\"expo\",\"type\":\"int32\"}],\"name\":\"ProofFeePaid\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"setId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldStorageProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newStorageProvider\",\"type\":\"address\"}],\"name\":\"StorageProviderChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BURN_ACTOR\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EXTRA_DATA_MAX_SIZE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FIL_USD_PRICE_FEED_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"LEAF_SIZE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_ENQUEUED_REMOVALS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_PIECE_SIZE_LOG2\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NO_CHALLENGE_SCHEDULED\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NO_PROVEN_EPOCH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PYTH\",\"outputs\":[{\"internalType\":\"contract IPyth\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RANDOMNESS_PRECOMPILE\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SECONDS_IN_DAY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"setId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Cids.Cid[]\",\"name\":\"pieceData\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"addPieces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"setId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"estimatedGasFee\",\"type\":\"uint256\"}],\"name\":\"calculateProofFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"setId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"claimDataSetStorageProvider\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"listenerAddr\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"createDataSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"setId\",\"type\":\"uint256\"}],\"name\":\"dataSetLive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"setId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"deleteDataSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"setId\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"leafIndexs\",\"type\":\"uint256[]\"}],\"name\":\"findPieceIds\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"pieceId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"offset\",\"type\":\"uint256\"}],\"internalType\":\"struct IPDPTypes.PieceIdAndOffset[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"setId\",\"type\":\"uint256\"}],\"name\":\"getActivePieceCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"activeCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"setId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"offset\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"getActivePieces\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Cids.Cid[]\",\"name\":\"pieces\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"pieceIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"rawSizes\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"hasMore\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getChallengeFinality\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"setId\",\"type\":\"uint256\"}],\"name\":\"getChallengeRange\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"setId\",\"type\":\"uint256\"}],\"name\":\"getDataSetLastProvenEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"setId\",\"type\":\"uint256\"}],\"name\":\"getDataSetLeafCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"setId\",\"type\":\"uint256\"}],\"name\":\"getDataSetListener\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"setId\",\"type\":\"uint256\"}],\"name\":\"getDataSetStorageProvider\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFILUSDPrice\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"int32\",\"name\":\"\",\"type\":\"int32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"setId\",\"type\":\"uint256\"}],\"name\":\"getNextChallengeEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNextDataSetId\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"setId\",\"type\":\"uint256\"}],\"name\":\"getNextPieceId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"setId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pieceId\",\"type\":\"uint256\"}],\"name\":\"getPieceCid\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Cids.Cid\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"setId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pieceId\",\"type\":\"uint256\"}],\"name\":\"getPieceLeafCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"name\":\"getRandomness\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"setId\",\"type\":\"uint256\"}],\"name\":\"getScheduledRemovals\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_challengeFinality\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"migrate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"setId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"challengeEpoch\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"nextProvingPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"setId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pieceId\",\"type\":\"uint256\"}],\"name\":\"pieceChallengable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"setId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pieceId\",\"type\":\"uint256\"}],\"name\":\"pieceLive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"setId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"newStorageProvider\",\"type\":\"address\"}],\"name\":\"proposeDataSetStorageProvider\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"setId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"leaf\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"}],\"internalType\":\"struct IPDPTypes.Proof[]\",\"name\":\"proofs\",\"type\":\"tuple[]\"}],\"name\":\"provePossession\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"setId\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"pieceIds\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"schedulePieceDeletions\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"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\"}],\"devdoc\":{\"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.\"}],\"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\":{\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"getActivePieceCount(uint256)\":{\"params\":{\"setId\":\"The data set ID\"},\"returns\":{\"activeCount\":\"The number of active pieces in the data set\"}},\"getActivePieces(uint256,uint256,uint256)\":{\"params\":{\"limit\":\"Maximum number of pieces to return\",\"offset\":\"Starting index for pagination (0-based)\",\"setId\":\"The data set ID\"},\"returns\":{\"hasMore\":\"True if there are more pieces beyond this page\",\"pieceIds\":\"Array of corresponding piece IDs\",\"pieces\":\"Array of active piece CIDs\",\"rawSizes\":\"Array of raw sizes for each piece (in bytes)\"}},\"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.\"},\"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.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"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\":{\"getActivePieceCount(uint256)\":{\"notice\":\"Returns the count of active pieces (non-zero leaf count) for a data set\"},\"getActivePieces(uint256,uint256,uint256)\":{\"notice\":\"Returns active pieces (non-zero leaf count) for a data set with pagination\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/pdp/src/PDPVerifier.sol\":\"PDPVerifier\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@fws-payments/=lib/fws-payments/src/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@pdp/=lib/pdp/src/\",\":@pythnetwork/pyth-sdk-solidity/=lib/pdp/lib/pyth-sdk-solidity/\",\":@session-key-registry/=lib/session-key-registry/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":fws-payments/=lib/fws-payments/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":pdp/=lib/pdp/src/\",\":pyth-sdk-solidity/=lib/pdp/lib/pyth-sdk-solidity/\",\":session-key-registry/=lib/session-key-registry/src/\"],\"viaIR\":true},\"sources\":{\"lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol\":{\"keccak256\":\"0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d\",\"dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0xc42facb5094f2f35f066a7155bda23545e39a3156faef3ddc00185544443ba7d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d3b36282ab029b46bd082619a308a2ea11c309967b9425b7b7a6eb0b0c1c3196\",\"dweb:/ipfs/QmP2YVfDB2FoREax3vJu7QhDnyYRMw52WPrCD4vdT2kuDA\"]},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x8decfa54cec979c824b044b8128cd91d713f72c71fd7dfa54974624d8c949898\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://271f914261a19d87117a777e0924ada545c16191ef9b00cc40b0134fc14ebc70\",\"dweb:/ipfs/QmdvVNWHGHQrGGPonZJs5NuzTevTjZRM2zayKrDJf7WBA2\"]},\"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0x06871a0948d0fed9316ae59ee4368527e144911f5e284755312b5bfcde8b27ea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3c30e46d061d8a450c561935a1236b1885aa76ffab93a19b26dcb8868c839843\",\"dweb:/ipfs/QmZbWbeDyixTyYkVtJvuiQYfkQz12pS7zxWZF3Ju9PYwGH\"]},\"lib/openzeppelin-contracts/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"lib/openzeppelin-contracts/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0x104c579d98591d36dfe190bdad391c79c358d399ee18d76e877c30b94d3c07a0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://332ab9adbc9a985195d56832159d09417ed5674adbbd6189db74586110aabc59\",\"dweb:/ipfs/QmZNVeVa4b7iKyFbHjvKir45RGBM93T7Yjgg9ye6Hu2umd\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]},\"lib/pdp/lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"lib/pdp/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"lib/pdp/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x8816653b632f8f634b78885c35112232b44acbf6033ec9e5065d2dd94946b15a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c16be456b19a1dbaaff7e89b9f6f5c92a02544d5d5f89222a9f57b5a8cfc2f0\",\"dweb:/ipfs/QmS4aeG6paPRwAM1puekhkyGR4mHuMUzFz3riVDv7fbvvB\"]},\"lib/pdp/lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"lib/pdp/lib/pyth-sdk-solidity/IPyth.sol\":{\"keccak256\":\"0x949c65c65fea0578c09a6fc068e09ed1165adede2c835984cefcb25d76de1de2\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4d7cb071e08e81bb8b113a928f4c2d2b3cdf950ad64c6c7003ea3d874163ca77\",\"dweb:/ipfs/QmRbQchPxRTBMHi7WzLb8XnMGzPDQcWhu7i2u5naUsCRoZ\"]},\"lib/pdp/lib/pyth-sdk-solidity/IPythEvents.sol\":{\"keccak256\":\"0x048a35526c2e77d107d43ba336f1dcf31f64cef25ba429ae1f7a0fbc11c23320\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://b75be4c3643b22305995aba71fc92146dbf51fa82d2f9728c515d7749b32dca3\",\"dweb:/ipfs/QmRby4XA9jJQGhxoJ16BTUDuU7BzLFfadbfTgBiQsDgNyZ\"]},\"lib/pdp/lib/pyth-sdk-solidity/PythStructs.sol\":{\"keccak256\":\"0x95ff0a6d64517348ef604b8bcf246b561a9445d7e607b8f48491c617cfda9b65\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://fb7f4ffe03be7379d3833c5946e38153de26aef4a4da0323a1ec603787de9eb7\",\"dweb:/ipfs/QmW4WkkLPGjDJrLrW4mYfxtFh8e9KAcPhrnNdxPQsfkS6t\"]},\"lib/pdp/src/BitOps.sol\":{\"keccak256\":\"0xe6447477342b60f948cb1785c7a723af7da96360887be0e23525604f960f69dc\",\"license\":\"Apache-2.0 OR MIT\",\"urls\":[\"bzz-raw://fe79487c0972995f4cf66c3c0c772777270ffd2faf3fdfcc2e5a974f953f6b04\",\"dweb:/ipfs/QmPNrVcbPYr7kLQjczra7CicTvHijPjrvYBFCBEucKYppM\"]},\"lib/pdp/src/Cids.sol\":{\"keccak256\":\"0x4a58ce512bbf6ba57a445b6887c8fb244ba1762d0ccc58e88eb25c13448074f9\",\"license\":\"Apache-2.0 OR MIT\",\"urls\":[\"bzz-raw://76a20f52425df5023d58eda12d8ddb7fc28839c75213e3275fb7eca4985bbd3d\",\"dweb:/ipfs/QmcY1hevEnzUAN4nbNM2t2j8Hv284Ue9bB6fjQjktE1y6j\"]},\"lib/pdp/src/Fees.sol\":{\"keccak256\":\"0xc4f1f340bb730d0d55c34d8602c99002a7ed9eea1967a7d5edaff993fed190f7\",\"license\":\"Apache-2.0 OR MIT\",\"urls\":[\"bzz-raw://5a9032f45b4feff1d0f2ba4d27b67021b279d570cdcd556ffa81a8786d045b52\",\"dweb:/ipfs/Qmdv1hRg4UUv2kErndyc4x8a8mKJb1Vs6pjB9mtasyNhTB\"]},\"lib/pdp/src/PDPVerifier.sol\":{\"keccak256\":\"0x9b90108b7afbc225d489212c6421e4fbb867261cc4db686cba5df97e12be6d64\",\"license\":\"Apache-2.0 OR MIT\",\"urls\":[\"bzz-raw://a5f5fab0f31273c397a66512fb09a0f85be6045d9e6392b4f129cbf1c95cc22c\",\"dweb:/ipfs/QmYKHbQPdpMCmwdGfD2RzYQpDHUMXXZ4DRAAuUreFEFbx5\"]},\"lib/pdp/src/Proofs.sol\":{\"keccak256\":\"0xfb86c652d74fc03898c4d18e862aa51480a2dd5b538148c8fb568c6b8733d0f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://120ad6070a5c2bff6cadc74816bdd6ba912f9baf4d1665af64893fe7acd469b5\",\"dweb:/ipfs/QmV8zqWEg1YhQRCeiQstZNSQufvMd11aaveZJJeYF1F5ZY\"]},\"lib/pdp/src/interfaces/IPDPEvents.sol\":{\"keccak256\":\"0xbf68ec912762eea46e7121f579e1b9c8c04f2769a8535c012764db823450d356\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://02523a2fee16374e5c180e309cb91229cb822c8ac0beeeaae9501803d80e361a\",\"dweb:/ipfs/QmVgdVzjHJr77T7hRTqDcASpRHbfzH188743zNZmRSM5aQ\"]},\"lib/pdp/src/interfaces/IPDPTypes.sol\":{\"keccak256\":\"0x1c5c9eb660a639c30b8b3cc09cc4d4c646935467440281b8c668365e237b6846\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://91c470447e2922976856129e75670c9a4c64dd34c62442fa85a99a67a2add77f\",\"dweb:/ipfs/QmNUXEUnhRRkfKzENo5dR1a1YWsytL7jMkGvxd913mat8t\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.30+commit.73712a01"},"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":[{"internalType":"uint256","name":"idx","type":"uint256"},{"internalType":"string","name":"msg","type":"string"}],"type":"error","name":"IndexedError"},{"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":"UUPSUnauthorizedCallContext"},{"inputs":[{"internalType":"bytes32","name":"slot","type":"bytes32"}],"type":"error","name":"UUPSUnsupportedProxiableUUID"},{"inputs":[{"internalType":"string","name":"version","type":"string","indexed":false},{"internalType":"address","name":"implementation","type":"address","indexed":false}],"type":"event","name":"ContractUpgraded","anonymous":false},{"inputs":[{"internalType":"uint256","name":"setId","type":"uint256","indexed":true},{"internalType":"address","name":"storageProvider","type":"address","indexed":true}],"type":"event","name":"DataSetCreated","anonymous":false},{"inputs":[{"internalType":"uint256","name":"setId","type":"uint256","indexed":true},{"internalType":"uint256","name":"deletedLeafCount","type":"uint256","indexed":false}],"type":"event","name":"DataSetDeleted","anonymous":false},{"inputs":[{"internalType":"uint256","name":"setId","type":"uint256","indexed":true}],"type":"event","name":"DataSetEmpty","anonymous":false},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"uint256","name":"setId","type":"uint256","indexed":true},{"internalType":"uint256","name":"challengeEpoch","type":"uint256","indexed":false},{"internalType":"uint256","name":"leafCount","type":"uint256","indexed":false}],"type":"event","name":"NextProvingPeriod","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":"uint256","name":"setId","type":"uint256","indexed":true},{"internalType":"uint256[]","name":"pieceIds","type":"uint256[]","indexed":false},{"internalType":"struct Cids.Cid[]","name":"pieceCids","type":"tuple[]","components":[{"internalType":"bytes","name":"data","type":"bytes"}],"indexed":false}],"type":"event","name":"PiecesAdded","anonymous":false},{"inputs":[{"internalType":"uint256","name":"setId","type":"uint256","indexed":true},{"internalType":"uint256[]","name":"pieceIds","type":"uint256[]","indexed":false}],"type":"event","name":"PiecesRemoved","anonymous":false},{"inputs":[{"internalType":"uint256","name":"setId","type":"uint256","indexed":true},{"internalType":"struct IPDPTypes.PieceIdAndOffset[]","name":"challenges","type":"tuple[]","components":[{"internalType":"uint256","name":"pieceId","type":"uint256"},{"internalType":"uint256","name":"offset","type":"uint256"}],"indexed":false}],"type":"event","name":"PossessionProven","anonymous":false},{"inputs":[{"internalType":"uint256","name":"setId","type":"uint256","indexed":true},{"internalType":"uint256","name":"fee","type":"uint256","indexed":false},{"internalType":"uint64","name":"price","type":"uint64","indexed":false},{"internalType":"int32","name":"expo","type":"int32","indexed":false}],"type":"event","name":"ProofFeePaid","anonymous":false},{"inputs":[{"internalType":"uint256","name":"setId","type":"uint256","indexed":true},{"internalType":"address","name":"oldStorageProvider","type":"address","indexed":true},{"internalType":"address","name":"newStorageProvider","type":"address","indexed":true}],"type":"event","name":"StorageProviderChanged","anonymous":false},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true}],"type":"event","name":"Upgraded","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"BURN_ACTOR","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"EXTRA_DATA_MAX_SIZE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"FIL_USD_PRICE_FEED_ID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"LEAF_SIZE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"MAX_ENQUEUED_REMOVALS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"MAX_PIECE_SIZE_LOG2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"NO_CHALLENGE_SCHEDULED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"NO_PROVEN_EPOCH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"PYTH","outputs":[{"internalType":"contract IPyth","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"RANDOMNESS_PRECOMPILE","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"SECONDS_IN_DAY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"UPGRADE_INTERFACE_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"VERSION","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"uint256","name":"setId","type":"uint256"},{"internalType":"struct Cids.Cid[]","name":"pieceData","type":"tuple[]","components":[{"internalType":"bytes","name":"data","type":"bytes"}]},{"internalType":"bytes","name":"extraData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"addPieces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"setId","type":"uint256"},{"internalType":"uint256","name":"estimatedGasFee","type":"uint256"}],"stateMutability":"view","type":"function","name":"calculateProofFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"setId","type":"uint256"},{"internalType":"bytes","name":"extraData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"claimDataSetStorageProvider"},{"inputs":[{"internalType":"address","name":"listenerAddr","type":"address"},{"internalType":"bytes","name":"extraData","type":"bytes"}],"stateMutability":"payable","type":"function","name":"createDataSet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"setId","type":"uint256"}],"stateMutability":"view","type":"function","name":"dataSetLive","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint256","name":"setId","type":"uint256"},{"internalType":"bytes","name":"extraData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"deleteDataSet"},{"inputs":[{"internalType":"uint256","name":"setId","type":"uint256"},{"internalType":"uint256[]","name":"leafIndexs","type":"uint256[]"}],"stateMutability":"view","type":"function","name":"findPieceIds","outputs":[{"internalType":"struct IPDPTypes.PieceIdAndOffset[]","name":"","type":"tuple[]","components":[{"internalType":"uint256","name":"pieceId","type":"uint256"},{"internalType":"uint256","name":"offset","type":"uint256"}]}]},{"inputs":[{"internalType":"uint256","name":"setId","type":"uint256"}],"stateMutability":"view","type":"function","name":"getActivePieceCount","outputs":[{"internalType":"uint256","name":"activeCount","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"setId","type":"uint256"},{"internalType":"uint256","name":"offset","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"stateMutability":"view","type":"function","name":"getActivePieces","outputs":[{"internalType":"struct Cids.Cid[]","name":"pieces","type":"tuple[]","components":[{"internalType":"bytes","name":"data","type":"bytes"}]},{"internalType":"uint256[]","name":"pieceIds","type":"uint256[]"},{"internalType":"uint256[]","name":"rawSizes","type":"uint256[]"},{"internalType":"bool","name":"hasMore","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getChallengeFinality","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"setId","type":"uint256"}],"stateMutability":"view","type":"function","name":"getChallengeRange","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"setId","type":"uint256"}],"stateMutability":"view","type":"function","name":"getDataSetLastProvenEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"setId","type":"uint256"}],"stateMutability":"view","type":"function","name":"getDataSetLeafCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"setId","type":"uint256"}],"stateMutability":"view","type":"function","name":"getDataSetListener","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"setId","type":"uint256"}],"stateMutability":"view","type":"function","name":"getDataSetStorageProvider","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getFILUSDPrice","outputs":[{"internalType":"uint64","name":"","type":"uint64"},{"internalType":"int32","name":"","type":"int32"}]},{"inputs":[{"internalType":"uint256","name":"setId","type":"uint256"}],"stateMutability":"view","type":"function","name":"getNextChallengeEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getNextDataSetId","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[{"internalType":"uint256","name":"setId","type":"uint256"}],"stateMutability":"view","type":"function","name":"getNextPieceId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"setId","type":"uint256"},{"internalType":"uint256","name":"pieceId","type":"uint256"}],"stateMutability":"view","type":"function","name":"getPieceCid","outputs":[{"internalType":"struct Cids.Cid","name":"","type":"tuple","components":[{"internalType":"bytes","name":"data","type":"bytes"}]}]},{"inputs":[{"internalType":"uint256","name":"setId","type":"uint256"},{"internalType":"uint256","name":"pieceId","type":"uint256"}],"stateMutability":"view","type":"function","name":"getPieceLeafCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"}],"stateMutability":"view","type":"function","name":"getRandomness","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"setId","type":"uint256"}],"stateMutability":"view","type":"function","name":"getScheduledRemovals","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}]},{"inputs":[{"internalType":"uint256","name":"_challengeFinality","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"migrate"},{"inputs":[{"internalType":"uint256","name":"setId","type":"uint256"},{"internalType":"uint256","name":"challengeEpoch","type":"uint256"},{"internalType":"bytes","name":"extraData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"nextProvingPeriod"},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"setId","type":"uint256"},{"internalType":"uint256","name":"pieceId","type":"uint256"}],"stateMutability":"view","type":"function","name":"pieceChallengable","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint256","name":"setId","type":"uint256"},{"internalType":"uint256","name":"pieceId","type":"uint256"}],"stateMutability":"view","type":"function","name":"pieceLive","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint256","name":"setId","type":"uint256"},{"internalType":"address","name":"newStorageProvider","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"proposeDataSetStorageProvider"},{"inputs":[{"internalType":"uint256","name":"setId","type":"uint256"},{"internalType":"struct IPDPTypes.Proof[]","name":"proofs","type":"tuple[]","components":[{"internalType":"bytes32","name":"leaf","type":"bytes32"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}]}],"stateMutability":"payable","type":"function","name":"provePossession"},{"inputs":[],"stateMutability":"view","type":"function","name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"uint256","name":"setId","type":"uint256"},{"internalType":"uint256[]","name":"pieceIds","type":"uint256[]"},{"internalType":"bytes","name":"extraData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"schedulePieceDeletions"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"payable","type":"function","name":"upgradeToAndCall"}],"devdoc":{"kind":"dev","methods":{"constructor":{"custom:oz-upgrades-unsafe-allow":"constructor"},"getActivePieceCount(uint256)":{"params":{"setId":"The data set ID"},"returns":{"activeCount":"The number of active pieces in the data set"}},"getActivePieces(uint256,uint256,uint256)":{"params":{"limit":"Maximum number of pieces to return","offset":"Starting index for pagination (0-based)","setId":"The data set ID"},"returns":{"hasMore":"True if there are more pieces beyond this page","pieceIds":"Array of corresponding piece IDs","pieces":"Array of active piece CIDs","rawSizes":"Array of raw sizes for each piece (in bytes)"}},"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."},"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."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"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":{"getActivePieceCount(uint256)":{"notice":"Returns the count of active pieces (non-zero leaf count) for a data set"},"getActivePieces(uint256,uint256,uint256)":{"notice":"Returns active pieces (non-zero leaf count) for a data set with pagination"}},"version":1}},"settings":{"remappings":["@fws-payments/=lib/fws-payments/src/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@pdp/=lib/pdp/src/","@pythnetwork/pyth-sdk-solidity/=lib/pdp/lib/pyth-sdk-solidity/","@session-key-registry/=lib/session-key-registry/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","fws-payments/=lib/fws-payments/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","pdp/=lib/pdp/src/","pyth-sdk-solidity/=lib/pdp/lib/pyth-sdk-solidity/","session-key-registry/=lib/session-key-registry/src/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"lib/pdp/src/PDPVerifier.sol":"PDPVerifier"},"evmVersion":"cancun","libraries":{},"viaIR":true},"sources":{"lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol":{"keccak256":"0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486","urls":["bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d","dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol":{"keccak256":"0xc42facb5094f2f35f066a7155bda23545e39a3156faef3ddc00185544443ba7d","urls":["bzz-raw://d3b36282ab029b46bd082619a308a2ea11c309967b9425b7b7a6eb0b0c1c3196","dweb:/ipfs/QmP2YVfDB2FoREax3vJu7QhDnyYRMw52WPrCD4vdT2kuDA"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol":{"keccak256":"0x8decfa54cec979c824b044b8128cd91d713f72c71fd7dfa54974624d8c949898","urls":["bzz-raw://271f914261a19d87117a777e0924ada545c16191ef9b00cc40b0134fc14ebc70","dweb:/ipfs/QmdvVNWHGHQrGGPonZJs5NuzTevTjZRM2zayKrDJf7WBA2"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol":{"keccak256":"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c","urls":["bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa","dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0x06871a0948d0fed9316ae59ee4368527e144911f5e284755312b5bfcde8b27ea","urls":["bzz-raw://3c30e46d061d8a450c561935a1236b1885aa76ffab93a19b26dcb8868c839843","dweb:/ipfs/QmZbWbeDyixTyYkVtJvuiQYfkQz12pS7zxWZF3Ju9PYwGH"],"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/Panic.sol":{"keccak256":"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a","urls":["bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a","dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG"],"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/Strings.sol":{"keccak256":"0x104c579d98591d36dfe190bdad391c79c358d399ee18d76e877c30b94d3c07a0","urls":["bzz-raw://332ab9adbc9a985195d56832159d09417ed5674adbbd6189db74586110aabc59","dweb:/ipfs/QmZNVeVa4b7iKyFbHjvKir45RGBM93T7Yjgg9ye6Hu2umd"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6","urls":["bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3","dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol":{"keccak256":"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54","urls":["bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8","dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"keccak256":"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3","urls":["bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03","dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ"],"license":"MIT"},"lib/pdp/lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a","urls":["bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6","dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2"],"license":"MIT"},"lib/pdp/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b","urls":["bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609","dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM"],"license":"MIT"},"lib/pdp/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol":{"keccak256":"0x8816653b632f8f634b78885c35112232b44acbf6033ec9e5065d2dd94946b15a","urls":["bzz-raw://6c16be456b19a1dbaaff7e89b9f6f5c92a02544d5d5f89222a9f57b5a8cfc2f0","dweb:/ipfs/QmS4aeG6paPRwAM1puekhkyGR4mHuMUzFz3riVDv7fbvvB"],"license":"MIT"},"lib/pdp/lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397","urls":["bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9","dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV"],"license":"MIT"},"lib/pdp/lib/pyth-sdk-solidity/IPyth.sol":{"keccak256":"0x949c65c65fea0578c09a6fc068e09ed1165adede2c835984cefcb25d76de1de2","urls":["bzz-raw://4d7cb071e08e81bb8b113a928f4c2d2b3cdf950ad64c6c7003ea3d874163ca77","dweb:/ipfs/QmRbQchPxRTBMHi7WzLb8XnMGzPDQcWhu7i2u5naUsCRoZ"],"license":"Apache-2.0"},"lib/pdp/lib/pyth-sdk-solidity/IPythEvents.sol":{"keccak256":"0x048a35526c2e77d107d43ba336f1dcf31f64cef25ba429ae1f7a0fbc11c23320","urls":["bzz-raw://b75be4c3643b22305995aba71fc92146dbf51fa82d2f9728c515d7749b32dca3","dweb:/ipfs/QmRby4XA9jJQGhxoJ16BTUDuU7BzLFfadbfTgBiQsDgNyZ"],"license":"Apache-2.0"},"lib/pdp/lib/pyth-sdk-solidity/PythStructs.sol":{"keccak256":"0x95ff0a6d64517348ef604b8bcf246b561a9445d7e607b8f48491c617cfda9b65","urls":["bzz-raw://fb7f4ffe03be7379d3833c5946e38153de26aef4a4da0323a1ec603787de9eb7","dweb:/ipfs/QmW4WkkLPGjDJrLrW4mYfxtFh8e9KAcPhrnNdxPQsfkS6t"],"license":"Apache-2.0"},"lib/pdp/src/BitOps.sol":{"keccak256":"0xe6447477342b60f948cb1785c7a723af7da96360887be0e23525604f960f69dc","urls":["bzz-raw://fe79487c0972995f4cf66c3c0c772777270ffd2faf3fdfcc2e5a974f953f6b04","dweb:/ipfs/QmPNrVcbPYr7kLQjczra7CicTvHijPjrvYBFCBEucKYppM"],"license":"Apache-2.0 OR MIT"},"lib/pdp/src/Cids.sol":{"keccak256":"0x4a58ce512bbf6ba57a445b6887c8fb244ba1762d0ccc58e88eb25c13448074f9","urls":["bzz-raw://76a20f52425df5023d58eda12d8ddb7fc28839c75213e3275fb7eca4985bbd3d","dweb:/ipfs/QmcY1hevEnzUAN4nbNM2t2j8Hv284Ue9bB6fjQjktE1y6j"],"license":"Apache-2.0 OR MIT"},"lib/pdp/src/Fees.sol":{"keccak256":"0xc4f1f340bb730d0d55c34d8602c99002a7ed9eea1967a7d5edaff993fed190f7","urls":["bzz-raw://5a9032f45b4feff1d0f2ba4d27b67021b279d570cdcd556ffa81a8786d045b52","dweb:/ipfs/Qmdv1hRg4UUv2kErndyc4x8a8mKJb1Vs6pjB9mtasyNhTB"],"license":"Apache-2.0 OR MIT"},"lib/pdp/src/PDPVerifier.sol":{"keccak256":"0x9b90108b7afbc225d489212c6421e4fbb867261cc4db686cba5df97e12be6d64","urls":["bzz-raw://a5f5fab0f31273c397a66512fb09a0f85be6045d9e6392b4f129cbf1c95cc22c","dweb:/ipfs/QmYKHbQPdpMCmwdGfD2RzYQpDHUMXXZ4DRAAuUreFEFbx5"],"license":"Apache-2.0 OR MIT"},"lib/pdp/src/Proofs.sol":{"keccak256":"0xfb86c652d74fc03898c4d18e862aa51480a2dd5b538148c8fb568c6b8733d0f4","urls":["bzz-raw://120ad6070a5c2bff6cadc74816bdd6ba912f9baf4d1665af64893fe7acd469b5","dweb:/ipfs/QmV8zqWEg1YhQRCeiQstZNSQufvMd11aaveZJJeYF1F5ZY"],"license":"MIT"},"lib/pdp/src/interfaces/IPDPEvents.sol":{"keccak256":"0xbf68ec912762eea46e7121f579e1b9c8c04f2769a8535c012764db823450d356","urls":["bzz-raw://02523a2fee16374e5c180e309cb91229cb822c8ac0beeeaae9501803d80e361a","dweb:/ipfs/QmVgdVzjHJr77T7hRTqDcASpRHbfzH188743zNZmRSM5aQ"],"license":"MIT"},"lib/pdp/src/interfaces/IPDPTypes.sol":{"keccak256":"0x1c5c9eb660a639c30b8b3cc09cc4d4c646935467440281b8c668365e237b6846","urls":["bzz-raw://91c470447e2922976856129e75670c9a4c64dd34c62442fa85a99a67a2add77f","dweb:/ipfs/QmNUXEUnhRRkfKzENo5dR1a1YWsytL7jMkGvxd913mat8t"],"license":"MIT"}},"version":1},"id":42} \ No newline at end of file diff --git a/pdp/handlers.go b/pdp/handlers.go index 25184ae93..39a1a4250 100644 --- a/pdp/handlers.go +++ b/pdp/handlers.go @@ -74,6 +74,9 @@ func Routes(r *chi.Mux, p *PDPService) { // POST /pdp/data-sets - Create a new data set r.Post("/", p.handleCreateDataSet) + // POST /pdp/data-sets/create-and-add - Create a new data set and add pieces at the same time + r.Post("/create-and-add", p.handleCreateDataSetAndAddPieces) + // GET /pdp/data-sets/created/{txHash} - Get the status of a data set creation r.Get("/created/{txHash}", p.handleGetDataSetCreationStatus) @@ -285,53 +288,6 @@ func (p *PDPService) getSenderAddress(ctx context.Context) (common.Address, erro return address, nil } -// insertMessageWaitsAndDataSetCreate inserts records into message_waits_eth and pdp_data_set_creates -func (p *PDPService) insertMessageWaitsAndDataSetCreate(ctx context.Context, txHashHex string, serviceLabel string) error { - // Begin a database transaction - _, err := p.db.BeginTransaction(ctx, func(tx *harmonydb.Tx) (bool, error) { - // Insert into message_waits_eth - log.Debugw("Inserting into message_waits_eth", - "txHash", txHashHex, - "status", "pending") - _, err := tx.Exec(` - INSERT INTO message_waits_eth (signed_tx_hash, tx_status) - VALUES ($1, $2) - `, txHashHex, "pending") - if err != nil { - log.Errorw("Failed to insert into message_waits_eth", - "txHash", txHashHex, - "error", err) - return false, err // Return false to rollback the transaction - } - - // Insert into pdp_data_set_creates - log.Debugw("Inserting into pdp_data_set_creates", - "txHash", txHashHex, - "service", serviceLabel) - _, err = tx.Exec(` - INSERT INTO pdp_data_set_creates (create_message_hash, service) - VALUES ($1, $2) - `, txHashHex, serviceLabel) - if err != nil { - log.Errorw("Failed to insert into pdp_data_set_creates", - "txHash", txHashHex, - "error", err) - return false, err // Return false to rollback the transaction - } - - log.Infow("Successfully inserted orphaned transaction for watching", - "txHash", txHashHex, - "service", serviceLabel, - "waiter_machine_id", "NULL") - // Return true to commit the transaction - return true, nil - }, harmonydb.OptionRetry()) - if err != nil { - return err - } - return nil -} - // handleGetDataSetCreationStatus handles the GET request to retrieve the status of a data set creation func (p *PDPService) handleGetDataSetCreationStatus(w http.ResponseWriter, r *http.Request) { ctx := r.Context() diff --git a/pdp/handlers_add.go b/pdp/handlers_add.go index f7cd402d6..5ab2ef51d 100644 --- a/pdp/handlers_add.go +++ b/pdp/handlers_add.go @@ -1,6 +1,7 @@ package pdp import ( + "context" "encoding/hex" "encoding/json" "errors" @@ -11,6 +12,7 @@ import ( "strconv" "strings" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/go-chi/chi/v5" "github.com/ipfs/go-cid" @@ -24,131 +26,56 @@ import ( "github.com/filecoin-project/curio/pdp/contract" ) -func (p *PDPService) handleAddPieceToDataSet(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() - - // Step 1: Verify that the request is authorized using ECDSA JWT - serviceLabel, err := p.AuthService(r) - if err != nil { - http.Error(w, "Unauthorized: "+err.Error(), http.StatusUnauthorized) - return - } - - // Step 2: Extract dataSetId from the URL - dataSetIdStr := chi.URLParam(r, "dataSetId") - if dataSetIdStr == "" { - http.Error(w, "Missing data set ID in URL", http.StatusBadRequest) - return - } - - // Convert dataSetId to uint64 - dataSetIdUint64, err := strconv.ParseUint(dataSetIdStr, 10, 64) - if err != nil { - http.Error(w, "Invalid data set ID format", http.StatusBadRequest) - return - } - - // check if the data set belongs to the service in pdp_data_sets - - var dataSetService string - err = p.db.QueryRow(ctx, ` - SELECT service - FROM pdp_data_sets - WHERE id = $1 - `, dataSetIdUint64).Scan(&dataSetService) - if err != nil { - if errors.Is(err, pgx.ErrNoRows) { - http.Error(w, "Data set not found", http.StatusNotFound) - return - } - http.Error(w, "Failed to retrieve data set: "+err.Error(), http.StatusInternalServerError) - return - } - - if dataSetService != serviceLabel { - // same as when actually not found to avoid leaking information in obvious ways - http.Error(w, "Data set not found", http.StatusNotFound) - return - } - - // Convert dataSetId to *big.Int - dataSetId := new(big.Int).SetUint64(dataSetIdUint64) - - // Step 3: Parse the request body - type SubPieceEntry struct { - SubPieceCID string `json:"subPieceCid"` - subPieceCIDv1 string - } - - type AddPieceRequest struct { - PieceCID string `json:"pieceCid"` - pieceCIDv1 string - SubPieces []SubPieceEntry `json:"subPieces"` - } - - // AddPiecesPayload defines the structure for the entire add pieces request payload - type AddPiecesPayload struct { - Pieces []AddPieceRequest `json:"pieces"` - ExtraData *string `json:"extraData,omitempty"` - } - - var payload AddPiecesPayload - err = json.NewDecoder(r.Body).Decode(&payload) - if err != nil { - http.Error(w, "Invalid request body: "+err.Error(), http.StatusBadRequest) - return - } - defer func() { - _ = r.Body.Close() - }() +type SubPieceEntry struct { + SubPieceCID string `json:"subPieceCid"` + subPieceCIDv1 string +} - if len(payload.Pieces) == 0 { - http.Error(w, "At least one piece must be provided", http.StatusBadRequest) - return - } +type AddPieceRequest struct { + PieceCID string `json:"pieceCid"` + pieceCIDv1 string + SubPieces []SubPieceEntry `json:"subPieces"` +} +type PieceData struct { + Data []byte // CID +} - extraDataBytes := []byte{} - if payload.ExtraData != nil { - extraDataHexStr := *payload.ExtraData - decodedBytes, err := hex.DecodeString(strings.TrimPrefix(extraDataHexStr, "0x")) - if err != nil { - log.Errorf("Failed to decode hex extraData: %v", err) - http.Error(w, "Invalid extraData format (must be hex encoded)", http.StatusBadRequest) - return - } - extraDataBytes = decodedBytes - } +// Map to store subPieceCID -> [pieceInfo, pdp_pieceref.id, subPieceOffset] +type SubPieceInfo struct { + PieceCIDv1 cid.Cid + PaddedSize abi.PaddedPieceSize + RawSize uint64 // RawSize is the size of the piece with no padding applied + PDPPieceRefID int64 + SubPieceOffset uint64 +} +// returns PieceData, SubPieceInfo, and a list of subPieceCids +func (p *PDPService) transformAddPiecesRequest(ctx context.Context, serviceLabel string, pieces []AddPieceRequest) ([]PieceData, map[string]*SubPieceInfo, []string, error) { // Collect all subPieceCids to fetch their info in a batch subPieceCidSet := make(map[string]struct{}) - for _, addPieceReq := range payload.Pieces { + for _, addPieceReq := range pieces { if addPieceReq.PieceCID == "" { - http.Error(w, "PieceCID is required for each piece", http.StatusBadRequest) - return + return nil, nil, nil, errors.New("PieceCID is required for each piece") } if len(addPieceReq.SubPieces) == 0 { - http.Error(w, "At least one subPiece is required per piece", http.StatusBadRequest) - return + return nil, nil, nil, errors.New("at least one subPiece is required per piece") } for i, subPieceEntry := range addPieceReq.SubPieces { if subPieceEntry.SubPieceCID == "" { - http.Error(w, "subPieceCid is required for each subPiece", http.StatusBadRequest) - return + return nil, nil, nil, errors.New("subPieceCid is required for each subPiece") } pieceCid, err := asPieceCIDv1(subPieceEntry.SubPieceCID) if err != nil { - http.Error(w, "Invalid SubPiece:"+err.Error(), http.StatusBadRequest) - return + return nil, nil, nil, fmt.Errorf("invalid SubPiece: %w", err) } pieceCidString := pieceCid.String() addPieceReq.SubPieces[i].subPieceCIDv1 = pieceCidString // save it for to query subPieceInfoMap later if _, exists := subPieceCidSet[pieceCidString]; exists { - http.Error(w, "duplicate subPieceCid in request", http.StatusBadRequest) - return + return nil, nil, nil, errors.New("duplicate subPieceCid in request") } subPieceCidSet[pieceCidString] = struct{}{} @@ -161,19 +88,10 @@ func (p *PDPService) handleAddPieceToDataSet(w http.ResponseWriter, r *http.Requ subPieceCidList = append(subPieceCidList, cidStr) } - // Map to store subPieceCID -> [pieceInfo, pdp_pieceref.id, subPieceOffset] - type SubPieceInfo struct { - PieceCIDv1 cid.Cid - PaddedSize abi.PaddedPieceSize - RawSize uint64 // RawSize is the size of the piece with no padding applied - PDPPieceRefID int64 - SubPieceOffset uint64 - } - subPieceInfoMap := make(map[string]*SubPieceInfo) // Start a DB transaction - _, err = p.db.BeginTransaction(ctx, func(tx *harmonydb.Tx) (bool, error) { + _, err := p.db.BeginTransaction(ctx, func(tx *harmonydb.Tx) (bool, error) { // Step 4: Get pdp_piecerefs matching all subPiece cids + make sure those refs belong to serviceLabel rows, err := tx.Query(` SELECT ppr.piece_cid, ppr.id AS pdp_pieceref_id, ppr.piece_ref, @@ -225,7 +143,7 @@ func (p *PDPService) handleAddPieceToDataSet(w http.ResponseWriter, r *http.Requ } // Now, for each AddPieceRequest, validate PieceCid and prepare data for ETH transaction - for i, addPieceReq := range payload.Pieces { + for i, addPieceReq := range pieces { // Collect pieceInfos for subPieces pieceInfos := make([]abi.PieceInfo, len(addPieceReq.SubPieces)) @@ -260,7 +178,7 @@ func (p *PDPService) handleAddPieceToDataSet(w http.ResponseWriter, r *http.Requ if err != nil { return false, fmt.Errorf("invalid provided PieceCid: %v", err) } - payload.Pieces[i].pieceCIDv1 = providedPieceCidv1.String() + pieces[i].pieceCIDv1 = providedPieceCidv1.String() if !providedPieceCidv1.Equals(generatedPieceCid) { return false, fmt.Errorf("provided PieceCid does not match generated PieceCid: %s != %s", providedPieceCidv1, generatedPieceCid) @@ -271,46 +189,29 @@ func (p *PDPService) handleAddPieceToDataSet(w http.ResponseWriter, r *http.Requ return true, nil }, harmonydb.OptionRetry()) if err != nil { - http.Error(w, "Failed to validate subPieces: "+err.Error(), http.StatusBadRequest) - return - } - - // Step 5: Prepare the Ethereum transaction data outside the DB transaction - // Obtain the ABI of the PDPVerifier contract - abiData, err := contract.PDPVerifierMetaData.GetAbi() - if err != nil { - http.Error(w, "Failed to get contract ABI: "+err.Error(), http.StatusInternalServerError) - return + return nil, nil, nil, fmt.Errorf("failed to validate subPieces: %w", err) } // Prepare PieceData array for Ethereum transaction // Define a Struct that matches the Solidity PieceData struct - type PieceData struct { - Data []byte // CID - } - var pieceDataArray []PieceData - for _, addPieceReq := range payload.Pieces { + for _, addPieceReq := range pieces { // Convert PieceCid to bytes pieceCidV2, err := cid.Decode(addPieceReq.PieceCID) if err != nil { - http.Error(w, "Invalid PieceCid: "+err.Error(), http.StatusBadRequest) - return + return nil, nil, nil, fmt.Errorf("invalid PieceCid: %w", err) } _, rawSize, err := commcid.PieceCidV1FromV2(pieceCidV2) if err != nil { - http.Error(w, "Invalid CommPv2:"+err.Error(), http.StatusBadRequest) - return + return nil, nil, nil, fmt.Errorf("invalid CommPv2: %w", err) } height, _, err := commcid.PayloadSizeToV1TreeHeightAndPadding(rawSize) if err != nil { - http.Error(w, "Computing height and padding:"+err.Error(), http.StatusBadRequest) - return + return nil, nil, nil, fmt.Errorf("computing height and padding: %w", err) } if height > 50 { - http.Error(w, "Invalid height", http.StatusBadRequest) - return + return nil, nil, nil, errors.New("invalid height") } // Get raw size by summing up the sizes of subPieces @@ -319,10 +220,8 @@ func (p *PDPService) handleAddPieceToDataSet(w http.ResponseWriter, r *http.Requ for i, subPieceEntry := range addPieceReq.SubPieces { subPieceInfo := subPieceInfoMap[subPieceEntry.subPieceCIDv1] if subPieceInfo.PaddedSize > prevSubPieceSize { - msg := fmt.Sprintf("SubPieces must be in descending order of size, piece %d %s is larger than prev subPiece %s", + return nil, nil, nil, fmt.Errorf("subPieces must be in descending order of size, piece %d %s is larger than prev subPiece %s", i, subPieceEntry.SubPieceCID, addPieceReq.SubPieces[i-1].SubPieceCID) - http.Error(w, msg, http.StatusBadRequest) - return } prevSubPieceSize = subPieceInfo.PaddedSize @@ -330,8 +229,7 @@ func (p *PDPService) handleAddPieceToDataSet(w http.ResponseWriter, r *http.Requ } // sanity check that the rawSize in the CommPv2 matches the totalSize of the subPieces if rawSize != totalSize { - http.Error(w, fmt.Sprintf("Raw size miss-match: expected %d, got %d", totalSize, rawSize), http.StatusBadRequest) - return + return nil, nil, nil, fmt.Errorf("raw size miss-match: expected %d, got %d", totalSize, rawSize) } /* TODO: this doesn't work, do we need it? @@ -349,11 +247,112 @@ func (p *PDPService) handleAddPieceToDataSet(w http.ResponseWriter, r *http.Requ pieceDataArray = append(pieceDataArray, pieceData) } + return pieceDataArray, subPieceInfoMap, nil, nil +} + +func (p *PDPService) handleAddPieceToDataSet(w http.ResponseWriter, r *http.Request) { + ctx := r.Context() + + // Step 1: Verify that the request is authorized using ECDSA JWT + serviceLabel, err := p.AuthService(r) + if err != nil { + http.Error(w, "Unauthorized: "+err.Error(), http.StatusUnauthorized) + return + } + + // Step 2: Extract dataSetId from the URL + dataSetIdStr := chi.URLParam(r, "dataSetId") + if dataSetIdStr == "" { + http.Error(w, "Missing data set ID in URL", http.StatusBadRequest) + return + } + + // Convert dataSetId to uint64 + dataSetIdUint64, err := strconv.ParseUint(dataSetIdStr, 10, 64) + if err != nil { + http.Error(w, "Invalid data set ID format", http.StatusBadRequest) + return + } + + // check if the data set belongs to the service in pdp_data_sets + var dataSetService string + err = p.db.QueryRow(ctx, ` + SELECT service + FROM pdp_data_sets + WHERE id = $1 + `, dataSetIdUint64).Scan(&dataSetService) + if err != nil { + if errors.Is(err, pgx.ErrNoRows) { + http.Error(w, "Data set not found", http.StatusNotFound) + return + } + http.Error(w, "Failed to retrieve data set: "+err.Error(), http.StatusInternalServerError) + return + } + + if dataSetService != serviceLabel { + // same as when actually not found to avoid leaking information in obvious ways + http.Error(w, "Data set not found", http.StatusNotFound) + return + } + + // Convert dataSetId to *big.Int + dataSetId := new(big.Int).SetUint64(dataSetIdUint64) + + // Step 3: Parse the request body + + // AddPiecesPayload defines the structure for the entire add pieces request payload + type AddPiecesPayload struct { + Pieces []AddPieceRequest `json:"pieces"` + ExtraData *string `json:"extraData,omitempty"` + } + + var payload AddPiecesPayload + err = json.NewDecoder(r.Body).Decode(&payload) + if err != nil { + http.Error(w, "Invalid request body: "+err.Error(), http.StatusBadRequest) + return + } + defer func() { + _ = r.Body.Close() + }() + + if len(payload.Pieces) == 0 { + http.Error(w, "At least one piece must be provided", http.StatusBadRequest) + return + } + + extraDataBytes := []byte{} + if payload.ExtraData != nil { + extraDataHexStr := *payload.ExtraData + decodedBytes, err := hex.DecodeString(strings.TrimPrefix(extraDataHexStr, "0x")) + if err != nil { + log.Errorf("Failed to decode hex extraData: %v", err) + http.Error(w, "Invalid extraData format (must be hex encoded)", http.StatusBadRequest) + return + } + extraDataBytes = decodedBytes + } + + // Step 4: Prepare piece information + pieceDataArray, subPieceInfoMap, subPieceCidList, err := p.transformAddPiecesRequest(ctx, serviceLabel, payload.Pieces) + if err != nil { + http.Error(w, "Failed to transform add pieces request: "+err.Error(), http.StatusBadRequest) + } + + // Step 5: Prepare the Ethereum transaction data outside the DB transaction + // Obtain the ABI of the PDPVerifier contract + abiData, err := contract.PDPVerifierMetaData.GetAbi() + if err != nil { + http.Error(w, "Failed to get contract ABI: "+err.Error(), http.StatusInternalServerError) + return + } // Step 6: Prepare the Ethereum transaction // Pack the method call data // The extraDataBytes variable is now correctly populated above - data, err := abiData.Pack("addPieces", dataSetId, pieceDataArray, extraDataBytes) + + data, err := abiData.Pack("addPieces", dataSetId, common.Address{}, pieceDataArray, extraDataBytes) if err != nil { http.Error(w, "Failed to pack method call: "+err.Error(), http.StatusInternalServerError) return @@ -407,14 +406,14 @@ func (p *PDPService) handleAddPieceToDataSet(w http.ResponseWriter, r *http.Requ log.Infow("Failed to get data set metadata, skipping indexing ", "error", err, "dataSetId", dataSetId) } - // Step 10: Insert into message_waits_eth and pdp_data_set_pieces - // If indexing required update pdp_piecerefs table with indexing requirement + // Step 9: Insert into message_waits_eth and pdp_data_set_pieces // Ensure consistent lowercase transaction hash txHashLower := strings.ToLower(txHash.Hex()) log.Infow("PDP AddPieces: Inserting transaction tracking", "txHash", txHashLower, "dataSetId", dataSetIdUint64, "pieceCount", len(payload.Pieces)) + _, err = p.db.BeginTransaction(ctx, func(txdb *harmonydb.Tx) (bool, error) { // Insert into message_waits_eth log.Debugw("Inserting AddPieces into message_waits_eth", @@ -441,37 +440,9 @@ func (p *PDPService) handleAddPieceToDataSet(w http.ResponseWriter, r *http.Requ } // Insert into pdp_data_set_pieces - for addMessageIndex, addPieceReq := range payload.Pieces { - for _, subPieceEntry := range addPieceReq.SubPieces { - subPieceInfo := subPieceInfoMap[subPieceEntry.subPieceCIDv1] - - // Insert into pdp_data_set_pieces - _, err = txdb.Exec(` - INSERT INTO pdp_data_set_piece_adds ( - data_set, - piece, - add_message_hash, - add_message_index, - sub_piece, - sub_piece_offset, - sub_piece_size, - pdp_pieceref - ) - VALUES ($1, $2, $3, $4, $5, $6, $7, $8) - `, - dataSetIdUint64, - addPieceReq.pieceCIDv1, - txHashLower, - addMessageIndex, - subPieceEntry.subPieceCIDv1, - subPieceInfo.SubPieceOffset, - subPieceInfo.PaddedSize, - subPieceInfo.PDPPieceRefID, - ) - if err != nil { - return false, err - } - } + err = p.insertPieceAdds(txdb, &dataSetIdUint64, txHashLower, payload.Pieces, subPieceInfoMap) + if err != nil { + return false, err } if mustIndex { @@ -489,7 +460,6 @@ func (p *PDPService) handleAddPieceToDataSet(w http.ResponseWriter, r *http.Requ return false, err } } - // Return true to commit the transaction return true, nil }, harmonydb.OptionRetry()) @@ -499,7 +469,43 @@ func (p *PDPService) handleAddPieceToDataSet(w http.ResponseWriter, r *http.Requ return } - // Step 11: Respond with 201 Created + // Step 10: Respond with 201 Created w.Header().Set("Location", path.Join("/pdp/data-sets", dataSetIdStr, "pieces/added", txHashLower)) w.WriteHeader(http.StatusCreated) } + +func (p *PDPService) insertPieceAdds(txdb *harmonydb.Tx, dataSetId *uint64, txHash string, pieces []AddPieceRequest, subPieceInfoMap map[string]*SubPieceInfo) error { + for addMessageIndex, addPieceReq := range pieces { + for _, subPieceEntry := range addPieceReq.SubPieces { + subPieceInfo := subPieceInfoMap[subPieceEntry.subPieceCIDv1] + + // Insert into pdp_data_set_pieces + _, err := txdb.Exec(` + INSERT INTO pdp_data_set_piece_adds ( + data_set, + piece, + add_message_hash, + add_message_index, + sub_piece, + sub_piece_offset, + sub_piece_size, + pdp_pieceref + ) + VALUES ($1, $2, $3, $4, $5, $6, $7, $8) + `, + dataSetId, + addPieceReq.pieceCIDv1, + txHash, + addMessageIndex, + subPieceEntry.subPieceCIDv1, + subPieceInfo.SubPieceOffset, + subPieceInfo.PaddedSize, + subPieceInfo.PDPPieceRefID, + ) + if err != nil { + return err + } + } + } + return nil +} diff --git a/pdp/handlers_create.go b/pdp/handlers_create.go index db8eac032..40d6ec43c 100644 --- a/pdp/handlers_create.go +++ b/pdp/handlers_create.go @@ -4,6 +4,7 @@ import ( "encoding/hex" "encoding/json" "io" + "math/big" "net/http" "path" "strings" @@ -11,9 +12,139 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" + "github.com/filecoin-project/curio/harmony/harmonydb" "github.com/filecoin-project/curio/pdp/contract" ) +// handleCreateDataSetAndAddPieces handles the creation of a new data set and adding pieces at the same time +func (p *PDPService) handleCreateDataSetAndAddPieces(w http.ResponseWriter, r *http.Request) { + ctx := r.Context() + + // Step 1: Verify that the request is authorized using ECDSA JWT + serviceLabel, err := p.AuthService(r) + if err != nil { + http.Error(w, "Unauthorized: "+err.Error(), http.StatusUnauthorized) + return + } + + type RequestBody struct { + RecordKeeper string `json:"recordKeeper"` + Pieces []AddPieceRequest `json:"pieces"` + ExtraData *string `json:"extraData,omitempty"` + } + + var reqBody RequestBody + if err := json.NewDecoder(r.Body).Decode(&reqBody); err != nil { + http.Error(w, "Invalid JSON in request body: "+err.Error(), http.StatusBadRequest) + return + } + + if reqBody.RecordKeeper == "" { + http.Error(w, "recordKeeper address is required", http.StatusBadRequest) + return + } + + recordKeeperAddr := common.HexToAddress(reqBody.RecordKeeper) + if recordKeeperAddr == (common.Address{}) { + http.Error(w, "Invalid recordKeeper address", http.StatusBadRequest) + return + } + + // Check if the recordkeeper is in the whitelist for public services + if contract.IsPublicService(serviceLabel) && !contract.IsRecordKeeperAllowed(recordKeeperAddr) { + http.Error(w, "recordKeeper address not allowed for public service", http.StatusForbidden) + return + } + + extraDataBytes, err := decodeExtraData(reqBody.ExtraData) + if err != nil { + http.Error(w, "Invalid extraData format (must be hex encoded)", http.StatusBadRequest) + return + } + + pieceDataArray, subPieceInfoMap, _, err := p.transformAddPiecesRequest(ctx, serviceLabel, reqBody.Pieces) + if err != nil { + http.Error(w, "Failed to transform addPieces request: "+err.Error(), http.StatusBadRequest) + return + } + + abiData, err := contract.PDPVerifierMetaData.GetAbi() + if err != nil { + http.Error(w, "Failed to get contract ABI: "+err.Error(), http.StatusInternalServerError) + return + } + + data, err := abiData.Pack("addPieces", new(big.Int), recordKeeperAddr, pieceDataArray, extraDataBytes) + if err != nil { + http.Error(w, "Failed to pack method call: "+err.Error(), http.StatusInternalServerError) + return + } + + fromAddress, err := p.getSenderAddress(ctx) + if err != nil { + http.Error(w, "Failed to get sender address: "+err.Error(), http.StatusInternalServerError) + return + } + + tx := types.NewTransaction( + 0, + contract.ContractAddresses().PDPVerifier, + contract.SybilFee(), + 0, + nil, + data, + ) + + reason := "pdp-create-and-add" + txHash, err := p.sender.Send(ctx, fromAddress, tx, reason) + if err != nil { + http.Error(w, "Failed to send transaction: "+err.Error(), http.StatusInternalServerError) + log.Errorf("Failed to send transaction: %+v", err) + return + } + + txHashLower := strings.ToLower(txHash.Hex()) + log.Infow("PDP CreateDataSet: Inserting transaction tracking", + "txHash", txHashLower, + "service", serviceLabel, + "recordKeeper", recordKeeperAddr.Hex()) + // Begin a database transaction + _, err = p.db.BeginTransaction(ctx, func(tx *harmonydb.Tx) (bool, error) { + err := p.insertMessageWaitsAndDataSetCreate(tx, txHashLower, serviceLabel) + if err != nil { + return false, err + } + // insert piece adds with data_set id = NULL as the dataset is pending + err = p.insertPieceAdds(tx, nil, txHashLower, reqBody.Pieces, subPieceInfoMap) + + return true, err + }, harmonydb.OptionRetry()) + + if err != nil { + log.Errorf("Failed to insert into message_waits_eth, pdp_data_set_piece_adds and pdp_data_set_creates: %+v", err) + http.Error(w, "Internal server error", http.StatusInternalServerError) + return + } + + // Step 7: Respond with 201 Created and Location header + w.Header().Set("Location", path.Join("/pdp/data-sets/created", txHashLower)) + w.WriteHeader(http.StatusCreated) +} + +func decodeExtraData(extraDataString *string) ([]byte, error) { + if extraDataString == nil { + return nil, nil + } + + extraDataHexStr := *extraDataString + decodedBytes, err := hex.DecodeString(strings.TrimPrefix(extraDataHexStr, "0x")) + if err != nil { + log.Errorf("Failed to decode hex extraData: %v", err) + return nil, err + } + return decodedBytes, nil +} + // handleCreateDataSet handles the creation of a new data set func (p *PDPService) handleCreateDataSet(w http.ResponseWriter, r *http.Request) { ctx := r.Context() @@ -123,7 +254,17 @@ func (p *PDPService) handleCreateDataSet(w http.ResponseWriter, r *http.Request) "txHash", txHashLower, "service", serviceLabel, "recordKeeper", recordKeeperAddr.Hex()) - err = p.insertMessageWaitsAndDataSetCreate(ctx, txHashLower, serviceLabel) + + // Begin a database transaction + _, err = p.db.BeginTransaction(ctx, func(tx *harmonydb.Tx) (bool, error) { + err := p.insertMessageWaitsAndDataSetCreate(tx, txHashLower, serviceLabel) + if err != nil { + return false, err + } + + return true, nil + }, harmonydb.OptionRetry()) + if err != nil { log.Errorf("Failed to insert into message_waits_eth and pdp_data_set_creates: %+v", err) http.Error(w, "Internal server error", http.StatusInternalServerError) @@ -134,3 +275,43 @@ func (p *PDPService) handleCreateDataSet(w http.ResponseWriter, r *http.Request) w.Header().Set("Location", path.Join("/pdp/data-sets/created", txHashLower)) w.WriteHeader(http.StatusCreated) } + +// insertMessageWaitsAndDataSetCreate inserts records into message_waits_eth and pdp_data_set_creates +func (p *PDPService) insertMessageWaitsAndDataSetCreate(tx *harmonydb.Tx, txHashHex string, serviceLabel string) error { + // Insert into message_waits_eth + log.Debugw("Inserting into message_waits_eth", + "txHash", txHashHex, + "status", "pending") + _, err := tx.Exec(` + INSERT INTO message_waits_eth (signed_tx_hash, tx_status) + VALUES ($1, $2) + `, txHashHex, "pending") + if err != nil { + log.Errorw("Failed to insert into message_waits_eth", + "txHash", txHashHex, + "error", err) + return err // Return false to rollback the transaction + } + + // Insert into pdp_data_set_creates + log.Debugw("Inserting into pdp_data_set_creates", + "txHash", txHashHex, + "service", serviceLabel) + _, err = tx.Exec(` + INSERT INTO pdp_data_set_creates (create_message_hash, service) + VALUES ($1, $2) + `, txHashHex, serviceLabel) + if err != nil { + log.Errorw("Failed to insert into pdp_data_set_creates", + "txHash", txHashHex, + "error", err) + return err // Return false to rollback the transaction + } + + log.Infow("Successfully inserted orphaned transaction for watching", + "txHash", txHashHex, + "service", serviceLabel, + "waiter_machine_id", "NULL") + // Return true to commit the transaction + return nil +} diff --git a/tasks/pdp/proofset_addroot_watch.go b/tasks/pdp/proofset_addroot_watch.go index 08220dfeb..c1b3d595e 100644 --- a/tasks/pdp/proofset_addroot_watch.go +++ b/tasks/pdp/proofset_addroot_watch.go @@ -2,6 +2,7 @@ package pdp import ( "context" + "database/sql" "encoding/json" "fmt" "math/big" @@ -11,47 +12,30 @@ import ( "golang.org/x/xerrors" "github.com/filecoin-project/curio/harmony/harmonydb" - "github.com/filecoin-project/curio/lib/chainsched" "github.com/filecoin-project/curio/pdp/contract" - - chainTypes "github.com/filecoin-project/lotus/chain/types" ) // Structures to represent database records type DataSetPieceAdd struct { - DataSet uint64 `db:"data_set"` - AddMessageHash string `db:"add_message_hash"` + DataSet sql.NullInt64 `db:"data_set"` + AddMessageHash string `db:"add_message_hash"` } // PieceAddEntry represents entries from pdp_data_set_piece_adds type PieceAddEntry struct { - DataSet uint64 `db:"data_set"` - Piece string `db:"piece"` - AddMessageHash string `db:"add_message_hash"` - AddMessageIndex uint64 `db:"add_message_index"` - SubPiece string `db:"sub_piece"` - SubPieceOffset int64 `db:"sub_piece_offset"` - SubPieceSize int64 `db:"sub_piece_size"` - PDPPieceRefID int64 `db:"pdp_pieceref"` - AddMessageOK *bool `db:"add_message_ok"` - PDPDataSetId uint64 `db:"data_set"` -} - -// NewWatcherPieceAdd sets up the watcher for data set piece additions -func NewWatcherPieceAdd(db *harmonydb.DB, ethClient *ethclient.Client, pcs *chainsched.CurioChainSched) { - if err := pcs.AddHandler(func(ctx context.Context, revert, apply *chainTypes.TipSet) error { - err := processPendingDataSetPieceAdds(ctx, db, ethClient) - if err != nil { - log.Warnf("Failed to process pending data set piece adds: %v", err) - } - - return nil - }); err != nil { - panic(err) - } + DataSet sql.NullInt64 `db:"data_set"` + Piece string `db:"piece"` + AddMessageHash string `db:"add_message_hash"` + AddMessageIndex uint64 `db:"add_message_index"` + SubPiece string `db:"sub_piece"` + SubPieceOffset int64 `db:"sub_piece_offset"` + SubPieceSize int64 `db:"sub_piece_size"` + PDPPieceRefID int64 `db:"pdp_pieceref"` + AddMessageOK *bool `db:"add_message_ok"` } // processPendingDataSetPieceAdds processes piece additions that have been confirmed on-chain +// it is called from proofset_watch.go func processPendingDataSetPieceAdds(ctx context.Context, db *harmonydb.DB, ethClient *ethclient.Client) error { // Query for pdp_data_set_piece_adds entries where add_message_ok = TRUE var pieceAdds []DataSetPieceAdd @@ -111,6 +95,32 @@ func processDataSetPieceAdd(ctx context.Context, db *harmonydb.DB, ethClient *et } func extractAndInsertPiecesFromReceipt(ctx context.Context, db *harmonydb.DB, receipt *types.Receipt, pieceAdd DataSetPieceAdd) error { + resolvedDataSetId := pieceAdd.DataSet + if !resolvedDataSetId.Valid { + var err error + resolvedDataSetId.Int64, err = extractDataSetIdFromReceipt(receipt) + if err != nil { + return fmt.Errorf("expeted to find dataSetId in receipt but failed to extract: %w", err) + } + resolvedDataSetId.Valid = true + var exists bool + // we check if the dataset exists already to avoid foreign key violation + err = db.QueryRow(ctx, ` + SELECT EXISTS ( + SELECT 1 + FROM pdp_data_sets + WHERE id = $1 + )`, resolvedDataSetId.Int64).Scan(&exists) + if err != nil { + return fmt.Errorf("failed to check if data set exists: %w", err) + } + if !exists { + // this is a rare case where the transaction is marked as complete between create_watch being called and this function + // if that happens, we return an error which will get logged and ignored + // piece addition will get picked up in the next run of the watcher + return fmt.Errorf("data set %d not found in pdp_data_sets", resolvedDataSetId.Int64) + } + } // Get the ABI from the contract metadata pdpABI, err := contract.PDPVerifierMetaData.GetAbi() if err != nil { @@ -171,6 +181,7 @@ func extractAndInsertPiecesFromReceipt(ctx context.Context, db *harmonydb.DB, re _, err = db.BeginTransaction(ctx, func(tx *harmonydb.Tx) (bool, error) { // Fetch the entries from pdp_data_set_piece_adds var pieceAddEntries []PieceAddEntry + // XXX: is the `WHERE data_set` here needed? err := tx.Select(&pieceAddEntries, ` SELECT data_set, piece, add_message_hash, add_message_index, sub_piece, sub_piece_offset, sub_piece_size, pdp_pieceref FROM pdp_data_set_piece_adds @@ -204,18 +215,19 @@ func extractAndInsertPiecesFromReceipt(ctx context.Context, db *harmonydb.DB, re ) VALUES ( $1, $2, $3, $4, $5, $6, $7, $8, $9 ) - `, entry.DataSet, entry.Piece, pieceId, entry.SubPiece, entry.SubPieceOffset, entry.SubPieceSize, entry.PDPPieceRefID, entry.AddMessageHash, entry.AddMessageIndex) + `, resolvedDataSetId.Int64, entry.Piece, pieceId, entry.SubPiece, entry.SubPieceOffset, entry.SubPieceSize, entry.PDPPieceRefID, entry.AddMessageHash, entry.AddMessageIndex) if err != nil { return false, fmt.Errorf("failed to insert into pdp_data_set_pieces: %w", err) } } // Mark as processed in pdp_data_set_piece_adds (don't delete, for transaction tracking) + // XXX: same here, is there WHERE data_set needed? rowsAffected, err := tx.Exec(` UPDATE pdp_data_set_piece_adds - SET pieces_added = TRUE + SET pieces_added = TRUE, data_set = $3 WHERE data_set = $1 AND add_message_hash = $2 AND pieces_added = FALSE - `, pieceAdd.DataSet, pieceAdd.AddMessageHash) + `, pieceAdd.DataSet, pieceAdd.AddMessageHash, resolvedDataSetId) if err != nil { return false, fmt.Errorf("failed to update pdp_data_set_piece_adds: %w", err) } diff --git a/tasks/pdp/proofset_create_watch.go b/tasks/pdp/proofset_create_watch.go index 7d8432ce4..32028b26d 100644 --- a/tasks/pdp/proofset_create_watch.go +++ b/tasks/pdp/proofset_create_watch.go @@ -12,10 +12,7 @@ import ( "golang.org/x/xerrors" "github.com/filecoin-project/curio/harmony/harmonydb" - "github.com/filecoin-project/curio/lib/chainsched" "github.com/filecoin-project/curio/pdp/contract" - - chainTypes "github.com/filecoin-project/lotus/chain/types" ) type DataSetCreate struct { @@ -23,18 +20,8 @@ type DataSetCreate struct { Service string `db:"service"` } -func NewWatcherCreate(db *harmonydb.DB, ethClient *ethclient.Client, pcs *chainsched.CurioChainSched) { - if err := pcs.AddHandler(func(ctx context.Context, revert, apply *chainTypes.TipSet) error { - err := processPendingDataSetCreates(ctx, db, ethClient) - if err != nil { - log.Warnf("Failed to process pending data set creates: %v", err) - } - return nil - }); err != nil { - panic(err) - } -} - +// processPendingDataSetCreates finalises data set creation best on transactions logs +// it is called from proofset_watch.go func processPendingDataSetCreates(ctx context.Context, db *harmonydb.DB, ethClient *ethclient.Client) error { // Query for pdp_data_set_creates entries where ok = TRUE and data_set_created = FALSE var dataSetCreates []DataSetCreate @@ -117,27 +104,37 @@ func processDataSetCreate(ctx context.Context, db *harmonydb.DB, psc DataSetCrea if err != nil { return xerrors.Errorf("failed to get max proving period: %w", err) } + _, err = db.BeginTransaction(ctx, func(tx *harmonydb.Tx) (bool, error) { + // Insert a new entry into pdp_data_sets + _, err = tx.Exec(` + INSERT INTO pdp_data_sets (id, create_message_hash, service, proving_period, challenge_window) + VALUES ($1, $2, $3, $4, $5) + `, dataSetId, psc.CreateMessageHash, psc.Service, provingPeriod, challengeWindow) + if err != nil { + return false, xerrors.Errorf("failed to insert data set %d for tx %+v: %w", dataSetId, psc, err) + } - // Insert a new entry into pdp_data_sets - err = insertDataSet(ctx, db, psc.CreateMessageHash, dataSetId, psc.Service, provingPeriod, challengeWindow) - if err != nil { - return xerrors.Errorf("failed to insert data set %d for tx %+v: %w", dataSetId, psc, err) - } - - // Update pdp_data_set_creates to set data_set_created = TRUE - _, err = db.Exec(ctx, ` + // Update pdp_data_set_creates to set data_set_created = TRUE + _, err = db.Exec(ctx, ` UPDATE pdp_data_set_creates SET data_set_created = TRUE WHERE create_message_hash = $1 + AND data_set_created = FALSE; `, psc.CreateMessageHash) + if err != nil { + return false, xerrors.Errorf("failed to update data_set_creates for tx %s: %w", psc.CreateMessageHash, err) + } + return true, nil + }) + if err != nil { - return xerrors.Errorf("failed to update data_set_creates for tx %s: %w", psc.CreateMessageHash, err) + return xerrors.Errorf("failed to create data set %d for tx %+v: %w", dataSetId, psc, err) } return nil } -func extractDataSetIdFromReceipt(receipt *types.Receipt) (uint64, error) { +func extractDataSetIdFromReceipt(receipt *types.Receipt) (int64, error) { pdpABI, err := contract.PDPVerifierMetaData.GetAbi() if err != nil { return 0, xerrors.Errorf("failed to get PDP ABI: %w", err) @@ -155,23 +152,16 @@ func extractDataSetIdFromReceipt(receipt *types.Receipt) (uint64, error) { } setIdBigInt := new(big.Int).SetBytes(vLog.Topics[1].Bytes()) - return setIdBigInt.Uint64(), nil + if !setIdBigInt.IsInt64() { + return 0, xerrors.Errorf("setId is not an int64") + } + return setIdBigInt.Int64(), nil } } return 0, xerrors.Errorf("DataSetCreated event not found in receipt") } -func insertDataSet(ctx context.Context, db *harmonydb.DB, createMsg string, dataSetId uint64, service string, provingPeriod uint64, challengeWindow uint64) error { - // Implement the insertion into pdp_data_sets table - // Adjust the SQL statement based on your table schema - _, err := db.Exec(ctx, ` - INSERT INTO pdp_data_sets (id, create_message_hash, service, proving_period, challenge_window) - VALUES ($1, $2, $3, $4, $5) - `, dataSetId, createMsg, service, provingPeriod, challengeWindow) - return err -} - func getProvingPeriodChallengeWindow(ctx context.Context, ethClient *ethclient.Client, listenerAddr common.Address) (uint64, uint64, error) { // Get the proving schedule from the listener (handles view contract indirection) schedule, err := contract.GetProvingScheduleFromListener(listenerAddr, ethClient) diff --git a/tasks/pdp/proofset_watch.go b/tasks/pdp/proofset_watch.go new file mode 100644 index 000000000..d3f25852c --- /dev/null +++ b/tasks/pdp/proofset_watch.go @@ -0,0 +1,32 @@ +package pdp + +import ( + "context" + + "github.com/ethereum/go-ethereum/ethclient" + + "github.com/filecoin-project/curio/harmony/harmonydb" + "github.com/filecoin-project/curio/lib/chainsched" + + chainTypes "github.com/filecoin-project/lotus/chain/types" +) + +// NewProofSetWatch runes processing steps for proofset creation and piece addtion +// These two are run in sequence to allow for combined create-and-add flow to first +// create the proofset, then add the pieces to it. +func NewProofSetWatch(db *harmonydb.DB, ethClient *ethclient.Client, pcs *chainsched.CurioChainSched) { + if err := pcs.AddHandler(func(ctx context.Context, revert, apply *chainTypes.TipSet) error { + err := processPendingDataSetCreates(ctx, db, ethClient) + if err != nil { + log.Warnf("Failed to process pending data set creates: %v", err) + } + + err = processPendingDataSetPieceAdds(ctx, db, ethClient) + if err != nil { + log.Warnf("Failed to process pending data set piece adds: %v", err) + } + return nil + }); err != nil { + panic(err) + } +}