Overview ERC20
PRICE
n/a

ON-CHAIN MARKET CAP n/a

Total Supply:
12,379,934.69 mwEURC

Holders:
662
Profile Summary
Blockchain:
Base (8453)


Decimals:
18
Contract Source Code Verified (Exact Match)
Contract Name:
MetaMorpho

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Created At:
Tue, 10 Sep 2024 09:44:27 GMT
MetaMorpho.sol
src
MetaMorpho.sol


Contract ABI
[
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "morpho",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "initialTimelock",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "_asset",
        "type": "address"
      },
      {
        "internalType": "string",
        "name": "_name",
        "type": "string"
      },
      {
        "internalType": "string",
        "name": "_symbol",
        "type": "string"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "constructor"
  },
  {
    "inputs": [],
    "name": "AboveMaxTimelock",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "target",
        "type": "address"
      }
    ],
    "name": "AddressEmptyCode",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "AddressInsufficientBalance",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "AllCapsReached",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "AlreadyPending",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "AlreadySet",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "BelowMinTimelock",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "Id",
        "name": "id",
        "type": "bytes32"
      }
    ],
    "name": "DuplicateMarket",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "ECDSAInvalidSignature",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "length",
        "type": "uint256"
      }
    ],
    "name": "ECDSAInvalidSignatureLength",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "s",
        "type": "bytes32"
      }
    ],
    "name": "ECDSAInvalidSignatureS",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "allowance",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "needed",
        "type": "uint256"
      }
    ],
    "name": "ERC20InsufficientAllowance",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "sender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "balance",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "needed",
        "type": "uint256"
      }
    ],
    "name": "ERC20InsufficientBalance",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "approver",
        "type": "address"
      }
    ],
    "name": "ERC20InvalidApprover",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "receiver",
        "type": "address"
      }
    ],
    "name": "ERC20InvalidReceiver",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "sender",
        "type": "address"
      }
    ],
    "name": "ERC20InvalidSender",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      }
    ],
    "name": "ERC20InvalidSpender",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "deadline",
        "type": "uint256"
      }
    ],
    "name": "ERC2612ExpiredSignature",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "signer",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      }
    ],
    "name": "ERC2612InvalidSigner",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "receiver",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "assets",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "max",
        "type": "uint256"
      }
    ],
    "name": "ERC4626ExceededMaxDeposit",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "receiver",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "shares",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "max",
        "type": "uint256"
      }
    ],
    "name": "ERC4626ExceededMaxMint",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "shares",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "max",
        "type": "uint256"
      }
    ],
    "name": "ERC4626ExceededMaxRedeem",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "assets",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "max",
        "type": "uint256"
      }
    ],
    "name": "ERC4626ExceededMaxWithdraw",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "FailedInnerCall",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "Id",
        "name": "id",
        "type": "bytes32"
      }
    ],
    "name": "InconsistentAsset",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "InconsistentReallocation",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "currentNonce",
        "type": "uint256"
      }
    ],
    "name": "InvalidAccountNonce",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "Id",
        "name": "id",
        "type": "bytes32"
      }
    ],
    "name": "InvalidMarketRemovalNonZeroCap",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "Id",
        "name": "id",
        "type": "bytes32"
      }
    ],
    "name": "InvalidMarketRemovalNonZeroSupply",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "Id",
        "name": "id",
        "type": "bytes32"
      }
    ],
    "name": "InvalidMarketRemovalTimelockNotElapsed",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "InvalidShortString",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "MarketNotCreated",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "Id",
        "name": "id",
        "type": "bytes32"
      }
    ],
    "name": "MarketNotEnabled",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "MathOverflowedMulDiv",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "MaxFeeExceeded",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "MaxQueueLengthExceeded",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "NoPendingValue",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "NonZeroCap",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "NotAllocatorRole",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "NotCuratorNorGuardianRole",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "NotCuratorRole",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "NotEnoughLiquidity",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "NotGuardianRole",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      }
    ],
    "name": "OwnableInvalidOwner",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "OwnableUnauthorizedAccount",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "Id",
        "name": "id",
        "type": "bytes32"
      }
    ],
    "name": "PendingCap",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "PendingRemoval",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint8",
        "name": "bits",
        "type": "uint8"
      },
      {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "SafeCastOverflowedUintDowncast",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "token",
        "type": "address"
      }
    ],
    "name": "SafeERC20FailedOperation",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "string",
        "name": "str",
        "type": "string"
      }
    ],
    "name": "StringTooLong",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "Id",
        "name": "id",
        "type": "bytes32"
      }
    ],
    "name": "SupplyCapExceeded",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "TimelockNotElapsed",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "Id",
        "name": "id",
        "type": "bytes32"
      }
    ],
    "name": "UnauthorizedMarket",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "ZeroAddress",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "ZeroFeeRecipient",
    "type": "error"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "newTotalAssets",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "feeShares",
        "type": "uint256"
      }
    ],
    "name": "AccrueInterest",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "Approval",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "sender",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "assets",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "shares",
        "type": "uint256"
      }
    ],
    "name": "Deposit",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [],
    "name": "EIP712DomainChanged",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "previousOwner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }
    ],
    "name": "OwnershipTransferStarted",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "previousOwner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }
    ],
    "name": "OwnershipTransferred",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "caller",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "Id",
        "name": "id",
        "type": "bytes32"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "suppliedAssets",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "suppliedShares",
        "type": "uint256"
      }
    ],
    "name": "ReallocateSupply",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "caller",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "Id",
        "name": "id",
        "type": "bytes32"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "withdrawnAssets",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "withdrawnShares",
        "type": "uint256"
      }
    ],
    "name": "ReallocateWithdraw",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "caller",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "Id",
        "name": "id",
        "type": "bytes32"
      }
    ],
    "name": "RevokePendingCap",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "caller",
        "type": "address"
      }
    ],
    "name": "RevokePendingGuardian",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "caller",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "Id",
        "name": "id",
        "type": "bytes32"
      }
    ],
    "name": "RevokePendingMarketRemoval",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "caller",
        "type": "address"
      }
    ],
    "name": "RevokePendingTimelock",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "caller",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "Id",
        "name": "id",
        "type": "bytes32"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "cap",
        "type": "uint256"
      }
    ],
    "name": "SetCap",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "newCurator",
        "type": "address"
      }
    ],
    "name": "SetCurator",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "caller",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "newFee",
        "type": "uint256"
      }
    ],
    "name": "SetFee",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "newFeeRecipient",
        "type": "address"
      }
    ],
    "name": "SetFeeRecipient",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "caller",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "guardian",
        "type": "address"
      }
    ],
    "name": "SetGuardian",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "allocator",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "bool",
        "name": "isAllocator",
        "type": "bool"
      }
    ],
    "name": "SetIsAllocator",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "newSkimRecipient",
        "type": "address"
      }
    ],
    "name": "SetSkimRecipient",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "caller",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "Id[]",
        "name": "newSupplyQueue",
        "type": "bytes32[]"
      }
    ],
    "name": "SetSupplyQueue",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "caller",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "newTimelock",
        "type": "uint256"
      }
    ],
    "name": "SetTimelock",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "caller",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "Id[]",
        "name": "newWithdrawQueue",
        "type": "bytes32[]"
      }
    ],
    "name": "SetWithdrawQueue",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "caller",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "token",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "Skim",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "caller",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "Id",
        "name": "id",
        "type": "bytes32"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "cap",
        "type": "uint256"
      }
    ],
    "name": "SubmitCap",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "newGuardian",
        "type": "address"
      }
    ],
    "name": "SubmitGuardian",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "caller",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "Id",
        "name": "id",
        "type": "bytes32"
      }
    ],
    "name": "SubmitMarketRemoval",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "newTimelock",
        "type": "uint256"
      }
    ],
    "name": "SubmitTimelock",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "Transfer",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "updatedTotalAssets",
        "type": "uint256"
      }
    ],
    "name": "UpdateLastTotalAssets",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "sender",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "receiver",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "assets",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "shares",
        "type": "uint256"
      }
    ],
    "name": "Withdraw",
    "type": "event"
  },
  {
    "inputs": [],
    "name": "DECIMALS_OFFSET",
    "outputs": [
      {
        "internalType": "uint8",
        "name": "",
        "type": "uint8"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "DOMAIN_SEPARATOR",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "MORPHO",
    "outputs": [
      {
        "internalType": "contract IMorpho",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "address",
            "name": "loanToken",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "collateralToken",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "oracle",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "irm",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "lltv",
            "type": "uint256"
          }
        ],
        "internalType": "struct MarketParams",
        "name": "marketParams",
        "type": "tuple"
      }
    ],
    "name": "acceptCap",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "acceptGuardian",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "acceptOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "acceptTimelock",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      }
    ],
    "name": "allowance",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "approve",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "asset",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "balanceOf",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "Id",
        "name": "",
        "type": "bytes32"
      }
    ],
    "name": "config",
    "outputs": [
      {
        "internalType": "uint184",
        "name": "cap",
        "type": "uint184"
      },
      {
        "internalType": "bool",
        "name": "enabled",
        "type": "bool"
      },
      {
        "internalType": "uint64",
        "name": "removableAt",
        "type": "uint64"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "shares",
        "type": "uint256"
      }
    ],
    "name": "convertToAssets",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "assets",
        "type": "uint256"
      }
    ],
    "name": "convertToShares",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "curator",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "decimals",
    "outputs": [
      {
        "internalType": "uint8",
        "name": "",
        "type": "uint8"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "assets",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "receiver",
        "type": "address"
      }
    ],
    "name": "deposit",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "shares",
        "type": "uint256"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "eip712Domain",
    "outputs": [
      {
        "internalType": "bytes1",
        "name": "fields",
        "type": "bytes1"
      },
      {
        "internalType": "string",
        "name": "name",
        "type": "string"
      },
      {
        "internalType": "string",
        "name": "version",
        "type": "string"
      },
      {
        "internalType": "uint256",
        "name": "chainId",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "verifyingContract",
        "type": "address"
      },
      {
        "internalType": "bytes32",
        "name": "salt",
        "type": "bytes32"
      },
      {
        "internalType": "uint256[]",
        "name": "extensions",
        "type": "uint256[]"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "fee",
    "outputs": [
      {
        "internalType": "uint96",
        "name": "",
        "type": "uint96"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "feeRecipient",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "guardian",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "name": "isAllocator",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "lastTotalAssets",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "name": "maxDeposit",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "name": "maxMint",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      }
    ],
    "name": "maxRedeem",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      }
    ],
    "name": "maxWithdraw",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "assets",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "shares",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "receiver",
        "type": "address"
      }
    ],
    "name": "mint",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "assets",
        "type": "uint256"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes[]",
        "name": "data",
        "type": "bytes[]"
      }
    ],
    "name": "multicall",
    "outputs": [
      {
        "internalType": "bytes[]",
        "name": "results",
        "type": "bytes[]"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "name",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      }
    ],
    "name": "nonces",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "owner",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "Id",
        "name": "",
        "type": "bytes32"
      }
    ],
    "name": "pendingCap",
    "outputs": [
      {
        "internalType": "uint192",
        "name": "value",
        "type": "uint192"
      },
      {
        "internalType": "uint64",
        "name": "validAt",
        "type": "uint64"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "pendingGuardian",
    "outputs": [
      {
        "internalType": "address",
        "name": "value",
        "type": "address"
      },
      {
        "internalType": "uint64",
        "name": "validAt",
        "type": "uint64"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "pendingOwner",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "pendingTimelock",
    "outputs": [
      {
        "internalType": "uint192",
        "name": "value",
        "type": "uint192"
      },
      {
        "internalType": "uint64",
        "name": "validAt",
        "type": "uint64"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "deadline",
        "type": "uint256"
      },
      {
        "internalType": "uint8",
        "name": "v",
        "type": "uint8"
      },
      {
        "internalType": "bytes32",
        "name": "r",
        "type": "bytes32"
      },
      {
        "internalType": "bytes32",
        "name": "s",
        "type": "bytes32"
      }
    ],
    "name": "permit",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "assets",
        "type": "uint256"
      }
    ],
    "name": "previewDeposit",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "shares",
        "type": "uint256"
      }
    ],
    "name": "previewMint",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "shares",
        "type": "uint256"
      }
    ],
    "name": "previewRedeem",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "assets",
        "type": "uint256"
      }
    ],
    "name": "previewWithdraw",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "components": [
              {
                "internalType": "address",
                "name": "loanToken",
                "type": "address"
              },
              {
                "internalType": "address",
                "name": "collateralToken",
                "type": "address"
              },
              {
                "internalType": "address",
                "name": "oracle",
                "type": "address"
              },
              {
                "internalType": "address",
                "name": "irm",
                "type": "address"
              },
              {
                "internalType": "uint256",
                "name": "lltv",
                "type": "uint256"
              }
            ],
            "internalType": "struct MarketParams",
            "name": "marketParams",
            "type": "tuple"
          },
          {
            "internalType": "uint256",
            "name": "assets",
            "type": "uint256"
          }
        ],
        "internalType": "struct MarketAllocation[]",
        "name": "allocations",
        "type": "tuple[]"
      }
    ],
    "name": "reallocate",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "shares",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "receiver",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      }
    ],
    "name": "redeem",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "assets",
        "type": "uint256"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "renounceOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "Id",
        "name": "id",
        "type": "bytes32"
      }
    ],
    "name": "revokePendingCap",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "revokePendingGuardian",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "Id",
        "name": "id",
        "type": "bytes32"
      }
    ],
    "name": "revokePendingMarketRemoval",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "revokePendingTimelock",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "newCurator",
        "type": "address"
      }
    ],
    "name": "setCurator",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "newFee",
        "type": "uint256"
      }
    ],
    "name": "setFee",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "newFeeRecipient",
        "type": "address"
      }
    ],
    "name": "setFeeRecipient",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "newAllocator",
        "type": "address"
      },
      {
        "internalType": "bool",
        "name": "newIsAllocator",
        "type": "bool"
      }
    ],
    "name": "setIsAllocator",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "newSkimRecipient",
        "type": "address"
      }
    ],
    "name": "setSkimRecipient",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "Id[]",
        "name": "newSupplyQueue",
        "type": "bytes32[]"
      }
    ],
    "name": "setSupplyQueue",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "token",
        "type": "address"
      }
    ],
    "name": "skim",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "skimRecipient",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "address",
            "name": "loanToken",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "collateralToken",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "oracle",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "irm",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "lltv",
            "type": "uint256"
          }
        ],
        "internalType": "struct MarketParams",
        "name": "marketParams",
        "type": "tuple"
      },
      {
        "internalType": "uint256",
        "name": "newSupplyCap",
        "type": "uint256"
      }
    ],
    "name": "submitCap",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "newGuardian",
        "type": "address"
      }
    ],
    "name": "submitGuardian",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "address",
            "name": "loanToken",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "collateralToken",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "oracle",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "irm",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "lltv",
            "type": "uint256"
          }
        ],
        "internalType": "struct MarketParams",
        "name": "marketParams",
        "type": "tuple"
      }
    ],
    "name": "submitMarketRemoval",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "newTimelock",
        "type": "uint256"
      }
    ],
    "name": "submitTimelock",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "name": "supplyQueue",
    "outputs": [
      {
        "internalType": "Id",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "supplyQueueLength",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "symbol",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "timelock",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "totalAssets",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "assets",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "totalSupply",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "transfer",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "transferFrom",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }
    ],
    "name": "transferOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256[]",
        "name": "indexes",
        "type": "uint256[]"
      }
    ],
    "name": "updateWithdrawQueue",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "assets",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "receiver",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      }
    ],
    "name": "withdraw",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "shares",
        "type": "uint256"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "name": "withdrawQueue",
    "outputs": [
      {
        "internalType": "Id",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "withdrawQueueLength",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  }
]


