ETH Price: $3,483.25 (+4.66%)

Contract

0x145931A8AdD54E6e0c7753eE0a59Ff9E7E2f488d
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
0x60806040113802842020-12-03 14:49:241452 days ago1607006964IN
 Create: Governor
0 ETH0.1743859550

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Governor

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 3: Governor.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.12;
pragma experimental ABIEncoderV2;

import "./SafeMath.sol";
import "./VoteInterface.sol";

contract Governor {
    event CanceledTransaction(
        bytes32 indexed txHash,
        address indexed target,
        uint256 value,
        string signature,
        bytes data,
        uint256 eta
    );
    event ExecutedTransaction(
        bytes32 indexed txHash,
        address indexed target,
        uint256 value,
        string signature,
        bytes data,
        uint256 eta
    );
    event QueuedTransaction(
        bytes32 indexed txHash,
        address indexed target,
        uint256 value,
        string signature,
        bytes data,
        uint256 eta
    );
    event ProposalCreated(
        uint256 id,
        address proposer,
        address[] targets,
        uint256[] values,
        string[] signatures,
        bytes[] calldatas,
        uint256 startBlock,
        uint256 endBlock,
        string description
    );
    event Voted(address voter, uint256 proposalId, bool support, uint256 votes);
    event ProposalCanceled(uint256 id);
    event ProposalQueued(uint256 id, uint256 eta);
    event ProposalExecuted(uint256 id);

    using SafeMath for uint256;

    VoteInterface public vote;

    bool public initDone;
    address public admin;
    address public pendingAdmin;
    address public superAdmin;
    address public pendingSuperAdmin;

    uint256 public quorumVotesInWei;
    uint256 public proposalThresholdInWei;
    uint256 public proposalMaxOperations;
    uint256 public votingDelayInBlocks;
    uint256 public votingPeriodInBlocks;
    uint256 public queuePeriodInSeconds;
    uint256 public gracePeriodInSeconds;

    uint256 public proposalCount;

    mapping(uint256 => address) public proposalProposer;
    mapping(uint256 => uint256) public proposalEta;
    mapping(uint256 => address[]) public proposalTargets;
    mapping(uint256 => uint256[]) public proposalValues;
    mapping(uint256 => string[]) public proposalSignatures;
    mapping(uint256 => bytes[]) public proposalCalldatas;
    mapping(uint256 => uint256) public proposalStartBlock;
    mapping(uint256 => uint256) public proposalEndBlock;
    mapping(uint256 => uint256) public proposalForVotes;
    mapping(uint256 => uint256) public proposalAgainstVotes;
    mapping(uint256 => bool) public proposalCanceled;
    mapping(uint256 => bool) public proposalExecuted;
    mapping(uint256 => mapping(address => bool)) public proposalVoterHasVoted;
    mapping(uint256 => mapping(address => bool)) public proposalVoterSupport;
    mapping(uint256 => mapping(address => uint96)) public proposalVoterVotes;

    mapping(address => uint256) public latestProposalIds;
    mapping(bytes32 => bool) public queuedTransactions;

    mapping(string => uint256) public possibleProposalStatesMapping;
    string[] public possibleProposalStatesArray;

    function init(
        address voteAddress,
        address adminAddress,
        address superAdminAddress
    ) public {
        require(!initDone, "init done");
        vote = VoteInterface(voteAddress);
        admin = adminAddress;
        superAdmin = superAdminAddress;
        possibleProposalStatesMapping["Pending"] = 0;
        possibleProposalStatesArray.push("Pending");
        possibleProposalStatesMapping["Active"] = 1;
        possibleProposalStatesArray.push("Active");
        possibleProposalStatesMapping["Canceled"] = 2;
        possibleProposalStatesArray.push("Canceled");
        possibleProposalStatesMapping["Defeated"] = 3;
        possibleProposalStatesArray.push("Defeated");
        possibleProposalStatesMapping["Succeeded"] = 4;
        possibleProposalStatesArray.push("Succeeded");
        possibleProposalStatesMapping["Queued"] = 5;
        possibleProposalStatesArray.push("Queued");
        possibleProposalStatesMapping["Expired"] = 6;
        possibleProposalStatesArray.push("Expired");
        possibleProposalStatesMapping["Executed"] = 7;
        possibleProposalStatesArray.push("Executed");
        initDone = true;
    }

    // ADMIN
    // *************************************************************************************
    function setPendingAdmin(address newPendingAdmin) public {
        require(msg.sender == admin, "not admin");
        pendingAdmin = newPendingAdmin;
    }

    function acceptAdmin() public {
        require(
            msg.sender == pendingAdmin && msg.sender != address(0),
            "not pendingAdmin"
        );
        admin = pendingAdmin;
        pendingAdmin = address(0);
    }

    function setPendingSuperAdmin(address newPendingSuperAdmin) public {
        require(msg.sender == superAdmin, "not superAdmin");
        pendingSuperAdmin = newPendingSuperAdmin;
    }

    function acceptSuperAdmin() public {
        require(
            msg.sender == pendingSuperAdmin && msg.sender != address(0),
            "not pendingSuperAdmin"
        );
        superAdmin = pendingSuperAdmin;
        pendingSuperAdmin = address(0);
    }

    // PARAMETERS
    // *************************************************************************************
    function updateQuorumVotesInWei(uint256 amountInWei) public {
        require(msg.sender == admin || msg.sender == superAdmin, "not admin");
        require(amountInWei > 0, "zero");
        quorumVotesInWei = amountInWei;
    }

    function updateProposalThresholdInWei(uint256 amountInWei) public {
        require(msg.sender == admin || msg.sender == superAdmin, "not admin");
        require(amountInWei > 0, "zero");
        proposalThresholdInWei = amountInWei;
    }

    function updateProposalMaxOperations(uint256 count) public {
        require(msg.sender == admin || msg.sender == superAdmin, "not admin");
        require(count > 0, "zero");
        proposalMaxOperations = count;
    }

    function updateVotingDelayInBlocks(uint256 amountInBlocks) public {
        require(msg.sender == admin || msg.sender == superAdmin, "not admin");
        require(amountInBlocks > 0, "zero");
        votingDelayInBlocks = amountInBlocks;
    }

    function updateVotingPeriodInBlocks(uint256 amountInBlocks) public {
        require(msg.sender == admin || msg.sender == superAdmin, "not admin");
        require(amountInBlocks > 0, "zero");
        votingPeriodInBlocks = amountInBlocks;
    }

    function updateQueuePeriodInSeconds(uint256 amountInSeconds) public {
        require(msg.sender == admin || msg.sender == superAdmin, "not admin");
        require(amountInSeconds > 0, "zero");
        queuePeriodInSeconds = amountInSeconds;
    }

    function updateGracePeriodInSeconds(uint256 amountInSeconds) public {
        require(msg.sender == admin || msg.sender == superAdmin, "not admin");
        require(amountInSeconds > 0, "zero");
        gracePeriodInSeconds = amountInSeconds;
    }

    // PROPOSALS
    // *************************************************************************************
    function propose(
        address[] memory targets,
        uint256[] memory values,
        string[] memory signatures,
        bytes[] memory calldatas,
        string memory description
    ) public returns (uint256) {
        require(
            vote.getPriorProposalVotes(msg.sender, block.number.sub(1)) >
                proposalThresholdInWei,
            "below threshold"
        );
        require(
            targets.length == values.length &&
                targets.length == signatures.length &&
                targets.length == calldatas.length,
            "arity mismatch"
        );
        require(targets.length != 0, "missing actions");
        require(targets.length <= proposalMaxOperations, "too many actions");

        uint256 latestProposalId = latestProposalIds[msg.sender];
        if (latestProposalId != 0) {
            uint256 proposersLatestProposalState = state(latestProposalId);
            require(
                proposersLatestProposalState !=
                    possibleProposalStatesMapping["Active"],
                "already active proposal"
            );
            require(
                proposersLatestProposalState !=
                    possibleProposalStatesMapping["Pending"],
                "already pending proposal"
            );
        }

        uint256 startBlock = block.number.add(votingDelayInBlocks);
        uint256 endBlock = startBlock.add(votingPeriodInBlocks);

        proposalCount = proposalCount.add(1);

        proposalProposer[proposalCount] = msg.sender;
        proposalEta[proposalCount] = 0;
        proposalTargets[proposalCount] = targets;
        proposalValues[proposalCount] = values;
        proposalSignatures[proposalCount] = signatures;
        proposalCalldatas[proposalCount] = calldatas;
        proposalStartBlock[proposalCount] = startBlock;
        proposalEndBlock[proposalCount] = endBlock;
        proposalForVotes[proposalCount] = 0;
        proposalAgainstVotes[proposalCount] = 0;
        proposalCanceled[proposalCount] = false;
        proposalExecuted[proposalCount] = false;

        latestProposalIds[msg.sender] = proposalCount;

        emit ProposalCreated(
            proposalCount,
            msg.sender,
            targets,
            values,
            signatures,
            calldatas,
            startBlock,
            endBlock,
            description
        );
        return proposalCount;
    }

    function castVote(uint256 proposalId, bool support) public {
        return _castVote(msg.sender, proposalId, support);
    }

    function queue(uint256 proposalId) public {
        require(
            state(proposalId) == possibleProposalStatesMapping["Succeeded"],
            "not succeeded"
        );
        uint256 eta = block.timestamp.add(queuePeriodInSeconds);
        for (uint256 i = 0; i < proposalTargets[proposalId].length; i++) {
            _queueOrRevert(
                proposalTargets[proposalId][i],
                proposalValues[proposalId][i],
                proposalSignatures[proposalId][i],
                proposalCalldatas[proposalId][i],
                eta
            );
        }
        proposalEta[proposalId] = eta;
        emit ProposalQueued(proposalId, eta);
    }

    function cancel(uint256 proposalId) public {
        uint256 state = state(proposalId);
        require(
            state != possibleProposalStatesMapping["Executed"],
            "already executed"
        );

        require(
            msg.sender == admin ||
                msg.sender == superAdmin ||
                vote.getPriorProposalVotes(
                    proposalProposer[proposalId],
                    block.number.sub(1)
                ) <
                proposalThresholdInWei,
            "below threshold"
        );

        proposalCanceled[proposalId] = true;
        for (uint256 i = 0; i < proposalTargets[proposalId].length; i++) {
            _cancelTransaction(
                proposalTargets[proposalId][i],
                proposalValues[proposalId][i],
                proposalSignatures[proposalId][i],
                proposalCalldatas[proposalId][i],
                proposalEta[proposalId]
            );
        }

        emit ProposalCanceled(proposalId);
    }

    function execute(uint256 proposalId) public payable {
        require(
            state(proposalId) == possibleProposalStatesMapping["Queued"],
            "not queued"
        );
        proposalExecuted[proposalId] = true;
        for (uint256 i = 0; i < proposalTargets[proposalId].length; i++) {
            _executeTransaction(
                proposalTargets[proposalId][i],
                proposalValues[proposalId][i],
                proposalSignatures[proposalId][i],
                proposalCalldatas[proposalId][i],
                proposalEta[proposalId]
            );
        }
        emit ProposalExecuted(proposalId);
    }

    function getReceipt(uint256 proposalId, address voter)
        public
        view
        returns (
            bool,
            bool,
            uint96
        )
    {
        return (
            proposalVoterHasVoted[proposalId][voter],
            proposalVoterSupport[proposalId][voter],
            proposalVoterVotes[proposalId][voter]
        );
    }

    function getActions(uint256 proposalId)
        public
        view
        returns (
            address[] memory,
            uint256[] memory,
            string[] memory,
            bytes[] memory
        )
    {
        return (
            proposalTargets[proposalId],
            proposalValues[proposalId],
            proposalSignatures[proposalId],
            proposalCalldatas[proposalId]
        );
    }

    function getPossibleProposalStates() public view returns (string[] memory) {
        return possibleProposalStatesArray;
    }

    function getPossibleProposalStateKey(uint256 index)
        public
        view
        returns (string memory)
    {
        require(index < possibleProposalStatesArray.length, "invalid index");
        return possibleProposalStatesArray[index];
    }

    function state(uint256 proposalId) public view returns (uint256) {
        require(
            proposalCount >= proposalId && proposalId > 0,
            "invalid proposal id"
        );
        if (proposalCanceled[proposalId]) {
            return possibleProposalStatesMapping["Canceled"];
        } else if (block.number <= proposalStartBlock[proposalId]) {
            return possibleProposalStatesMapping["Pending"];
        } else if (block.number <= proposalEndBlock[proposalId]) {
            return possibleProposalStatesMapping["Active"];
        } else if (
            proposalForVotes[proposalId] <= proposalAgainstVotes[proposalId] ||
            proposalForVotes[proposalId] < quorumVotesInWei
        ) {
            return possibleProposalStatesMapping["Defeated"];
        } else if (proposalEta[proposalId] == 0) {
            return possibleProposalStatesMapping["Succeeded"];
        } else if (proposalExecuted[proposalId]) {
            return possibleProposalStatesMapping["Executed"];
        } else if (
            block.timestamp >= proposalEta[proposalId].add(gracePeriodInSeconds)
        ) {
            return possibleProposalStatesMapping["Expired"];
        } else {
            return possibleProposalStatesMapping["Queued"];
        }
    }

    // SUPPORT
    // *************************************************************************************
    function _queueOrRevert(
        address target,
        uint256 value,
        string memory signature,
        bytes memory data,
        uint256 eta
    ) internal {
        require(
            !queuedTransactions[keccak256(
                abi.encode(target, value, signature, data, eta)
            )],
            "already queued at eta"
        );
        _queueTransaction(target, value, signature, data, eta);
    }

    function _queueTransaction(
        address target,
        uint256 value,
        string memory signature,
        bytes memory data,
        uint256 eta
    ) internal returns (bytes32) {
        require(
            eta >= block.timestamp.add(queuePeriodInSeconds),
            "not satisfy queue period"
        );

        bytes32 txHash = keccak256(
            abi.encode(target, value, signature, data, eta)
        );
        queuedTransactions[txHash] = true;

        emit QueuedTransaction(txHash, target, value, signature, data, eta);
        return txHash;
    }

    function _cancelTransaction(
        address target,
        uint256 value,
        string memory signature,
        bytes memory data,
        uint256 eta
    ) internal {
        bytes32 txHash = keccak256(
            abi.encode(target, value, signature, data, eta)
        );
        queuedTransactions[txHash] = false;
        emit CanceledTransaction(txHash, target, value, signature, data, eta);
    }

    function _executeTransaction(
        address target,
        uint256 value,
        string memory signature,
        bytes memory data,
        uint256 eta
    ) internal returns (bytes memory) {
        bytes32 txHash = keccak256(
            abi.encode(target, value, signature, data, eta)
        );
        require(queuedTransactions[txHash], "not queued");
        require(block.timestamp >= eta, "not past eta");
        require(block.timestamp <= eta.add(gracePeriodInSeconds), "stale");

        queuedTransactions[txHash] = false;

        bytes memory callData;

        if (bytes(signature).length == 0) {
            callData = data;
        } else {
            callData = abi.encodePacked(
                bytes4(keccak256(bytes(signature))),
                data
            );
        }

        (bool success, bytes memory returnData) = target.call{value: value}(
            callData
        );
        require(success, "execution reverted");

        emit ExecutedTransaction(txHash, target, value, signature, data, eta);

        return returnData;
    }

    function _castVote(
        address voter,
        uint256 proposalId,
        bool support
    ) internal {
        require(
            state(proposalId) == possibleProposalStatesMapping["Active"],
            "voting closed"
        );
        require(
            proposalVoterHasVoted[proposalId][voter] == false,
            "already voted"
        );
        uint96 votes = vote.getPriorProposalVotes(
            voter,
            proposalStartBlock[proposalId]
        );

        if (support) {
            proposalForVotes[proposalId] = proposalForVotes[proposalId].add(
                votes
            );
        } else {
            proposalAgainstVotes[proposalId] = proposalAgainstVotes[proposalId]
                .add(votes);
        }

        proposalVoterHasVoted[proposalId][voter] = true;
        proposalVoterSupport[proposalId][voter] = support;
        proposalVoterVotes[proposalId][voter] = votes;

        emit Voted(voter, proposalId, support, votes);
    }
}

File 2 of 3: SafeMath.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

File 3 of 3: VoteInterface.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.12;

interface VoteInterface {
  function getPriorProposalVotes(address account, uint256 blockNumber) external view returns (uint96);

