Contract 0xe21e026ff9b4ad82e10ea25d248ecc5a647925ad 1

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x10756d3b2f0cc6f798213e07bf8a53cbfcbf492e57803e79c79247f51f8b01efExecute Meta Tra...284124552022-05-17 2:31:2493 days 2 hrs ago0x9b3ee00beb36021a35d0e46b8c21ed882f19f1a4 IN  0xe21e026ff9b4ad82e10ea25d248ecc5a647925ad0 MATIC0.008187980287 32.689418982
0x2d9f3d183b9f41b89914585022866b7ece296694c9bec3b78e14ed6d4d52d9beExecute Meta Tra...284124262022-05-17 2:30:2693 days 2 hrs ago0x1f402e5dd00b2c3482cfc04c79ad1bdda4f56f94 IN  0xe21e026ff9b4ad82e10ea25d248ecc5a647925ad0 MATIC0.00719568333
0x442a298942f6951e3350c5bef5f2ff5f70a8feb7e9a454d32f658001f7bcb252Execute Meta Tra...284123892022-05-17 2:29:0893 days 2 hrs ago0xa7aa8e3d5346d67aca1a07f011fd4fb2ecadc888 IN  0xe21e026ff9b4ad82e10ea25d248ecc5a647925ad0 MATIC0.00662943633
0x0320a6d7c6fe57a51acaf87463b133b0e5f092e583789703c447b6b0715952f4Execute Meta Tra...284119932022-05-17 2:14:1693 days 3 hrs ago0xb5a5abf05836da048a57fe2c76dbdcacef9405d3 IN  0xe21e026ff9b4ad82e10ea25d248ecc5a647925ad0 MATIC0.008809640443.85
0x169fc1091503de950691d7036bdade3156737804a7b5edeffd2228e8e11a378dExecute Meta Tra...284119352022-05-17 2:11:2493 days 3 hrs ago0xe03b38125b8866b3e4b245ffbbb7eaef21f1f7ed IN  0xe21e026ff9b4ad82e10ea25d248ecc5a647925ad0 MATIC0.007161627779 35.642933897
0x7ef821eb4dbd123833dc686f03640f97fded98816ca78a269871726d84f33f4dExecute Meta Tra...284063662022-05-16 22:57:3093 days 6 hrs ago0xbcb0cc4518387170b42649e77d9091f388494a31 IN  0xe21e026ff9b4ad82e10ea25d248ecc5a647925ad0 MATIC0.009116962436.4
0xc69ff13923a2e61f27b92446df1618472cfffc0fc00236132e137fd70a66589cExecute Meta Tra...284059722022-05-16 22:43:5893 days 6 hrs ago0x76ea3385b40733c8d47b0e3e28fee6900da3348c IN  0xe21e026ff9b4ad82e10ea25d248ecc5a647925ad0 MATIC0.006606218130.3
0x1082e9f201437a80911fc5fbae86d45bec37ee6442da0a53e4ad86b3508c85b6Execute Meta Tra...284058882022-05-16 22:41:0693 days 6 hrs ago0x60d78c03f4cdb9d57a88c33469cd2ca7a3afcf13 IN  0xe21e026ff9b4ad82e10ea25d248ecc5a647925ad0 MATIC0.00663062433
0x9bab5cbcbdbef95612c08ce6975876e3d61f1382a17aa6da4f481185cef15302Execute Meta Tra...284056282022-05-16 22:32:0693 days 6 hrs ago0x529311ac36305ec475774c330f5a844865386178 IN  0xe21e026ff9b4ad82e10ea25d248ecc5a647925ad0 MATIC0.006372809531.7
0xb19c6b8d26767582c071be0d167b0cb601ad97310f06dc8d1776d0595dc0cba5Execute Meta Tra...284053362022-05-16 22:22:0693 days 6 hrs ago0xac7cefbbe5309999d0ed4ca5e16999a9680a5e79 IN  0xe21e026ff9b4ad82e10ea25d248ecc5a647925ad0 MATIC0.00662900733
0x7a77e56b3d93119fac8b0782b06deaba938006ae1db0f20b4a1d7259a6713ce1Execute Meta Tra...282817922022-05-13 21:07:5396 days 8 hrs ago0xacb2da78ef2f4f36247553ff01d77591aeb6ce0c IN  0xe21e026ff9b4ad82e10ea25d248ecc5a647925ad0 MATIC0.007273991836.2
0x4cd6a21e6e0ec360ce3bb3512dbccc4d9900f1ea4fb6320fddcb45410f18b0e7Execute Meta Tra...282817512022-05-13 21:06:2796 days 8 hrs ago0xa6869c3001de171c26418e9e2eedca1c0d763ee2 IN  0xe21e026ff9b4ad82e10ea25d248ecc5a647925ad0 MATIC0.0079627464536.55
0xa5037fce8518b930b4c2cfc6d8b0361e588931333e028227458a2f1eb18ac79eCreate Leaderboa...282774822022-05-13 18:31:0896 days 10 hrs ago0x90bcda8df3a3a1d2edf384de7b74389df09d929b IN  0xe21e026ff9b4ad82e10ea25d248ecc5a647925ad0 MATIC0.016399973373 92.154355275
0x4852ab785cde76e932212f689257dc495c8864cfc552f35718f3542e29fee2dbExecute Meta Tra...282375332022-05-12 18:15:2297 days 11 hrs ago0x90bcda8df3a3a1d2edf384de7b74389df09d929b IN  0xe21e026ff9b4ad82e10ea25d248ecc5a647925ad0 MATIC0.00319347016 94.472980532
0x9cc5d29abf2033c449ca83b02481a29ca0e74582c257a97b4e2b1dc227276081Execute Meta Tra...282373532022-05-12 18:09:1097 days 11 hrs ago0x90bcda8df3a3a1d2edf384de7b74389df09d929b IN  0xe21e026ff9b4ad82e10ea25d248ecc5a647925ad0 MATIC0.002801583952 82.528174862
0x3cb442308ac863309b0b27b72243dbb8793f07ead040daeb7c2ea825078d195eExecute Meta Tra...282080922022-05-11 23:42:0498 days 5 hrs ago0x90bcda8df3a3a1d2edf384de7b74389df09d929b IN  0xe21e026ff9b4ad82e10ea25d248ecc5a647925ad0 MATIC0.003697122902 108.831735966
0x36360eef3e3e7f40cf1f3f7f58446a9f2fad97d47e499419c6f9645061ff2ef9Create Leaderboa...281728642022-05-11 1:20:1099 days 3 hrs ago0x90bcda8df3a3a1d2edf384de7b74389df09d929b IN  0xe21e026ff9b4ad82e10ea25d248ecc5a647925ad0 MATIC0.01601226 90
0xb141944b76135d148a3f823912d26baa62bb185d72669588c01359e92daf17d8Create Leaderboa...281682552022-05-10 22:24:3699 days 6 hrs ago0x90bcda8df3a3a1d2edf384de7b74389df09d929b IN  0xe21e026ff9b4ad82e10ea25d248ecc5a647925ad0 MATIC0.087490819738 491.825396249
0x3a93138645da043bd8e83ee92345c9b8d080c3aef0c652d7bf0410a2aabeebd0Cast Vote281354332022-05-10 2:49:05100 days 2 hrs ago0x90bcda8df3a3a1d2edf384de7b74389df09d929b IN  0xe21e026ff9b4ad82e10ea25d248ecc5a647925ad0 MATIC0.011270297312 49.783763554
0xa9bdc02265926551366ce5121192e503589c0c197fcdc616d4ad2b3546ddaa8cCreate Leaderboa...281354142022-05-10 2:48:23100 days 2 hrs ago0x90bcda8df3a3a1d2edf384de7b74389df09d929b IN  0xe21e026ff9b4ad82e10ea25d248ecc5a647925ad0 MATIC0.009735587968 49.93172547
0x8f7abea8f4a950e7e2aae1f59c60ac7e1cf0d4291ad1f42865025ca60594ab03Register Project281353942022-05-10 2:47:43100 days 2 hrs ago0x90bcda8df3a3a1d2edf384de7b74389df09d929b IN  0xe21e026ff9b4ad82e10ea25d248ecc5a647925ad0 MATIC0.008881505804 49.93172547
0x086e95ec9e3c1c3486dde79c8415b0335feb290cc26bba3f4d89d0279f15212dCreate Leaderboa...281353342022-05-10 2:45:39100 days 2 hrs ago0x90bcda8df3a3a1d2edf384de7b74389df09d929b IN  0xe21e026ff9b4ad82e10ea25d248ecc5a647925ad0 MATIC0.010333661987 59.027235369
0x545284301b3a56e2877b426efd718fecf4d781e21300815d45065d0bef897252Register Project281338322022-05-10 1:51:51100 days 3 hrs ago0x90bcda8df3a3a1d2edf384de7b74389df09d929b IN  0xe21e026ff9b4ad82e10ea25d248ecc5a647925ad0 MATIC0.017839075021 101.895066755
0xf157ef041796a54da9acdc0fe51e92f416deef3f7dd586536908bfbca990bd4c0x60806040279354032022-05-05 1:48:00105 days 3 hrs ago0x90bcda8df3a3a1d2edf384de7b74389df09d929b IN  Create: CommunityLeaderboard0 MATIC0.12756905864630.001763536
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CommunityLeaderboard

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2022-05-05
*/

// File: @openzeppelin/contracts/utils/Context.sol

// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return payable(msg.sender);
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol

// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: @openzeppelin/contracts/security/Pausable.sol

// OpenZeppelin Contracts v4.4.1 (security/Pausable.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

// File: @openzeppelin/contracts/utils/math/SafeMath.sol

// OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // 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 (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @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) {
        return a + b;
    }

    /**
     * @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 a - b;
    }

    /**
     * @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) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting 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 a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting 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) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * 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) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

// File: contracts/lib/BasicMetaTransaction.sol

pragma solidity ^0.8.0;
pragma experimental ABIEncoderV2;

contract BasicMetaTransaction {
  using SafeMath for uint256;

  event MetaTransactionExecuted(
    address userAddress,
    address payable relayerAddress,
    bytes functionSignature
  );
  mapping(address => uint256) nonces;

  function getChainID() public view returns (uint256) {
    uint256 id;
    assembly {
      id := chainid()
    }
    return id;
  }

  /**
   * Main function to be called when user wants to execute meta transaction.
   * The actual function to be called should be passed as param with name functionSignature
   * Here the basic signature recovery is being used. Signature is expected to be generated using
   * personal_sign method.
   * @param userAddress Address of user trying to do meta transaction
   * @param functionSignature Signature of the actual function to be called via meta transaction
   * @param sigR R part of the signature
   * @param sigS S part of the signature
   * @param sigV V part of the signature
   */
  function executeMetaTransaction(
    address userAddress,
    bytes memory functionSignature,
    bytes32 sigR,
    bytes32 sigS,
    uint8 sigV
  ) public payable returns (bytes memory) {
    require(
      verify(
        userAddress,
        nonces[userAddress],
        getChainID(),
        functionSignature,
        sigR,
        sigS,
        sigV
      ),
      "Signer and signature do not match"
    );
    nonces[userAddress] = nonces[userAddress].add(1);

    // Append userAddress at the end to extract it from calling context
    (bool success, bytes memory returnData) = address(this).call(
      abi.encodePacked(functionSignature, userAddress)
    );

    require(success, "Function call not successfull");
    emit MetaTransactionExecuted(
      userAddress,
      payable(msg.sender),
      functionSignature
    );
    return returnData;
  }

  function getNonce(address user) public view returns (uint256 nonce) {
    nonce = nonces[user];
  }

  // Builds a prefixed hash to mimic the behavior of eth_sign.
  function prefixed(bytes32 hash) internal pure returns (bytes32) {
    return
      keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
  }

  function verify(
    address owner,
    uint256 nonce,
    uint256 chainID,
    bytes memory functionSignature,
    bytes32 sigR,
    bytes32 sigS,
    uint8 sigV
  ) public view returns (bool) {
    bytes32 hash = prefixed(
      keccak256(abi.encodePacked(nonce, this, chainID, functionSignature))
    );
    address signer = ecrecover(hash, sigV, sigR, sigS);
    require(signer != address(0), "Invalid signature");
    return (owner == signer);
  }

  function msgSender() internal view returns (address sender) {
    if (msg.sender == address(this)) {
      bytes memory array = msg.data;
      uint256 index = msg.data.length;
      assembly {
        // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those.
        sender := and(
          mload(add(array, index)),
          0xffffffffffffffffffffffffffffffffffffffff
        )
      }
    } else {
      return msg.sender;
    }
  }
}

// File: contracts/CommunityLeaderboard.sol

pragma solidity ^0.8.0;




interface IERC721 {
  function owner() external returns (address owner);

  function ownerOf(uint256 tokenId) external returns (address owner);
}