Contract Creation Code
6101e080604052346200087e57620059c68038038091620000218285620008bb565b833981019060c0818303126200087e576200003c81620008df565b916200004b60208301620008df565b916040810151916200006060608301620008df565b60808301519092906001600160401b0381116200087e57826200008591830162000935565b60a08201519092906001600160401b0381116200087e57620000a8920162000935565b9360405194620000b88662000883565b60018652603160f81b6020870190815283519091906001600160401b0381116200062b57600354600181811c9116801562000873575b60208210146200075357601f811162000809575b50806020601f8211600114620007805760009162000774575b508160011b916000199060031b1c1916176003555b8051906001600160401b0382116200062b5760045490600182811c9216801562000769575b6020831014620007535781601f849311620006e1575b50602090601f831160011462000656576000926200064a575b50508160011b916000199060031b1c1916176004555b620001ae6001600160a01b038516620009b7565b901562000641575b60a0526001600160a01b038416608052620001d18362000b3d565b91610160928352620001e38762000ce2565b9361018094855260208151910120916101209783895251902090610140928284524660e0526040519260208401917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8352604085015260608401524660808401523060a084015260a0835260c083019083821060018060401b038311176200062b5760408290528351902060c05230610100908152996001600160a01b031692831562000614575050600980546001600160a01b0319908116909155600880549182168417905560405192906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a36001600160a01b03169081156200060557506101a081815260405163313ce56760e01b81529095906020816004816001600160a01b0386165afa908115620005f957600091620005ae575b5060ff169660ff6101c0988060120390601211021688526212750081116200059c576201518081106200058a5780600e556040519081527fd28e9b90ee9b37c5936ff84392d71f29ff18117d7e76bcee60615262a90a3f7560203392a2600060115560405190602082019260008063095ea7b360e01b958681528360248701528119604487015260448652620003be866200089f565b855190826001600160a01b0387165af1620003d862000982565b8162000556575b508062000542575b15620004eb575b5050505060405195614b8c978862000e3a893960805188818161204e015281816122e101528181613faa015261410a015260a051886123ab015260c05188613077015260e0518861313201525187613041015251866130c6015251856130ec0152518461102e01525183611057015251828181611596015281816116f401528181611e82015281816120d20152818161229c0152818161367401528181613b4a01528181613bf7015281816141dd015281816142e00152818161456d015281816146480152818161491701526149c0015251818181610b320152818161238701528181613d0901528181613d4c01528181613ed10152613f140152f35b620005389362000529916040519160208301526024820152600060448201526044815262000519816200089f565b6001600160a01b03831662000a5a565b6001600160a01b031662000a5a565b38808080620003ee565b506001600160a01b0382163b1515620003e7565b80518015925082156200056d575b505038620003df565b62000582925060208091830101910162000a40565b388062000564565b604051631a1593df60e11b8152600490fd5b6040516346fedb5760e01b8152600490fd5b6020813d602011620005f0575b81620005ca60209383620008bb565b81010312620005ec57519060ff82168203620005e9575060ff62000328565b80fd5b5080fd5b3d9150620005bb565b6040513d6000823e3d90fd5b63d92e233d60e01b8152600490fd5b631e4fbdf760e01b8252600060c490910152602490fd5b634e487b7160e01b600052604160045260246000fd5b506012620001b6565b01519050388062000184565b600460009081527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b9350601f198516905b818110620006c85750908460019594939210620006ae575b505050811b016004556200019a565b015160001960f88460031b161c191690553880806200069f565b9293602060018192878601518155019501930162000687565b60046000529091507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b601f840160051c8101602085106200074b575b90849392915b601f830160051c820181106200073b5750506200016b565b6000815585945060010162000723565b50806200071d565b634e487b7160e01b600052602260045260246000fd5b91607f169162000155565b9050850151386200011b565b600360009081527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b9250601f198416905b818110620007f057509083600194939210620007d6575b5050811b0160035562000130565b87015160001960f88460031b161c191690553880620007c8565b9192602060018192868c015181550194019201620007b1565b60036000527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b601f830160051c8101916020841062000868575b601f0160051c01905b8181106200085b575062000102565b600081556001016200084c565b909150819062000843565b90607f1690620000ee565b600080fd5b604081019081106001600160401b038211176200062b57604052565b608081019081106001600160401b038211176200062b57604052565b601f909101601f19168101906001600160401b038211908210176200062b57604052565b51906001600160a01b03821682036200087e57565b6001600160401b0381116200062b57601f01601f191660200190565b60005b838110620009245750506000910152565b818101518382015260200162000913565b81601f820112156200087e5780516200094e81620008f4565b926200095e6040519485620008bb565b818452602082840101116200087e576200097f916020808501910162000910565b90565b3d15620009b2573d906200099682620008f4565b91620009a66040519384620008bb565b82523d6000602084013e565b606090565b90604051602081019063313ce56760e01b825260048152620009d98162000883565b5160009384928392916001600160a01b03165afa620009f762000982565b908062000a33575b62000a0a575b508190565b60208180518101031262000a2f576020015160ff811162000a05576001925060ff1690565b8280fd5b50602081511015620009ff565b908160209103126200087e575180151581036200087e5790565b60008062000a879260018060a01b03169360208151910182865af162000a7f62000982565b908362000ad5565b805190811515918262000ab7575b505062000a9f5750565b60249060405190635274afe760e01b82526004820152fd5b62000acc925060208091830101910162000a40565b15388062000a95565b9062000afe575080511562000aec57805190602001fd5b604051630a12f52160e11b8152600490fd5b8151158062000b33575b62000b11575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b1562000b08565b8051602091908281101562000bbd575090601f82511162000b7b578082519201519080831062000b6c57501790565b82600019910360031b1b161790565b60449062000baf9260405193849263305a27a960e01b84528060048501528251928391826024870152868601910162000910565b601f01601f19168101030190fd5b6001600160401b0381116200062b576005928354926001938481811c9116801562000cd7575b838210146200075357601f811162000ca0575b5081601f841160011462000c36575092829391839260009462000c2a575b50501b916000199060031b1c191617905560ff90565b01519250388062000c14565b919083601f1981168760005284600020946000905b8883831062000c85575050501062000c6b575b505050811b01905560ff90565b015160001960f88460031b161c1916905538808062000c5e565b85870151885590960195948501948793509081019062000c4b565b8560005284601f846000209201871c820191601f8601881c015b82811062000cca57505062000bf6565b6000815501859062000cba565b90607f169062000be3565b80516020908181101562000d0f5750601f82511162000b7b578082519201519080831062000b6c57501790565b906001600160401b0382116200062b57600654926001938481811c9116801562000e2e575b838210146200075357601f811162000df4575b5081601f841160011462000d88575092829391839260009462000d7c575b50501b916000199060031b1c19161760065560ff90565b01519250388062000d65565b919083601f198116600660005284600020946000905b8883831062000dd9575050501062000dbf575b505050811b0160065560ff90565b015160001960f88460031b161c1916905538808062000db1565b85870151885590960195948501948793509081019062000d9e565b600660005284601f84600020920160051c820191601f860160051c015b82811062000e2157505062000d47565b6000815501859062000e11565b90607f169062000d3456fe6080604052600436101561001257600080fd5b60003560e01c806301e1d1141461289a57806306fdde03146127ed57806307a2d13a14611b6e578063095ea7b3146127c75780630a28a4771461279e578063102f7b6c1461270f57806318160ddd146126f15780631ecca77c1461268757806323b872dd1461264f5780632acc56f9146124505780632b30997b146123e2578063313ce5671461237257806333f91ebb146123545780633644e51514612339578063388af5b51461231057806338d52e0f146122cb5780633acb5624146122865780633b24c2bf14612008578063402d267d14611fe457806341b6783314611c69578063452a932014611c405780634690484014611c1f5780634b998de514611b735780634cdad50614611b6e5780634dedf20e14611b2f578063568efc0714611b1157806362518ddf14611ae857806369fe0e2d14611a2e5780636e553f65146119ec5780636fda38681461198c57806370a0823114611952578063715018a6146118eb5780637224a5121461181e5780637299aa31146113bc578063762c31ba1461138157806379ba5097146112fd5780637cc4d9a1146112cb5780637ecebe001461129157806384755b5f1461112157806384b0196e146110185780638a2c7b3914610fe25780638da5cb5b14610fb957806394bf804d14610f7757806395d89b4114610e955780639d6b4a4514610dd2578063a17b313014610db4578063a31be5d614610d6c578063a5f31d6114610d09578063a9059cbb14610cd8578063ac9650d814610b56578063aea70acc14610b18578063b192a84a14610a7c578063b3d7f6b914610a49578063b460af9414610a0b578063ba087652146109ca578063bc25cf77146108e6578063c63d75b6146108a4578063c6e6f592146103e8578063c9649aa914610828578063cc718f76146107dd578063ce96cb77146107b5578063d33219b414610797578063d505accf14610629578063d905777e146105f5578063dd62ed3e146105a4578063ddca3f431461057d578063e30c397814610554578063e66f53b71461052b578063e74b981b1461046d578063e90956cf146103ed578063ef8b30f7146103e8578063f2fde38b1461037b5763f7d185211461033f57600080fd5b346103765760203660031901126103765760043560145481101561037657610368602091612ad6565b90546040519160031b1c8152f35b600080fd5b346103765760203660031901126103765761039461291e565b61039c612b6b565b600980546001600160a01b0319166001600160a01b039283169081179091556008549091167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700600080a3005b612b42565b346103765760203660031901126103765761040661291e565b61040e612b6b565b600a546001600160a01b03918216918116821461045b576001600160a01b0319168117600a557fbd0a63c12948fbc9194a5839019f99c9d71db924e5c70018265bc778b8f1a506600080a2005b60405163a741a04560e01b8152600490fd5b346103765760203660031901126103765761048661291e565b61048e612b6b565b6012546001600160a01b0382169190606081901c831461045b5782159081610518575b50610506576104c66104c1614a7a565b614a49565b6001600160601b036012549181199060601b169116176012557f2e979f80fe4d43055c584cf4a8467c55875ea36728fc37176c05acd784eb7a73600080a2005b6040516333fe7c6560e21b8152600490fd5b6001600160601b039150161515836104b1565b3461037657600036600319011261037657600a546040516001600160a01b039091168152602090f35b34610376576000366003190112610376576009546040516001600160a01b039091168152602090f35b346103765760003660031901126103765760206001600160601b0360125416604051908152f35b34610376576040366003190112610376576105bd61291e565b6105c5612934565b9060018060a01b038091166000526001602052604060002091166000526020526020604060002054604051908152f35b3461037657602036600319011261037657602061062161061b61061661291e565b613b09565b91613d41565b604051908152f35b346103765760e03660031901126103765761064261291e565b61064a612934565b60443590606435926084359360ff851685036103765780421161077f5760018060a01b0390818316958660005260076020526040600020908154916001830190556040519260208401927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98452896040860152858816606086015288608086015260a085015260c084015260c0835260e08301918383106001600160401b03841117610769576107369361072d9360405251902061070661303e565b906040519161190160f01b83526002830152602282015260c43591604260a4359220612f03565b90929192612fb3565b1684810361074b57506107499350612ca8565b005b60449085604051916325c0072360e11b835260048301526024820152fd5b634e487b7160e01b600052604160045260246000fd5b6024906040519063313c898160e11b82526004820152fd5b34610376576000366003190112610376576020600e54604051908152f35b346103765760203660031901126103765760206107d361061661291e565b5050604051908152f35b3461037657602036600319011261037657600435600052600d60205260606040600020546040519060018060b81b038116825260ff8160b81c161515602083015260c01c6040820152f35b3461037657600036600319011261037657600854336001600160a01b0391821614159081610895575b50610883576000601155337f921828337692c347c634c5d2aacbc7b756014674bd236f3cc2058d8e284a951b600080a2005b604051637cf97e4d60e11b8152600490fd5b9050600c541633141581610851565b34610376576020366003190112610376576108bd61291e565b5060206106216108e06108ce613beb565b6108d6614ad0565b9290600254612c9b565b90613d41565b34610376576020806003193601126103765761090061291e565b6013546001600160a01b039081169182156109b8576040516370a0823160e01b81523060048201529116928082602481875afa9182156109ac5760009261097b575b50610970827f2ae72b44f59d038340fca5739135a1d51fc5ab720bb02d983e4c5ff4119ca7b8939486613590565b6040519283523392a3005b91508082813d83116109a5575b6109928183612a0d565b8101031261037657905190610970610942565b503d610988565b6040513d6000823e3d90fd5b60405163d92e233d60e01b8152600490fd5b34610376576020610a056106216109e036612b0d565b6109e8614a7a565b916109f68360025486613efb565b95838780809603911102614a49565b33614055565b34610376576020610a05610621610a2136612b0d565b610a2c929192614a7a565b92610a3a8460025485613cfe565b95848480899703911102614a49565b34610376576020366003190112610376576020610621610a74610a6a614ad0565b9190600254612c9b565b600435613eb8565b3461037657604036600319011261037657610a9561291e565b6024359081151580920361037657610aab612b6b565b6001600160a01b03166000818152600b602052604090205490919060ff161515811461045b5760207f74dc60cbc81a9472d04ad1d20e151d369c41104d655ed3f2f3091166a502cd8d9183600052600b8252604060002060ff1981541660ff8316179055604051908152a2005b3461037657600036600319011261037657602060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461037657602080600319360112610376576001600160401b0360043581811161037657610b8890369060040161295e565b610b9481939293612e0e565b92610ba26040519485612a0d565b818452610bae82612e0e565b601f19018560005b828110610cc95750505060005b828110610c2857604080518781528651818901819052600092600582901b8301810191898b01918b9085015b828710610bfc5785850386f35b909192938280610c18600193603f198a820301865288516128b5565b9601920196019592919092610bef565b8060051b820135601e19833603018112156103765782019081358581116103765787830190803603821361037657610c5f81612e34565b91610c6d6040519384612a0d565b818352898301948a8336920101116103765784610ca99360008c8582968396610cc49b37830101525190305af4610ca2612e70565b9030612ea0565b610cb38288612e5c565b52610cbe8187612e5c565b50612e25565b610bc3565b60608782018301528101610bb6565b3461037657604036600319011261037657610cfe610cf461291e565b6024359033612bb9565b602060405160018152f35b3461037657600036600319011261037657600f546001600160401b038160a01c168015610d5a574210610d4857610749906001600160a01b0316614426565b60405163333bd2cb60e11b8152600490fd5b60405163e5f408a560e01b8152600490fd5b34610376576020366003190112610376576004356000908152601060209081526040918290205482516001600160c01b038216815260c09190911c91810191909152f35b0390f35b34610376576000366003190112610376576020601454604051908152f35b3461037657602036600319011261037657610deb61291e565b610df3612b6b565b600c546001600160a01b0382811692911682811461045b57600f54906001600160401b038260a01c16610e8357610e2f57506107499150614426565b9050816001600160401b0360a01b610e49600e5442612c9b565b60a01b169163ffffffff60e01b161717600f557f7633313af54753bce8a149927263b1a55eba857ba4ef1d13c6aee25d384d3c4b600080a2005b6040516324d9026760e11b8152600490fd5b3461037657600036600319011261037657604051600454600082610eb883612b7f565b91828252602093600190858282169182600014610f57575050600114610efa575b50610ee692500383612a0d565b610db06040519282849384528301906128b5565b84915060046000527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b906000915b858310610f3f575050610ee6935082010185610ed9565b80548389018501528794508693909201918101610f28565b60ff191685820152610ee695151560051b8501019250879150610ed99050565b34610376576040366003190112610376576020600435610621610f98612934565b91610fb1610fa4614a7a565b8060165560025483613eb8565b809333613f3e565b34610376576000366003190112610376576008546040516001600160a01b039091168152602090f35b34610376576000366003190112610376576011548060c01c8015610d5a574210610d4857610749906001600160c01b03166143ef565b34610376576000366003190112610376576110527f0000000000000000000000000000000000000000000000000000000000000000613158565b61107b7f0000000000000000000000000000000000000000000000000000000000000000613255565b6040516020808201928284106001600160401b038511176107695791816110d485946110c6979660405260008452604051978897600f60f81b895260e0858a015260e08901906128b5565b9087820360408901526128b5565b91466060870152306080870152600060a087015285830360c0870152519182815201929160005b82811061110a57505050500390f35b8351855286955093810193928101926001016110fb565b346103765760a03660031901126103765761113b36612a2e565b600a54336001600160a01b0391821614159081611282575b506112705760a0902080600052600d60205260406000205460c01c610e83576000818152600d60205260409020546001600160b81b031661125e5780600052600d60205260ff60406000205460b81c16156112465780600052601060205260406000205460c01c61122f576112076001600160401b036111d5600e5442612c9b565b6000848152600d6020526040902080546001600160c01b03169290911660c01b6001600160c01b031916919091179055565b337f3240fc70754c5a2b4dab10bf7081a00024bfc8491581ee3d355360ec0dd91f16600080a3005b6024906040519062463af360e81b82526004820152fd5b60249060405190636113d8c760e01b82526004820152fd5b60405163624718b960e11b8152600490fd5b6040516332a2673b60e21b8152600490fd5b90506008541633141582611153565b34610376576020366003190112610376576001600160a01b036112b261291e565b1660005260076020526020604060002054604051908152f35b3461037657600036600319011261037657601154604080516001600160c01b038316815260c09290921c602083015290f35b34610376576000366003190112610376576009546001600160a01b033381831603611369576001600160601b0360a01b8092166009556008549133908316176008553391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b60405163118cdaa760e01b8152336004820152602490fd5b3461037657600036600319011261037657600f54604080516001600160a01b038316815260a09290921c6001600160401b0316602083015290f35b34610376576020366003190112610376576001600160401b036004351161037657366023600435011215610376576001600160401b0360043560040135116103765736602460c060043560040135026004350101116103765733600052600b60205260ff604060002054161580611809575b806117f4575b6117e25760008060005b60043560040135811061146557500361145357005b6040516309e36b8960e41b8152600490fd5b9060c082026004350190602319823603019160c08312610376576040519060408201938285106001600160401b03861117610769578460405260a08091126103765760c4611513926114b68761298e565b6114c26024820161294a565b87526114d06044820161294a565b60608601526114e16064820161294a565b60808601526114f26084820161294a565b8386015260a481013560c086015286855201356020840152842080946142ad565b5060208301518083118184030293919290841561167757505084600052600d60205260ff60406000205460b81c161561165e57600091602082015115611652575b5051604051635c2bea4960e01b81529290611573906004850190613516565b60a483015260c48201523060e482018190526101048201526040816101248160007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af19182156109ac57611618936116129360009360009161161d575b506040519084825260208201527fdd8bf5226dff861316e0fa7863fdb7dc7b87c614eb29a135f524eb79d5a1189a60403392a3612c9b565b91612e25565b61143e565b905061164291935060403d60401161164b575b61163a8183612a0d565b810190613500565b929092886115da565b503d611630565b60009350915087611554565b604051636113d8c760e01b815260048101869052602490fd5b919250939596925060001981146000146117d5575081850382861102925b83156117c6576000858152600d60205260409020546001600160b81b03169081156117ad57846116c491612c9b565b11611794579060406116ee93925181518095819263a99aad8960e01b835286309160048501613551565b038160007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af19384156109ac576116189461176d94600091611773575b506040519084825260208201527f89bf199df65bf65155e3e0a8abc4ad4a1be606220c8295840dba2ab5656c1f6d60403392a3612c9b565b92612e25565b61178c915060403d60401161164b5761163a8183612a0d565b905088611735565b604051635e25afa560e01b815260048101859052602490fd5b60405163067f0a2560e41b815260048101879052602490fd5b50509390506116189150612e25565b8380820391110292611695565b60405163f7137c0f60e01b8152600490fd5b506008546001600160a01b0316331415611434565b50600a546001600160a01b031633141561142e565b346103765760203660031901126103765760043561183a612b6b565b600e5480821461045b5760115460c01c610e83576212750082116118d9576201518082106118c757808211156118745750610749906143ef565b7fb3aa0ade2442acf51d06713c2d1a5a3ec0373cce969d42b53f4689f97bccf380916020916001600160c01b0319906118ad9042612c9b565b60c01b1660018060b81b03821617601155604051908152a1005b604051631a1593df60e11b8152600490fd5b6040516346fedb5760e01b8152600490fd5b3461037657600036600319011261037657611904612b6b565b600980546001600160a01b03199081169091556008805491821690556000906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34610376576020366003190112610376576001600160a01b0361197361291e565b1660005260006020526020604060002054604051908152f35b346103765760a0366003190112610376576119a636612a2e565b60a08120600052601060205260406000205460c01c8015610d5a574210610d48578060a0610749922080600052601060205260018060b81b036040600020541691614472565b34610376576040366003190112610376576020600435610621611a0d612934565b611a25611a18614a7a565b8060165560025485613d41565b92839133613f3e565b3461037657602036600319011261037657600435611a4a612b6b565b601254906001600160601b0391828116821461045b576706f05b59d3b200008211611ad6578115159081611aca575b5061050657611a896104c1614a7a565b16806001600160601b031960125416176012556040519081527f01fe2943baee27f47add82886c2200f910c749c461c9b63c5fe83901a53bdb4960203392a2005b905060601c1583611a79565b60405163f4df6ae560e01b8152600490fd5b346103765760203660031901126103765760043560155481101561037657610368602091612a9b565b34610376576000366003190112610376576020601654604051908152f35b34610376576020366003190112610376576001600160a01b03611b5061291e565b16600052600b602052602060ff604060002054166040519015158152f35b6128f5565b3461037657602036600319011261037657600c5460043590336001600160a01b0391821614159081611c0f575b81611c00575b50611bee576000818152600d6020526040812080546001600160c01b0316905533907fcbeb8ecdaa5a3c133e62219b63bfc35bce3fda13065d2bed32e3b7dde60a59f49080a3005b60405163d080fa3160e01b8152600490fd5b90506008541633141582611ba6565b809150600a541633141590611ba0565b3461037657600036600319011261037657602060125460601c604051908152f35b3461037657600036600319011261037657600c546040516001600160a01b039091168152602090f35b3461037657602080600319360112610376576001600160401b039060043582811161037657611c9c90369060040161295e565b909233600052600b835260ff604060002054161580611fcf575b80611fba575b6117e257601554611ccc81612e0e565b611cd96040519182612a0d565b818152611ce582612e0e565b601f19969087013683880137611cfa85612e0e565b94611d086040519687612a0d565b808652611d1481612e0e565b868801980136893760005b818110611f4e5750505060005b828110611e1957505050815190811161076957600160401b81116107695760155481601555808210611dea575b5083601560005260005b828110611dca575050509060405191818301908284525180915260408301939160005b828110611db657337fe0c2db6b54586be6d7d49943139fccf0dd315ba63e55364a76c73cd8fdba724d86880387a2005b835186529481019492810192600101611d86565b8151600080516020614b3783398151915282015590840190600101611d63565b81600080516020614b3783398151915291820191015b818110611e0d5750611d59565b60008155600101611e00565b611e238183612e5c565b5115611e38575b611e3390612e25565b611d2c565b611e4181612a9b565b90549060031b1c80600052600d9081885260018060b81b0360406000205416611f3657806000526010885260406000205460c090811c611f1e57611ea630837f0000000000000000000000000000000000000000000000000000000000000000613441565b611ebe575b5060009081529087526040812055611e2a565b81600052828952604060002054811c15611f055781600052828952604060002054901c4210611eed5789611eab565b60249060405190632cd5119960e21b82526004820152fd5b60405163af8ae28760e01b815260048101839052602490fd5b60405162463af360e81b815260048101839052602490fd5b6024906040519063401d83d960e11b82526004820152fd5b611f5981838561341e565b35611f6381612a9b565b90549060031b1c90611f758187612e5c565b51611fa157906001611f8b611f9c949388612e5c565b52611f96828a612e5c565b52612e25565b611d1f565b6040516392a726c360e01b815260048101839052602490fd5b506008546001600160a01b0316331415611cbc565b50600a546001600160a01b0316331415611cb6565b3461037657602036600319011261037657611ffd61291e565b506020610621613beb565b346103765760c03660031901126103765761202236612a2e565b600a546001600160a01b03919060a43590831633141580612278575b6112705760a082209280835116817f0000000000000000000000000000000000000000000000000000000000000000160361225f5760405190602091828101908682526003604082015260408152612095816129d7565b51902060028101809111612249576120ce916120b26000926133c6565b906040518080958194637784c68560e01b83526004830161338b565b03917f0000000000000000000000000000000000000000000000000000000000000000165afa9081156109ac576001600160801b039161211691600091612226575b50612e4f565b51161561221457836000526010815260406000205460c01c610e835783600052600d815260406000205460c01c612202576000848152600d825260409020546001600160b81b0390811683811461045b578310156121835750509161217d610749936133eb565b91614472565b7fe851bb5856808a50efd748be463b8f35bcfb5ec74c5bfde776fe0a4d2a26db279293506109709085600052601083526001600160401b036121e36040600020926121cd886133eb565b90600e5491168360c01b85541617845542612c9b565b82546001600160c01b0316911660c01b6001600160c01b031916179055565b6040516325f600a360e11b8152600490fd5b6040516396e1352960e01b8152600490fd5b61224391503d806000833e61223b8183612a0d565b810190613312565b87612110565b634e487b7160e01b600052601160045260246000fd5b6040516333cbfd2760e21b815260048101859052602490fd5b50826008541633141561203e565b34610376576000366003190112610376576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b34610376576000366003190112610376576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b34610376576000366003190112610376576013546040516001600160a01b039091168152602090f35b3461037657600036600319011261037657602061062161303e565b34610376576000366003190112610376576020601554604051908152f35b346103765760003660031901126103765760ff7f00000000000000000000000000000000000000000000000000000000000000001660ff7f0000000000000000000000000000000000000000000000000000000000000000160160ff81116122495760209060ff60405191168152f35b34610376576020366003190112610376576123fb61291e565b612403612b6b565b6013546001600160a01b03918216918116821461045b576001600160a01b03191681176013557f2e7908865670e21b9779422cadf5f1cba271a62bb95c71eaaf615c0a1c48ebee600080a2005b3461037657602080600319360112610376576001600160401b03906004358281116103765761248390369060040161295e565b909233600052600b835260ff60406000205416158061263a575b80612625575b6117e257601e82116126135760005b8281106125ba5750811161076957600160401b81116107695760145481601455808210612579575b5082601460005260005b8281106125475750509060405191808284018385525260408301939160005b82811061253357337f6ce31538fc7fba95714ddc8a275a09252b4b1fb8f33d2550aa58a5f62ad934de86880387a2005b833586529481019492810192600101612503565b81357fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec820155908301906001016124e4565b817fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec91820191015b8181106125ae57506124da565b600081556001016125a1565b6125c581848761341e565b356000908152600d855260409020546001600160b81b0316156125f0576125eb90612e25565b6124b2565b6125fd602491848761341e565b60405163067f0a2560e41b815290356004820152fd5b6040516340797bd760e11b8152600490fd5b506008546001600160a01b03163314156124a3565b50600a546001600160a01b031633141561249d565b3461037657606036600319011261037657610cfe61266b61291e565b612673612934565b60443591612682833383612d3b565b612bb9565b3461037657600036600319011261037657600854336001600160a01b03918216141590816126e2575b50610883576000600f55337fc40a085ccfa20f5fd518ade5c3a77a7ecbdfbb4c75efcdca6146a8e3c841d663600080a2005b9050600c5416331415816126b0565b34610376576000366003190112610376576020600254604051908152f35b3461037657602036600319011261037657600c5460043590336001600160a01b039182161415908161278e575b8161277f575b50611bee5780600052601060205260006040812055337f1026ceca5ed3747eb5edec555732d4a6f901ce1a875ecf981064628cadde1120600080a3005b90506008541633141582612742565b809150600a54163314159061273c565b346103765760203660031901126103765760206106216127bf610a6a614ad0565b600435613cfe565b3461037657604036600319011261037657610cfe6127e361291e565b6024359033612ca8565b346103765760003660031901126103765760405160035460008261281083612b7f565b91828252602093600190858282169182600014610f5757505060011461283d5750610ee692500383612a0d565b84915060036000527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b906000915b858310612882575050610ee6935082010185610ed9565b8054838901850152879450869390920191810161286b565b3461037657600036600319011261037657602061062161366a565b919082519283825260005b8481106128e1575050826000602080949584010152601f8019910116010190565b6020818301810151848301820152016128c0565b34610376576020366003190112610376576020610621612916610a6a614ad0565b600435613efb565b600435906001600160a01b038216820361037657565b602435906001600160a01b038216820361037657565b35906001600160a01b038216820361037657565b9181601f84011215610376578235916001600160401b038311610376576020808501948460051b01011161037657565b60a081019081106001600160401b0382111761076957604052565b60c081019081106001600160401b0382111761076957604052565b6001600160401b03811161076957604052565b606081019081106001600160401b0382111761076957604052565b604081019081106001600160401b0382111761076957604052565b90601f801991011681019081106001600160401b0382111761076957604052565b60a09060031901126103765760405190612a478261298e565b816001600160a01b0360043581811681036103765782526024358181168103610376576020830152604435818116810361037657604083015260643590811681036103765760608201526080608435910152565b601554811015612ac0576015600052600080516020614b378339815191520190600090565b634e487b7160e01b600052603260045260246000fd5b601454811015612ac05760146000527fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec0190600090565b606090600319011261037657600435906001600160a01b03906024358281168103610376579160443590811681036103765790565b34610376576020366003190112610376576020610621612b63610a6a614ad0565b600435613d41565b6008546001600160a01b0316330361136957565b90600182811c92168015612baf575b6020831014612b9957565b634e487b7160e01b600052602260045260246000fd5b91607f1691612b8e565b916001600160a01b03808416928315612c825716928315612c695760009083825281602052604082205490838210612c33575091604082827fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef958760209652828652038282205586815220818154019055604051908152a3565b60405163391434e360e21b81526001600160a01b03919091166004820152602481019190915260448101839052606490fd5b0390fd5b60405163ec442f0560e01b815260006004820152602490fd5b604051634b637e8f60e11b815260006004820152602490fd5b9190820180921161224957565b6001600160a01b03908116918215612d225716918215612d095760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925918360005260018252604060002085600052825280604060002055604051908152a3565b604051634a1406b160e11b815260006004820152602490fd5b60405163e602df0560e01b815260006004820152602490fd5b9160018060a01b038093169160009383855260016020526040938486209183169182875260205284862054926000198403612d7a575b50505050505050565b848410612dde57508015612dc6578115612dae57855260016020528385209085526020520391205538808080808080612d71565b8451634a1406b160e11b815260048101879052602490fd5b845163e602df0560e01b815260048101879052602490fd5b8551637dc7a0d960e11b81526001600160a01b039190911660048201526024810184905260448101859052606490fd5b6001600160401b0381116107695760051b60200190565b60001981146122495760010190565b6001600160401b03811161076957601f01601f191660200190565b805115612ac05760200190565b8051821015612ac05760209160051b010190565b3d15612e9b573d90612e8182612e34565b91612e8f6040519384612a0d565b82523d6000602084013e565b606090565b90612ec75750805115612eb557805190602001fd5b604051630a12f52160e11b8152600490fd5b81511580612efa575b612ed8575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b15612ed0565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411612f8757926020929160ff608095604051948552168484015260408301526060820152600092839182805260015afa15612f7b5780516001600160a01b03811615612f7257918190565b50809160019190565b604051903d90823e3d90fd5b50505060009160039190565b60041115612f9d57565b634e487b7160e01b600052602160045260246000fd5b612fbc81612f93565b80612fc5575050565b612fce81612f93565b60018103612fe85760405163f645eedf60e01b8152600490fd5b612ff181612f93565b600281036130125760405163fce698f760e01b815260048101839052602490fd5b8061301e600392612f93565b146130265750565b602490604051906335e2f38360e21b82526004820152fd5b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316148061312f575b15613099577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a08152613129816129a9565b51902090565b507f00000000000000000000000000000000000000000000000000000000000000004614613070565b60ff81146131965760ff811690601f8211613184576040519161317a836129f2565b8252602082015290565b604051632cd44ac360e21b8152600490fd5b506040516005548160006131a983612b7f565b80835260209360019081811690811561323557506001146131d6575b50506131d392500382612a0d565b90565b9093915060056000527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0936000915b81831061321d5750506131d3935082010138806131c5565b85548784018501529485019486945091830191613205565b9150506131d394925060ff191682840152151560051b82010138806131c5565b60ff81146132775760ff811690601f8211613184576040519161317a836129f2565b5060405160065481600061328a83612b7f565b80835260209360019081811690811561323557506001146132b35750506131d392500382612a0d565b9093915060066000527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f936000915b8183106132fa5750506131d3935082010138806131c5565b855487840185015294850194869450918301916132e2565b6020908181840312610376578051906001600160401b03821161037657019180601f8401121561037657825161334781612e0e565b936133556040519586612a0d565b818552838086019260051b820101928311610376578301905b82821061337c575050505090565b8151815290830190830161336e565b6020908160408183019282815285518094520193019160005b8281106133b2575050505090565b8351855293810193928101926001016133a4565b604051906133d3826129f2565b60018252602036818401376133e782612e4f565b5290565b6001600160b81b03908181116133ff571690565b604490604051906306dfcc6560e41b825260b860048301526024820152fd5b9190811015612ac05760051b0190565b8181029291811591840414171561224957565b6134b96000919493929461349e60409687516020810191825260028982015288815261346c816129d7565b51902087516001600160a01b0396871660208201908152818a0192909252888152613496816129d7565b5190206133c6565b8651948580948193637784c68560e01b83526004830161338b565b0392165afa9081156134f5576134d89293506000916134dc5750612e4f565b5190565b6134ef913d8091833e61223b8183612a0d565b38612110565b83513d6000823e3d90fd5b9190826040910312610376576020825192015190565b6080809160018060a01b0380825116855280602083015116602086015280604083015116604086015260608201511660608501520151910152565b9190610140936000926135678561012094613516565b60a085015260c084018390526001600160a01b031660e084015261010083018190528201520190565b60405163a9059cbb60e01b60208201526001600160a01b03909216602483015260448083019390935291815260808101916001600160401b03831182841017610769576135df926040526135e1565b565b60018060a01b03169061360b600080836020829551910182875af1613604612e70565b9084612ea0565b90815191821515928361363b575b5050506136235750565b60249060405190635274afe760e01b82526004820152fd5b8192935090602091810103126136665760200151908115918215036136635750388080613619565b80fd5b5080fd5b60009060006015547f00000000000000000000000000000000000000000000000000000000000000005b8183106136a057505050565b9091936136eb6136f1916136e56136c56136b989612a9b565b90549060031b1c614192565b6136dd6136d63060a0842089613441565b91876137f4565b5050916136f8565b90612c9b565b94612e25565b9190613694565b600182019291831061224957620f42408201809211612249576131d39261371e9161342e565b8115613728570490565b634e487b7160e01b600052601260045260246000fd5b51906001600160801b038216820361037657565b908160c0910312610376576137c460a06040519261376f846129a9565b6137788161373e565b84526137866020820161373e565b60208501526137976040820161373e565b60408501526137a86060820161373e565b60608501526137b96080820161373e565b60808501520161373e565b60a082015290565b9190820391821161224957565b9190916001600160801b038080941691160191821161224957565b60a0822060408051632e3071cd60e11b815260048101929092529390926001600160a01b039260c0908590602490829087165afa938415613a9857600094613a68575b5060808401926001600160801b039361385385825116426137cc565b9182151580613a5a575b80613a4b575b61388b575b505050508183511691606081806020870151169686015116940151169193929190565b60608401518851638c00bf6b60e01b81529116936138ad906004830190613516565b8587511660a482015260208701938685511660c483015286898901938185511660e48501528160608b01511661010485015251166101248301526020826101648160a08c01948b8651166101448301525afa8015613a40578792600091613a04575b5061396e61392461396396858751169361342e565b91613968671bc16d674ec8000061393b858061342e565b0493670de0b6b3a764000098856729a2241af62c000061395c848d9961342e565b0492612c9b565b612c9b565b9061342e565b04928261398661397d86613aa3565b828451166137d9565b1690528161399f61399685613aa3565b828b51166137d9565b16885251168015613868576139b39161342e565b046139c181858751166137cc565b8483511691620f424083018093116122495760018201809211612249576139f36139f89261371e889561397d9461342e565b613aa3565b16905238808080613868565b91939492506020823d8211613a38575b81613a2160209383612a0d565b81010312613663575051909291869161396e61390f565b3d9150613a14565b89513d6000823e3d90fd5b50806060850151161515613863565b50858888015116151561385d565b613a8a91945060c03d8111613a91575b613a828183612a0d565b810190613752565b9238613837565b503d613a78565b85513d6000823e3d90fd5b6001600160801b0390604051613ab8816129f2565b60148152731b585e081d5a5b9d0c4c8e08195e18d95959195960621b6020820152828211613ae557501690565b60405162461bcd60e51b815260206004820152908190612c659060248301906128b5565b613b4090613b15614ad0565b613b23819492600254612c9b565b9260018060a01b0316600052600060205282604060002054613efb565b60155492908060007f00000000000000000000000000000000000000000000000000000000000000005b868210613b83575b5050613b80929394506137cc565b92565b9092613bca613b9185612a9b565b90549060031b1c613bc4613bb0613ba783614192565b92309087613441565b613bba83876137f4565b50939180936136f8565b9261499d565b808203911102928315613be657613be090612e25565b90613b6a565b613b72565b600090600080601454907f00000000000000000000000000000000000000000000000000000000000000005b828410613c245750505050565b90919294613c3186612ad6565b905460039190911b1c808452600d60205260408420546001600160b81b0316908115613ca25791613c9491613c88613c9a94613c80613c7a613c7430848b613441565b92614192565b886137f4565b505091613cae565b80820391110290612c9b565b95612e25565b929190613c17565b505094613c9a90612e25565b906001810180911161224957620f424083019182841161224957620f423f91613cd69161342e565b920191818311612249576131d39261371e91612c9b565b60ff16604d811161224957600a0a90565b9190613d2d906136e57f0000000000000000000000000000000000000000000000000000000000000000613ced565b60018201809211612249576131d392613d84565b9190613d70906136e57f0000000000000000000000000000000000000000000000000000000000000000613ced565b60018201809211612249576131d392613e35565b9190613d91828285613e35565b9282156137285709613da05790565b600181018091116122495790565b908082029060001981840990828083109203918083039214613e2457670de0b6b3a76400009082821115613e12577faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac10669940990828211900360ee1b910360121c170290565b60405163227bc15360e01b8152600490fd5b5050670de0b6b3a764000091500490565b90918282029160001984820993838086109503948086039514613eab5784831115613e125782910981600003821680920460028082600302188083028203028083028203028083028203028083028203028083028203028092029003029360018380600003040190848311900302920304170290565b5050906131d3925061371e565b90916001810180911161224957613ef56131d3936136e57f0000000000000000000000000000000000000000000000000000000000000000613ced565b91613d84565b90916001810180911161224957613f386131d3936136e57f0000000000000000000000000000000000000000000000000000000000000000613ced565b91613e35565b926104c192917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d760406135df968151936323b872dd60e01b6020860152613fce60018060a01b038093169586602482015230604482015288606482015260648152613fa88161298e565b7f00000000000000000000000000000000000000000000000000000000000000006135e1565b613fd88682613ff7565b82519587875260208701521693a3613fef81614646565b601654612c9b565b6001600160a01b0316908115612c69577fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602082614039600094600254612c9b565b60025584845283825260408420818154019055604051908152a3565b909291949361406383614855565b6001600160a01b0386811694838216938387860361416d575b50508515612c8257600092868452836020526040938481205499828b1061413d57508188999a7ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db97989983528260205203858220558160025403600255887fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60208751858152a361412e87837f0000000000000000000000000000000000000000000000000000000000000000613590565b835196875260208701521693a4565b855163391434e360e21b81526001600160a01b03919091166004820152602481018b905260448101839052606490fd5b614177918a612d3b565b388361407c565b51906001600160a01b038216820361037657565b60809060409081516141a38161298e565b6000808252602082018190528382018190526060820181905293018390528151632c3c915760e01b8152600481019190915260a0816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9283156142a257809361421b575b50505090565b9091925060a0823d821161429a575b8161423760a09383612a0d565b81010312613663575060809082519261424f8461298e565b6142588261417e565b84526142666020830161417e565b602085015261427681830161417e565b908401526142866060820161417e565b606084015201516080820152388080614215565b3d915061422a565b8251903d90823e3d90fd5b906000916040928060a085516142c2816129a9565b828152826020820152828782015282606082015282608082015201527f00000000000000000000000000000000000000000000000000000000000000009160018060a01b03831690813b156143eb578551630a8e0d6f60e11b81529061432c906004830190613516565b828160a48183865af180156143e1579060249392916143cd575b5060c090865193848092632e3071cd60e11b82528860048301525afa9485156143c357509361439b575b50614381613b809184933091613441565b926001600160801b036020818351169201511690846136f8565b613b809193506143bb6143819160c03d8111613a9157613a828183612a0d565b939150614370565b51903d90823e3d90fd5b916143da60c092936129c4565b9190614346565b86513d85823e3d90fd5b8280fd5b80600e556040519081527fd28e9b90ee9b37c5936ff84392d71f29ff18117d7e76bcee60615262a90a3f7560203392a26000601155565b600c80546001600160a01b0319166001600160a01b03929092169182179055337fcb11cc8aade2f5a556749d1b2380d108a16fac3431e6a5d5ce12ef9de0bd76e3600080a36000600f55565b919091600092808452602091600d83526040938486209060018060b81b031691826144e6575b50918160109493829368ffffffffffffffffff60b81b82541617905585519081527fe86b6d3313d3098f4c5f689c935de8fde876a597c185def2cedab85efedac686843392a3845252812055565b60ff825460b81c1615614509575b5080546001600160c01b031681556010614498565b60155490600160401b8210156146325761452a600192838101601555612a9b565b81549060031b9087821b91600019901b1916179055601e60155411614621576104c16145a191600160b81b60ff60b81b198654161785556136e5601654916136dd7f00000000000000000000000000000000000000000000000000000000000000009161459b3060a0832085613441565b926137f4565b85518581018682526015548091528782019260158a52600080516020614b37833981519152918a5b81811061460e5750505050918493917fe0c2db6b54586be6d7d49943139fccf0dd315ba63e55364a76c73cd8fdba724d84601098979533930390a291509192936144f4565b83548652948901949282019282016145c9565b86516340797bd760e11b8152600490fd5b634e487b7160e01b88526041600452602488fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b038116919060005b6014548110156148395761468981612ad6565b90549060031b1c80600052602090600d8252604060018060b81b03816000205416801561482c576146b983614192565b93883b15610376578251630a8e0d6f60e11b81526004949060008160a481838f6146e58c84018e613516565b5af18015613a985761481d575b508351632e3071cd60e11b815285810182905260c0919082816024818f5afa928315614812579061474e949392916000936147ed575b50506147369030908b613441565b916001600160801b0390818351169201511691613cae565b80820391110292838710878518028085189403614784575b50505050821561477e5761477990612e25565b614676565b50505050565b8382916147a48351958693849363a99aad8960e01b855230928501613551565b038160008b5af191826147d2575b50506147c1575b808080614766565b6147cb91936137cc565b91386147b9565b816147e892903d1061164b5761163a8183612a0d565b6147b2565b614736929350908161480a92903d10613a9157613a828183612a0d565b919038614728565b86513d6000823e3d90fd5b614826906129c4565b386146f2565b5050505061477990612e25565b5050905061484357565b60405163ded0652d60e01b8152600490fd5b600090815b601554811015614982576148a961487082612a9b565b90549060031b1c61488a61488382614192565b91826142ad565b939190506001600160801b03808551169060408096015116908461499d565b918285108584180280841893036148d7575b50505081156148d2576148cd90612e25565b61485a565b505050565b8051635c2bea4960e01b8152916148f2906004840190613516565b60a4820183905260c482018690523060e48301819052610104830152808261012481897f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af19182614967575b5050614956575b80806148bb565b61496091926137cc565b903861494f565b8161497d92903d1061164b5761163a8183612a0d565b614948565b50905061498b57565b604051634323a55560e01b8152600490fd5b916149a7916137cc565b90516040516370a0823160e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152909160209183916024918391165afa9081156109ac57600091614a18575b508181109082180218818110908218021890565b906020823d8211614a41575b81614a3160209383612a0d565b8101031261366357505138614a04565b3d9150614a24565b60207f15c027cc4fd826d986cad358803439f7326d3aa4ed969ff90dbee4bc150f68e99180601655604051908152a1565b6040907ff66f28b40975dbb933913542c7e6a0f50a1d0f20aa74ea6e0efe65ab616323ec614aa6614ad0565b80949180614abc575b82519182526020820152a1565b614acb8160125460601c613ff7565b614aaf565b600090614adb61366a565b906016548083039083110280151580614b22575b614af65750565b614b1f919350614b12906001600160601b036012541690613dae565b60025461061b82856137cc565b91565b506001600160601b03601254161515614aef56fe55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475a2646970667358221220dd2a301edb4356657f4db541e0853170e49781af35bcef9a525f3552de1d375364736f6c6343000815003300000000000000000000000017e7bb9fe7983947fdcf02c1e3d8e6c92c21da54000000000000000000000000bbbbbbbbbb9cc5e90e3b3af64bdaf62c37eeffcb000000000000000000000000000000000000000000000000000000000001518000000000000000000000000060a3e35cc302bfa44cb288bc5a4f316fdb1adb4200000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000164d6f6f6e77656c6c20466c61677368697020455552430000000000000000000000000000000000000000000000000000000000000000000000000000000000066d77455552430000000000000000000000000000000000000000000000000000