  function updateVotes(
    address voter,
    uint256 rawAmount,
    bool adding
  ) external;
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"txHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"string","name":"signature","type":"string"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"eta","type":"uint256"}],"name":"CanceledTransaction","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"txHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"string","name":"signature","type":"string"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"eta","type":"uint256"}],"name":"ExecutedTransaction","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ProposalCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"address","name":"proposer","type":"address"},{"indexed":false,"internalType":"address[]","name":"targets","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"},{"indexed":false,"internalType":"string[]","name":"signatures","type":"string[]"},{"indexed":false,"internalType":"bytes[]","name":"calldatas","type":"bytes[]"},{"indexed":false,"internalType":"uint256","name":"startBlock","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endBlock","type":"uint256"},{"indexed":false,"internalType":"string","name":"description","type":"string"}],"name":"ProposalCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ProposalExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"eta","type":"uint256"}],"name":"ProposalQueued","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"txHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"string","name":"signature","type":"string"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"eta","type":"uint256"}],"name":"QueuedTransaction","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"voter","type":"address"},{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"bool","name":"support","type":"bool"},{"indexed":false,"internalType":"uint256","name":"votes","type":"uint256"}],"name":"Voted","type":"event"},{"inputs":[],"name":"acceptAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"acceptSuperAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"cancel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"bool","name":"support","type":"bool"}],"name":"castVote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"execute","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"getActions","outputs":[{"internalType":"address[]","name":"","type":"address[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"string[]","name":"","type":"string[]"},{"internalType":"bytes[]","name":"","type":"bytes[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getPossibleProposalStateKey","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPossibleProposalStates","outputs":[{"internalType":"string[]","name":"","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"address","name":"voter","type":"address"}],"name":"getReceipt","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint96","name":"","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gracePeriodInSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"voteAddress","type":"address"},{"internalType":"address","name":"adminAddress","type":"address"},{"internalType":"address","name":"superAdminAddress","type":"address"}],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initDone","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"latestProposalIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingSuperAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"possibleProposalStatesArray","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"possibleProposalStatesMapping","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposalAgainstVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposalCalldatas","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposalCanceled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposalCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposalEndBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposalEta","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposalExecuted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposalForVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposalMaxOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposalProposer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposalSignatures","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposalStartBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposalTargets","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposalThresholdInWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposalValues","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"proposalVoterHasVoted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"proposalVoterSupport","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"proposalVoterVotes","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"string[]","name":"signatures","type":"string[]"},{"internalType":"bytes[]","name":"calldatas","type":"bytes[]"},{"internalType":"string","name":"description","type":"string"}],"name":"propose","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"queue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"queuePeriodInSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"queuedTransactions","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"quorumVotesInWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newPendingAdmin","type":"address"}],"name":"setPendingAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPendingSuperAdmin","type":"address"}],"name":"setPendingSuperAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"state","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"superAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountInSeconds","type":"uint256"}],"name":"updateGracePeriodInSeconds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"name":"updateProposalMaxOperations","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountInWei","type":"uint256"}],"name":"updateProposalThresholdInWei","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountInSeconds","type":"uint256"}],"name":"updateQueuePeriodInSeconds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountInWei","type":"uint256"}],"name":"updateQuorumVotesInWei","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountInBlocks","type":"uint256"}],"name":"updateVotingDelayInBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountInBlocks","type":"uint256"}],"name":"updateVotingPeriodInBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vote","outputs":[{"internalType":"contract VoteInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"votingDelayInBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"votingPeriodInBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

