{
  "abi": [
    {
      "type": "constructor",
      "inputs": [
        { "name": "_addressProvider", "type": "address", "internalType": "address" },
        { "name": "_token", "type": "address", "internalType": "address" }
      ],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "EPOCH_LENGTH",
      "inputs": [],
      "outputs": [{ "name": "", "type": "uint64", "internalType": "uint64" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "TOKEN",
      "inputs": [],
      "outputs": [{ "name": "", "type": "address", "internalType": "contract IERC20" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "addressProvider",
      "inputs": [],
      "outputs": [{ "name": "", "type": "address", "internalType": "contract IAddressProvider" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "claims",
      "inputs": [
        {
          "name": "_claimsData",
          "type": "tuple[]",
          "internalType": "struct RewardDistributor.ClaimCallData[]",
          "components": [
            { "name": "epochId", "type": "uint64", "internalType": "uint64" },
            { "name": "account", "type": "address", "internalType": "address" },
            { "name": "amount", "type": "uint256", "internalType": "uint256" },
            { "name": "merkleProof", "type": "bytes32[]", "internalType": "bytes32[]" }
          ]
        }
      ],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "emergencyRescue",
      "inputs": [
        { "name": "_token", "type": "address", "internalType": "address" },
        { "name": "_to", "type": "address", "internalType": "address" },
        { "name": "_amount", "type": "uint256", "internalType": "uint256" }
      ],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "forwardExpiredRewards",
      "inputs": [{ "name": "_epochIds", "type": "uint64[]", "internalType": "uint64[]" }],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "getExpiredEpochRewards",
      "inputs": [{ "name": "_epochIds", "type": "uint64[]", "internalType": "uint64[]" }],
      "outputs": [{ "name": "totalExpiredRewards", "type": "uint256", "internalType": "uint256" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "hasClaimed",
      "inputs": [
        { "name": "account", "type": "address", "internalType": "address" },
        { "name": "epochId", "type": "uint64", "internalType": "uint64" }
      ],
      "outputs": [{ "name": "hasClaimed", "type": "bool", "internalType": "bool" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "lastEpochId",
      "inputs": [],
      "outputs": [{ "name": "", "type": "uint64", "internalType": "uint64" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "merkleDrops",
      "inputs": [{ "name": "epochId", "type": "uint64", "internalType": "uint64" }],
      "outputs": [
        { "name": "root", "type": "bytes32", "internalType": "bytes32" },
        { "name": "totalAmount", "type": "uint256", "internalType": "uint256" },
        { "name": "startTime", "type": "uint64", "internalType": "uint64" },
        { "name": "expiryTime", "type": "uint64", "internalType": "uint64" }
      ],
      "stateMutability": "view"
    },
    { "type": "function", "name": "pause", "inputs": [], "outputs": [], "stateMutability": "nonpayable" },
    {
      "type": "function",
      "name": "paused",
      "inputs": [],
      "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "setAddressProvider",
      "inputs": [{ "name": "newAddressProvider", "type": "address", "internalType": "address" }],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "totalClaimed",
      "inputs": [],
      "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "totalClaimedPerEpoch",
      "inputs": [{ "name": "epochId", "type": "uint64", "internalType": "uint64" }],
      "outputs": [{ "name": "totalClaimed", "type": "uint256", "internalType": "uint256" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "totalClaimedPerUser",
      "inputs": [{ "name": "account", "type": "address", "internalType": "address" }],
      "outputs": [{ "name": "totalClaimed", "type": "uint256", "internalType": "uint256" }],
      "stateMutability": "view"
    },
    { "type": "function", "name": "unpause", "inputs": [], "outputs": [], "stateMutability": "nonpayable" },
    {
      "type": "function",
      "name": "updateMerkleDrop",
      "inputs": [
        { "name": "_epoch", "type": "uint64", "internalType": "uint64" },
        {
          "name": "_merkleDrop",
          "type": "tuple",
          "internalType": "struct RewardDistributor.MerkleDrop",
          "components": [
            { "name": "root", "type": "bytes32", "internalType": "bytes32" },
            { "name": "totalAmount", "type": "uint256", "internalType": "uint256" },
            { "name": "startTime", "type": "uint64", "internalType": "uint64" },
            { "name": "expiryTime", "type": "uint64", "internalType": "uint64" }
          ]
        }
      ],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "event",
      "name": "AddressProviderUpdated",
      "inputs": [{ "name": "newAddressProvider", "type": "address", "indexed": false, "internalType": "address" }],
      "anonymous": false
    },
    {
      "type": "event",
      "name": "EmergencyRescued",
      "inputs": [
        { "name": "token", "type": "address", "indexed": false, "internalType": "address" },
        { "name": "to", "type": "address", "indexed": false, "internalType": "address" },
        { "name": "amount", "type": "uint256", "indexed": false, "internalType": "uint256" }
      ],
      "anonymous": false
    },
    {
      "type": "event",
      "name": "ExpiredRewardsForwarded",
      "inputs": [
        { "name": "epochId", "type": "uint64", "indexed": false, "internalType": "uint64" },
        { "name": "amount", "type": "uint256", "indexed": false, "internalType": "uint256" }
      ],
      "anonymous": false
    },
    {
      "type": "event",
      "name": "MerkleDropUpdated",
      "inputs": [
        { "name": "epochId", "type": "uint64", "indexed": false, "internalType": "uint64" },
        { "name": "root", "type": "bytes32", "indexed": false, "internalType": "bytes32" },
        { "name": "totalAmount", "type": "uint256", "indexed": false, "internalType": "uint256" },
        { "name": "startTime", "type": "uint64", "indexed": false, "internalType": "uint64" },
        { "name": "endTime", "type": "uint64", "indexed": false, "internalType": "uint64" }
      ],
      "anonymous": false
    },
    {
      "type": "event",
      "name": "Paused",
      "inputs": [{ "name": "account", "type": "address", "indexed": false, "internalType": "address" }],
      "anonymous": false
    },
    {
      "type": "event",
      "name": "RewardsClaimed",
      "inputs": [
        { "name": "epochId", "type": "uint64", "indexed": false, "internalType": "uint64" },
        { "name": "account", "type": "address", "indexed": false, "internalType": "address" },
        { "name": "amount", "type": "uint256", "indexed": false, "internalType": "uint256" }
      ],
      "anonymous": false
    },
    {
      "type": "event",
      "name": "Unpaused",
      "inputs": [{ "name": "account", "type": "address", "indexed": false, "internalType": "address" }],
      "anonymous": false
    },
    { "type": "error", "name": "AddressCantBeZero", "inputs": [] },
    { "type": "error", "name": "AlreadyClaimed", "inputs": [] },
    {
      "type": "error",
      "name": "CallerNotMaintainer",
      "inputs": [
        { "name": "role", "type": "bytes32", "internalType": "bytes32" },
        { "name": "caller", "type": "address", "internalType": "address" }
      ]
    },
    {
      "type": "error",
      "name": "CallerNotOperator",
      "inputs": [
        { "name": "role", "type": "bytes32", "internalType": "bytes32" },
        { "name": "caller", "type": "address", "internalType": "address" }
      ]
    },
    { "type": "error", "name": "EmptyArray", "inputs": [] },
    { "type": "error", "name": "EnforcedPause", "inputs": [] },
    { "type": "error", "name": "EpochAlreadySet", "inputs": [] },
    { "type": "error", "name": "EpochCantBeUpdated", "inputs": [] },
    { "type": "error", "name": "EpochExpired", "inputs": [] },
    { "type": "error", "name": "EpochGapNotAllowed", "inputs": [] },
    { "type": "error", "name": "EpochNotExpired", "inputs": [] },
    { "type": "error", "name": "EpochZeroNotAllowed", "inputs": [] },
    { "type": "error", "name": "ExpectedPause", "inputs": [] },
    { "type": "error", "name": "NotStarted", "inputs": [] },
    { "type": "error", "name": "ProofInvalid", "inputs": [] },
    { "type": "error", "name": "ReentrancyGuardReentrantCall", "inputs": [] },
    {
      "type": "error",
      "name": "SafeERC20FailedOperation",
      "inputs": [{ "name": "token", "type": "address", "internalType": "address" }]
    },
    { "type": "error", "name": "TotalEpochRewardsExceeded", "inputs": [] }
  ],
  "bytecode": {
    "object": "0x60a0604052600160045f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550348015610038575f5ffd5b50604051612b88380380612b88833981810160405281019061005a91906101e8565b60018081905550610070826100ab60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050505061024e565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610110576040517f4b054c8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fd797ece758027d865d32be7a552cd5d3ae1637d8d25d9c3c83b373020c1683b78160405161017f9190610235565b60405180910390a150565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6101b78261018e565b9050919050565b6101c7816101ad565b81146101d1575f5ffd5b50565b5f815190506101e2816101be565b92915050565b5f5f604083850312156101fe576101fd61018a565b5b5f61020b858286016101d4565b925050602061021c858286016101d4565b9150509250929050565b61022f816101ad565b82525050565b5f6020820190506102485f830184610226565b92915050565b6080516129146102745f395f81816105260152818161098f0152611c3101526129145ff3fe608060405234801561000f575f5ffd5b5060043610610114575f3560e01c806382bfefc8116100a0578063ac4746ab1161006f578063ac4746ab146102cd578063c2ef4a22146102eb578063c43b540f14610307578063d54ad2a114610325578063d687d0b31461034357610114565b806382bfefc81461025657806383f62748146102745780638456cb5914610290578063a394ee921461029a57610114565b80632954018c116100e75780632954018c146101b05780633f4ba83a146101ce57806340df94be146101d85780635c975abb146102085780637c03bb2e1461022657610114565b8063148d069814610118578063182f89da146101345780631a5fa2e3146101645780632055457b14610180575b5f5ffd5b610132600480360381019061012d9190611e82565b61035f565b005b61014e60048036038101906101499190611f64565b610571565b60405161015b9190611fbc565b60405180910390f35b61017e60048036038101906101799190611fd5565b61059b565b005b61019a60048036038101906101959190612000565b610716565b6040516101a79190612043565b60405180910390f35b6101b861072b565b6040516101c591906120b7565b60405180910390f35b6101d6610750565b005b6101f260048036038101906101ed9190611e82565b6108c9565b6040516101ff9190612043565b60405180910390f35b610210610964565b60405161021d9190611fbc565b60405180910390f35b610240600480360381019061023b9190611fd5565b610978565b60405161024d9190612043565b60405180910390f35b61025e61098d565b60405161026b91906120f0565b60405180910390f35b61028e60048036038101906102899190612267565b6109b1565b005b610298610ea6565b005b6102b460048036038101906102af9190612000565b61101f565b6040516102c494939291906122c3565b60405180910390f35b6102d5611072565b6040516102e29190612306565b60405180910390f35b61030560048036038101906103009190612374565b611079565b005b61030f6111be565b60405161031c9190612306565b60405180910390f35b61032d6111d7565b60405161033a9190612043565b60405180910390f35b61035d600480360381019061035891906123bf565b6111dd565b005b5f8282905090505f810361039f576040517f521299a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f5b82821015610470575f8585848181106103be576103bd61240f565b5b90506020020160208101906103d39190612000565b90505f6103df826113bf565b905080836103ed9190612469565b92508060085f8467ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f8282546104239190612469565b925050819055507f820c8e3bbb3a7dc564043c69af61dc6be77e7cd44db2fc027c8f6ae3999459e9828260405161045b92919061249c565b60405180910390a150508160010191506103a2565b8060035f8282546104819190612469565b9250508190555061056a60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bf40fac16040518163ffffffff1660e01b81526004016104e39061251d565b6020604051808303815f875af11580156104ff573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610523919061254f565b827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166114f79092919063ffffffff16565b5050505050565b6006602052815f5260405f20602052805f5260405f205f915091509054906101000a900460ff1681565b5f7f339759585899103d2ace64958e37e18ccb0504652c81d4a1b8aa80fe2126ab95905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166316d6b5f66040518163ffffffff1660e01b8152600401602060405180830381865afa158015610629573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061064d91906125b5565b73ffffffffffffffffffffffffffffffffffffffff166391d1485482336040518363ffffffff1660e01b81526004016106879291906125ef565b602060405180830381865afa1580156106a2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106c69190612640565b6107095780336040517fbd4bf4d00000000000000000000000000000000000000000000000000000000081526004016107009291906125ef565b60405180910390fd5b61071282611576565b5050565b6008602052805f5260405f205f915090505481565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f7f339759585899103d2ace64958e37e18ccb0504652c81d4a1b8aa80fe2126ab95905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166316d6b5f66040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107de573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061080291906125b5565b73ffffffffffffffffffffffffffffffffffffffff166391d1485482336040518363ffffffff1660e01b815260040161083c9291906125ef565b602060405180830381865afa158015610857573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087b9190612640565b6108be5780336040517fbd4bf4d00000000000000000000000000000000000000000000000000000000081526004016108b59291906125ef565b60405180910390fd5b6108c6611655565b50565b5f5f8383905090505f810361090a576040517f521299a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b8181101561095c5761094485858381811061092a5761092961240f565b5b905060200201602081019061093f9190612000565b6113bf565b8361094f9190612469565b925080600101905061090c565b505092915050565b5f5f5f9054906101000a900460ff16905090565b6007602052805f5260405f205f915090505481565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166316d6b5f66040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a3f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a6391906125b5565b73ffffffffffffffffffffffffffffffffffffffff166391d148547f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929336040518363ffffffff1660e01b8152600401610abd9291906125ef565b602060405180830381865afa158015610ad8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610afc9190612640565b610b3f5780336040517f033f2f35000000000000000000000000000000000000000000000000000000008152600401610b369291906125ef565b60405180910390fd5b5f8367ffffffffffffffff1603610b82576040517f2668d7c200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6224ea0067ffffffffffffffff1682604001518360600151610ba4919061266b565b67ffffffffffffffff161015610be6576040517ff3708ccf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600160045f9054906101000a900467ffffffffffffffff16610c0991906126a6565b90508067ffffffffffffffff168467ffffffffffffffff161180610c9c57508067ffffffffffffffff168467ffffffffffffffff16148015610c9b57505f60055f600187610c57919061266b565b67ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f206002015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff16145b5b15610cd3576040517fda6f8b9200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60055f8667ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f206002015f9054906101000a900467ffffffffffffffff1690505f8167ffffffffffffffff1614158015610d3f57504267ffffffffffffffff168167ffffffffffffffff16105b15610d76576040517f7b5c59d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8167ffffffffffffffff168567ffffffffffffffff1603610dba578460045f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b8360055f8767ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f820151815f0155602082015181600101556040820151816002015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060608201518160020160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050507ee94bfe160b58f9fbaa4362116f5cdb3243862d5509320a079a046fc4f43a2e85855f0151866020015187604001518860600151604051610e979594939291906126e1565b60405180910390a15050505050565b5f7f339759585899103d2ace64958e37e18ccb0504652c81d4a1b8aa80fe2126ab95905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166316d6b5f66040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f34573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f5891906125b5565b73ffffffffffffffffffffffffffffffffffffffff166391d1485482336040518363ffffffff1660e01b8152600401610f929291906125ef565b602060405180830381865afa158015610fad573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fd19190612640565b6110145780336040517fbd4bf4d000000000000000000000000000000000000000000000000000000000815260040161100b9291906125ef565b60405180910390fd5b61101c6116b5565b50565b6005602052805f5260405f205f91509050805f015490806001015490806002015f9054906101000a900467ffffffffffffffff16908060020160089054906101000a900467ffffffffffffffff16905084565b6224ea0081565b611081611716565b611089611757565b5f8282905090505f81036110c9576040517f521299a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b818110156111b0576111a58484838181106110e9576110e861240f565b5b90506020028101906110fb919061273e565b5f01602081019061110c9190612000565b85858481811061111f5761111e61240f565b5b9050602002810190611131919061273e565b60200160208101906111439190611fd5565b8686858181106111565761115561240f565b5b9050602002810190611168919061273e565b6040013587878681811061117f5761117e61240f565b5b9050602002810190611191919061273e565b80606001906111a09190612765565b61179d565b8060010190506110cb565b50506111ba611c80565b5050565b60045f9054906101000a900467ffffffffffffffff1681565b60035481565b5f7f339759585899103d2ace64958e37e18ccb0504652c81d4a1b8aa80fe2126ab95905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166316d6b5f66040518163ffffffff1660e01b8152600401602060405180830381865afa15801561126b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061128f91906125b5565b73ffffffffffffffffffffffffffffffffffffffff166391d1485482336040518363ffffffff1660e01b81526004016112c99291906125ef565b602060405180830381865afa1580156112e4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113089190612640565b61134b5780336040517fbd4bf4d00000000000000000000000000000000000000000000000000000000081526004016113429291906125ef565b60405180910390fd5b611353611c89565b7f97378fb5567fc42081604ba67c6f77071407a147bca08a9a33c584ba0435146b848484604051611386939291906127c7565b60405180910390a16113b983838673ffffffffffffffffffffffffffffffffffffffff166114f79092919063ffffffff16565b50505050565b5f5f60055f8467ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f206040518060800160405290815f820154815260200160018201548152602001600282015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016002820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff168152505090504267ffffffffffffffff16816060015167ffffffffffffffff16106114ba576040517f73593a9900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60085f8467ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205481602001516114ef91906127fc565b915050919050565b611571838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb858560405160240161152a92919061282f565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611cc9565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036115db576040517f4b054c8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fd797ece758027d865d32be7a552cd5d3ae1637d8d25d9c3c83b373020c1683b78160405161164a9190612856565b60405180910390a150565b61165d611c89565b5f5f5f6101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61169e611d64565b6040516116ab9190612856565b60405180910390a1565b6116bd611716565b60015f5f6101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586116ff611d64565b60405161170c9190612856565b60405180910390a1565b61171e610964565b15611755576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600260015403611793576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600181905550565b5f60055f8767ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f206040518060800160405290815f820154815260200160018201548152602001600282015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016002820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff168152505090505f429050816060015167ffffffffffffffff168167ffffffffffffffff16111561189c576040517ff3708ccf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816040015167ffffffffffffffff168167ffffffffffffffff1610156118ee576040517f6f312cbd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60065f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8867ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611992576040517f646cf55800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8787876040516020016119a89392919061286f565b604051602081830303815290604052805190602001206040516020016119ce91906128c4565b6040516020818303038152906040528051906020012090505f611a358686808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f82011690508083019250505050505050855f015184611d6b565b905080611a6e576040517f7fcdd1f400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8660035f828254611a7f9190612469565b925050819055508660085f8b67ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f828254611aba9190612469565b92505081905550836020015160085f8b67ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f20541115611b24576040517fdcb3525e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160065f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8b67ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508660075f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611be89190612469565b925050819055507ffff3d9821e89591725804007b3d7480cc9e6471ffaea3979d62afba3dbdd75f1898989604051611c229392919061286f565b60405180910390a1611c7588887f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166114f79092919063ffffffff16565b505050505050505050565b60018081905550565b611c91610964565b611cc7576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f5f60205f8451602086015f885af180611ce8576040513d5f823e3d81fd5b3d92505f519150505f8214611d01576001811415611d1c565b5f8473ffffffffffffffffffffffffffffffffffffffff163b145b15611d5e57836040517f5274afe7000000000000000000000000000000000000000000000000000000008152600401611d559190612856565b60405180910390fd5b50505050565b5f33905090565b5f82611d778584611d81565b1490509392505050565b5f5f8290505f5f90505b8451811015611dc757611db882868381518110611dab57611daa61240f565b5b6020026020010151611dd2565b91508080600101915050611d8b565b508091505092915050565b5f818310611de957611de48284611dfc565b611df4565b611df38383611dfc565b5b905092915050565b5f825f528160205260405f20905092915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f840112611e4257611e41611e21565b5b8235905067ffffffffffffffff811115611e5f57611e5e611e25565b5b602083019150836020820283011115611e7b57611e7a611e29565b5b9250929050565b5f5f60208385031215611e9857611e97611e19565b5b5f83013567ffffffffffffffff811115611eb557611eb4611e1d565b5b611ec185828601611e2d565b92509250509250929050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611ef682611ecd565b9050919050565b611f0681611eec565b8114611f10575f5ffd5b50565b5f81359050611f2181611efd565b92915050565b5f67ffffffffffffffff82169050919050565b611f4381611f27565b8114611f4d575f5ffd5b50565b5f81359050611f5e81611f3a565b92915050565b5f5f60408385031215611f7a57611f79611e19565b5b5f611f8785828601611f13565b9250506020611f9885828601611f50565b9150509250929050565b5f8115159050919050565b611fb681611fa2565b82525050565b5f602082019050611fcf5f830184611fad565b92915050565b5f60208284031215611fea57611fe9611e19565b5b5f611ff784828501611f13565b91505092915050565b5f6020828403121561201557612014611e19565b5b5f61202284828501611f50565b91505092915050565b5f819050919050565b61203d8161202b565b82525050565b5f6020820190506120565f830184612034565b92915050565b5f819050919050565b5f61207f61207a61207584611ecd565b61205c565b611ecd565b9050919050565b5f61209082612065565b9050919050565b5f6120a182612086565b9050919050565b6120b181612097565b82525050565b5f6020820190506120ca5f8301846120a8565b92915050565b5f6120da82612086565b9050919050565b6120ea816120d0565b82525050565b5f6020820190506121035f8301846120e1565b92915050565b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6121538261210d565b810181811067ffffffffffffffff821117156121725761217161211d565b5b80604052505050565b5f612184611e10565b9050612190828261214a565b919050565b5f819050919050565b6121a781612195565b81146121b1575f5ffd5b50565b5f813590506121c28161219e565b92915050565b6121d18161202b565b81146121db575f5ffd5b50565b5f813590506121ec816121c8565b92915050565b5f6080828403121561220757612206612109565b5b612211608061217b565b90505f612220848285016121b4565b5f830152506020612233848285016121de565b602083015250604061224784828501611f50565b604083015250606061225b84828501611f50565b60608301525092915050565b5f5f60a0838503121561227d5761227c611e19565b5b5f61228a85828601611f50565b925050602061229b858286016121f2565b9150509250929050565b6122ae81612195565b82525050565b6122bd81611f27565b82525050565b5f6080820190506122d65f8301876122a5565b6122e36020830186612034565b6122f060408301856122b4565b6122fd60608301846122b4565b95945050505050565b5f6020820190506123195f8301846122b4565b92915050565b5f5f83601f84011261233457612333611e21565b5b8235905067ffffffffffffffff81111561235157612350611e25565b5b60208301915083602082028301111561236d5761236c611e29565b5b9250929050565b5f5f6020838503121561238a57612389611e19565b5b5f83013567ffffffffffffffff8111156123a7576123a6611e1d565b5b6123b38582860161231f565b92509250509250929050565b5f5f5f606084860312156123d6576123d5611e19565b5b5f6123e386828701611f13565b93505060206123f486828701611f13565b9250506040612405868287016121de565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6124738261202b565b915061247e8361202b565b92508282019050808211156124965761249561243c565b5b92915050565b5f6040820190506124af5f8301856122b4565b6124bc6020830184612034565b9392505050565b5f82825260208201905092915050565b7f466565436f6c6c6563746f7200000000000000000000000000000000000000005f82015250565b5f612507600c836124c3565b9150612512826124d3565b602082019050919050565b5f6020820190508181035f830152612534816124fb565b9050919050565b5f8151905061254981611efd565b92915050565b5f6020828403121561256457612563611e19565b5b5f6125718482850161253b565b91505092915050565b5f61258482611eec565b9050919050565b6125948161257a565b811461259e575f5ffd5b50565b5f815190506125af8161258b565b92915050565b5f602082840312156125ca576125c9611e19565b5b5f6125d7848285016125a1565b91505092915050565b6125e981611eec565b82525050565b5f6040820190506126025f8301856122a5565b61260f60208301846125e0565b9392505050565b61261f81611fa2565b8114612629575f5ffd5b50565b5f8151905061263a81612616565b92915050565b5f6020828403121561265557612654611e19565b5b5f6126628482850161262c565b91505092915050565b5f61267582611f27565b915061268083611f27565b9250828203905067ffffffffffffffff8111156126a05761269f61243c565b5b92915050565b5f6126b082611f27565b91506126bb83611f27565b9250828201905067ffffffffffffffff8111156126db576126da61243c565b5b92915050565b5f60a0820190506126f45f8301886122b4565b61270160208301876122a5565b61270e6040830186612034565b61271b60608301856122b4565b61272860808301846122b4565b9695505050505050565b5f5ffd5b5f5ffd5b5f5ffd5b5f8235600160800383360303811261275957612758612732565b5b80830191505092915050565b5f5f8335600160200384360303811261278157612780612732565b5b80840192508235915067ffffffffffffffff8211156127a3576127a2612736565b5b6020830192506020820236038313156127bf576127be61273a565b5b509250929050565b5f6060820190506127da5f8301866125e0565b6127e760208301856125e0565b6127f46040830184612034565b949350505050565b5f6128068261202b565b91506128118361202b565b92508282039050818111156128295761282861243c565b5b92915050565b5f6040820190506128425f8301856125e0565b61284f6020830184612034565b9392505050565b5f6020820190506128695f8301846125e0565b92915050565b5f6060820190506128825f8301866122b4565b61288f60208301856125e0565b61289c6040830184612034565b949350505050565b5f819050919050565b6128be6128b982612195565b6128a4565b82525050565b5f6128cf82846128ad565b6020820191508190509291505056fea264697066735822122050caad6b12330dfbba1972f1894527103e41caa79cc71bfd0350692a7a989da164736f6c634300081e0033",
    "sourceMap": "714:11921:88:-:0;;;1613:1;1585:29;;;;;;;;;;;;;;;;;;;;5857:140;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1857:1:40;2061:7;:21;;;;5921:37:88;5941:16;5921:19;;;:37;;:::i;:::-;5983:6;5968:22;;;;;;;;;;5857:140;;714:11921;;12335:298;12444:1;12414:32;;:18;:32;;;12410:96;;12469:26;;;;;;;;;;;;;;12410:96;12550:18;12515:15;;:54;;;;;;;;;;;;;;;;;;12584:42;12607:18;12584:42;;;;;;:::i;:::-;;;;;;;;12335:298;:::o;88:117:92:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:143::-;753:5;784:6;778:13;769:22;;800:33;827:5;800:33;:::i;:::-;696:143;;;;:::o;845:507::-;924:6;932;981:2;969:9;960:7;956:23;952:32;949:119;;;987:79;;:::i;:::-;949:119;1107:1;1132:64;1188:7;1179:6;1168:9;1164:22;1132:64;:::i;:::-;1122:74;;1078:128;1245:2;1271:64;1327:7;1318:6;1307:9;1303:22;1271:64;:::i;:::-;1261:74;;1216:129;845:507;;;;;:::o;1358:118::-;1445:24;1463:5;1445:24;:::i;:::-;1440:3;1433:37;1358:118;;:::o;1482:222::-;1575:4;1613:2;1602:9;1598:18;1590:26;;1626:71;1694:1;1683:9;1679:17;1670:6;1626:71;:::i;:::-;1482:222;;;;:::o;714:11921:88:-;;;;;;;;;;;;;;;;;;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x608060405234801561000f575f5ffd5b5060043610610114575f3560e01c806382bfefc8116100a0578063ac4746ab1161006f578063ac4746ab146102cd578063c2ef4a22146102eb578063c43b540f14610307578063d54ad2a114610325578063d687d0b31461034357610114565b806382bfefc81461025657806383f62748146102745780638456cb5914610290578063a394ee921461029a57610114565b80632954018c116100e75780632954018c146101b05780633f4ba83a146101ce57806340df94be146101d85780635c975abb146102085780637c03bb2e1461022657610114565b8063148d069814610118578063182f89da146101345780631a5fa2e3146101645780632055457b14610180575b5f5ffd5b610132600480360381019061012d9190611e82565b61035f565b005b61014e60048036038101906101499190611f64565b610571565b60405161015b9190611fbc565b60405180910390f35b61017e60048036038101906101799190611fd5565b61059b565b005b61019a60048036038101906101959190612000565b610716565b6040516101a79190612043565b60405180910390f35b6101b861072b565b6040516101c591906120b7565b60405180910390f35b6101d6610750565b005b6101f260048036038101906101ed9190611e82565b6108c9565b6040516101ff9190612043565b60405180910390f35b610210610964565b60405161021d9190611fbc565b60405180910390f35b610240600480360381019061023b9190611fd5565b610978565b60405161024d9190612043565b60405180910390f35b61025e61098d565b60405161026b91906120f0565b60405180910390f35b61028e60048036038101906102899190612267565b6109b1565b005b610298610ea6565b005b6102b460048036038101906102af9190612000565b61101f565b6040516102c494939291906122c3565b60405180910390f35b6102d5611072565b6040516102e29190612306565b60405180910390f35b61030560048036038101906103009190612374565b611079565b005b61030f6111be565b60405161031c9190612306565b60405180910390f35b61032d6111d7565b60405161033a9190612043565b60405180910390f35b61035d600480360381019061035891906123bf565b6111dd565b005b5f8282905090505f810361039f576040517f521299a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f5b82821015610470575f8585848181106103be576103bd61240f565b5b90506020020160208101906103d39190612000565b90505f6103df826113bf565b905080836103ed9190612469565b92508060085f8467ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f8282546104239190612469565b925050819055507f820c8e3bbb3a7dc564043c69af61dc6be77e7cd44db2fc027c8f6ae3999459e9828260405161045b92919061249c565b60405180910390a150508160010191506103a2565b8060035f8282546104819190612469565b9250508190555061056a60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bf40fac16040518163ffffffff1660e01b81526004016104e39061251d565b6020604051808303815f875af11580156104ff573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610523919061254f565b827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166114f79092919063ffffffff16565b5050505050565b6006602052815f5260405f20602052805f5260405f205f915091509054906101000a900460ff1681565b5f7f339759585899103d2ace64958e37e18ccb0504652c81d4a1b8aa80fe2126ab95905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166316d6b5f66040518163ffffffff1660e01b8152600401602060405180830381865afa158015610629573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061064d91906125b5565b73ffffffffffffffffffffffffffffffffffffffff166391d1485482336040518363ffffffff1660e01b81526004016106879291906125ef565b602060405180830381865afa1580156106a2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106c69190612640565b6107095780336040517fbd4bf4d00000000000000000000000000000000000000000000000000000000081526004016107009291906125ef565b60405180910390fd5b61071282611576565b5050565b6008602052805f5260405f205f915090505481565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f7f339759585899103d2ace64958e37e18ccb0504652c81d4a1b8aa80fe2126ab95905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166316d6b5f66040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107de573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061080291906125b5565b73ffffffffffffffffffffffffffffffffffffffff166391d1485482336040518363ffffffff1660e01b815260040161083c9291906125ef565b602060405180830381865afa158015610857573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087b9190612640565b6108be5780336040517fbd4bf4d00000000000000000000000000000000000000000000000000000000081526004016108b59291906125ef565b60405180910390fd5b6108c6611655565b50565b5f5f8383905090505f810361090a576040517f521299a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b8181101561095c5761094485858381811061092a5761092961240f565b5b905060200201602081019061093f9190612000565b6113bf565b8361094f9190612469565b925080600101905061090c565b505092915050565b5f5f5f9054906101000a900460ff16905090565b6007602052805f5260405f205f915090505481565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166316d6b5f66040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a3f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a6391906125b5565b73ffffffffffffffffffffffffffffffffffffffff166391d148547f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929336040518363ffffffff1660e01b8152600401610abd9291906125ef565b602060405180830381865afa158015610ad8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610afc9190612640565b610b3f5780336040517f033f2f35000000000000000000000000000000000000000000000000000000008152600401610b369291906125ef565b60405180910390fd5b5f8367ffffffffffffffff1603610b82576040517f2668d7c200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6224ea0067ffffffffffffffff1682604001518360600151610ba4919061266b565b67ffffffffffffffff161015610be6576040517ff3708ccf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600160045f9054906101000a900467ffffffffffffffff16610c0991906126a6565b90508067ffffffffffffffff168467ffffffffffffffff161180610c9c57508067ffffffffffffffff168467ffffffffffffffff16148015610c9b57505f60055f600187610c57919061266b565b67ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f206002015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff16145b5b15610cd3576040517fda6f8b9200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60055f8667ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f206002015f9054906101000a900467ffffffffffffffff1690505f8167ffffffffffffffff1614158015610d3f57504267ffffffffffffffff168167ffffffffffffffff16105b15610d76576040517f7b5c59d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8167ffffffffffffffff168567ffffffffffffffff1603610dba578460045f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b8360055f8767ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f820151815f0155602082015181600101556040820151816002015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060608201518160020160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050507ee94bfe160b58f9fbaa4362116f5cdb3243862d5509320a079a046fc4f43a2e85855f0151866020015187604001518860600151604051610e979594939291906126e1565b60405180910390a15050505050565b5f7f339759585899103d2ace64958e37e18ccb0504652c81d4a1b8aa80fe2126ab95905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166316d6b5f66040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f34573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f5891906125b5565b73ffffffffffffffffffffffffffffffffffffffff166391d1485482336040518363ffffffff1660e01b8152600401610f929291906125ef565b602060405180830381865afa158015610fad573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fd19190612640565b6110145780336040517fbd4bf4d000000000000000000000000000000000000000000000000000000000815260040161100b9291906125ef565b60405180910390fd5b61101c6116b5565b50565b6005602052805f5260405f205f91509050805f015490806001015490806002015f9054906101000a900467ffffffffffffffff16908060020160089054906101000a900467ffffffffffffffff16905084565b6224ea0081565b611081611716565b611089611757565b5f8282905090505f81036110c9576040517f521299a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b818110156111b0576111a58484838181106110e9576110e861240f565b5b90506020028101906110fb919061273e565b5f01602081019061110c9190612000565b85858481811061111f5761111e61240f565b5b9050602002810190611131919061273e565b60200160208101906111439190611fd5565b8686858181106111565761115561240f565b5b9050602002810190611168919061273e565b6040013587878681811061117f5761117e61240f565b5b9050602002810190611191919061273e565b80606001906111a09190612765565b61179d565b8060010190506110cb565b50506111ba611c80565b5050565b60045f9054906101000a900467ffffffffffffffff1681565b60035481565b5f7f339759585899103d2ace64958e37e18ccb0504652c81d4a1b8aa80fe2126ab95905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166316d6b5f66040518163ffffffff1660e01b8152600401602060405180830381865afa15801561126b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061128f91906125b5565b73ffffffffffffffffffffffffffffffffffffffff166391d1485482336040518363ffffffff1660e01b81526004016112c99291906125ef565b602060405180830381865afa1580156112e4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113089190612640565b61134b5780336040517fbd4bf4d00000000000000000000000000000000000000000000000000000000081526004016113429291906125ef565b60405180910390fd5b611353611c89565b7f97378fb5567fc42081604ba67c6f77071407a147bca08a9a33c584ba0435146b848484604051611386939291906127c7565b60405180910390a16113b983838673ffffffffffffffffffffffffffffffffffffffff166114f79092919063ffffffff16565b50505050565b5f5f60055f8467ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f206040518060800160405290815f820154815260200160018201548152602001600282015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016002820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff168152505090504267ffffffffffffffff16816060015167ffffffffffffffff16106114ba576040517f73593a9900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60085f8467ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205481602001516114ef91906127fc565b915050919050565b611571838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb858560405160240161152a92919061282f565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611cc9565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036115db576040517f4b054c8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fd797ece758027d865d32be7a552cd5d3ae1637d8d25d9c3c83b373020c1683b78160405161164a9190612856565b60405180910390a150565b61165d611c89565b5f5f5f6101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61169e611d64565b6040516116ab9190612856565b60405180910390a1565b6116bd611716565b60015f5f6101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586116ff611d64565b60405161170c9190612856565b60405180910390a1565b61171e610964565b15611755576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600260015403611793576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600181905550565b5f60055f8767ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f206040518060800160405290815f820154815260200160018201548152602001600282015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016002820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff168152505090505f429050816060015167ffffffffffffffff168167ffffffffffffffff16111561189c576040517ff3708ccf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816040015167ffffffffffffffff168167ffffffffffffffff1610156118ee576040517f6f312cbd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60065f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8867ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611992576040517f646cf55800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8787876040516020016119a89392919061286f565b604051602081830303815290604052805190602001206040516020016119ce91906128c4565b6040516020818303038152906040528051906020012090505f611a358686808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f82011690508083019250505050505050855f015184611d6b565b905080611a6e576040517f7fcdd1f400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8660035f828254611a7f9190612469565b925050819055508660085f8b67ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f828254611aba9190612469565b92505081905550836020015160085f8b67ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f20541115611b24576040517fdcb3525e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160065f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8b67ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508660075f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611be89190612469565b925050819055507ffff3d9821e89591725804007b3d7480cc9e6471ffaea3979d62afba3dbdd75f1898989604051611c229392919061286f565b60405180910390a1611c7588887f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166114f79092919063ffffffff16565b505050505050505050565b60018081905550565b611c91610964565b611cc7576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f5f60205f8451602086015f885af180611ce8576040513d5f823e3d81fd5b3d92505f519150505f8214611d01576001811415611d1c565b5f8473ffffffffffffffffffffffffffffffffffffffff163b145b15611d5e57836040517f5274afe7000000000000000000000000000000000000000000000000000000008152600401611d559190612856565b60405180910390fd5b50505050565b5f33905090565b5f82611d778584611d81565b1490509392505050565b5f5f8290505f5f90505b8451811015611dc757611db882868381518110611dab57611daa61240f565b5b6020026020010151611dd2565b91508080600101915050611d8b565b508091505092915050565b5f818310611de957611de48284611dfc565b611df4565b611df38383611dfc565b5b905092915050565b5f825f528160205260405f20905092915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f840112611e4257611e41611e21565b5b8235905067ffffffffffffffff811115611e5f57611e5e611e25565b5b602083019150836020820283011115611e7b57611e7a611e29565b5b9250929050565b5f5f60208385031215611e9857611e97611e19565b5b5f83013567ffffffffffffffff811115611eb557611eb4611e1d565b5b611ec185828601611e2d565b92509250509250929050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611ef682611ecd565b9050919050565b611f0681611eec565b8114611f10575f5ffd5b50565b5f81359050611f2181611efd565b92915050565b5f67ffffffffffffffff82169050919050565b611f4381611f27565b8114611f4d575f5ffd5b50565b5f81359050611f5e81611f3a565b92915050565b5f5f60408385031215611f7a57611f79611e19565b5b5f611f8785828601611f13565b9250506020611f9885828601611f50565b9150509250929050565b5f8115159050919050565b611fb681611fa2565b82525050565b5f602082019050611fcf5f830184611fad565b92915050565b5f60208284031215611fea57611fe9611e19565b5b5f611ff784828501611f13565b91505092915050565b5f6020828403121561201557612014611e19565b5b5f61202284828501611f50565b91505092915050565b5f819050919050565b61203d8161202b565b82525050565b5f6020820190506120565f830184612034565b92915050565b5f819050919050565b5f61207f61207a61207584611ecd565b61205c565b611ecd565b9050919050565b5f61209082612065565b9050919050565b5f6120a182612086565b9050919050565b6120b181612097565b82525050565b5f6020820190506120ca5f8301846120a8565b92915050565b5f6120da82612086565b9050919050565b6120ea816120d0565b82525050565b5f6020820190506121035f8301846120e1565b92915050565b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6121538261210d565b810181811067ffffffffffffffff821117156121725761217161211d565b5b80604052505050565b5f612184611e10565b9050612190828261214a565b919050565b5f819050919050565b6121a781612195565b81146121b1575f5ffd5b50565b5f813590506121c28161219e565b92915050565b6121d18161202b565b81146121db575f5ffd5b50565b5f813590506121ec816121c8565b92915050565b5f6080828403121561220757612206612109565b5b612211608061217b565b90505f612220848285016121b4565b5f830152506020612233848285016121de565b602083015250604061224784828501611f50565b604083015250606061225b84828501611f50565b60608301525092915050565b5f5f60a0838503121561227d5761227c611e19565b5b5f61228a85828601611f50565b925050602061229b858286016121f2565b9150509250929050565b6122ae81612195565b82525050565b6122bd81611f27565b82525050565b5f6080820190506122d65f8301876122a5565b6122e36020830186612034565b6122f060408301856122b4565b6122fd60608301846122b4565b95945050505050565b5f6020820190506123195f8301846122b4565b92915050565b5f5f83601f84011261233457612333611e21565b5b8235905067ffffffffffffffff81111561235157612350611e25565b5b60208301915083602082028301111561236d5761236c611e29565b5b9250929050565b5f5f6020838503121561238a57612389611e19565b5b5f83013567ffffffffffffffff8111156123a7576123a6611e1d565b5b6123b38582860161231f565b92509250509250929050565b5f5f5f606084860312156123d6576123d5611e19565b5b5f6123e386828701611f13565b93505060206123f486828701611f13565b9250506040612405868287016121de565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6124738261202b565b915061247e8361202b565b92508282019050808211156124965761249561243c565b5b92915050565b5f6040820190506124af5f8301856122b4565b6124bc6020830184612034565b9392505050565b5f82825260208201905092915050565b7f466565436f6c6c6563746f7200000000000000000000000000000000000000005f82015250565b5f612507600c836124c3565b9150612512826124d3565b602082019050919050565b5f6020820190508181035f830152612534816124fb565b9050919050565b5f8151905061254981611efd565b92915050565b5f6020828403121561256457612563611e19565b5b5f6125718482850161253b565b91505092915050565b5f61258482611eec565b9050919050565b6125948161257a565b811461259e575f5ffd5b50565b5f815190506125af8161258b565b92915050565b5f602082840312156125ca576125c9611e19565b5b5f6125d7848285016125a1565b91505092915050565b6125e981611eec565b82525050565b5f6040820190506126025f8301856122a5565b61260f60208301846125e0565b9392505050565b61261f81611fa2565b8114612629575f5ffd5b50565b5f8151905061263a81612616565b92915050565b5f6020828403121561265557612654611e19565b5b5f6126628482850161262c565b91505092915050565b5f61267582611f27565b915061268083611f27565b9250828203905067ffffffffffffffff8111156126a05761269f61243c565b5b92915050565b5f6126b082611f27565b91506126bb83611f27565b9250828201905067ffffffffffffffff8111156126db576126da61243c565b5b92915050565b5f60a0820190506126f45f8301886122b4565b61270160208301876122a5565b61270e6040830186612034565b61271b60608301856122b4565b61272860808301846122b4565b9695505050505050565b5f5ffd5b5f5ffd5b5f5ffd5b5f8235600160800383360303811261275957612758612732565b5b80830191505092915050565b5f5f8335600160200384360303811261278157612780612732565b5b80840192508235915067ffffffffffffffff8211156127a3576127a2612736565b5b6020830192506020820236038313156127bf576127be61273a565b5b509250929050565b5f6060820190506127da5f8301866125e0565b6127e760208301856125e0565b6127f46040830184612034565b949350505050565b5f6128068261202b565b91506128118361202b565b92508282039050818111156128295761282861243c565b5b92915050565b5f6040820190506128425f8301856125e0565b61284f6020830184612034565b9392505050565b5f6020820190506128695f8301846125e0565b92915050565b5f6060820190506128825f8301866122b4565b61288f60208301856125e0565b61289c6040830184612034565b949350505050565b5f819050919050565b6128be6128b982612195565b6128a4565b82525050565b5f6128cf82846128ad565b6020820191508190509291505056fea264697066735822122050caad6b12330dfbba1972f1894527103e41caa79cc71bfd0350692a7a989da164736f6c634300081e0033",
    "sourceMap": "714:11921:88:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6727:688;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1772:88;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9744:136;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2061:75;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1243:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10204:70;;;:::i;:::-;;7633:337;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1726:84:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1927:75:88;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1430:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8233:924;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10009:66;;;:::i;:::-;;1654:67;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;1338:45;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6232:361;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1585:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1517:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9375:217;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6727:688;6806:11;6820:9;;:16;;6806:30;;6857:1;6850:3;:8;6846:33;;6867:12;;;;;;;;;;;;;;6846:33;6889:9;6908:27;6945:326;6956:3;6952:1;:7;6945:326;;;6980:14;6997:9;;7007:1;6997:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;6980:29;;7023:22;7048:32;7072:7;7048:23;:32::i;:::-;7023:57;;7117:14;7094:37;;;;;:::i;:::-;;;7178:14;7145:20;:29;7166:7;7145:29;;;;;;;;;;;;;;;;:47;;;;;;;:::i;:::-;;;;;;;;7212:48;7236:7;7245:14;7212:48;;;;;;;:::i;:::-;;;;;;;;6966:305;;6961:3;;;;;6945:326;;;7296:19;7280:12;;:35;;;;;;;:::i;:::-;;;;;;;;7325:83;7344:15;;;;;;;;;;;:26;;;:42;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7388:19;7325:5;:18;;;;:83;;;;;:::i;:::-;6796:619;;;6727:688;;:::o;1772:88::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9744:136::-;5005:12;272:28:87;5005:36:88;;5056:15;;;;;;;;;;;:35;;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:45;;;5102:4;5108:10;5056:63;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5051:146;;5169:4;5175:10;5142:44;;;;;;;;;;;;:::i;:::-;;;;;;;;5051:146;9834:39:::1;9854:18;9834:19;:39::i;:::-;4995:219:::0;9744:136;:::o;2061:75::-;;;;;;;;;;;;;;;;;:::o;1243:39::-;;;;;;;;;;;;;:::o;10204:70::-;5005:12;272:28:87;5005:36:88;;5056:15;;;;;;;;;;;:35;;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:45;;;5102:4;5108:10;5056:63;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5051:146;;5169:4;5175:10;5142:44;;;;;;;;;;;;:::i;:::-;;;;;;;;5051:146;10257:10:::1;:8;:10::i;:::-;4995:219:::0;10204:70::o;7633:337::-;7717:27;7756:11;7770:9;;:16;;7756:30;;7807:1;7800:3;:8;7796:33;;7817:12;;;;;;;;;;;;;;7796:33;7839:9;7858:106;7869:3;7865:1;:7;7858:106;;;7916:37;7940:9;;7950:1;7940:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;7916:23;:37::i;:::-;7893:60;;;;;:::i;:::-;;;7874:3;;;;;7858:106;;;7746:224;;7633:337;;;;:::o;1726:84:39:-;1773:4;1796:7;;;;;;;;;;;1789:14;;1726:84;:::o;1927:75:88:-;;;;;;;;;;;;;;;;;:::o;1430:29::-;;;:::o;8233:924::-;5325:12;482:26:87;5325:34:88;;5374:15;;;;;;;;;;;:35;;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:45;;;482:26:87;5441:10:88;5374:78;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5369:159;;5500:4;5506:10;5475:42;;;;;;;;;;;;:::i;:::-;;;;;;;;5369:159;8358:1:::1;8348:6;:11;;::::0;8344:45:::1;;8368:21;;;;;;;;;;;;;;8344:45;1376:7;8403:61;;8428:11;:21;;;8403:11;:22;;;:46;;;;:::i;:::-;:61;;;8399:88;;;8473:14;;;;;;;;;;;;;;8399:88;8497:16;8530:1;8516:11;;;;;;;;;;;:15;;;;:::i;:::-;8497:34;;8554:9;8545:18;;:6;:18;;;:85;;;;8578:9;8568:19;;:6;:19;;;:61;;;;;8628:1;8591:11;:23;8612:1;8603:6;:10;;;;:::i;:::-;8591:23;;;;;;;;;;;;;;;:33;;;;;;;;;;;;:38;;;8568:61;8545:85;8541:143;;;8653:20;;;;;;;;;;;;;;8541:143;8693:21;8717:11;:19;8729:6;8717:19;;;;;;;;;;;;;;;:29;;;;;;;;;;;;8693:53;;8778:1;8760:14;:19;;;;:63;;;;;8807:15;8783:40;;:14;:40;;;8760:63;8756:121;;;8846:20;;;;;;;;;;;;;;8756:121;8900:9;8890:19;;:6;:19;;::::0;8886:70:::1;;8939:6;8925:11;;:20;;;;;;;;;;;;;;;;;;8886:70;8987:11;8965;:19;8977:6;8965:19;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9013:137;9044:6;9052:11;:16;;;9070:11;:23;;;9095:11;:21;;;9118:11;:22;;;9013:137;;;;;;;;;;:::i;:::-;;;;;;;;8334:823;;5315:230:::0;8233:924;;:::o;10009:66::-;5005:12;272:28:87;5005:36:88;;5056:15;;;;;;;;;;;:35;;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:45;;;5102:4;5108:10;5056:63;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5051:146;;5169:4;5175:10;5142:44;;;;;;;;;;;;:::i;:::-;;;;;;;;5051:146;10060:8:::1;:6;:8::i;:::-;4995:219:::0;10009:66::o;1654:67::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1338:45::-;1376:7;1338:45;:::o;6232:361::-;1350:19:39;:17;:19::i;:::-;2500:21:40::1;:19;:21::i;:::-;6332:11:88::2;6346;;:18;;6332:32;;6385:1;6378:3;:8:::0;6374:33:::2;;6395:12;;;;;;;;;;;;;;6374:33;6417:9;6436:151;6447:3;6443:1;:7;6436:151;;;6471:105;6478:11;;6490:1;6478:14;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;:22;;;;;;;;;;:::i;:::-;6502:11;;6514:1;6502:14;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;:22;;;;;;;;;;:::i;:::-;6526:11;;6538:1;6526:14;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;:21;;;6549:11;;6561:1;6549:14;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;:26;;;;;;;;:::i;:::-;6471:6;:105::i;:::-;6452:3;;;;;6436:151;;;6322:271;;2542:20:40::1;:18;:20::i;:::-;6232:361:88::0;;:::o;1585:29::-;;;;;;;;;;;;;:::o;1517:27::-;;;;:::o;9375:217::-;5005:12;272:28:87;5005:36:88;;5056:15;;;;;;;;;;;:35;;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:45;;;5102:4;5108:10;5056:63;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5051:146;;5169:4;5175:10;5142:44;;;;;;;;;;;;:::i;:::-;;;;;;;;5051:146;1597:16:39::1;:14;:16::i;:::-;9496:38:88::2;9513:6;9521:3;9526:7;9496:38;;;;;;;;:::i;:::-;;;;;;;;9544:41;9572:3;9577:7;9551:6;9544:27;;;;:41;;;;;:::i;:::-;4995:219:::0;9375:217;;;:::o;11877:348::-;11949:27;11988:29;12020:11;:21;12032:8;12020:21;;;;;;;;;;;;;;;11988:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12088:15;12055:49;;:11;:22;;;:49;;;12051:79;;12113:17;;;;;;;;;;;;;;12051:79;12188:20;:30;12209:8;12188:30;;;;;;;;;;;;;;;;12162:11;:23;;;:56;;;;:::i;:::-;12140:78;;11978:247;11877:348;;;:::o;1219:160:33:-;1301:71;1321:5;1343;:14;;;1360:2;1364:5;1328:43;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1301:19;:71::i;:::-;1219:160;;;:::o;12335:298:88:-;12444:1;12414:32;;:18;:32;;;12410:96;;12469:26;;;;;;;;;;;;;;12410:96;12550:18;12515:15;;:54;;;;;;;;;;;;;;;;;;12584:42;12607:18;12584:42;;;;;;:::i;:::-;;;;;;;;12335:298;:::o;2586:117:39:-;1597:16;:14;:16::i;:::-;2654:5:::1;2644:7;;:15;;;;;;;;;;;;;;;;;;2674:22;2683:12;:10;:12::i;:::-;2674:22;;;;;;:::i;:::-;;;;;;;;2586:117::o:0;2339:115::-;1350:19;:17;:19::i;:::-;2408:4:::1;2398:7;;:14;;;;;;;;;;;;;;;;;;2427:20;2434:12;:10;:12::i;:::-;2427:20;;;;;;:::i;:::-;;;;;;;;2339:115::o:0;1878:128::-;1943:8;:6;:8::i;:::-;1939:61;;;1974:15;;;;;;;;;;;;;;1939:61;1878:128::o;2575:307:40:-;1899:1;2702:7;;:18;2698:86;;2743:30;;;;;;;;;;;;;;2698:86;1899:1;2858:7;:17;;;;2575:307::o;10636:1235:88:-;10749:29;10781:11;:21;10793:8;10781:21;;;;;;;;;;;;;;;10749:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10813:22;10845:15;10813:48;;10893:11;:22;;;10875:40;;:15;:40;;;10871:67;;;10924:14;;;;;;;;;;;;;;10871:67;10970:11;:21;;;10952:39;;:15;:39;;;10948:64;;;11000:12;;;;;;;;;;;;;;10948:64;11026:10;:20;11037:8;11026:20;;;;;;;;;;;;;;;:30;11047:8;11026:30;;;;;;;;;;;;;;;;;;;;;;;;;11022:59;;;11065:16;;;;;;;;;;;;;;11022:59;11251:12;11310:8;11320;11330:7;11299:39;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;11289:50;;;;;;11276:64;;;;;;;;:::i;:::-;;;;;;;;;;;;;11266:75;;;;;;11251:90;;11351:17;11371:50;11390:6;;11371:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11398:11;:16;;;11416:4;11371:18;:50::i;:::-;11351:70;;11436:12;11431:40;;11457:14;;;;;;;;;;;;;;11431:40;11497:7;11481:12;;:23;;;;;;;:::i;:::-;;;;;;;;11548:7;11514:20;:30;11535:8;11514:30;;;;;;;;;;;;;;;;:41;;;;;;;:::i;:::-;;;;;;;;11602:11;:23;;;11569:20;:30;11590:8;11569:30;;;;;;;;;;;;;;;;:56;11565:96;;;11634:27;;;;;;;;;;;;;;11565:96;11705:4;11672:10;:20;11683:8;11672:20;;;;;;;;;;;;;;;:30;11693:8;11672:30;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;11752:7;11719:19;:29;11739:8;11719:29;;;;;;;;;;;;;;;;:40;;;;;;;:::i;:::-;;;;;;;;11774:43;11789:8;11799;11809:7;11774:43;;;;;;;;:::i;:::-;;;;;;;;11827:37;11846:8;11856:7;11827:5;:18;;;;:37;;;;;:::i;:::-;10739:1132;;;;10636:1235;;;;;:::o;2888:208:40:-;1857:1;3068:7;:21;;;;2888:208::o;2078:126:39:-;2141:8;:6;:8::i;:::-;2136:62;;2172:15;;;;;;;;;;;;;;2136:62;2078:126::o;8370:720:33:-;8450:18;8478:19;8616:4;8613:1;8606:4;8600:11;8593:4;8587;8583:15;8580:1;8573:5;8566;8561:60;8673:7;8663:176;;8717:4;8711:11;8762:16;8759:1;8754:3;8739:40;8808:16;8803:3;8796:29;8663:176;8866:16;8852:30;;8916:1;8910:8;8895:23;;8532:396;8956:1;8942:10;:15;:68;;9009:1;8994:11;:16;;8942:68;;;8990:1;8968:5;8960:26;;;:31;8942:68;8938:146;;;9066:5;9033:40;;;;;;;;;;;:::i;:::-;;;;;;;;8938:146;8440:650;;8370:720;;:::o;656:96:35:-;709:7;735:10;728:17;;656:96;:::o;1902:154:47:-;1993:4;2045;2016:25;2029:5;2036:4;2016:12;:25::i;:::-;:33;2009:40;;1902:154;;;;;:::o;2457:308::-;2540:7;2559:20;2582:4;2559:27;;2601:9;2613:1;2601:13;;2596:134;2620:5;:12;2616:1;:16;2596:134;;;2668:51;2696:12;2710:5;2716:1;2710:8;;;;;;;;:::i;:::-;;;;;;;;2668:27;:51::i;:::-;2653:66;;2634:3;;;;;;;2596:134;;;;2746:12;2739:19;;;2457:308;;;;:::o;504:167:46:-;579:7;609:1;605;:5;:59;;640:24;659:1;662;640:18;:24::i;:::-;605:59;;;613:24;632:1;635;613:18;:24::i;:::-;605:59;598:66;;504:167;;;;:::o;791:239::-;864:13;941:1;935:4;928:15;969:1;963:4;956:15;1009:4;1003;993:21;984:30;;791:239;;;;:::o;7:75:92:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:117;443:1;440;433:12;457:117;566:1;563;556:12;580:117;689:1;686;679:12;719:567;791:8;801:6;851:3;844:4;836:6;832:17;828:27;818:122;;859:79;;:::i;:::-;818:122;972:6;959:20;949:30;;1002:18;994:6;991:30;988:117;;;1024:79;;:::i;:::-;988:117;1138:4;1130:6;1126:17;1114:29;;1192:3;1184:4;1176:6;1172:17;1162:8;1158:32;1155:41;1152:128;;;1199:79;;:::i;:::-;1152:128;719:567;;;;;:::o;1292:557::-;1377:6;1385;1434:2;1422:9;1413:7;1409:23;1405:32;1402:119;;;1440:79;;:::i;:::-;1402:119;1588:1;1577:9;1573:17;1560:31;1618:18;1610:6;1607:30;1604:117;;;1640:79;;:::i;:::-;1604:117;1753:79;1824:7;1815:6;1804:9;1800:22;1753:79;:::i;:::-;1735:97;;;;1531:311;1292:557;;;;;:::o;1855:126::-;1892:7;1932:42;1925:5;1921:54;1910:65;;1855:126;;;:::o;1987:96::-;2024:7;2053:24;2071:5;2053:24;:::i;:::-;2042:35;;1987:96;;;:::o;2089:122::-;2162:24;2180:5;2162:24;:::i;:::-;2155:5;2152:35;2142:63;;2201:1;2198;2191:12;2142:63;2089:122;:::o;2217:139::-;2263:5;2301:6;2288:20;2279:29;;2317:33;2344:5;2317:33;:::i;:::-;2217:139;;;;:::o;2362:101::-;2398:7;2438:18;2431:5;2427:30;2416:41;;2362:101;;;:::o;2469:120::-;2541:23;2558:5;2541:23;:::i;:::-;2534:5;2531:34;2521:62;;2579:1;2576;2569:12;2521:62;2469:120;:::o;2595:137::-;2640:5;2678:6;2665:20;2656:29;;2694:32;2720:5;2694:32;:::i;:::-;2595:137;;;;:::o;2738:472::-;2805:6;2813;2862:2;2850:9;2841:7;2837:23;2833:32;2830:119;;;2868:79;;:::i;:::-;2830:119;2988:1;3013:53;3058:7;3049:6;3038:9;3034:22;3013:53;:::i;:::-;3003:63;;2959:117;3115:2;3141:52;3185:7;3176:6;3165:9;3161:22;3141:52;:::i;:::-;3131:62;;3086:117;2738:472;;;;;:::o;3216:90::-;3250:7;3293:5;3286:13;3279:21;3268:32;;3216:90;;;:::o;3312:109::-;3393:21;3408:5;3393:21;:::i;:::-;3388:3;3381:34;3312:109;;:::o;3427:210::-;3514:4;3552:2;3541:9;3537:18;3529:26;;3565:65;3627:1;3616:9;3612:17;3603:6;3565:65;:::i;:::-;3427:210;;;;:::o;3643:329::-;3702:6;3751:2;3739:9;3730:7;3726:23;3722:32;3719:119;;;3757:79;;:::i;:::-;3719:119;3877:1;3902:53;3947:7;3938:6;3927:9;3923:22;3902:53;:::i;:::-;3892:63;;3848:117;3643:329;;;;:::o;3978:327::-;4036:6;4085:2;4073:9;4064:7;4060:23;4056:32;4053:119;;;4091:79;;:::i;:::-;4053:119;4211:1;4236:52;4280:7;4271:6;4260:9;4256:22;4236:52;:::i;:::-;4226:62;;4182:116;3978:327;;;;:::o;4311:77::-;4348:7;4377:5;4366:16;;4311:77;;;:::o;4394:118::-;4481:24;4499:5;4481:24;:::i;:::-;4476:3;4469:37;4394:118;;:::o;4518:222::-;4611:4;4649:2;4638:9;4634:18;4626:26;;4662:71;4730:1;4719:9;4715:17;4706:6;4662:71;:::i;:::-;4518:222;;;;:::o;4746:60::-;4774:3;4795:5;4788:12;;4746:60;;;:::o;4812:142::-;4862:9;4895:53;4913:34;4922:24;4940:5;4922:24;:::i;:::-;4913:34;:::i;:::-;4895:53;:::i;:::-;4882:66;;4812:142;;;:::o;4960:126::-;5010:9;5043:37;5074:5;5043:37;:::i;:::-;5030:50;;4960:126;;;:::o;5092:152::-;5168:9;5201:37;5232:5;5201:37;:::i;:::-;5188:50;;5092:152;;;:::o;5250:183::-;5363:63;5420:5;5363:63;:::i;:::-;5358:3;5351:76;5250:183;;:::o;5439:274::-;5558:4;5596:2;5585:9;5581:18;5573:26;;5609:97;5703:1;5692:9;5688:17;5679:6;5609:97;:::i;:::-;5439:274;;;;:::o;5719:141::-;5784:9;5817:37;5848:5;5817:37;:::i;:::-;5804:50;;5719:141;;;:::o;5866:161::-;5968:52;6014:5;5968:52;:::i;:::-;5963:3;5956:65;5866:161;;:::o;6033:252::-;6141:4;6179:2;6168:9;6164:18;6156:26;;6192:86;6275:1;6264:9;6260:17;6251:6;6192:86;:::i;:::-;6033:252;;;;:::o;6291:117::-;6400:1;6397;6390:12;6414:102;6455:6;6506:2;6502:7;6497:2;6490:5;6486:14;6482:28;6472:38;;6414:102;;;:::o;6522:180::-;6570:77;6567:1;6560:88;6667:4;6664:1;6657:15;6691:4;6688:1;6681:15;6708:281;6791:27;6813:4;6791:27;:::i;:::-;6783:6;6779:40;6921:6;6909:10;6906:22;6885:18;6873:10;6870:34;6867:62;6864:88;;;6932:18;;:::i;:::-;6864:88;6972:10;6968:2;6961:22;6751:238;6708:281;;:::o;6995:129::-;7029:6;7056:20;;:::i;:::-;7046:30;;7085:33;7113:4;7105:6;7085:33;:::i;:::-;6995:129;;;:::o;7253:77::-;7290:7;7319:5;7308:16;;7253:77;;;:::o;7336:122::-;7409:24;7427:5;7409:24;:::i;:::-;7402:5;7399:35;7389:63;;7448:1;7445;7438:12;7389:63;7336:122;:::o;7464:139::-;7510:5;7548:6;7535:20;7526:29;;7564:33;7591:5;7564:33;:::i;:::-;7464:139;;;;:::o;7609:122::-;7682:24;7700:5;7682:24;:::i;:::-;7675:5;7672:35;7662:63;;7721:1;7718;7711:12;7662:63;7609:122;:::o;7737:139::-;7783:5;7821:6;7808:20;7799:29;;7837:33;7864:5;7837:33;:::i;:::-;7737:139;;;;:::o;7925:916::-;8003:5;8047:4;8035:9;8030:3;8026:19;8022:30;8019:117;;;8055:79;;:::i;:::-;8019:117;8154:21;8170:4;8154:21;:::i;:::-;8145:30;;8234:1;8274:49;8319:3;8310:6;8299:9;8295:22;8274:49;:::i;:::-;8267:4;8260:5;8256:16;8249:75;8185:150;8401:2;8442:49;8487:3;8478:6;8467:9;8463:22;8442:49;:::i;:::-;8435:4;8428:5;8424:16;8417:75;8345:158;8567:2;8608:48;8652:3;8643:6;8632:9;8628:22;8608:48;:::i;:::-;8601:4;8594:5;8590:16;8583:74;8513:155;8733:2;8774:48;8818:3;8809:6;8798:9;8794:22;8774:48;:::i;:::-;8767:4;8760:5;8756:16;8749:74;8678:156;7925:916;;;;:::o;8847:531::-;8943:6;8951;9000:3;8988:9;8979:7;8975:23;8971:33;8968:120;;;9007:79;;:::i;:::-;8968:120;9127:1;9152:52;9196:7;9187:6;9176:9;9172:22;9152:52;:::i;:::-;9142:62;;9098:116;9253:2;9279:82;9353:7;9344:6;9333:9;9329:22;9279:82;:::i;:::-;9269:92;;9224:147;8847:531;;;;;:::o;9384:118::-;9471:24;9489:5;9471:24;:::i;:::-;9466:3;9459:37;9384:118;;:::o;9508:115::-;9593:23;9610:5;9593:23;:::i;:::-;9588:3;9581:36;9508:115;;:::o;9629:545::-;9802:4;9840:3;9829:9;9825:19;9817:27;;9854:71;9922:1;9911:9;9907:17;9898:6;9854:71;:::i;:::-;9935:72;10003:2;9992:9;9988:18;9979:6;9935:72;:::i;:::-;10017:70;10083:2;10072:9;10068:18;10059:6;10017:70;:::i;:::-;10097;10163:2;10152:9;10148:18;10139:6;10097:70;:::i;:::-;9629:545;;;;;;;:::o;10180:218::-;10271:4;10309:2;10298:9;10294:18;10286:26;;10322:69;10388:1;10377:9;10373:17;10364:6;10322:69;:::i;:::-;10180:218;;;;:::o;10452:602::-;10559:8;10569:6;10619:3;10612:4;10604:6;10600:17;10596:27;10586:122;;10627:79;;:::i;:::-;10586:122;10740:6;10727:20;10717:30;;10770:18;10762:6;10759:30;10756:117;;;10792:79;;:::i;:::-;10756:117;10906:4;10898:6;10894:17;10882:29;;10960:3;10952:4;10944:6;10940:17;10930:8;10926:32;10923:41;10920:128;;;10967:79;;:::i;:::-;10920:128;10452:602;;;;;:::o;11060:627::-;11180:6;11188;11237:2;11225:9;11216:7;11212:23;11208:32;11205:119;;;11243:79;;:::i;:::-;11205:119;11391:1;11380:9;11376:17;11363:31;11421:18;11413:6;11410:30;11407:117;;;11443:79;;:::i;:::-;11407:117;11556:114;11662:7;11653:6;11642:9;11638:22;11556:114;:::i;:::-;11538:132;;;;11334:346;11060:627;;;;;:::o;11693:619::-;11770:6;11778;11786;11835:2;11823:9;11814:7;11810:23;11806:32;11803:119;;;11841:79;;:::i;:::-;11803:119;11961:1;11986:53;12031:7;12022:6;12011:9;12007:22;11986:53;:::i;:::-;11976:63;;11932:117;12088:2;12114:53;12159:7;12150:6;12139:9;12135:22;12114:53;:::i;:::-;12104:63;;12059:118;12216:2;12242:53;12287:7;12278:6;12267:9;12263:22;12242:53;:::i;:::-;12232:63;;12187:118;11693:619;;;;;:::o;12318:180::-;12366:77;12363:1;12356:88;12463:4;12460:1;12453:15;12487:4;12484:1;12477:15;12504:180;12552:77;12549:1;12542:88;12649:4;12646:1;12639:15;12673:4;12670:1;12663:15;12690:191;12730:3;12749:20;12767:1;12749:20;:::i;:::-;12744:25;;12783:20;12801:1;12783:20;:::i;:::-;12778:25;;12826:1;12823;12819:9;12812:16;;12847:3;12844:1;12841:10;12838:36;;;12854:18;;:::i;:::-;12838:36;12690:191;;;;:::o;12887:328::-;13006:4;13044:2;13033:9;13029:18;13021:26;;13057:69;13123:1;13112:9;13108:17;13099:6;13057:69;:::i;:::-;13136:72;13204:2;13193:9;13189:18;13180:6;13136:72;:::i;:::-;12887:328;;;;;:::o;13221:169::-;13305:11;13339:6;13334:3;13327:19;13379:4;13374:3;13370:14;13355:29;;13221:169;;;;:::o;13396:162::-;13536:14;13532:1;13524:6;13520:14;13513:38;13396:162;:::o;13564:366::-;13706:3;13727:67;13791:2;13786:3;13727:67;:::i;:::-;13720:74;;13803:93;13892:3;13803:93;:::i;:::-;13921:2;13916:3;13912:12;13905:19;;13564:366;;;:::o;13936:419::-;14102:4;14140:2;14129:9;14125:18;14117:26;;14189:9;14183:4;14179:20;14175:1;14164:9;14160:17;14153:47;14217:131;14343:4;14217:131;:::i;:::-;14209:139;;13936:419;;;:::o;14361:143::-;14418:5;14449:6;14443:13;14434:22;;14465:33;14492:5;14465:33;:::i;:::-;14361:143;;;;:::o;14510:351::-;14580:6;14629:2;14617:9;14608:7;14604:23;14600:32;14597:119;;;14635:79;;:::i;:::-;14597:119;14755:1;14780:64;14836:7;14827:6;14816:9;14812:22;14780:64;:::i;:::-;14770:74;;14726:128;14510:351;;;;:::o;14867:119::-;14927:7;14956:24;14974:5;14956:24;:::i;:::-;14945:35;;14867:119;;;:::o;14992:168::-;15088:47;15129:5;15088:47;:::i;:::-;15081:5;15078:58;15068:86;;15150:1;15147;15140:12;15068:86;14992:168;:::o;15166:189::-;15246:5;15277:6;15271:13;15262:22;;15293:56;15343:5;15293:56;:::i;:::-;15166:189;;;;:::o;15361:397::-;15454:6;15503:2;15491:9;15482:7;15478:23;15474:32;15471:119;;;15509:79;;:::i;:::-;15471:119;15629:1;15654:87;15733:7;15724:6;15713:9;15709:22;15654:87;:::i;:::-;15644:97;;15600:151;15361:397;;;;:::o;15764:118::-;15851:24;15869:5;15851:24;:::i;:::-;15846:3;15839:37;15764:118;;:::o;15888:332::-;16009:4;16047:2;16036:9;16032:18;16024:26;;16060:71;16128:1;16117:9;16113:17;16104:6;16060:71;:::i;:::-;16141:72;16209:2;16198:9;16194:18;16185:6;16141:72;:::i;:::-;15888:332;;;;;:::o;16226:116::-;16296:21;16311:5;16296:21;:::i;:::-;16289:5;16286:32;16276:60;;16332:1;16329;16322:12;16276:60;16226:116;:::o;16348:137::-;16402:5;16433:6;16427:13;16418:22;;16449:30;16473:5;16449:30;:::i;:::-;16348:137;;;;:::o;16491:345::-;16558:6;16607:2;16595:9;16586:7;16582:23;16578:32;16575:119;;;16613:79;;:::i;:::-;16575:119;16733:1;16758:61;16811:7;16802:6;16791:9;16787:22;16758:61;:::i;:::-;16748:71;;16704:125;16491:345;;;;:::o;16842:208::-;16881:4;16901:19;16918:1;16901:19;:::i;:::-;16896:24;;16934:19;16951:1;16934:19;:::i;:::-;16929:24;;16977:1;16974;16970:9;16962:17;;17001:18;16995:4;16992:28;16989:54;;;17023:18;;:::i;:::-;16989:54;16842:208;;;;:::o;17056:205::-;17095:3;17114:19;17131:1;17114:19;:::i;:::-;17109:24;;17147:19;17164:1;17147:19;:::i;:::-;17142:24;;17189:1;17186;17182:9;17175:16;;17212:18;17207:3;17204:27;17201:53;;;17234:18;;:::i;:::-;17201:53;17056:205;;;;:::o;17267:652::-;17466:4;17504:3;17493:9;17489:19;17481:27;;17518:69;17584:1;17573:9;17569:17;17560:6;17518:69;:::i;:::-;17597:72;17665:2;17654:9;17650:18;17641:6;17597:72;:::i;:::-;17679;17747:2;17736:9;17732:18;17723:6;17679:72;:::i;:::-;17761:70;17827:2;17816:9;17812:18;17803:6;17761:70;:::i;:::-;17841:71;17907:3;17896:9;17892:19;17883:6;17841:71;:::i;:::-;17267:652;;;;;;;;:::o;17925:117::-;18034:1;18031;18024:12;18048:117;18157:1;18154;18147:12;18171:117;18280:1;18277;18270:12;18294:400;18394:4;18448:11;18435:25;18548:1;18542:4;18538:12;18527:8;18511:14;18507:29;18503:48;18483:18;18479:73;18469:168;;18556:79;;:::i;:::-;18469:168;18668:18;18658:8;18654:33;18646:41;;18399:295;18294:400;;;;:::o;18700:740::-;18793:4;18799:6;18855:11;18842:25;18955:1;18949:4;18945:12;18934:8;18918:14;18914:29;18910:48;18890:18;18886:73;18876:168;;18963:79;;:::i;:::-;18876:168;19075:18;19065:8;19061:33;19053:41;;19127:4;19114:18;19104:28;;19155:18;19147:6;19144:30;19141:117;;;19177:79;;:::i;:::-;19141:117;19285:2;19279:4;19275:13;19267:21;;19342:4;19334:6;19330:17;19314:14;19310:38;19304:4;19300:49;19297:136;;;19352:79;;:::i;:::-;19297:136;18806:634;18700:740;;;;;:::o;19446:442::-;19595:4;19633:2;19622:9;19618:18;19610:26;;19646:71;19714:1;19703:9;19699:17;19690:6;19646:71;:::i;:::-;19727:72;19795:2;19784:9;19780:18;19771:6;19727:72;:::i;:::-;19809;19877:2;19866:9;19862:18;19853:6;19809:72;:::i;:::-;19446:442;;;;;;:::o;19894:194::-;19934:4;19954:20;19972:1;19954:20;:::i;:::-;19949:25;;19988:20;20006:1;19988:20;:::i;:::-;19983:25;;20032:1;20029;20025:9;20017:17;;20056:1;20050:4;20047:11;20044:37;;;20061:18;;:::i;:::-;20044:37;19894:194;;;;:::o;20094:332::-;20215:4;20253:2;20242:9;20238:18;20230:26;;20266:71;20334:1;20323:9;20319:17;20310:6;20266:71;:::i;:::-;20347:72;20415:2;20404:9;20400:18;20391:6;20347:72;:::i;:::-;20094:332;;;;;:::o;20432:222::-;20525:4;20563:2;20552:9;20548:18;20540:26;;20576:71;20644:1;20633:9;20629:17;20620:6;20576:71;:::i;:::-;20432:222;;;;:::o;20660:438::-;20807:4;20845:2;20834:9;20830:18;20822:26;;20858:69;20924:1;20913:9;20909:17;20900:6;20858:69;:::i;:::-;20937:72;21005:2;20994:9;20990:18;20981:6;20937:72;:::i;:::-;21019;21087:2;21076:9;21072:18;21063:6;21019:72;:::i;:::-;20660:438;;;;;;:::o;21104:79::-;21143:7;21172:5;21161:16;;21104:79;;;:::o;21189:157::-;21294:45;21314:24;21332:5;21314:24;:::i;:::-;21294:45;:::i;:::-;21289:3;21282:58;21189:157;;:::o;21352:256::-;21464:3;21479:75;21550:3;21541:6;21479:75;:::i;:::-;21579:2;21574:3;21570:12;21563:19;;21599:3;21592:10;;21352:256;;;;:::o",
    "linkReferences": {},
    "immutableReferences": {
      "52004": [
        { "start": 1318, "length": 32 },
        { "start": 2447, "length": 32 },
        { "start": 7217, "length": 32 }
      ]
    }
  },
  "methodIdentifiers": {
    "EPOCH_LENGTH()": "ac4746ab",
    "TOKEN()": "82bfefc8",
    "addressProvider()": "2954018c",
    "claims((uint64,address,uint256,bytes32[])[])": "c2ef4a22",
    "emergencyRescue(address,address,uint256)": "d687d0b3",
    "forwardExpiredRewards(uint64[])": "148d0698",
    "getExpiredEpochRewards(uint64[])": "40df94be",
    "hasClaimed(address,uint64)": "182f89da",
    "lastEpochId()": "c43b540f",
    "merkleDrops(uint64)": "a394ee92",
    "pause()": "8456cb59",
    "paused()": "5c975abb",
    "setAddressProvider(address)": "1a5fa2e3",
    "totalClaimed()": "d54ad2a1",
    "totalClaimedPerEpoch(uint64)": "2055457b",
    "totalClaimedPerUser(address)": "7c03bb2e",
    "unpause()": "3f4ba83a",
    "updateMerkleDrop(uint64,(bytes32,uint256,uint64,uint64))": "83f62748"
  },
  "rawMetadata": "{\"compiler\":{\"version\":\"0.8.30+commit.73712a01\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addressProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AddressCantBeZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AlreadyClaimed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"CallerNotMaintainer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"CallerNotOperator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyArray\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EnforcedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EpochAlreadySet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EpochCantBeUpdated\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EpochExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EpochGapNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EpochNotExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EpochZeroNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpectedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotStarted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProofInvalid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TotalEpochRewardsExceeded\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAddressProvider\",\"type\":\"address\"}],\"name\":\"AddressProviderUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"EmergencyRescued\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"epochId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ExpiredRewardsForwarded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"epochId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MerkleDropUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"epochId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"RewardsClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"EPOCH_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TOKEN\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"addressProvider\",\"outputs\":[{\"internalType\":\"contract IAddressProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"epochId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"merkleProof\",\"type\":\"bytes32[]\"}],\"internalType\":\"struct RewardDistributor.ClaimCallData[]\",\"name\":\"_claimsData\",\"type\":\"tuple[]\"}],\"name\":\"claims\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"emergencyRescue\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64[]\",\"name\":\"_epochIds\",\"type\":\"uint64[]\"}],\"name\":\"forwardExpiredRewards\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64[]\",\"name\":\"_epochIds\",\"type\":\"uint64[]\"}],\"name\":\"getExpiredEpochRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalExpiredRewards\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"epochId\",\"type\":\"uint64\"}],\"name\":\"hasClaimed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"hasClaimed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastEpochId\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"epochId\",\"type\":\"uint64\"}],\"name\":\"merkleDrops\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"totalAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"expiryTime\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAddressProvider\",\"type\":\"address\"}],\"name\":\"setAddressProvider\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalClaimed\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"epochId\",\"type\":\"uint64\"}],\"name\":\"totalClaimedPerEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalClaimed\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"totalClaimedPerUser\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalClaimed\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_epoch\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"totalAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"expiryTime\",\"type\":\"uint64\"}],\"internalType\":\"struct RewardDistributor.MerkleDrop\",\"name\":\"_merkleDrop\",\"type\":\"tuple\"}],\"name\":\"updateMerkleDrop\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"EnforcedPause()\":[{\"details\":\"The operation failed because the contract is paused.\"}],\"ExpectedPause()\":[{\"details\":\"The operation failed because the contract is not paused.\"}],\"ReentrancyGuardReentrantCall()\":[{\"details\":\"Unauthorized reentrant call.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"events\":{\"AddressProviderUpdated(address)\":{\"params\":{\"newAddressProvider\":\"The new addressProvider.\"}},\"EmergencyRescued(address,address,uint256)\":{\"params\":{\"amount\":\"The amount of tokens rescued.\",\"to\":\"The address of the recipient.\",\"token\":\"The address of the token.\"}},\"ExpiredRewardsForwarded(uint64,uint256)\":{\"params\":{\"amount\":\"The amount of rewards forwarded.\",\"epochId\":\"The epochId forwarded.\"}},\"MerkleDropUpdated(uint64,bytes32,uint256,uint64,uint64)\":{\"params\":{\"endTime\":\"The time at which all none claimed token will be send to the expiredRewardsRecipient address.\",\"epochId\":\"The epoch id.\",\"root\":\"The merkle's tree root.\",\"startTime\":\"The start time of the epoch.\",\"totalAmount\":\"The totalAmount to distribute.\"}},\"Paused(address)\":{\"details\":\"Emitted when the pause is triggered by `account`.\"},\"RewardsClaimed(uint64,address,uint256)\":{\"params\":{\"account\":\"The address of the claimer.\",\"amount\":\"The amount of rewards claimed.\",\"epochId\":\"The epochId claimed.\"}},\"Unpaused(address)\":{\"details\":\"Emitted when the pause is lifted by `account`.\"}},\"kind\":\"dev\",\"methods\":{\"claims((uint64,address,uint256,bytes32[])[])\":{\"params\":{\"_claimsData\":\"The claim data array info.\"}},\"constructor\":{\"params\":{\"_addressProvider\":\"The address of the AddressProvider.\",\"_token\":\"The address of the token to distribute.\"}},\"emergencyRescue(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of tokens to rescue.\",\"_to\":\"The address of the recipient.\",\"_token\":\"The address of the token.\"}},\"forwardExpiredRewards(uint64[])\":{\"params\":{\"_epochIds\":\"The list of epoch that will be claimed.\"}},\"getExpiredEpochRewards(uint64[])\":{\"details\":\"will revert if an epoch is not expired.\",\"params\":{\"_epochIds\":\"The list of epoch to check.\"}},\"pause()\":{\"details\":\"This function can only be called by AccessManager.\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"setAddressProvider(address)\":{\"params\":{\"newAddressProvider\":\"The new address to set.\"}},\"unpause()\":{\"details\":\"This function can only be called by AccessManager\"},\"updateMerkleDrop(uint64,(bytes32,uint256,uint64,uint64))\":{\"details\":\"This function can only be called by AccessManager.\"}},\"stateVariables\":{\"EPOCH_LENGTH\":{\"details\":\"The length of a claim/allocate epoch\"}},\"title\":\"RewardDistributor\",\"version\":1},\"userdoc\":{\"errors\":{\"AddressCantBeZero()\":[{\"notice\":\"Error thrown when address is equal to address(0).\"}],\"AlreadyClaimed()\":[{\"notice\":\"Thrown when the claimer has already claimed the rewards.\"}],\"CallerNotMaintainer(bytes32,address)\":[{\"notice\":\"Error thrown when the caller does not have the role MAINTAINER_ROLE\"}],\"CallerNotOperator(bytes32,address)\":[{\"notice\":\"Error thrown when the caller does not have the role OPERATOR_ROLE\"}],\"EmptyArray()\":[{\"notice\":\"Thrown when the epochIds array is empty.\"}],\"EpochAlreadySet()\":[{\"notice\":\"Thrown when the epoch is already set.\"}],\"EpochCantBeUpdated()\":[{\"notice\":\"Thrown when epoch can't be updated.\"}],\"EpochExpired()\":[{\"notice\":\"Thrown when epoch expired.\"}],\"EpochGapNotAllowed()\":[{\"notice\":\"Thrown when epoch updated create a gap.\"}],\"EpochNotExpired()\":[{\"notice\":\"Thrown when epoch didn't expired.\"}],\"EpochZeroNotAllowed()\":[{\"notice\":\"Thrown when epoch is zero.\"}],\"NotStarted()\":[{\"notice\":\"Thrown when claim windows didn't not start.\"}],\"ProofInvalid()\":[{\"notice\":\"Thrown when the proof is invalid or expired.\"}],\"TotalEpochRewardsExceeded()\":[{\"notice\":\"Thrown when totalAmountClaimed for the epoch after a claim will exceed the total amount to distribute.\"}]},\"events\":{\"AddressProviderUpdated(address)\":{\"notice\":\"Emitted when the addressProvider is updated.\"},\"EmergencyRescued(address,address,uint256)\":{\"notice\":\"Emitted when tokens are rescued.\"},\"ExpiredRewardsForwarded(uint64,uint256)\":{\"notice\":\"Emitted when expired rewards are forwarded.\"},\"MerkleDropUpdated(uint64,bytes32,uint256,uint64,uint64)\":{\"notice\":\"Emitted when the root is updated.\"},\"RewardsClaimed(uint64,address,uint256)\":{\"notice\":\"Emitted when an account claims rewards.\"}},\"kind\":\"user\",\"methods\":{\"TOKEN()\":{\"notice\":\"The token to distribute.\"},\"addressProvider()\":{\"notice\":\"The addressProvider contract\"},\"claims((uint64,address,uint256,bytes32[])[])\":{\"notice\":\"Claims rewards for multi Epoch.\"},\"constructor\":{\"notice\":\"Constructs RewardsDistributor contract.\"},\"emergencyRescue(address,address,uint256)\":{\"notice\":\"Allow to rescue tokens own by the contract.\"},\"forwardExpiredRewards(uint64[])\":{\"notice\":\"Transfer expired rewards to the fee collector.\"},\"getExpiredEpochRewards(uint64[])\":{\"notice\":\"Get the total rewards that can be forward to the recipient address for the list of epoch.\"},\"hasClaimed(address,uint64)\":{\"notice\":\"The rewards already claimed.\"},\"lastEpochId()\":{\"notice\":\"The last epoch id.\"},\"merkleDrops(uint64)\":{\"notice\":\"The merkle drops.\"},\"pause()\":{\"notice\":\"Allow AccessManager to pause the contract.\"},\"setAddressProvider(address)\":{\"notice\":\"Allow maintainer to update the address of the AddressProvider contract.\"},\"totalClaimed()\":{\"notice\":\"The total amount of tokens claimed.\"},\"totalClaimedPerEpoch(uint64)\":{\"notice\":\"Maps total claimed amount per epoch.\"},\"totalClaimedPerUser(address)\":{\"notice\":\"Tracks total amount of user claimed amounts.\"},\"unpause()\":{\"notice\":\"Allow AccessManager to unpause the contract\"},\"updateMerkleDrop(uint64,(bytes32,uint256,uint64,uint64))\":{\"notice\":\"Updates the merkleDrop for a specific epoch.\"}},\"notice\":\"Contract to distribute rewards using a merkle tree.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/staking/RewardDistributor.sol\":\"RewardDistributor\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":@chainlink/contracts-ccip/contracts/=dependencies/chainlink-ccip/chains/evm/contracts/\",\":@chainlink/contracts/=dependencies/chainlink-local/lib/chainlink-evm/contracts/\",\":@chainlink/local/=dependencies/chainlink-local/\",\":@openzeppelin/contracts-upgradeable/=dependencies/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=dependencies/openzeppelin-contracts/contracts/\",\":ccip/=dependencies/chainlink-local/lib/ccip/\",\":chainlink-brownie-contracts/=dependencies/chainlink-local/lib/chainlink-brownie-contracts/contracts/src/v0.6/vendor/@arbitrum/nitro-contracts/src/\",\":chainlink-ccip/=dependencies/chainlink-ccip/\",\":chainlink-evm/=dependencies/chainlink-local/lib/chainlink-evm/\",\":chainlink-local/=dependencies/chainlink-local/src/\",\":ds-test/=dependencies/chainlink-local/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=dependencies/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std-1.9.7/=dependencies/forge-std-1.9.7/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=dependencies/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=dependencies/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=dependencies/openzeppelin-contracts/\"]},\"sources\":{\"dependencies/openzeppelin-contracts/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0x4d9a2b261b56a1e4a37bb038151dec98b952fed16de2bdfdda27e38e2b12b530\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f724110f7aeb6151af800ab8c12e6060b29bda9e013f0ccb331eb754d6a7cbf0\",\"dweb:/ipfs/QmUcjzCZpxtUPdEThtAzE1f9LvuJiUGZxTdH9N6bHrb5Cf\"]},\"dependencies/openzeppelin-contracts/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b\",\"dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF\"]},\"dependencies/openzeppelin-contracts/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"dependencies/openzeppelin-contracts/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"dependencies/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"dependencies/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x982c5cb790ab941d1e04f807120a71709d4c313ba0bfc16006447ffbd27fbbd5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8150ceb4ac947e8a442b2a9c017e01e880b2be2dd958f1fa9bc405f4c5a86508\",\"dweb:/ipfs/QmbcBmFX66AY6Kbhnd5gx7zpkgqnUafo43XnmayAM7zVdB\"]},\"dependencies/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"dependencies/openzeppelin-contracts/contracts/utils/Pausable.sol\":{\"keccak256\":\"0xdb484371dfbb848cb6f5d70464e9ac9b2900e4164ead76bbce4fef0b44bcc68f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f9d6f6f6600a2bec622f699081b58350873b5e63ce05464d17d674a290bb8a7c\",\"dweb:/ipfs/QmQKVzSQY1PM3Bid4QhgVVZyx6B4Jx7XgaQzLKHj38vJz8\"]},\"dependencies/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a\",\"dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA\"]},\"dependencies/openzeppelin-contracts/contracts/utils/cryptography/Hashes.sol\":{\"keccak256\":\"0x8cbd338f083224b4b6f0ff42cbda641a0a6c31ffcdca197452b97fe4d0918269\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f517dec5ba0c6491395acbf7f1d621f4e89e8f218bf5303c867b1c5ad70c6b11\",\"dweb:/ipfs/QmWmXHRLEw8W6ckth7NyYTU88YfvuS7xSsfae5ksL8qNUe\"]},\"dependencies/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol\":{\"keccak256\":\"0x36a0c409c437a753cac9b92b75f93b0fbe92803bf2c8ff1517e54b247f166134\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f91ba472de411aa557cdbf6560c40750d87bd11c9060bc04d2ba7119af9d5a6\",\"dweb:/ipfs/QmQjtYo2i7dDvzCEzZ67bDoNSG4RrwMoxPWuqFmX5Xzpuw\"]},\"dependencies/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"src/interfaces/IAddressProvider.sol\":{\"keccak256\":\"0x995b3cb26505f35b3f48b9f870bf6b19f9ad34ce161fb9b6df5d3f7ae128348a\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://4e6e50acc5b1d5f2726817cb6fe761c784a3351e0b21edb1021fecfd896d90d3\",\"dweb:/ipfs/QmPFWjwkpcdRjoeb95zFiTHYHL9SG5fnNyXVPHofJS13MK\"]},\"src/libraries/Errors.sol\":{\"keccak256\":\"0x798b1b6468bcb812d90abdccbfa91728554ab9cbe1ee983d0032685d8e5b6ebc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://5f0423dd9c88e608791c1dc5bade3cd0ef8cefee893bca385818c0d40a1b1732\",\"dweb:/ipfs/QmUFL8PKqqkkooh4rqPRCiKu36hu3g3nZ8K6Hzv9oZRuRs\"]},\"src/libraries/Roles.sol\":{\"keccak256\":\"0x2eea8296a20a4b5d7d56282bd6ecedfd9fc33e651bab0b7c3833e693ae6025ed\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://95b0ac8192dfbd090b7c0d0e362af6961ef444785c9ea92b716d65cf3f11079e\",\"dweb:/ipfs/QmdFiE9XVHhPpeVatN5eCighJ7N6csfUwjonq8GZVFH5d3\"]},\"src/staking/RewardDistributor.sol\":{\"keccak256\":\"0xe20dfdf18c86049c99fa336a1ab1ec2b262d1b09a8f646b5fc69cbce7dc18b94\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://12353ea39b4fee4af6ccb3bda583c76684c5dc38e0ceb310d086443ef1924b8a\",\"dweb:/ipfs/QmdvhgqbrAGKHUfjGqSpBYrjpCwNKwxWiPkUR6PKFMdoat\"]}},\"version\":1}",
  "metadata": {
    "compiler": { "version": "0.8.30+commit.73712a01" },
    "language": "Solidity",
    "output": {
      "abi": [
        {
          "inputs": [
            { "internalType": "address", "name": "_addressProvider", "type": "address" },
            { "internalType": "address", "name": "_token", "type": "address" }
          ],
          "stateMutability": "nonpayable",
          "type": "constructor"
        },
        { "inputs": [], "type": "error", "name": "AddressCantBeZero" },
        { "inputs": [], "type": "error", "name": "AlreadyClaimed" },
        {
          "inputs": [
            { "internalType": "bytes32", "name": "role", "type": "bytes32" },
            { "internalType": "address", "name": "caller", "type": "address" }
          ],
          "type": "error",
          "name": "CallerNotMaintainer"
        },
        {
          "inputs": [
            { "internalType": "bytes32", "name": "role", "type": "bytes32" },
            { "internalType": "address", "name": "caller", "type": "address" }
          ],
          "type": "error",
          "name": "CallerNotOperator"
        },
        { "inputs": [], "type": "error", "name": "EmptyArray" },
        { "inputs": [], "type": "error", "name": "EnforcedPause" },
        { "inputs": [], "type": "error", "name": "EpochAlreadySet" },
        { "inputs": [], "type": "error", "name": "EpochCantBeUpdated" },
        { "inputs": [], "type": "error", "name": "EpochExpired" },
        { "inputs": [], "type": "error", "name": "EpochGapNotAllowed" },
        { "inputs": [], "type": "error", "name": "EpochNotExpired" },
        { "inputs": [], "type": "error", "name": "EpochZeroNotAllowed" },
        { "inputs": [], "type": "error", "name": "ExpectedPause" },
        { "inputs": [], "type": "error", "name": "NotStarted" },
        { "inputs": [], "type": "error", "name": "ProofInvalid" },
        { "inputs": [], "type": "error", "name": "ReentrancyGuardReentrantCall" },
        {
          "inputs": [{ "internalType": "address", "name": "token", "type": "address" }],
          "type": "error",
          "name": "SafeERC20FailedOperation"
        },
        { "inputs": [], "type": "error", "name": "TotalEpochRewardsExceeded" },
        {
          "inputs": [{ "internalType": "address", "name": "newAddressProvider", "type": "address", "indexed": false }],
          "type": "event",
          "name": "AddressProviderUpdated",
          "anonymous": false
        },
        {
          "inputs": [
            { "internalType": "address", "name": "token", "type": "address", "indexed": false },
            { "internalType": "address", "name": "to", "type": "address", "indexed": false },
            { "internalType": "uint256", "name": "amount", "type": "uint256", "indexed": false }
          ],
          "type": "event",
          "name": "EmergencyRescued",
          "anonymous": false
        },
        {
          "inputs": [
            { "internalType": "uint64", "name": "epochId", "type": "uint64", "indexed": false },
            { "internalType": "uint256", "name": "amount", "type": "uint256", "indexed": false }
          ],
          "type": "event",
          "name": "ExpiredRewardsForwarded",
          "anonymous": false
        },
        {
          "inputs": [
            { "internalType": "uint64", "name": "epochId", "type": "uint64", "indexed": false },
            { "internalType": "bytes32", "name": "root", "type": "bytes32", "indexed": false },
            { "internalType": "uint256", "name": "totalAmount", "type": "uint256", "indexed": false },
            { "internalType": "uint64", "name": "startTime", "type": "uint64", "indexed": false },
            { "internalType": "uint64", "name": "endTime", "type": "uint64", "indexed": false }
          ],
          "type": "event",
          "name": "MerkleDropUpdated",
          "anonymous": false
        },
        {
          "inputs": [{ "internalType": "address", "name": "account", "type": "address", "indexed": false }],
          "type": "event",
          "name": "Paused",
          "anonymous": false
        },
        {
          "inputs": [
            { "internalType": "uint64", "name": "epochId", "type": "uint64", "indexed": false },
            { "internalType": "address", "name": "account", "type": "address", "indexed": false },
            { "internalType": "uint256", "name": "amount", "type": "uint256", "indexed": false }
          ],
          "type": "event",
          "name": "RewardsClaimed",
          "anonymous": false
        },
        {
          "inputs": [{ "internalType": "address", "name": "account", "type": "address", "indexed": false }],
          "type": "event",
          "name": "Unpaused",
          "anonymous": false
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "EPOCH_LENGTH",
          "outputs": [{ "internalType": "uint64", "name": "", "type": "uint64" }]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "TOKEN",
          "outputs": [{ "internalType": "contract IERC20", "name": "", "type": "address" }]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "addressProvider",
          "outputs": [{ "internalType": "contract IAddressProvider", "name": "", "type": "address" }]
        },
        {
          "inputs": [
            {
              "internalType": "struct RewardDistributor.ClaimCallData[]",
              "name": "_claimsData",
              "type": "tuple[]",
              "components": [
                { "internalType": "uint64", "name": "epochId", "type": "uint64" },
                { "internalType": "address", "name": "account", "type": "address" },
                { "internalType": "uint256", "name": "amount", "type": "uint256" },
                { "internalType": "bytes32[]", "name": "merkleProof", "type": "bytes32[]" }
              ]
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "claims"
        },
        {
          "inputs": [
            { "internalType": "address", "name": "_token", "type": "address" },
            { "internalType": "address", "name": "_to", "type": "address" },
            { "internalType": "uint256", "name": "_amount", "type": "uint256" }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "emergencyRescue"
        },
        {
          "inputs": [{ "internalType": "uint64[]", "name": "_epochIds", "type": "uint64[]" }],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "forwardExpiredRewards"
        },
        {
          "inputs": [{ "internalType": "uint64[]", "name": "_epochIds", "type": "uint64[]" }],
          "stateMutability": "view",
          "type": "function",
          "name": "getExpiredEpochRewards",
          "outputs": [{ "internalType": "uint256", "name": "totalExpiredRewards", "type": "uint256" }]
        },
        {
          "inputs": [
            { "internalType": "address", "name": "account", "type": "address" },
            { "internalType": "uint64", "name": "epochId", "type": "uint64" }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "hasClaimed",
          "outputs": [{ "internalType": "bool", "name": "hasClaimed", "type": "bool" }]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "lastEpochId",
          "outputs": [{ "internalType": "uint64", "name": "", "type": "uint64" }]
        },
        {
          "inputs": [{ "internalType": "uint64", "name": "epochId", "type": "uint64" }],
          "stateMutability": "view",
          "type": "function",
          "name": "merkleDrops",
          "outputs": [
            { "internalType": "bytes32", "name": "root", "type": "bytes32" },
            { "internalType": "uint256", "name": "totalAmount", "type": "uint256" },
            { "internalType": "uint64", "name": "startTime", "type": "uint64" },
            { "internalType": "uint64", "name": "expiryTime", "type": "uint64" }
          ]
        },
        { "inputs": [], "stateMutability": "nonpayable", "type": "function", "name": "pause" },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "paused",
          "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }]
        },
        {
          "inputs": [{ "internalType": "address", "name": "newAddressProvider", "type": "address" }],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setAddressProvider"
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "totalClaimed",
          "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }]
        },
        {
          "inputs": [{ "internalType": "uint64", "name": "epochId", "type": "uint64" }],
          "stateMutability": "view",
          "type": "function",
          "name": "totalClaimedPerEpoch",
          "outputs": [{ "internalType": "uint256", "name": "totalClaimed", "type": "uint256" }]
        },
        {
          "inputs": [{ "internalType": "address", "name": "account", "type": "address" }],
          "stateMutability": "view",
          "type": "function",
          "name": "totalClaimedPerUser",
          "outputs": [{ "internalType": "uint256", "name": "totalClaimed", "type": "uint256" }]
        },
        { "inputs": [], "stateMutability": "nonpayable", "type": "function", "name": "unpause" },
        {
          "inputs": [
            { "internalType": "uint64", "name": "_epoch", "type": "uint64" },
            {
              "internalType": "struct RewardDistributor.MerkleDrop",
              "name": "_merkleDrop",
              "type": "tuple",
              "components": [
                { "internalType": "bytes32", "name": "root", "type": "bytes32" },
                { "internalType": "uint256", "name": "totalAmount", "type": "uint256" },
                { "internalType": "uint64", "name": "startTime", "type": "uint64" },
                { "internalType": "uint64", "name": "expiryTime", "type": "uint64" }
              ]
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "updateMerkleDrop"
        }
      ],
      "devdoc": {
        "kind": "dev",
        "methods": {
          "claims((uint64,address,uint256,bytes32[])[])": { "params": { "_claimsData": "The claim data array info." } },
          "constructor": {
            "params": {
              "_addressProvider": "The address of the AddressProvider.",
              "_token": "The address of the token to distribute."
            }
          },
          "emergencyRescue(address,address,uint256)": {
            "params": {
              "_amount": "The amount of tokens to rescue.",
              "_to": "The address of the recipient.",
              "_token": "The address of the token."
            }
          },
          "forwardExpiredRewards(uint64[])": { "params": { "_epochIds": "The list of epoch that will be claimed." } },
          "getExpiredEpochRewards(uint64[])": {
            "details": "will revert if an epoch is not expired.",
            "params": { "_epochIds": "The list of epoch to check." }
          },
          "pause()": { "details": "This function can only be called by AccessManager." },
          "paused()": { "details": "Returns true if the contract is paused, and false otherwise." },
          "setAddressProvider(address)": { "params": { "newAddressProvider": "The new address to set." } },
          "unpause()": { "details": "This function can only be called by AccessManager" },
          "updateMerkleDrop(uint64,(bytes32,uint256,uint64,uint64))": {
            "details": "This function can only be called by AccessManager."
          }
        },
        "version": 1
      },
      "userdoc": {
        "kind": "user",
        "methods": {
          "TOKEN()": { "notice": "The token to distribute." },
          "addressProvider()": { "notice": "The addressProvider contract" },
          "claims((uint64,address,uint256,bytes32[])[])": { "notice": "Claims rewards for multi Epoch." },
          "constructor": { "notice": "Constructs RewardsDistributor contract." },
          "emergencyRescue(address,address,uint256)": { "notice": "Allow to rescue tokens own by the contract." },
          "forwardExpiredRewards(uint64[])": { "notice": "Transfer expired rewards to the fee collector." },
          "getExpiredEpochRewards(uint64[])": {
            "notice": "Get the total rewards that can be forward to the recipient address for the list of epoch."
          },
          "hasClaimed(address,uint64)": { "notice": "The rewards already claimed." },
          "lastEpochId()": { "notice": "The last epoch id." },
          "merkleDrops(uint64)": { "notice": "The merkle drops." },
          "pause()": { "notice": "Allow AccessManager to pause the contract." },
          "setAddressProvider(address)": {
            "notice": "Allow maintainer to update the address of the AddressProvider contract."
          },
          "totalClaimed()": { "notice": "The total amount of tokens claimed." },
          "totalClaimedPerEpoch(uint64)": { "notice": "Maps total claimed amount per epoch." },
          "totalClaimedPerUser(address)": { "notice": "Tracks total amount of user claimed amounts." },
          "unpause()": { "notice": "Allow AccessManager to unpause the contract" },
          "updateMerkleDrop(uint64,(bytes32,uint256,uint64,uint64))": {
            "notice": "Updates the merkleDrop for a specific epoch."
          }
        },
        "version": 1
      }
    },
    "settings": {
      "remappings": [
        "@chainlink/contracts-ccip/contracts/=dependencies/chainlink-ccip/chains/evm/contracts/",
        "@chainlink/contracts/=dependencies/chainlink-local/lib/chainlink-evm/contracts/",
        "@chainlink/local/=dependencies/chainlink-local/",
        "@openzeppelin/contracts-upgradeable/=dependencies/openzeppelin-contracts-upgradeable/contracts/",
        "@openzeppelin/contracts/=dependencies/openzeppelin-contracts/contracts/",
        "ccip/=dependencies/chainlink-local/lib/ccip/",
        "chainlink-brownie-contracts/=dependencies/chainlink-local/lib/chainlink-brownie-contracts/contracts/src/v0.6/vendor/@arbitrum/nitro-contracts/src/",
        "chainlink-ccip/=dependencies/chainlink-ccip/",
        "chainlink-evm/=dependencies/chainlink-local/lib/chainlink-evm/",
        "chainlink-local/=dependencies/chainlink-local/src/",
        "ds-test/=dependencies/chainlink-local/lib/forge-std/lib/ds-test/src/",
        "erc4626-tests/=dependencies/openzeppelin-contracts-upgradeable/lib/erc4626-tests/",
        "forge-std-1.9.7/=dependencies/forge-std-1.9.7/",
        "forge-std/=lib/forge-std/src/",
        "halmos-cheatcodes/=dependencies/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/",
        "openzeppelin-contracts-upgradeable/=dependencies/openzeppelin-contracts-upgradeable/",
        "openzeppelin-contracts/=dependencies/openzeppelin-contracts/"
      ],
      "optimizer": { "enabled": false, "runs": 200 },
      "metadata": { "bytecodeHash": "ipfs" },
      "compilationTarget": { "src/staking/RewardDistributor.sol": "RewardDistributor" },
      "evmVersion": "prague",
      "libraries": {}
    },
    "sources": {
      "dependencies/openzeppelin-contracts/contracts/access/IAccessControl.sol": {
        "keccak256": "0x4d9a2b261b56a1e4a37bb038151dec98b952fed16de2bdfdda27e38e2b12b530",
        "urls": [
          "bzz-raw://f724110f7aeb6151af800ab8c12e6060b29bda9e013f0ccb331eb754d6a7cbf0",
          "dweb:/ipfs/QmUcjzCZpxtUPdEThtAzE1f9LvuJiUGZxTdH9N6bHrb5Cf"
        ],
        "license": "MIT"
      },
      "dependencies/openzeppelin-contracts/contracts/interfaces/IERC1363.sol": {
        "keccak256": "0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7",
        "urls": [
          "bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b",
          "dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF"
        ],
        "license": "MIT"
      },
      "dependencies/openzeppelin-contracts/contracts/interfaces/IERC165.sol": {
        "keccak256": "0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724",
        "urls": [
          "bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a",
          "dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS"
        ],
        "license": "MIT"
      },
      "dependencies/openzeppelin-contracts/contracts/interfaces/IERC20.sol": {
        "keccak256": "0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c",
        "urls": [
          "bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba",
          "dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1"
        ],
        "license": "MIT"
      },
      "dependencies/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol": {
        "keccak256": "0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7",
        "urls": [
          "bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db",
          "dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9"
        ],
        "license": "MIT"
      },
      "dependencies/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol": {
        "keccak256": "0x982c5cb790ab941d1e04f807120a71709d4c313ba0bfc16006447ffbd27fbbd5",
        "urls": [
          "bzz-raw://8150ceb4ac947e8a442b2a9c017e01e880b2be2dd958f1fa9bc405f4c5a86508",
          "dweb:/ipfs/QmbcBmFX66AY6Kbhnd5gx7zpkgqnUafo43XnmayAM7zVdB"
        ],
        "license": "MIT"
      },
      "dependencies/openzeppelin-contracts/contracts/utils/Context.sol": {
        "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2",
        "urls": [
          "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12",
          "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"
        ],
        "license": "MIT"
      },
      "dependencies/openzeppelin-contracts/contracts/utils/Pausable.sol": {
        "keccak256": "0xdb484371dfbb848cb6f5d70464e9ac9b2900e4164ead76bbce4fef0b44bcc68f",
        "urls": [
          "bzz-raw://f9d6f6f6600a2bec622f699081b58350873b5e63ce05464d17d674a290bb8a7c",
          "dweb:/ipfs/QmQKVzSQY1PM3Bid4QhgVVZyx6B4Jx7XgaQzLKHj38vJz8"
        ],
        "license": "MIT"
      },
      "dependencies/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol": {
        "keccak256": "0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3",
        "urls": [
          "bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a",
          "dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA"
        ],
        "license": "MIT"
      },
      "dependencies/openzeppelin-contracts/contracts/utils/cryptography/Hashes.sol": {
        "keccak256": "0x8cbd338f083224b4b6f0ff42cbda641a0a6c31ffcdca197452b97fe4d0918269",
        "urls": [
          "bzz-raw://f517dec5ba0c6491395acbf7f1d621f4e89e8f218bf5303c867b1c5ad70c6b11",
          "dweb:/ipfs/QmWmXHRLEw8W6ckth7NyYTU88YfvuS7xSsfae5ksL8qNUe"
        ],
        "license": "MIT"
      },
      "dependencies/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol": {
        "keccak256": "0x36a0c409c437a753cac9b92b75f93b0fbe92803bf2c8ff1517e54b247f166134",
        "urls": [
          "bzz-raw://0f91ba472de411aa557cdbf6560c40750d87bd11c9060bc04d2ba7119af9d5a6",
          "dweb:/ipfs/QmQjtYo2i7dDvzCEzZ67bDoNSG4RrwMoxPWuqFmX5Xzpuw"
        ],
        "license": "MIT"
      },
      "dependencies/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol": {
        "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8",
        "urls": [
          "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621",
          "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL"
        ],
        "license": "MIT"
      },
      "src/interfaces/IAddressProvider.sol": {
        "keccak256": "0x995b3cb26505f35b3f48b9f870bf6b19f9ad34ce161fb9b6df5d3f7ae128348a",
        "urls": [
          "bzz-raw://4e6e50acc5b1d5f2726817cb6fe761c784a3351e0b21edb1021fecfd896d90d3",
          "dweb:/ipfs/QmPFWjwkpcdRjoeb95zFiTHYHL9SG5fnNyXVPHofJS13MK"
        ],
        "license": "BUSL-1.1"
      },
      "src/libraries/Errors.sol": {
        "keccak256": "0x798b1b6468bcb812d90abdccbfa91728554ab9cbe1ee983d0032685d8e5b6ebc",
        "urls": [
          "bzz-raw://5f0423dd9c88e608791c1dc5bade3cd0ef8cefee893bca385818c0d40a1b1732",
          "dweb:/ipfs/QmUFL8PKqqkkooh4rqPRCiKu36hu3g3nZ8K6Hzv9oZRuRs"
        ],
        "license": "GPL-3.0-or-later"
      },
      "src/libraries/Roles.sol": {
        "keccak256": "0x2eea8296a20a4b5d7d56282bd6ecedfd9fc33e651bab0b7c3833e693ae6025ed",
        "urls": [
          "bzz-raw://95b0ac8192dfbd090b7c0d0e362af6961ef444785c9ea92b716d65cf3f11079e",
          "dweb:/ipfs/QmdFiE9XVHhPpeVatN5eCighJ7N6csfUwjonq8GZVFH5d3"
        ],
        "license": "MIT"
      },
      "src/staking/RewardDistributor.sol": {
        "keccak256": "0xe20dfdf18c86049c99fa336a1ab1ec2b262d1b09a8f646b5fc69cbce7dc18b94",
        "urls": [
          "bzz-raw://12353ea39b4fee4af6ccb3bda583c76684c5dc38e0ceb310d086443ef1924b8a",
          "dweb:/ipfs/QmdvhgqbrAGKHUfjGqSpBYrjpCwNKwxWiPkUR6PKFMdoat"
        ],
        "license": "BUSL-1.1"
      }
    },
    "version": 1
  },
  "id": 88
}
