Overview ERC20
PRICE
n/a

ON-CHAIN MARKET CAP n/a

Total Supply:
5,726.08 xMETIS

Holders:
1,538
Profile Summary
Blockchain:
Metis (1088)


Decimals:
18
Contract Source Code Verified (Partial Match)
Contract Name:
xMetisToken

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 50000 runs

Created At:
Tue, 27 Feb 2024 11:42:50 GMT
Ownable.sol
@openzeppelin
contracts
access
Ownable.sol


Contract ABI
[
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_treasuryAddress",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "_converter",
        "type": "address"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "constructor"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "userAddress",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "usageAddress",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "Allocate",
    "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": "userAddress",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "usageAddress",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "ApproveUsage",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "userAddress",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "xMetisAmount",
        "type": "uint256"
      }
    ],
    "name": "CancelRedeem",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "Convert",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "userAddress",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "usageAddress",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "fee",
        "type": "uint256"
      }
    ],
    "name": "Deallocate",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "userAddress",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "xMetisAmount",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "metisAmount",
        "type": "uint256"
      }
    ],
    "name": "FinalizeRedeem",
    "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": "userAddress",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "xMetisAmount",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "metisAmount",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "duration",
        "type": "uint256"
      }
    ],
    "name": "Redeem",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "bool",
        "name": "add",
        "type": "bool"
      }
    ],
    "name": "SetTransferWhitelist",
    "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": true,
        "internalType": "address",
        "name": "usageAddress",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "fee",
        "type": "uint256"
      }
    ],
    "name": "UpdateDeallocationFee",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "address",
        "name": "previousDividendsAddress",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "address",
        "name": "newDividendsAddress",
        "type": "address"
      }
    ],
    "name": "UpdateDividendsAddress",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "userAddress",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "redeemIndex",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "address",
        "name": "previousDividendsAddress",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "address",
        "name": "newDividendsAddress",
        "type": "address"
      }
    ],
    "name": "UpdateRedeemDividendsAddress",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "minRedeemRatio",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "maxRedeemRatio",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "minRedeemDuration",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "maxRedeemDuration",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "redeemDividendsAdjustment",
        "type": "uint256"
      }
    ],
    "name": "UpdateRedeemSettings",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "newTreasuryAddress",
        "type": "address"
      }
    ],
    "name": "UpdateTreasuryAddress",
    "type": "event"
  },
  {
    "inputs": [],
    "name": "MAX_DEALLOCATION_FEE",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "MAX_FIXED_RATIO",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "usageAddress",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      },
      {
        "internalType": "bytes",
        "name": "usageData",
        "type": "bytes"
      }
    ],
    "name": "allocate",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "userAddress",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "allocateFromUsage",
    "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": "amount",
        "type": "uint256"
      }
    ],
    "name": "approve",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "contract IXGrailTokenUsage",
        "name": "usage",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "approveUsage",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "balanceOf",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "redeemIndex",
        "type": "uint256"
      }
    ],
    "name": "cancelRedeem",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "convert",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      }
    ],
    "name": "convertTo",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "usageAddress",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      },
      {
        "internalType": "bytes",
        "name": "usageData",
        "type": "bytes"
      }
    ],
    "name": "deallocate",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "userAddress",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "deallocateFromUsage",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "decimals",
    "outputs": [
      {
        "internalType": "uint8",
        "name": "",
        "type": "uint8"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "subtractedValue",
        "type": "uint256"
      }
    ],
    "name": "decreaseAllowance",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "dividendsAddress",
    "outputs": [
      {
        "internalType": "contract IXGrailTokenUsage",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "redeemIndex",
        "type": "uint256"
      }
    ],
    "name": "finalizeRedeem",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "duration",
        "type": "uint256"
      }
    ],
    "name": "getMetisByVestingDuration",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "userAddress",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "usageAddress",
        "type": "address"
      }
    ],
    "name": "getUsageAllocation",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "userAddress",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "usageAddress",
        "type": "address"
      }
    ],
    "name": "getUsageApproval",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "userAddress",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "redeemIndex",
        "type": "uint256"
      }
    ],
    "name": "getUserRedeem",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "metisAmount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "xMetisAmount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "endTime",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "dividendsContract",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "dividendsAllocation",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "userAddress",
        "type": "address"
      }
    ],
    "name": "getUserRedeemsLength",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "userAddress",
        "type": "address"
      }
    ],
    "name": "getxMetisBalance",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "allocatedAmount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "redeemingAmount",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "addedValue",
        "type": "uint256"
      }
    ],
    "name": "increaseAllowance",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "isTransferWhitelisted",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "maxRedeemDuration",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "maxRedeemRatio",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "minRedeemDuration",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "minRedeemRatio",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "name",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "owner",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "xMetisAmount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "duration",
        "type": "uint256"
      }
    ],
    "name": "redeem",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "redeemDividendsAdjustment",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "renounceOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "symbol",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "totalSupply",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "recipient",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "transfer",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "sender",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "recipient",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "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": "index",
        "type": "uint256"
      }
    ],
    "name": "transferWhitelist",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "transferWhitelistLength",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "treasuryAddress",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "usageAddress",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "fee",
        "type": "uint256"
      }
    ],
    "name": "updateDeallocationFee",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "contract IXGrailTokenUsage",
        "name": "dividendsAddress_",
        "type": "address"
      }
    ],
    "name": "updateDividendsAddress",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "redeemIndex",
        "type": "uint256"
      }
    ],
    "name": "updateRedeemDividendsAddress",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "minRedeemRatio_",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "maxRedeemRatio_",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "minRedeemDuration_",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "maxRedeemDuration_",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "redeemDividendsAdjustment_",
        "type": "uint256"
      }
    ],
    "name": "updateRedeemSettings",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "internalType": "bool",
        "name": "add",
        "type": "bool"
      }
    ],
    "name": "updateTransferWhitelist",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_treasuryAddress",
        "type": "address"
      }
    ],
    "name": "updateTreasuryAddress",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "name": "usageAllocations",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "name": "usageApprovals",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "name": "usagesDeallocationFee",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "name": "userRedeems",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "metisAmount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "xMetisAmount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "endTime",
        "type": "uint256"
      },
      {
        "internalType": "contract IXGrailTokenUsage",
        "name": "dividendsAddress",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "dividendsAllocation",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "name": "xMetisBalances",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "allocatedAmount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "redeemingAmount",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  }
]