608060405234801561001057600080fd5b50613e20806100206000396000f3fe6080604052600436106103505760003560e01c80636e18113c116101c6578063c8bb4dd5116100f7578063e23a9a5211610095578063f2b065371161006f578063f2b0653714610988578063f851a440146109a8578063fe0d94c1146109bd578063fed0a20e146109d057610350565b8063e23a9a521461092f578063e7f9cefd1461095e578063ecb4452c1461097357610350565b8063da35c664116100d1578063da35c664146108ba578063da95691a146108cf578063ddf0b009146108ef578063de3514b61461090f57610350565b8063c8bb4dd51461085a578063ca0c9d791461087a578063d39ca7de1461089a57610350565b8063a4a53a1311610164578063ac6746641161013e578063ac674664146107cd578063b1bb79b1146107ed578063b49d18d61461080d578063c80a5ba61461083a57610350565b8063a4a53a131461076d578063a7e228601461078d578063ab58fb8e146107ad57610350565b8063878b608d116101a0578063878b608d146106eb5780638faba44c1461070b5780639d50f36a1461072d5780639dc4e1a01461074d57610350565b80636e18113c14610696578063798f60f2146106b65780637bdbe4d0146106d657610350565b806329575f6a116102a05780634dd18bf51161023e57806354d7ece41161021857806354d7ece41461062c57806361fabd051461064c578063632a9a521461066c5780636363013a1461068157610350565b80634dd18bf5146105bf5780634e42b06d146105df578063541d1bcc1461060c57610350565b80633e4f49e61161027a5780633e4f49e61461054a57806340e58ee51461056a5780634147f91d1461058a57806348028d63146105aa57610350565b806329575f6a146104f057806331078c2014610505578063328dd9821461051a57610350565b806315373e3d1161030d578063184b9559116102e7578063184b9559146104915780631b35b640146104b15780632615a646146104c657806326782247146104db57610350565b806315373e3d146104315780631684f4551461045157806317977c611461047157610350565b80630514e6651461035557806308416904146103775780630e18b681146103a2578063103616e8146103b7578063143489d0146103e457806314904b6614610411575b600080fd5b34801561036157600080fd5b50610375610370366004613410565b6109e5565b005b34801561038357600080fd5b5061038c610a52565b6040516103999190613c53565b60405180910390f35b3480156103ae57600080fd5b50610375610a58565b3480156103c357600080fd5b506103d76103d2366004613410565b610ab4565b60405161039991906137f8565b3480156103f057600080fd5b506104046103ff366004613410565b610ac9565b60405161039991906136e3565b34801561041d57600080fd5b506103d761042c366004613463565b610ae4565b34801561043d57600080fd5b5061037561044c36600461348f565b610b04565b34801561045d57600080fd5b5061038c61046c366004613410565b610b13565b34801561047d57600080fd5b5061038c61048c3660046132e4565b610b25565b34801561049d57600080fd5b506103756104ac3660046132ff565b610b37565b3480156104bd57600080fd5b5061038c610f34565b3480156104d257600080fd5b5061038c610f3a565b3480156104e757600080fd5b50610404610f40565b3480156104fc57600080fd5b50610404610f4f565b34801561051157600080fd5b5061038c610f5e565b34801561052657600080fd5b5061053a610535366004613410565b610f64565b604051610399949392919061378d565b34801561055657600080fd5b5061038c610565366004613410565b6111f3565b34801561057657600080fd5b50610375610585366004613410565b611376565b34801561059657600080fd5b506103756105a5366004613410565b6116f6565b3480156105b657600080fd5b5061040461175a565b3480156105cb57600080fd5b506103756105da3660046132e4565b611769565b3480156105eb57600080fd5b506105ff6105fa3660046134c2565b6117b5565b6040516103999190613824565b34801561061857600080fd5b506105ff610627366004613410565b611869565b34801561063857600080fd5b506105ff610647366004613410565b611934565b34801561065857600080fd5b50610375610667366004613410565b6119a7565b34801561067857600080fd5b50610404611a0b565b34801561068d57600080fd5b5061038c611a1a565b3480156106a257600080fd5b506103d76106b1366004613410565b611a20565b3480156106c257600080fd5b506103756106d1366004613410565b611a35565b3480156106e257600080fd5b5061038c611a99565b3480156106f757600080fd5b5061038c6107063660046134c2565b611a9f565b34801561071757600080fd5b50610720611acd565b60405161039991906137e5565b34801561073957600080fd5b50610375610748366004613410565b611ba5565b34801561075957600080fd5b5061038c610768366004613428565b611c09565b34801561077957600080fd5b506105ff6107883660046134c2565b611c26565b34801561079957600080fd5b5061038c6107a8366004613410565b611c3f565b3480156107b957600080fd5b5061038c6107c8366004613410565b611c51565b3480156107d957600080fd5b506104046107e83660046134c2565b611c63565b3480156107f957600080fd5b50610375610808366004613410565b611c98565b34801561081957600080fd5b5061082d610828366004613463565b611cfc565b6040516103999190613d3f565b34801561084657600080fd5b5061038c610855366004613410565b611d22565b34801561086657600080fd5b5061038c610875366004613410565b611d34565b34801561088657600080fd5b50610375610895366004613410565b611d46565b3480156108a657600080fd5b506103756108b53660046132e4565b611daa565b3480156108c657600080fd5b5061038c611df6565b3480156108db57600080fd5b5061038c6108ea366004613344565b611dfc565b3480156108fb57600080fd5b5061037561090a366004613410565b612193565b34801561091b57600080fd5b506103d761092a366004613463565b612417565b34801561093b57600080fd5b5061094f61094a366004613463565b612437565b60405161039993929190613803565b34801561096a57600080fd5b5061037561249c565b34801561097f57600080fd5b5061038c6124f8565b34801561099457600080fd5b506103d76109a3366004613410565b6124fe565b3480156109b457600080fd5b50610404612513565b6103756109cb366004613410565b612522565b3480156109dc57600080fd5b506103d76127ac565b6001546001600160a01b0316331480610a0857506003546001600160a01b031633145b610a2d5760405162461bcd60e51b8152600401610a2490613be3565b60405180910390fd5b60008111610a4d5760405162461bcd60e51b8152600401610a24906138ec565b600b55565b600b5481565b6002546001600160a01b031633148015610a7157503315155b610a8d5760405162461bcd60e51b8152600401610a24906139d4565b60028054600180546001600160a01b03199081166001600160a01b03841617909155169055565b60186020526000908152604090205460ff1681565b600d602052600090815260409020546001600160a01b031681565b601960209081526000928352604080842090915290825290205460ff1681565b610b0f3383836127bc565b5050565b60146020526000908152604090205481565b601c6020526000908152604090205481565b600054600160a01b900460ff1615610b615760405162461bcd60e51b8152600401610a24906139b1565b600080546001600160a01b038086166001600160a01b0319928316178355600180548683169084161790556003805491851691909216179055604051601e90610ba990613671565b908152604080516020928190038301812093909355601f805460018101825560009190915283820190915260078084526650656e64696e6760c81b92909301918252610c0892600080516020613dcb8339815191529091019190612e60565b506001601e604051610c19906136be565b908152604080516020928190038301812093909355601f805460018101825560009190915283820190915260068084526541637469766560d01b92909301918252610c7792600080516020613dcb8339815191529091019190612e60565b506002601e604051610c88906136aa565b908152604080516020928190038301812093909355601f805460018101825560009190915283820190915260088084526710d85b98d95b195960c21b92909301918252610ce892600080516020613dcb8339815191529091019190612e60565b506003601e604051610cf990613696565b908152604080516020928190038301812093909355601f805460018101825560009190915283820190915260088084526711195999585d195960c21b92909301918252610d5992600080516020613dcb8339815191529091019190612e60565b506004601e604051610d6a9061365c565b908152604080516020928190038301812093909355601f805460018101825560009190915283820190915260098084526814dd58d8d95959195960ba1b92909301918252610dcb92600080516020613dcb8339815191529091019190612e60565b506005601e604051610ddc90613684565b908152604080516020928190038301812093909355601f8054600181018255600091909152838201909152600680845265145d595d595960d21b92909301918252610e3a92600080516020613dcb8339815191529091019190612e60565b506006601e604051610e4b906136d0565b908152604080516020928190038301812093909355601f8054600181018255600091909152838201909152600780845266115e1c1a5c995960ca1b92909301918252610eaa92600080516020613dcb8339815191529091019190612e60565b506007601e604051610ebb90613648565b908152604080516020928190038301812093909355601f8054600181018255600091909152838201909152600880845267115e1958dd5d195960c21b92909301918252610f1b92600080516020613dcb8339815191529091019190612e60565b50506000805460ff60a01b1916600160a01b1790555050565b60085481565b60095481565b6002546001600160a01b031681565b6003546001600160a01b031681565b60065481565b6000818152600f60209081526040808320601083528184206011845282852060128552948390208254845181870281018701909552808552606096879687968796959492939091869190830182828015610fe757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610fc9575b505050505093508280548060200260200160405190810160405280929190818152602001828054801561103957602002820191906000526020600020905b815481526020019060010190808311611025575b5050505050925081805480602002602001604051908101604052809291908181526020016000905b8282101561110c5760008481526020908190208301805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156110f85780601f106110cd576101008083540402835291602001916110f8565b820191906000526020600020905b8154815290600101906020018083116110db57829003601f168201915b505050505081526020019060010190611061565b50505050915080805480602002602001604051908101604052809291908181526020016000905b828210156111de5760008481526020908190208301805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156111ca5780601f1061119f576101008083540402835291602001916111ca565b820191906000526020600020905b8154815290600101906020018083116111ad57829003601f168201915b505050505081526020019060010190611133565b50505050905093509350935093509193509193565b600081600c54101580156112075750600082115b6112235760405162461bcd60e51b8152600401610a24906138bf565b60008281526017602052604090205460ff161561125e57601e604051611248906136aa565b9081526020016040518091039020549050611371565b600082815260136020526040902054431161128157601e60405161124890613671565b60008281526014602052604090205443116112a457601e604051611248906136be565b6000828152601660209081526040808320546015909252909120541115806112db5750600554600083815260156020526040902054105b156112ee57601e60405161124890613696565b6000828152600e602052604090205461130f57601e6040516112489061365c565b60008281526018602052604090205460ff161561133457601e60405161124890613648565b600b546000838152600e602052604090205461134f91612a04565b421061136357601e604051611248906136d0565b601e60405161124890613684565b919050565b6000611381826111f3565b9050601e60405161139190613648565b9081526020016040518091039020548114156113bf5760405162461bcd60e51b8152600401610a2490613a7b565b6001546001600160a01b03163314806113e257506003546001600160a01b031633145b80611493575060065460008054848252600d6020526040909120546001600160a01b039182169163916c435f911661141b436001612a32565b6040518363ffffffff1660e01b81526004016114389291906136f7565b60206040518083038186803b15801561145057600080fd5b505afa158015611464573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148891906134e3565b6001600160601b0316105b6114af5760405162461bcd60e51b8152600401610a2490613837565b6000828152601760205260408120805460ff191660011790555b6000838152600f60205260409020548110156116ba576000838152600f6020526040902080546116b29190839081106114fe57fe5b60009182526020808320909101548683526010909152604090912080546001600160a01b03909216918490811061153157fe5b906000526020600020015460116000878152602001908152602001600020848154811061155a57fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156115e85780601f106115bd576101008083540402835291602001916115e8565b820191906000526020600020905b8154815290600101906020018083116115cb57829003601f168201915b50505060008981526012602052604090208054909250879150811061160957fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156116975780601f1061166c57610100808354040283529160200191611697565b820191906000526020600020905b81548152906001019060200180831161167a57829003601f168201915b50505060008a8152600e60205260409020549150612a749050565b6001016114c9565b507f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c826040516116ea9190613c53565b60405180910390a15050565b6001546001600160a01b031633148061171957506003546001600160a01b031633145b6117355760405162461bcd60e51b8152600401610a2490613be3565b600081116117555760405162461bcd60e51b8152600401610a24906138ec565b600955565b6004546001600160a01b031681565b6001546001600160a01b031633146117935760405162461bcd60e51b8152600401610a2490613be3565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b601260205281600052604060002081815481106117ce57fe5b600091825260209182902001805460408051601f600260001961010060018716150201909416939093049283018590048502810185019091528181529450909250908301828280156118615780601f1061183657610100808354040283529160200191611861565b820191906000526020600020905b81548152906001019060200180831161184457829003601f168201915b505050505081565b601f54606090821061188d5760405162461bcd60e51b8152600401610a2490613c2c565b601f828154811061189a57fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156119285780601f106118fd57610100808354040283529160200191611928565b820191906000526020600020905b81548152906001019060200180831161190b57829003601f168201915b50505050509050919050565b601f818154811061194157fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152935090918301828280156118615780601f1061183657610100808354040283529160200191611861565b6001546001600160a01b03163314806119ca57506003546001600160a01b031633145b6119e65760405162461bcd60e51b8152600401610a2490613be3565b60008111611a065760405162461bcd60e51b8152600401610a24906138ec565b600755565b6000546001600160a01b031681565b60055481565b60176020526000908152604090205460ff1681565b6001546001600160a01b0316331480611a5857506003546001600160a01b031633145b611a745760405162461bcd60e51b8152600401610a2490613be3565b60008111611a945760405162461bcd60e51b8152600401610a24906138ec565b600855565b60075481565b60106020528160005260406000208181548110611ab857fe5b90600052602060002001600091509150505481565b6060601f805480602002602001604051908101604052809291908181526020016000905b82821015611b9c5760008481526020908190208301805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015611b885780601f10611b5d57610100808354040283529160200191611b88565b820191906000526020600020905b815481529060010190602001808311611b6b57829003601f168201915b505050505081526020019060010190611af1565b50505050905090565b6001546001600160a01b0316331480611bc857506003546001600160a01b031633145b611be45760405162461bcd60e51b8152600401610a2490613be3565b60008111611c045760405162461bcd60e51b8152600401610a24906138ec565b600655565b8051602081830181018051601e8252928201919093012091525481565b601160205281600052604060002081815481106117ce57fe5b60166020526000908152604090205481565b600e6020526000908152604090205481565b600f6020528160005260406000208181548110611c7c57fe5b6000918252602090912001546001600160a01b03169150829050565b6001546001600160a01b0316331480611cbb57506003546001600160a01b031633145b611cd75760405162461bcd60e51b8152600401610a2490613be3565b60008111611cf75760405162461bcd60e51b8152600401610a24906138ec565b600555565b601b6020908152600092835260408084209091529082529020546001600160601b031681565b60136020526000908152604090205481565b60156020526000908152604090205481565b6001546001600160a01b0316331480611d6957506003546001600160a01b031633145b611d855760405162461bcd60e51b8152600401610a2490613be3565b60008111611da55760405162461bcd60e51b8152600401610a24906138ec565b600a55565b6003546001600160a01b03163314611dd45760405162461bcd60e51b8152600401610a2490613b92565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b600c5481565b600654600080549091906001600160a01b031663916c435f33611e20436001612a32565b6040518363ffffffff1660e01b8152600401611e3d9291906136f7565b60206040518083038186803b158015611e5557600080fd5b505afa158015611e69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8d91906134e3565b6001600160601b031611611eb35760405162461bcd60e51b8152600401610a2490613837565b84518651148015611ec5575083518651145b8015611ed2575082518651145b611eee5760405162461bcd60e51b8152600401610a2490613897565b8551611f0c5760405162461bcd60e51b8152600401610a2490613bba565b60075486511115611f2f5760405162461bcd60e51b8152600401610a2490613968565b336000908152601c60205260409020548015611fcc576000611f50826111f3565b9050601e604051611f60906136be565b908152602001604051809103902054811415611f8e5760405162461bcd60e51b8152600401610a2490613aa5565b601e604051611f9c90613671565b908152602001604051809103902054811415611fca5760405162461bcd60e51b8152600401610a2490613b5b565b505b6000611fe360085443612a0490919063ffffffff16565b90506000611ffc60095483612a0490919063ffffffff16565b600c5490915061200d906001612a04565b600c8181556000918252600d6020908152604080842080546001600160a01b0319163317905582548452600e825280842084905591548352600f815291208a51612059928c0190612ede565b50600c546000908152601060209081526040909120895161207c928b0190612f3f565b50600c546000908152601160209081526040909120885161209f928a0190612f79565b50600c54600090815260126020908152604090912087516120c292890190612fd2565b50600c805460009081526013602090815260408083208690558354835260148252808320859055835483526015825280832083905583548352601682528083208390558354835260178252808320805460ff19908116909155845484526018835281842080549091169055925433808452601c9092529183902082905591517f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e09261217b92918d908d908d908d908a908a908f90613c5c565b60405180910390a15050600c54979650505050505050565b601e6040516121a19061365c565b9081526020016040518091039020546121b9826111f3565b146121d65760405162461bcd60e51b8152600401610a2490613a2d565b60006121ed600a5442612a0490919063ffffffff16565b905060005b6000838152600f60205260409020548110156123d3576000838152600f6020526040902080546123cb91908390811061222757fe5b60009182526020808320909101548683526010909152604090912080546001600160a01b03909216918490811061225a57fe5b906000526020600020015460116000878152602001908152602001600020848154811061228357fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156123115780601f106122e657610100808354040283529160200191612311565b820191906000526020600020905b8154815290600101906020018083116122f457829003601f168201915b50505060008981526012602052604090208054909250879150811061233257fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156123c05780601f10612395576101008083540402835291602001916123c0565b820191906000526020600020905b8154815290600101906020018083116123a357829003601f168201915b505050505086612b0e565b6001016121f2565b506000828152600e602052604090819020829055517f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda2892906116ea9084908490613d31565b601a60209081526000928352604080842090915290825290205460ff1681565b60008281526019602090815260408083206001600160a01b039490941680845293825280832054858452601a8352818420858552835281842054958452601b83528184209484529390915290205460ff9182169391909216916001600160601b031690565b6004546001600160a01b0316331480156124b557503315155b6124d15760405162461bcd60e51b8152600401610a24906139fe565b60048054600380546001600160a01b03199081166001600160a01b03841617909155169055565b600a5481565b601d6020526000908152604090205460ff1681565b6001546001600160a01b031681565b601e60405161253090613684565b908152602001604051809103902054612548826111f3565b146125655760405162461bcd60e51b8152600401610a2490613b37565b6000818152601860205260408120805460ff191660011790555b6000828152600f6020526040902054811015612771576000828152600f6020526040902080546127689190839081106125b457fe5b60009182526020808320909101548583526010909152604090912080546001600160a01b0390921691849081106125e757fe5b906000526020600020015460116000868152602001908152602001600020848154811061261057fe5b600091825260209182902001805460408051601f600260001961010060018716150201909416939093049283018590048502810185019091528181529283018282801561269e5780601f106126735761010080835404028352916020019161269e565b820191906000526020600020905b81548152906001019060200180831161268157829003601f168201915b5050506000888152601260205260409020805490925087915081106126bf57fe5b600091825260209182902001805460408051601f600260001961010060018716150201909416939093049283018590048502810185019091528181529283018282801561274d5780601f106127225761010080835404028352916020019161274d565b820191906000526020600020905b81548152906001019060200180831161273057829003601f168201915b5050506000898152600e60205260409020549150612b869050565b5060010161257f565b507f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f816040516127a19190613c53565b60405180910390a150565b600054600160a01b900460ff1681565b601e6040516127ca906136be565b9081526020016040518091039020546127e2836111f3565b146127ff5760405162461bcd60e51b8152600401610a2490613a54565b60008281526019602090815260408083206001600160a01b038716845290915290205460ff16156128425760405162461bcd60e51b8152600401610a249061390a565b600080548382526013602052604080832054905163916c435f60e01b81526001600160a01b039092169163916c435f91612881918891906004016136f7565b60206040518083038186803b15801561289957600080fd5b505afa1580156128ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128d191906134e3565b9050811561290f576000838152601560205260409020546128fb906001600160601b038316612a04565b600084815260156020526040902055612941565b600083815260166020526040902054612931906001600160601b038316612a04565b6000848152601660205260409020555b60008381526019602090815260408083206001600160a01b0388168085529083528184208054600160ff1991821617909155878552601a845282852082865284528285208054909116871515179055868452601b83528184209084529091529081902080546bffffffffffffffffffffffff19166001600160601b038416179055517f9fea94799b68dbb994c4e44547ea7b5c9e4068fbc385b8b688005a16b60c3cc6906129f6908690869086908690613710565b60405180910390a150505050565b600082820183811015612a295760405162461bcd60e51b8152600401610a2490613931565b90505b92915050565b6000612a2983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612d5f565b60008585858585604051602001612a8f959493929190613741565b60408051601f1981840301815282825280516020918201206000818152601d909252919020805460ff1916905591506001600160a01b0387169082907f823ab24d921488c1644a7cc13dab2df44d40887e849890fc6a86effa299c9d1d90612afe908990899089908990613cf4565b60405180910390a3505050505050565b601d60008686868686604051602001612b2b959493929190613741565b60408051601f198184030181529181528151602092830120835290820192909252016000205460ff1615612b715760405162461bcd60e51b8152600401610a2490613b08565b612b7e8585858585612d8b565b505050505050565b606060008686868686604051602001612ba3959493929190613741565b60408051601f1981840301815291815281516020928301206000818152601d90935291205490915060ff16612bea5760405162461bcd60e51b8152600401610a2490613b37565b82421015612c0a5760405162461bcd60e51b8152600401610a2490613c06565b600b54612c18908490612a04565b421115612c375760405162461bcd60e51b8152600401610a2490613992565b6000818152601d60205260409020805460ff191690558451606090612c5d575083612c89565b858051906020012085604051602001612c779291906135fb565b60405160208183030381529060405290505b60006060896001600160a01b03168984604051612ca6919061362c565b60006040518083038185875af1925050503d8060008114612ce3576040519150601f19603f3d011682016040523d82523d6000602084013e612ce8565b606091505b509150915081612d0a5760405162461bcd60e51b8152600401610a2490613adc565b896001600160a01b0316847fae7b1f84eb1b45a5f46a86b5895ec3bf0c66f223fa8185dc777fc81d6a9602c28b8b8b8b604051612d4a9493929190613cf4565b60405180910390a39998505050505050505050565b60008184841115612d835760405162461bcd60e51b8152600401610a249190613824565b505050900390565b6000612da2600a5442612a0490919063ffffffff16565b821015612dc15760405162461bcd60e51b8152600401610a2490613860565b60008686868686604051602001612ddc959493929190613741565b60408051601f1981840301815282825280516020918201206000818152601d909252919020805460ff1916600117905591506001600160a01b0388169082907fc91d82514b5af1b7f210f0c8ed6d0a832e34eefd3ca60d3d909a4cff1d248f6590612e4e908a908a908a908a90613cf4565b60405180910390a39695505050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612ea157805160ff1916838001178555612ece565b82800160010185558215612ece579182015b82811115612ece578251825591602001919060010190612eb3565b50612eda92915061302b565b5090565b828054828255906000526020600020908101928215612f33579160200282015b82811115612f3357825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612efe565b50612eda929150613040565b828054828255906000526020600020908101928215612ece5791602002820182811115612ece578251825591602001919060010190612eb3565b828054828255906000526020600020908101928215612fc6579160200282015b82811115612fc65782518051612fb6918491602090910190612e60565b5091602001919060010190612f99565b50612eda92915061305f565b82805482825590600052602060002090810192821561301f579160200282015b8281111561301f578251805161300f918491602090910190612e60565b5091602001919060010190612ff2565b50612eda92915061307c565b5b80821115612eda576000815560010161302c565b5b80821115612eda5780546001600160a01b0319168155600101613041565b80821115612eda5760006130738282613099565b5060010161305f565b80821115612eda5760006130908282613099565b5060010161307c565b50805460018160011615610100020316600290046000825580601f106130bf57506130dd565b601f0160209004906000526020600020908101906130dd919061302b565b50565b80356001600160a01b0381168114612a2c57600080fd5b600082601f830112613107578081fd5b813561311a61311582613d7a565b613d53565b81815291506020808301908481018184028601820187101561313b57600080fd5b60005b848110156131625761315088836130e0565b8452928201929082019060010161313e565b505050505092915050565b600082601f83011261317d578081fd5b813561318b61311582613d7a565b818152915060208083019084810160005b84811015613162576131b3888484358a010161327b565b8452928201929082019060010161319c565b600082601f8301126131d5578081fd5b81356131e361311582613d7a565b818152915060208083019084810160005b848110156131625761320b888484358a010161327b565b845292820192908201906001016131f4565b600082601f83011261322d578081fd5b813561323b61311582613d7a565b81815291506020808301908481018184028601820187101561325c57600080fd5b60005b848110156131625781358452928201929082019060010161325f565b600082601f83011261328b578081fd5b813567ffffffffffffffff8111156132a1578182fd5b6132b4601f8201601f1916602001613d53565b91508082528360208285010111156132cb57600080fd5b8060208401602084013760009082016020015292915050565b6000602082840312156132f5578081fd5b612a2983836130e0565b600080600060608486031215613313578182fd5b61331d85856130e0565b925061332c85602086016130e0565b915061333b85604086016130e0565b90509250925092565b600080600080600060a0868803121561335b578081fd5b853567ffffffffffffffff80821115613372578283fd5b61337e89838a016130f7565b96506020880135915080821115613393578283fd5b61339f89838a0161321d565b955060408801359150808211156133b4578283fd5b6133c089838a016131c5565b945060608801359150808211156133d5578283fd5b6133e189838a0161316d565b935060808801359150808211156133f6578283fd5b506134038882890161327b565b9150509295509295909350565b600060208284031215613421578081fd5b5035919050565b600060208284031215613439578081fd5b813567ffffffffffffffff81111561344f578182fd5b61345b8482850161327b565b949350505050565b60008060408385031215613475578182fd5b8235915061348684602085016130e0565b90509250929050565b600080604083850312156134a1578182fd5b82359150602083013580151581146134b7578182fd5b809150509250929050565b600080604083850312156134d4578182fd5b50508035926020909101359150565b6000602082840312156134f4578081fd5b81516001600160601b0381168114612a29578182fd5b6000815180845260208085019450808401835b838110156135425781516001600160a01b03168752958201959082019060010161351d565b509495945050505050565b6000815180845260208085018081965082840281019150828601855b858110156135935782840389526135818483516135cf565b98850198935090840190600101613569565b5091979650505050505050565b6000815180845260208085019450808401835b83811015613542578151875295820195908201906001016135b3565b600081518084526135e7816020860160208601613d9a565b601f01601f19169290920160200192915050565b6001600160e01b031983168152815160009061361e816004850160208701613d9a565b919091016004019392505050565b6000825161363e818460208701613d9a565b9190910192915050565b67115e1958dd5d195960c21b815260080190565b6814dd58d8d95959195960ba1b815260090190565b6650656e64696e6760c81b815260070190565b65145d595d595960d21b815260060190565b6711195999585d195960c21b815260080190565b6710d85b98d95b195960c21b815260080190565b6541637469766560d01b815260060190565b66115e1c1a5c995960ca1b815260070190565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039490941684526020840192909252151560408301526001600160601b0316606082015260800190565b600060018060a01b038716825285602083015260a0604083015261376860a08301866135cf565b828103606084015261377a81866135cf565b9150508260808301529695505050505050565b6000608082526137a0608083018761350a565b82810360208401526137b281876135a0565b905082810360408401526137c6818661354d565b905082810360608401526137da818561354d565b979650505050505050565b600060208252612a29602083018461354d565b901515815260200190565b921515835290151560208301526001600160601b0316604082015260600190565b600060208252612a2960208301846135cf565b6020808252600f908201526e18995b1bddc81d1a1c995cda1bdb19608a1b604082015260600190565b60208082526018908201527f6e6f74207361746973667920717565756520706572696f640000000000000000604082015260600190565b6020808252600e908201526d0c2e4d2e8f240dad2e6dac2e8c6d60931b604082015260600190565b6020808252601390820152721a5b9d985b1a59081c1c9bdc1bdcd85b081a59606a1b604082015260600190565b6020808252600490820152637a65726f60e01b604082015260600190565b6020808252600d908201526c185b1c9958591e481d9bdd1959609a1b604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526010908201526f746f6f206d616e7920616374696f6e7360801b604082015260600190565b6020808252600590820152647374616c6560d81b604082015260600190565b602080825260099082015268696e697420646f6e6560b81b604082015260600190565b60208082526010908201526f3737ba103832b73234b733a0b236b4b760811b604082015260600190565b6020808252601590820152743737ba103832b73234b733a9bab832b920b236b4b760591b604082015260600190565b6020808252600d908201526c1b9bdd081cdd58d8d959591959609a1b604082015260600190565b6020808252600d908201526c1d9bdd1a5b99c818db1bdcd959609a1b604082015260600190565b60208082526010908201526f185b1c9958591e48195e1958dd5d195960821b604082015260600190565b60208082526017908201527f616c7265616479206163746976652070726f706f73616c000000000000000000604082015260600190565b602080825260129082015271195e1958dd5d1a5bdb881c995d995c9d195960721b604082015260600190565b602080825260159082015274616c7265616479207175657565642061742065746160581b604082015260600190565b6020808252600a90820152691b9bdd081c5d595d595960b21b604082015260600190565b60208082526018908201527f616c72656164792070656e64696e672070726f706f73616c0000000000000000604082015260600190565b6020808252600e908201526d3737ba1039bab832b920b236b4b760911b604082015260600190565b6020808252600f908201526e6d697373696e6720616374696f6e7360881b604082015260600190565b6020808252600990820152683737ba1030b236b4b760b91b604082015260600190565b6020808252600c908201526b6e6f7420706173742065746160a01b604082015260600190565b6020808252600d908201526c0d2dcecc2d8d2c840d2dcc8caf609b1b604082015260600190565b90815260200190565b8981526001600160a01b038916602082015261012060408201819052600090613c878382018b61350a565b90508281036060840152613c9b818a6135a0565b90508281036080840152613caf818961354d565b905082810360a0840152613cc3818861354d565b90508560c08401528460e0840152828103610100840152613ce481856135cf565b9c9b505050505050505050505050565b600085825260806020830152613d0d60808301866135cf565b8281036040840152613d1f81866135cf565b91505082606083015295945050505050565b918252602082015260400190565b6001600160601b0391909116815260200190565b60405181810167ffffffffffffffff81118282101715613d7257600080fd5b604052919050565b600067ffffffffffffffff821115613d90578081fd5b5060209081020190565b60005b83811015613db5578181015183820152602001613d9d565b83811115613dc4576000848401525b5050505056fea03837a25210ee280c2113ff4b77ca23440b19d4866cca721c801278fd08d807a264697066735822122071e246d729401d4e2eef801cbb76c7135316fb88f91c6e64f11a28186b96163164736f6c634300060c0033

