Feature Tip: Add private address tag to any address under My Name Tag !
Overview
Max Total Supply
50,000,000 DFS
Holders
295 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
81,312.9883690040946394 DFSValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
DFSToken
Compiler Version
v0.5.10+commit.5a6ea5b1
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2019-07-30 */ pragma solidity ^0.5.10; /** * Innovative fantasy sports gaming ERC-20 token & arcade based on * blockchain technology and Ethereum smart contracts. * The global leader and cryptocurrency for the $7 Billion Fantasy Sports & ESPORTS Industry. * DFS is designed to give sports fans the opportunity to show their knowledge, * allowing users to use DFS (Token) as a means of confidence of how likely their * sports predictions are correct against other people around the world. * * Official Site: https://www.digitalfantasysports.com * Twitter: https://twitter.com/dfstoken * Telegram: https://t.me/digitalfantasysportsdfs * Instagram: https://www.instagram.com/dfstoken/ */ /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * See https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { // Gas optimization: this is cheaper than asserting 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return a / b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; uint256 totalSupply_; /** * @dev Total number of tokens in existence */ function totalSupply() public view returns (uint256) { return totalSupply_; } /** * @dev Transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public view returns (uint256) { return balances[_owner]; } } /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval( address indexed owner, address indexed spender, uint256 value ); } /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. * https://github.com/ethereum/EIPs/issues/20 * Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom( address _from, address _to, uint256 _value ) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance( address _owner, address _spender ) public view returns (uint256) { return allowed[_owner][_spender]; } /** * @dev Increase the amount of tokens that an owner allowed to a spender. * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _addedValue The amount of tokens to increase the allowance by. */ function increaseApproval( address _spender, uint256 _addedValue ) public returns (bool) { allowed[msg.sender][_spender] = ( allowed[msg.sender][_spender].add(_addedValue)); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } /** * @dev Decrease the amount of tokens that an owner allowed to a spender. * approve should be called when allowed[_spender] == 0. To decrement * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseApproval( address _spender, uint256 _subtractedValue ) public returns (bool) { uint256 oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable { address payable public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to relinquish control of the contract. * @notice Renouncing to ownership will leave the contract without an owner. * It will not be possible to call the functions with the `onlyOwner` * modifier anymore. */ function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function transferOwnership(address payable _newOwner) public onlyOwner { _transferOwnership(_newOwner); } /** * @dev Transfers control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function _transferOwnership(address payable _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } /** * @title Mintable token * @dev Simple ERC20 Token example, with mintable token creation * Based on code by TokenMarketNet: https://github.com/TokenMarketNet/ico/blob/master/contracts/MintableToken.sol */ contract MintableToken is StandardToken, Ownable { event Mint(address indexed to, uint256 amount); event MintFinished(); bool public mintingFinished = false; modifier canMint() { require(!mintingFinished); _; } modifier hasMintPermission() { require(msg.sender == owner); _; } /** * @dev Function to mint tokens * @param _to The address that will receive the minted tokens. * @param _amount The amount of tokens to mint. * @return A boolean that indicates if the operation was successful. */ function mint( address _to, uint256 _amount ) hasMintPermission canMint public returns (bool) { totalSupply_ = totalSupply_.add(_amount); balances[_to] = balances[_to].add(_amount); emit Mint(_to, _amount); emit Transfer(address(0), _to, _amount); return true; } /** * @dev Function to stop minting new tokens. * @return True if the operation was successful. */ function finishMinting() onlyOwner canMint public returns (bool) { mintingFinished = true; emit MintFinished(); return true; } } /** * @title Contracts that should not own Ether * @author Remco Bloemen <remco@2π.com> * @dev This tries to block incoming ether to prevent accidental loss of Ether. Should Ether end up * in the contract, it will allow the owner to reclaim this ether. * @notice Ether can still be sent to this contract by: * calling functions labeled `payable` * `selfdestruct(contract_address)` * mining directly to the contract address */ contract HasNoEther is Ownable { /** * @dev Constructor that rejects incoming Ether * The `payable` flag is added so we can access `msg.value` without compiler warning. If we * leave out payable, then Solidity will allow inheriting contracts to implement a payable * constructor. By doing it this way we prevent a payable constructor from working. Alternatively * we could use assembly to access msg.value. */ constructor() public payable { require(msg.value == 0); } /** * @dev Disallows direct send by settings a default function without the `payable` flag. */ function() external { } /** * @dev Transfer all Ether held by the contract to the owner. */ function reclaimEther() external onlyOwner { owner.transfer(address(this).balance); } } /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure. * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { function safeTransfer(ERC20Basic token, address to, uint256 value) internal { require(token.transfer(to, value)); } function safeTransferFrom( ERC20 token, address from, address to, uint256 value ) internal { require(token.transferFrom(from, to, value)); } function safeApprove(ERC20 token, address spender, uint256 value) internal { require(token.approve(spender, value)); } } /** * @title Contracts that should be able to recover tokens * @author SylTi * @dev This allow a contract to recover any ERC20 token received in a contract by transferring the balance to the contract owner. * This will prevent any accidental loss of tokens. */ contract CanReclaimToken is Ownable { using SafeERC20 for ERC20Basic; /** * @dev Reclaim all ERC20Basic compatible tokens * @param token ERC20Basic The address of the token contract */ function reclaimToken(ERC20Basic token) external onlyOwner { uint256 balance = token.balanceOf(address(this)); token.safeTransfer(owner, balance); } } /** * @title Contracts that should not own Tokens * @author Remco Bloemen <remco@2π.com> * @dev This blocks incoming ERC223 tokens to prevent accidental loss of tokens. * Should tokens (any ERC20Basic compatible) end up in the contract, it allows the * owner to reclaim the tokens. */ contract HasNoTokens is CanReclaimToken { /** * @dev Reject all ERC223 compatible tokens * @param from_ address The address that is transferring the tokens * @param value_ uint256 the amount of the specified token * @param data_ Bytes The data passed from the caller. */ function tokenFallback(address from_, uint256 value_, bytes calldata data_) pure external { from_; value_; data_; revert(); } } /** * @title Contracts that should not own Contracts * @author Remco Bloemen <remco@2π.com> * @dev Should contracts (anything Ownable) end up being owned by this contract, it allows the owner * of this contract to reclaim ownership of the contracts. */ contract HasNoContracts is Ownable { /** * @dev Reclaim ownership of Ownable contracts * @param contractAddr The address of the Ownable to be reclaimed. */ function reclaimContract(address contractAddr) external onlyOwner { Ownable contractInst = Ownable(contractAddr); contractInst.transferOwnership(owner); } } /** * @title Base contract for contracts that should not own things. * @author Remco Bloemen <remco@2π.com> * @dev Solves a class of errors where a contract accidentally becomes owner of Ether, Tokens or * Owned contracts. See respective base contracts for details. */ contract NoOwner is HasNoEther, HasNoTokens, HasNoContracts { } /** * @title ERC865Token Token * * ERC865Token allows users paying transfers in tokens instead of gas * https://github.com/ethereum/EIPs/issues/865 * */ contract ERC865 is ERC20 { function transferPreSigned( bytes memory _signature, address _to, uint256 _value, uint256 _fee, uint256 _nonce ) public returns (bool); function approvePreSigned( bytes memory _signature, address _spender, uint256 _value, uint256 _fee, uint256 _nonce ) public returns (bool); function increaseApprovalPreSigned( bytes memory _signature, address _spender, uint256 _addedValue, uint256 _fee, uint256 _nonce ) public returns (bool); function decreaseApprovalPreSigned( bytes memory _signature, address _spender, uint256 _subtractedValue, uint256 _fee, uint256 _nonce ) public returns (bool); function transferFromPreSigned( bytes memory _signature, address _from, address _to, uint256 _value, uint256 _fee, uint256 _nonce ) public returns (bool); } /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder * of the private keys of a given address. */ library ECDSA { /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * (.note) This call _does not revert_ if the signature is invalid, or * if the signer is otherwise unable to be retrieved. In those scenarios, * the zero address is returned. * * (.warning) `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise) * be too long), and then calling `toEthSignedMessageHash` on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { // Check the signature length if (signature.length != 65) { return (address(0)); } // Divide the signature in r, s and v variables bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. // solhint-disable-next-line no-inline-assembly assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { return address(0); } if (v != 27 && v != 28) { return address(0); } // If the signature is valid (and not malleable), return the signer address return ecrecover(hash, v, r, s); } /** * @dev Returns an Ethereum Signed Message, created from a `hash`. This * replicates the behavior of the * [`eth_sign`](https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign) * JSON-RPC method. * * See `recover`. */ function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { // 32 is the length in bytes of hash, // enforced by the type signature above return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } } /** * @title ERC865Token Token * * ERC865Token allows users paying transfers in tokens instead of gas * https://github.com/ethereum/EIPs/issues/865 * */ contract ERC865Token is ERC865, StandardToken { using ECDSA for bytes32; /* Nonces of transfers performed */ mapping(bytes => bool) signatures; event TransferPreSigned(address indexed from, address indexed to, address indexed delegate, uint256 amount, uint256 fee); event ApprovalPreSigned(address indexed from, address indexed to, address indexed delegate, uint256 amount, uint256 fee); /** * @notice Submit a presigned transfer * @param _signature bytes The signature, issued by the owner. * @param _to address The address which you want to transfer to. * @param _value uint256 The amount of tokens to be transferred. * @param _fee uint256 The amount of tokens paid to msg.sender, by the owner. * @param _nonce uint256 Presigned transaction number. */ function transferPreSigned( bytes memory _signature, address _to, uint256 _value, uint256 _fee, uint256 _nonce ) public returns (bool) { require(_to != address(0)); require(signatures[_signature] == false); bytes32 hashedTx = transferPreSignedHashing(address(this), _to, _value, _fee, _nonce); address from = recover(hashedTx, _signature); require(from != address(0)); balances[from] = balances[from].sub(_value).sub(_fee); balances[_to] = balances[_to].add(_value); balances[msg.sender] = balances[msg.sender].add(_fee); signatures[_signature] = true; emit Transfer(from, _to, _value); emit Transfer(from, msg.sender, _fee); emit TransferPreSigned(from, _to, msg.sender, _value, _fee); return true; } /** * @notice Submit a presigned approval * @param _signature bytes The signature, issued by the owner. * @param _spender address The address which will spend the funds. * @param _value uint256 The amount of tokens to allow. * @param _fee uint256 The amount of tokens paid to msg.sender, by the owner. * @param _nonce uint256 Presigned transaction number. */ function approvePreSigned( bytes memory _signature, address _spender, uint256 _value, uint256 _fee, uint256 _nonce ) public returns (bool) { require(_spender != address(0)); require(signatures[_signature] == false); bytes32 hashedTx = approvePreSignedHashing(address(this), _spender, _value, _fee, _nonce); address from = recover(hashedTx, _signature); require(from != address(0)); allowed[from][_spender] = _value; balances[from] = balances[from].sub(_fee); balances[msg.sender] = balances[msg.sender].add(_fee); signatures[_signature] = true; emit Approval(from, _spender, _value); emit Transfer(from, msg.sender, _fee); emit ApprovalPreSigned(from, _spender, msg.sender, _value, _fee); return true; } /** * @notice Increase the amount of tokens that an owner allowed to a spender. * @param _signature bytes The signature, issued by the owner. * @param _spender address The address which will spend the funds. * @param _addedValue uint256 The amount of tokens to increase the allowance by. * @param _fee uint256 The amount of tokens paid to msg.sender, by the owner. * @param _nonce uint256 Presigned transaction number. */ function increaseApprovalPreSigned( bytes memory _signature, address _spender, uint256 _addedValue, uint256 _fee, uint256 _nonce ) public returns (bool) { require(_spender != address(0)); require(signatures[_signature] == false); bytes32 hashedTx = increaseApprovalPreSignedHashing(address(this), _spender, _addedValue, _fee, _nonce); address from = recover(hashedTx, _signature); require(from != address(0)); allowed[from][_spender] = allowed[from][_spender].add(_addedValue); balances[from] = balances[from].sub(_fee); balances[msg.sender] = balances[msg.sender].add(_fee); signatures[_signature] = true; emit Approval(from, _spender, allowed[from][_spender]); emit Transfer(from, msg.sender, _fee); emit ApprovalPreSigned(from, _spender, msg.sender, allowed[from][_spender], _fee); return true; } /** * @notice Decrease the amount of tokens that an owner allowed to a spender. * @param _signature bytes The signature, issued by the owner * @param _spender address The address which will spend the funds. * @param _subtractedValue uint256 The amount of tokens to decrease the allowance by. * @param _fee uint256 The amount of tokens paid to msg.sender, by the owner. * @param _nonce uint256 Presigned transaction number. */ function decreaseApprovalPreSigned( bytes memory _signature, address _spender, uint256 _subtractedValue, uint256 _fee, uint256 _nonce ) public returns (bool) { require(_spender != address(0)); require(signatures[_signature] == false); bytes32 hashedTx = decreaseApprovalPreSignedHashing(address(this), _spender, _subtractedValue, _fee, _nonce); address from = recover(hashedTx, _signature); require(from != address(0)); uint oldValue = allowed[from][_spender]; if (_subtractedValue > oldValue) { allowed[from][_spender] = 0; } else { allowed[from][_spender] = oldValue.sub(_subtractedValue); } balances[from] = balances[from].sub(_fee); balances[msg.sender] = balances[msg.sender].add(_fee); signatures[_signature] = true; emit Approval(from, _spender, _subtractedValue); emit Transfer(from, msg.sender, _fee); emit ApprovalPreSigned(from, _spender, msg.sender, allowed[from][_spender], _fee); return true; } /** * @notice Transfer tokens from one address to another * @param _signature bytes The signature, issued by the spender. * @param _from address The address which you want to send tokens from. * @param _to address The address which you want to transfer to. * @param _value uint256 The amount of tokens to be transferred. * @param _fee uint256 The amount of tokens paid to msg.sender, by the spender. * @param _nonce uint256 Presigned transaction number. */ function transferFromPreSigned( bytes memory _signature, address _from, address _to, uint256 _value, uint256 _fee, uint256 _nonce ) public returns (bool) { require(_to != address(0)); require(signatures[_signature] == false); bytes32 hashedTx = transferFromPreSignedHashing(address(this), _from, _to, _value, _fee, _nonce); address spender = recover(hashedTx, _signature); require(spender != address(0)); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][spender] = allowed[_from][spender].sub(_value); balances[spender] = balances[spender].sub(_fee); balances[msg.sender] = balances[msg.sender].add(_fee); signatures[_signature] = true; emit Transfer(_from, _to, _value); emit Transfer(spender, msg.sender, _fee); return true; } /** * @notice Hash (keccak256) of the payload used by transferPreSigned * @param _token address The address of the token. * @param _to address The address which you want to transfer to. * @param _value uint256 The amount of tokens to be transferred. * @param _fee uint256 The amount of tokens paid to msg.sender, by the owner. * @param _nonce uint256 Presigned transaction number. */ function transferPreSignedHashing( address _token, address _to, uint256 _value, uint256 _fee, uint256 _nonce ) public pure returns (bytes32) { /* "48664c16": transferPreSignedHashing(address,address,address,uint256,uint256,uint256) */ return keccak256(abi.encodePacked(bytes4(0x48664c16), _token, _to, _value, _fee, _nonce)); } /** * @notice Hash (keccak256) of the payload used by approvePreSigned * @param _token address The address of the token * @param _spender address The address which will spend the funds. * @param _value uint256 The amount of tokens to allow. * @param _fee uint256 The amount of tokens paid to msg.sender, by the owner. * @param _nonce uint256 Presigned transaction number. */ function approvePreSignedHashing( address _token, address _spender, uint256 _value, uint256 _fee, uint256 _nonce ) public pure returns (bytes32) { /* "f7ac9c2e": approvePreSignedHashing(address,address,uint256,uint256,uint256) */ return keccak256(abi.encodePacked(bytes4(0xf7ac9c2e), _token, _spender, _value, _fee, _nonce)); } /** * @notice Hash (keccak256) of the payload used by increaseApprovalPreSigned * @param _token address The address of the token * @param _spender address The address which will spend the funds. * @param _addedValue uint256 The amount of tokens to increase the allowance by. * @param _fee uint256 The amount of tokens paid to msg.sender, by the owner. * @param _nonce uint256 Presigned transaction number. */ function increaseApprovalPreSignedHashing( address _token, address _spender, uint256 _addedValue, uint256 _fee, uint256 _nonce ) public pure returns (bytes32) { /* "a45f71ff": increaseApprovalPreSignedHashing(address,address,uint256,uint256,uint256) */ return keccak256(abi.encodePacked(bytes4(0xa45f71ff), _token, _spender, _addedValue, _fee, _nonce)); } /** * @notice Hash (keccak256) of the payload used by decreaseApprovalPreSigned * @param _token address The address of the token * @param _spender address The address which will spend the funds. * @param _subtractedValue uint256 The amount of tokens to decrease the allowance by. * @param _fee uint256 The amount of tokens paid to msg.sender, by the owner. * @param _nonce uint256 Presigned transaction number. */ function decreaseApprovalPreSignedHashing( address _token, address _spender, uint256 _subtractedValue, uint256 _fee, uint256 _nonce ) public pure returns (bytes32) { /* "59388d78": decreaseApprovalPreSignedHashing(address,address,uint256,uint256,uint256) */ return keccak256(abi.encodePacked(bytes4(0x59388d78), _token, _spender, _subtractedValue, _fee, _nonce)); } /** * @notice Hash (keccak256) of the payload used by transferFromPreSigned * @param _token address The address of the token * @param _from address The address which you want to send tokens from. * @param _to address The address which you want to transfer to. * @param _value uint256 The amount of tokens to be transferred. * @param _fee uint256 The amount of tokens paid to msg.sender, by the spender. * @param _nonce uint256 Presigned transaction number. */ function transferFromPreSignedHashing( address _token, address _from, address _to, uint256 _value, uint256 _fee, uint256 _nonce ) public pure returns (bytes32) { /* "b7656dc5": transferFromPreSignedHashing(address,address,address,uint256,uint256,uint256) */ return keccak256(abi.encodePacked(bytes4(0xb7656dc5), _token, _from, _to, _value, _fee, _nonce)); } /** * @notice Recover signer address from a message by using his signature * @param hash bytes32 message, the hash is the signed message. What is recovered is the signer address. * @param sig bytes signature, the signature is generated using web3.eth.sign() */ function recover(bytes32 hash, bytes memory sig) public pure returns (address) { return hash.toEthSignedMessageHash().recover(sig); } } contract DFSToken is MintableToken, ERC865Token, NoOwner { string public symbol = 'DFS'; string public name = 'Fantasy Sports'; uint8 public constant decimals = 18; bool public transferEnabled; //allows to dissable transfers while minting and in case of emergency function setTransferEnabled(bool enable) onlyOwner public { transferEnabled = enable; } modifier canTransfer() { require( transferEnabled || msg.sender == owner); _; } function transfer(address _to, uint256 _value) canTransfer public returns (bool) { return super.transfer(_to, _value); } function transferFrom(address _from, address _to, uint256 _value) canTransfer public returns (bool) { return super.transferFrom(_from, _to, _value); } function transferPreSigned( bytes memory _signature, address _to, uint256 _value, uint256 _fee, uint256 _nonce ) public canTransfer returns (bool) { return super.transferPreSigned(_signature, _to, _value, _fee, _nonce); } function transferFromPreSigned( bytes memory _signature, address _from, address _to, uint256 _value, uint256 _fee, uint256 _nonce ) public canTransfer returns (bool) { return super.transferFromPreSigned(_signature, _from, _to, _value, _fee, _nonce); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"mintingFinished","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_fee","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"transferPreSigned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_token","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_fee","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"transferPreSignedHashing","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"}],"name":"reclaimToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"hash","type":"bytes32"},{"name":"sig","type":"bytes"}],"name":"recover","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"contractAddr","type":"address"}],"name":"reclaimContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"mint","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"transferEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_token","type":"address"},{"name":"_spender","type":"address"},{"name":"_subtractedValue","type":"uint256"},{"name":"_fee","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"decreaseApprovalPreSignedHashing","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"},{"name":"_fee","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"approvePreSigned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_subtractedValue","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"finishMinting","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_spender","type":"address"},{"name":"_subtractedValue","type":"uint256"},{"name":"_fee","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"decreaseApprovalPreSigned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"reclaimEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"enable","type":"bool"}],"name":"setTransferEnabled","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_token","type":"address"},{"name":"_spender","type":"address"},{"name":"_addedValue","type":"uint256"},{"name":"_fee","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"increaseApprovalPreSignedHashing","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_spender","type":"address"},{"name":"_addedValue","type":"uint256"},{"name":"_fee","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"increaseApprovalPreSigned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_token","type":"address"},{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_fee","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"transferFromPreSignedHashing","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_fee","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"transferFromPreSigned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"from_","type":"address"},{"name":"value_","type":"uint256"},{"name":"data_","type":"bytes"}],"name":"tokenFallback","outputs":[],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_addedValue","type":"uint256"}],"name":"increaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_token","type":"address"},{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"},{"name":"_fee","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"approvePreSignedHashing","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"payable":false,"stateMutability":"nonpayable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":true,"name":"delegate","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"fee","type":"uint256"}],"name":"TransferPreSigned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":true,"name":"delegate","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"fee","type":"uint256"}],"name":"ApprovalPreSigned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[],"name":"MintFinished","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"}]
Contract Creation Code
6003805460ff60a01b1916815560c060405260808190527f444653000000000000000000000000000000000000000000000000000000000060a09081526200004b9160059190620000b7565b5060408051808201909152600e8082527f46616e746173792053706f72747300000000000000000000000000000000000060209092019182526200009291600691620000b7565b50600380546001600160a01b031916331790553415620000b157600080fd5b6200015c565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620000fa57805160ff19168380011785556200012a565b828001600101855582156200012a579182015b828111156200012a5782518255916020019190600101906200010d565b50620001389291506200013c565b5090565b6200015991905b8082111562000138576000815560010162000143565b90565b612837806200016c6000396000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c8063715018a61161011a578063a9059cbb116100ad578063c0ee0b8a1161007c578063c0ee0b8a14610a13578063d73dd62314610a96578063dd62ed3e14610ac2578063f2fde38b14610af0578063f7ac9c2e14610b1657610206565b8063a9059cbb1461081b578063adb8249e14610847578063b7656dc514610905578063bca505151461094d57610206565b806395d89b41116100e957806395d89b41146107aa5780639f727c27146107b25780639fe9f623146107ba578063a45f71ff146107d957610206565b8063715018a6146106d45780637d64bcb4146106dc5780638be52783146106e45780638da5cb5b146107a257610206565b806323b872dd1161019d5780634cd412d51161016c5780634cd412d51461057a57806359388d7814610582578063617b390b146105c4578063661884631461068257806370a08231146106ae57610206565b806323b872dd146104d45780632aed7f3f1461050a578063313ce5671461053057806340c10f191461054e57610206565b806315420b71116101d957806315420b711461038b57806317ffc320146103df57806318160ddd1461040557806319045a251461040d57610206565b806305d2035b1461020857806306fdde0314610224578063095ea7b3146102a15780631296830d146102cd575b005b610210610b58565b604080519115158252519081900360200190f35b61022c610b68565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561026657818101518382015260200161024e565b50505050905090810190601f1680156102935780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610210600480360360408110156102b757600080fd5b506001600160a01b038135169060200135610bf6565b610210600480360360a08110156102e357600080fd5b810190602081018135600160201b8111156102fd57600080fd5b82018360208201111561030f57600080fd5b803590602001918460018302840111600160201b8311171561033057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b038335169350505060208101359060408101359060600135610c4b565b6103cd600480360360a08110156103a157600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060800135610c89565b60408051918252519081900360200190f35b610206600480360360208110156103f557600080fd5b50356001600160a01b0316610cf2565b6103cd610da6565b6104b86004803603604081101561042357600080fd5b81359190810190604081016020820135600160201b81111561044457600080fd5b82018360208201111561045657600080fd5b803590602001918460018302840111600160201b8311171561047757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610dac945050505050565b604080516001600160a01b039092168252519081900360200190f35b610210600480360360608110156104ea57600080fd5b506001600160a01b03813581169160208101359091169060400135610dce565b6102066004803603602081101561052057600080fd5b50356001600160a01b0316610e08565b610538610e89565b6040805160ff9092168252519081900360200190f35b6102106004803603604081101561056457600080fd5b506001600160a01b038135169060200135610e8e565b610210610f86565b6103cd600480360360a081101561059857600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060800135610f8f565b610210600480360360a08110156105da57600080fd5b810190602081018135600160201b8111156105f457600080fd5b82018360208201111561060657600080fd5b803590602001918460018302840111600160201b8311171561062757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b038335169350505060208101359060408101359060600135610ff8565b6102106004803603604081101561069857600080fd5b506001600160a01b038135169060200135611281565b6103cd600480360360208110156106c457600080fd5b50356001600160a01b031661135f565b61020661137a565b6102106113db565b610210600480360360a08110156106fa57600080fd5b810190602081018135600160201b81111561071457600080fd5b82018360208201111561072657600080fd5b803590602001918460018302840111600160201b8311171561074757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b03833516935050506020810135906040810135906060013561144e565b6104b8611756565b61022c611765565b6102066117c0565b610206600480360360208110156107d057600080fd5b50351515611814565b6103cd600480360360a08110156107ef57600080fd5b506001600160a01b0381358116916020810135909116906040810135906060810135906080013561183e565b6102106004803603604081101561083157600080fd5b506001600160a01b0381351690602001356118a7565b610210600480360360a081101561085d57600080fd5b810190602081018135600160201b81111561087757600080fd5b82018360208201111561088957600080fd5b803590602001918460018302840111600160201b831117156108aa57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b0383351693505050602081013590604081013590606001356118d8565b6103cd600480360360c081101561091b57600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060808101359060a00135611bb7565b610210600480360360c081101561096357600080fd5b810190602081018135600160201b81111561097d57600080fd5b82018360208201111561098f57600080fd5b803590602001918460018302840111600160201b831117156109b057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b0383358116945060208401351692604081013592506060810135915060800135611c25565b61020660048036036060811015610a2957600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b811115610a5857600080fd5b820183602082011115610a6a57600080fd5b803590602001918460018302840111600160201b83111715610a8b57600080fd5b509092509050611c65565b61021060048036036040811015610aac57600080fd5b506001600160a01b038135169060200135611c6a565b6103cd60048036036040811015610ad857600080fd5b506001600160a01b0381358116916020013516611cf1565b61020660048036036020811015610b0657600080fd5b50356001600160a01b0316611d1c565b6103cd600480360360a0811015610b2c57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060800135611d3c565b600354600160a01b900460ff1681565b6006805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610bee5780601f10610bc357610100808354040283529160200191610bee565b820191906000526020600020905b815481529060010190602001808311610bd157829003601f168201915b505050505081565b3360008181526002602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390926000805160206127e3833981519152928290030190a35060015b92915050565b60075460009060ff1680610c6957506003546001600160a01b031633145b610c7257600080fd5b610c7f8686868686611da5565b9695505050505050565b60408051632433260b60e11b6020808301919091526001600160601b0319606089811b8216602485015288901b166038830152604c8201869052606c8201859052608c8083018590528351808403909101815260ac909201909252805191012095945050505050565b6003546001600160a01b03163314610d0957600080fd5b604080516370a0823160e01b815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015610d5357600080fd5b505afa158015610d67573d6000803e3d6000fd5b505050506040513d6020811015610d7d57600080fd5b5051600354909150610da2906001600160a01b0384811691168363ffffffff61205b16565b5050565b60015490565b6000610dc782610dbb856120f5565b9063ffffffff61214616565b9392505050565b60075460009060ff1680610dec57506003546001600160a01b031633145b610df557600080fd5b610e00848484612234565b949350505050565b6003546001600160a01b03163314610e1f57600080fd5b6003546040805163f2fde38b60e01b81526001600160a01b0392831660048201529051839283169163f2fde38b91602480830192600092919082900301818387803b158015610e6d57600080fd5b505af1158015610e81573d6000803e3d6000fd5b505050505050565b601281565b6003546000906001600160a01b03163314610ea857600080fd5b600354600160a01b900460ff1615610ebf57600080fd5b600154610ed2908363ffffffff61239716565b6001556001600160a01b038316600090815260208190526040902054610efe908363ffffffff61239716565b6001600160a01b03841660008181526020818152604091829020939093558051858152905191927f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688592918290030190a26040805183815290516001600160a01b038516916000916000805160206127c38339815191529181900360200190a350600192915050565b60075460ff1681565b60408051630b2711af60e31b6020808301919091526001600160601b0319606089811b8216602485015288901b166038830152604c8201869052606c8201859052608c8083018590528351808403909101815260ac909201909252805191012095945050505050565b60006001600160a01b03851661100d57600080fd5b6004866040518082805190602001908083835b6020831061103f5780518252601f199092019160209182019101611020565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff1615915061107c905057600080fd5b600061108b3087878787611d3c565b905060006110998289610dac565b90506001600160a01b0381166110ae57600080fd5b6001600160a01b038082166000818152600260209081526040808320948c1683529381528382208a90559181529081905220546110f1908663ffffffff6123a416565b6001600160a01b038216600090815260208190526040808220929092553381522054611123908663ffffffff61239716565b600080336001600160a01b03166001600160a01b031681526020019081526020016000208190555060016004896040518082805190602001908083835b6020831061117f5780518252601f199092019160209182019101611160565b51815160209384036101000a6000190180199092169116179052920194855250604080519485900382018520805460ff1916961515969096179095558a845293516001600160a01b038c811695908716946000805160206127e38339815191529450829003019150a360408051868152905133916001600160a01b038416916000805160206127c38339815191529181900360200190a3336001600160a01b0316876001600160a01b0316826001600160a01b03167f43a220267705e74ee2ceafd46afc841850db6f85a662189a7def697bbdd90ffb8989604051808381526020018281526020019250505060405180910390a4506001979650505050505050565b3360009081526002602090815260408083206001600160a01b0386168452909152812054808311156112d6573360009081526002602090815260408083206001600160a01b038816845290915281205561130b565b6112e6818463ffffffff6123a416565b3360009081526002602090815260408083206001600160a01b03891684529091529020555b3360008181526002602090815260408083206001600160a01b0389168085529083529281902054815190815290519293926000805160206127e3833981519152929181900390910190a35060019392505050565b6001600160a01b031660009081526020819052604090205490565b6003546001600160a01b0316331461139157600080fd5b6003546040516001600160a01b03909116907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a2600380546001600160a01b0319169055565b6003546000906001600160a01b031633146113f557600080fd5b600354600160a01b900460ff161561140c57600080fd5b6003805460ff60a01b1916600160a01b1790556040517fae5184fba832cb2b1f702aca6117b8d265eaf03ad33eb133f19dde0f5920fa0890600090a150600190565b60006001600160a01b03851661146357600080fd5b6004866040518082805190602001908083835b602083106114955780518252601f199092019160209182019101611476565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff161591506114d2905057600080fd5b60006114e13087878787610f8f565b905060006114ef8289610dac565b90506001600160a01b03811661150457600080fd5b6001600160a01b038082166000908152600260209081526040808320938b16835292905220548087111561155f576001600160a01b038083166000908152600260209081526040808320938c16835292905290812055611596565b61156f818863ffffffff6123a416565b6001600160a01b038084166000908152600260209081526040808320938d16835292905220555b6001600160a01b0382166000908152602081905260409020546115bf908763ffffffff6123a416565b6001600160a01b0383166000908152602081905260408082209290925533815220546115f1908763ffffffff61239716565b600080336001600160a01b03166001600160a01b0316815260200190815260200160002081905550600160048a6040518082805190602001908083835b6020831061164d5780518252601f19909201916020918201910161162e565b51815160209384036101000a6000190180199092169116179052920194855250604080519485900382018520805460ff1916961515969096179095558b845293516001600160a01b038d811695908816946000805160206127e38339815191529450829003019150a360408051878152905133916001600160a01b038516916000805160206127c38339815191529181900360200190a36001600160a01b038281166000818152600260209081526040808320948d16808452948252918290205482519081529081018a90528151339493927f43a220267705e74ee2ceafd46afc841850db6f85a662189a7def697bbdd90ffb928290030190a450600198975050505050505050565b6003546001600160a01b031681565b6005805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610bee5780601f10610bc357610100808354040283529160200191610bee565b6003546001600160a01b031633146117d757600080fd5b6003546040516001600160a01b0390911690303180156108fc02916000818181858888f19350505050158015611811573d6000803e3d6000fd5b50565b6003546001600160a01b0316331461182b57600080fd5b6007805460ff1916911515919091179055565b6040805163a45f71ff60e01b6020808301919091526001600160601b0319606089811b8216602485015288901b166038830152604c8201869052606c8201859052608c8083018590528351808403909101815260ac909201909252805191012095945050505050565b60075460009060ff16806118c557506003546001600160a01b031633145b6118ce57600080fd5b610dc783836123b6565b60006001600160a01b0385166118ed57600080fd5b6004866040518082805190602001908083835b6020831061191f5780518252601f199092019160209182019101611900565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff1615915061195c905057600080fd5b600061196b308787878761183e565b905060006119798289610dac565b90506001600160a01b03811661198e57600080fd5b6001600160a01b038082166000908152600260209081526040808320938b16835292905220546119c4908763ffffffff61239716565b6001600160a01b038083166000818152600260209081526040808320948d1683529381528382209490945590815291829052902054611a09908663ffffffff6123a416565b6001600160a01b038216600090815260208190526040808220929092553381522054611a3b908663ffffffff61239716565b600080336001600160a01b03166001600160a01b031681526020019081526020016000208190555060016004896040518082805190602001908083835b60208310611a975780518252601f199092019160209182019101611a78565b51815160209384036101000a6000190180199092169116179052920194855250604080519485900382018520805460ff1916961515969096179095556001600160a01b03868116600081815260028452878120928f1680825292845287902054865295519095946000805160206127e383398151915294508190039091019150a360408051868152905133916001600160a01b038416916000805160206127c38339815191529181900360200190a36001600160a01b038181166000818152600260209081526040808320948c16808452948252918290205482519081529081018990528151339493927f43a220267705e74ee2ceafd46afc841850db6f85a662189a7def697bbdd90ffb928290030190a4506001979650505050505050565b6040805163b7656dc560e01b6020808301919091526001600160601b03196060998a1b8116602484015297891b8816603883015295881b909616604c87015295850192909252608084015260a0808401919091528351808403909101815260c0909201909252805191012090565b60075460009060ff1680611c4357506003546001600160a01b031633145b611c4c57600080fd5b611c5a878787878787612483565b979650505050505050565b600080fd5b3360009081526002602090815260408083206001600160a01b0386168452909152812054611c9e908363ffffffff61239716565b3360008181526002602090815260408083206001600160a01b0389168085529083529281902085905580519485525191936000805160206127e3833981519152929081900390910190a350600192915050565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6003546001600160a01b03163314611d3357600080fd5b61181181612753565b60408051637bd64e1760e11b6020808301919091526001600160601b0319606089811b8216602485015288901b166038830152604c8201869052606c8201859052608c8083018590528351808403909101815260ac909201909252805191012095945050505050565b60006001600160a01b038516611dba57600080fd5b6004866040518082805190602001908083835b60208310611dec5780518252601f199092019160209182019101611dcd565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff16159150611e29905057600080fd5b6000611e383087878787610c89565b90506000611e468289610dac565b90506001600160a01b038116611e5b57600080fd5b6001600160a01b038116600090815260208190526040902054611e96908690611e8a908963ffffffff6123a416565b9063ffffffff6123a416565b6001600160a01b038083166000908152602081905260408082209390935590891681522054611ecb908763ffffffff61239716565b6001600160a01b038816600090815260208190526040808220929092553381522054611efd908663ffffffff61239716565b600080336001600160a01b03166001600160a01b031681526020019081526020016000208190555060016004896040518082805190602001908083835b60208310611f595780518252601f199092019160209182019101611f3a565b51815160209384036101000a6000190180199092169116179052920194855250604080519485900382018520805460ff1916961515969096179095558a845293516001600160a01b038c811695908716946000805160206127c38339815191529450829003019150a360408051868152905133916001600160a01b038416916000805160206127c38339815191529181900360200190a3336001600160a01b0316876001600160a01b0316826001600160a01b03167fec5a73fd1f178be20c1bca1b406cbf4b5c20d833b66e582fc122fb4baa0fc2a48989604051808381526020018281526020019250505060405180910390a4506001979650505050505050565b826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156120bb57600080fd5b505af11580156120cf573d6000803e3d6000fd5b505050506040513d60208110156120e557600080fd5b50516120f057600080fd5b505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b6000815160411461215957506000610c45565b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a082111561219f5760009350505050610c45565b8060ff16601b141580156121b757508060ff16601c14155b156121c85760009350505050610c45565b6040805160008152602080820180845289905260ff8416828401526060820186905260808201859052915160019260a0808401939192601f1981019281900390910190855afa15801561221f573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b60006001600160a01b03831661224957600080fd5b6001600160a01b03841660009081526020819052604090205482111561226e57600080fd5b6001600160a01b038416600090815260026020908152604080832033845290915290205482111561229e57600080fd5b6001600160a01b0384166000908152602081905260409020546122c7908363ffffffff6123a416565b6001600160a01b0380861660009081526020819052604080822093909355908516815220546122fc908363ffffffff61239716565b6001600160a01b0380851660009081526020818152604080832094909455918716815260028252828120338252909152205461233e908363ffffffff6123a416565b6001600160a01b03808616600081815260026020908152604080832033845282529182902094909455805186815290519287169391926000805160206127c3833981519152929181900390910190a35060019392505050565b81810182811015610c4557fe5b6000828211156123b057fe5b50900390565b60006001600160a01b0383166123cb57600080fd5b336000908152602081905260409020548211156123e757600080fd5b33600090815260208190526040902054612407908363ffffffff6123a416565b33600090815260208190526040808220929092556001600160a01b03851681522054612439908363ffffffff61239716565b6001600160a01b038416600081815260208181526040918290209390935580518581529051919233926000805160206127c38339815191529281900390910190a350600192915050565b60006001600160a01b03851661249857600080fd5b6004876040518082805190602001908083835b602083106124ca5780518252601f1990920191602091820191016124ab565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff16159150612507905057600080fd5b6000612517308888888888611bb7565b90506000612525828a610dac565b90506001600160a01b03811661253a57600080fd5b6001600160a01b038816600090815260208190526040902054612563908763ffffffff6123a416565b6001600160a01b03808a166000908152602081905260408082209390935590891681522054612598908763ffffffff61239716565b6001600160a01b03808916600090815260208181526040808320949094558b831682526002815283822092851682529190915220546125dd908763ffffffff6123a416565b6001600160a01b03808a1660009081526002602090815260408083209386168352928152828220939093559182905290205461261f908663ffffffff6123a416565b6001600160a01b038216600090815260208190526040808220929092553381522054612651908663ffffffff61239716565b600080336001600160a01b03166001600160a01b0316815260200190815260200160002081905550600160048a6040518082805190602001908083835b602083106126ad5780518252601f19909201916020918201910161268e565b51815160209384036101000a6000190180199092169116179052920194855250604080519485900382018520805460ff1916961515969096179095558a845293516001600160a01b038c811695908e16946000805160206127c38339815191529450829003019150a360408051868152905133916001600160a01b038416916000805160206127c38339815191529181900360200190a350600198975050505050505050565b6001600160a01b03811661276657600080fd5b6003546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600380546001600160a01b0319166001600160a01b039290921691909117905556feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a265627a7a7230582022558afb59017a1f10d920bd4c55d8a8c1ecd7a7353ff3c36262adf34e12f08764736f6c634300050a0032
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102065760003560e01c8063715018a61161011a578063a9059cbb116100ad578063c0ee0b8a1161007c578063c0ee0b8a14610a13578063d73dd62314610a96578063dd62ed3e14610ac2578063f2fde38b14610af0578063f7ac9c2e14610b1657610206565b8063a9059cbb1461081b578063adb8249e14610847578063b7656dc514610905578063bca505151461094d57610206565b806395d89b41116100e957806395d89b41146107aa5780639f727c27146107b25780639fe9f623146107ba578063a45f71ff146107d957610206565b8063715018a6146106d45780637d64bcb4146106dc5780638be52783146106e45780638da5cb5b146107a257610206565b806323b872dd1161019d5780634cd412d51161016c5780634cd412d51461057a57806359388d7814610582578063617b390b146105c4578063661884631461068257806370a08231146106ae57610206565b806323b872dd146104d45780632aed7f3f1461050a578063313ce5671461053057806340c10f191461054e57610206565b806315420b71116101d957806315420b711461038b57806317ffc320146103df57806318160ddd1461040557806319045a251461040d57610206565b806305d2035b1461020857806306fdde0314610224578063095ea7b3146102a15780631296830d146102cd575b005b610210610b58565b604080519115158252519081900360200190f35b61022c610b68565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561026657818101518382015260200161024e565b50505050905090810190601f1680156102935780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610210600480360360408110156102b757600080fd5b506001600160a01b038135169060200135610bf6565b610210600480360360a08110156102e357600080fd5b810190602081018135600160201b8111156102fd57600080fd5b82018360208201111561030f57600080fd5b803590602001918460018302840111600160201b8311171561033057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b038335169350505060208101359060408101359060600135610c4b565b6103cd600480360360a08110156103a157600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060800135610c89565b60408051918252519081900360200190f35b610206600480360360208110156103f557600080fd5b50356001600160a01b0316610cf2565b6103cd610da6565b6104b86004803603604081101561042357600080fd5b81359190810190604081016020820135600160201b81111561044457600080fd5b82018360208201111561045657600080fd5b803590602001918460018302840111600160201b8311171561047757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610dac945050505050565b604080516001600160a01b039092168252519081900360200190f35b610210600480360360608110156104ea57600080fd5b506001600160a01b03813581169160208101359091169060400135610dce565b6102066004803603602081101561052057600080fd5b50356001600160a01b0316610e08565b610538610e89565b6040805160ff9092168252519081900360200190f35b6102106004803603604081101561056457600080fd5b506001600160a01b038135169060200135610e8e565b610210610f86565b6103cd600480360360a081101561059857600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060800135610f8f565b610210600480360360a08110156105da57600080fd5b810190602081018135600160201b8111156105f457600080fd5b82018360208201111561060657600080fd5b803590602001918460018302840111600160201b8311171561062757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b038335169350505060208101359060408101359060600135610ff8565b6102106004803603604081101561069857600080fd5b506001600160a01b038135169060200135611281565b6103cd600480360360208110156106c457600080fd5b50356001600160a01b031661135f565b61020661137a565b6102106113db565b610210600480360360a08110156106fa57600080fd5b810190602081018135600160201b81111561071457600080fd5b82018360208201111561072657600080fd5b803590602001918460018302840111600160201b8311171561074757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b03833516935050506020810135906040810135906060013561144e565b6104b8611756565b61022c611765565b6102066117c0565b610206600480360360208110156107d057600080fd5b50351515611814565b6103cd600480360360a08110156107ef57600080fd5b506001600160a01b0381358116916020810135909116906040810135906060810135906080013561183e565b6102106004803603604081101561083157600080fd5b506001600160a01b0381351690602001356118a7565b610210600480360360a081101561085d57600080fd5b810190602081018135600160201b81111561087757600080fd5b82018360208201111561088957600080fd5b803590602001918460018302840111600160201b831117156108aa57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b0383351693505050602081013590604081013590606001356118d8565b6103cd600480360360c081101561091b57600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060808101359060a00135611bb7565b610210600480360360c081101561096357600080fd5b810190602081018135600160201b81111561097d57600080fd5b82018360208201111561098f57600080fd5b803590602001918460018302840111600160201b831117156109b057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b0383358116945060208401351692604081013592506060810135915060800135611c25565b61020660048036036060811015610a2957600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b811115610a5857600080fd5b820183602082011115610a6a57600080fd5b803590602001918460018302840111600160201b83111715610a8b57600080fd5b509092509050611c65565b61021060048036036040811015610aac57600080fd5b506001600160a01b038135169060200135611c6a565b6103cd60048036036040811015610ad857600080fd5b506001600160a01b0381358116916020013516611cf1565b61020660048036036020811015610b0657600080fd5b50356001600160a01b0316611d1c565b6103cd600480360360a0811015610b2c57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060800135611d3c565b600354600160a01b900460ff1681565b6006805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610bee5780601f10610bc357610100808354040283529160200191610bee565b820191906000526020600020905b815481529060010190602001808311610bd157829003601f168201915b505050505081565b3360008181526002602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390926000805160206127e3833981519152928290030190a35060015b92915050565b60075460009060ff1680610c6957506003546001600160a01b031633145b610c7257600080fd5b610c7f8686868686611da5565b9695505050505050565b60408051632433260b60e11b6020808301919091526001600160601b0319606089811b8216602485015288901b166038830152604c8201869052606c8201859052608c8083018590528351808403909101815260ac909201909252805191012095945050505050565b6003546001600160a01b03163314610d0957600080fd5b604080516370a0823160e01b815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015610d5357600080fd5b505afa158015610d67573d6000803e3d6000fd5b505050506040513d6020811015610d7d57600080fd5b5051600354909150610da2906001600160a01b0384811691168363ffffffff61205b16565b5050565b60015490565b6000610dc782610dbb856120f5565b9063ffffffff61214616565b9392505050565b60075460009060ff1680610dec57506003546001600160a01b031633145b610df557600080fd5b610e00848484612234565b949350505050565b6003546001600160a01b03163314610e1f57600080fd5b6003546040805163f2fde38b60e01b81526001600160a01b0392831660048201529051839283169163f2fde38b91602480830192600092919082900301818387803b158015610e6d57600080fd5b505af1158015610e81573d6000803e3d6000fd5b505050505050565b601281565b6003546000906001600160a01b03163314610ea857600080fd5b600354600160a01b900460ff1615610ebf57600080fd5b600154610ed2908363ffffffff61239716565b6001556001600160a01b038316600090815260208190526040902054610efe908363ffffffff61239716565b6001600160a01b03841660008181526020818152604091829020939093558051858152905191927f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688592918290030190a26040805183815290516001600160a01b038516916000916000805160206127c38339815191529181900360200190a350600192915050565b60075460ff1681565b60408051630b2711af60e31b6020808301919091526001600160601b0319606089811b8216602485015288901b166038830152604c8201869052606c8201859052608c8083018590528351808403909101815260ac909201909252805191012095945050505050565b60006001600160a01b03851661100d57600080fd5b6004866040518082805190602001908083835b6020831061103f5780518252601f199092019160209182019101611020565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff1615915061107c905057600080fd5b600061108b3087878787611d3c565b905060006110998289610dac565b90506001600160a01b0381166110ae57600080fd5b6001600160a01b038082166000818152600260209081526040808320948c1683529381528382208a90559181529081905220546110f1908663ffffffff6123a416565b6001600160a01b038216600090815260208190526040808220929092553381522054611123908663ffffffff61239716565b600080336001600160a01b03166001600160a01b031681526020019081526020016000208190555060016004896040518082805190602001908083835b6020831061117f5780518252601f199092019160209182019101611160565b51815160209384036101000a6000190180199092169116179052920194855250604080519485900382018520805460ff1916961515969096179095558a845293516001600160a01b038c811695908716946000805160206127e38339815191529450829003019150a360408051868152905133916001600160a01b038416916000805160206127c38339815191529181900360200190a3336001600160a01b0316876001600160a01b0316826001600160a01b03167f43a220267705e74ee2ceafd46afc841850db6f85a662189a7def697bbdd90ffb8989604051808381526020018281526020019250505060405180910390a4506001979650505050505050565b3360009081526002602090815260408083206001600160a01b0386168452909152812054808311156112d6573360009081526002602090815260408083206001600160a01b038816845290915281205561130b565b6112e6818463ffffffff6123a416565b3360009081526002602090815260408083206001600160a01b03891684529091529020555b3360008181526002602090815260408083206001600160a01b0389168085529083529281902054815190815290519293926000805160206127e3833981519152929181900390910190a35060019392505050565b6001600160a01b031660009081526020819052604090205490565b6003546001600160a01b0316331461139157600080fd5b6003546040516001600160a01b03909116907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a2600380546001600160a01b0319169055565b6003546000906001600160a01b031633146113f557600080fd5b600354600160a01b900460ff161561140c57600080fd5b6003805460ff60a01b1916600160a01b1790556040517fae5184fba832cb2b1f702aca6117b8d265eaf03ad33eb133f19dde0f5920fa0890600090a150600190565b60006001600160a01b03851661146357600080fd5b6004866040518082805190602001908083835b602083106114955780518252601f199092019160209182019101611476565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff161591506114d2905057600080fd5b60006114e13087878787610f8f565b905060006114ef8289610dac565b90506001600160a01b03811661150457600080fd5b6001600160a01b038082166000908152600260209081526040808320938b16835292905220548087111561155f576001600160a01b038083166000908152600260209081526040808320938c16835292905290812055611596565b61156f818863ffffffff6123a416565b6001600160a01b038084166000908152600260209081526040808320938d16835292905220555b6001600160a01b0382166000908152602081905260409020546115bf908763ffffffff6123a416565b6001600160a01b0383166000908152602081905260408082209290925533815220546115f1908763ffffffff61239716565b600080336001600160a01b03166001600160a01b0316815260200190815260200160002081905550600160048a6040518082805190602001908083835b6020831061164d5780518252601f19909201916020918201910161162e565b51815160209384036101000a6000190180199092169116179052920194855250604080519485900382018520805460ff1916961515969096179095558b845293516001600160a01b038d811695908816946000805160206127e38339815191529450829003019150a360408051878152905133916001600160a01b038516916000805160206127c38339815191529181900360200190a36001600160a01b038281166000818152600260209081526040808320948d16808452948252918290205482519081529081018a90528151339493927f43a220267705e74ee2ceafd46afc841850db6f85a662189a7def697bbdd90ffb928290030190a450600198975050505050505050565b6003546001600160a01b031681565b6005805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610bee5780601f10610bc357610100808354040283529160200191610bee565b6003546001600160a01b031633146117d757600080fd5b6003546040516001600160a01b0390911690303180156108fc02916000818181858888f19350505050158015611811573d6000803e3d6000fd5b50565b6003546001600160a01b0316331461182b57600080fd5b6007805460ff1916911515919091179055565b6040805163a45f71ff60e01b6020808301919091526001600160601b0319606089811b8216602485015288901b166038830152604c8201869052606c8201859052608c8083018590528351808403909101815260ac909201909252805191012095945050505050565b60075460009060ff16806118c557506003546001600160a01b031633145b6118ce57600080fd5b610dc783836123b6565b60006001600160a01b0385166118ed57600080fd5b6004866040518082805190602001908083835b6020831061191f5780518252601f199092019160209182019101611900565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff1615915061195c905057600080fd5b600061196b308787878761183e565b905060006119798289610dac565b90506001600160a01b03811661198e57600080fd5b6001600160a01b038082166000908152600260209081526040808320938b16835292905220546119c4908763ffffffff61239716565b6001600160a01b038083166000818152600260209081526040808320948d1683529381528382209490945590815291829052902054611a09908663ffffffff6123a416565b6001600160a01b038216600090815260208190526040808220929092553381522054611a3b908663ffffffff61239716565b600080336001600160a01b03166001600160a01b031681526020019081526020016000208190555060016004896040518082805190602001908083835b60208310611a975780518252601f199092019160209182019101611a78565b51815160209384036101000a6000190180199092169116179052920194855250604080519485900382018520805460ff1916961515969096179095556001600160a01b03868116600081815260028452878120928f1680825292845287902054865295519095946000805160206127e383398151915294508190039091019150a360408051868152905133916001600160a01b038416916000805160206127c38339815191529181900360200190a36001600160a01b038181166000818152600260209081526040808320948c16808452948252918290205482519081529081018990528151339493927f43a220267705e74ee2ceafd46afc841850db6f85a662189a7def697bbdd90ffb928290030190a4506001979650505050505050565b6040805163b7656dc560e01b6020808301919091526001600160601b03196060998a1b8116602484015297891b8816603883015295881b909616604c87015295850192909252608084015260a0808401919091528351808403909101815260c0909201909252805191012090565b60075460009060ff1680611c4357506003546001600160a01b031633145b611c4c57600080fd5b611c5a878787878787612483565b979650505050505050565b600080fd5b3360009081526002602090815260408083206001600160a01b0386168452909152812054611c9e908363ffffffff61239716565b3360008181526002602090815260408083206001600160a01b0389168085529083529281902085905580519485525191936000805160206127e3833981519152929081900390910190a350600192915050565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6003546001600160a01b03163314611d3357600080fd5b61181181612753565b60408051637bd64e1760e11b6020808301919091526001600160601b0319606089811b8216602485015288901b166038830152604c8201869052606c8201859052608c8083018590528351808403909101815260ac909201909252805191012095945050505050565b60006001600160a01b038516611dba57600080fd5b6004866040518082805190602001908083835b60208310611dec5780518252601f199092019160209182019101611dcd565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff16159150611e29905057600080fd5b6000611e383087878787610c89565b90506000611e468289610dac565b90506001600160a01b038116611e5b57600080fd5b6001600160a01b038116600090815260208190526040902054611e96908690611e8a908963ffffffff6123a416565b9063ffffffff6123a416565b6001600160a01b038083166000908152602081905260408082209390935590891681522054611ecb908763ffffffff61239716565b6001600160a01b038816600090815260208190526040808220929092553381522054611efd908663ffffffff61239716565b600080336001600160a01b03166001600160a01b031681526020019081526020016000208190555060016004896040518082805190602001908083835b60208310611f595780518252601f199092019160209182019101611f3a565b51815160209384036101000a6000190180199092169116179052920194855250604080519485900382018520805460ff1916961515969096179095558a845293516001600160a01b038c811695908716946000805160206127c38339815191529450829003019150a360408051868152905133916001600160a01b038416916000805160206127c38339815191529181900360200190a3336001600160a01b0316876001600160a01b0316826001600160a01b03167fec5a73fd1f178be20c1bca1b406cbf4b5c20d833b66e582fc122fb4baa0fc2a48989604051808381526020018281526020019250505060405180910390a4506001979650505050505050565b826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156120bb57600080fd5b505af11580156120cf573d6000803e3d6000fd5b505050506040513d60208110156120e557600080fd5b50516120f057600080fd5b505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b6000815160411461215957506000610c45565b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a082111561219f5760009350505050610c45565b8060ff16601b141580156121b757508060ff16601c14155b156121c85760009350505050610c45565b6040805160008152602080820180845289905260ff8416828401526060820186905260808201859052915160019260a0808401939192601f1981019281900390910190855afa15801561221f573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b60006001600160a01b03831661224957600080fd5b6001600160a01b03841660009081526020819052604090205482111561226e57600080fd5b6001600160a01b038416600090815260026020908152604080832033845290915290205482111561229e57600080fd5b6001600160a01b0384166000908152602081905260409020546122c7908363ffffffff6123a416565b6001600160a01b0380861660009081526020819052604080822093909355908516815220546122fc908363ffffffff61239716565b6001600160a01b0380851660009081526020818152604080832094909455918716815260028252828120338252909152205461233e908363ffffffff6123a416565b6001600160a01b03808616600081815260026020908152604080832033845282529182902094909455805186815290519287169391926000805160206127c3833981519152929181900390910190a35060019392505050565b81810182811015610c4557fe5b6000828211156123b057fe5b50900390565b60006001600160a01b0383166123cb57600080fd5b336000908152602081905260409020548211156123e757600080fd5b33600090815260208190526040902054612407908363ffffffff6123a416565b33600090815260208190526040808220929092556001600160a01b03851681522054612439908363ffffffff61239716565b6001600160a01b038416600081815260208181526040918290209390935580518581529051919233926000805160206127c38339815191529281900390910190a350600192915050565b60006001600160a01b03851661249857600080fd5b6004876040518082805190602001908083835b602083106124ca5780518252601f1990920191602091820191016124ab565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff16159150612507905057600080fd5b6000612517308888888888611bb7565b90506000612525828a610dac565b90506001600160a01b03811661253a57600080fd5b6001600160a01b038816600090815260208190526040902054612563908763ffffffff6123a416565b6001600160a01b03808a166000908152602081905260408082209390935590891681522054612598908763ffffffff61239716565b6001600160a01b03808916600090815260208181526040808320949094558b831682526002815283822092851682529190915220546125dd908763ffffffff6123a416565b6001600160a01b03808a1660009081526002602090815260408083209386168352928152828220939093559182905290205461261f908663ffffffff6123a416565b6001600160a01b038216600090815260208190526040808220929092553381522054612651908663ffffffff61239716565b600080336001600160a01b03166001600160a01b0316815260200190815260200160002081905550600160048a6040518082805190602001908083835b602083106126ad5780518252601f19909201916020918201910161268e565b51815160209384036101000a6000190180199092169116179052920194855250604080519485900382018520805460ff1916961515969096179095558a845293516001600160a01b038c811695908e16946000805160206127c38339815191529450829003019150a360408051868152905133916001600160a01b038416916000805160206127c38339815191529181900360200190a350600198975050505050505050565b6001600160a01b03811661276657600080fd5b6003546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600380546001600160a01b0319166001600160a01b039290921691909117905556feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a265627a7a7230582022558afb59017a1f10d920bd4c55d8a8c1ecd7a7353ff3c36262adf34e12f08764736f6c634300050a0032
Deployed Bytecode Sourcemap
33811:1511:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33811:1511:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10435:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;33910:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;33910:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5966:192;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;5966:192:0;;;;;;;;:::i;34640:317::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;34640:317:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;34640:317:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;34640:317:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;34640:317:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34640:317:0;;-1:-1:-1;;;;;;;34640:317:0;;;;-1:-1:-1;;;34640:317:0;;;;;;;;;;;;;;:::i;29202:432::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;29202:432:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;13964:161;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13964:161:0;-1:-1:-1;;;;;13964:161:0;;:::i;2792:85::-;;;:::i;33657:147::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;33657:147:0;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;33657:147:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;33657:147:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;33657:147:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33657:147:0;;-1:-1:-1;33657:147:0;;-1:-1:-1;;;;;33657:147:0:i;:::-;;;;-1:-1:-1;;;;;33657:147:0;;;;;;;;;;;;;;34468:164;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;34468:164:0;;;;;;;;;;;;;;;;;:::i;15324:167::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15324:167:0;-1:-1:-1;;;;;15324:167:0;;:::i;33954:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10872:326;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;10872:326:0;;;;;;;;:::i;33998:27::-;;;:::i;31897:470::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;31897:470:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;23212:904::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;23212:904:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;23212:904:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;23212:904:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;23212:904:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;23212:904:0;;-1:-1:-1;;;;;;;23212:904:0;;;;-1:-1:-1;;;23212:904:0;;;;;;;;;;;;;;:::i;7885:446::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;7885:446:0;;;;;;;;:::i;3576:101::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3576:101:0;-1:-1:-1;;;;;3576:101:0;;:::i;9360:114::-;;;:::i;11318:144::-;;;:::i;26074:1162::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;26074:1162:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;26074:1162:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;26074:1162:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;26074:1162:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;26074:1162:0;;-1:-1:-1;;;;;;;26074:1162:0;;;;-1:-1:-1;;;26074:1162:0;;;;;;;;;;;;;;:::i;8557:28::-;;;:::i;33875:::-;;;:::i;12639:93::-;;;:::i;34107:101::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34107:101:0;;;;:::i;30960:460::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;30960:460:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;34328:134::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;34328:134:0;;;;;;;;:::i;24593:1000::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;24593:1000:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;24593:1000:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;24593:1000:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;24593:1000:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;24593:1000:0;;-1:-1:-1;;;;;;;24593:1000:0;;;;-1:-1:-1;;;24593:1000:0;;;;;;;;;;;;;;:::i;32888:471::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;32888:471:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;34963:356::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;34963:356:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;34963:356:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;34963:356:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;34963:356:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34963:356:0;;-1:-1:-1;;;;;;;34963:356:0;;;;;-1:-1:-1;34963:356:0;;;;;;;;;;;-1:-1:-1;34963:356:0;;;;;-1:-1:-1;34963:356:0;;;;:::i;14726:148::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;14726:148:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;14726:148:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;14726:148:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;14726:148:0;;-1:-1:-1;14726:148:0;-1:-1:-1;14726:148:0;:::i;7110:307::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;7110:307:0;;;;;;;;:::i;6485:162::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;6485:162:0;;;;;;;;;;:::i;9642:113::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9642:113:0;-1:-1:-1;;;;;9642:113:0;;:::i;30064:432::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;30064:432:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;10435:35::-;;;-1:-1:-1;;;10435:35:0;;;;;:::o;33910:37::-;;;;;;;;;;;;;;;-1:-1:-1;;33910:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5966:192::-;6054:10;6033:4;6046:19;;;:7;:19;;;;;;;;-1:-1:-1;;;;;6046:29:0;;;;;;;;;;;:38;;;6096;;;;;;;6033:4;;6046:29;;6054:10;;-1:-1:-1;;;;;;;;;;;6096:38:0;;;;;;;-1:-1:-1;6148:4:0;5966:192;;;;;:::o;34640:317::-;34257:15;;34858:4;;34257:15;;;:38;;-1:-1:-1;34290:5:0;;-1:-1:-1;;;;;34290:5:0;34276:10;:19;34257:38;34248:48;;;;;;34887:62;34911:10;34923:3;34928:6;34936:4;34942:6;34887:23;:62::i;:::-;34880:69;34640:317;-1:-1:-1;;;;;;34640:317:0:o;29202:432::-;29554:71;;;-1:-1:-1;;;29554:71:0;;;;;;;;-1:-1:-1;;;;;;29554:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;29554:71:0;;;;;;;29544:82;;;;;29202:432;;;;;;;:::o;13964:161::-;9068:5;;-1:-1:-1;;;;;9068:5:0;9054:10;:19;9046:28;;;;;;14048:30;;;-1:-1:-1;;;14048:30:0;;14072:4;14048:30;;;;;;14030:15;;-1:-1:-1;;;;;14048:15:0;;;;;:30;;;;;;;;;;;;;;;:15;:30;;;5:2:-1;;;;30:1;27;20:12;5:2;14048:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14048:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14048:30:0;14104:5;;14048:30;;-1:-1:-1;14085:34:0;;-1:-1:-1;;;;;14085:18:0;;;;14104:5;14048:30;14085:34;:18;:34;:::i;:::-;9081:1;13964:161;:::o;2792:85::-;2859:12;;2792:85;:::o;33657:147::-;33727:7;33754:42;33792:3;33754:29;:4;:27;:29::i;:::-;:37;:42;:37;:42;:::i;:::-;33747:49;33657:147;-1:-1:-1;;;33657:147:0:o;34468:164::-;34257:15;;34562:4;;34257:15;;;:38;;-1:-1:-1;34290:5:0;;-1:-1:-1;;;;;34290:5:0;34276:10;:19;34257:38;34248:48;;;;;;34586:38;34605:5;34612:3;34617:6;34586:18;:38::i;:::-;34579:45;34468:164;-1:-1:-1;;;;34468:164:0:o;15324:167::-;9068:5;;-1:-1:-1;;;;;9068:5:0;9054:10;:19;9046:28;;;;;;15479:5;;15448:37;;;-1:-1:-1;;;15448:37:0;;-1:-1:-1;;;;;15479:5:0;;;15448:37;;;;;;15428:12;;15448:30;;;;;:37;;;;;15397:20;;15448:37;;;;;;;15397:20;15448:30;:37;;;5:2:-1;;;;30:1;27;20:12;5:2;15448:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15448:37:0;;;;9081:1;15324:167;:::o;33954:35::-;33987:2;33954:35;:::o;10872:326::-;10608:5;;10993:4;;-1:-1:-1;;;;;10608:5:0;10594:10;:19;10586:28;;;;;;10514:15;;-1:-1:-1;;;10514:15:0;;;;10513:16;10505:25;;;;;;11024:12;;:25;;11041:7;11024:25;:16;:25;:::i;:::-;11009:12;:40;-1:-1:-1;;;;;11072:13:0;;:8;:13;;;;;;;;;;;:26;;11090:7;11072:26;:17;:26;:::i;:::-;-1:-1:-1;;;;;11056:13:0;;:8;:13;;;;;;;;;;;;:42;;;;11110:18;;;;;;;11056:13;;11110:18;;;;;;;;;11140:34;;;;;;;;-1:-1:-1;;;;;11140:34:0;;;11157:1;;-1:-1:-1;;;;;;;;;;;11140:34:0;;;;;;;;-1:-1:-1;11188:4:0;10872:326;;;;:::o;33998:27::-;;;;;;:::o;31897:470::-;32272:86;;;-1:-1:-1;;;32272:86:0;;;;;;;;-1:-1:-1;;;;;;32272:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;32272:86:0;;;;;;;32262:97;;;;;31897:470;;;;;;;:::o;23212:904::-;23413:4;-1:-1:-1;;;;;23443:22:0;;23435:31;;;;;;23485:10;23496;23485:22;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;23485:22:0;;;;;-1:-1:-1;23485:22:0;;;;;;;;;;;;;:31;;-1:-1:-1;23477:40:0;;-1:-1:-1;23477:40:0;;;;;23530:16;23549:70;23581:4;23588:8;23598:6;23606:4;23612:6;23549:23;:70::i;:::-;23530:89;;23630:12;23645:29;23653:8;23663:10;23645:7;:29::i;:::-;23630:44;-1:-1:-1;;;;;;23693:18:0;;23685:27;;;;;;-1:-1:-1;;;;;23725:13:0;;;;;;;:7;:13;;;;;;;;:23;;;;;;;;;;;:32;;;23785:14;;;;;;;;;:24;;23804:4;23785:24;:18;:24;:::i;:::-;-1:-1:-1;;;;;23768:14:0;;:8;:14;;;;;;;;;;;:41;;;;23852:10;23843:20;;;;:30;;23868:4;23843:30;:24;:30;:::i;:::-;23820:8;:20;23829:10;-1:-1:-1;;;;;23820:20:0;-1:-1:-1;;;;;23820:20:0;;;;;;;;;;;;:53;;;;23909:4;23884:10;23895;23884:22;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;23884:22:0;;;;;-1:-1:-1;23884:22:0;;;;;;;;;;;:29;;-1:-1:-1;;23884:29:0;;;;;;;;;;;23931:32;;;;;-1:-1:-1;;;;;23931:32:0;;;;;;;;-1:-1:-1;;;;;;;;;;;23931:32:0;-1:-1:-1;23931:32:0;;;;;-1:-1:-1;23931:32:0;23979;;;;;;;;23994:10;;-1:-1:-1;;;;;23979:32:0;;;-1:-1:-1;;;;;;;;;;;23979:32:0;;;;;;;;24061:10;-1:-1:-1;;;;;24027:59:0;24051:8;-1:-1:-1;;;;;24027:59:0;24045:4;-1:-1:-1;;;;;24027:59:0;;24073:6;24081:4;24027:59;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24104:4:0;;23212:904;-1:-1:-1;;;;;;;23212:904:0:o;7885:446::-;8039:10;7996:4;8031:19;;;:7;:19;;;;;;;;-1:-1:-1;;;;;8031:29:0;;;;;;;;;;8071:27;;;8067:168;;;8117:10;8141:1;8109:19;;;:7;:19;;;;;;;;-1:-1:-1;;;;;8109:29:0;;;;;;;;;:33;8067:168;;;8197:30;:8;8210:16;8197:30;:12;:30;:::i;:::-;8173:10;8165:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;8165:29:0;;;;;;;;;:62;8067:168;8255:10;8277:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;8246:61:0;;8277:29;;;;;;;;;;;8246:61;;;;;;;;;8255:10;-1:-1:-1;;;;;;;;;;;8246:61:0;;;;;;;;;;-1:-1:-1;8321:4:0;;7885:446;-1:-1:-1;;;7885:446:0:o;3576:101::-;-1:-1:-1;;;;;3655:16:0;3632:7;3655:16;;;;;;;;;;;;3576:101::o;9360:114::-;9068:5;;-1:-1:-1;;;;;9068:5:0;9054:10;:19;9046:28;;;;;;9437:5;;9418:25;;-1:-1:-1;;;;;9437:5:0;;;;9418:25;;9437:5;;9418:25;9450:5;:18;;-1:-1:-1;;;;;;9450:18:0;;;9360:114::o;11318:144::-;9068:5;;11377:4;;-1:-1:-1;;;;;9068:5:0;9054:10;:19;9046:28;;;;;;10514:15;;-1:-1:-1;;;10514:15:0;;;;10513:16;10505:25;;;;;;11390:15;:22;;-1:-1:-1;;;;11390:22:0;-1:-1:-1;;;11390:22:0;;;11424:14;;;;11390:22;;11424:14;-1:-1:-1;11452:4:0;11318:144;:::o;26074:1162::-;26294:4;-1:-1:-1;;;;;26324:22:0;;26316:31;;;;;;26366:10;26377;26366:22;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;26366:22:0;;;;;-1:-1:-1;26366:22:0;;;;;;;;;;;;;:31;;-1:-1:-1;26358:40:0;;-1:-1:-1;26358:40:0;;;;;26411:16;26430:89;26471:4;26478:8;26488:16;26506:4;26512:6;26430:32;:89::i;:::-;26411:108;;26530:12;26545:29;26553:8;26563:10;26545:7;:29::i;:::-;26530:44;-1:-1:-1;;;;;;26593:18:0;;26585:27;;;;;;-1:-1:-1;;;;;26641:13:0;;;26625;26641;;;:7;:13;;;;;;;;:23;;;;;;;;;;26679:27;;;26675:176;;;-1:-1:-1;;;;;26723:13:0;;;26749:1;26723:13;;;:7;:13;;;;;;;;:23;;;;;;;;;;;:27;26675:176;;;26809:30;:8;26822:16;26809:30;:12;:30;:::i;:::-;-1:-1:-1;;;;;26783:13:0;;;;;;;:7;:13;;;;;;;;:23;;;;;;;;;:56;26675:176;-1:-1:-1;;;;;26878:14:0;;:8;:14;;;;;;;;;;;:24;;26897:4;26878:24;:18;:24;:::i;:::-;-1:-1:-1;;;;;26861:14:0;;:8;:14;;;;;;;;;;;:41;;;;26945:10;26936:20;;;;:30;;26961:4;26936:30;:24;:30;:::i;:::-;26913:8;:20;26922:10;-1:-1:-1;;;;;26913:20:0;-1:-1:-1;;;;;26913:20:0;;;;;;;;;;;;:53;;;;27002:4;26977:10;26988;26977:22;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;26977:22:0;;;;;-1:-1:-1;26977:22:0;;;;;;;;;;;:29;;-1:-1:-1;;26977:29:0;;;;;;;;;;;27024:42;;;;;-1:-1:-1;;;;;27024:42:0;;;;;;;;-1:-1:-1;;;;;;;;;;;27024:42:0;-1:-1:-1;27024:42:0;;;;;-1:-1:-1;27024:42:0;27082:32;;;;;;;;27097:10;;-1:-1:-1;;;;;27082:32:0;;;-1:-1:-1;;;;;;;;;;;27082:32:0;;;;;;;;-1:-1:-1;;;;;27130:76:0;;;27176:13;;;;:7;:13;;;;;;;;27130:76;;;27176:23;;;;;;;;;;;27130:76;;;;;;;;;;;;;27164:10;;27130:76;;;;;;;;;;-1:-1:-1;27224:4:0;;26074:1162;-1:-1:-1;;;;;;;;26074:1162:0:o;8557:28::-;;;-1:-1:-1;;;;;8557:28:0;;:::o;33875:::-;;;;;;;;;;;;;;;-1:-1:-1;;33875:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12639:93;9068:5;;-1:-1:-1;;;;;9068:5:0;9054:10;:19;9046:28;;;;;;12689:5;;:37;;-1:-1:-1;;;;;12689:5:0;;;;12712:4;12704:21;12689:37;;;;;:5;:37;:5;:37;12704:21;12689:5;:37;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12689:37:0;12639:93::o;34107:101::-;9068:5;;-1:-1:-1;;;;;9068:5:0;9054:10;:19;9046:28;;;;;;34176:15;:24;;-1:-1:-1;;34176:24:0;;;;;;;;;;34107:101::o;30960:460::-;31330:81;;;-1:-1:-1;;;31330:81:0;;;;;;;;-1:-1:-1;;;;;;31330:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;31330:81:0;;;;;;;31320:92;;;;;30960:460;;;;;;;:::o;34328:134::-;34257:15;;34403:4;;34257:15;;;:38;;-1:-1:-1;34290:5:0;;-1:-1:-1;;;;;34290:5:0;34276:10;:19;34257:38;34248:48;;;;;;34427:27;34442:3;34447:6;34427:14;:27::i;24593:1000::-;24808:4;-1:-1:-1;;;;;24838:22:0;;24830:31;;;;;;24880:10;24891;24880:22;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;24880:22:0;;;;;-1:-1:-1;24880:22:0;;;;;;;;;;;;;:31;;-1:-1:-1;24872:40:0;;-1:-1:-1;24872:40:0;;;;;24925:16;24944:84;24985:4;24992:8;25002:11;25015:4;25021:6;24944:32;:84::i;:::-;24925:103;;25039:12;25054:29;25062:8;25072:10;25054:7;:29::i;:::-;25039:44;-1:-1:-1;;;;;;25102:18:0;;25094:27;;;;;;-1:-1:-1;;;;;25160:13:0;;;;;;;:7;:13;;;;;;;;:23;;;;;;;;;;:40;;25188:11;25160:40;:27;:40;:::i;:::-;-1:-1:-1;;;;;25134:13:0;;;;;;;:7;:13;;;;;;;;:23;;;;;;;;;;;:66;;;;25228:14;;;;;;;;;;:24;;25247:4;25228:24;:18;:24;:::i;:::-;-1:-1:-1;;;;;25211:14:0;;:8;:14;;;;;;;;;;;:41;;;;25295:10;25286:20;;;;:30;;25311:4;25286:30;:24;:30;:::i;:::-;25263:8;:20;25272:10;-1:-1:-1;;;;;25263:20:0;-1:-1:-1;;;;;25263:20:0;;;;;;;;;;;;:53;;;;25352:4;25327:10;25338;25327:22;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;25327:22:0;;;;;-1:-1:-1;25327:22:0;;;;;;;;;;;:29;;-1:-1:-1;;25327:29:0;;;;;;;;;;;-1:-1:-1;;;;;25374:49:0;;;-1:-1:-1;25399:13:0;;;:7;:13;;;;;25374:49;;;25399:23;;;;;;;;;;25374:49;;;;;;;-1:-1:-1;;;;;;;;;;;25374:49:0;-1:-1:-1;25374:49:0;;;;;;;-1:-1:-1;25374:49:0;25439:32;;;;;;;;25454:10;;-1:-1:-1;;;;;25439:32:0;;;-1:-1:-1;;;;;;;;;;;25439:32:0;;;;;;;;-1:-1:-1;;;;;25487:76:0;;;25533:13;;;;:7;:13;;;;;;;;25487:76;;;25533:23;;;;;;;;;;;25487:76;;;;;;;;;;;;;25521:10;;25487:76;;;;;;;;;;-1:-1:-1;25581:4:0;;24593:1000;-1:-1:-1;;;;;;;24593:1000:0:o;32888:471::-;33272:78;;;-1:-1:-1;;;33272:78:0;;;;;;;;-1:-1:-1;;;;;;33272:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;33272:78:0;;;;;;;33262:89;;;;;;32888:471::o;34963:356::-;34257:15;;35209:4;;34257:15;;;:38;;-1:-1:-1;34290:5:0;;-1:-1:-1;;;;;34290:5:0;34276:10;:19;34257:38;34248:48;;;;;;35238:73;35266:10;35278:5;35285:3;35290:6;35298:4;35304:6;35238:27;:73::i;:::-;35231:80;34963:356;-1:-1:-1;;;;;;;34963:356:0:o;14726:148::-;14860:8;;;7110:307;7281:10;7216:4;7273:19;;;:7;:19;;;;;;;;-1:-1:-1;;;;;7273:29:0;;;;;;;;;;:46;;7307:11;7273:46;:33;:46;:::i;:::-;7240:10;7232:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;7232:29:0;;;;;;;;;;;;:88;;;7332:61;;;;;;7232:29;;-1:-1:-1;;;;;;;;;;;7332:61:0;;;;;;;;;;-1:-1:-1;7407:4:0;7110:307;;;;:::o;6485:162::-;-1:-1:-1;;;;;6616:15:0;;;6590:7;6616:15;;;:7;:15;;;;;;;;:25;;;;;;;;;;;;;6485:162::o;9642:113::-;9068:5;;-1:-1:-1;;;;;9068:5:0;9054:10;:19;9046:28;;;;;;9720:29;9739:9;9720:18;:29::i;30064:432::-;30411:76;;;-1:-1:-1;;;30411:76:0;;;;;;;;-1:-1:-1;;;;;;30411:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;30411:76:0;;;;;;;30401:87;;;;;30064:432;;;;;;;:::o;21894:904::-;22091:4;-1:-1:-1;;;;;22121:17:0;;22113:26;;;;;;22158:10;22169;22158:22;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;22158:22:0;;;;;-1:-1:-1;22158:22:0;;;;;;;;;;;;;:31;;-1:-1:-1;22150:40:0;;-1:-1:-1;22150:40:0;;;;;22203:16;22222:66;22255:4;22262:3;22267:6;22275:4;22281:6;22222:24;:66::i;:::-;22203:85;;22301:12;22316:29;22324:8;22334:10;22316:7;:29::i;:::-;22301:44;-1:-1:-1;;;;;;22364:18:0;;22356:27;;;;;;-1:-1:-1;;;;;22413:14:0;;:8;:14;;;;;;;;;;;:36;;22444:4;;22413:26;;22432:6;22413:26;:18;:26;:::i;:::-;:30;:36;:30;:36;:::i;:::-;-1:-1:-1;;;;;22396:14:0;;;:8;:14;;;;;;;;;;;:53;;;;22476:13;;;;;;;:25;;22494:6;22476:25;:17;:25;:::i;:::-;-1:-1:-1;;;;;22460:13:0;;:8;:13;;;;;;;;;;;:41;;;;22544:10;22535:20;;;;:30;;22560:4;22535:30;:24;:30;:::i;:::-;22512:8;:20;22521:10;-1:-1:-1;;;;;22512:20:0;-1:-1:-1;;;;;22512:20:0;;;;;;;;;;;;:53;;;;22601:4;22576:10;22587;22576:22;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;22576:22:0;;;;;-1:-1:-1;22576:22:0;;;;;;;;;;;:29;;-1:-1:-1;;22576:29:0;;;;;;;;;;;22623:27;;;;;-1:-1:-1;;;;;22623:27:0;;;;;;;;-1:-1:-1;;;;;;;;;;;22623:27:0;-1:-1:-1;22623:27:0;;;;;-1:-1:-1;22623:27:0;22666:32;;;;;;;;22681:10;;-1:-1:-1;;;;;22666:32:0;;;-1:-1:-1;;;;;;;;;;;22666:32:0;;;;;;;;22743:10;-1:-1:-1;;;;;22714:54:0;22738:3;-1:-1:-1;;;;;22714:54:0;22732:4;-1:-1:-1;;;;;22714:54:0;;22755:6;22763:4;22714:54;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22786:4:0;;21894:904;-1:-1:-1;;;;;;;21894:904:0:o;13037:123::-;13128:5;-1:-1:-1;;;;;13128:14:0;;13143:2;13147:5;13128:25;;;;;;;;;;;;;-1:-1:-1;;;;;13128:25:0;-1:-1:-1;;;;;13128:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13128:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13128:25:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13128:25:0;13120:34;;;;;;13037:123;;;:::o;20613:269::-;20815:58;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;20815:58:0;;;;;;;20805:69;;;;;;20613:269::o;18407:1930::-;18485:7;18548:9;:16;18568:2;18548:22;18544:74;;-1:-1:-1;18603:1:0;18587:19;;18544:74;18979:4;18964:20;;18958:27;19025:4;19010:20;;19004:27;19079:4;19064:20;;19058:27;18687:9;19050:36;20009:66;19996:79;;19992:129;;;20107:1;20092:17;;;;;;;19992:129;20137:1;:7;;20142:2;20137:7;;:18;;;;;20148:1;:7;;20153:2;20148:7;;20137:18;20133:68;;;20187:1;20172:17;;;;;;;20133:68;20305:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20305:24:0;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;20305:24:0;;-1:-1:-1;;20305:24:0;;;18407:1930;-1:-1:-1;;;;;;;18407:1930:0:o;4850:487::-;4962:4;-1:-1:-1;;;;;4986:17:0;;4978:26;;;;;;-1:-1:-1;;;;;5029:15:0;;:8;:15;;;;;;;;;;;5019:25;;;5011:34;;;;;;-1:-1:-1;;;;;5070:14:0;;;;;;:7;:14;;;;;;;;5085:10;5070:26;;;;;;;;5060:36;;;5052:45;;;;;;-1:-1:-1;;;;;5124:15:0;;:8;:15;;;;;;;;;;;:27;;5144:6;5124:27;:19;:27;:::i;:::-;-1:-1:-1;;;;;5106:15:0;;;:8;:15;;;;;;;;;;;:45;;;;5174:13;;;;;;;:25;;5192:6;5174:25;:17;:25;:::i;:::-;-1:-1:-1;;;;;5158:13:0;;;:8;:13;;;;;;;;;;;:41;;;;5235:14;;;;;:7;:14;;;;;5250:10;5235:26;;;;;;;:38;;5266:6;5235:38;:30;:38;:::i;:::-;-1:-1:-1;;;;;5206:14:0;;;;;;;:7;:14;;;;;;;;5221:10;5206:26;;;;;;;;:67;;;;5285:28;;;;;;;;;;;5206:14;;-1:-1:-1;;;;;;;;;;;5285:28:0;;;;;;;;;;-1:-1:-1;5327:4:0;4850:487;;;;;:::o;2363:127::-;2443:5;;;2462:6;;;;2455:14;;;2183:113;2241:7;2269:1;2264;:6;;2257:14;;;;-1:-1:-1;2285:5:0;;;2183:113::o;3038:329::-;3101:4;-1:-1:-1;;;;;3122:17:0;;3114:26;;;;;;3174:10;3165:8;:20;;;;;;;;;;;3155:30;;;3147:39;;;;;;3227:10;3218:8;:20;;;;;;;;;;;:32;;3243:6;3218:32;:24;:32;:::i;:::-;3204:10;3195:8;:20;;;;;;;;;;;:55;;;;-1:-1:-1;;;;;3273:13:0;;;;;;:25;;3291:6;3273:25;:17;:25;:::i;:::-;-1:-1:-1;;;;;3257:13:0;;:8;:13;;;;;;;;;;;;:41;;;;3310:33;;;;;;;3257:13;;3319:10;;-1:-1:-1;;;;;;;;;;;3310:33:0;;;;;;;;;-1:-1:-1;3357:4:0;3038:329;;;;:::o;27754:1007::-;27979:4;-1:-1:-1;;;;;28009:17:0;;28001:26;;;;;;28046:10;28057;28046:22;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;28046:22:0;;;;;-1:-1:-1;28046:22:0;;;;;;;;;;;;;:31;;-1:-1:-1;28038:40:0;;-1:-1:-1;28038:40:0;;;;;28091:16;28110:77;28147:4;28154:5;28161:3;28166:6;28174:4;28180:6;28110:28;:77::i;:::-;28091:96;;28200:15;28218:29;28226:8;28236:10;28218:7;:29::i;:::-;28200:47;-1:-1:-1;;;;;;28266:21:0;;28258:30;;;;;;-1:-1:-1;;;;;28319:15:0;;:8;:15;;;;;;;;;;;:27;;28339:6;28319:27;:19;:27;:::i;:::-;-1:-1:-1;;;;;28301:15:0;;;:8;:15;;;;;;;;;;;:45;;;;28373:13;;;;;;;:25;;28391:6;28373:25;:17;:25;:::i;:::-;-1:-1:-1;;;;;28357:13:0;;;:8;:13;;;;;;;;;;;:41;;;;28435:14;;;;;:7;:14;;;;;:23;;;;;;;;;;;:35;;28463:6;28435:35;:27;:35;:::i;:::-;-1:-1:-1;;;;;28409:14:0;;;;;;;:7;:14;;;;;;;;:23;;;;;;;;;;;:61;;;;28503:17;;;;;;;:27;;28525:4;28503:27;:21;:27;:::i;:::-;-1:-1:-1;;;;;28483:17:0;;:8;:17;;;;;;;;;;;:47;;;;28573:10;28564:20;;;;:30;;28589:4;28564:30;:24;:30;:::i;:::-;28541:8;:20;28550:10;-1:-1:-1;;;;;28541:20:0;-1:-1:-1;;;;;28541:20:0;;;;;;;;;;;;:53;;;;28630:4;28605:10;28616;28605:22;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;28605:22:0;;;;;-1:-1:-1;28605:22:0;;;;;;;;;;;:29;;-1:-1:-1;;28605:29:0;;;;;;;;;;;28652:28;;;;;-1:-1:-1;;;;;28652:28:0;;;;;;;;-1:-1:-1;;;;;;;;;;;28652:28:0;-1:-1:-1;28652:28:0;;;;;-1:-1:-1;28652:28:0;28696:35;;;;;;;;28714:10;;-1:-1:-1;;;;;28696:35:0;;;-1:-1:-1;;;;;;;;;;;28696:35:0;;;;;;;;-1:-1:-1;28749:4:0;;27754:1007;-1:-1:-1;;;;;;;;27754:1007:0:o;9896:183::-;-1:-1:-1;;;;;9975:23:0;;9967:32;;;;;;10032:5;;10011:38;;-1:-1:-1;;;;;10011:38:0;;;;10032:5;;10011:38;;10032:5;;10011:38;10056:5;:17;;-1:-1:-1;;;;;;10056:17:0;-1:-1:-1;;;;;10056:17:0;;;;;;;;;;9896:183::o
Swarm Source
bzzr://22558afb59017a1f10d920bd4c55d8a8c1ecd7a7353ff3c36262adf34e12f087
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.