@soma-finance/core-contracts
Version:
SOMA Finance core contracts
1,478 lines • 85.2 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.SomaStaking__factory = void 0;
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
const ethers_1 = require("ethers");
const _erc165InterfaceId = "0x1b7e712c";
const _erc1820InterfaceId = "0xea8b876841362e3efe6372ad6ecf6ade2ccb8f3c070c47b06e4205ff02a105e5";
const _abi = [
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "asset",
type: "address",
},
{
indexed: false,
internalType: "uint256",
name: "amount",
type: "uint256",
},
{
indexed: true,
internalType: "address",
name: "to",
type: "address",
},
{
indexed: true,
internalType: "address",
name: "sender",
type: "address",
},
],
name: "AdminClaimed",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "asset",
type: "address",
},
{
indexed: false,
internalType: "uint256",
name: "amount",
type: "uint256",
},
{
indexed: true,
internalType: "address",
name: "sender",
type: "address",
},
],
name: "Claimed",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "asset",
type: "address",
},
{
indexed: false,
internalType: "uint256",
name: "amount",
type: "uint256",
},
{
indexed: false,
internalType: "uint256",
name: "fee",
type: "uint256",
},
{
indexed: true,
internalType: "address",
name: "sender",
type: "address",
},
],
name: "ClaimedImmediate",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: false,
internalType: "uint8",
name: "version",
type: "uint8",
},
],
name: "Initialized",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: false,
internalType: "address",
name: "account",
type: "address",
},
],
name: "Paused",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "uint256",
name: "id",
type: "uint256",
},
],
name: "RequestCancelled",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "uint256",
name: "id",
type: "uint256",
},
{
indexed: true,
internalType: "address",
name: "asset",
type: "address",
},
{
indexed: false,
internalType: "uint256",
name: "amount",
type: "uint256",
},
{
indexed: true,
internalType: "address",
name: "sender",
type: "address",
},
{
indexed: false,
internalType: "enum ISomaStaking.RequestType",
name: "requestType",
type: "uint8",
},
],
name: "RequestCreated",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "uint256",
name: "id",
type: "uint256",
},
],
name: "RequestFulfilled",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: false,
internalType: "bytes32",
name: "prevPrivileges",
type: "bytes32",
},
{
indexed: false,
internalType: "bytes32",
name: "newPrivileges",
type: "bytes32",
},
{
indexed: true,
internalType: "address",
name: "sender",
type: "address",
},
],
name: "RequiredPrivilegesUpdated",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "token",
type: "address",
},
{
indexed: true,
internalType: "address",
name: "sender",
type: "address",
},
],
name: "RewardTokenAdded",
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: "amount",
type: "uint256",
},
{
indexed: false,
internalType: "uint256[]",
name: "seizedRewards",
type: "uint256[]",
},
{
indexed: true,
internalType: "address",
name: "sender",
type: "address",
},
],
name: "Seized",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: false,
internalType: "uint256",
name: "amount",
type: "uint256",
},
{
indexed: true,
internalType: "address",
name: "sender",
type: "address",
},
],
name: "Staked",
type: "event",
},
{
anonymous: false,
inputs: [
{
components: [
{
internalType: "uint64",
name: "unstakeDuration",
type: "uint64",
},
{
internalType: "uint64",
name: "claimDuration",
type: "uint64",
},
{
internalType: "uint16",
name: "earlyUnstakeFee",
type: "uint16",
},
{
internalType: "uint16",
name: "earlyClaimFee",
type: "uint16",
},
],
indexed: false,
internalType: "struct ISomaStaking.StakingConfig",
name: "prevConfig",
type: "tuple",
},
{
components: [
{
internalType: "uint64",
name: "unstakeDuration",
type: "uint64",
},
{
internalType: "uint64",
name: "claimDuration",
type: "uint64",
},
{
internalType: "uint16",
name: "earlyUnstakeFee",
type: "uint16",
},
{
internalType: "uint16",
name: "earlyClaimFee",
type: "uint16",
},
],
indexed: false,
internalType: "struct ISomaStaking.StakingConfig",
name: "newConfig",
type: "tuple",
},
{
indexed: true,
internalType: "address",
name: "sender",
type: "address",
},
],
name: "StakingConfigUpdated",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "rewardToken",
type: "address",
},
{
indexed: false,
internalType: "uint256",
name: "amount",
type: "uint256",
},
{
indexed: false,
internalType: "uint256",
name: "startDate",
type: "uint256",
},
{
indexed: false,
internalType: "uint256",
name: "endDate",
type: "uint256",
},
{
indexed: true,
internalType: "address",
name: "sender",
type: "address",
},
],
name: "StrategyCreated",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "token",
type: "address",
},
{
indexed: true,
internalType: "address",
name: "to",
type: "address",
},
{
indexed: false,
internalType: "uint256",
name: "amount",
type: "uint256",
},
{
indexed: true,
internalType: "address",
name: "sender",
type: "address",
},
],
name: "TokensRecovered",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: false,
internalType: "address",
name: "account",
type: "address",
},
],
name: "Unpaused",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: false,
internalType: "uint256",
name: "amount",
type: "uint256",
},
{
indexed: true,
internalType: "address",
name: "sender",
type: "address",
},
],
name: "Unstaked",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: false,
internalType: "uint256",
name: "amount",
type: "uint256",
},
{
indexed: false,
internalType: "uint256",
name: "fee",
type: "uint256",
},
{
indexed: true,
internalType: "address",
name: "sender",
type: "address",
},
],
name: "UnstakedImmediate",
type: "event",
},
{
inputs: [],
name: "DEFAULT_PRIVILEGES",
outputs: [
{
internalType: "bytes32",
name: "",
type: "bytes32",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "GLOBAL_ADMIN_ROLE",
outputs: [
{
internalType: "bytes32",
name: "",
type: "bytes32",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "GLOBAL_SEIZE_ROLE",
outputs: [
{
internalType: "bytes32",
name: "",
type: "bytes32",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "GLOBAL_UPDATE_PRIVILEGES_ROLE",
outputs: [
{
internalType: "bytes32",
name: "",
type: "bytes32",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "LOCAL_ADMIN_ROLE",
outputs: [
{
internalType: "bytes32",
name: "",
type: "bytes32",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "LOCAL_SEIZE_ROLE",
outputs: [
{
internalType: "bytes32",
name: "",
type: "bytes32",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "LOCAL_UPDATE_PRIVILEGES_ROLE",
outputs: [
{
internalType: "bytes32",
name: "",
type: "bytes32",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "SOMA",
outputs: [
{
internalType: "contract ISOMA",
name: "",
type: "address",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "TOKEN_RECOVERY_ROLE",
outputs: [
{
internalType: "bytes32",
name: "",
type: "bytes32",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "_asset",
type: "address",
},
],
name: "addRewardToken",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "_asset",
type: "address",
},
{
internalType: "address",
name: "_to",
type: "address",
},
],
name: "adminClaim",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "_asset",
type: "address",
},
],
name: "adminClaimable",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address[]",
name: "_assets",
type: "address[]",
},
{
internalType: "uint256[][]",
name: "_ids",
type: "uint256[][]",
},
],
name: "cancelClaimRequests",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "uint256[]",
name: "_ids",
type: "uint256[]",
},
],
name: "cancelUnstakeRequests",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "address[]",
name: "_assets",
type: "address[]",
},
{
internalType: "uint256[][]",
name: "_ids",
type: "uint256[][]",
},
],
name: "claim",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "address[]",
name: "_assets",
type: "address[]",
},
{
internalType: "uint256[]",
name: "_amounts",
type: "uint256[]",
},
],
name: "claimImmediate",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "_account",
type: "address",
},
{
internalType: "address",
name: "_asset",
type: "address",
},
{
internalType: "uint256",
name: "_id",
type: "uint256",
},
],
name: "claimRequest",
outputs: [
{
components: [
{
internalType: "bytes8",
name: "hash",
type: "bytes8",
},
{
internalType: "uint64",
name: "timestamp",
type: "uint64",
},
{
internalType: "uint128",
name: "amount",
type: "uint128",
},
],
internalType: "struct ISomaStaking.Request",
name: "",
type: "tuple",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "_account",
type: "address",
},
{
internalType: "address",
name: "_asset",
type: "address",
},
],
name: "claimable",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "config",
outputs: [
{
components: [
{
internalType: "uint64",
name: "unstakeDuration",
type: "uint64",
},
{
internalType: "uint64",
name: "claimDuration",
type: "uint64",
},
{
internalType: "uint16",
name: "earlyUnstakeFee",
type: "uint16",
},
{
internalType: "uint16",
name: "earlyClaimFee",
type: "uint16",
},
],
internalType: "struct ISomaStaking.StakingConfig",
name: "",
type: "tuple",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address[]",
name: "_assets",
type: "address[]",
},
],
name: "createClaimRequests",
outputs: [
{
internalType: "uint256[]",
name: "_ids",
type: "uint256[]",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "uint256",
name: "_startDate",
type: "uint256",
},
{
internalType: "uint256",
name: "_endDate",
type: "uint256",
},
{
internalType: "address",
name: "_rewardToken",
type: "address",
},
{
internalType: "uint256",
name: "_rewardAmount",
type: "uint256",
},
],
name: "createStrategy",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "uint256",
name: "_amount",
type: "uint256",
},
],
name: "createUnstakeRequest",
outputs: [
{
internalType: "uint256",
name: "_id",
type: "uint256",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "token",
type: "address",
},
],
name: "currentTPS",
outputs: [
{
internalType: "uint256",
name: "tps_",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "_account",
type: "address",
},
{
internalType: "address",
name: "_asset",
type: "address",
},
],
name: "debt",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "bytes32",
name: "role",
type: "bytes32",
},
],
name: "getRoleAdmin",
outputs: [
{
internalType: "bytes32",
name: "",
type: "bytes32",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "account",
type: "address",
},
],
name: "hasPrivileges",
outputs: [
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "bytes32",
name: "role",
type: "bytes32",
},
{
internalType: "address",
name: "account",
type: "address",
},
],
name: "hasRole",
outputs: [
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "stakingToken_",
type: "address",
},
{
internalType: "address[]",
name: "rewardTokens_",
type: "address[]",
},
],
name: "initialize",
outputs: [],
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: "pause",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [],
name: "paused",
outputs: [
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "uint256",
name: "index",
type: "uint256",
},
],
name: "pendingStrategy",
outputs: [
{
components: [
{
internalType: "uint48",
name: "startDate",
type: "uint48",
},
{
internalType: "uint48",
name: "endDate",
type: "uint48",
},
{
internalType: "address",
name: "rewardToken",
type: "address",
},
{
internalType: "uint128",
name: "rewardsLocked",
type: "uint128",
},
{
internalType: "uint128",
name: "rewardsUnlocked",
type: "uint128",
},
],
internalType: "struct ISomaStaking.Strategy",
name: "",
type: "tuple",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "token",
type: "address",
},
{
internalType: "address",
name: "to",
type: "address",
},
{
internalType: "uint256",
name: "amount",
type: "uint256",
},
],
name: "recoverTokens",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [],
name: "requiredPrivileges",
outputs: [
{
internalType: "bytes32",
name: "",
type: "bytes32",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "uint256",
name: "index",
type: "uint256",
},
],
name: "rewardToken",
outputs: [
{
internalType: "address",
name: "",
type: "address",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "from",
type: "address",
},
],
name: "seize",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "uint256",
name: "_amount",
type: "uint256",
},
],
name: "stake",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "_account",
type: "address",
},
],
name: "stakeOf",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "stakingToken",
outputs: [
{
internalType: "address",
name: "",
type: "address",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "uint256",
name: "id",
type: "uint256",
},
],
name: "strategy",
outputs: [
{
components: [
{
internalType: "uint48",
name: "startDate",
type: "uint48",
},
{
internalType: "uint48",
name: "endDate",
type: "uint48",
},
{
internalType: "address",
name: "rewardToken",
type: "address",
},
{
internalType: "uint128",
name: "rewardsLocked",
type: "uint128",
},
{
internalType: "uint128",
name: "rewardsUnlocked",
type: "uint128",
},
],
internalType: "struct ISomaStaking.Strategy",
name: "",
type: "tuple",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "bytes4",
name: "interfaceId",
type: "bytes4",
},
],
name: "supportsInterface",
outputs: [
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "totalPendingStrategies",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "totalPendingUnstake",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "totalRewardTokens",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "totalStaked",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "totalStrategies",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "_asset",
type: "address",
},
],
name: "tps",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "unpause",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "uint256[]",
name: "_ids",
type: "uint256[]",
},
],
name: "unstake",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "uint256",
name: "_amount",
type: "uint256",
},
],
name: "unstakeImmediate",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "_account",
type: "address",
},
{
internalType: "uint256",
name: "_id",
type: "uint256",
},
],
name: "unstakeRequest",
outputs: [
{
components: [
{
internalType: "bytes8",
name: "hash",
type: "bytes8",
},
{
internalType: "uint64",
name: "timestamp",
type: "uint64",
},
{
internalType: "uint128",
name: "amount",
type: "uint128",
},
],
internalType: "struct ISomaStaking.Request",
name: "",
type: "tuple",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "uint64",
name: "_unstakeDuration",
type: "uint64",
},
{
internalType: "uint64",
name: "_claimDuration",
type: "uint64",
},
{
internalType: "uint16",
name: "_earlyUnstakeFee",
type: "uint16",
},
{
internalType: "uint16",
name: "_earlyClaimFee",
type: "uint16",
},
],
name: "updateConfig",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "bytes32",
name: "newRequiredPrivileges",
type: "bytes32",
},
],
name: "updateRequiredPrivileges",
outputs: [
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "nonpayable",
type: "function",
},
];
const _bytecode = "0x60c0604052730f3dc00189dbcd1d0c574e48031270cae04c4adf6080526001600160401b0360a05234801561003357600080fd5b5060805160a051615bcf6200009960003960006103ed0152600081816105ab01528181610c980152818161122b015281816112c7015281816114da01528181611a5601528181611dfb01528181611e97015281816122900152612f2d0152615bcf6000f3fe608060405234801561001057600080fd5b50600436106103275760003560e01c806366258068116101b8578063a7c5b41311610104578063d8697598116100a2578063e5261b1d1161007c578063e5261b1d14610872578063eec47d6014610885578063f96d7b801461088f578063fb3ee5711461089857600080fd5b8063d86975981461082e578063e2481dbd14610855578063e449f3411461085f57600080fd5b8063be864d68116100de578063be864d68146107eb578063c72460ee146107fe578063d449300d14610808578063d4570c1c1461081b57600080fd5b8063a7c5b41314610743578063ac9650d8146107b8578063bc88d7e4146107d857600080fd5b80638456cb591161017157806391d148541161014b57806391d14854146106ea578063946d9204146106fd578063a488b71e14610710578063a694fc3a1461073057600080fd5b80638456cb59146106bc5780638b0bd55b146106c457806390672ad8146106d757600080fd5b806366258068146105cd57806367b4cdb8146105e25780636fa3fbda1461060c57806372f702f31461061f57806379502c5514610631578063817b1cd2146106b357600080fd5b80633d173136116102775780634b63885a11610230578063509b6c3f1161020a578063509b6c3f146105605780635c975abb1461058b5780635f3e849f1461059357806363727fc2146105a657600080fd5b80634b63885a146105275780634e6e056f1461053a5780634f814cc51461054d57600080fd5b80633d173136146104b35780633e677297146104bc5780633ee16bf7146104cf5780633f4ba83a146104e257806342623360146104ea57806349aeb46f1461051457600080fd5b8063248a9ca3116102e457806330139280116102be578063301392801461040f578063350b5af0146104365780633a22502c146104495780633cfe9fd11461049a57600080fd5b8063248a9ca3146103c25780632772ce9d146103d55780632a7a0c68146103e857600080fd5b806301ffc9a71461032c5780631b0875a6146103545780631c03e6cc1461036a5780631d8b4c491461037f5780631e26571f14610392578063227102a61461039b575b600080fd5b61033f61033a3660046150f2565b6108ab565b60405190151581526020015b60405180910390f35b61035c6108d6565b60405190815260200161034b565b61037d610378366004615141565b6108e8565b005b61037d61038d3660046151a9565b610a72565b6101945461035c565b61035c7ff28c151dcc22c5bfb460fbc387993d6c0d1c1245ca20aca5f3cbd33f33041eb181565b61035c6103d0366004615214565b610c94565b61033f6103e3366004615214565b610d86565b61035c7f000000000000000000000000000000000000000000000000000000000000000081565b61035c7f520767f2ee41b25d23e3166443601203d348640efb766878c95999973ecd38e181565b61037d61044436600461522d565b610e49565b61045c610457366004615266565b610fb2565b6040805182516001600160c01b03191681526020808401516001600160401b031690820152918101516001600160801b03169082015260600161034b565b6101d254600160c01b90046001600160401b031661035c565b6101ca5461035c565b61035c6104ca366004615141565b610fef565b61037d6104dd366004615214565b611048565b61037d61121a565b61035c6104f8366004615141565b6001600160a01b031660009081526101cf602052604090205490565b61037d6105223660046152d0565b6113a9565b61033f610535366004615141565b6114d6565b61035c610548366004615141565b6115e0565b61037d61055b366004615324565b61166d565b61057361056e366004615214565b611a44565b6040516001600160a01b03909116815260200161034b565b61033f611a52565b61037d6105a1366004615266565b611ae6565b6105737f000000000000000000000000000000000000000000000000000000000000000081565b61035c600080516020615ba383398151915281565b61035c6105f0366004615141565b6001600160a01b031660009081526101ce602052604090205490565b61037d61061a3660046151a9565b611c57565b6101cb546001600160a01b0316610573565b6106a660408051608081018252600080825260208201819052918101829052606081019190915250604080516080810182526101cd546001600160401b038082168352600160401b820416602083015261ffff600160801b8204811693830193909352600160901b9004909116606082015290565b60405161034b9190615363565b6101c95461035c565b61037d611dea565b61037d6106d23660046153a9565b611f76565b61037d6106e53660046151a9565b61207c565b61033f6106f83660046153ea565b61228c565b61037d61070b366004615425565b612383565b61072361071e3660046153a9565b61263e565b60405161034b9190615539565b61037d61073e366004615214565b612814565b610756610751366004615214565b612922565b60405161034b9190815165ffffffffffff9081168252602080840151909116908201526040808301516001600160a01b0316908201526060808301516001600160801b0390811691830191909152608092830151169181019190915260a00190565b6107cb6107c63660046153a9565b6129ee565b60405161034b919061559c565b6107566107e6366004615214565b612ae2565b61035c6107f9366004615214565b612b9b565b61035c6101c85481565b61035c61081636600461522d565b612c92565b61035c61082936600461522d565b612cc9565b61035c7f0b8459b722d944f0580da74c767d2dcae280ce16527c19c825b302a24e208dfd81565b61035c6101c75481565b61037d61086d3660046153a9565b612d44565b61045c6108803660046155fe565b612e67565b61035c6101935481565b6101d75461035c565b61037d6108a6366004615141565b612e9f565b60006001600160e01b0319821663941be9cf60e01b14806108d057506108d082613184565b92915050565b60006108e36101d56131a9565b905090565b33610901600080516020615ba38339815191528261228c565b8061091457506109146101c7548261228c565b6109395760405162461bcd60e51b81526004016109309061562a565b60405180910390fd5b60026001540361095b5760405162461bcd60e51b815260040161093090615657565b600260015561096c6101d5836131b3565b6109b85760405162461bcd60e51b815260206004820152601c60248201527f5374616b696e673a205245574152445f544f4b454e5f455849535453000000006044820152606401610930565b60406109c56101d56131a9565b1115610a045760405162461bcd60e51b815260206004820152600e60248201526d14dd185ada5b99ce88131253525560921b6044820152606401610930565b6001600160a01b0382163b610a2b5760405162461bcd60e51b81526004016109309061568e565b610a34826131c8565b60405133906001600160a01b038416907f3344e0a0f48738979c56a1b9f2cd3425597f76766d53e83439cab3fc30b067c790600090a3505060018055565b600260015403610a945760405162461bcd60e51b815260040161093090615657565b600260015533610aa3816114d6565b610abf5760405162461bcd60e51b8152600401610930906156be565b3360008181526101cf6020526040902085610b1c5760405162461bcd60e51b815260206004820152601e60248201527f5374616b696e673a20494e56414c49445f4153534554535f4c454e47544800006044820152606401610930565b838614610b6b5760405162461bcd60e51b815260206004820152601e60248201527f5374616b696e673a20494e56414c49445f494e5055545f4c454e4754485300006044820152606401610930565b60005b86811015610c86576000868683818110610b8a57610b8a6156f5565b9050602002810190610b9c919061570b565b905090506000898984818110610bb457610bb46156f5565b9050602002016020810190610bc99190615141565b90506000808311610bec5760405162461bcd60e51b815260040161093090615754565b60005b83811015610c5257610c3e8a8a87818110610c0c57610c0c6156f5565b9050602002810190610c1e919061570b565b83818110610c2e57610c2e6156f5565b90506020020135848960016131d8565b90910190610c4b816157a1565b9050610bef565b506001600160a01b03909116600090815260018501602052604090208054909101905550610c7f816157a1565b9050610b6e565b505060018055505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cf4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1891906157ba565b6001600160a01b031663248a9ca3836040518263ffffffff1660e01b8152600401610d4591815260200190565b602060405180830381865afa158015610d62573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d091906157d7565b6000610d96610193546106f83390565b80610dc65750610dc67ff28c151dcc22c5bfb460fbc387993d6c0d1c1245ca20aca5f3cbd33f33041eb13361228c565b610e385760405162461bcd60e51b815260206004820152603860248201527f477561726461626c653a20796f7520646f206e6f74206861766520746865207260448201527f6571756972656420726f6c657320746f20646f207468697300000000000000006064820152608401610930565b610e4182613239565b506001919050565b33610e62600080516020615ba38339815191528261228c565b80610e755750610e756101c7548261228c565b610e915760405162461bcd60e51b81526004016109309061562a565b600260015403610eb35760405162461bcd60e51b815260040161093090615657565b60026001556101c954610ec59061327e565b6001600160a01b03831660009081526101d0602052604090205480610f2c5760405162461bcd60e51b815260206004820152601f60248201527f5374616b696e673a20494e53554646494349454e545f434c41494d41424c45006044820152606401610930565b6001600160a01b03841660008181526101d06020526040812055610f519084836134c8565b336001600160a01b0316836001600160a01b0316856001600160a01b03167feb4184e6deaf4d9d0984cd22dcacac383ed3c67600403e9d48a877f32843260084604051610fa091815260200190565b60405180910390a45050600180555050565b6040805160608101825260008082526020820181905291810191909152610fd88361352b565b610fe58284866001613553565b90505b9392505050565b6101c9546000908181611003576000611018565b6110186101c95461101386613656565b613768565b6001600160a01b03851660009081526101ce60205260409020549091506110409082906157f0565b949350505050565b60026001540361106a5760405162461bcd60e51b815260040161093090615657565b600260015533611079816114d6565b6110955760405162461bcd60e51b8152600401610930906156be565b3360008181526101cf602090815260409182902080546101c95484516080810186526101cd546001600160401b038082168352600160401b8204169582019590955261ffff600160801b8604811696820196909652600160901b9094049094166060840152909290918683101561111e5760405162461bcd60e51b815260040161093090615803565b6000871161113e5760405162461bcd60e51b81526004016109309061583a565b6111478261327e565b61115b84846111568a82615871565b61378a565b8682036101c955604081015160009061117990899061ffff16613867565b6101cb546001600160a01b031660008181526101d06020526040812080549394509192849291906111ab9084906157f0565b909155506111d09050876111bf848c615871565b6001600160a01b03841691906134c8565b604080518a81526020810184905233917f0caa32aefed7436cb5c128d4c61517c3b4fd8ca09590ecadc0545441a7954864910160405180910390a250506001805550505050505050565b6000339050806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ee97f7f36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611287573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ab91906157ba565b6001600160a01b031614806113525750806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632d37ead56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611323573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134791906157ba565b6001600160a01b0316145b61139e5760405162461bcd60e51b815260206004820152601f60248201527f534f4d413a204d4153544552206f7220535542204d4153544552206f6e6c79006044820152606401610930565b6113a6613876565b50565b336113c2600080516020615ba38339815191528261228c565b806113d557506113d56101c7548261228c565b6113f15760405162461bcd60e51b81526004016109309061562a565b604080516080810182526001600160401b0387811682528616602082015261ffff8581168284015284166060820152905133907f9462329a02c37f74ff4c4fcc54801197381851fde6531472fd444620fbf0fd9d90611455906101cd908590615884565b60405180910390a280516101cd8054602084015160408501516060909501516001600160401b039485166001600160801b031990931692909217600160401b94909116939093029290921763ffffffff60801b1916600160801b61ffff9485160261ffff60901b191617600160901b93909216929092021790555050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637ceab3b16040518163ffffffff1660e01b8152600401602060405180830381865afa158015611536573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061155a91906157ba565b6001600160a01b031663253bd7b7836115736101945490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa1580156115bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d091906158f7565b6000806115ef6101d5846138c8565b9050808061160b57506101cb546001600160a01b038481169116145b6116275760405162461bcd60e51b81526004016109309061568e565b6101c9541580156116355750805b611640576000611649565b61164983613656565b6001600160a01b03841660009081526101d06020526040902054610fe891906157f0565b33611686600080516020615ba38339815191528261228c565b8061169957506116996101c7548261228c565b6116b55760405162461bcd60e51b81526004016109309061562a565b6002600154036116d75760405162461bcd60e51b815260040161093090615657565b60026001556001600160801b038211156117335760405162461bcd60e51b815260206004820152601a60248201527f5374616b696e673a204d41585f5245574152445f414d4f554e540000000000006044820152606401610930565b4285116117825760405162461bcd60e51b815260206004820152601b60248201527f5374616b696e673a20494e56414c49445f53544152545f4441544500000000006044820152606401610930565b8385106117d15760405162461bcd60e51b815260206004820152601b60248201527f5374616b696e673a20494e56414c49445f444154455f4f5244455200000000006044820152606401610930565b65ffffffffffff8411156118275760405162461bcd60e51b815260206004820152601960248201527f5374616b696e673a20494e56414c49445f454e445f44415445000000000000006044820152606401610930565b6118308361352b565b61183c833330856138ea565b91506000821161185e5760405162461bcd60e51b81526004016109309061583a565b6101d754604081106118a35760405162461bcd60e51b815260206004820152600e60248201526d14dd185ada5b99ce88131253525560921b6044820152606401610930565b60006040518060a001604052808865ffffffffffff1681526020018765ffffffffffff168152602001866001600160a01b031681526020016118e4866139f1565b6001600160801b039081168252600060209283018190526101d780546001810182559152835160029091027f069f7b5e1776a2d4bf57d8efb3ff6de682dcba14407464b37d674a8bd8984923810180549486015160408701516001600160a01b0