Deployed Bytecode

0x6080604052600436106103505760003560e01c80636e18113c116101c6578063c8bb4dd5116100f7578063e23a9a5211610095578063f2b065371161006f578063f2b0653714610988578063f851a440146109a8578063fe0d94c1146109bd578063fed0a20e146109d057610350565b8063e23a9a521461092f578063e7f9cefd1461095e578063ecb4452c1461097357610350565b8063da35c664116100d1578063da35c664146108ba578063da95691a146108cf578063ddf0b009146108ef578063de3514b61461090f57610350565b8063c8bb4dd51461085a578063ca0c9d791461087a578063d39ca7de1461089a57610350565b8063a4a53a1311610164578063ac6746641161013e578063ac674664146107cd578063b1bb79b1146107ed578063b49d18d61461080d578063c80a5ba61461083a57610350565b8063a4a53a131461076d578063a7e228601461078d578063ab58fb8e146107ad57610350565b8063878b608d116101a0578063878b608d146106eb5780638faba44c1461070b5780639d50f36a1461072d5780639dc4e1a01461074d57610350565b80636e18113c14610696578063798f60f2146106b65780637bdbe4d0146106d657610350565b806329575f6a116102a05780634dd18bf51161023e57806354d7ece41161021857806354d7ece41461062c57806361fabd051461064c578063632a9a521461066c5780636363013a1461068157610350565b80634dd18bf5146105bf5780634e42b06d146105df578063541d1bcc1461060c57610350565b80633e4f49e61161027a5780633e4f49e61461054a57806340e58ee51461056a5780634147f91d1461058a57806348028d63146105aa57610350565b806329575f6a146104f057806331078c2014610505578063328dd9821461051a57610350565b806315373e3d1161030d578063184b9559116102e7578063184b9559146104915780631b35b640146104b15780632615a646146104c657806326782247146104db57610350565b806315373e3d146104315780631684f4551461045157806317977c611461047157610350565b80630514e6651461035557806308416904146103775780630e18b681146103a2578063103616e8146103b7578063143489d0146103e457806314904b6614610411575b600080fd5b34801561036157600080fd5b50610375610370366004613410565b6109e5565b005b34801561038357600080fd5b5061038c610a52565b6040516103999190613c53565b60405180910390f35b3480156103ae57600080fd5b50610375610a58565b3480156103c357600080fd5b506103d76103d2366004613410565b610ab4565b60405161039991906137f8565b3480156103f057600080fd5b506104046103ff366004613410565b610ac9565b60405161039991906136e3565b34801561041d57600080fd5b506103d761042c366004613463565b610ae4565b34801561043d57600080fd5b5061037561044c36600461348f565b610b04565b34801561045d57600080fd5b5061038c61046c366004613410565b610b13565b34801561047d57600080fd5b5061038c61048c3660046132e4565b610b25565b34801561049d57600080fd5b506103756104ac3660046132ff565b610b37565b3480156104bd57600080fd5b5061038c610f34565b3480156104d257600080fd5b5061038c610f3a565b3480156104e757600080fd5b50610404610f40565b3480156104fc57600080fd5b50610404610f4f565b34801561051157600080fd5b5061038c610f5e565b34801561052657600080fd5b5061053a610535366004613410565b610f64565b604051610399949392919061378d565b34801561055657600080fd5b5061038c610565366004613410565b6111f3565b34801561057657600080fd5b50610375610585366004613410565b611376565b34801561059657600080fd5b506103756105a5366004613410565b6116f6565b3480156105b657600080fd5b5061040461175a565b3480156105cb57600080fd5b506103756105da3660046132e4565b611769565b3480156105eb57600080fd5b506105ff6105fa3660046134c2565b6117b5565b6040516103999190613824565b34801561061857600080fd5b506105ff610627366004613410565b611869565b34801561063857600080fd5b506105ff610647366004613410565b611934565b34801561065857600080fd5b50610375610667366004613410565b6119a7565b34801561067857600080fd5b50610404611a0b565b34801561068d57600080fd5b5061038c611a1a565b3480156106a257600080fd5b506103d76106b1366004613410565b611a20565b3480156106c257600080fd5b506103756106d1366004613410565b611a35565b3480156106e257600080fd5b5061038c611a99565b3480156106f757600080fd5b5061038c6107063660046134c2565b611a9f565b34801561071757600080fd5b50610720611acd565b60405161039991906137e5565b34801561073957600080fd5b50610375610748366004613410565b611ba5565b34801561075957600080fd5b5061038c610768366004613428565b611c09565b34801561077957600080fd5b506105ff6107883660046134c2565b611c26565b34801561079957600080fd5b5061038c6107a8366004613410565b611c3f565b3480156107b957600080fd5b5061038c6107c8366004613410565b611c51565b3480156107d957600080fd5b506104046107e83660046134c2565b611c63565b3480156107f957600080fd5b50610375610808366004613410565b611c98565b34801561081957600080fd5b5061082d610828366004613463565b611cfc565b6040516103999190613d3f565b34801561084657600080fd5b5061038c610855366004613410565b611d22565b34801561086657600080fd5b5061038c610875366004613410565b611d34565b34801561088657600080fd5b50610375610895366004613410565b611d46565b3480156108a657600080fd5b506103756108b53660046132e4565b611daa565b3480156108c657600080fd5b5061038c611df6565b3480156108db57600080fd5b5061038c6108ea366004613344565b611dfc565b3480156108fb57600080fd5b5061037561090a366004613410565b612193565b34801561091b57600080fd5b506103d761092a366004613463565b612417565b34801561093b57600080fd5b5061094f61094a366004613463565b612437565b60405161039993929190613803565b34801561096a57600080fd5b5061037561249c565b34801561097f57600080fd5b5061038c6124f8565b34801561099457600080fd5b506103d76109a3366004613410565b6124fe565b3480156109b457600080fd5b50610404612513565b6103756109cb366004613410565b612522565b3480156109dc57600080fd5b506103d76127ac565b6001546001600160a01b0316331480610a0857506003546001600160a01b031633145b610a2d5760405162461bcd60e51b8152600401610a2490613be3565b60405180910390fd5b60008111610a4d5760405162461bcd60e51b8152600401610a24906138ec565b600b55565b600b5481565b6002546001600160a01b031633148015610a7157503315155b610a8d5760405162461bcd60e51b8152600401610a24906139d4565b60028054600180546001600160a01b03199081166001600160a01b03841617909155169055565b60186020526000908152604090205460ff1681565b600d602052600090815260409020546001600160a01b031681565b601960209081526000928352604080842090915290825290205460ff1681565b610b0f3383836127bc565b5050565b60146020526000908152604090205481565b601c6020526000908152604090205481565b600054600160a01b900460ff1615610b615760405162461bcd60e51b8152600401610a24906139b1565b600080546001600160a01b038086166001600160a01b0319928316178355600180548683169084161790556003805491851691909216179055604051601e90610ba990613671565b908152604080516020928190038301812093909355601f805460018101825560009190915283820190915260078084526650656e64696e6760c81b92909301918252610c0892600080516020613dcb8339815191529091019190612e60565b506001601e604051610c19906136be565b908152604080516020928190038301812093909355601f805460018101825560009190915283820190915260068084526541637469766560d01b92909301918252610c7792600080516020613dcb8339815191529091019190612e60565b506002601e604051610c88906136aa565b908152604080516020928190038301812093909355601f805460018101825560009190915283820190915260088084526710d85b98d95b195960c21b92909301918252610ce892600080516020613dcb8339815191529091019190612e60565b506003601e604051610cf990613696565b908152604080516020928190038301812093909355601f805460018101825560009190915283820190915260088084526711195999585d195960c21b92909301918252610d5992600080516020613dcb8339815191529091019190612e60565b506004601e604051610d6a9061365c565b908152604080516020928190038301812093909355601f805460018101825560009190915283820190915260098084526814dd58d8d95959195960ba1b92909301918252610dcb92600080516020613dcb8339815191529091019190612e60565b506005601e604051610ddc90613684565b908152604080516020928190038301812093909355601f8054600181018255600091909152838201909152600680845265145d595d595960d21b92909301918252610e3a92600080516020613dcb8339815191529091019190612e60565b506006601e604051610e4b906136d0565b908152604080516020928190038301812093909355601f8054600181018255600091909152838201909152600780845266115e1c1a5c995960ca1b92909301918252610eaa92600080516020613dcb8339815191529091019190612e60565b506007601e604051610ebb90613648565b908152604080516020928190038301812093909355601f8054600181018255600091909152838201909152600880845267115e1958dd5d195960c21b92909301918252610f1b92600080516020613dcb8339815191529091019190612e60565b50506000805460ff60a01b1916600160a01b1790555050565b60085481565b60095481565b6002546001600160a01b031681565b6003546001600160a01b031681565b60065481565b6000818152600f60209081526040808320601083528184206011845282852060128552948390208254845181870281018701909552808552606096879687968796959492939091869190830182828015610fe757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610fc9575b505050505093508280548060200260200160405190810160405280929190818152602001828054801561103957602002820191906000526020600020905b815481526020019060010190808311611025575b5050505050925081805480602002602001604051908101604052809291908181526020016000905b8282101561110c5760008481526020908190208301805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156110f85780601f106110cd576101008083540402835291602001916110f8565b820191906000526020600020905b8154815290600101906020018083116110db57829003601f168201915b505050505081526020019060010190611061565b50505050915080805480602002602001604051908101604052809291908181526020016000905b828210156111de5760008481526020908190208301805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156111ca5780601f1061119f576101008083540402835291602001916111ca565b820191906000526020600020905b8154815290600101906020018083116111ad57829003601f168201915b505050505081526020019060010190611133565b50505050905093509350935093509193509193565b600081600c54101580156112075750600082115b6112235760405162461bcd60e51b8152600401610a24906138bf565b60008281526017602052604090205460ff161561125e57601e604051611248906136aa565b9081526020016040518091039020549050611371565b600082815260136020526040902054431161128157601e60405161124890613671565b60008281526014602052604090205443116112a457601e604051611248906136be565b6000828152601660209081526040808320546015909252909120541115806112db5750600554600083815260156020526040902054105b156112ee57601e60405161124890613696565b6000828152600e602052604090205461130f57601e6040516112489061365c565b60008281526018602052604090205460ff161561133457601e60405161124890613648565b600b546000838152600e602052604090205461134f91612a04565b421061136357601e604051611248906136d0565b601e60405161124890613684565b919050565b6000611381826111f3565b9050601e60405161139190613648565b9081526020016040518091039020548114156113bf5760405162461bcd60e51b8152600401610a2490613a7b565b6001546001600160a01b03163314806113e257506003546001600160a01b031633145b80611493575060065460008054848252600d6020526040909120546001600160a01b039182169163916c435f911661141b436001612a32565b6040518363ffffffff1660e01b81526004016114389291906136f7565b60206040518083038186803b15801561145057600080fd5b505afa158015611464573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148891906134e3565b6001600160601b0316105b6114af5760405162461bcd60e51b8152600401610a2490613837565b6000828152601760205260408120805460ff191660011790555b6000838152600f60205260409020548110156116ba576000838152600f6020526040902080546116b29190839081106114fe57fe5b60009182526020808320909101548683526010909152604090912080546001600160a01b03909216918490811061153157fe5b906000526020600020015460116000878152602001908152602001600020848154811061155a57fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156115e85780601f106115bd576101008083540402835291602001916115e8565b820191906000526020600020905b8154815290600101906020018083116115cb57829003601f168201915b50505060008981526012602052604090208054909250879150811061160957fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156116975780601f1061166c57610100808354040283529160200191611697565b820191906000526020600020905b81548152906001019060200180831161167a57829003601f168201915b50505060008a8152600e60205260409020549150612a749050565b6001016114c9565b507f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c826040516116ea9190613c53565b60405180910390a15050565b6001546001600160a01b031633148061171957506003546001600160a01b031633145b6117355760405162461bcd60e51b8152600401610a2490613be3565b600081116117555760405162461bcd60e51b8152600401610a24906138ec565b600955565b6004546001600160a01b031681565b6001546001600160a01b031633146117935760405162461bcd60e51b8152600401610a2490613be3565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b601260205281600052604060002081815481106117ce57fe5b600091825260209182902001805460408051601f600260001961010060018716150201909416939093049283018590048502810185019091528181529450909250908301828280156118615780601f1061183657610100808354040283529160200191611861565b820191906000526020600020905b81548152906001019060200180831161184457829003601f168201915b505050505081565b601f54606090821061188d5760405162461bcd60e51b8152600401610a2490613c2c565b601f828154811061189a57fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156119285780601f106118fd57610100808354040283529160200191611928565b820191906000526020600020905b81548152906001019060200180831161190b57829003601f168201915b50505050509050919050565b601f818154811061194157fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152935090918301828280156118615780601f1061183657610100808354040283529160200191611861565b6001546001600160a01b03163314806119ca57506003546001600160a01b031633145b6119e65760405162461bcd60e51b8152600401610a2490613be3565b60008111611a065760405162461bcd60e51b8152600401610a24906138ec565b600755565b6000546001600160a01b031681565b60055481565b60176020526000908152604090205460ff1681565b6001546001600160a01b0316331480611a5857506003546001600160a01b031633145b611a745760405162461bcd60e51b8152600401610a2490613be3565b60008111611a945760405162461bcd60e51b8152600401610a24906138ec565b600855565b60075481565b60106020528160005260406000208181548110611ab857fe5b90600052602060002001600091509150505481565b6060601f805480602002602001604051908101604052809291908181526020016000905b82821015611b9c5760008481526020908190208301805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015611b885780601f10611b5d57610100808354040283529160200191611b88565b820191906000526020600020905b815481529060010190602001808311611b6b57829003601f168201915b505050505081526020019060010190611af1565b50505050905090565b6001546001600160a01b0316331480611bc857506003546001600160a01b031633145b611be45760405162461bcd60e51b8152600401610a2490613be3565b60008111611c045760405162461bcd60e51b8152600401610a24906138ec565b600655565b8051602081830181018051601e8252928201919093012091525481565b601160205281600052604060002081815481106117ce57fe5b60166020526000908152604090205481565b600e6020526000908152604090205481565b600f6020528160005260406000208181548110611c7c57fe5b6000918252602090912001546001600160a01b03169150829050565b6001546001600160a01b0316331480611cbb57506003546001600160a01b031633145b611cd75760405162461bcd60e51b8152600401610a2490613be3565b60008111611cf75760405162461bcd60e51b8152600401610a24906138ec565b600555565b601b6020908152600092835260408084209091529082529020546001600160601b031681565b60136020526000908152604090205481565b60156020526000908152604090205481565b6001546001600160a01b0316331480611d6957506003546001600160a01b031633145b611d855760405162461bcd60e51b8152600401610a2490613be3565b60008111611da55760405162461bcd60e51b8152600401610a24906138ec565b600a55565b6003546001600160a01b03163314611dd45760405162461bcd60e51b8152600401610a2490613b92565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b600c5481565b600654600080549091906001600160a01b031663916c435f33611e20436001612a32565b6040518363ffffffff1660e01b8152600401611e3d9291906136f7565b60206040518083038186803b158015611e5557600080fd5b505afa158015611e69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8d91906134e3565b6001600160601b031611611eb35760405162461bcd60e51b8152600401610a2490613837565b84518651148015611ec5575083518651145b8015611ed2575082518651145b611eee5760405162461bcd60e51b8152600401610a2490613897565b8551611f0c5760405162461bcd60e51b8152600401610a2490613bba565b60075486511115611f2f5760405162461bcd60e51b8152600401610a2490613968565b336000908152601c60205260409020548015611fcc576000611f50826111f3565b9050601e604051611f60906136be565b908152602001604051809103902054811415611f8e5760405162461bcd60e51b8152600401610a2490613aa5565b601e604051611f9c90613671565b908152602001604051809103902054811415611fca5760405162461bcd60e51b8152600401610a2490613b5b565b505b6000611fe360085443612a0490919063ffffffff16565b90506000611ffc60095483612a0490919063ffffffff16565b600c5490915061200d906001612a04565b600c8181556000918252600d6020908152604080842080546001600160a01b0319163317905582548452600e825280842084905591548352600f815291208a51612059928c0190612ede565b50600c546000908152601060209081526040909120895161207c928b0190612f3f565b50600c546000908152601160209081526040909120885161209f928a0190612f79565b50600c54600090815260126020908152604090912087516120c292890190612fd2565b50600c805460009081526013602090815260408083208690558354835260148252808320859055835483526015825280832083905583548352601682528083208390558354835260178252808320805460ff19908116909155845484526018835281842080549091169055925433808452601c9092529183902082905591517f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e09261217b92918d908d908d908d908a908a908f90613c5c565b60405180910390a15050600c54979650505050505050565b601e6040516121a19061365c565b9081526020016040518091039020546121b9826111f3565b146121d65760405162461bcd60e51b8152600401610a2490613a2d565b60006121ed600a5442612a0490919063ffffffff16565b905060005b6000838152600f60205260409020548110156123d3576000838152600f6020526040902080546123cb91908390811061222757fe5b60009182526020808320909101548683526010909152604090912080546001600160a01b03909216918490811061225a57fe5b906000526020600020015460116000878152602001908152602001600020848154811061228357fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156123115780601f106122e657610100808354040283529160200191612311565b820191906000526020600020905b8154815290600101906020018083116122f457829003601f168201915b50505060008981526012602052604090208054909250879150811061233257fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156123c05780601f10612395576101008083540402835291602001916123c0565b820191906000526020600020905b8154815290600101906020018083116123a357829003601f168201915b505050505086612b0e565b6001016121f2565b506000828152600e602052604090819020829055517f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda2892906116ea9084908490613d31565b601a60209081526000928352604080842090915290825290205460ff1681565b60008281526019602090815260408083206001600160a01b039490941680845293825280832054858452601a8352818420858552835281842054958452601b83528184209484529390915290205460ff9182169391909216916001600160601b031690565b6004546001600160a01b0316331480156124b557503315155b6124d15760405162461bcd60e51b8152600401610a24906139fe565b60048054600380546001600160a01b03199081166001600160a01b03841617909155169055565b600a5481565b601d6020526000908152604090205460ff1681565b6001546001600160a01b031681565b601e60405161253090613684565b908152602001604051809103902054612548826111f3565b146125655760405162461bcd60e51b8152600401610a2490613b37565b6000818152601860205260408120805460ff191660011790555b6000828152600f6020526040902054811015612771576000828152600f6020526040902080546127689190839081106125b457fe5b60009182526020808320909101548583526010909152604090912080546001600160a01b0390921691849081106125e757fe5b906000526020600020015460116000868152602001908152602001600020848154811061261057fe5b600091825260209182902001805460408051601f600260001961010060018716150201909416939093049283018590048502810185019091528181529283018282801561269e5780601f106126735761010080835404028352916020019161269e565b820191906000526020600020905b81548152906001019060200180831161268157829003601f168201915b5050506000888152601260205260409020805490925087915081106126bf57fe5b600091825260209182902001805460408051601f600260001961010060018716150201909416939093049283018590048502810185019091528181529283018282801561274d5780601f106127225761010080835404028352916020019161274d565b820191906000526020600020905b81548152906001019060200180831161273057829003601f168201915b5050506000898152600e60205260409020549150612b869050565b5060010161257f565b507f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f816040516127a19190613c53565b60405180910390a150565b600054600160a01b900460ff1681565b601e6040516127ca906136be565b9081526020016040518091039020546127e2836111f3565b146127ff5760405162461bcd60e51b8152600401610a2490613a54565b60008281526019602090815260408083206001600160a01b038716845290915290205460ff16156128425760405162461bcd60e51b8152600401610a249061390a565b600080548382526013602052604080832054905163916c435f60e01b81526001600160a01b039092169163916c435f91612881918891906004016136f7565b60206040518083038186803b15801561289957600080fd5b505afa1580156128ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128d191906134e3565b9050811561290f576000838152601560205260409020546128fb906001600160601b038316612a04565b600084815260156020526040902055612941565b600083815260166020526040902054612931906001600160601b038316612a04565b6000848152601660205260409020555b60008381526019602090815260408083206001600160a01b0388168085529083528184208054600160ff1991821617909155878552601a845282852082865284528285208054909116871515179055868452601b83528184209084529091529081902080546bffffffffffffffffffffffff19166001600160601b038416179055517f9fea94799b68dbb994c4e44547ea7b5c9e4068fbc385b8b688005a16b60c3cc6906129f6908690869086908690613710565b60405180910390a150505050565b600082820183811015612a295760405162461bcd60e51b8152600401610a2490613931565b90505b92915050565b6000612a2983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612d5f565b60008585858585604051602001612a8f959493929190613741565b60408051601f1981840301815282825280516020918201206000818152601d909252919020805460ff1916905591506001600160a01b0387169082907f823ab24d921488c1644a7cc13dab2df44d40887e849890fc6a86effa299c9d1d90612afe908990899089908990613cf4565b60405180910390a3505050505050565b601d60008686868686604051602001612b2b959493929190613741565b60408051601f198184030181529181528151602092830120835290820192909252016000205460ff1615612b715760405162461bcd60e51b8152600401610a2490613b08565b612b7e8585858585612d8b565b505050505050565b606060008686868686604051602001612ba3959493929190613741565b60408051601f1981840301815291815281516020928301206000818152601d90935291205490915060ff16612bea5760405162461bcd60e51b8152600401610a2490613b37565b82421015612c0a5760405162461bcd60e51b8152600401610a2490613c06565b600b54612c18908490612a04565b421115612c375760405162461bcd60e51b8152600401610a2490613992565b6000818152601d60205260409020805460ff191690558451606090612c5d575083612c89565b858051906020012085604051602001612c779291906135fb565b60405160208183030381529060405290505b60006060896001600160a01b03168984604051612ca6919061362c565b60006040518083038185875af1925050503d8060008114612ce3576040519150601f19603f3d011682016040523d82523d6000602084013e612ce8565b606091505b509150915081612d0a5760405162461bcd60e51b8152600401610a2490613adc565b896001600160a01b0316847fae7b1f84eb1b45a5f46a86b5895ec3bf0c66f223fa8185dc777fc81d6a9602c28b8b8b8b604051612d4a9493929190613cf4565b60405180910390a39998505050505050505050565b60008184841115612d835760405162461bcd60e51b8152600401610a249190613824565b505050900390565b6000612da2600a5442612a0490919063ffffffff16565b821015612dc15760405162461bcd60e51b8152600401610a2490613860565b60008686868686604051602001612ddc959493929190613741565b60408051601f1981840301815282825280516020918201206000818152601d909252919020805460ff1916600117905591506001600160a01b0388169082907fc91d82514b5af1b7f210f0c8ed6d0a832e34eefd3ca60d3d909a4cff1d248f6590612e4e908a908a908a908a90613cf4565b60405180910390a39695505050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612ea157805160ff1916838001178555612ece565b82800160010185558215612ece579182015b82811115612ece578251825591602001919060010190612eb3565b50612eda92915061302b565b5090565b828054828255906000526020600020908101928215612f33579160200282015b82811115612f3357825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612efe565b50612eda929150613040565b828054828255906000526020600020908101928215612ece5791602002820182811115612ece578251825591602001919060010190612eb3565b828054828255906000526020600020908101928215612fc6579160200282015b82811115612fc65782518051612fb6918491602090910190612e60565b5091602001919060010190612f99565b50612eda92915061305f565b82805482825590600052602060002090810192821561301f579160200282015b8281111561301f578251805161300f918491602090910190612e60565b5091602001919060010190612ff2565b50612eda92915061307c565b5b80821115612eda576000815560010161302c565b5b80821115612eda5780546001600160a01b0319168155600101613041565b80821115612eda5760006130738282613099565b5060010161305f565b80821115612eda5760006130908282613099565b5060010161307c565b50805460018160011615610100020316600290046000825580601f106130bf57506130dd565b601f0160209004906000526020600020908101906130dd919061302b565b50565b80356001600160a01b0381168114612a2c57600080fd5b600082601f830112613107578081fd5b813561311a61311582613d7a565b613d53565b81815291506020808301908481018184028601820187101561313b57600080fd5b60005b848110156131625761315088836130e0565b8452928201929082019060010161313e565b505050505092915050565b600082601f83011261317d578081fd5b813561318b61311582613d7a565b818152915060208083019084810160005b84811015613162576131b3888484358a010161327b565b8452928201929082019060010161319c565b600082601f8301126131d5578081fd5b81356131e361311582613d7a565b818152915060208083019084810160005b848110156131625761320b888484358a010161327b565b845292820192908201906001016131f4565b600082601f83011261322d578081fd5b813561323b61311582613d7a565b81815291506020808301908481018184028601820187101561325c57600080fd5b60005b848110156131625781358452928201929082019060010161325f565b600082601f83011261328b578081fd5b813567ffffffffffffffff8111156132a1578182fd5b6132b4601f8201601f1916602001613d53565b91508082528360208285010111156132cb57600080fd5b8060208401602084013760009082016020015292915050565b6000602082840312156132f5578081fd5b612a2983836130e0565b600080600060608486031215613313578182fd5b61331d85856130e0565b925061332c85602086016130e0565b915061333b85604086016130e0565b90509250925092565b600080600080600060a0868803121561335b578081fd5b853567ffffffffffffffff80821115613372578283fd5b61337e89838a016130f7565b96506020880135915080821115613393578283fd5b61339f89838a0161321d565b955060408801359150808211156133b4578283fd5b6133c089838a016131c5565b945060608801359150808211156133d5578283fd5b6133e189838a0161316d565b935060808801359150808211156133f6578283fd5b506134038882890161327b565b9150509295509295909350565b600060208284031215613421578081fd5b5035919050565b600060208284031215613439578081fd5b813567ffffffffffffffff81111561344f578182fd5b61345b8482850161327b565b949350505050565b60008060408385031215613475578182fd5b8235915061348684602085016130e0565b90509250929050565b600080604083850312156134a1578182fd5b82359150602083013580151581146134b7578182fd5b809150509250929050565b600080604083850312156134d4578182fd5b50508035926020909101359150565b6000602082840312156134f4578081fd5b81516001600160601b0381168114612a29578182fd5b6000815180845260208085019450808401835b838110156135425781516001600160a01b03168752958201959082019060010161351d565b509495945050505050565b6000815180845260208085018081965082840281019150828601855b858110156135935782840389526135818483516135cf565b98850198935090840190600101613569565b5091979650505050505050565b6000815180845260208085019450808401835b83811015613542578151875295820195908201906001016135b3565b600081518084526135e7816020860160208601613d9a565b601f01601f19169290920160200192915050565b6001600160e01b031983168152815160009061361e816004850160208701613d9a565b919091016004019392505050565b6000825161363e818460208701613d9a565b9190910192915050565b67115e1958dd5d195960c21b815260080190565b6814dd58d8d95959195960ba1b815260090190565b6650656e64696e6760c81b815260070190565b65145d595d595960d21b815260060190565b6711195999585d195960c21b815260080190565b6710d85b98d95b195960c21b815260080190565b6541637469766560d01b815260060190565b66115e1c1a5c995960ca1b815260070190565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039490941684526020840192909252151560408301526001600160601b0316606082015260800190565b600060018060a01b038716825285602083015260a0604083015261376860a08301866135cf565b828103606084015261377a81866135cf565b9150508260808301529695505050505050565b6000608082526137a0608083018761350a565b82810360208401526137b281876135a0565b905082810360408401526137c6818661354d565b905082810360608401526137da818561354d565b979650505050505050565b600060208252612a29602083018461354d565b901515815260200190565b921515835290151560208301526001600160601b0316604082015260600190565b600060208252612a2960208301846135cf565b6020808252600f908201526e18995b1bddc81d1a1c995cda1bdb19608a1b604082015260600190565b60208082526018908201527f6e6f74207361746973667920717565756520706572696f640000000000000000604082015260600190565b6020808252600e908201526d0c2e4d2e8f240dad2e6dac2e8c6d60931b604082015260600190565b6020808252601390820152721a5b9d985b1a59081c1c9bdc1bdcd85b081a59606a1b604082015260600190565b6020808252600490820152637a65726f60e01b604082015260600190565b6020808252600d908201526c185b1c9958591e481d9bdd1959609a1b604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526010908201526f746f6f206d616e7920616374696f6e7360801b604082015260600190565b6020808252600590820152647374616c6560d81b604082015260600190565b602080825260099082015268696e697420646f6e6560b81b604082015260600190565b60208082526010908201526f3737ba103832b73234b733a0b236b4b760811b604082015260600190565b6020808252601590820152743737ba103832b73234b733a9bab832b920b236b4b760591b604082015260600190565b6020808252600d908201526c1b9bdd081cdd58d8d959591959609a1b604082015260600190565b6020808252600d908201526c1d9bdd1a5b99c818db1bdcd959609a1b604082015260600190565b60208082526010908201526f185b1c9958591e48195e1958dd5d195960821b604082015260600190565b60208082526017908201527f616c7265616479206163746976652070726f706f73616c000000000000000000604082015260600190565b602080825260129082015271195e1958dd5d1a5bdb881c995d995c9d195960721b604082015260600190565b602080825260159082015274616c7265616479207175657565642061742065746160581b604082015260600190565b6020808252600a90820152691b9bdd081c5d595d595960b21b604082015260600190565b60208082526018908201527f616c72656164792070656e64696e672070726f706f73616c0000000000000000604082015260600190565b6020808252600e908201526d3737ba1039bab832b920b236b4b760911b604082015260600190565b6020808252600f908201526e6d697373696e6720616374696f6e7360881b604082015260600190565b6020808252600990820152683737ba1030b236b4b760b91b604082015260600190565b6020808252600c908201526b6e6f7420706173742065746160a01b604082015260600190565b6020808252600d908201526c0d2dcecc2d8d2c840d2dcc8caf609b1b604082015260600190565b90815260200190565b8981526001600160a01b038916602082015261012060408201819052600090613c878382018b61350a565b90508281036060840152613c9b818a6135a0565b90508281036080840152613caf818961354d565b905082810360a0840152613cc3818861354d565b90508560c08401528460e0840152828103610100840152613ce481856135cf565b9c9b505050505050505050505050565b600085825260806020830152613d0d60808301866135cf565b8281036040840152613d1f81866135cf565b91505082606083015295945050505050565b918252602082015260400190565b6001600160601b0391909116815260200190565b60405181810167ffffffffffffffff81118282101715613d7257600080fd5b604052919050565b600067ffffffffffffffff821115613d90578081fd5b5060209081020190565b60005b83811015613db5578181015183820152602001613d9d565b83811115613dc4576000848401525b5050505056fea03837a25210ee280c2113ff4b77ca23440b19d4866cca721c801278fd08d807a264697066735822122071e246d729401d4e2eef801cbb76c7135316fb88f91c6e64f11a28186b96163164736f6c634300060c0033