contract CommunityLeaderboard is Ownable, Pausable, BasicMetaTransaction {
  using SafeMath for uint256;

  uint256 public maxLeaderboardsPerProject = 50;

  event ProjectRegistered(
    bytes32 projectHashId,
    uint256 projectId,
    address indexed from,
    address indexed nftContract,
    string name,
    uint256 numberOfLeaderboards
  );

  event NewProjectOwnerAdded(
    bytes32 projectHashId,
    uint256 _projectId,
    address indexed _newOwner
  );

  event LeaderboardCreated(
    bytes32 leaderboardHashId,
    address indexed creator,
    string leaderboardName,
    uint256 projectId,
    uint256 leaderBoardId,
    uint256 epochCount,
    uint256 epoch
  );

  event VoteCast(
    bytes32 voteHashId,
    uint256 projectId,
    uint256 leaderboardId,
    address indexed member,
    uint256 nftTokenId,
    address indexed voter
  );

  event VoteChanged(
    bytes32 changeVoteHashId,
    uint256 projectId,
    uint256 leaderboardId,
    address indexed member,
    address indexed newMember
  );

  struct Project {
    mapping(address => bool) addressToIsOwner;
    address[] owners;
    address nftContract;
    string name;
    uint256 projectId;
    uint256 numberOfLeaderboards;
  }

  struct MemberRow {
    uint256 numberOfVotes;
    address[] voters;
    mapping(address => uint256) addressToIndex;
  }

  struct LeaderboardSettings {
    string name;
    uint256 projectId;
    uint256 leaderBoardId;
    uint256 epochCount; // How many leaderboard epochs have passed
    uint256 epoch; // Days per epoch
  }

  struct LeaderboardInstance {
    uint256 leaderBoardId;
    uint256 blockStart;
    uint256 blockEnd;
    address[] members; // Addresses that have received votes (used to iterate)
    address[] voters;
    mapping(address => MemberRow) rows;
    mapping(address => bool) voterToHasVoted;
  }

  uint256 public projectCount = 0;
  uint256[] public projectIds;
  mapping(uint256 => Project) public projectIdToProject;
  mapping(uint256 => mapping(uint256 => LeaderboardSettings))
    public leaderboardIndex;
  mapping(uint256 => mapping(uint256 => mapping(uint256 => LeaderboardInstance)))
    public epochToLeaderboard;

  function getLeaderboard(uint256 _projectId, uint256 _leaderboardId)
    external
    view
    returns (
      string memory,
      uint256,
      uint256,
      uint256,
      uint256
    )
  {
    LeaderboardSettings storage leaderboard = leaderboardIndex[_projectId][
      _leaderboardId
    ];
    return (
      leaderboard.name,
      leaderboard.projectId,
      leaderboard.leaderBoardId,
      leaderboard.epochCount,
      leaderboard.epoch
    );
  }

  function getProjectName(uint256 _projectId)
    external
    view
    returns (string memory)
  {
    return projectIdToProject[_projectId].name;
  }

  // change name to getProjectNumberOfLeaderboards
  function getProjectepochCount(uint256 _projectId)
    external
    view
    returns (uint256)
  {
    return projectIdToProject[_projectId].numberOfLeaderboards;
  }

  function getLeaderboardName(uint256 _projectId, uint256 _leaderboardId)
    external
    view
    returns (string memory)
  {
    return leaderboardIndex[_projectId][_leaderboardId].name;
  }

  function getLeaderboardMemberLength(
    uint256 _projectId,
    uint256 _leaderboardId
  ) external view returns (uint256) {
    return
      epochToLeaderboard[_projectId][_leaderboardId][
        leaderboardIndex[_projectId][_leaderboardId].epochCount
      ].members.length;
  }

  function getLeaderboardMemberAddress(
    uint256 _projectId,
    uint256 _leaderboardId,
    uint256 _memberId
  ) external view returns (address) {
    return
      epochToLeaderboard[_projectId][_leaderboardId][
        leaderboardIndex[_projectId][_leaderboardId].epochCount
      ].members[_memberId];
  }

  function getLeaderboardMemberVoteCount(
    uint256 _projectId,
    uint256 _leaderboardId,
    uint256 _memberId
  ) external view returns (uint256) {
    return
      epochToLeaderboard[_projectId][_leaderboardId][
        leaderboardIndex[_projectId][_leaderboardId].epochCount
      ]
        .rows[
          epochToLeaderboard[_projectId][_leaderboardId][
            leaderboardIndex[_projectId][_leaderboardId].epochCount
          ].members[_memberId]
        ]
        .numberOfVotes;
  }

  function getLeaderboardMemberVoteCountByAddress(
    uint256 _projectId,
    uint256 _leaderboardId,
    address _member
  ) external view returns (uint256) {
    return
      epochToLeaderboard[_projectId][_leaderboardId][
        leaderboardIndex[_projectId][_leaderboardId].epochCount
      ].rows[_member].numberOfVotes;
  }

  function getLeaderboardArchivedMemberVoteCount(
    uint256 _projectId,
    uint256 _leaderboardId,
    address _member,
    uint256 _leaderboardArchiveId
  ) external view returns (uint256) {
    return
      epochToLeaderboard[_projectId][_leaderboardId][_leaderboardArchiveId]
        .rows[_member]
        .numberOfVotes;
  }

  function registerProject(address _nftContract, string memory _name)
    public
    whenNotPaused
    returns (uint256)
  {
    address nftContractOwner = IERC721(_nftContract).owner();
    require(
      nftContractOwner == msgSender(),
      "You do not own this NFT contract."
    );

    Project storage newProject = projectIdToProject[projectCount];
    newProject.addressToIsOwner[msgSender()] = true;
    newProject.owners.push(msgSender());
    newProject.nftContract = _nftContract;
    newProject.name = _name;
    newProject.projectId = projectCount;
    newProject.numberOfLeaderboards = 0;

    projectCount = projectCount.add(1);

    bytes32 projectHashId = keccak256(
      abi.encodePacked(_nftContract, ":", newProject.projectId)
    );

    emit ProjectRegistered(
      projectHashId,
      newProject.projectId,
      msgSender(),
      _nftContract,
      _name,
      newProject.numberOfLeaderboards
    );

    return newProject.projectId;
  }

  function addOwnerToProject(uint256 _projectId, address _newOwner)
    public
    whenNotPaused
  {
    require(
      projectIdToProject[_projectId].addressToIsOwner[msgSender()] == true,
      "You are not an owner of this project."
    );
    projectIdToProject[_projectId].addressToIsOwner[_newOwner] = true;
    projectIdToProject[_projectId].owners.push(_newOwner);

    bytes32 projectHashId = keccak256(
      abi.encodePacked(
        projectIdToProject[_projectId].nftContract,
        ":",
        _projectId
      )
    );

    emit NewProjectOwnerAdded(projectHashId, _projectId, _newOwner);
  }

  function deleteProject(uint256 _projectId) external onlyOwner {
    delete projectIdToProject[_projectId];
  }

  function deleteLeaderboard(uint256 _projectId, uint256 _leaderboardId)
    external
    onlyOwner
  {
    delete leaderboardIndex[_projectId][_leaderboardId];
  }

  function userDeleteProject(uint256 _projectId) external {
    require(
      projectIdToProject[_projectId].addressToIsOwner[msgSender()] == true,
      "You are not an owner of this project."
    );
    delete projectIdToProject[_projectId];
  }

  function userDeleteLeaderboard(uint256 _projectId, uint256 _leaderboardId)
    external
    onlyOwner
  {
    require(
      projectIdToProject[_projectId].addressToIsOwner[msgSender()] == true,
      "You are not an owner of this project."
    );
    delete leaderboardIndex[_projectId][_leaderboardId];
  }

  function createLeaderboard(
    uint256 _projectId,
    string memory _leaderboardName,
    uint256 _time
  ) public whenNotPaused returns (uint256) {
    require(
      projectIdToProject[_projectId].addressToIsOwner[msgSender()] == true,
      "You are not an owner of this project."
    );
    require(
      projectIdToProject[_projectId].numberOfLeaderboards <
        maxLeaderboardsPerProject,
      "Have reached max amount of leaderboards allowed in this project."
    );

    LeaderboardSettings storage newLeaderboard = leaderboardIndex[_projectId][
      projectIdToProject[_projectId].numberOfLeaderboards
    ];
    newLeaderboard.name = _leaderboardName;
    newLeaderboard.projectId = _projectId;
    newLeaderboard.leaderBoardId = projectIdToProject[_projectId]
      .numberOfLeaderboards;
    newLeaderboard.epochCount = 1;
    newLeaderboard.epoch = _time;

    LeaderboardInstance storage leaderboardInstance = epochToLeaderboard[
      _projectId
    ][projectIdToProject[_projectId].numberOfLeaderboards][1];
    leaderboardInstance.blockStart = block.number;
    leaderboardInstance.blockEnd = block.number + _time;

    projectIdToProject[_projectId].numberOfLeaderboards = projectIdToProject[
      _projectId
    ].numberOfLeaderboards.add(1);

    bytes32 leaderboardHashId = keccak256(
      abi.encodePacked(
        newLeaderboard.projectId,
        ":",
        newLeaderboard.leaderBoardId
      )
    );

    emit LeaderboardCreated(
      leaderboardHashId,
      msgSender(),
      _leaderboardName,
      _projectId,
      newLeaderboard.leaderBoardId,
      newLeaderboard.epochCount,
      newLeaderboard.epoch
    );

    return newLeaderboard.leaderBoardId;
  }

  function castVote(
    uint256 _projectId,
    uint256 _leaderboardId,
    address _member,
    uint256 _nftTokenId
  ) public whenNotPaused {
    require(
      leaderboardIndex[_projectId][_leaderboardId].epoch != 0,
      "This leaderboard does not exist."
    );
    require(_member != msgSender(), "Cannot vote for self");

    address nftOwner = IERC721(projectIdToProject[_projectId].nftContract)
      .ownerOf(_nftTokenId);
    require(
      nftOwner == msgSender(),
      "You do not own the NFT based on the token ID provided."
    );

    LeaderboardInstance storage leaderboardInstance = epochToLeaderboard[
      _projectId
    ][_leaderboardId][leaderboardIndex[_projectId][_leaderboardId].epochCount];

    if (leaderboardInstance.blockEnd <= block.number) {
      leaderboardIndex[_projectId][_leaderboardId]
        .epochCount = leaderboardIndex[_projectId][_leaderboardId]
        .epochCount
        .add(1);
      leaderboardInstance = epochToLeaderboard[_projectId][_leaderboardId][
        leaderboardIndex[_projectId][_leaderboardId].epochCount
      ];
    }

    require(
      leaderboardInstance.voterToHasVoted[msgSender()] == false,
      "You have already voted on this leaderboard."
    );

    leaderboardInstance.voterToHasVoted[msgSender()] = true;
    leaderboardInstance.voters.push(msgSender());

    MemberRow storage member = leaderboardInstance.rows[_member];

    if (member.numberOfVotes == 0) {
      leaderboardInstance.members.push(_member);
    }

    member.addressToIndex[msgSender()] = member.voters.length;
    member.voters.push(msgSender());
    member.numberOfVotes = member.numberOfVotes.add(1);

    bytes32 voteHashId = keccak256(
      abi.encodePacked(
        _projectId,
        _leaderboardId,
        leaderboardIndex[_projectId][_leaderboardId].epochCount,
        msgSender()
      )
    );

    emit VoteCast(
      voteHashId,
      _projectId,
      _leaderboardId,
      _member,
      _nftTokenId,
      msgSender()
    );
  }

  function changeVote(
    uint256 _projectId,
    uint256 _leaderboardId,
    address _member,
    address _newMember
  ) public whenNotPaused {
    LeaderboardInstance storage leaderboardInstance = epochToLeaderboard[
      _projectId
    ][_leaderboardId][leaderboardIndex[_projectId][_leaderboardId].epochCount];

    if (leaderboardInstance.blockEnd <= block.number) {
      leaderboardIndex[_projectId][_leaderboardId]
        .epochCount = leaderboardIndex[_projectId][_leaderboardId]
        .epochCount
        .add(1);
      leaderboardInstance = epochToLeaderboard[_projectId][_leaderboardId][
        leaderboardIndex[_projectId][_leaderboardId].epochCount
      ];
    }

    require(
      leaderboardInstance.voterToHasVoted[msgSender()] == true,
      "You have not voted on this leaderboard."
    );
    require(_member != _newMember, "Cannot change vote to the same member.");

    MemberRow storage member = leaderboardInstance.rows[_member];
    delete member.voters[member.addressToIndex[msgSender()]];
    delete member.addressToIndex[msgSender()];
    member.numberOfVotes = member.numberOfVotes.sub(1);

    MemberRow storage newMember = leaderboardInstance.rows[_newMember];
    newMember.voters.push(msgSender());
    newMember.numberOfVotes = member.numberOfVotes.add(1);

    if (newMember.numberOfVotes == 0) {
      leaderboardInstance.members.push(_newMember);
    }

    bytes32 changeVoteHashId = keccak256(
      abi.encodePacked(
        _projectId,
        _leaderboardId,
        leaderboardIndex[_projectId][_leaderboardId].epochCount,
        msgSender()
      )
    );

    emit VoteChanged(
      changeVoteHashId,
      _projectId,
      _leaderboardId,
      _member,
      _newMember
    );
  }
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"leaderboardHashId","type":"bytes32"},{"indexed":true,"internalType":"address","name":"creator","type":"address"},{"indexed":false,"internalType":"string","name":"leaderboardName","type":"string"},{"indexed":false,"internalType":"uint256","name":"projectId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"leaderBoardId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"epochCount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"epoch","type":"uint256"}],"name":"LeaderboardCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"userAddress","type":"address"},{"indexed":false,"internalType":"address payable","name":"relayerAddress","type":"address"},{"indexed":false,"internalType":"bytes","name":"functionSignature","type":"bytes"}],"name":"MetaTransactionExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"projectHashId","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"_projectId","type":"uint256"},{"indexed":true,"internalType":"address","name":"_newOwner","type":"address"}],"name":"NewProjectOwnerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"projectHashId","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"projectId","type":"uint256"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"nftContract","type":"address"},{"indexed":false,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"uint256","name":"numberOfLeaderboards","type":"uint256"}],"name":"ProjectRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"voteHashId","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"projectId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"leaderboardId","type":"uint256"},{"indexed":true,"internalType":"address","name":"member","type":"address"},{"indexed":false,"internalType":"uint256","name":"nftTokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"voter","type":"address"}],"name":"VoteCast","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"changeVoteHashId","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"projectId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"leaderboardId","type":"uint256"},{"indexed":true,"internalType":"address","name":"member","type":"address"},{"indexed":true,"internalType":"address","name":"newMember","type":"address"}],"name":"VoteChanged","type":"event"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"},{"internalType":"address","name":"_newOwner","type":"address"}],"name":"addOwnerToProject","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"},{"internalType":"uint256","name":"_leaderboardId","type":"uint256"},{"internalType":"address","name":"_member","type":"address"},{"internalType":"uint256","name":"_nftTokenId","type":"uint256"}],"name":"castVote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"},{"internalType":"uint256","name":"_leaderboardId","type":"uint256"},{"internalType":"address","name":"_member","type":"address"},{"internalType":"address","name":"_newMember","type":"address"}],"name":"changeVote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"},{"internalType":"string","name":"_leaderboardName","type":"string"},{"internalType":"uint256","name":"_time","type":"uint256"}],"name":"createLeaderboard","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"},{"internalType":"uint256","name":"_leaderboardId","type":"uint256"}],"name":"deleteLeaderboard","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"}],"name":"deleteProject","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"epochToLeaderboard","outputs":[{"internalType":"uint256","name":"leaderBoardId","type":"uint256"},{"internalType":"uint256","name":"blockStart","type":"uint256"},{"internalType":"uint256","name":"blockEnd","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"bytes","name":"functionSignature","type":"bytes"},{"internalType":"bytes32","name":"sigR","type":"bytes32"},{"internalType":"bytes32","name":"sigS","type":"bytes32"},{"internalType":"uint8","name":"sigV","type":"uint8"}],"name":"executeMetaTransaction","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getChainID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"},{"internalType":"uint256","name":"_leaderboardId","type":"uint256"}],"name":"getLeaderboard","outputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"},{"internalType":"uint256","name":"_leaderboardId","type":"uint256"},{"internalType":"address","name":"_member","type":"address"},{"internalType":"uint256","name":"_leaderboardArchiveId","type":"uint256"}],"name":"getLeaderboardArchivedMemberVoteCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"},{"internalType":"uint256","name":"_leaderboardId","type":"uint256"},{"internalType":"uint256","name":"_memberId","type":"uint256"}],"name":"getLeaderboardMemberAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"},{"internalType":"uint256","name":"_leaderboardId","type":"uint256"}],"name":"getLeaderboardMemberLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"},{"internalType":"uint256","name":"_leaderboardId","type":"uint256"},{"internalType":"uint256","name":"_memberId","type":"uint256"}],"name":"getLeaderboardMemberVoteCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"},{"internalType":"uint256","name":"_leaderboardId","type":"uint256"},{"internalType":"address","name":"_member","type":"address"}],"name":"getLeaderboardMemberVoteCountByAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"},{"internalType":"uint256","name":"_leaderboardId","type":"uint256"}],"name":"getLeaderboardName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getNonce","outputs":[{"internalType":"uint256","name":"nonce","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"}],"name":"getProjectName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"}],"name":"getProjectepochCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"leaderboardIndex","outputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"projectId","type":"uint256"},{"internalType":"uint256","name":"leaderBoardId","type":"uint256"},{"internalType":"uint256","name":"epochCount","type":"uint256"},{"internalType":"uint256","name":"epoch","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxLeaderboardsPerProject","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"projectCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"projectIdToProject","outputs":[{"internalType":"address","name":"nftContract","type":"address"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"projectId","type":"uint256"},{"internalType":"uint256","name":"numberOfLeaderboards","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"projectIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_nftContract","type":"address"},{"internalType":"string","name":"_name","type":"string"}],"name":"registerProject","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"},{"internalType":"uint256","name":"_leaderboardId","type":"uint256"}],"name":"userDeleteLeaderboard","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"}],"name":"userDeleteProject","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"chainID","type":"uint256"},{"internalType":"bytes","name":"functionSignature","type":"bytes"},{"internalType":"bytes32","name":"sigR","type":"bytes32"},{"internalType":"bytes32","name":"sigS","type":"bytes32"},{"internalType":"uint8","name":"sigV","type":"uint8"}],"name":"verify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

6080604052603260025560006003553480156200001b57600080fd5b506200003c620000306200005c60201b60201c565b6200006460201b60201c565b60008060146101000a81548160ff02191690831515021790555062000128565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b614b4f80620001386000396000f3fe6080604052600436106101e35760003560e01c8063715018a611610102578063944fcd5111610095578063dcbb935511610064578063dcbb935514610784578063e0889e96146107c1578063f1fa906c14610802578063f2fde38b1461083f576101e3565b8063944fcd5114610690578063b8a93092146106cd578063be00dc5d1461070a578063c7801d7e14610747576101e3565b80638a09d21e116100d15780638a09d21e146105d65780638da5cb5b14610613578063907f76de1461063e57806394298afc14610667576101e3565b8063715018a61461051857806373af16fc1461052f5780637551a3c91461057057806381004786146105ad576101e3565b806348c35ad41161017a5780635c975abb116101495780635c975abb1461045c5780635da9871d1461048757806360ef7437146104b05780636281133d146104db576101e3565b806348c35ad41461038b5780634cd0cb28146103c857806351b16c77146103f1578063564b81ef14610431576101e3565b80632d0335ab116101b65780632d0335ab146102bd57806336fbad26146102fa5780633b582e3b146103255780633dcda6e014610362576101e3565b80630b569932146101e85780630c53c51c146102255780630df81c2f1461025557806326e3013a1461027e575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a9190613840565b610868565b60405161021c9190614716565b60405180910390f35b61023f600480360381019061023a91906135db565b6108d5565b60405161024c9190614498565b60405180910390f35b34801561026157600080fd5b5061027c60048036038101906102779190613840565b610b19565b005b34801561028a57600080fd5b506102a560048036038101906102a09190613991565b610bf0565b6040516102b493929190614731565b60405180910390f35b3480156102c957600080fd5b506102e460048036038101906102df9190613589565b610c34565b6040516102f19190614716565b60405180910390f35b34801561030657600080fd5b5061030f610c7d565b60405161031c9190614716565b60405180910390f35b34801561033157600080fd5b5061034c6004803603810190610347919061387c565b610c83565b6040516103599190614716565b60405180910390f35b34801561036e57600080fd5b50610389600480360381019061038491906138cb565b610d2e565b005b34801561039757600080fd5b506103b260048036038101906103ad9190613774565b611329565b6040516103bf9190614716565b60405180910390f35b3480156103d457600080fd5b506103ef60048036038101906103ea9190613774565b61134d565b005b3480156103fd57600080fd5b5061041860048036038101906104139190613774565b61143a565b6040516104289493929190614293565b60405180910390f35b34801561043d57600080fd5b50610446611512565b6040516104539190614716565b60405180910390f35b34801561046857600080fd5b5061047161151f565b60405161047e91906142df565b60405180910390f35b34801561049357600080fd5b506104ae60048036038101906104a9919061379d565b611535565b005b3480156104bc57600080fd5b506104c56117c6565b6040516104d29190614716565b60405180910390f35b3480156104e757600080fd5b5061050260048036038101906104fd91906136be565b6117cc565b60405161050f91906142df565b60405180910390f35b34801561052457600080fd5b5061052d611907565b005b34801561053b57600080fd5b5061055660048036038101906105519190613840565b61198f565b6040516105679594939291906144dc565b60405180910390f35b34801561057c57600080fd5b5061059760048036038101906105929190613774565b611a78565b6040516105a49190614716565b60405180910390f35b3480156105b957600080fd5b506105d460048036038101906105cf919061392e565b611a98565b005b3480156105e257600080fd5b506105fd60048036038101906105f89190613991565b612207565b60405161060a919061423a565b60405180910390f35b34801561061f57600080fd5b506106286122d4565b604051610635919061423a565b60405180910390f35b34801561064a57600080fd5b5061066560048036038101906106609190613774565b6122fd565b005b34801561067357600080fd5b5061068e60048036038101906106899190613840565b61241c565b005b34801561069c57600080fd5b506106b760048036038101906106b2919061392e565b6125a1565b6040516106c49190614716565b60405180910390f35b3480156106d957600080fd5b506106f460048036038101906106ef9190613991565b612626565b6040516107019190614716565b60405180910390f35b34801561071657600080fd5b50610731600480360381019061072c9190613840565b612792565b60405161073e91906144ba565b60405180910390f35b34801561075357600080fd5b5061076e600480360381019061076991906137d9565b61284c565b60405161077b9190614716565b60405180910390f35b34801561079057600080fd5b506107ab60048036038101906107a6919061366a565b612b92565b6040516107b89190614716565b60405180910390f35b3480156107cd57600080fd5b506107e860048036038101906107e39190613840565b612f03565b6040516107f99594939291906144dc565b60405180910390f35b34801561080e57600080fd5b5061082960048036038101906108249190613774565b612fce565b60405161083691906144ba565b60405180910390f35b34801561084b57600080fd5b5061086660048036038101906108619190613589565b613076565b005b6000600760008481526020019081526020016000206000838152602001908152602001600020600060066000868152602001908152602001600020600085815260200190815260200160002060030154815260200190815260200160002060030180549050905092915050565b606061092c86600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610923611512565b888888886117cc565b61096b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610962906146b6565b60405180910390fd5b6109bd60018060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461316e90919063ffffffff16565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000803073ffffffffffffffffffffffffffffffffffffffff168789604051602001610a2d92919061411d565b604051602081830303815290604052604051610a499190614106565b6000604051808303816000865af19150503d8060008114610a86576040519150601f19603f3d011682016040523d82523d6000602084013e610a8b565b606091505b509150915081610ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac7906145d6565b60405180910390fd5b7f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b883389604051610b0393929190614255565b60405180910390a1809250505095945050505050565b610b21613184565b73ffffffffffffffffffffffffffffffffffffffff16610b3f6122d4565b73ffffffffffffffffffffffffffffffffffffffff1614610b95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8c90614696565b60405180910390fd5b60066000838152602001908152602001600020600082815260200190815260200160002060008082016000610bca919061334c565b600182016000905560028201600090556003820160009055600482016000905550505050565b600760205282600052604060002060205281600052604060002060205280600052604060002060009250925050508060000154908060010154908060020154905083565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60035481565b6000600760008581526020019081526020016000206000848152602001908152602001600020600060066000878152602001908152602001600020600086815260200190815260200160002060030154815260200190815260200160002060050160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015490509392505050565b610d3661151f565b15610d76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6d90614656565b60405180910390fd5b60006007600086815260200190815260200160002060008581526020019081526020016000206000600660008881526020019081526020016000206000878152602001908152602001600020600301548152602001908152602001600020905043816002015411610ea657610e1c60016006600088815260200190815260200160002060008781526020019081526020016000206003015461316e90919063ffffffff16565b60066000878152602001908152602001600020600086815260200190815260200160002060030181905550600760008681526020019081526020016000206000858152602001908152602001600020600060066000888152602001908152602001600020600087815260200190815260200160002060030154815260200190815260200160002090505b60011515816006016000610eb861318c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610f42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3990614616565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610fb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa890614636565b60405180910390fd5b60008160050160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060010181600201600061100861318c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548154811061107a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690558060020160006110b561318c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000905561110b6001826000015461324290919063ffffffff16565b816000018190555060008260050160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060010161116461318c565b9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506111dc6001836000015461316e90919063ffffffff16565b81600001819055506000816000015414156112575782600301849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b60008787600660008b815260200190815260200160002060008a81526020019081526020016000206003015461128b61318c565b60405160200161129e94939291906141ec565b6040516020818303038152906040528051906020012090508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f4aac60417531b62fa83b9985c0e2323e8b4c39c0e4874a495b9e9ddc4a734a0c838b8b604051611317939291906143d7565b60405180910390a35050505050505050565b6004818154811061133957600080fd5b906000526020600020016000915090505481565b611355613184565b73ffffffffffffffffffffffffffffffffffffffff166113736122d4565b73ffffffffffffffffffffffffffffffffffffffff16146113c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c090614696565b60405180910390fd5b6005600082815260200190815260200160002060006001820160006113ee919061338c565b6002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600382016000611425919061334c565b60048201600090556005820160009055505050565b60056020528060005260406000206000915090508060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806003018054611483906149a8565b80601f01602080910402602001604051908101604052809291908181526020018280546114af906149a8565b80156114fc5780601f106114d1576101008083540402835291602001916114fc565b820191906000526020600020905b8154815290600101906020018083116114df57829003601f168201915b5050505050908060040154908060050154905084565b6000804690508091505090565b60008060149054906101000a900460ff16905090565b61153d61151f565b1561157d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157490614656565b60405180910390fd5b600115156005600084815260200190815260200160002060000160006115a161318c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151461162b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162290614536565b60405180910390fd5b60016005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060056000838152602001908152602001600020600101819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060006005600084815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040516020016117599291906140cf565b6040516020818303038152906040528051906020012090508173ffffffffffffffffffffffffffffffffffffffff167f2c72e23ef5f651a5fd7703ee5c4ffcc8f257010d32960dc220db3edae78665ac82856040516117b9929190614362565b60405180910390a2505050565b60025481565b600080611804883089896040516020016117e9949392919061416b565b60405160208183030381529060405280519060200120613258565b905060006001828588886040516000815260200160405260405161182b9493929190614453565b6020604051602081039080840390855afa15801561184d573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c0906145f6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff161492505050979650505050505050565b61190f613184565b73ffffffffffffffffffffffffffffffffffffffff1661192d6122d4565b73ffffffffffffffffffffffffffffffffffffffff1614611983576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197a90614696565b60405180910390fd5b61198d6000613288565b565b6060600080600080600060066000898152602001908152602001600020600088815260200190815260200160002090508060000181600101548260020154836003015484600401548480546119e3906149a8565b80601f0160208091040260200160405190810160405280929190818152602001828054611a0f906149a8565b8015611a5c5780601f10611a3157610100808354040283529160200191611a5c565b820191906000526020600020905b815481529060010190602001808311611a3f57829003601f168201915b5050505050945095509550955095509550509295509295909350565b600060056000838152602001908152602001600020600501549050919050565b611aa061151f565b15611ae0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad790614656565b60405180910390fd5b6000600660008681526020019081526020016000206000858152602001908152602001600020600401541415611b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b42906146d6565b60405180910390fd5b611b5361318c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb8906145b6565b60405180910390fd5b60006005600086815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401611c329190614716565b602060405180830381600087803b158015611c4c57600080fd5b505af1158015611c60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8491906135b2565b9050611c8e61318c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611cfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf290614556565b60405180910390fd5b60006007600087815260200190815260200160002060008681526020019081526020016000206000600660008981526020019081526020016000206000888152602001908152602001600020600301548152602001908152602001600020905043816002015411611e2b57611da160016006600089815260200190815260200160002060008881526020019081526020016000206003015461316e90919063ffffffff16565b60066000888152602001908152602001600020600087815260200190815260200160002060030181905550600760008781526020019081526020016000206000868152602001908152602001600020600060066000898152602001908152602001600020600088815260200190815260200160002060030154815260200190815260200160002090505b60001515816006016000611e3d61318c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611ec7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebe90614596565b60405180910390fd5b6001816006016000611ed761318c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600401611f3461318c565b9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008160050160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160000154141561204c5781600301859080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b806001018054905081600201600061206261318c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806001016120ac61318c565b9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506121246001826000015461316e90919063ffffffff16565b816000018190555060008787600660008b815260200190815260200160002060008a81526020019081526020016000206003015461216061318c565b60405160200161217394939291906141ec565b60405160208183030381529060405280519060200120905061219361318c565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f5f95096d3c703dbcdf2d38e38627941df60cd95c0c5521149c480ba4c2181b5b838b8b8a6040516121f5949392919061440e565b60405180910390a35050505050505050565b6000600760008581526020019081526020016000206000848152602001908152602001600020600060066000878152602001908152602001600020600086815260200190815260200160002060030154815260200190815260200160002060030182815481106122a0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6001151560056000838152602001908152602001600020600001600061232161318c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146123ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a290614536565b60405180910390fd5b6005600082815260200190815260200160002060006001820160006123d0919061338c565b6002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600382016000612407919061334c565b60048201600090556005820160009055505050565b612424613184565b73ffffffffffffffffffffffffffffffffffffffff166124426122d4565b73ffffffffffffffffffffffffffffffffffffffff1614612498576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248f90614696565b60405180910390fd5b600115156005600084815260200190815260200160002060000160006124bc61318c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514612546576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253d90614536565b60405180910390fd5b6006600083815260200190815260200160002060008281526020019081526020016000206000808201600061257b919061334c565b600182016000905560028201600090556003820160009055600482016000905550505050565b6000600760008681526020019081526020016000206000858152602001908152602001600020600083815260200190815260200160002060050160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050949350505050565b60006007600085815260200190815260200160002060008481526020019081526020016000206000600660008781526020019081526020016000206000868152602001908152602001600020600301548152602001908152602001600020600501600060076000878152602001908152602001600020600086815260200190815260200160002060006006600089815260200190815260200160002060008881526020019081526020016000206003015481526020019081526020016000206003018481548110612720577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015490509392505050565b606060066000848152602001908152602001600020600083815260200190815260200160002060000180546127c6906149a8565b80601f01602080910402602001604051908101604052809291908181526020018280546127f2906149a8565b801561283f5780601f106128145761010080835404028352916020019161283f565b820191906000526020600020905b81548152906001019060200180831161282257829003601f168201915b5050505050905092915050565b600061285661151f565b15612896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288d90614656565b60405180910390fd5b600115156005600086815260200190815260200160002060000160006128ba61318c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514612944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293b90614536565b60405180910390fd5b60025460056000868152602001908152602001600020600501541061299e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612995906146f6565b60405180910390fd5b6000600660008681526020019081526020016000206000600560008881526020019081526020016000206005015481526020019081526020016000209050838160000190805190602001906129f49291906133ad565b50848160010181905550600560008681526020019081526020016000206005015481600201819055506001816003018190555082816004018190555060006007600087815260200190815260200160002060006005600089815260200190815260200160002060050154815260200190815260200160002060006001815260200190815260200160002090504381600101819055508343612a959190614847565b8160020181905550612ac76001600560008981526020019081526020016000206005015461316e90919063ffffffff16565b6005600088815260200190815260200160002060050181905550600082600101548360020154604051602001612afe9291906141b5565b604051602081830303815290604052805190602001209050612b1e61318c565b73ffffffffffffffffffffffffffffffffffffffff167fb69776c36777944777e97c8752ebaf62fbb2742d5ec5007ae525052901ee79b182888a876002015488600301548960040154604051612b79969594939291906142fa565b60405180910390a2826002015493505050509392505050565b6000612b9c61151f565b15612bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd390614656565b60405180910390fd5b60008373ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015612c2657600080fd5b505af1158015612c3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c5e91906135b2565b9050612c6861318c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612cd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ccc90614676565b60405180910390fd5b600060056000600354815260200190815260200160002090506001816000016000612cfe61318c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600101612d5b61318c565b9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550848160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083816003019080519060200190612e169291906133ad565b50600354816004018190555060008160050181905550612e42600160035461316e90919063ffffffff16565b6003819055506000858260040154604051602001612e619291906140cf565b6040516020818303038152906040528051906020012090508573ffffffffffffffffffffffffffffffffffffffff16612e9861318c565b73ffffffffffffffffffffffffffffffffffffffff167f8447cf2766f5b79c357bb8238ccdfe0504e3fa08612d48577245dfec28cc1223838560040154898760050154604051612eeb949392919061438b565b60405180910390a38160040154935050505092915050565b600660205281600052604060002060205280600052604060002060009150915050806000018054612f33906149a8565b80601f0160208091040260200160405190810160405280929190818152602001828054612f5f906149a8565b8015612fac5780601f10612f8157610100808354040283529160200191612fac565b820191906000526020600020905b815481529060010190602001808311612f8f57829003601f168201915b5050505050908060010154908060020154908060030154908060040154905085565b6060600560008381526020019081526020016000206003018054612ff1906149a8565b80601f016020809104026020016040519081016040528092919081815260200182805461301d906149a8565b801561306a5780601f1061303f5761010080835404028352916020019161306a565b820191906000526020600020905b81548152906001019060200180831161304d57829003601f168201915b50505050509050919050565b61307e613184565b73ffffffffffffffffffffffffffffffffffffffff1661309c6122d4565b73ffffffffffffffffffffffffffffffffffffffff16146130f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130e990614696565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613162576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161315990614576565b60405180910390fd5b61316b81613288565b50565b6000818361317c9190614847565b905092915050565b600033905090565b60003073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561323657600080368080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050600080369050905073ffffffffffffffffffffffffffffffffffffffff81830151169250505061323e565b33905061323f565b5b90565b60008183613250919061489d565b905092915050565b60008160405160200161326b9190614145565b604051602081830303815290604052805190602001209050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b508054613358906149a8565b6000825580601f1061336a5750613389565b601f0160209004906000526020600020908101906133889190613433565b5b50565b50805460008255906000526020600020908101906133aa9190613433565b50565b8280546133b9906149a8565b90600052602060002090601f0160209004810192826133db5760008555613422565b82601f106133f457805160ff1916838001178555613422565b82800160010185558215613422579182015b82811115613421578251825591602001919060010190613406565b5b50905061342f9190613433565b5090565b5b8082111561344c576000816000905550600101613434565b5090565b600061346361345e84614799565b614768565b90508281526020810184848401111561347b57600080fd5b613486848285614966565b509392505050565b60006134a161349c846147c9565b614768565b9050828152602081018484840111156134b957600080fd5b6134c4848285614966565b509392505050565b6000813590506134db81614abd565b92915050565b6000815190506134f081614abd565b92915050565b60008135905061350581614ad4565b92915050565b600082601f83011261351c57600080fd5b813561352c848260208601613450565b91505092915050565b600082601f83011261354657600080fd5b813561355684826020860161348e565b91505092915050565b60008135905061356e81614aeb565b92915050565b60008135905061358381614b02565b92915050565b60006020828403121561359b57600080fd5b60006135a9848285016134cc565b91505092915050565b6000602082840312156135c457600080fd5b60006135d2848285016134e1565b91505092915050565b600080600080600060a086880312156135f357600080fd5b6000613601888289016134cc565b955050602086013567ffffffffffffffff81111561361e57600080fd5b61362a8882890161350b565b945050604061363b888289016134f6565b935050606061364c888289016134f6565b925050608061365d88828901613574565b9150509295509295909350565b6000806040838503121561367d57600080fd5b600061368b858286016134cc565b925050602083013567ffffffffffffffff8111156136a857600080fd5b6136b485828601613535565b9150509250929050565b600080600080600080600060e0888a0312156136d957600080fd5b60006136e78a828b016134cc565b97505060206136f88a828b0161355f565b96505060406137098a828b0161355f565b955050606088013567ffffffffffffffff81111561372657600080fd5b6137328a828b0161350b565b94505060806137438a828b016134f6565b93505060a06137548a828b016134f6565b92505060c06137658a828b01613574565b91505092959891949750929550565b60006020828403121561378657600080fd5b60006137948482850161355f565b91505092915050565b600080604083850312156137b057600080fd5b60006137be8582860161355f565b92505060206137cf858286016134cc565b9150509250929050565b6000806000606084860312156137ee57600080fd5b60006137fc8682870161355f565b935050602084013567ffffffffffffffff81111561381957600080fd5b61382586828701613535565b92505060406138368682870161355f565b9150509250925092565b6000806040838503121561385357600080fd5b60006138618582860161355f565b92505060206138728582860161355f565b9150509250929050565b60008060006060848603121561389157600080fd5b600061389f8682870161355f565b93505060206138b08682870161355f565b92505060406138c1868287016134cc565b9150509250925092565b600080600080608085870312156138e157600080fd5b60006138ef8782880161355f565b94505060206139008782880161355f565b9350506040613911878288016134cc565b9250506060613922878288016134cc565b91505092959194509250565b6000806000806080858703121561394457600080fd5b60006139528782880161355f565b94505060206139638782880161355f565b9350506040613974878288016134cc565b92505060606139858782880161355f565b91505092959194509250565b6000806000606084860312156139a657600080fd5b60006139b48682870161355f565b93505060206139c58682870161355f565b92505060406139d68682870161355f565b9150509250925092565b6139e9816148e3565b82525050565b6139f8816148d1565b82525050565b613a0f613a0a826148d1565b6149da565b82525050565b613a1e816148f5565b82525050565b613a2d81614901565b82525050565b613a44613a3f82614901565b6149ec565b82525050565b6000613a55826147f9565b613a5f818561480f565b9350613a6f818560208601614975565b613a7881614a9f565b840191505092915050565b6000613a8e826147f9565b613a988185614820565b9350613aa8818560208601614975565b80840191505092915050565b613ac5613ac082614942565b6149da565b82525050565b6000613ad682614804565b613ae0818561482b565b9350613af0818560208601614975565b613af981614a9f565b840191505092915050565b6000613b1160258361482b565b91507f596f7520617265206e6f7420616e206f776e6572206f6620746869732070726f60008301527f6a6563742e0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b77601c8361483c565b91507f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000830152601c82019050919050565b6000613bb760368361482b565b91507f596f7520646f206e6f74206f776e20746865204e4654206261736564206f6e2060008301527f74686520746f6b656e2049442070726f76696465642e000000000000000000006020830152604082019050919050565b6000613c1d60268361482b565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613c83602b8361482b565b91507f596f75206861766520616c726561647920766f746564206f6e2074686973206c60008301527f6561646572626f6172642e0000000000000000000000000000000000000000006020830152604082019050919050565b6000613ce960148361482b565b91507f43616e6e6f7420766f746520666f722073656c660000000000000000000000006000830152602082019050919050565b6000613d29601d8361482b565b91507f46756e6374696f6e2063616c6c206e6f74207375636365737366756c6c0000006000830152602082019050919050565b6000613d6960118361482b565b91507f496e76616c6964207369676e61747572650000000000000000000000000000006000830152602082019050919050565b6000613da960278361482b565b91507f596f752068617665206e6f7420766f746564206f6e2074686973206c6561646560008301527f72626f6172642e000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613e0f60268361482b565b91507f43616e6e6f74206368616e676520766f746520746f207468652073616d65206d60008301527f656d6265722e00000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613e7560108361482b565b91507f5061757361626c653a20706175736564000000000000000000000000000000006000830152602082019050919050565b6000613eb560218361482b565b91507f596f7520646f206e6f74206f776e2074686973204e465420636f6e747261637460008301527f2e000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613f1b60018361483c565b91507f3a000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000613f5b60208361482b565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613f9b60218361482b565b91507f5369676e657220616e64207369676e617475726520646f206e6f74206d61746360008301527f68000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061400160208361482b565b91507f54686973206c6561646572626f61726420646f6573206e6f742065786973742e6000830152602082019050919050565b600061404160408361482b565b91507f486176652072656163686564206d617820616d6f756e74206f66206c6561646560008301527f72626f6172647320616c6c6f77656420696e20746869732070726f6a6563742e6020830152604082019050919050565b6140a38161492b565b82525050565b6140ba6140b58261492b565b614a08565b82525050565b6140c981614935565b82525050565b60006140db82856139fe565b6014820191506140ea82613f0e565b91506140f682846140a9565b6020820191508190509392505050565b60006141128284613a83565b915081905092915050565b60006141298285613a83565b915061413582846139fe565b6014820191508190509392505050565b600061415082613b6a565b915061415c8284613a33565b60208201915081905092915050565b600061417782876140a9565b6020820191506141878286613ab4565b60148201915061419782856140a9565b6020820191506141a78284613a83565b915081905095945050505050565b60006141c182856140a9565b6020820191506141d082613f0e565b91506141dc82846140a9565b6020820191508190509392505050565b60006141f882876140a9565b60208201915061420882866140a9565b60208201915061421882856140a9565b60208201915061422882846139fe565b60148201915081905095945050505050565b600060208201905061424f60008301846139ef565b92915050565b600060608201905061426a60008301866139ef565b61427760208301856139e0565b81810360408301526142898184613a4a565b9050949350505050565b60006080820190506142a860008301876139ef565b81810360208301526142ba8186613acb565b90506142c9604083018561409a565b6142d6606083018461409a565b95945050505050565b60006020820190506142f46000830184613a15565b92915050565b600060c08201905061430f6000830189613a24565b81810360208301526143218188613acb565b9050614330604083018761409a565b61433d606083018661409a565b61434a608083018561409a565b61435760a083018461409a565b979650505050505050565b60006040820190506143776000830185613a24565b614384602083018461409a565b9392505050565b60006080820190506143a06000830187613a24565b6143ad602083018661409a565b81810360408301526143bf8185613acb565b90506143ce606083018461409a565b95945050505050565b60006060820190506143ec6000830186613a24565b6143f9602083018561409a565b614406604083018461409a565b949350505050565b60006080820190506144236000830187613a24565b614430602083018661409a565b61443d604083018561409a565b61444a606083018461409a565b95945050505050565b60006080820190506144686000830187613a24565b61447560208301866140c0565b6144826040830185613a24565b61448f6060830184613a24565b95945050505050565b600060208201905081810360008301526144b28184613a4a565b905092915050565b600060208201905081810360008301526144d48184613acb565b905092915050565b600060a08201905081810360008301526144f68188613acb565b9050614505602083018761409a565b614512604083018661409a565b61451f606083018561409a565b61452c608083018461409a565b9695505050505050565b6000602082019050818103600083015261454f81613b04565b9050919050565b6000602082019050818103600083015261456f81613baa565b9050919050565b6000602082019050818103600083015261458f81613c10565b9050919050565b600060208201905081810360008301526145af81613c76565b9050919050565b600060208201905081810360008301526145cf81613cdc565b9050919050565b600060208201905081810360008301526145ef81613d1c565b9050919050565b6000602082019050818103600083015261460f81613d5c565b9050919050565b6000602082019050818103600083015261462f81613d9c565b9050919050565b6000602082019050818103600083015261464f81613e02565b9050919050565b6000602082019050818103600083015261466f81613e68565b9050919050565b6000602082019050818103600083015261468f81613ea8565b9050919050565b600060208201905081810360008301526146af81613f4e565b9050919050565b600060208201905081810360008301526146cf81613f8e565b9050919050565b600060208201905081810360008301526146ef81613ff4565b9050919050565b6000602082019050818103600083015261470f81614034565b9050919050565b600060208201905061472b600083018461409a565b92915050565b6000606082019050614746600083018661409a565b614753602083018561409a565b614760604083018461409a565b949350505050565b6000604051905081810181811067ffffffffffffffff8211171561478f5761478e614a70565b5b8060405250919050565b600067ffffffffffffffff8211156147b4576147b3614a70565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156147e4576147e3614a70565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006148528261492b565b915061485d8361492b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561489257614891614a12565b5b828201905092915050565b60006148a88261492b565b91506148b38361492b565b9250828210156148c6576148c5614a12565b5b828203905092915050565b60006148dc8261490b565b9050919050565b60006148ee8261490b565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061494d82614954565b9050919050565b600061495f8261490b565b9050919050565b82818337600083830152505050565b60005b83811015614993578082015181840152602081019050614978565b838111156149a2576000848401525b50505050565b600060028204905060018216806149c057607f821691505b602082108114156149d4576149d3614a41565b5b50919050565b60006149e5826149f6565b9050919050565b6000819050919050565b6000614a0182614ab0565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b614ac6816148d1565b8114614ad157600080fd5b50565b614add81614901565b8114614ae857600080fd5b50565b614af48161492b565b8114614aff57600080fd5b50565b614b0b81614935565b8114614b1657600080fd5b5056fea2646970667358221220ea2a8a44746b6cbd9f604f886cd7c533a4742e10183950e2254d1f3d7458353464736f6c63430008000033

Deployed ByteCode Sourcemap

16315:13306:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19652:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13877:895;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23239:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18454:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;14778:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18235:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20792:337;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27827:1791;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18271:27;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23121:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18303:53;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;13127:137;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4562:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22488:627;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16426:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15115:467;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2617:103;;;;;;;;;;;;;:::i;:::-;;18571:482;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;19272:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25755:2066;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19948:319;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1966:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23412:252;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23670:317;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21135:340;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20273:513;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19449:197;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23993:1756;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21481:1001;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18361:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;19059:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2875:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19652:290;19770:7;19800:18;:30;19819:10;19800:30;;;;;;;;;;;:46;19831:14;19800:46;;;;;;;;;;;:121;19857:16;:28;19874:10;19857:28;;;;;;;;;;;:44;19886:14;19857:44;;;;;;;;;;;:55;;;19800:121;;;;;;;;;;;:129;;:136;;;;19786:150;;19652:290;;;;:::o;13877:895::-;14056:12;14093:163;14110:11;14132:6;:19;14139:11;14132:19;;;;;;;;;;;;;;;;14162:12;:10;:12::i;:::-;14185:17;14213:4;14228;14243;14093:6;:163::i;:::-;14077:230;;;;;;;;;;;;:::i;:::-;;;;;;;;;14336:26;14360:1;14336:6;:19;14343:11;14336:19;;;;;;;;;;;;;;;;:23;;:26;;;;:::i;:::-;14314:6;:19;14321:11;14314:19;;;;;;;;;;;;;;;:48;;;;14445:12;14459:23;14494:4;14486:18;;14530:17;14549:11;14513:48;;;;;;;;;:::i;:::-;;;;;;;;;;;;;14486:82;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14444:124;;;;14585:7;14577:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;14638:104;14670:11;14698:10;14718:17;14638:104;;;;;;;;:::i;:::-;;;;;;;;14756:10;14749:17;;;;13877:895;;;;;;;:::o;23239:167::-;2197:12;:10;:12::i;:::-;2186:23;;:7;:5;:7::i;:::-;:23;;;2178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23356:16:::1;:28;23373:10;23356:28;;;;;;;;;;;:44;23385:14;23356:44;;;;;;;;;;;;23349:51:::0;::::1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;23239:167:::0;;:::o;18454:110::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14778:101::-;14831:13;14861:6;:12;14868:4;14861:12;;;;;;;;;;;;;;;;14853:20;;14778:101;;;:::o;18235:31::-;;;;:::o;20792:337::-;20944:7;20974:18;:30;20993:10;20974:30;;;;;;;;;;;:46;21005:14;20974:46;;;;;;;;;;;:121;21031:16;:28;21048:10;21031:28;;;;;;;;;;;:44;21060:14;21031:44;;;;;;;;;;;:55;;;20974:121;;;;;;;;;;;:126;;:135;21101:7;20974:135;;;;;;;;;;;;;;;:149;;;20960:163;;20792:337;;;;;:::o;27827:1791::-;4888:8;:6;:8::i;:::-;4887:9;4879:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;27981:47:::1;28031:18;:44;28058:10;28031:44;;;;;;;;;;;:60;28076:14;28031:60;;;;;;;;;;;:117;28092:16;:28;28109:10;28092:28;;;;;;;;;;;:44;28121:14;28092:44;;;;;;;;;;;:55;;;28031:117;;;;;;;;;;;27981:167;;28193:12;28161:19;:28;;;:44;28157:369;;28284:82;28364:1;28284:16;:28;28301:10;28284:28;;;;;;;;;;;:44;28313:14;28284:44;;;;;;;;;;;:65;;;:79;;:82;;;;:::i;:::-;28216:16;:28;28233:10;28216:28;;;;;;;;;;;:44;28245:14;28216:44;;;;;;;;;;;:65;;:150;;;;28397:18;:30;28416:10;28397:30;;;;;;;;;;;:46;28428:14;28397:46;;;;;;;;;;;:121;28454:16;:28;28471:10;28454:28;;;;;;;;;;;:44;28483:14;28454:44;;;;;;;;;;;:55;;;28397:121;;;;;;;;;;;28375:143;;28157:369;28602:4;28550:56;;:19;:35;;:48;28586:11;:9;:11::i;:::-;28550:48;;;;;;;;;;;;;;;;;;;;;;;;;:56;;;28534:129;;;;;;;;;;;;:::i;:::-;;;;;;;;;28689:10;28678:21;;:7;:21;;;;28670:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;28751:24;28778:19;:24;;:33;28803:7;28778:33;;;;;;;;;;;;;;;28751:60;;28825:6;:13;;28839:6;:21;;:34;28861:11;:9;:11::i;:::-;28839:34;;;;;;;;;;;;;;;;28825:49;;;;;;;;;;;;;;;;;;;;;;;;28818:56;;;;;;;;;;;28888:6;:21;;:34;28910:11;:9;:11::i;:::-;28888:34;;;;;;;;;;;;;;;28881:41;;;28952:27;28977:1;28952:6;:20;;;:24;;:27;;;;:::i;:::-;28929:6;:20;;:50;;;;28988:27;29018:19;:24;;:36;29043:10;29018:36;;;;;;;;;;;;;;;28988:66;;29061:9;:16;;29083:11;:9;:11::i;:::-;29061:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29128:27;29153:1;29128:6;:20;;;:24;;:27;;;;:::i;:::-;29102:9;:23;;:53;;;;29195:1;29168:9;:23;;;:28;29164:95;;;29207:19;:27;;29240:10;29207:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29164:95;29267:24;29339:10;29360:14;29385:16;:28;29402:10;29385:28;;;;;;;;;;;:44;29414:14;29385:44;;;;;;;;;;;:55;;;29451:11;:9;:11::i;:::-;29312:159;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;29294:184;;;;;;29267:211;;29595:10;29492:120;;29579:7;29492:120;;;29512:16;29537:10;29556:14;29492:120;;;;;;;;:::i;:::-;;;;;;;;4928:1;;;;27827:1791:::0;;;;:::o;18271:27::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23121:112::-;2197:12;:10;:12::i;:::-;2186:23;;:7;:5;:7::i;:::-;:23;;;2178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23197:18:::1;:30;23216:10;23197:30;;;;;;;;;;;;23190:37;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;23121:112:::0;:::o;18303:53::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;13127:137::-;13170:7;13186:10;13227:9;13221:15;;13256:2;13249:9;;;13127:137;:::o;4562:86::-;4609:4;4633:7;;;;;;;;;;;4626:14;;4562:86;:::o;22488:627::-;4888:8;:6;:8::i;:::-;4887:9;4879:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;22675:4:::1;22611:68;;:18;:30;22630:10;22611:30;;;;;;;;;;;:47;;:60;22659:11;:9;:11::i;:::-;22611:60;;;;;;;;;;;;;;;;;;;;;;;;;:68;;;22595:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;22802:4;22741:18;:30;22760:10;22741:30;;;;;;;;;;;:47;;:58;22789:9;22741:58;;;;;;;;;;;;;;;;:65;;;;;;;;;;;;;;;;;;22813:18;:30;22832:10;22813:30;;;;;;;;;;;:37;;22856:9;22813:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22875:21;22944:18;:30;22963:10;22944:30;;;;;;;;;;;:42;;;;;;;;;;;;23011:10;22917:113;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22899:138;;;;;;22875:162;;23099:9;23051:58;;;23072:13;23087:10;23051:58;;;;;;;:::i;:::-;;;;;;;;4928:1;22488:627:::0;;:::o;16426:45::-;;;;:::o;15115:467::-;15311:4;15324:12;15339:92;15383:5;15390:4;15396:7;15405:17;15366:57;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;15356:68;;;;;;15339:8;:92::i;:::-;15324:107;;15438:14;15455:33;15465:4;15471;15477;15483;15455:33;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15438:50;;15521:1;15503:20;;:6;:20;;;;15495:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;15569:6;15560:15;;:5;:15;;;15552:24;;;;15115:467;;;;;;;;;:::o;2617:103::-;2197:12;:10;:12::i;:::-;2186:23;;:7;:5;:7::i;:::-;:23;;;2178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2682:30:::1;2709:1;2682:18;:30::i;:::-;2617:103::o:0;18571:482::-;18685:13;18707:7;18723;18739;18755;18780:39;18822:16;:28;18839:10;18822:28;;;;;;;;;;;:58;18859:14;18822:58;;;;;;;;;;;18780:100;;18903:11;:16;;18928:11;:21;;;18958:11;:25;;;18992:11;:22;;;19023:11;:17;;;18887:160;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18571:482;;;;;;;;:::o;19272:171::-;19360:7;19386:18;:30;19405:10;19386:30;;;;;;;;;;;:51;;;19379:58;;19272:171;;;:::o;25755:2066::-;4888:8;:6;:8::i;:::-;4887:9;4879:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;25978:1:::1;25924:16;:28;25941:10;25924:28;;;;;;;;;;;:44;25953:14;25924:44;;;;;;;;;;;:50;;;:55;;25908:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;26055:11;:9;:11::i;:::-;26044:22;;:7;:22;;;;26036:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;26100:16;26127:18;:30;26146:10;26127:30;;;;;;;;;;;:42;;;;;;;;;;;;26119:67;;;26187:11;26119:80;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26100:99;;26234:11;:9;:11::i;:::-;26222:23;;:8;:23;;;26206:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26326:47;26376:18;:44;26403:10;26376:44;;;;;;;;;;;:60;26421:14;26376:60;;;;;;;;;;;:117;26437:16;:28;26454:10;26437:28;;;;;;;;;;;:44;26466:14;26437:44;;;;;;;;;;;:55;;;26376:117;;;;;;;;;;;26326:167;;26538:12;26506:19;:28;;;:44;26502:369;;26629:82;26709:1;26629:16;:28;26646:10;26629:28;;;;;;;;;;;:44;26658:14;26629:44;;;;;;;;;;;:65;;;:79;;:82;;;;:::i;:::-;26561:16;:28;26578:10;26561:28;;;;;;;;;;;:44;26590:14;26561:44;;;;;;;;;;;:65;;:150;;;;26742:18;:30;26761:10;26742:30;;;;;;;;;;;:46;26773:14;26742:46;;;;;;;;;;;:121;26799:16;:28;26816:10;26799:28;;;;;;;;;;;:44;26828:14;26799:44;;;;;;;;;;;:55;;;26742:121;;;;;;;;;;;26720:143;;26502:369;26947:5;26895:57;;:19;:35;;:48;26931:11;:9;:11::i;:::-;26895:48;;;;;;;;;;;;;;;;;;;;;;;;;:57;;;26879:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;27073:4;27022:19;:35;;:48;27058:11;:9;:11::i;:::-;27022:48;;;;;;;;;;;;;;;;:55;;;;;;;;;;;;;;;;;;27084:19;:26;;27116:11;:9;:11::i;:::-;27084:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27137:24;27164:19;:24;;:33;27189:7;27164:33;;;;;;;;;;;;;;;27137:60;;27234:1;27210:6;:20;;;:25;27206:89;;;27246:19;:27;;27279:7;27246:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27206:89;27340:6;:13;;:20;;;;27303:6;:21;;:34;27325:11;:9;:11::i;:::-;27303:34;;;;;;;;;;;;;;;:57;;;;27367:6;:13;;27386:11;:9;:11::i;:::-;27367:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27428:27;27453:1;27428:6;:20;;;:24;;:27;;;;:::i;:::-;27405:6;:20;;:50;;;;27464:18;27530:10;27551:14;27576:16;:28;27593:10;27576:28;;;;;;;;;;;:44;27605:14;27576:44;;;;;;;;;;;:55;;;27642:11;:9;:11::i;:::-;27503:159;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;27485:184;;;;;;27464:205;;27797:11;:9;:11::i;:::-;27683:132;;27761:7;27683:132;;;27700:10;27719;27738:14;27777:11;27683:132;;;;;;;;;:::i;:::-;;;;;;;;4928:1;;;;25755:2066:::0;;;;:::o;19948:319::-;20091:7;20121:18;:30;20140:10;20121:30;;;;;;;;;;;:46;20152:14;20121:46;;;;;;;;;;;:121;20178:16;:28;20195:10;20178:28;;;;;;;;;;;:44;20207:14;20178:44;;;;;;;;;;;:55;;;20121:121;;;;;;;;;;;:129;;20251:9;20121:140;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20107:154;;19948:319;;;;;:::o;1966:87::-;2012:7;2039:6;;;;;;;;;;;2032:13;;1966:87;:::o;23412:252::-;23555:4;23491:68;;:18;:30;23510:10;23491:30;;;;;;;;;;;:47;;:60;23539:11;:9;:11::i;:::-;23491:60;;;;;;;;;;;;;;;;;;;;;;;;;:68;;;23475:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;23628:18;:30;23647:10;23628:30;;;;;;;;;;;;23621:37;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;23412:252;:::o;23670:317::-;2197:12;:10;:12::i;:::-;2186:23;;:7;:5;:7::i;:::-;:23;;;2178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23864:4:::1;23800:68;;:18;:30;23819:10;23800:30;;;;;;;;;;;:47;;:60;23848:11;:9;:11::i;:::-;23800:60;;;;;;;;;;;;;;;;;;;;;;;;;:68;;;23784:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;23937:16;:28;23954:10;23937:28;;;;;;;;;;;:44;23966:14;23937:44;;;;;;;;;;;;23930:51:::0;::::1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;23670:317:::0;;:::o;21135:340::-;21322:7;21352:18;:30;21371:10;21352:30;;;;;;;;;;;:46;21383:14;21352:46;;;;;;;;;;;:69;21399:21;21352:69;;;;;;;;;;;:84;;:93;21437:7;21352:93;;;;;;;;;;;;;;;:117;;;21338:131;;21135:340;;;;;;:::o;20273:513::-;20418:7;20448:18;:30;20467:10;20448:30;;;;;;;;;;;:46;20479:14;20448:46;;;;;;;;;;;:121;20505:16;:28;20522:10;20505:28;;;;;;;;;;;:44;20534:14;20505:44;;;;;;;;;;;:55;;;20448:121;;;;;;;;;;;:136;;:308;20597:18;:30;20616:10;20597:30;;;;;;;;;;;:46;20628:14;20597:46;;;;;;;;;;;:129;20658:16;:28;20675:10;20658:28;;;;;;;;;;;:44;20687:14;20658:44;;;;;;;;;;;:55;;;20597:129;;;;;;;;;;;:137;;20735:9;20597:148;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20448:308;;;;;;;;;;;;;;;:332;;;20434:346;;20273:513;;;;;:::o;19449:197::-;19559:13;19591:16;:28;19608:10;19591:28;;;;;;;;;;;:44;19620:14;19591:44;;;;;;;;;;;:49;;19584:56;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19449:197;;;;:::o;23993:1756::-;24137:7;4888:8;:6;:8::i;:::-;4887:9;4879:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;24233:4:::1;24169:68;;:18;:30;24188:10;24169:30;;;;;;;;;;;:47;;:60;24217:11;:9;:11::i;:::-;24169:60;;;;;;;;;;;;;;;;;;;;;;;;;:68;;;24153:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;24378:25;;24315:18;:30;24334:10;24315:30;;;;;;;;;;;:51;;;:88;24299:186;;;;;;;;;;;;:::i;:::-;;;;;;;;;24494:42;24539:16;:28;24556:10;24539:28;;;;;;;;;;;:95;24576:18;:30;24595:10;24576:30;;;;;;;;;;;:51;;;24539:95;;;;;;;;;;;24494:140;;24663:16;24641:14;:19;;:38;;;;;;;;;;;;:::i;:::-;;24713:10;24686:14;:24;;:37;;;;24761:18;:30;24780:10;24761:30;;;;;;;;;;;:59;;;24730:14;:28;;:90;;;;24855:1;24827:14;:25;;:29;;;;24886:5;24863:14;:20;;:28;;;;24900:47;24950:18;:44;24977:10;24950:44;;;;;;;;;;;:97;24995:18;:30;25014:10;24995:30;;;;;;;;;;;:51;;;24950:97;;;;;;;;;;;:100;25048:1;24950:100;;;;;;;;;;;24900:150;;25090:12;25057:19;:30;;:45;;;;25155:5;25140:12;:20;;;;:::i;:::-;25109:19;:28;;:51;;;;25223:72;25293:1;25223:18;:44;25250:10;25223:44;;;;;;;;;;;:65;;;:69;;:72;;;;:::i;:::-;25169:18;:30;25188:10;25169:30;;;;;;;;;;;:51;;:126;;;;25304:25;25377:14;:24;;;25426:14;:28;;;25350:113;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25332:138;;;;;;25304:166;;25537:11;:9;:11::i;:::-;25484:215;;;25511:17;25557:16;25582:10;25601:14;:28;;;25638:14;:25;;;25672:14;:20;;;25484:215;;;;;;;;;;;:::i;:::-;;;;;;;;25715:14;:28;;;25708:35;;;;;23993:1756:::0;;;;;:::o;21481:1001::-;21594:7;4888:8;:6;:8::i;:::-;4887:9;4879:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;21613:24:::1;21648:12;21640:27;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21613:56;;21712:11;:9;:11::i;:::-;21692:31;;:16;:31;;;21676:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;21783:26;21812:18;:32;21831:12;;21812:32;;;;;;;;;;;21783:61;;21894:4;21851:10;:27;;:40;21879:11;:9;:11::i;:::-;21851:40;;;;;;;;;;;;;;;;:47;;;;;;;;;;;;;;;;;;21905:10;:17;;21928:11;:9;:11::i;:::-;21905:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21972:12;21947:10;:22;;;:37;;;;;;;;;;;;;;;;;;22009:5;21991:10;:15;;:23;;;;;;;;;;;;:::i;:::-;;22044:12;;22021:10;:20;;:35;;;;22097:1;22063:10;:31;;:35;;;;22122:19;22139:1;22122:12;;:16;;:19;;;;:::i;:::-;22107:12;:34;;;;22150:21;22209:12;22228:10;:20;;;22192:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22174:82;;;;;;22150:106;;22367:12;22270:170;;22347:11;:9;:11::i;:::-;22270:170;;;22296:13;22318:10;:20;;;22388:5;22402:10;:31;;;22270:170;;;;;;;;;:::i;:::-;;;;;;;;22456:10;:20;;;22449:27;;;;;21481:1001:::0;;;;:::o;18361:88::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19059:155::-;19141:13;19173:18;:30;19192:10;19173:30;;;;;;;;;;;:35;;19166:42;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19059:155;;;:::o;2875:201::-;2197:12;:10;:12::i;:::-;2186:23;;:7;:5;:7::i;:::-;:23;;;2178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2984:1:::1;2964:22;;:8;:22;;;;2956:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3040:28;3059:8;3040:18;:28::i;:::-;2875:201:::0;:::o;8608:98::-;8666:7;8697:1;8693;:5;;;;:::i;:::-;8686:12;;8608:98;;;;:::o;677:115::-;730:15;773:10;758:26;;677:115;:::o;15588:487::-;15632:14;15681:4;15659:27;;:10;:27;;;15655:415;;;15697:18;15718:8;;15697:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15735:13;15751:8;;:15;;15735:31;;15961:42;15941:5;15934;15930:17;15924:24;15908:106;15898:116;;15784:239;;;;;16052:10;16045:17;;;;15655:415;15588:487;;:::o;8989:98::-;9047:7;9078:1;9074;:5;;;;:::i;:::-;9067:12;;8989:98;;;;:::o;14949:160::-;15004:7;15097:4;15044:58;;;;;;;;:::i;:::-;;;;;;;;;;;;;15034:69;;;;;;15020:83;;14949:160;;;:::o;3236:191::-;3310:16;3329:6;;;;;;;;;;;3310:25;;3355:8;3346:6;;:17;;;;;;;;;;;;;;;;;;3410:8;3379:40;;3400:8;3379:40;;;;;;;;;;;;3236:191;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:342:1:-;;109:64;124:48;165:6;124:48;:::i;:::-;109:64;:::i;:::-;100:73;;196:6;189:5;182:21;234:4;227:5;223:16;272:3;263:6;258:3;254:16;251:25;248:2;;;289:1;286;279:12;248:2;302:41;336:6;331:3;326;302:41;:::i;:::-;90:259;;;;;;:::o;355:344::-;;458:65;473:49;515:6;473:49;:::i;:::-;458:65;:::i;:::-;449:74;;546:6;539:5;532:21;584:4;577:5;573:16;622:3;613:6;608:3;604:16;601:25;598:2;;;639:1;636;629:12;598:2;652:41;686:6;681:3;676;652:41;:::i;:::-;439:260;;;;;;:::o;705:139::-;;789:6;776:20;767:29;;805:33;832:5;805:33;:::i;:::-;757:87;;;;:::o;850:143::-;;938:6;932:13;923:22;;954:33;981:5;954:33;:::i;:::-;913:80;;;;:::o;999:139::-;;1083:6;1070:20;1061:29;;1099:33;1126:5;1099:33;:::i;:::-;1051:87;;;;:::o;1157:271::-;;1261:3;1254:4;1246:6;1242:17;1238:27;1228:2;;1279:1;1276;1269:12;1228:2;1319:6;1306:20;1344:78;1418:3;1410:6;1403:4;1395:6;1391:17;1344:78;:::i;:::-;1335:87;;1218:210;;;;;:::o;1448:273::-;;1553:3;1546:4;1538:6;1534:17;1530:27;1520:2;;1571:1;1568;1561:12;1520:2;1611:6;1598:20;1636:79;1711:3;1703:6;1696:4;1688:6;1684:17;1636:79;:::i;:::-;1627:88;;1510:211;;;;;:::o;1727:139::-;;1811:6;1798:20;1789:29;;1827:33;1854:5;1827:33;:::i;:::-;1779:87;;;;:::o;1872:135::-;;1954:6;1941:20;1932:29;;1970:31;1995:5;1970:31;:::i;:::-;1922:85;;;;:::o;2013:262::-;;2121:2;2109:9;2100:7;2096:23;2092:32;2089:2;;;2137:1;2134;2127:12;2089:2;2180:1;2205:53;2250:7;2241:6;2230:9;2226:22;2205:53;:::i;:::-;2195:63;;2151:117;2079:196;;;;:::o;2281:284::-;;2400:2;2388:9;2379:7;2375:23;2371:32;2368:2;;;2416:1;2413;2406:12;2368:2;2459:1;2484:64;2540:7;2531:6;2520:9;2516:22;2484:64;:::i;:::-;2474:74;;2430:128;2358:207;;;;:::o;2571:951::-;;;;;;2754:3;2742:9;2733:7;2729:23;2725:33;2722:2;;;2771:1;2768;2761:12;2722:2;2814:1;2839:53;2884:7;2875:6;2864:9;2860:22;2839:53;:::i;:::-;2829:63;;2785:117;2969:2;2958:9;2954:18;2941:32;3000:18;2992:6;2989:30;2986:2;;;3032:1;3029;3022:12;2986:2;3060:62;3114:7;3105:6;3094:9;3090:22;3060:62;:::i;:::-;3050:72;;2912:220;3171:2;3197:53;3242:7;3233:6;3222:9;3218:22;3197:53;:::i;:::-;3187:63;;3142:118;3299:2;3325:53;3370:7;3361:6;3350:9;3346:22;3325:53;:::i;:::-;3315:63;;3270:118;3427:3;3454:51;3497:7;3488:6;3477:9;3473:22;3454:51;:::i;:::-;3444:61;;3398:117;2712:810;;;;;;;;:::o;3528:520::-;;;3663:2;3651:9;3642:7;3638:23;3634:32;3631:2;;;3679:1;3676;3669:12;3631:2;3722:1;3747:53;3792:7;3783:6;3772:9;3768:22;3747:53;:::i;:::-;3737:63;;3693:117;3877:2;3866:9;3862:18;3849:32;3908:18;3900:6;3897:30;3894:2;;;3940:1;3937;3930:12;3894:2;3968:63;4023:7;4014:6;4003:9;3999:22;3968:63;:::i;:::-;3958:73;;3820:221;3621:427;;;;;:::o;4054:1243::-;;;;;;;;4271:3;4259:9;4250:7;4246:23;4242:33;4239:2;;;4288:1;4285;4278:12;4239:2;4331:1;4356:53;4401:7;4392:6;4381:9;4377:22;4356:53;:::i;:::-;4346:63;;4302:117;4458:2;4484:53;4529:7;4520:6;4509:9;4505:22;4484:53;:::i;:::-;4474:63;;4429:118;4586:2;4612:53;4657:7;4648:6;4637:9;4633:22;4612:53;:::i;:::-;4602:63;;4557:118;4742:2;4731:9;4727:18;4714:32;4773:18;4765:6;4762:30;4759:2;;;4805:1;4802;4795:12;4759:2;4833:62;4887:7;4878:6;4867:9;4863:22;4833:62;:::i;:::-;4823:72;;4685:220;4944:3;4971:53;5016:7;5007:6;4996:9;4992:22;4971:53;:::i;:::-;4961:63;;4915:119;5073:3;5100:53;5145:7;5136:6;5125:9;5121:22;5100:53;:::i;:::-;5090:63;;5044:119;5202:3;5229:51;5272:7;5263:6;5252:9;5248:22;5229:51;:::i;:::-;5219:61;;5173:117;4229:1068;;;;;;;;;;:::o;5303:262::-;;5411:2;5399:9;5390:7;5386:23;5382:32;5379:2;;;5427:1;5424;5417:12;5379:2;5470:1;5495:53;5540:7;5531:6;5520:9;5516:22;5495:53;:::i;:::-;5485:63;;5441:117;5369:196;;;;:::o;5571:407::-;;;5696:2;5684:9;5675:7;5671:23;5667:32;5664:2;;;5712:1;5709;5702:12;5664:2;5755:1;5780:53;5825:7;5816:6;5805:9;5801:22;5780:53;:::i;:::-;5770:63;;5726:117;5882:2;5908:53;5953:7;5944:6;5933:9;5929:22;5908:53;:::i;:::-;5898:63;;5853:118;5654:324;;;;;:::o;5984:665::-;;;;6136:2;6124:9;6115:7;6111:23;6107:32;6104:2;;;6152:1;6149;6142:12;6104:2;6195:1;6220:53;6265:7;6256:6;6245:9;6241:22;6220:53;:::i;:::-;6210:63;;6166:117;6350:2;6339:9;6335:18;6322:32;6381:18;6373:6;6370:30;6367:2;;;6413:1;6410;6403:12;6367:2;6441:63;6496:7;6487:6;6476:9;6472:22;6441:63;:::i;:::-;6431:73;;6293:221;6553:2;6579:53;6624:7;6615:6;6604:9;6600:22;6579:53;:::i;:::-;6569:63;;6524:118;6094:555;;;;;:::o;6655:407::-;;;6780:2;6768:9;6759:7;6755:23;6751:32;6748:2;;;6796:1;6793;6786:12;6748:2;6839:1;6864:53;6909:7;6900:6;6889:9;6885:22;6864:53;:::i;:::-;6854:63;;6810:117;6966:2;6992:53;7037:7;7028:6;7017:9;7013:22;6992:53;:::i;:::-;6982:63;;6937:118;6738:324;;;;;:::o;7068:552::-;;;;7210:2;7198:9;7189:7;7185:23;7181:32;7178:2;;;7226:1;7223;7216:12;7178:2;7269:1;7294:53;7339:7;7330:6;7319:9;7315:22;7294:53;:::i;:::-;7284:63;;7240:117;7396:2;7422:53;7467:7;7458:6;7447:9;7443:22;7422:53;:::i;:::-;7412:63;;7367:118;7524:2;7550:53;7595:7;7586:6;7575:9;7571:22;7550:53;:::i;:::-;7540:63;;7495:118;7168:452;;;;;:::o;7626:698::-;;;;;7785:3;7773:9;7764:7;7760:23;7756:33;7753:2;;;7802:1;7799;7792:12;7753:2;7845:1;7870:53;7915:7;7906:6;7895:9;7891:22;7870:53;:::i;:::-;7860:63;;7816:117;7972:2;7998:53;8043:7;8034:6;8023:9;8019:22;7998:53;:::i;:::-;7988:63;;7943:118;8100:2;8126:53;8171:7;8162:6;8151:9;8147:22;8126:53;:::i;:::-;8116:63;;8071:118;8228:2;8254:53;8299:7;8290:6;8279:9;8275:22;8254:53;:::i;:::-;8244:63;;8199:118;7743:581;;;;;;;:::o;8330:698::-;;;;;8489:3;8477:9;8468:7;8464:23;8460:33;8457:2;;;8506:1;8503;8496:12;8457:2;8549:1;8574:53;8619:7;8610:6;8599:9;8595:22;8574:53;:::i;:::-;8564:63;;8520:117;8676:2;8702:53;8747:7;8738:6;8727:9;8723:22;8702:53;:::i;:::-;8692:63;;8647:118;8804:2;8830:53;8875:7;8866:6;8855:9;8851:22;8830:53;:::i;:::-;8820:63;;8775:118;8932:2;8958:53;9003:7;8994:6;8983:9;8979:22;8958:53;:::i;:::-;8948:63;;8903:118;8447:581;;;;;;;:::o;9034:552::-;;;;9176:2;9164:9;9155:7;9151:23;9147:32;9144:2;;;9192:1;9189;9182:12;9144:2;9235:1;9260:53;9305:7;9296:6;9285:9;9281:22;9260:53;:::i;:::-;9250:63;;9206:117;9362:2;9388:53;9433:7;9424:6;9413:9;9409:22;9388:53;:::i;:::-;9378:63;;9333:118;9490:2;9516:53;9561:7;9552:6;9541:9;9537:22;9516:53;:::i;:::-;9506:63;;9461:118;9134:452;;;;;:::o;9592:142::-;9695:32;9721:5;9695:32;:::i;:::-;9690:3;9683:45;9673:61;;:::o;9740:118::-;9827:24;9845:5;9827:24;:::i;:::-;9822:3;9815:37;9805:53;;:::o;9864:157::-;9969:45;9989:24;10007:5;9989:24;:::i;:::-;9969:45;:::i;:::-;9964:3;9957:58;9947:74;;:::o;10027:109::-;10108:21;10123:5;10108:21;:::i;:::-;10103:3;10096:34;10086:50;;:::o;10142:118::-;10229:24;10247:5;10229:24;:::i;:::-;10224:3;10217:37;10207:53;;:::o;10266:157::-;10371:45;10391:24;10409:5;10391:24;:::i;:::-;10371:45;:::i;:::-;10366:3;10359:58;10349:74;;:::o;10429:360::-;;10543:38;10575:5;10543:38;:::i;:::-;10597:70;10660:6;10655:3;10597:70;:::i;:::-;10590:77;;10676:52;10721:6;10716:3;10709:4;10702:5;10698:16;10676:52;:::i;:::-;10753:29;10775:6;10753:29;:::i;:::-;10748:3;10744:39;10737:46;;10519:270;;;;;:::o;10795:373::-;;10927:38;10959:5;10927:38;:::i;:::-;10981:88;11062:6;11057:3;10981:88;:::i;:::-;10974:95;;11078:52;11123:6;11118:3;11111:4;11104:5;11100:16;11078:52;:::i;:::-;11155:6;11150:3;11146:16;11139:23;;10903:265;;;;;:::o;11174:226::-;11307:86;11327:65;11386:5;11327:65;:::i;:::-;11307:86;:::i;:::-;11302:3;11295:99;11285:115;;:::o;11406:364::-;;11522:39;11555:5;11522:39;:::i;:::-;11577:71;11641:6;11636:3;11577:71;:::i;:::-;11570:78;;11657:52;11702:6;11697:3;11690:4;11683:5;11679:16;11657:52;:::i;:::-;11734:29;11756:6;11734:29;:::i;:::-;11729:3;11725:39;11718:46;;11498:272;;;;;:::o;11776:369::-;;11939:67;12003:2;11998:3;11939:67;:::i;:::-;11932:74;;12036:34;12032:1;12027:3;12023:11;12016:55;12102:7;12097:2;12092:3;12088:12;12081:29;12136:2;12131:3;12127:12;12120:19;;11922:223;;;:::o;12151:398::-;;12332:85;12414:2;12409:3;12332:85;:::i;:::-;12325:92;;12447:66;12443:1;12438:3;12434:11;12427:87;12540:2;12535:3;12531:12;12524:19;;12315:234;;;:::o;12555:386::-;;12718:67;12782:2;12777:3;12718:67;:::i;:::-;12711:74;;12815:34;12811:1;12806:3;12802:11;12795:55;12881:24;12876:2;12871:3;12867:12;12860:46;12932:2;12927:3;12923:12;12916:19;;12701:240;;;:::o;12947:370::-;;13110:67;13174:2;13169:3;13110:67;:::i;:::-;13103:74;;13207:34;13203:1;13198:3;13194:11;13187:55;13273:8;13268:2;13263:3;13259:12;13252:30;13308:2;13303:3;13299:12;13292:19;;13093:224;;;:::o;13323:375::-;;13486:67;13550:2;13545:3;13486:67;:::i;:::-;13479:74;;13583:34;13579:1;13574:3;13570:11;13563:55;13649:13;13644:2;13639:3;13635:12;13628:35;13689:2;13684:3;13680:12;13673:19;;13469:229;;;:::o;13704:318::-;;13867:67;13931:2;13926:3;13867:67;:::i;:::-;13860:74;;13964:22;13960:1;13955:3;13951:11;13944:43;14013:2;14008:3;14004:12;13997:19;;13850:172;;;:::o;14028:327::-;;14191:67;14255:2;14250:3;14191:67;:::i;:::-;14184:74;;14288:31;14284:1;14279:3;14275:11;14268:52;14346:2;14341:3;14337:12;14330:19;;14174:181;;;:::o;14361:315::-;;14524:67;14588:2;14583:3;14524:67;:::i;:::-;14517:74;;14621:19;14617:1;14612:3;14608:11;14601:40;14667:2;14662:3;14658:12;14651:19;;14507:169;;;:::o;14682:371::-;;14845:67;14909:2;14904:3;14845:67;:::i;:::-;14838:74;;14942:34;14938:1;14933:3;14929:11;14922:55;15008:9;15003:2;14998:3;14994:12;14987:31;15044:2;15039:3;15035:12;15028:19;;14828:225;;;:::o;15059:370::-;;15222:67;15286:2;15281:3;15222:67;:::i;:::-;15215:74;;15319:34;15315:1;15310:3;15306:11;15299:55;15385:8;15380:2;15375:3;15371:12;15364:30;15420:2;15415:3;15411:12;15404:19;;15205:224;;;:::o;15435:314::-;;15598:67;15662:2;15657:3;15598:67;:::i;:::-;15591:74;;15695:18;15691:1;15686:3;15682:11;15675:39;15740:2;15735:3;15731:12;15724:19;;15581:168;;;:::o;15755:365::-;;15918:67;15982:2;15977:3;15918:67;:::i;:::-;15911:74;;16015:34;16011:1;16006:3;16002:11;15995:55;16081:3;16076:2;16071:3;16067:12;16060:25;16111:2;16106:3;16102:12;16095:19;;15901:219;;;:::o;16126:333::-;;16307:84;16389:1;16384:3;16307:84;:::i;:::-;16300:91;;16421:3;16417:1;16412:3;16408:11;16401:24;16451:1;16446:3;16442:11;16435:18;;16290:169;;;:::o;16465:330::-;;16628:67;16692:2;16687:3;16628:67;:::i;:::-;16621:74;;16725:34;16721:1;16716:3;16712:11;16705:55;16786:2;16781:3;16777:12;16770:19;;16611:184;;;:::o;16801:365::-;;16964:67;17028:2;17023:3;16964:67;:::i;:::-;16957:74;;17061:34;17057:1;17052:3;17048:11;17041:55;17127:3;17122:2;17117:3;17113:12;17106:25;17157:2;17152:3;17148:12;17141:19;;16947:219;;;:::o;17172:330::-;;17335:67;17399:2;17394:3;17335:67;:::i;:::-;17328:74;;17432:34;17428:1;17423:3;17419:11;17412:55;17493:2;17488:3;17484:12;17477:19;;17318:184;;;:::o;17508:396::-;;17671:67;17735:2;17730:3;17671:67;:::i;:::-;17664:74;;17768:34;17764:1;17759:3;17755:11;17748:55;17834:34;17829:2;17824:3;17820:12;17813:56;17895:2;17890:3;17886:12;17879:19;;17654:250;;;:::o;17910:118::-;17997:24;18015:5;17997:24;:::i;:::-;17992:3;17985:37;17975:53;;:::o;18034:157::-;18139:45;18159:24;18177:5;18159:24;:::i;:::-;18139:45;:::i;:::-;18134:3;18127:58;18117:74;;:::o;18197:112::-;18280:22;18296:5;18280:22;:::i;:::-;18275:3;18268:35;18258:51;;:::o;18315:663::-;;18571:75;18642:3;18633:6;18571:75;:::i;:::-;18671:2;18666:3;18662:12;18655:19;;18691:148;18835:3;18691:148;:::i;:::-;18684:155;;18849:75;18920:3;18911:6;18849:75;:::i;:::-;18949:2;18944:3;18940:12;18933:19;;18969:3;18962:10;;18560:418;;;;;:::o;18984:271::-;;19136:93;19225:3;19216:6;19136:93;:::i;:::-;19129:100;;19246:3;19239:10;;19118:137;;;;:::o;19261:412::-;;19441:93;19530:3;19521:6;19441:93;:::i;:::-;19434:100;;19544:75;19615:3;19606:6;19544:75;:::i;:::-;19644:2;19639:3;19635:12;19628:19;;19664:3;19657:10;;19423:250;;;;;:::o;19679:522::-;;19914:148;20058:3;19914:148;:::i;:::-;19907:155;;20072:75;20143:3;20134:6;20072:75;:::i;:::-;20172:2;20167:3;20163:12;20156:19;;20192:3;20185:10;;19896:305;;;;:::o;20207:750::-;;20464:75;20535:3;20526:6;20464:75;:::i;:::-;20564:2;20559:3;20555:12;20548:19;;20577:103;20676:3;20667:6;20577:103;:::i;:::-;20705:2;20700:3;20696:12;20689:19;;20718:75;20789:3;20780:6;20718:75;:::i;:::-;20818:2;20813:3;20809:12;20802:19;;20838:93;20927:3;20918:6;20838:93;:::i;:::-;20831:100;;20948:3;20941:10;;20453:504;;;;;;;:::o;20963:663::-;;21219:75;21290:3;21281:6;21219:75;:::i;:::-;21319:2;21314:3;21310:12;21303:19;;21339:148;21483:3;21339:148;:::i;:::-;21332:155;;21497:75;21568:3;21559:6;21497:75;:::i;:::-;21597:2;21592:3;21588:12;21581:19;;21617:3;21610:10;;21208:418;;;;;:::o;21632:679::-;;21843:75;21914:3;21905:6;21843:75;:::i;:::-;21943:2;21938:3;21934:12;21927:19;;21956:75;22027:3;22018:6;21956:75;:::i;:::-;22056:2;22051:3;22047:12;22040:19;;22069:75;22140:3;22131:6;22069:75;:::i;:::-;22169:2;22164:3;22160:12;22153:19;;22182:75;22253:3;22244:6;22182:75;:::i;:::-;22282:2;22277:3;22273:12;22266:19;;22302:3;22295:10;;21832:479;;;;;;;:::o;22317:222::-;;22448:2;22437:9;22433:18;22425:26;;22461:71;22529:1;22518:9;22514:17;22505:6;22461:71;:::i;:::-;22415:124;;;;:::o;22545:561::-;;22766:2;22755:9;22751:18;22743:26;;22779:71;22847:1;22836:9;22832:17;22823:6;22779:71;:::i;:::-;22860:88;22944:2;22933:9;22929:18;22920:6;22860:88;:::i;:::-;22995:9;22989:4;22985:20;22980:2;22969:9;22965:18;22958:48;23023:76;23094:4;23085:6;23023:76;:::i;:::-;23015:84;;22733:373;;;;;;:::o;23112:644::-;;23347:3;23336:9;23332:19;23324:27;;23361:71;23429:1;23418:9;23414:17;23405:6;23361:71;:::i;:::-;23479:9;23473:4;23469:20;23464:2;23453:9;23449:18;23442:48;23507:78;23580:4;23571:6;23507:78;:::i;:::-;23499:86;;23595:72;23663:2;23652:9;23648:18;23639:6;23595:72;:::i;:::-;23677;23745:2;23734:9;23730:18;23721:6;23677:72;:::i;:::-;23314:442;;;;;;;:::o;23762:210::-;;23887:2;23876:9;23872:18;23864:26;;23900:65;23962:1;23951:9;23947:17;23938:6;23900:65;:::i;:::-;23854:118;;;;:::o;23978:866::-;;24269:3;24258:9;24254:19;24246:27;;24283:71;24351:1;24340:9;24336:17;24327:6;24283:71;:::i;:::-;24401:9;24395:4;24391:20;24386:2;24375:9;24371:18;24364:48;24429:78;24502:4;24493:6;24429:78;:::i;:::-;24421:86;;24517:72;24585:2;24574:9;24570:18;24561:6;24517:72;:::i;:::-;24599;24667:2;24656:9;24652:18;24643:6;24599:72;:::i;:::-;24681:73;24749:3;24738:9;24734:19;24725:6;24681:73;:::i;:::-;24764;24832:3;24821:9;24817:19;24808:6;24764:73;:::i;:::-;24236:608;;;;;;;;;:::o;24850:332::-;;25009:2;24998:9;24994:18;24986:26;;25022:71;25090:1;25079:9;25075:17;25066:6;25022:71;:::i;:::-;25103:72;25171:2;25160:9;25156:18;25147:6;25103:72;:::i;:::-;24976:206;;;;;:::o;25188:644::-;;25423:3;25412:9;25408:19;25400:27;;25437:71;25505:1;25494:9;25490:17;25481:6;25437:71;:::i;:::-;25518:72;25586:2;25575:9;25571:18;25562:6;25518:72;:::i;:::-;25637:9;25631:4;25627:20;25622:2;25611:9;25607:18;25600:48;25665:78;25738:4;25729:6;25665:78;:::i;:::-;25657:86;;25753:72;25821:2;25810:9;25806:18;25797:6;25753:72;:::i;:::-;25390:442;;;;;;;:::o;25838:::-;;26025:2;26014:9;26010:18;26002:26;;26038:71;26106:1;26095:9;26091:17;26082:6;26038:71;:::i;:::-;26119:72;26187:2;26176:9;26172:18;26163:6;26119:72;:::i;:::-;26201;26269:2;26258:9;26254:18;26245:6;26201:72;:::i;:::-;25992:288;;;;;;:::o;26286:553::-;;26501:3;26490:9;26486:19;26478:27;;26515:71;26583:1;26572:9;26568:17;26559:6;26515:71;:::i;:::-;26596:72;26664:2;26653:9;26649:18;26640:6;26596:72;:::i;:::-;26678;26746:2;26735:9;26731:18;26722:6;26678:72;:::i;:::-;26760;26828:2;26817:9;26813:18;26804:6;26760:72;:::i;:::-;26468:371;;;;;;;:::o;26845:545::-;;27056:3;27045:9;27041:19;27033:27;;27070:71;27138:1;27127:9;27123:17;27114:6;27070:71;:::i;:::-;27151:68;27215:2;27204:9;27200:18;27191:6;27151:68;:::i;:::-;27229:72;27297:2;27286:9;27282:18;27273:6;27229:72;:::i;:::-;27311;27379:2;27368:9;27364:18;27355:6;27311:72;:::i;:::-;27023:367;;;;;;;:::o;27396:309::-;;27545:2;27534:9;27530:18;27522:26;;27594:9;27588:4;27584:20;27580:1;27569:9;27565:17;27558:47;27622:76;27693:4;27684:6;27622:76;:::i;:::-;27614:84;;27512:193;;;;:::o;27711:313::-;;27862:2;27851:9;27847:18;27839:26;;27911:9;27905:4;27901:20;27897:1;27886:9;27882:17;27875:47;27939:78;28012:4;28003:6;27939:78;:::i;:::-;27931:86;;27829:195;;;;:::o;28030:755::-;;28293:3;28282:9;28278:19;28270:27;;28343:9;28337:4;28333:20;28329:1;28318:9;28314:17;28307:47;28371:78;28444:4;28435:6;28371:78;:::i;:::-;28363:86;;28459:72;28527:2;28516:9;28512:18;28503:6;28459:72;:::i;:::-;28541;28609:2;28598:9;28594:18;28585:6;28541:72;:::i;:::-;28623;28691:2;28680:9;28676:18;28667:6;28623:72;:::i;:::-;28705:73;28773:3;28762:9;28758:19;28749:6;28705:73;:::i;:::-;28260:525;;;;;;;;:::o;28791:419::-;;28995:2;28984:9;28980:18;28972:26;;29044:9;29038:4;29034:20;29030:1;29019:9;29015:17;29008:47;29072:131;29198:4;29072:131;:::i;:::-;29064:139;;28962:248;;;:::o;29216:419::-;;29420:2;29409:9;29405:18;29397:26;;29469:9;29463:4;29459:20;29455:1;29444:9;29440:17;29433:47;29497:131;29623:4;29497:131;:::i;:::-;29489:139;;29387:248;;;:::o;29641:419::-;;29845:2;29834:9;29830:18;29822:26;;29894:9;29888:4;29884:20;29880:1;29869:9;29865:17;29858:47;29922:131;30048:4;29922:131;:::i;:::-;29914:139;;29812:248;;;:::o;30066:419::-;;30270:2;30259:9;30255:18;30247:26;;30319:9;30313:4;30309:20;30305:1;30294:9;30290:17;30283:47;30347:131;30473:4;30347:131;:::i;:::-;30339:139;;30237:248;;;:::o;30491:419::-;;30695:2;30684:9;30680:18;30672:26;;30744:9;30738:4;30734:20;30730:1;30719:9;30715:17;30708:47;30772:131;30898:4;30772:131;:::i;:::-;30764:139;;30662:248;;;:::o;30916:419::-;;31120:2;31109:9;31105:18;31097:26;;31169:9;31163:4;31159:20;31155:1;31144:9;31140:17;31133:47;31197:131;31323:4;31197:131;:::i;:::-;31189:139;;31087:248;;;:::o;31341:419::-;;31545:2;31534:9;31530:18;31522:26;;31594:9;31588:4;31584:20;31580:1;31569:9;31565:17;31558:47;31622:131;31748:4;31622:131;:::i;:::-;31614:139;;31512:248;;;:::o;31766:419::-;;31970:2;31959:9;31955:18;31947:26;;32019:9;32013:4;32009:20;32005:1;31994:9;31990:17;31983:47;32047:131;32173:4;32047:131;:::i;:::-;32039:139;;31937:248;;;:::o;32191:419::-;;32395:2;32384:9;32380:18;32372:26;;32444:9;32438:4;32434:20;32430:1;32419:9;32415:17;32408:47;32472:131;32598:4;32472:131;:::i;:::-;32464:139;;32362:248;;;:::o;32616:419::-;;32820:2;32809:9;32805:18;32797:26;;32869:9;32863:4;32859:20;32855:1;32844:9;32840:17;32833:47;32897:131;33023:4;32897:131;:::i;:::-;32889:139;;32787:248;;;:::o;33041:419::-;;33245:2;33234:9;33230:18;33222:26;;33294:9;33288:4;33284:20;33280:1;33269:9;33265:17;33258:47;33322:131;33448:4;33322:131;:::i;:::-;33314:139;;33212:248;;;:::o;33466:419::-;;33670:2;33659:9;33655:18;33647:26;;33719:9;33713:4;33709:20;33705:1;33694:9;33690:17;33683:47;33747:131;33873:4;33747:131;:::i;:::-;33739:139;;33637:248;;;:::o;33891:419::-;;34095:2;34084:9;34080:18;34072:26;;34144:9;34138:4;34134:20;34130:1;34119:9;34115:17;34108:47;34172:131;34298:4;34172:131;:::i;:::-;34164:139;;34062:248;;;:::o;34316:419::-;;34520:2;34509:9;34505:18;34497:26;;34569:9;34563:4;34559:20;34555:1;34544:9;34540:17;34533:47;34597:131;34723:4;34597:131;:::i;:::-;34589:139;;34487:248;;;:::o;34741:419::-;;34945:2;34934:9;34930:18;34922:26;;34994:9;34988:4;34984:20;34980:1;34969:9;34965:17;34958:47;35022:131;35148:4;35022:131;:::i;:::-;35014:139;;34912:248;;;:::o;35166:222::-;;35297:2;35286:9;35282:18;35274:26;;35310:71;35378:1;35367:9;35363:17;35354:6;35310:71;:::i;:::-;35264:124;;;;:::o;35394:442::-;;35581:2;35570:9;35566:18;35558:26;;35594:71;35662:1;35651:9;35647:17;35638:6;35594:71;:::i;:::-;35675:72;35743:2;35732:9;35728:18;35719:6;35675:72;:::i;:::-;35757;35825:2;35814:9;35810:18;35801:6;35757:72;:::i;:::-;35548:288;;;;;;:::o;35842:283::-;;35908:2;35902:9;35892:19;;35950:4;35942:6;35938:17;36057:6;36045:10;36042:22;36021:18;36009:10;36006:34;36003:62;36000:2;;;36068:18;;:::i;:::-;36000:2;36108:10;36104:2;36097:22;35882:243;;;;:::o;36131:331::-;;36282:18;36274:6;36271:30;36268:2;;;36304:18;;:::i;:::-;36268:2;36389:4;36385:9;36378:4;36370:6;36366:17;36362:33;36354:41;;36450:4;36444;36440:15;36432:23;;36197:265;;;:::o;36468:332::-;;36620:18;36612:6;36609:30;36606:2;;;36642:18;;:::i;:::-;36606:2;36727:4;36723:9;36716:4;36708:6;36704:17;36700:33;36692:41;;36788:4;36782;36778:15;36770:23;;36535:265;;;:::o;36806:98::-;;36891:5;36885:12;36875:22;;36864:40;;;:::o;36910:99::-;;36996:5;36990:12;36980:22;;36969:40;;;:::o;37015:168::-;;37132:6;37127:3;37120:19;37172:4;37167:3;37163:14;37148:29;;37110:73;;;;:::o;37189:147::-;;37327:3;37312:18;;37302:34;;;;:::o;37342:169::-;;37460:6;37455:3;37448:19;37500:4;37495:3;37491:14;37476:29;;37438:73;;;;:::o;37517:148::-;;37656:3;37641:18;;37631:34;;;;:::o;37671:305::-;;37730:20;37748:1;37730:20;:::i;:::-;37725:25;;37764:20;37782:1;37764:20;:::i;:::-;37759:25;;37918:1;37850:66;37846:74;37843:1;37840:81;37837:2;;;37924:18;;:::i;:::-;37837:2;37968:1;37965;37961:9;37954:16;;37715:261;;;;:::o;37982:191::-;;38042:20;38060:1;38042:20;:::i;:::-;38037:25;;38076:20;38094:1;38076:20;:::i;:::-;38071:25;;38115:1;38112;38109:8;38106:2;;;38120:18;;:::i;:::-;38106:2;38165:1;38162;38158:9;38150:17;;38027:146;;;;:::o;38179:96::-;;38245:24;38263:5;38245:24;:::i;:::-;38234:35;;38224:51;;;:::o;38281:104::-;;38355:24;38373:5;38355:24;:::i;:::-;38344:35;;38334:51;;;:::o;38391:90::-;;38468:5;38461:13;38454:21;38443:32;;38433:48;;;:::o;38487:77::-;;38553:5;38542:16;;38532:32;;;:::o;38570:126::-;;38647:42;38640:5;38636:54;38625:65;;38615:81;;;:::o;38702:77::-;;38768:5;38757:16;;38747:32;;;:::o;38785:86::-;;38860:4;38853:5;38849:16;38838:27;;38828:43;;;:::o;38877:182::-;;38988:65;39047:5;38988:65;:::i;:::-;38975:78;;38965:94;;;:::o;39065:141::-;;39176:24;39194:5;39176:24;:::i;:::-;39163:37;;39153:53;;;:::o;39212:154::-;39296:6;39291:3;39286;39273:30;39358:1;39349:6;39344:3;39340:16;39333:27;39263:103;;;:::o;39372:307::-;39440:1;39450:113;39464:6;39461:1;39458:13;39450:113;;;39549:1;39544:3;39540:11;39534:18;39530:1;39525:3;39521:11;39514:39;39486:2;39483:1;39479:10;39474:15;;39450:113;;;39581:6;39578:1;39575:13;39572:2;;;39661:1;39652:6;39647:3;39643:16;39636:27;39572:2;39421:258;;;;:::o;39685:320::-;;39766:1;39760:4;39756:12;39746:22;;39813:1;39807:4;39803:12;39834:18;39824:2;;39890:4;39882:6;39878:17;39868:27;;39824:2;39952;39944:6;39941:14;39921:18;39918:38;39915:2;;;39971:18;;:::i;:::-;39915:2;39736:269;;;;:::o;40011:100::-;;40079:26;40099:5;40079:26;:::i;:::-;40068:37;;40058:53;;;:::o;40117:79::-;;40185:5;40174:16;;40164:32;;;:::o;40202:94::-;;40270:20;40284:5;40270:20;:::i;:::-;40259:31;;40249:47;;;:::o;40302:79::-;;40370:5;40359:16;;40349:32;;;:::o;40387:180::-;40435:77;40432:1;40425:88;40532:4;40529:1;40522:15;40556:4;40553:1;40546:15;40573:180;40621:77;40618:1;40611:88;40718:4;40715:1;40708:15;40742:4;40739:1;40732:15;40759:180;40807:77;40804:1;40797:88;40904:4;40901:1;40894:15;40928:4;40925:1;40918:15;40945:102;;41037:2;41033:7;41028:2;41021:5;41017:14;41013:28;41003:38;;40993:54;;;:::o;41053:94::-;;41134:5;41130:2;41126:14;41105:35;;41095:52;;;:::o;41153:122::-;41226:24;41244:5;41226:24;:::i;:::-;41219:5;41216:35;41206:2;;41265:1;41262;41255:12;41206:2;41196:79;:::o;41281:122::-;41354:24;41372:5;41354:24;:::i;:::-;41347:5;41344:35;41334:2;;41393:1;41390;41383:12;41334:2;41324:79;:::o;41409:122::-;41482:24;41500:5;41482:24;:::i;:::-;41475:5;41472:35;41462:2;;41521:1;41518;41511:12;41462:2;41452:79;:::o;41537:118::-;41608:22;41624:5;41608:22;:::i;:::-;41601:5;41598:33;41588:2;;41645:1;41642;41635:12;41588:2;41578:77;:::o

Swarm Source

ipfs://ea2a8a44746b6cbd9f604f886cd7c533a4742e10183950e2254d1f3d74583534
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.