Contract Creation Code
60806040526032600d556064600e556213c680600f5562ed4e0060105560006011553480156200002e57600080fd5b5060405162004f5338038062004f53833981810160405260408110156200005457600080fd5b508051602091820151604080518082018252601481527f4d6574697320657363726f77656420746f6b656e0000000000000000000000008186015281518083019092526006825265784d4554495360d01b94820194909452919290916000620000bc620001a0565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001805581516200011f9060059060208501906200022b565b508051620001359060069060208401906200022b565b505060078054601260ff1990911617905550601480546001600160a01b0319166001600160a01b0384161790556200017b600830620001a4602090811b6200358a17901c565b5062000197816008620001a460201b6200358a1790919060201c565b505050620002d7565b3390565b6000620001bb836001600160a01b038416620001c4565b90505b92915050565b6000620001d2838362000213565b6200020a57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620001be565b506000620001be565b60009081526001919091016020526040902054151590565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620002635760008555620002ae565b82601f106200027e57805160ff1916838001178555620002ae565b82800160010185558215620002ae579182015b82811115620002ae57825182559160200191906001019062000291565b50620002bc929150620002c0565b5090565b5b80821115620002bc5760008155600101620002c1565b614c6c80620002e76000396000f3fe60806040526004361061034a5760003560e01c8063539ffb77116101bb578063a3908e1b116100f7578063c4b1076611610095578063dd62ed3e1161006f578063dd62ed3e14610efd578063e3a2950b14610f45578063e9ed87f814610f5a578063f2fde38b14610f6f5761034a565b8063c4b1076614610e8d578063c5f956af14610ea2578063cc6c542314610eb75761034a565b8063a9059cbb116100d1578063a9059cbb14610d97578063aff6cbf114610ddd578063b90c2b5214610e07578063c360ed1c14610e475761034a565b8063a3908e1b14610cf4578063a457c2d714610d11578063a7be160514610d575761034a565b80637cbc2373116101645780638975f9181161013e5780638975f91814610c445780638da5cb5b14610c8457806395d89b4114610c99578063a0bdc7cb14610cae5761034a565b80637cbc237314610b8c578063841e456114610bbc5780638908365414610bfc5761034a565b8063619ac95b11610195578063619ac95b14610b2257806370a0823114610b37578063715018a614610b775761034a565b8063539ffb7714610a20578063549230c914610a4a5780635a1d34dc14610ae95761034a565b80632b4896791161028a5780633b90f9a0116102335780634a5b406e1161020d5780634a5b406e1461092a5780634b359d381461093f5780634ed51652146109695780634f62b7ec146109995761034a565b80633b90f9a01461085e578063488c8303146108a4578063497965ee146108ec5761034a565b806331124ce31161026457806331124ce3146107c3578063313ce567146107ed57806339509351146108185761034a565b80632b489679146106eb5780632cc2f5ce146107335780632e9a76e41461077b5761034a565b80630f7d3a69116102f75780631c352679116102d15780631c352679146105a75780631c75e369146105bc5780631eee7e601461065b57806323b872dd1461069b5761034a565b80630f7d3a6914610537578063161aab431461057d57806318160ddd146105925761034a565b8063093220b711610328578063093220b714610442578063095ea7b3146104845780630f40a8a3146104de5761034a565b806302f91e551461034f57806306045a211461037657806306fdde03146103b8575b600080fd5b34801561035b57600080fd5b50610364610faf565b60408051918252519081900360200190f35b34801561038257600080fd5b506103b66004803603602081101561039957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610fb4565b005b3480156103c457600080fd5b506103cd611123565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104075781810151838201526020016103ef565b50505050905090810190601f1680156104345780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561044e57600080fd5b506103b6600480360360a081101561046557600080fd5b50803590602081013590604081013590606081013590608001356111d7565b34801561049057600080fd5b506104ca600480360360408110156104a757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611405565b604080519115158252519081900360200190f35b3480156104ea57600080fd5b5061051e6004803603602081101561050157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611423565b6040805192835260208301919091528051918290030190f35b34801561054357600080fd5b506103b66004803603604081101561055a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611453565b34801561058957600080fd5b506103646115cc565b34801561059e57600080fd5b506103646115dd565b3480156105b357600080fd5b506103646115e3565b3480156105c857600080fd5b506103b6600480360360608110156105df57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235169160208101359181019060608101604082013564010000000081111561061c57600080fd5b82018360208201111561062e57600080fd5b8035906020019184600183028401116401000000008311171561065057600080fd5b5090925090506115e9565b34801561066757600080fd5b506104ca6004803603602081101561067e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611732565b3480156106a757600080fd5b506104ca600480360360608110156106be57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135909116906040013561173f565b3480156106f757600080fd5b506103646004803603604081101561070e57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166117e0565b34801561073f57600080fd5b506103646004803603604081101561075657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516611818565b34801561078757600080fd5b506103646004803603604081101561079e57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516611835565b3480156107cf57600080fd5b506103b6600480360360208110156107e657600080fd5b503561186d565b3480156107f957600080fd5b50610802611cc4565b6040805160ff9092168252519081900360200190f35b34801561082457600080fd5b506104ca6004803603604081101561083b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611ccd565b34801561086a57600080fd5b506103b66004803603604081101561088157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611d28565b3480156108b057600080fd5b50610364600480360360408110156108c757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516611db2565b3480156108f857600080fd5b50610901611dcf565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561093657600080fd5b50610364611df0565b34801561094b57600080fd5b506109016004803603602081101561096257600080fd5b5035611df6565b34801561097557600080fd5b506103646004803603604081101561098c57600080fd5b5080359060200135611e03565b3480156109a557600080fd5b506109df600480360360408110156109bc57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611eb7565b6040805195865260208601949094528484019290925273ffffffffffffffffffffffffffffffffffffffff1660608401526080830152519081900360a00190f35b348015610a2c57600080fd5b506103b660048036036020811015610a4357600080fd5b5035611f1b565b348015610a5657600080fd5b506103b660048036036060811015610a6d57600080fd5b73ffffffffffffffffffffffffffffffffffffffff82351691602081013591810190606081016040820135640100000000811115610aaa57600080fd5b820183602082011115610abc57600080fd5b80359060200191846001830284011164010000000083111715610ade57600080fd5b5090925090506121d1565b6103b660048036036040811015610aff57600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff166122f8565b348015610b2e57600080fd5b506103646123ed565b348015610b4357600080fd5b5061036460048036036020811015610b5a57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166123f2565b348015610b8357600080fd5b506103b661241a565b348015610b9857600080fd5b506103b660048036036040811015610baf57600080fd5b5080359060200135612531565b348015610bc857600080fd5b506103b660048036036020811015610bdf57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612926565b348015610c0857600080fd5b506103b660048036036040811015610c1f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001351515612a3d565b348015610c5057600080fd5b5061036460048036036020811015610c6757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612bce565b348015610c9057600080fd5b50610901612be0565b348015610ca557600080fd5b506103cd612bfc565b348015610cba57600080fd5b506103b660048036036040811015610cd157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135612c7b565b6103b660048036036020811015610d0a57600080fd5b5035612cfd565b348015610d1d57600080fd5b506104ca60048036036040811015610d3457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135612d85565b348015610d6357600080fd5b5061051e60048036036020811015610d7a57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612dfa565b348015610da357600080fd5b506104ca60048036036040811015610dba57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135612e13565b348015610de957600080fd5b506103b660048036036020811015610e0057600080fd5b5035612e27565b348015610e1357600080fd5b5061036460048036036020811015610e2a57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166130f8565b348015610e5357600080fd5b506103b660048036036040811015610e6a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135613120565b348015610e9957600080fd5b50610364613276565b348015610eae57600080fd5b5061090161327c565b348015610ec357600080fd5b506109df60048036036040811015610eda57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135613298565b348015610f0957600080fd5b5061036460048036036040811015610f2057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166133a5565b348015610f5157600080fd5b506103646133dd565b348015610f6657600080fd5b506103646133e3565b348015610f7b57600080fd5b506103b660048036036020811015610f9257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166133e9565b60c881565b610fbc6135b3565b73ffffffffffffffffffffffffffffffffffffffff16610fda612be0565b73ffffffffffffffffffffffffffffffffffffffff161461105c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811661107d5760006011555b6007546040805173ffffffffffffffffffffffffffffffffffffffff61010090930483168152918316602083015280517f044c75b8fa43ce72364b4c23fdb8451beafbda46505bf44c76f0853a01ed4ade9281900390910190a16007805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b60058054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156111cd5780601f106111a2576101008083540402835291602001916111cd565b820191906000526020600020905b8154815290600101906020018083116111b057829003601f168201915b5050505050905090565b6111df6135b3565b73ffffffffffffffffffffffffffffffffffffffff166111fd612be0565b73ffffffffffffffffffffffffffffffffffffffff161461127f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b838511156112d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806149bf6028913960400191505060405180910390fd5b818310611330576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806149e7602b913960400191505060405180910390fd5b60648411158015611342575060648111155b611397576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806149bf6028913960400191505060405180910390fd5b600d859055600e849055600f839055601082905560118190556040805186815260208101869052808201859052606081018490526080810183905290517f5b37d10782e41a6539b50d59366d4112a880236e4187e85b6d1514d20e07d9b89181900360a00190a15050505050565b60006114196114126135b3565b84846135b7565b5060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff16600090815260126020526040902080546001909101549091565b61145b6135b3565b73ffffffffffffffffffffffffffffffffffffffff16611479612be0565b73ffffffffffffffffffffffffffffffffffffffff16146114fb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60c881111561156b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f7570646174654465616c6c6f636174696f6e4665653a20746f6f206869676800604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff82166000818152600c6020908152604091829020849055815184815291517f6ff024152fc2cd8071bc701f966036513eb03e243863f21d8218646faac0eaef9281900390910190a25050565b60006115d860086136fe565b905090565b60045490565b600d5481565b6002600154141561165b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b600260015561166b338585613709565b8373ffffffffffffffffffffffffffffffffffffffff16631c75e369338585856040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b15801561171057600080fd5b505af1158015611724573d6000803e3d6000fd5b505060018055505050505050565b600061141d60088361393a565b600061174c84848461395c565b6117d6846117586135b3565b6117d185604051806060016040528060288152602001614b236028913973ffffffffffffffffffffffffffffffffffffffff8a166000908152600360205260408120906117a36135b3565b73ffffffffffffffffffffffffffffffffffffffff1681526020810191909152604001600020549190613b2e565b6135b7565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152600a6020908152604080832093909416825291909152205490565b600b60209081526000928352604080842090915290825290205481565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152600b6020908152604080832093909416825291909152205490565b600260015414156118df57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600155336000818152601360205260409020548290811061194d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180614bb5602b913960400191505060405180910390fd5b33600090815260136020526040812080548590811061196857fe5b60009182526020909120600590910201600381015460075491925073ffffffffffffffffffffffffffffffffffffffff90811661010090920416148015906119cc5750600754610100900473ffffffffffffffffffffffffffffffffffffffff1615155b15611cba57600481015415611c02576003810154600482015460408051600080825260208201928390527f549230c900000000000000000000000000000000000000000000000000000000835233602483018181526044840186905260606064850190815284516084860181905273ffffffffffffffffffffffffffffffffffffffff9098169763549230c99793969395949293919260a486019291908190849084905b83811015611a88578181015183820152602001611a70565b50505050905090810190601f168015611ab55780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015611ad657600080fd5b505af1158015611aea573d6000803e3d6000fd5b5050600754600484015460408051600080825260208201928390527f1c75e36900000000000000000000000000000000000000000000000000000000835233602483018181526044840186905260606064850190815284516084860181905261010090980473ffffffffffffffffffffffffffffffffffffffff169950631c75e3699850919693949093919260a4860192908190849084905b83811015611b9b578181015183820152602001611b83565b50505050905090810190601f168015611bc85780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015611be957600080fd5b505af1158015611bfd573d6000803e3d6000fd5b505050505b60038101546007546040805187815273ffffffffffffffffffffffffffffffffffffffff938416602082015261010090920490921681830152905133917fa60c8f9118be22c9277a8129333d64ffda3de44ca7a5831d077a3127f1237a18919081900360600190a260075460038201805461010090920473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff00000000000000000000000000000000000000009092169190911790555b5050600180555050565b60075460ff1690565b6000611419611cda6135b3565b846117d18560036000611ceb6135b3565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918c168152925290205490613bdf565b60026001541415611d9a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600155611daa823383613709565b505060018055565b600a60209081526000928352604080842090915290825290205481565b600754610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600061141d600883613c53565b6000600f54821015611e175750600061141d565b601054821115611e4857611e416064611e3b600e5486613c5f90919063ffffffff16565b90613cd2565b905061141d565b6000611e9e611e95611e67600f54601054613d5390919063ffffffff16565b611e3b611e81600d54600e54613d5390919063ffffffff16565b600f54611e8f908990613d53565b90613c5f565b600d5490613bdf565b9050611eaf6064611e3b8684613c5f565b949350505050565b60136020528160005260406000208181548110611ed357600080fd5b6000918252602090912060059091020180546001820154600283015460038401546004909401549295509093509173ffffffffffffffffffffffffffffffffffffffff169085565b60026001541415611f8d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026001553360008181526013602052604090205482908110611ffb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180614bb5602b913960400191505060405180910390fd5b3360009081526012602090815260408083206013909252822080549192918690811061202357fe5b9060005260206000209060050201905061204e81600101548360010154613d5390919063ffffffff16565b82600101819055506120653033836001015461395c565b600481015415612183576003810154600482015460408051600080825260208201928390527f549230c900000000000000000000000000000000000000000000000000000000835233602483018181526044840186905260606064850190815284516084860181905273ffffffffffffffffffffffffffffffffffffffff9098169763549230c99793969395949293919260a486019291908190849084905b8381101561211c578181015183820152602001612104565b50505050905090810190601f1680156121495780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561216a57600080fd5b505af115801561217e573d6000803e3d6000fd5b505050505b6001810154604080519182525133917f56d7520e387607a8daa892e3fed116badc2a636307bdc794b1c1aed97ae203f4919081900360200190a26121c685613dca565b505060018055505050565b6002600154141561224357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600155612253338585613f6d565b8373ffffffffffffffffffffffffffffffffffffffff1663549230c9338585856040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b15801561171057600080fd5b6002600154141561236a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600155612378336141c1565b6123e357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f636f6e76657274546f3a206e6f7420616c6c6f77656400000000000000000000604482015290519081900360640190fd5b611daa82826141c7565b606481565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205490565b6124226135b3565b73ffffffffffffffffffffffffffffffffffffffff16612440612be0565b73ffffffffffffffffffffffffffffffffffffffff16146124c257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b600260015414156125a357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600155816125fe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614aa36023913960400191505060405180910390fd5b600f5481101561266f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f72656465656d3a206475726174696f6e20746f6f206c6f770000000000000000604482015290519081900360640190fd5b61267a33308461395c565b336000908152601260205260408120906126948484611e03565b6040805186815260208101839052808201869052905191925033917fbd5034ffbd47e4e72a94baa2cdb74c6fad73cb3bcdc13036b72ec8306f5a76469181900360600190a2821561291b5760018201546126ee9085613bdf565b600183015560115460009061270b90606490611e3b908890613c5f565b9050801561283a57600754610100900473ffffffffffffffffffffffffffffffffffffffff16631c75e369338360006040519080825280601f01601f191660200182016040528015612764576020820181803683370190505b506040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156127d35781810151838201526020016127bb565b50505050905090810190601f1680156128005780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561282157600080fd5b505af1158015612835573d6000803e3d6000fd5b505050505b33600090815260136020908152604091829020825160a0810184528581529182018890529181016128738761286d6142ff565b90613bdf565b8152600754610100900473ffffffffffffffffffffffffffffffffffffffff90811660208084019190915260409283019590955283546001808201865560009586529486902084516005909202019081559483015193850193909355810151600284015560608101516003840180547fffffffffffffffffffffffff000000000000000000000000000000000000000016919093161790915560800151600490910155611cba565b611cba338583614303565b61292e6135b3565b73ffffffffffffffffffffffffffffffffffffffff1661294c612be0565b73ffffffffffffffffffffffffffffffffffffffff16146129ce57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b601480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f30d36c1dd67e2019526263df539f65050c3b537a6acf65766b5da7de7128cf3690600090a250565b612a456135b3565b73ffffffffffffffffffffffffffffffffffffffff16612a63612be0565b73ffffffffffffffffffffffffffffffffffffffff1614612ae557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8216301415612b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c815260200180614ac6603c913960400191505060405180910390fd5b8015612b6b57612b6560088361358a565b50612b78565b612b766008836143fe565b505b6040805173ffffffffffffffffffffffffffffffffffffffff84168152821515602082015281517f3a34209cb941a5d23a56dea730a13738454bc7daefd4bb32e8d7df58c1bd920d929181900390910190a15050565b600c6020526000908152604090205481565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b60068054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156111cd5780601f106111a2576101008083540402835291602001916111cd565b60026001541415612ced57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600155611daa823383613f6d565b60026001541415612d6f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600155612d7e81336141c7565b5060018055565b6000611419612d926135b3565b846117d185604051806060016040528060258152602001614c126025913960036000612dbc6135b3565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918d16815292529020549190613b2e565b6012602052600090815260409020805460019091015482565b6000611419612e206135b3565b848461395c565b60026001541415612e9957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026001553360008181526013602052604090205482908110612f07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180614bb5602b913960400191505060405180910390fd5b33600090815260126020908152604080832060139092528220805491929186908110612f2f57fe5b906000526020600020906005020190508060020154612f4c6142ff565b1015612fa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180614be06032913960400191505060405180910390fd5b60018082015490830154612fb691613d53565b8260010181905550612fd13382600101548360000154614303565b6004810154156130ef576003810154600482015460408051600080825260208201928390527f549230c900000000000000000000000000000000000000000000000000000000835233602483018181526044840186905260606064850190815284516084860181905273ffffffffffffffffffffffffffffffffffffffff9098169763549230c99793969395949293919260a486019291908190849084905b83811015613088578181015183820152602001613070565b50505050905090810190601f1680156130b55780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b1580156130d657600080fd5b505af11580156130ea573d6000803e3d6000fd5b505050505b6121c685613dca565b73ffffffffffffffffffffffffffffffffffffffff1660009081526013602052604090205490565b6002600154141561319257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b600260015573ffffffffffffffffffffffffffffffffffffffff8216613203576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180614a596029913960400191505060405180910390fd5b336000818152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff871680855290835292819020859055805185815290519293927fe75ec259c38e4601f24580968665ec00b21cca4f996689b260ec598aec5c08db929181900390910190a3505060018055565b600f5481565b60145473ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff82166000908152601360205260408120548190819081908190879087908110613321576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180614bb5602b913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8916600090815260136020526040812080548a90811061335257fe5b600091825260209091206005909102018054600182015460028301546003840154600490940154929e919d509b5073ffffffffffffffffffffffffffffffffffffffff9092169950975095505050505050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260036020908152604080832093909416825291909152205490565b600e5481565b60105481565b6133f16135b3565b73ffffffffffffffffffffffffffffffffffffffff1661340f612be0565b73ffffffffffffffffffffffffffffffffffffffff161461349157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81166134fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806149776026913960400191505060405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006135ac8373ffffffffffffffffffffffffffffffffffffffff8416614420565b9392505050565b3390565b73ffffffffffffffffffffffffffffffffffffffff8316613623576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180614b916024913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821661368f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061499d6022913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808416600081815260036020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b600061141d8261446a565b6000811161377857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f616c6c6f636174653a20616d6f756e742063616e6e6f74206265206e756c6c00604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8084166000908152601260209081526040808320600a83528184209487168452939091529020548281101561382357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f616c6c6f636174653a206e6f6e20617574686f72697a656420616d6f756e7400604482015290519081900360640190fd5b61382d8184613d53565b73ffffffffffffffffffffffffffffffffffffffff8087166000818152600a60209081526040808320948a1680845294825280832095909555918152600b825283812092815291905220546138829084613bdf565b73ffffffffffffffffffffffffffffffffffffffff8087166000908152600b602090815260408083209389168352929052205581546138c19084613bdf565b82556138ce85308561395c565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f5168bfb88d6125d4580e2b91ecb103a730312c3e8b0be9c4031a0fc794e2cd5f856040518082815260200191505060405180910390a35050505050565b60006135ac8373ffffffffffffffffffffffffffffffffffffffff841661446e565b73ffffffffffffffffffffffffffffffffffffffff83166139c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614b6c6025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216613a34576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806149326023913960400191505060405180910390fd5b613a3f838383614486565b613a8981604051806060016040528060268152602001614a126026913973ffffffffffffffffffffffffffffffffffffffff86166000908152600260205260409020549190613b2e565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600260205260408082209390935590841681522054613ac59082613bdf565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526002602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115613bd7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613b9c578181015183820152602001613b84565b50505050905090810190601f168015613bc95780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000828201838110156135ac57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60006135ac8383614530565b600082613c6e5750600061141d565b82820282848281613c7b57fe5b04146135ac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614b026021913960400191505060405180910390fd5b6000808211613d4257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381613d4b57fe5b049392505050565b600082821115613dc457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b33600090815260136020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110613e0757fe5b9060005260206000209060050201601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110613e5f57fe5b600091825260208083208454600590930201918255600180850154908301556002808501549083015560038085015490830180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9092169190911790556004938401549390910192909255338152601390915260409020805480613ef657fe5b60008281526020812060057fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9093019283020181815560018101829055600281018290556003810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905560040155905550565b60008111613fc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614a826021913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8084166000908152600b602090815260408083209386168352929052205481811015614052576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614a386021913960400191505060405180910390fd5b61405c8183613d53565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152600b60209081526040808320938816835292815282822093909355600c9092528120546140af9061271090611e3b908690613c5f565b73ffffffffffffffffffffffffffffffffffffffff861660009081526012602052604090208054919250906140e49085613d53565b81556140fa30876140f58786613d53565b61395c565b60145460405173ffffffffffffffffffffffffffffffffffffffff9091169083156108fc029084906000818181858888f19350505050158015614141573d6000803e3d6000fd5b5061414c30836145ae565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f7d613f7bd1a777aeeefdd38ae61201003086575188df50618d02482220f5c1478685604051808381526020018281526020019250505060405180910390a3505050505050565b3b151590565b8161423357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f636f6e766572743a20616d6f756e742063616e6e6f74206265206e756c6c0000604482015290519081900360640190fd5b8134146142a157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f636f6e766572743a2077726f6e6720616d6f756e740000000000000000000000604482015290519081900360640190fd5b6142ab81836146f8565b6040805173ffffffffffffffffffffffffffffffffffffffff8316815260208101849052815133927fccfaeb3043a96a967dc036ab72e078a9632af809671bc2a1ac30a8043645f89e928290030190a25050565b4290565b600061430f8383613d53565b60405190915073ffffffffffffffffffffffffffffffffffffffff85169083156108fc029084906000818181858888f19350505050158015614355573d6000803e3d6000fd5b5060145460405173ffffffffffffffffffffffffffffffffffffffff9091169082156108fc029083906000818181858888f1935050505015801561439d573d6000803e3d6000fd5b506143a830846145ae565b6040805184815260208101849052815173ffffffffffffffffffffffffffffffffffffffff8716927f0da072ebd7a5649099f43a3776eb0cda17aca79426ee9f28aae203f5dfa04eda928290030190a250505050565b60006135ac8373ffffffffffffffffffffffffffffffffffffffff841661482b565b600061442c838361446e565b6144625750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561141d565b50600061141d565b5490565b60009081526001919091016020526040902054151590565b73ffffffffffffffffffffffffffffffffffffffff831615806144af57506144af60088461393a565b806144c057506144c060088361393a565b61452b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f7472616e736665723a206e6f7420616c6c6f7765640000000000000000000000604482015290519081900360640190fd5b505050565b8154600090821061458c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806149106022913960400191505060405180910390fd5b82600001828154811061459b57fe5b9060005260206000200154905092915050565b73ffffffffffffffffffffffffffffffffffffffff821661461a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614b4b6021913960400191505060405180910390fd5b61462682600083614486565b614670816040518060600160405280602281526020016149556022913973ffffffffffffffffffffffffffffffffffffffff85166000908152600260205260409020549190613b2e565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600260205260409020556004546146a39082613d53565b60045560408051828152905160009173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b73ffffffffffffffffffffffffffffffffffffffff821661477a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b61478660008383614486565b6004546147939082613bdf565b60045573ffffffffffffffffffffffffffffffffffffffff82166000908152600260205260409020546147c69082613bdf565b73ffffffffffffffffffffffffffffffffffffffff831660008181526002602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600081815260018301602052604081205480156149055783547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808301919081019060009087908390811061487c57fe5b906000526020600020015490508087600001848154811061489957fe5b6000918252602080832090910192909255828152600189810190925260409020908401905586548790806148c957fe5b6001900381819060005260206000200160009055905586600101600087815260200190815260200160002060009055600194505050505061141d565b600091505061141d56fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e647345524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737375706461746552656465656d53657474696e67733a2077726f6e6720726174696f2076616c75657375706461746552656465656d53657474696e67733a2077726f6e67206475726174696f6e2076616c75657345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63656465616c6c6f636174653a206e6f6e20617574686f72697a656420616d6f756e74617070726f766555736167653a20617070726f766520746f20746865207a65726f20616464726573736465616c6c6f636174653a20616d6f756e742063616e6e6f74206265206e756c6c72656465656d3a20784d65746973416d6f756e742063616e6e6f74206265206e756c6c7570646174655472616e7366657257686974656c6973743a2043616e6e6f742072656d6f766520784d657469732066726f6d2077686974656c697374536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737376616c696461746552656465656d3a2072656465656d20656e74727920646f6573206e6f7420657869737466696e616c697a6552656465656d3a2076657374696e67206475726174696f6e20686173206e6f7420656e6465642079657445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122046b4378b00caf780c6dbfce8c7ac423426502a22f3798df6e191a3d436f8a0df64736f6c634300070600330000000000000000000000007222bab885308e7b96e1f97b19443124c9d088d10000000000000000000000007222bab885308e7b96e1f97b19443124c9d088d1