Deployed Bytecode Sourcemap

148:17826:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6625:248;;;;;;;;;;-1:-1:-1;6625:248:0;;;;;:::i;:::-;;:::i;:::-;;1690:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4363:229;;;;;;;;;;;;;:::i;2397:48::-;;;;;;;;;;-1:-1:-1;2397:48:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1767:51::-;;;;;;;;;;-1:-1:-1;1767:51:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2451:73::-;;;;;;;;;;-1:-1:-1;2451:73:0;;;;;:::i;:::-;;:::i;9427:125::-;;;;;;;;;;-1:-1:-1;9427:125:0;;;;;:::i;:::-;;:::i;2168:51::-;;;;;;;;;;-1:-1:-1;2168:51:0;;;;;:::i;:::-;;:::i;2687:52::-;;;;;;;;;;-1:-1:-1;2687:52:0;;;;;:::i;:::-;;:::i;2921:1169::-;;;;;;;;;;-1:-1:-1;2921:1169:0;;;;;:::i;:::-;;:::i;1568:34::-;;;;;;;;;;;;;:::i;1608:35::-;;;;;;;;;;;;;:::i;1343:27::-;;;;;;;;;;;;;:::i;1376:25::-;;;;;;;;;;;;;:::i;1483:37::-;;;;;;;;;;;;;:::i;12269:418::-;;;;;;;;;;-1:-1:-1;12269:418:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;13083:1278::-;;;;;;;;;;-1:-1:-1;13083:1278:0;;;;;:::i;:::-;;:::i;10240:1006::-;;;;;;;;;;-1:-1:-1;10240:1006:0;;;;;:::i;:::-;;:::i;6120:245::-;;;;;;;;;;-1:-1:-1;6120:245:0;;;;;:::i;:::-;;:::i;1407:32::-;;;;;;;;;;;;;:::i;4202:155::-;;;;;;;;;;-1:-1:-1;4202:155:0;;;;;:::i;:::-;;:::i;2051:52::-;;;;;;;;;;-1:-1:-1;2051:52:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;12825:252::-;;;;;;;;;;-1:-1:-1;12825:252:0;;;;;:::i;:::-;;:::i;2871:43::-;;;;;;;;;;-1:-1:-1;2871:43:0;;;;;:::i;:::-;;:::i;5645:220::-;;;;;;;;;;-1:-1:-1;5645:220:0;;;;;:::i;:::-;;:::i;1259:25::-;;;;;;;;;;;;;:::i;1446:31::-;;;;;;;;;;;;;:::i;2343:48::-;;;;;;;;;;-1:-1:-1;2343:48:0;;;;;:::i;:::-;;:::i;5871:243::-;;;;;;;;;;-1:-1:-1;5871:243:0;;;;;:::i;:::-;;:::i;1526:36::-;;;;;;;;;;;;;:::i;1934:51::-;;;;;;;;;;-1:-1:-1;1934:51:0;;;;;:::i;:::-;;:::i;12693:126::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;5399:240::-;;;;;;;;;;-1:-1:-1;5399:240:0;;;;;:::i;:::-;;:::i;2802:63::-;;;;;;;;;;-1:-1:-1;2802:63:0;;;;;:::i;:::-;;:::i;1991:54::-;;;;;;;;;;-1:-1:-1;1991:54:0;;;;;:::i;:::-;;:::i;2282:55::-;;;;;;;;;;-1:-1:-1;2282:55:0;;;;;:::i;:::-;;:::i;1824:46::-;;;;;;;;;;-1:-1:-1;1824:46:0;;;;;:::i;:::-;;:::i;1876:52::-;;;;;;;;;;-1:-1:-1;1876:52:0;;;;;:::i;:::-;;:::i;5165:228::-;;;;;;;;;;-1:-1:-1;5165:228:0;;;;;:::i;:::-;;:::i;2608:72::-;;;;;;;;;;-1:-1:-1;2608:72:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2109:53::-;;;;;;;;;;-1:-1:-1;2109:53:0;;;;;:::i;:::-;;:::i;2225:51::-;;;;;;;;;;-1:-1:-1;2225:51:0;;;;;:::i;:::-;;:::i;6371:248::-;;;;;;;;;;-1:-1:-1;6371:248:0;;;;;:::i;:::-;;:::i;4598:185::-;;;;;;;;;;-1:-1:-1;4598:185:0;;;;;:::i;:::-;;:::i;1732:28::-;;;;;;;;;;;;;:::i;6989:2432::-;;;;;;;;;;-1:-1:-1;6989:2432:0;;;;;:::i;:::-;;:::i;9558:676::-;;;;;;;;;;-1:-1:-1;9558:676:0;;;;;:::i;:::-;;:::i;2530:72::-;;;;;;;;;;-1:-1:-1;2530:72:0;;;;;:::i;:::-;;:::i;11901:362::-;;;;;;;;;;-1:-1:-1;11901:362:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;4789:259::-;;;;;;;;;;;;;:::i;1649:35::-;;;;;;;;;;;;;:::i;2745:50::-;;;;;;;;;;-1:-1:-1;2745:50:0;;;;;:::i;:::-;;:::i;1317:20::-;;;;;;;;;;;;;:::i;11252:643::-;;;;;;:::i;:::-;;:::i;1291:20::-;;;;;;;;;;;;;:::i;6625:248::-;6725:5;;-1:-1:-1;;;;;6725:5:0;6711:10;:19;;:47;;-1:-1:-1;6748:10:0;;-1:-1:-1;;;;;6748:10:0;6734;:24;6711:47;6703:69;;;;-1:-1:-1;;;6703:69:0;;;;;;;:::i;:::-;;;;;;;;;6808:1;6790:15;:19;6782:36;;;;-1:-1:-1;;;6782:36:0;;;;;;;:::i;:::-;6828:20;:38;6625:248::o;1690:35::-;;;;:::o;4363:229::-;4438:12;;-1:-1:-1;;;;;4438:12:0;4424:10;:26;:54;;;;-1:-1:-1;4454:10:0;:24;;4424:54;4403:117;;;;-1:-1:-1;;;4403:117:0;;;;;;;:::i;:::-;4538:12;;;;4530:20;;-1:-1:-1;;;;;;4530:20:0;;;-1:-1:-1;;;;;4538:12:0;;4530:20;;;;4560:25;;;4363:229::o;2397:48::-;;;;;;;;;;;;;;;:::o;1767:51::-;;;;;;;;;;;;-1:-1:-1;;;;;1767:51:0;;:::o;2451:73::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9427:125::-;9503:42;9513:10;9525;9537:7;9503:9;:42::i;:::-;9427:125;;:::o;2168:51::-;;;;;;;;;;;;;:::o;2687:52::-;;;;;;;;;;;;;:::o;2921:1169::-;3061:8;;-1:-1:-1;;;3061:8:0;;;;3060:9;3052:31;;;;-1:-1:-1;;;3052:31:0;;;;;;;:::i;:::-;3093:4;:33;;-1:-1:-1;;;;;3093:33:0;;;-1:-1:-1;;;;;;3093:33:0;;;;;;;3136:20;;;;;;;;;;;3166:10;:30;;;;;;;;;;;;3206:40;;:29;;:40;;;:::i;:::-;;;;;;;;;;;;;;;;:44;;;;3260:27;:43;;;;;;;-1:-1:-1;3260:43:0;;;;;;;;;;;;;;-1:-1:-1;;;3260:43:0;;;;;;;;;-1:-1:-1;;;;;;;;;;;3260:43:0;;;;;;:::i;:::-;;3355:1;3313:29;:39;;;;;:::i;:::-;;;;;;;;;;;;;;;;:43;;;;3366:27;:42;;;;;;;-1:-1:-1;3366:42:0;;;;;;;;;;;;;;-1:-1:-1;;;3366:42:0;;;;;;;;;-1:-1:-1;;;;;;;;;;;3366:42:0;;;;;;:::i;:::-;;3462:1;3418:29;:41;;;;;:::i;:::-;;;;;;;;;;;;;;;;:45;;;;3473:27;:44;;;;;;;-1:-1:-1;3473:44:0;;;;;;;;;;;;;;-1:-1:-1;;;3473:44:0;;;;;;;;;-1:-1:-1;;;;;;;;;;;3473:44:0;;;;;;:::i;:::-;;3571:1;3527:29;:41;;;;;:::i;:::-;;;;;;;;;;;;;;;;:45;;;;3582:27;:44;;;;;;;-1:-1:-1;3582:44:0;;;;;;;;;;;;;;-1:-1:-1;;;3582:44:0;;;;;;;;;-1:-1:-1;;;;;;;;;;;3582:44:0;;;;;;:::i;:::-;;3681:1;3636:29;:42;;;;;:::i;:::-;;;;;;;;;;;;;;;;:46;;;;3692:27;:45;;;;;;;-1:-1:-1;3692:45:0;;;;;;;;;;;;;;-1:-1:-1;;;3692:45:0;;;;;;;;;-1:-1:-1;;;;;;;;;;;3692:45:0;;;;;;:::i;:::-;;3789:1;3747:29;:39;;;;;:::i;:::-;;;;;;;;;;;;;;;;:43;;;;3800:27;:42;;;;;;;-1:-1:-1;3800:42:0;;;;;;;;;;;;;;-1:-1:-1;;;3800:42:0;;;;;;;;;-1:-1:-1;;;;;;;;;;;3800:42:0;;;;;;:::i;:::-;;3895:1;3852:29;:40;;;;;:::i;:::-;;;;;;;;;;;;;;;;:44;;;;3906:27;:43;;;;;;;-1:-1:-1;3906:43:0;;;;;;;;;;;;;;-1:-1:-1;;;3906:43:0;;;;;;;;;-1:-1:-1;;;;;;;;;;;3906:43:0;;;;;;:::i;:::-;;4003:1;3959:29;:41;;;;;:::i;:::-;;;;;;;;;;;;;;;;:45;;;;4014:27;:44;;;;;;;-1:-1:-1;4014:44:0;;;;;;;;;;;;;;-1:-1:-1;;;4014:44:0;;;;;;;;;-1:-1:-1;;;;;;;;;;;4014:44:0;;;;;;:::i;:::-;-1:-1:-1;;4068:8:0;:15;;-1:-1:-1;;;;4068:15:0;-1:-1:-1;;;4068:15:0;;;-1:-1:-1;;2921:1169:0:o;1568:34::-;;;;:::o;1608:35::-;;;;:::o;1343:27::-;;;-1:-1:-1;;;;;1343:27:0;;:::o;1376:25::-;;;-1:-1:-1;;;;;1376:25:0;;:::o;1483:37::-;;;;:::o;12269:418::-;12516:27;;;;:15;:27;;;;;;;;12557:14;:26;;;;;12597:18;:30;;;;;12641:17;:29;;;;;;12495:185;;;;;;;;;;;;;;;;;12367:16;;;;;;;;12516:27;12557:26;12597:30;;12495:185;;12516:27;;12495:185;;;12516:27;12495:185;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12495:185:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12495:185:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12495:185:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12269:418;;;;;:::o;13083:1278::-;13139:7;13196:10;13179:13;;:27;;:45;;;;;13223:1;13210:10;:14;13179:45;13158:111;;;;-1:-1:-1;;;13158:111:0;;;;;;;:::i;:::-;13283:28;;;;:16;:28;;;;;;;;13279:1076;;;13334:29;:41;;;;;:::i;:::-;;;;;;;;;;;;;;13327:48;;;;13279:1076;13412:30;;;;:18;:30;;;;;;13396:12;:46;13392:963;;13465:29;:40;;;;;:::i;13392:963::-;13542:28;;;;:16;:28;;;;;;13526:12;:44;13522:833;;13593:29;:39;;;;;:::i;13522:833::-;13698:32;;;;:20;:32;;;;;;;;;13666:16;:28;;;;;;;:64;;;:127;;-1:-1:-1;13777:16:0;;13746:28;;;;:16;:28;;;;;;:47;13666:127;13649:706;;;13825:29;:41;;;;;:::i;13649:706::-;13887:23;;;;:11;:23;;;;;;13883:472;;13938:29;:42;;;;;:::i;13883:472::-;14001:28;;;;:16;:28;;;;;;;;13997:358;;;14052:29;:41;;;;;:::i;13997:358::-;14174:20;;14146:23;;;;:11;:23;;;;;;:49;;:27;:49::i;:::-;14127:15;:68;14110:245;;14227:29;:40;;;;;:::i;14110:245::-;14305:29;:39;;;;;:::i;14110:245::-;13083:1278;;;:::o;10240:1006::-;10293:13;10309:17;10315:10;10309:5;:17::i;:::-;10293:33;;10366:29;:41;;;;;:::i;:::-;;;;;;;;;;;;;;10357:5;:50;;10336:113;;;;-1:-1:-1;;;10336:113:0;;;;;;;:::i;:::-;10495:5;;-1:-1:-1;;;;;10495:5:0;10481:10;:19;;:63;;-1:-1:-1;10534:10:0;;-1:-1:-1;;;;;10534:10:0;10520;:24;10481:63;:259;;;-1:-1:-1;10718:22:0;;10564:4;;;10612:28;;;:16;:28;;;;;;;-1:-1:-1;;;;;10564:4:0;;;;:26;;10612:28;10662:19;:12;10564:4;10662:16;:19::i;:::-;10564:135;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10564:176:0;;10481:259;10460:321;;;;-1:-1:-1;;;10460:321:0;;;;;;;:::i;:::-;10792:28;;;;:16;:28;;;;;:35;;-1:-1:-1;;10792:35:0;10823:4;10792:35;;;10837:359;10861:27;;;;:15;:27;;;;;:34;10857:38;;10837:359;;;10952:27;;;;:15;:27;;;;;:30;;10916:269;;10952:27;10980:1;;10952:30;;;;;;;;;;;;;;;;;;11000:26;;;:14;:26;;;;;;;:29;;-1:-1:-1;;;;;10952:30:0;;;;11027:1;;11000:29;;;;;;;;;;;;;;11047:18;:30;11066:10;11047:30;;;;;;;;;;;11078:1;11047:33;;;;;;;;;;;;;;;;;;10916:269;;;;;;;-1:-1:-1;;10916:269:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11047:33;10916:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11098:29:0;;;;:17;:29;;;;;:32;;:29;;-1:-1:-1;11128:1:0;;-1:-1:-1;11098:32:0;;;;;;;;;;;;;;;;10916:269;;;;;;;-1:-1:-1;;10916:269:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11098:32;10916:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11148:23:0;;;;:11;:23;;;;;;;-1:-1:-1;10916:18:0;;-1:-1:-1;10916:269:0:i;:::-;10897:3;;10837:359;;;;11211:28;11228:10;11211:28;;;;;;:::i;:::-;;;;;;;;10240:1006;;:::o;6120:245::-;6219:5;;-1:-1:-1;;;;;6219:5:0;6205:10;:19;;:47;;-1:-1:-1;6242:10:0;;-1:-1:-1;;;;;6242:10:0;6228;:24;6205:47;6197:69;;;;-1:-1:-1;;;6197:69:0;;;;;;;:::i;:::-;6301:1;6284:14;:18;6276:35;;;;-1:-1:-1;;;6276:35:0;;;;;;;:::i;:::-;6321:20;:37;6120:245::o;1407:32::-;;;-1:-1:-1;;;;;1407:32:0;;:::o;4202:155::-;4291:5;;-1:-1:-1;;;;;4291:5:0;4277:10;:19;4269:41;;;;-1:-1:-1;;;4269:41:0;;;;;;;:::i;:::-;4320:12;:30;;-1:-1:-1;;;;;;4320:30:0;-1:-1:-1;;;;;4320:30:0;;;;;;;;;;4202:155::o;2051:52::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2051:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2051:52:0;;-1:-1:-1;2051:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;12825:252::-;12967:27;:34;12922:13;;12959:42;;12951:68;;;;-1:-1:-1;;;12951:68:0;;;;;;;:::i;:::-;13036:27;13064:5;13036:34;;;;;;;;;;;;;;;;;;13029:41;;;;;;;-1:-1:-1;;13029:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13036:34;13029:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12825:252;;;:::o;2871:43::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2871:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2871:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5645:220;5736:5;;-1:-1:-1;;;;;5736:5:0;5722:10;:19;;:47;;-1:-1:-1;5759:10:0;;-1:-1:-1;;;;;5759:10:0;5745;:24;5722:47;5714:69;;;;-1:-1:-1;;;5714:69:0;;;;;;;:::i;:::-;5809:1;5801:5;:9;5793:26;;;;-1:-1:-1;;;5793:26:0;;;;;;;:::i;:::-;5829:21;:29;5645:220::o;1259:25::-;;;-1:-1:-1;;;;;1259:25:0;;:::o;1446:31::-;;;;:::o;2343:48::-;;;;;;;;;;;;;;;:::o;5871:243::-;5969:5;;-1:-1:-1;;;;;5969:5:0;5955:10;:19;;:47;;-1:-1:-1;5992:10:0;;-1:-1:-1;;;;;5992:10:0;5978;:24;5955:47;5947:69;;;;-1:-1:-1;;;5947:69:0;;;;;;;:::i;:::-;6051:1;6034:14;:18;6026:35;;;;-1:-1:-1;;;6026:35:0;;;;;;;:::i;:::-;6071:19;:36;5871:243::o;1526:36::-;;;;:::o;1934:51::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;12693:126::-;12751:15;12785:27;12778:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12778:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12693:126;:::o;5399:240::-;5497:5;;-1:-1:-1;;;;;5497:5:0;5483:10;:19;;:47;;-1:-1:-1;5520:10:0;;-1:-1:-1;;;;;5520:10:0;5506;:24;5483:47;5475:69;;;;-1:-1:-1;;;5475:69:0;;;;;;;:::i;:::-;5576:1;5562:11;:15;5554:32;;;;-1:-1:-1;;;5554:32:0;;;;;;;:::i;:::-;5596:22;:36;5399:240::o;2802:63::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1991:54::-;;;;;;;;;;;;;;;;;;2282:55;;;;;;;;;;;;;:::o;1824:46::-;;;;;;;;;;;;;:::o;1876:52::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1876:52:0;;-1:-1:-1;1876:52:0;;-1:-1:-1;1876:52:0:o;5165:228::-;5257:5;;-1:-1:-1;;;;;5257:5:0;5243:10;:19;;:47;;-1:-1:-1;5280:10:0;;-1:-1:-1;;;;;5280:10:0;5266;:24;5243:47;5235:69;;;;-1:-1:-1;;;5235:69:0;;;;;;;:::i;:::-;5336:1;5322:11;:15;5314:32;;;;-1:-1:-1;;;5314:32:0;;;;;;;:::i;:::-;5356:16;:30;5165:228::o;2608:72::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2608:72:0;;:::o;2109:53::-;;;;;;;;;;;;;:::o;2225:51::-;;;;;;;;;;;;;:::o;6371:248::-;6471:5;;-1:-1:-1;;;;;6471:5:0;6457:10;:19;;:47;;-1:-1:-1;6494:10:0;;-1:-1:-1;;;;;6494:10:0;6480;:24;6457:47;6449:69;;;;-1:-1:-1;;;6449:69:0;;;;;;;:::i;:::-;6554:1;6536:15;:19;6528:36;;;;-1:-1:-1;;;6528:36:0;;;;;;;:::i;:::-;6574:20;:38;6371:248::o;4598:185::-;4697:10;;-1:-1:-1;;;;;4697:10:0;4683;:24;4675:51;;;;-1:-1:-1;;;4675:51:0;;;;;;;:::i;:::-;4736:17;:40;;-1:-1:-1;;;;;;4736:40:0;-1:-1:-1;;;;;4736:40:0;;;;;;;;;;4598:185::o;1732:28::-;;;;:::o;6989:2432::-;7318:22;;7200:7;7240:4;;7200:7;;7318:22;-1:-1:-1;;;;;7240:4:0;:26;7267:10;7279:19;:12;7240:4;7279:16;:19::i;:::-;7240:59;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;7240:100:0;;7219:162;;;;-1:-1:-1;;;7219:162:0;;;;;;;:::i;:::-;7430:6;:13;7412:7;:14;:31;:86;;;;;7481:10;:17;7463:7;:14;:35;7412:86;:140;;;;;7536:9;:16;7518:7;:14;:34;7412:140;7391:201;;;;-1:-1:-1;;;7391:201:0;;;;;;;:::i;:::-;7610:14;;7602:47;;;;-1:-1:-1;;;7602:47:0;;;;;;;:::i;:::-;7685:21;;7667:7;:14;:39;;7659:68;;;;-1:-1:-1;;;7659:68:0;;;;;;;:::i;:::-;7783:10;7738:24;7765:29;;;:17;:29;;;;;;7808:21;;7804:490;;7845:36;7884:23;7890:16;7884:5;:23::i;:::-;7845:62;;7998:29;:39;;;;;:::i;:::-;;;;;;;;;;;;;;7946:28;:91;;7921:173;;;;-1:-1:-1;;;7921:173:0;;;;;;;:::i;:::-;8185:29;:40;;;;;:::i;:::-;;;;;;;;;;;;;;8133:28;:92;;8108:175;;;;-1:-1:-1;;;8108:175:0;;;;;;;:::i;:::-;7804:490;;8304:18;8325:37;8342:19;;8325:12;:16;;:37;;;;:::i;:::-;8304:58;;8372:16;8391:36;8406:20;;8391:10;:14;;:36;;;;:::i;:::-;8454:13;;8372:55;;-1:-1:-1;8454:20:0;;8472:1;8454:17;:20::i;:::-;8438:13;:36;;;8485:31;;;;:16;:31;;;;;;;;:44;;-1:-1:-1;;;;;;8485:44:0;8519:10;8485:44;;;8551:13;;8539:26;;:11;:26;;;;;:30;;;8595:13;;8579:30;;:15;:30;;;;:40;;;;;;;;:::i;:::-;-1:-1:-1;8644:13:0;;8629:29;;;;:14;:29;;;;;;;;:38;;;;;;;;:::i;:::-;-1:-1:-1;8696:13:0;;8677:33;;;;:18;:33;;;;;;;;:46;;;;;;;;:::i;:::-;-1:-1:-1;8751:13:0;;8733:32;;;;:17;:32;;;;;;;;:44;;;;;;;;:::i;:::-;-1:-1:-1;8806:13:0;;;8787:33;;;;:18;:33;;;;;;;;:46;;;8860:13;;8843:31;;:16;:31;;;;;:42;;;8912:13;;8895:31;;:16;:31;;;;;:35;;;8961:13;;8940:35;;:20;:35;;;;;:39;;;9006:13;;8989:31;;:16;:31;;;;;:39;;-1:-1:-1;;8989:39:0;;;;;;9055:13;;9038:31;;:16;:31;;;;;:39;;;;;;;9120:13;;9106:10;9088:29;;;:17;:29;;;;;;;:45;;;9149:235;;;;;;9120:13;9229:7;;9250:6;;9270:10;;9294:9;;8823:10;;8877:8;;9363:11;;9149:235;:::i;:::-;;;;;;;;-1:-1:-1;;9401:13:0;;;6989:2432;-1:-1:-1;;;;;;;6989:2432:0:o;9558:676::-;9652:29;:42;;;;;:::i;:::-;;;;;;;;;;;;;;9631:17;9637:10;9631:5;:17::i;:::-;:63;9610:123;;;;-1:-1:-1;;;9610:123:0;;;;;;;:::i;:::-;9743:11;9757:41;9777:20;;9757:15;:19;;:41;;;;:::i;:::-;9743:55;;9813:9;9808:335;9832:27;;;;:15;:27;;;;;:34;9828:38;;9808:335;;;9919:27;;;;:15;:27;;;;;:30;;9887:245;;9919:27;9947:1;;9919:30;;;;;;;;;;;;;;;;;;9967:26;;;:14;:26;;;;;;;:29;;-1:-1:-1;;;;;9919:30:0;;;;9994:1;;9967:29;;;;;;;;;;;;;;10014:18;:30;10033:10;10014:30;;;;;;;;;;;10045:1;10014:33;;;;;;;;;;;;;;;;;;9887:245;;;;;;;-1:-1:-1;;9887:245:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10014:33;9887:245;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;10065:29:0;;;;:17;:29;;;;;:32;;:29;;-1:-1:-1;10095:1:0;;-1:-1:-1;10065:32:0;;;;;;;;;;;;;;;;9887:245;;;;;;;-1:-1:-1;;9887:245:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10065:32;9887:245;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10115:3;9887:14;:245::i;:::-;9868:3;;9808:335;;;-1:-1:-1;10152:23:0;;;;:11;:23;;;;;;;:29;;;10196:31;;;;;10164:10;;10178:3;;10196:31;:::i;2530:72::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11901:362::-;12014:4;12102:33;;;:21;:33;;;;;;;;-1:-1:-1;;;;;12102:40:0;;;;;;;;;;;;;;12156:32;;;:20;:32;;;;;:39;;;;;;;;;12209:30;;;:18;:30;;;;;:37;;;;;;;;;;12102:40;;;;;12156:39;;;;;-1:-1:-1;;;;;12209:37:0;;11901:362::o;4789:259::-;4869:17;;-1:-1:-1;;;;;4869:17:0;4855:10;:31;:59;;;;-1:-1:-1;4890:10:0;:24;;4855:59;4834:127;;;;-1:-1:-1;;;4834:127:0;;;;;;;:::i;:::-;4984:17;;;4971:10;:30;;-1:-1:-1;;;;;;4971:30:0;;;-1:-1:-1;;;;;4984:17:0;;4971:30;;;;5011;;;4789:259::o;1649:35::-;;;;:::o;2745:50::-;;;;;;;;;;;;;;;:::o;1317:20::-;;;-1:-1:-1;;;;;1317:20:0;;:::o;11252:643::-;11356:29;:39;;;;;:::i;:::-;;;;;;;;;;;;;;11335:17;11341:10;11335:5;:17::i;:::-;:60;11314:117;;;;-1:-1:-1;;;11314:117:0;;;;;;;:::i;:::-;11441:28;;;;:16;:28;;;;;:35;;-1:-1:-1;;11441:35:0;11472:4;11441:35;;;11486:360;11510:27;;;;:15;:27;;;;;:34;11506:38;;11486:360;;;11602:27;;;;:15;:27;;;;;:30;;11565:270;;11602:27;11630:1;;11602:30;;;;;;;;;;;;;;;;;;11650:26;;;:14;:26;;;;;;;:29;;-1:-1:-1;;;;;11602:30:0;;;;11677:1;;11650:29;;;;;;;;;;;;;;11697:18;:30;11716:10;11697:30;;;;;;;;;;;11728:1;11697:33;;;;;;;;;;;;;;;;;;11565:270;;;;;;;-1:-1:-1;;11565:270:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11697:33;11565:270;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11748:29:0;;;;:17;:29;;;;;:32;;:29;;-1:-1:-1;11778:1:0;;-1:-1:-1;11748:32:0;;;;;;;;;;;;;;;;11565:270;;;;;;;-1:-1:-1;;11565:270:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11748:32;11565:270;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11798:23:0;;;;:11;:23;;;;;;;-1:-1:-1;11565:19:0;;-1:-1:-1;11565:270:0:i;:::-;-1:-1:-1;11546:3:0;;11486:360;;;;11860:28;11877:10;11860:28;;;;;;:::i;:::-;;;;;;;;11252:643;:::o;1291:20::-;;;-1:-1:-1;;;1291:20:0;;;;;:::o;16983:989::-;17142:29;:39;;;;;:::i;:::-;;;;;;;;;;;;;;17121:17;17127:10;17121:5;:17::i;:::-;:60;17100:120;;;;-1:-1:-1;;;17100:120:0;;;;;;;:::i;:::-;17251:33;;;;:21;:33;;;;;;;;-1:-1:-1;;;;;17251:40:0;;;;;;;;;;;;:49;17230:109;;;;-1:-1:-1;;;17230:109:0;;;;;;;:::i;:::-;17349:12;17364:4;;17423:30;;;:18;:30;;;;;;;17364:99;;-1:-1:-1;;;17364:99:0;;-1:-1:-1;;;;;17364:4:0;;;;:26;;:99;;17404:5;;17423:30;17364:99;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17349:114;;17478:7;17474:264;;;17532:28;;;;:16;:28;;;;;;:69;;-1:-1:-1;;;;;17532:69:0;;:32;:69::i;:::-;17501:28;;;;:16;:28;;;;;:100;17474:264;;;17667:32;;;;:20;:32;;;;;;:60;;-1:-1:-1;;;;;17667:60:0;;:53;:60::i;:::-;17632:32;;;;:20;:32;;;;;:95;17474:264;17748:33;;;;:21;:33;;;;;;;;-1:-1:-1;;;;;17748:40:0;;;;;;;;;;;:47;;17791:4;-1:-1:-1;;17748:47:0;;;;;;;17805:32;;;:20;:32;;;;;:39;;;;;;;;:49;;;;;;;;;;;17864:30;;;:18;:30;;;;;:37;;;;;;;;;;:45;;-1:-1:-1;;17864:45:0;-1:-1:-1;;;;;17864:45:0;;;;;17925:40;;;;;17748;;:33;;17805:49;;17864:45;;17925:40;:::i;:::-;;;;;;;;16983:989;;;;:::o;874:176:1:-;932:7;963:5;;;986:6;;;;978:46;;;;-1:-1:-1;;;978:46:1;;;;;;;:::i;:::-;1042:1;-1:-1:-1;874:176:1;;;;;:::o;1321:134::-;1379:7;1405:43;1409:1;1412;1405:43;;;;;;;;;;;;;;;;;:3;:43::i;15488:408:0:-;15669:14;15720:6;15728:5;15735:9;15746:4;15752:3;15709:47;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;15709:47:0;;;;;;;;;15686:80;;15709:47;15686:80;;;;15805:5;15776:26;;;:18;:26;;;;;;:34;;-1:-1:-1;;15776:34:0;;;15686:80;-1:-1:-1;;;;;;15825:64:0;;;15686:80;;15825:64;;;;15861:5;;15868:9;;15879:4;;15885:3;;15825:64;:::i;:::-;;;;;;;;15488:408;;;;;;:::o;14475:425::-;14674:18;:108;14731:6;14739:5;14746:9;14757:4;14763:3;14720:47;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;14720:47:0;;;;;;;;;14693:88;;14720:47;14693:88;;;;14674:108;;;;;;;;;;-1:-1:-1;14674:108:0;;;;14673:109;14652:177;;;;-1:-1:-1;;;14652:177:0;;;;;;;:::i;:::-;14839:54;14857:6;14865:5;14872:9;14883:4;14889:3;14839:17;:54::i;:::-;;14475:425;;;;;:::o;15902:1075::-;16083:12;16107:14;16158:6;16166:5;16173:9;16184:4;16190:3;16147:47;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;16147:47:0;;;;;;;;;16124:80;;16147:47;16124:80;;;;16222:26;;;;:18;:26;;;;;;16124:80;;-1:-1:-1;16222:26:0;;16214:49;;;;-1:-1:-1;;;16214:49:0;;;;;;;:::i;:::-;16300:3;16281:15;:22;;16273:47;;;;-1:-1:-1;;;16273:47:0;;;;;;;:::i;:::-;16365:20;;16357:29;;:3;;:7;:29::i;:::-;16338:15;:48;;16330:66;;;;-1:-1:-1;;;16330:66:0;;;;;;;:::i;:::-;16436:5;16407:26;;;:18;:26;;;;;:34;;-1:-1:-1;;16407:34:0;;;16488:23;;16452:21;;16484:221;;-1:-1:-1;16543:4:0;16484:221;;;16646:9;16630:27;;;;;;16676:4;16589:105;;;;;;;;;:::i;:::-;;;;;;;;;;;;;16578:116;;16484:221;16716:12;16730:23;16757:6;-1:-1:-1;;;;;16757:11:0;16776:5;16796:8;16757:57;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16715:99;;;;16832:7;16824:38;;;;-1:-1:-1;;;16824:38:0;;;;;;;:::i;:::-;16906:6;-1:-1:-1;;;;;16878:64:0;16898:6;16878:64;16914:5;16921:9;16932:4;16938:3;16878:64;;;;;;;;;:::i;:::-;;;;;;;;16960:10;15902:1075;-1:-1:-1;;;;;;;;;15902:1075:0:o;1746:187:1:-;1832:7;1867:12;1859:6;;;;1851:29;;;;-1:-1:-1;;;1851:29:1;;;;;;;;:::i;:::-;-1:-1:-1;;;1902:5:1;;;1746:187::o;14906:576:0:-;15085:7;15132:41;15152:20;;15132:15;:19;;:41;;;;:::i;:::-;15125:3;:48;;15104:119;;;;-1:-1:-1;;;15104:119:0;;;;;;;:::i;:::-;15234:14;15285:6;15293:5;15300:9;15311:4;15317:3;15274:47;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;15274:47:0;;;;;;;;;15251:80;;15274:47;15251:80;;;;15341:26;;;;:18;:26;;;;;;:33;;-1:-1:-1;;15341:33:0;15370:4;15341:33;;;15251:80;-1:-1:-1;;;;;;15390:62:0;;;15251:80;;15390:62;;;;15424:5;;15431:9;;15442:4;;15448:3;;15390:62;:::i;:::-;;;;;;;;15469:6;14906:576;-1:-1:-1;;;;;;14906:576:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;5:130::-;72:20;;-1:-1;;;;;56702:54;;58434:35;;58424:2;;58483:1;;58473:12;160:707;;277:3;270:4;262:6;258:17;254:27;244:2;;-1:-1;;285:12;244:2;332:6;319:20;354:80;369:64;426:6;369:64;:::i;:::-;354:80;:::i;:::-;462:21;;;345:89;-1:-1;506:4;519:14;;;;494:17;;;608;;;599:27;;;;596:36;-1:-1;593:2;;;645:1;;635:12;593:2;670:1;655:206;680:6;677:1;674:13;655:206;;;760:37;793:3;781:10;760:37;:::i;:::-;748:50;;812:14;;;;840;;;;702:1;695:9;655:206;;;659:14;;;;;237:630;;;;:::o;891:705::-;;1017:3;1010:4;1002:6;998:17;994:27;984:2;;-1:-1;;1025:12;984:2;1072:6;1059:20;1094:89;1109:73;1175:6;1109:73;:::i;1094:89::-;1211:21;;;1085:98;-1:-1;1255:4;1268:14;;;;1243:17;;;1363:1;1348:242;1373:6;1370:1;1367:13;1348:242;;;1480:46;1522:3;1255:4;1456:3;1443:17;1247:6;1431:30;;1480:46;:::i;:::-;1468:59;;1541:14;;;;1569;;;;1395:1;1388:9;1348:242;;1621:708;;1748:3;1741:4;1733:6;1729:17;1725:27;1715:2;;-1:-1;;1756:12;1715:2;1803:6;1790:20;1825:90;1840:74;1907:6;1840:74;:::i;1825:90::-;1943:21;;;1816:99;-1:-1;1987:4;2000:14;;;;1975:17;;;2095:1;2080:243;2105:6;2102:1;2099:13;2080:243;;;2212:47;2255:3;1987:4;2188:3;2175:17;1979:6;2163:30;;2212:47;:::i;:::-;2200:60;;2274:14;;;;2302;;;;2127:1;2120:9;2080:243;;2355:707;;2472:3;2465:4;2457:6;2453:17;2449:27;2439:2;;-1:-1;;2480:12;2439:2;2527:6;2514:20;2549:80;2564:64;2621:6;2564:64;:::i;2549:80::-;2657:21;;;2540:89;-1:-1;2701:4;2714:14;;;;2689:17;;;2803;;;2794:27;;;;2791:36;-1:-1;2788:2;;;2840:1;;2830:12;2788:2;2865:1;2850:206;2875:6;2872:1;2869:13;2850:206;;;4305:20;;2943:50;;3007:14;;;;3035;;;;2897:1;2890:9;2850:206;;3339:440;;3440:3;3433:4;3425:6;3421:17;3417:27;3407:2;;-1:-1;;3448:12;3407:2;3495:6;3482:20;51984:18;51976:6;51973:30;51970:2;;;-1:-1;;52006:12;51970:2;3517:64;52079:9;52060:17;;-1:-1;;52056:33;52147:4;52137:15;3517:64;:::i;:::-;3508:73;;3601:6;3594:5;3587:21;3705:3;52147:4;3696:6;3629;3687:16;;3684:25;3681:2;;;3722:1;;3712:12;3681:2;57841:6;52147:4;3629:6;3625:17;52147:4;3663:5;3659:16;57818:30;57897:1;57879:16;;;52147:4;57879:16;57872:27;3663:5;3400:379;-1:-1;;3400:379::o;4514:241::-;;4618:2;4606:9;4597:7;4593:23;4589:32;4586:2;;;-1:-1;;4624:12;4586:2;4686:53;4731:7;4707:22;4686:53;:::i;4762:491::-;;;;4900:2;4888:9;4879:7;4875:23;4871:32;4868:2;;;-1:-1;;4906:12;4868:2;4968:53;5013:7;4989:22;4968:53;:::i;:::-;4958:63;;5076:53;5121:7;5058:2;5101:9;5097:22;5076:53;:::i;:::-;5066:63;;5184:53;5229:7;5166:2;5209:9;5205:22;5184:53;:::i;:::-;5174:63;;4862:391;;;;;:::o;5260:1431::-;;;;;;5561:3;5549:9;5540:7;5536:23;5532:33;5529:2;;;-1:-1;;5568:12;5529:2;5626:17;5613:31;5664:18;;5656:6;5653:30;5650:2;;;-1:-1;;5686:12;5650:2;5716:78;5786:7;5777:6;5766:9;5762:22;5716:78;:::i;:::-;5706:88;;5859:2;5848:9;5844:18;5831:32;5817:46;;5664:18;5875:6;5872:30;5869:2;;;-1:-1;;5905:12;5869:2;5935:78;6005:7;5996:6;5985:9;5981:22;5935:78;:::i;:::-;5925:88;;6078:2;6067:9;6063:18;6050:32;6036:46;;5664:18;6094:6;6091:30;6088:2;;;-1:-1;;6124:12;6088:2;6154:88;6234:7;6225:6;6214:9;6210:22;6154:88;:::i;:::-;6144:98;;6307:2;6296:9;6292:18;6279:32;6265:46;;5664:18;6323:6;6320:30;6317:2;;;-1:-1;;6353:12;6317:2;6383:87;6462:7;6453:6;6442:9;6438:22;6383:87;:::i;:::-;6373:97;;6535:3;6524:9;6520:19;6507:33;6493:47;;5664:18;6552:6;6549:30;6546:2;;;-1:-1;;6582:12;6546:2;;6612:63;6667:7;6658:6;6647:9;6643:22;6612:63;:::i;:::-;6602:73;;;5523:1168;;;;;;;;:::o;6698:241::-;;6802:2;6790:9;6781:7;6777:23;6773:32;6770:2;;;-1:-1;;6808:12;6770:2;-1:-1;3268:20;;6764:175;-1:-1;6764:175::o;6946:347::-;;7060:2;7048:9;7039:7;7035:23;7031:32;7028:2;;;-1:-1;;7066:12;7028:2;7124:17;7111:31;7162:18;7154:6;7151:30;7148:2;;;-1:-1;;7184:12;7148:2;7214:63;7269:7;7260:6;7249:9;7245:22;7214:63;:::i;:::-;7204:73;7022:271;-1:-1;;;;7022:271::o;7548:366::-;;;7669:2;7657:9;7648:7;7644:23;7640:32;7637:2;;;-1:-1;;7675:12;7637:2;4318:6;4305:20;7727:63;;7845:53;7890:7;7827:2;7870:9;7866:22;7845:53;:::i;:::-;7835:63;;7631:283;;;;;:::o;7921:360::-;;;8039:2;8027:9;8018:7;8014:23;8010:32;8007:2;;;-1:-1;;8045:12;8007:2;4318:6;4305:20;8097:63;;8197:2;8237:9;8233:22;3134:20;58580:5;56384:13;56377:21;58558:5;58555:32;58545:2;;-1:-1;;58591:12;58545:2;8205:60;;;;8001:280;;;;;:::o;8288:366::-;;;8409:2;8397:9;8388:7;8384:23;8380:32;8377:2;;;-1:-1;;8415:12;8377:2;-1:-1;;4305:20;;;8567:2;8606:22;;;4305:20;;-1:-1;8371:283::o;8661:261::-;;8775:2;8763:9;8754:7;8750:23;8746:32;8743:2;;;-1:-1;;8781:12;8743:2;4458:6;4452:13;-1:-1;;;;;58950:5;56908:38;58926:5;58923:34;58913:2;;-1:-1;;58961:12;10103:690;;10296:5;53252:12;54611:6;54606:3;54599:19;54648:4;;54643:3;54639:14;10308:93;;54648:4;10472:5;52613:14;-1:-1;10511:260;10536:6;10533:1;10530:13;10511:260;;;10597:13;;-1:-1;;;;;56702:54;9903:37;;9083:14;;;;54090;;;;56713:42;10551:9;10511:260;;;-1:-1;10777:10;;10227:566;-1:-1;;;;;10227:566::o;10828:920::-;;11048:5;53252:12;54611:6;54606:3;54599:19;54648:4;;54643:3;54639:14;11060:102;;;;54648:4;11219:6;11215:17;11210:3;11206:27;11194:39;;54648:4;11313:5;52613:14;-1:-1;11352:357;11377:6;11374:1;11371:13;11352:357;;;11439:9;11433:4;11429:20;11424:3;11417:33;9231:64;9291:3;11484:6;11478:13;9231:64;:::i;:::-;11688:14;;;;11498:90;-1:-1;54090:14;;;;11399:1;11392:9;11352:357;;;-1:-1;11732:10;;10970:778;-1:-1;;;;;;;10970:778::o;12752:690::-;;12945:5;53252:12;54611:6;54606:3;54599:19;54648:4;;54643:3;54639:14;12957:93;;54648:4;13121:5;52613:14;-1:-1;13160:260;13185:6;13182:1;13179:13;13160:260;;;13246:13;;26593:37;;9665:14;;;;54090;;;;13207:1;13200:9;13160:260;;13716:323;;13848:5;53252:12;54611:6;54606:3;54599:19;13931:52;13976:6;54648:4;54643:3;54639:14;54648:4;13957:5;13953:16;13931:52;:::i;:::-;52079:9;58338:14;-1:-1;;58334:28;13995:39;;;;54648:4;13995:39;;13796:243;-1:-1;;13796:243::o;27010:405::-;-1:-1;;;;;;56550:78;;13648:56;;53252:12;;27010:405;;14667:52;53252:12;27277:1;27268:11;;14700:4;14689:16;;14667:52;:::i;:::-;14731:16;;;;27277:1;14731:16;;27170:245;-1:-1;;;27170:245::o;27422:271::-;;14556:5;53252:12;14667:52;14712:6;14707:3;14700:4;14693:5;14689:16;14667:52;:::i;:::-;14731:16;;;;;27556:137;-1:-1;;27556:137::o;27700:381::-;-1:-1;;;16224:31;;16209:1;16274:11;;27889:192::o;28088:381::-;-1:-1;;;17231:32;;17216:1;17282:11;;28277:192::o;28476:381::-;-1:-1;;;19836:30;;19821:1;19885:11;;28665:192::o;28864:381::-;-1:-1;;;21163:29;;21148:1;21211:11;;29053:192::o;29252:381::-;-1:-1;;;22491:31;;22476:1;22541:11;;29441:192::o;29640:381::-;-1:-1;;;23499:31;;23484:1;23549:11;;29829:192::o;30028:381::-;-1:-1;;;26109:29;;26094:1;26157:11;;30217:192::o;30416:381::-;-1:-1;;;26458:30;;26443:1;26507:11;;30605:192::o;30804:222::-;-1:-1;;;;;56702:54;;;;9903:37;;30931:2;30916:18;;30902:124::o;31033:349::-;-1:-1;;;;;56702:54;;;;9772:58;;31368:2;31353:18;;26593:37;31196:2;31181:18;;31167:215::o;31729:542::-;-1:-1;;;;;56702:54;;;;9903:37;;32098:2;32083:18;;26593:37;;;;56384:13;56377:21;32175:2;32160:18;;13515:34;-1:-1;;;;;56908:38;32257:2;32242:18;;26832:49;31933:3;31918:19;;31904:367::o;32278:840::-;;56713:42;;;;;56300:5;56702:54;9910:3;9903:37;26623:5;32720:2;32709:9;32705:18;26593:37;32555:3;32757:2;32746:9;32742:18;32735:48;32797:78;32555:3;32544:9;32540:19;32861:6;32797:78;:::i;:::-;32923:9;32917:4;32913:20;32908:2;32897:9;32893:18;32886:48;32948:76;33019:4;33010:6;32948:76;:::i;:::-;32940:84;;;26623:5;33103:3;33092:9;33088:19;26593:37;32526:592;;;;;;;;:::o;33125:1224::-;;33574:3;33596:17;33589:47;33650:108;33574:3;33563:9;33559:19;33744:6;33650:108;:::i;:::-;33806:9;33800:4;33796:20;33791:2;33780:9;33776:18;33769:48;33831:108;33934:4;33925:6;33831:108;:::i;:::-;33823:116;;33987:9;33981:4;33977:20;33972:2;33961:9;33957:18;33950:48;34012:128;34135:4;34126:6;34012:128;:::i;:::-;34004:136;;34188:9;34182:4;34178:20;34173:2;34162:9;34158:18;34151:48;34213:126;34334:4;34325:6;34213:126;:::i;:::-;34205:134;33545:804;-1:-1;;;;;;;33545:804::o;34356:410::-;;34553:2;34574:17;34567:47;34628:128;34553:2;34542:9;34538:18;34742:6;34628:128;:::i;34773:210::-;56384:13;;56377:21;13515:34;;34894:2;34879:18;;34865:118::o;34990:416::-;56384:13;;56377:21;13515:34;;56384:13;;56377:21;35311:2;35296:18;;13515:34;-1:-1;;;;;56908:38;35392:2;35377:18;;26962:36;35159:2;35144:18;;35130:276::o;35413:306::-;;35558:2;35579:17;35572:47;35633:76;35558:2;35547:9;35543:18;35695:6;35633:76;:::i;36316:416::-;36516:2;36530:47;;;15849:2;36501:18;;;54599:19;-1:-1;;;54639:14;;;15865:38;15922:12;;;36487:245::o;36739:416::-;36939:2;36953:47;;;16524:2;36924:18;;;54599:19;16560:26;54639:14;;;16540:47;16606:12;;;36910:245::o;37162:416::-;37362:2;37376:47;;;16857:2;37347:18;;;54599:19;-1:-1;;;54639:14;;;16873:37;16929:12;;;37333:245::o;37585:416::-;37785:2;37799:47;;;17532:2;37770:18;;;54599:19;-1:-1;;;54639:14;;;17548:42;17609:12;;;37756:245::o;38008:416::-;38208:2;38222:47;;;17860:1;38193:18;;;54599:19;-1:-1;;;54639:14;;;17875:27;17921:12;;;38179:245::o;38431:416::-;38631:2;38645:47;;;18172:2;38616:18;;;54599:19;-1:-1;;;54639:14;;;18188:36;18243:12;;;38602:245::o;38854:416::-;39054:2;39068:47;;;18494:2;39039:18;;;54599:19;18530:29;54639:14;;;18510:50;18579:12;;;39025:245::o;39277:416::-;39477:2;39491:47;;;18830:2;39462:18;;;54599:19;-1:-1;;;54639:14;;;18846:39;18904:12;;;39448:245::o;39700:416::-;39900:2;39914:47;;;19155:1;39885:18;;;54599:19;-1:-1;;;54639:14;;;19170:28;19217:12;;;39871:245::o;40123:416::-;40323:2;40337:47;;;19468:1;40308:18;;;54599:19;-1:-1;;;54639:14;;;19483:32;19534:12;;;40294:245::o;40546:416::-;40746:2;40760:47;;;20135:2;40731:18;;;54599:19;-1:-1;;;54639:14;;;20151:39;20209:12;;;40717:245::o;40969:416::-;41169:2;41183:47;;;20460:2;41154:18;;;54599:19;-1:-1;;;54639:14;;;20476:44;20539:12;;;41140:245::o;41392:416::-;41592:2;41606:47;;;20790:2;41577:18;;;54599:19;-1:-1;;;54639:14;;;20806:36;20861:12;;;41563:245::o;41815:416::-;42015:2;42029:47;;;21461:2;42000:18;;;54599:19;-1:-1;;;54639:14;;;21477:36;21532:12;;;41986:245::o;42238:416::-;42438:2;42452:47;;;21783:2;42423:18;;;54599:19;-1:-1;;;54639:14;;;21799:39;21857:12;;;42409:245::o;42661:416::-;42861:2;42875:47;;;22108:2;42846:18;;;54599:19;22144:25;54639:14;;;22124:46;22189:12;;;42832:245::o;43084:416::-;43284:2;43298:47;;;22791:2;43269:18;;;54599:19;-1:-1;;;54639:14;;;22807:41;22867:12;;;43255:245::o;43507:416::-;43707:2;43721:47;;;23118:2;43692:18;;;54599:19;-1:-1;;;54639:14;;;23134:44;23197:12;;;43678:245::o;43930:416::-;44130:2;44144:47;;;23799:2;44115:18;;;54599:19;-1:-1;;;54639:14;;;23815:33;23867:12;;;44101:245::o;44353:416::-;44553:2;44567:47;;;24118:2;44538:18;;;54599:19;24154:26;54639:14;;;24134:47;24200:12;;;44524:245::o;44776:416::-;44976:2;44990:47;;;24451:2;44961:18;;;54599:19;-1:-1;;;54639:14;;;24467:37;24523:12;;;44947:245::o;45199:416::-;45399:2;45413:47;;;24774:2;45384:18;;;54599:19;-1:-1;;;54639:14;;;24790:38;24847:12;;;45370:245::o;45622:416::-;45822:2;45836:47;;;25098:1;45807:18;;;54599:19;-1:-1;;;54639:14;;;25113:32;25164:12;;;45793:245::o;46045:416::-;46245:2;46259:47;;;25415:2;46230:18;;;54599:19;-1:-1;;;54639:14;;;25431:35;25485:12;;;46216:245::o;46468:416::-;46668:2;46682:47;;;25736:2;46653:18;;;54599:19;-1:-1;;;54639:14;;;25752:36;25807:12;;;46639:245::o;46891:222::-;26593:37;;;47018:2;47003:18;;46989:124::o;47120:1888::-;26593:37;;;-1:-1;;;;;56702:54;;47910:2;47895:18;;9772:58;47737:3;47947:2;47932:18;;47925:48;;;47120:1888;;47987:108;47722:19;;;48081:6;47987:108;:::i;:::-;47979:116;;48143:9;48137:4;48133:20;48128:2;48117:9;48113:18;48106:48;48168:108;48271:4;48262:6;48168:108;:::i;:::-;48160:116;;48325:9;48319:4;48315:20;48309:3;48298:9;48294:19;48287:49;48350:128;48473:4;48464:6;48350:128;:::i;:::-;48342:136;;48527:9;48521:4;48517:20;48511:3;48500:9;48496:19;48489:49;48552:126;48673:4;48664:6;48552:126;:::i;:::-;48544:134;;26623:5;48757:3;48746:9;48742:19;26593:37;26623:5;48841:3;48830:9;48826:19;26593:37;48895:9;48889:4;48885:20;48879:3;48868:9;48864:19;48857:49;48920:78;48993:4;48984:6;48920:78;:::i;:::-;48912:86;47708:1300;-1:-1;;;;;;;;;;;;47708:1300::o;49015:728::-;;26623:5;26600:3;26593:37;49264:3;49383:2;49372:9;49368:18;49361:48;49423:78;49264:3;49253:9;49249:19;49487:6;49423:78;:::i;:::-;49549:9;49543:4;49539:20;49534:2;49523:9;49519:18;49512:48;49574:76;49645:4;49636:6;49574:76;:::i;:::-;49566:84;;;26623:5;49729:2;49718:9;49714:18;26593:37;49235:508;;;;;;;:::o;49750:333::-;26593:37;;;50069:2;50054:18;;26593:37;49905:2;49890:18;;49876:207::o;50090:218::-;-1:-1;;;;;56908:38;;;;26962:36;;50215:2;50200:18;;50186:122::o;50315:256::-;50377:2;50371:9;50403:17;;;50478:18;50463:34;;50499:22;;;50460:62;50457:2;;;50535:1;;50525:12;50457:2;50377;50544:22;50355:216;;-1:-1;50355:216::o;50578:304::-;;50737:18;50729:6;50726:30;50723:2;;;-1:-1;;50759:12;50723:2;-1:-1;50804:4;50792:17;;;50857:15;;50660:222::o;57914:268::-;57979:1;57986:101;58000:6;57997:1;57994:13;57986:101;;;58067:11;;;58061:18;58048:11;;;58041:39;58022:2;58015:10;57986:101;;;58102:6;58099:1;58096:13;58093:2;;;57979:1;58158:6;58153:3;58149:16;58142:27;58093:2;;57963:219;;;:::o

Swarm Source

ipfs://71e246d729401d4e2eef801cbb76c7135316fb88f91c6e64f11a28186b961631

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.