ERC-1155
Overview
Max Total Supply
0 ERNE
Holders
374
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ERNEfinance
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-10-07 */ pragma solidity ^0.6.12; // "SPDX-License-Identifier: UNLICENSED" // File: contracts/utils/SafeMath.sol /** * @title SafeMath * @dev Unsigned math operations with safety checks that revert on error */ library SafeMath { /** * @dev Multiplies two unsigned integers, reverts on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath#mul: OVERFLOW"); return c; } /** * @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, "SafeMath#div: DIVISION_BY_ZERO"); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath#sub: UNDERFLOW"); uint256 c = a - b; return c; } /** * @dev Adds two unsigned integers, reverts on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath#add: OVERFLOW"); return c; } /** * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo), * reverts when dividing by zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0, "SafeMath#mod: DIVISION_BY_ZERO"); return a % b; } } // File: contracts/interfaces/IERC1155TokenReceiver.sol pragma solidity ^0.6.8; /** * @dev ERC-1155 interface for accepting safe transfers. */ interface IERC1155TokenReceiver { /** * @notice Handle the receipt of a single ERC1155 token type * @dev An ERC1155-compliant smart contract MUST call this function on the token recipient contract, at the end of a `safeTransferFrom` after the balance has been updated * This function MAY throw to revert and reject the transfer * Return of other amount than the magic value MUST result in the transaction being reverted * Note: The token contract address is always the message sender * @param _operator The address which called the `safeTransferFrom` function * @param _from The address which previously owned the token * @param _id The id of the token being transferred * @param _amount The amount of tokens being transferred * @param _data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` */ function onERC1155Received(address _operator, address _from, uint256 _id, uint256 _amount, bytes calldata _data) external returns(bytes4); /** * @notice Handle the receipt of multiple ERC1155 token types * @dev An ERC1155-compliant smart contract MUST call this function on the token recipient contract, at the end of a `safeBatchTransferFrom` after the balances have been updated * This function MAY throw to revert and reject the transfer * Return of other amount than the magic value WILL result in the transaction being reverted * Note: The token contract address is always the message sender * @param _operator The address which called the `safeBatchTransferFrom` function * @param _from The address which previously owned the token * @param _ids An array containing ids of each token being transferred * @param _amounts An array containing amounts of each token being transferred * @param _data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` */ function onERC1155BatchReceived(address _operator, address _from, uint256[] calldata _ids, uint256[] calldata _amounts, bytes calldata _data) external returns(bytes4); } // File: contracts/interfaces/IERC1155.sol pragma solidity ^0.6.8; interface IERC1155 { /****************************************| | Events | |_______________________________________*/ /** * @dev Either TransferSingle or TransferBatch MUST emit when tokens are transferred, including zero amount transfers as well as minting or burning * Operator MUST be msg.sender * When minting/creating tokens, the `_from` field MUST be set to `0x0` * When burning/destroying tokens, the `_to` field MUST be set to `0x0` * The total amount transferred from address 0x0 minus the total amount transferred to 0x0 may be used by clients and exchanges to be added to the "circulating supply" for a given token ID * To broadcast the existence of a token ID with no initial balance, the contract SHOULD emit the TransferSingle event from `0x0` to `0x0`, with the token creator as `_operator`, and a `_amount` of 0 */ event TransferSingle(address indexed _operator, address indexed _from, address indexed _to, uint256 _id, uint256 _amount); /** * @dev Either TransferSingle or TransferBatch MUST emit when tokens are transferred, including zero amount transfers as well as minting or burning * Operator MUST be msg.sender * When minting/creating tokens, the `_from` field MUST be set to `0x0` * When burning/destroying tokens, the `_to` field MUST be set to `0x0` * The total amount transferred from address 0x0 minus the total amount transferred to 0x0 may be used by clients and exchanges to be added to the "circulating supply" for a given token ID * To broadcast the existence of multiple token IDs with no initial balance, this SHOULD emit the TransferBatch event from `0x0` to `0x0`, with the token creator as `_operator`, and a `_amount` of 0 */ event TransferBatch(address indexed _operator, address indexed _from, address indexed _to, uint256[] _ids, uint256[] _amounts); /** * @dev MUST emit when an approval is updated */ event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved); /** * @dev MUST emit when the URI is updated for a token ID * URIs are defined in RFC 3986 * The URI MUST point a JSON file that conforms to the "ERC-1155 Metadata JSON Schema" */ event URI(string _amount, uint256 indexed _id); /****************************************| | Functions | |_______________________________________*/ /** * @notice Transfers amount of an _id from the _from address to the _to address specified * @dev MUST emit TransferSingle event on success * Caller must be approved to manage the _from account's tokens (see isApprovedForAll) * MUST throw if `_to` is the zero address * MUST throw if balance of sender for token `_id` is lower than the `_amount` sent * MUST throw on any other error * When transfer is complete, this function MUST check if `_to` is a smart contract (code size > 0). If so, it MUST call `onERC1155Received` on `_to` and revert if the return amount is not `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * @param _from Source address * @param _to Target address * @param _id ID of the token type * @param _amount Transfered amount * @param _data Additional data with no specified format, sent in call to `_to` */ function safeTransferFrom(address _from, address _to, uint256 _id, uint256 _amount, bytes calldata _data) external; /** * @notice Send multiple types of Tokens from the _from address to the _to address (with safety call) * @dev MUST emit TransferBatch event on success * Caller must be approved to manage the _from account's tokens (see isApprovedForAll) * MUST throw if `_to` is the zero address * MUST throw if length of `_ids` is not the same as length of `_amounts` * MUST throw if any of the balance of sender for token `_ids` is lower than the respective `_amounts` sent * MUST throw on any other error * When transfer is complete, this function MUST check if `_to` is a smart contract (code size > 0). If so, it MUST call `onERC1155BatchReceived` on `_to` and revert if the return amount is not `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * Transfers and events MUST occur in the array order they were submitted (_ids[0] before _ids[1], etc) * @param _from Source addresses * @param _to Target addresses * @param _ids IDs of each token type * @param _amounts Transfer amounts per token type * @param _data Additional data with no specified format, sent in call to `_to` */ function safeBatchTransferFrom(address _from, address _to, uint256[] calldata _ids, uint256[] calldata _amounts, bytes calldata _data) external; /** * @notice Get the balance of an account's Tokens * @param _owner The address of the token holder * @param _id ID of the Token * @return The _owner's balance of the Token type requested */ function balanceOf(address _owner, uint256 _id) external view returns (uint256); /** * @notice Get the balance of multiple account/token pairs * @param _owners The addresses of the token holders * @param _ids ID of the Tokens * @return The _owner's balance of the Token types requested (i.e. balance for each (owner, id) pair) */ function balanceOfBatch(address[] calldata _owners, uint256[] calldata _ids) external view returns (uint256[] memory); /** * @notice Enable or disable approval for a third party ("operator") to manage all of caller's tokens * @dev MUST emit the ApprovalForAll event on success * @param _operator Address to add to the set of authorized operators * @param _approved True if the operator is approved, false to revoke approval */ function setApprovalForAll(address _operator, bool _approved) external; /** * @notice Queries the approval status of an operator for a given owner * @param _owner The owner of the Tokens * @param _operator Address of authorized operator * @return isOperator True if the operator is approved, false if not */ function isApprovedForAll(address _owner, address _operator) external view returns (bool isOperator); } // File: contracts/utils/Address.sol pragma solidity ^0.6.8; /** * Utility library of inline functions on addresses */ library Address { // Default hash for EOA accounts returned by extcodehash bytes32 constant internal ACCOUNT_HASH = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; /** * Returns whether the target address is a contract * @dev This function will return false if invoked during the constructor of a contract. * @param _address address of the account to check * @return Whether the target address is a contract */ function isContract(address _address) internal view returns (bool) { bytes32 codehash; // Currently there is no better way to check if there is a contract in an address // than to check the size of the code at that address or if it has a non-zero code hash or account hash assembly { codehash := extcodehash(_address) } return (codehash != 0x0 && codehash != ACCOUNT_HASH); } } // File: contracts/utils/ERC165.sol pragma solidity ^0.6.8; abstract contract ERC165 { /** * @notice Query if a contract implements an interface * @param _interfaceID The interface identifier, as specified in ERC-165 * @return `true` if the contract implements `_interfaceID` */ function supportsInterface(bytes4 _interfaceID) virtual public pure returns (bool) { return _interfaceID == this.supportsInterface.selector; } } /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ contract Context { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. constructor () internal { } // solhint-disable-previous-line no-empty-blocks function _msgSender() internal view returns (address payable) { return msg.sender; } function _msgData() internal view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } /** * Throws if called by any account other than the owner. */ modifier onlyOwner() { require(isOwner(), "Ownable: caller is not the owner"); _; } /** * Returns true if the caller is the current owner. */ function isOwner() public view returns (bool) { return _msgSender() == _owner; } /** * Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } /** * Transfers ownership of the contract to a new account (`newOwner`). */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } contract Allowable is Ownable { // Contains details regarding allowed addresses mapping (address => mapping(uint256 => bool) )public permissions; // Active status bool public isActive = true; /** * @dev Reverts if an address is not allowed. Can be used when extending this contract. */ modifier whenActive(address _from,address _to,uint256 tokenId){ require (!permissions[_from][tokenId] && !permissions[_to][tokenId] ); _; } modifier active(){ require(isActive, "Not Active"); _; } /** * @dev Adds single address to the permissions list. Allowed only for contract owner. * @param _operator Address to be added to the permissions list */ function allow(address _operator,uint256 _tokenId) external onlyOwner { permissions[_operator][_tokenId] = false; } /** * @dev Removes single address from an permissions list. Allowed only for contract owner. * @param _operator Address to be removed from the permissions list */ function deny(address _operator,uint256 _tokenId) external onlyOwner { permissions[_operator][_tokenId] = true; } /** * @dev Sets active status of the contract. Allowed only for contract owner. * @param _status Status of the contract */ function activate(bool _status) onlyOwner public { isActive = _status; } } // File: contracts/tokens/ERC1155/ERC1155.sol pragma solidity ^0.6.8; /** * @dev Implementation of Multi-Token Standard contract */ contract ERC1155 is IERC1155, ERC165 , Allowable{ using SafeMath for uint256; using Address for address; /***********************************| | Variables and Events | |__________________________________*/ // Contract name string public name; // Contract symbol string public symbol; // onReceive function signatures bytes4 constant internal ERC1155_RECEIVED_VALUE = 0xf23a6e61; bytes4 constant internal ERC1155_BATCH_RECEIVED_VALUE = 0xbc197c81; // Objects balances mapping (address => mapping(uint256 => uint256)) internal balances; // Operator Functions mapping (address => mapping(address => bool)) internal operators; // A record of each accounts delegate mapping (address => mapping (uint256 => address)) internal _delegates; /// @notice A checkpoint for marking number of votes from a given block struct Checkpoint { uint32 fromBlock; uint256 votes; } /// @notice A record of votes checkpoints for each account, by index mapping (address => mapping (uint32 => mapping(uint256=> Checkpoint))) public checkpoints; /// @notice The number of checkpoints for each account mapping (address => mapping (uint256 => uint32)) public numCheckpoints; /// @notice The EIP-712 typehash for the contract's domain bytes32 public constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint256 chainId,address verifyingContract)"); /// @notice The EIP-712 typehash for the delegation struct used by the contract bytes32 public constant DELEGATION_TYPEHASH = keccak256("Delegation(address delegatee,uint256 nonce,uint256 expiry)"); /// @notice A record of states for signing / validating signatures mapping (address => uint) public nonces; /// @notice An event thats emitted when an account changes its delegate event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate); /// @notice An event thats emitted when a delegate account's vote balance changes event DelegateVotesChanged(address indexed delegate, uint previousBalance, uint newBalance); /***********************************| | Public Transfer Functions | |__________________________________*/ /** * @notice Transfers amount amount of an _id from the _from address to the _to address specified * @param _from Source address * @param _to Target address * @param _id ID of the token type * @param _amount Transfered amount * @param _data Additional data with no specified format, sent in call to `_to` */ function safeTransferFrom(address _from, address _to, uint256 _id, uint256 _amount, bytes memory _data) public active() whenActive(_from,_to,_id) override { require((msg.sender == _from) || isApprovedForAll(_from, msg.sender), "ERC1155#safeTransferFrom: INVALID_OPERATOR"); require(_to != address(0),"ERC1155#safeTransferFrom: INVALID_RECIPIENT"); // require(_amount <= balances[_from][_id]) is not necessary since checked with safemath operations _safeTransferFrom(_from, _to, _id, _amount); _callonERC1155Received(_from, _to, _id, _amount, gasleft(), _data); } /** /** * @notice Send multiple types of Tokens from the _from address to the _to address (with safety call) * @param _from Source addresses * @param _to Target addresses * @param _ids IDs of each token type * @param _amounts Transfer amounts per token type * @param _data Additional data with no specified format, sent in call to `_to` */ function safeBatchTransferFrom(address _from, address _to, uint256[] memory _ids, uint256[] memory _amounts, bytes memory _data) public override active() { // Requirements require((msg.sender == _from) || isApprovedForAll(_from, msg.sender), "ERC1155#safeBatchTransferFrom: INVALID_OPERATOR"); require(_to != address(0), "ERC1155#safeBatchTransferFrom: INVALID_RECIPIENT"); _safeBatchTransferFrom(_from, _to, _ids, _amounts); _callonERC1155BatchReceived(_from, _to, _ids, _amounts, gasleft(), _data); } /***********************************| | Internal Transfer Functions | |__________________________________*/ /** * @notice Transfers amount amount of an _id from the _from address to the _to address specified * @param _from Source address * @param _to Target address * @param _id ID of the token type * @param _amount Transfered amount */ function _safeTransferFrom(address _from, address _to, uint256 _id, uint256 _amount) internal { // Update balances balances[_from][_id] = balances[_from][_id].sub(_amount); // Subtract amount balances[_to][_id] = balances[_to][_id].add(_amount); // Add amount _moveDelegates(_delegates[_from][_id], _delegates[_to][_id], _amount,_id); // Emit event emit TransferSingle(msg.sender, _from, _to, _id, _amount); } /** * @notice Verifies if receiver is contract and if so, calls (_to).onERC1155Received(...) */ function _callonERC1155Received(address _from, address _to, uint256 _id, uint256 _amount, uint256 _gasLimit, bytes memory _data) internal { // Check if recipient is contract if (_to.isContract()) { bytes4 retval = IERC1155TokenReceiver(_to).onERC1155Received{gas: _gasLimit}(msg.sender, _from, _id, _amount, _data); require(retval == ERC1155_RECEIVED_VALUE, "ERC1155#_callonERC1155Received: INVALID_ON_RECEIVE_MESSAGE"); } } /** * @notice Send multiple types of Tokens from the _from address to the _to address (with safety call) * @param _from Source addresses * @param _to Target addresses * @param _ids IDs of each token type * @param _amounts Transfer amounts per token type */ function _safeBatchTransferFrom(address _from, address _to, uint256[] memory _ids, uint256[] memory _amounts) internal { require(_ids.length == _amounts.length, "ERC1155#_safeBatchTransferFrom: INVALID_ARRAYS_LENGTH"); // Number of transfer to execute uint256 nTransfer = _ids.length; // Executing all transfers for (uint256 i = 0; i < nTransfer; i++) { require (!permissions[_from][_ids[i]] && !permissions[_to][_ids[i]],"blocked user"); // Update storage balance of previous bin balances[_from][_ids[i]] = balances[_from][_ids[i]].sub(_amounts[i]); balances[_to][_ids[i]] = balances[_to][_ids[i]].add(_amounts[i]); } // Emit event emit TransferBatch(msg.sender, _from, _to, _ids, _amounts); } /** * @notice Verifies if receiver is contract and if so, calls (_to).onERC1155BatchReceived(...) */ function _callonERC1155BatchReceived(address _from, address _to, uint256[] memory _ids, uint256[] memory _amounts, uint256 _gasLimit, bytes memory _data) internal { // Pass data if recipient is contract if (_to.isContract()) { bytes4 retval = IERC1155TokenReceiver(_to).onERC1155BatchReceived{gas: _gasLimit}(msg.sender, _from, _ids, _amounts, _data); require(retval == ERC1155_BATCH_RECEIVED_VALUE, "ERC1155#_callonERC1155BatchReceived: INVALID_ON_RECEIVE_MESSAGE"); } } /***********************************| | Operator Functions | |__________________________________*/ /** * @notice Enable or disable approval for a third party ("operator") to manage all of caller's tokens * @param _operator Address to add to the set of authorized operators * @param _approved True if the operator is approved, false to revoke approval */ function setApprovalForAll(address _operator, bool _approved) external override { // Update operator status operators[msg.sender][_operator] = _approved; emit ApprovalForAll(msg.sender, _operator, _approved); } /** * @notice Queries the approval status of an operator for a given owner * @param _owner The owner of the Tokens * @param _operator Address of authorized operator * @return isOperator True if the operator is approved, false if not */ function isApprovedForAll(address _owner, address _operator) public override view returns (bool isOperator) { return operators[_owner][_operator]; } /***********************************| | Balance Functions | |__________________________________*/ /** * @notice Get the balance of an account's Tokens * @param _owner The address of the token holder * @param _id ID of the Token * @return The _owner's balance of the Token type requested */ function balanceOf(address _owner, uint256 _id) public override view returns (uint256) { return balances[_owner][_id]; } /** * @notice Get the balance of multiple account/token pairs * @param _owners The addresses of the token holders * @param _ids ID of the Tokens * @return The _owner's balance of the Token types requested (i.e. balance for each (owner, id) pair) */ function balanceOfBatch(address[] memory _owners, uint256[] memory _ids) public override view returns (uint256[] memory) { require(_owners.length == _ids.length, "ERC1155#balanceOfBatch: INVALID_ARRAY_LENGTH"); // Variables uint256[] memory batchBalances = new uint256[](_owners.length); // Iterate over each owner and token ID for (uint256 i = 0; i < _owners.length; i++) { batchBalances[i] = balances[_owners[i]][_ids[i]]; } return batchBalances; } /** * @notice Manages the delagates * @param delegator The addresses of delegator * @param delegatee The addresses of delegator * @param tokenId Token type */ function _delegate(address delegator, address delegatee, uint256 tokenId) internal { address currentDelegate = _delegates[delegator][tokenId]; uint256 delegatorBalance = balanceOf(delegator,tokenId); // balance of underlying (not scaled); _delegates[delegator][tokenId] = delegatee; emit DelegateChanged(delegator, currentDelegate, delegatee); _moveDelegates(currentDelegate, delegatee, delegatorBalance,tokenId); } /** * @notice Move the delegate control to delegatee * @param srcRep The addresses of delegator * @param dstRep The addresses of delegator * @param amount Delegator balance * @param tokenId Token type */ function _moveDelegates(address srcRep, address dstRep, uint256 amount, uint256 tokenId) internal { if (srcRep != dstRep && amount > 0) { if (srcRep != address(0)) { // decrease old representative uint32 srcRepNum = numCheckpoints[srcRep][tokenId]; uint256 srcRepOld = srcRepNum > 0 ? checkpoints[srcRep][srcRepNum - 1][tokenId].votes : 0; uint256 srcRepNew = srcRepOld.sub(amount); _writeCheckpoint(srcRep, srcRepNum, srcRepOld, srcRepNew,tokenId); } if (dstRep != address(0)) { // increase new representative uint32 dstRepNum = numCheckpoints[dstRep][tokenId]; uint256 dstRepOld = dstRepNum > 0 ? checkpoints[dstRep][dstRepNum - 1][tokenId].votes : 0; uint256 dstRepNew = dstRepOld.add(amount); _writeCheckpoint(dstRep, dstRepNum, dstRepOld, dstRepNew,tokenId); } } } /** * @notice Internal call to update the votes to delegatee */ function _writeCheckpoint( address delegatee, uint32 nCheckpoints, uint256 oldVotes, uint256 newVotes, uint256 tokenID ) internal { uint32 blockNumber = safe32(block.number, "_writeCheckpoint: block number exceeds 32 bits"); if (nCheckpoints > 0 && checkpoints[delegatee][nCheckpoints - 1][tokenID].fromBlock == blockNumber) { checkpoints[delegatee][nCheckpoints - 1][tokenID].votes = newVotes; } else { checkpoints[delegatee][nCheckpoints][tokenID] = Checkpoint(blockNumber, newVotes); numCheckpoints[delegatee][tokenID] = nCheckpoints + 1; } emit DelegateVotesChanged(delegatee, oldVotes, newVotes); } function safe32(uint n, string memory errorMessage) internal pure returns (uint32) { require(n < 2**32, errorMessage); return uint32(n); } function getChainId() internal pure returns (uint) { uint256 chainId; assembly { chainId := chainid() } return chainId; } /** * @notice Delegate votes from `msg.sender` to `delegatee` * @param delegator The address to get delegatee for */ function delegates(address delegator, uint256 tokenID) external view returns (address) { return _delegates[delegator][tokenID]; } /** * @notice Delegate votes from `msg.sender` to `delegatee` * @param delegatee The address to delegate votes to */ function delegate(address delegatee, uint256 tokenID) external { return _delegate(msg.sender, delegatee, tokenID); } /** * @notice Delegates votes from signatory to `delegatee` * @param delegatee The address to delegate votes to * @param nonce The contract state required to match the signature * @param expiry The time at which to expire the signature * @param v The recovery byte of the signature * @param r Half of the ECDSA signature pair * @param s Half of the ECDSA signature pair */ function delegateBySig( address delegatee, uint nonce, uint expiry, uint8 v, bytes32 r, bytes32 s, uint tokenID ) external { bytes32 domainSeparator = keccak256( abi.encode( DOMAIN_TYPEHASH, keccak256(bytes(name)), getChainId(), address(this) ) ); bytes32 structHash = keccak256( abi.encode( DELEGATION_TYPEHASH, delegatee, nonce, expiry ) ); bytes32 digest = keccak256( abi.encodePacked( "\x19\x01", domainSeparator, structHash ) ); address signatory = ecrecover(digest, v, r, s); require(signatory != address(0), "delegateBySig: invalid signature"); require(nonce == nonces[signatory]++, "delegateBySig: invalid nonce"); require(now <= expiry, "delegateBySig: signature expired"); return _delegate(signatory, delegatee, tokenID); } /** * @notice Gets the current votes balance for `account` * @param account The address to get votes balance * @return The number of current votes for `account` */ function getCurrentVotes(address account, uint256 tokenID) external view returns (uint256) { uint32 nCheckpoints = numCheckpoints[account][tokenID]; return nCheckpoints > 0 ? checkpoints[account][nCheckpoints - 1][tokenID].votes : 0; } /** * @notice Determine the prior number of votes for an account as of a block number * @dev Block number must be a finalized block or else this function will revert to prevent misinformation. * @param account The address of the account to check * @param blockNumber The block number to get the vote balance at * @return The number of votes the account had as of the given block */ function getPriorVotes(address account, uint blockNumber,uint256 tokenId) external view returns (uint256) { require(blockNumber < block.number, "getPriorVotes: not yet determined"); uint32 nCheckpoints = numCheckpoints[account][tokenId]; if (nCheckpoints == 0) { return 0; } // First check most recent balance if (checkpoints[account][nCheckpoints - 1][tokenId].fromBlock <= blockNumber) { return checkpoints[account][nCheckpoints - 1][tokenId].votes; } // Next check implicit zero balance if (checkpoints[account][0][tokenId].fromBlock > blockNumber) { return 0; } uint32 lower = 0; uint32 upper = nCheckpoints - 1; while (upper > lower) { uint32 center = upper - (upper - lower) / 2; // ceil, avoiding overflow Checkpoint memory cp = checkpoints[account][center][tokenId]; if (cp.fromBlock == blockNumber) { return cp.votes; } else if (cp.fromBlock < blockNumber) { lower = center; } else { upper = center - 1; } } return checkpoints[account][lower][tokenId].votes; } /***********************************| | ERC165 Functions | |__________________________________*/ /** * @notice Query if a contract implements an interface * @param _interfaceID The interface identifier, as specified in ERC-165 * @return `true` if the contract implements `_interfaceID` and */ function supportsInterface(bytes4 _interfaceID) public override virtual pure returns (bool) { if (_interfaceID == type(IERC1155).interfaceId) { return true; } return super.supportsInterface(_interfaceID); } } // File: contracts/tokens/ERC1155/ERC1155MintBurn.sol pragma solidity ^0.6.8; /** * @dev Multi-Fungible Tokens with minting and burning methods. These methods assume * a parent contract to be executed as they are `internal` functions */ contract ERC1155MintBurn is ERC1155 { /****************************************| | Minting Functions | |_______________________________________*/ /** * @notice Mint _amount of tokens of a given id * @param _to The address to mint tokens to * @param _id Token id to mint * @param _amount The amount to be minted * @param _data Data to pass if receiver is contract */ function _mint(address _to, uint256 _id, uint256 _amount, bytes memory _data) internal { // Add _amount balances[_to][_id] = balances[_to][_id].add(_amount); _moveDelegates(_delegates[msg.sender][_id], _delegates[_to][_id], _amount,_id); // Emit event emit TransferSingle(msg.sender, address(0x0), _to, _id, _amount); // Calling onReceive method if recipient is contract _callonERC1155Received(address(0x0), _to, _id, _amount, gasleft(), _data); } /** * @notice Mint tokens for each ids in _ids * @param _to The address to mint tokens to * @param _ids Array of ids to mint * @param _amounts Array of amount of tokens to mint per id * @param _data Data to pass if receiver is contract */ function _batchMint(address _to, uint256[] memory _ids, uint256[] memory _amounts, bytes memory _data) internal { require(_ids.length == _amounts.length, "ERC1155MintBurn#batchMint: INVALID_ARRAYS_LENGTH"); // Number of mints to execute uint256 nMint = _ids.length; // Executing all minting for (uint256 i = 0; i < nMint; i++) { _moveDelegates(_delegates[msg.sender][i], _delegates[_to][i], _amounts[i],_ids[i]); // Update storage balance balances[_to][_ids[i]] = balances[_to][_ids[i]].add(_amounts[i]); } // Emit batch mint event emit TransferBatch(msg.sender, address(0x0), _to, _ids, _amounts); // Calling onReceive method if recipient is contract _callonERC1155BatchReceived(address(0x0), _to, _ids, _amounts, gasleft(), _data); } /****************************************| | Burning Functions | |_______________________________________*/ /** * @notice Burn _amount of tokens of a given token id * @param _from The address to burn tokens from * @param _id Token id to burn * @param _amount The amount to be burned */ function _burn(address _from, uint256 _id, uint256 _amount) internal { //Substract _amount balances[_from][_id] = balances[_from][_id].sub(_amount); // Emit event emit TransferSingle(msg.sender, _from, address(0x0), _id, _amount); } /** * @notice Burn tokens of given token id for each (_ids[i], _amounts[i]) pair * @param _from The address to burn tokens from * @param _ids Array of token ids to burn * @param _amounts Array of the amount to be burned */ function _batchBurn(address _from, uint256[] memory _ids, uint256[] memory _amounts) internal { // Number of mints to execute uint256 nBurn = _ids.length; require(nBurn == _amounts.length, "ERC1155MintBurn#batchBurn: INVALID_ARRAYS_LENGTH"); // Executing all minting for (uint256 i = 0; i < nBurn; i++) { // Update storage balance balances[_from][_ids[i]] = balances[_from][_ids[i]].sub(_amounts[i]); } // Emit batch mint event emit TransferBatch(msg.sender, _from, address(0x0), _ids, _amounts); } } // File: contracts/interfaces/IERC1155Metadata.sol pragma solidity ^0.6.8; interface IERC1155Metadata { /****************************************| | Functions | |_______________________________________*/ /** * @notice A distinct Uniform Resource Identifier (URI) for a given token. * @dev URIs are defined in RFC 3986. * URIs are assumed to be deterministically generated based on token ID * Token IDs are assumed to be represented in their hex format in URIs * @return URI string */ function uri(uint256 _id) external view returns (string memory); } // File: contracts/tokens/ERC1155/ERC1155Metadata.sol pragma solidity ^0.6.8; /** * @notice Contract that handles metadata related methods. * @dev Methods assume a deterministic generation of URI based on token IDs. * Methods also assume that URI uses hex representation of token IDs. */ contract ERC1155Metadata is ERC1155MintBurn { // URI's default URI prefix string internal baseMetadataURI; event URI(string _uri, uint256 indexed _id); /***********************************| | Metadata Public Function s | |__________________________________*/ /** * @notice A distinct Uniform Resource Identifier (URI) for a given token. * @dev URIs are defined in RFC 3986. * URIs are assumed to be deterministically generated based on token ID * @return URI string */ function uri(uint256 _id) public view returns (string memory) { return string(abi.encodePacked(baseMetadataURI, _uint2str(_id), ".json")); } /***********************************| | Metadata Internal Functions | |__________________________________*/ /** * @notice Will emit default URI log event for corresponding token _id * @param _tokenIDs Array of IDs of tokens to log default URI */ function _logURIs(uint256[] memory _tokenIDs) internal { string memory baseURL = baseMetadataURI; string memory tokenURI; for (uint256 i = 0; i < _tokenIDs.length; i++) { tokenURI = string(abi.encodePacked(baseURL, _uint2str(_tokenIDs[i]), ".json")); emit URI(tokenURI, _tokenIDs[i]); } } /** * @notice Will update the base URL of token's URI * @param _newBaseMetadataURI New base URL of token's URI */ function _setBaseMetadataURI(string memory _newBaseMetadataURI) internal { baseMetadataURI = _newBaseMetadataURI; } /** * @notice Query if a contract implements an interface * @param _interfaceID The interface identifier, as specified in ERC-165 * @return `true` if the contract implements `_interfaceID` and */ function supportsInterface(bytes4 _interfaceID) public override virtual pure returns (bool) { if (_interfaceID == type(IERC1155Metadata).interfaceId) { return true; } return super.supportsInterface(_interfaceID); } /***********************************| | Utility Internal Functions | |__________________________________*/ /** * @notice Convert uint256 to string * @param _i Unsigned integer to convert to string */ function _uint2str(uint256 _i) internal pure returns (string memory _uintAsString) { if (_i == 0) { return "0"; } uint256 j = _i; uint256 ii = _i; uint256 len; // Get number of bytes while (j != 0) { len++; j /= 10; } bytes memory bstr = new bytes(len); uint256 k = len - 1; // Get each individual ASCII while (ii != 0) { bstr[k--] = byte(uint8(48 + ii % 10)); ii /= 10; } // Convert to string return string(bstr); } } // File: contracts/tokens/ERC1155/ERNE1155.sol pragma solidity ^0.6.8; contract ERNEfinance is ERC1155Metadata { uint256 private _currentTokenID = 0; mapping (uint256 => address) public creators; mapping (uint256 => uint256) public tokenSupply; mapping (address => mapping (address => uint256)) private _allowances; address public wrappedContract; /// @notice A checkpoint for marking number of vest struct vest{ uint256 amount; uint256 strTime; } /// @notice A record of vest details for account mapping(address => mapping(uint256 => vest)) public vestDetails; /** * @dev Require msg.sender to be the creator of the token id */ modifier creatorOnly(uint256 _id) { require(creators[_id] == msg.sender, "ERC1155Tradable#creatorOnly: ONLY_CREATOR_ALLOWED"); _; } constructor() public { name = "ERNE finance"; symbol = "ERNE"; } /** * @dev Require msg.sender to own more than 0 of the token id */ modifier ownersOnly(uint256 _id) { require(balances[msg.sender][_id] > 0, "ERC1155Tradable#ownersOnly: ONLY_OWNERS_ALLOWED"); _; } /** * @dev Creates a new token type and assigns _initialSupply to an address * NOTE: remove onlyOwner if you want third parties to create new tokens on your contract (which may change your IDs) * @param _initialOwner address of the first owner of the token * @param _initialSupply amount to supply the first owner * @param _uri Optional URI for this token type * @param _data Data to pass if receiver is contract * @return The newly created token ID */ function create( address _initialOwner, uint256 _initialSupply, string calldata _uri, bytes calldata _data ) external onlyOwner returns (uint256) { uint256 _id = _getNextTokenID(); _incrementTokenTypeId(); creators[_id] = msg.sender; if (bytes(_uri).length > 0) { emit URI(_uri, _id); } _mint(_initialOwner, _id, _initialSupply, _data); tokenSupply[_id] = _initialSupply; return _id; } /** * @dev Mints some amount of tokens to an address * @param _to Address of the future owner of the token * @param _id Token ID to mint * @param _quantity Amount of tokens to mint * @param _data Data to pass if receiver is contract */ function mint( address _to, uint256 _id, uint256 _quantity, bytes memory _data ) public creatorOnly(_id) { _mint(_to, _id, _quantity, _data); tokenSupply[_id] = tokenSupply[_id].add(_quantity); } /** * @dev Mint tokens for each id in _ids * @param _to The address to mint tokens to * @param _ids Array of ids to mint * @param _quantities Array of amounts of tokens to mint per id * @param _data Data to pass if receiver is contract */ function batchMint( address _to, uint256[] memory _ids, uint256[] memory _quantities, bytes memory _data ) public { for (uint256 i = 0; i < _ids.length; i++) { uint256 _id = _ids[i]; require(creators[_id] == msg.sender, "ERC1155Tradable#batchMint: ONLY_CREATOR_ALLOWED"); uint256 quantity = _quantities[i]; tokenSupply[_id] = tokenSupply[_id].add(quantity); } _batchMint(_to, _ids, _quantities, _data); } /** * @dev Will update the base URL of token's URI * @param _newBaseMetadataURI New base URL of token's URI */ function setBaseMetadataURI( string memory _newBaseMetadataURI ) public onlyOwner { _setBaseMetadataURI(_newBaseMetadataURI); } /** * @dev Change the creator address for given tokens * @param _to Address of the new creator * @param _ids Array of Token IDs to change creator */ function setCreator( address _to, uint256[] memory _ids ) public { require(_to != address(0), "ERC1155Tradable#setCreator: INVALID_ADDRESS."); for (uint256 i = 0; i < _ids.length; i++) { uint256 id = _ids[i]; _setCreator(_to, id); } } /** * @dev Change the creator address for given token * @param _to Address of the new creator * @param _id Token IDs to change creator of */ function _setCreator(address _to, uint256 _id) internal creatorOnly(_id) { creators[_id] = _to; } /** * @dev calculates the next token ID based on value of _currentTokenID * @return uint256 for the next token ID */ function _getNextTokenID() private view returns (uint256) { return _currentTokenID.add(1); } /** * @dev increments the value of _currentTokenID */ function _incrementTokenTypeId() private { _currentTokenID++; } /** @notice Transfers amount amount of an _id from the _from address to the _to address specified * @param _from Source address * @param _to Target address * @param _id ID of the token type * @param _amount Transfered amount */ function safeTransfer(address _from, address _to, uint256 _id, uint256 _amount, address _spender) public active() whenActive(_from,_to,_id) { require(msg.sender == wrappedContract, "Invalid transfer"); require(_allowances[_from][_spender] > 0, "ERC1155#safeTransfer: INVALID_OPERATOR"); require((msg.sender == _from) || _allowances[_from][_spender] >= _amount, "ERC1155#safeTransfer: INVALID_OPERATOR"); require(_to != address(0), "ERC1155#safeTransferFrom: INVALID_RECIPIENT"); // require(_amount <= balances[_from][_id]) is not necessary since checked with safemath operations _allowances[_from][_spender] = _allowances[_from][_spender].sub(_amount); _safeTransferFrom(_from, _to, _id, _amount); // _callonERC1155Received(_from, _to, _id, _amount, gasleft(), _data); } /** @notice Transfers amount amount of an _id from the _from address to the _to address specified * @param _from Source address * @param _to Target address * @param _id ID of the token type * @param _amount Transfered amount */ function transfer(address _from, address _to, uint256 _id, uint256 _amount) public whenActive(_from,_to,_id) { require(msg.sender == wrappedContract, "Invalid transfer"); require(_to != address(0), "ERC1155#safeTransferFrom: INVALID_RECIPIENT"); _safeTransferFrom(_from, _to, _id, _amount); } /** @notice Set Wrapper ERC20 contarct address * @param _wrappedContract Contract address */ function setWrapedContract(address _wrappedContract) public onlyOwner { wrappedContract = _wrappedContract; } /** @notice Approve amount of tokens to spender * @param owner From address * @param spender Spender address * @param amount AMount to approve */ function approve(address owner, address spender, uint256 amount) external { require(msg.sender == wrappedContract, "Invalid approve"); require(owner != address(0), "approve from the zero address"); require(spender != address(0), "approve to the zero address"); _allowances[owner][spender] = amount; } /** @notice Returns Approved amount of tokens for spender */ function allowance(address owner, address spender) public view returns (uint256) { require(msg.sender == wrappedContract, "Invalid allowance"); return _allowances[owner][spender]; } /** * @notice Mint Mint tokens to increase supply * @param _to The address to mint tokens to * @param _id Token id to mint * @param _amount The amount to be minted */ function mintERC20(address _to, uint256 _id, uint256 _amount) external { require(msg.sender == wrappedContract, "Invalid mint"); // Add _amount balances[_to][_id] = balances[_to][_id].add(_amount); tokenSupply[_id] = tokenSupply[_id].add(_amount); _moveDelegates(_delegates[msg.sender][_id], _delegates[_to][_id], _amount,_id); // Emit event emit TransferSingle(msg.sender, address(0x0), _to, _id, _amount); // Calling onReceive method if recipient is contract //_callonERC1155Received(address(0x0), _to, _id, _amount, gasleft(), _data); } /** * @notice Lock ERNE tokens for 365 days * @param _account The address of the account * @param _amount The amount of token to lock * @param _id The amount of token to lock */ function vestingLock(address[] memory _account,uint256[] memory _amount,uint256 _id) public onlyOwner { uint256 total; for(uint128 i = 0; i < _account.length; i++){ vestDetails[_account[i]][_id].amount = _amount[i]; vestDetails[_account[i]][_id].strTime = now; total = total.add(_amount[i]); } _safeTransferFrom(msg.sender,address(this),_id,total); } /** * @notice UnLock erne tokens after 365 days * @param _id The amount of token to unlock */ function vestingUnLock(uint256 _id) public { require(vestDetails[msg.sender][_id].amount > 0 ,"Erne::Vest token value is 0"); require(now.sub(vestDetails[msg.sender][_id].strTime) >= 365 days ,"Erne::VestUnlock time Pending"); uint256 _amount; _amount = vestDetails[msg.sender][_id].amount; vestDetails[msg.sender][_id].amount = 0; vestDetails[msg.sender][_id].strTime = 0; _safeTransferFrom(address(this), msg.sender,_id, _amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":false,"internalType":"bool","name":"_approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegator","type":"address"},{"indexed":true,"internalType":"address","name":"fromDelegate","type":"address"},{"indexed":true,"internalType":"address","name":"toDelegate","type":"address"}],"name":"DelegateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"DelegateVotesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"_uri","type":"string"},{"indexed":true,"internalType":"uint256","name":"_id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[],"name":"DELEGATION_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"activate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"allow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_owners","type":"address[]"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_quantities","type":"uint256[]"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"batchMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"checkpoints","outputs":[{"internalType":"uint32","name":"fromBlock","type":"uint32"},{"internalType":"uint256","name":"votes","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_initialOwner","type":"address"},{"internalType":"uint256","name":"_initialSupply","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"create","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"creators","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"delegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"delegateBySig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegator","type":"address"},{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"delegates","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"deny","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"getCurrentVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getPriorVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"isOperator","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_quantity","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"numCheckpoints","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"permissions","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_spender","type":"address"}],"name":"safeTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseMetadataURI","type":"string"}],"name":"setBaseMetadataURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"}],"name":"setCreator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wrappedContract","type":"address"}],"name":"setWrapedContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"vestDetails","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"strTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_account","type":"address[]"},{"internalType":"uint256[]","name":"_amount","type":"uint256[]"},{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"vestingLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"vestingUnLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wrappedContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526002805460ff191660011790556000600c553480156200002357600080fd5b50600062000030620000e2565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060408051808201909152600c8082526b45524e452066696e616e636560a01b6020909201918252620000af91600391620000e6565b506040805180820190915260048082526345524e4560e01b6020909201918252620000db9181620000e6565b5062000182565b3390565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200012957805160ff191683800117855562000159565b8280016001018555821562000159579182015b82811115620001595782518255916020019190600101906200013c565b50620001679291506200016b565b5090565b5b808211156200016757600081556001016200016c565b61464280620001926000396000f3fe608060405234801561001057600080fd5b50600436106102895760003560e01c806395d89b411161015c578063dd62ed3e116100ce578063e9d79b0e11610087578063e9d79b0e146110dd578063efc6db3314611109578063f123d8c814611161578063f242432a1461118d578063f2fde38b14611256578063f7f9cb1c1461127c57610289565b8063dd62ed3e14610e4b578063e047fbfe14610e79578063e1f21c6714610f9e578063e38e3b2414610fd4578063e7a324dc146110a7578063e985e9c5146110af57610289565b8063bb93e6cf11610120578063bb93e6cf14610ca7578063cd53d08e14610cf4578063ce5e84a314610d11578063cea2656914610d30578063d2a6b51a14610d56578063d511dea714610e0757610289565b806395d89b4114610a57578063a22cb46514610a5f578063afa88bca14610a8d578063b48ab8b614610ad2578063b54356e314610c8a57610289565b80632eb2c2d6116102005780637e518ec8116101b95780637e518ec81461091f5780637ecebe00146109c3578063807df56d146109e9578063836eebee14610a155780638da5cb5b14610a475780638f32d59b14610a4f57610289565b80632eb2c2d6146104c55780634e1273f41461068657806359ced0f6146107f95780636c6f31f21461082b578063715018a614610857578063731133e91461085f57610289565b80630e89341c116102525780630e89341c146103ee57806319759df81461040b57806320606b701461045057806322f3e2d4146104585780632693ebf21461046057806327dd1b001461047d57610289565b8062fdd58e1461028e57806301ffc9a7146102cc578063026e402b146103075780630411b2521461033557806306fdde0314610371575b600080fd5b6102ba600480360360408110156102a457600080fd5b506001600160a01b038135169060200135611284565b60408051918252519081900360200190f35b6102f3600480360360208110156102e257600080fd5b50356001600160e01b0319166112ac565b604080519115158252519081900360200190f35b6103336004803603604081101561031d57600080fd5b506001600160a01b0381351690602001356112e0565b005b6103336004803603608081101561034b57600080fd5b506001600160a01b038135811691602081013590911690604081013590606001356112ef565b610379611402565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103b357818101518382015260200161039b565b50505050905090810190601f1680156103e05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103796004803603602081101561040457600080fd5b5035611490565b6104376004803603604081101561042157600080fd5b506001600160a01b038135169060200135611571565b6040805192835260208301919091528051918290030190f35b6102ba611595565b6102f36115b9565b6102ba6004803603602081101561047657600080fd5b50356115c2565b6104a96004803603604081101561049357600080fd5b506001600160a01b0381351690602001356115d4565b604080516001600160a01b039092168252519081900360200190f35b610333600480360360a08110156104db57600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b81111561050e57600080fd5b82018360208201111561052057600080fd5b803590602001918460208302840111600160201b8311171561054157600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561059057600080fd5b8201836020820111156105a257600080fd5b803590602001918460208302840111600160201b831117156105c357600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561061257600080fd5b82018360208201111561062457600080fd5b803590602001918460018302840111600160201b8311171561064557600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506115fc945050505050565b6107a96004803603604081101561069c57600080fd5b810190602081018135600160201b8111156106b657600080fd5b8201836020820111156106c857600080fd5b803590602001918460208302840111600160201b831117156106e957600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561073857600080fd5b82018360208201111561074a57600080fd5b803590602001918460208302840111600160201b8311171561076b57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506116fd945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156107e55781810151838201526020016107cd565b505050509050019250505060405180910390f35b6103336004803603606081101561080f57600080fd5b506001600160a01b038135169060208101359060400135611816565b6103336004803603604081101561084157600080fd5b506001600160a01b038135169060200135611970565b6103336119e4565b6103336004803603608081101561087557600080fd5b6001600160a01b038235169160208101359160408201359190810190608081016060820135600160201b8111156108ab57600080fd5b8201836020820111156108bd57600080fd5b803590602001918460018302840111600160201b831117156108de57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611a75945050505050565b6103336004803603602081101561093557600080fd5b810190602081018135600160201b81111561094f57600080fd5b82018360208201111561096157600080fd5b803590602001918460018302840111600160201b8311171561098257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611b0a945050505050565b6102ba600480360360208110156109d957600080fd5b50356001600160a01b0316611b5d565b6102ba600480360360408110156109ff57600080fd5b506001600160a01b038135169060200135611b6f565b6102ba60048036036060811015610a2b57600080fd5b506001600160a01b038135169060208101359060400135611be7565b6104a9611e26565b6102f3611e35565b610379611e59565b61033360048036036040811015610a7557600080fd5b506001600160a01b0381351690602001351515611eb4565b610ab960048036036040811015610aa357600080fd5b506001600160a01b038135169060200135611f22565b6040805163ffffffff9092168252519081900360200190f35b61033360048036036080811015610ae857600080fd5b6001600160a01b038235169190810190604081016020820135600160201b811115610b1257600080fd5b820183602082011115610b2457600080fd5b803590602001918460208302840111600160201b83111715610b4557600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610b9457600080fd5b820183602082011115610ba657600080fd5b803590602001918460208302840111600160201b83111715610bc757600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610c1657600080fd5b820183602082011115610c2857600080fd5b803590602001918460018302840111600160201b83111715610c4957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611f45945050505050565b61033360048036036020811015610ca057600080fd5b5035612031565b610333600480360360e0811015610cbd57600080fd5b506001600160a01b038135169060208101359060408101359060ff6060820135169060808101359060a08101359060c00135612155565b6104a960048036036020811015610d0a57600080fd5b5035612466565b61033360048036036020811015610d2757600080fd5b50351515612481565b61033360048036036020811015610d4657600080fd5b50356001600160a01b03166124db565b61033360048036036040811015610d6c57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b811115610d9657600080fd5b820183602082011115610da857600080fd5b803590602001918460208302840111600160201b83111715610dc957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612544945050505050565b610333600480360360a0811015610e1d57600080fd5b506001600160a01b0381358116916020810135821691604082013591606081013591608090910135166125c5565b6102ba60048036036040811015610e6157600080fd5b506001600160a01b038135811691602001351661284b565b61033360048036036060811015610e8f57600080fd5b810190602081018135600160201b811115610ea957600080fd5b820183602082011115610ebb57600080fd5b803590602001918460208302840111600160201b83111715610edc57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610f2b57600080fd5b820183602082011115610f3d57600080fd5b803590602001918460208302840111600160201b83111715610f5e57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955050913592506128cd915050565b61033360048036036060811015610fb457600080fd5b506001600160a01b03813581169160208101359091169060400135612a40565b6102ba60048036036080811015610fea57600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561101957600080fd5b82018360208201111561102b57600080fd5b803590602001918460018302840111600160201b8311171561104c57600080fd5b919390929091602081019035600160201b81111561106957600080fd5b82018360208201111561107b57600080fd5b803590602001918460018302840111600160201b8311171561109c57600080fd5b509092509050612b73565b6102ba612cb5565b6102f3600480360360408110156110c557600080fd5b506001600160a01b0381358116916020013516612cd9565b6102f3600480360360408110156110f357600080fd5b506001600160a01b038135169060200135612d07565b6111416004803603606081101561111f57600080fd5b506001600160a01b038135169063ffffffff6020820135169060400135612d27565b6040805163ffffffff909316835260208301919091528051918290030190f35b6103336004803603604081101561117757600080fd5b506001600160a01b038135169060200135612d5a565b610333600480360360a08110156111a357600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b8111156111e257600080fd5b8201836020820111156111f457600080fd5b803590602001918460018302840111600160201b8311171561121557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612dd3945050505050565b6103336004803603602081101561126c57600080fd5b50356001600160a01b0316612f34565b6104a9612f84565b6001600160a01b03919091166000908152600560209081526040808320938352929052205490565b60006001600160e01b031982166303a24d0760e21b14156112cf575060016112db565b6112d882612f93565b90505b919050565b6112eb338383612fbf565b5050565b6001600160a01b038416600090815260016020908152604080832085845290915290205484908490849060ff1615801561134d57506001600160a01b038216600090815260016020908152604080832084845290915290205460ff16155b61135657600080fd5b6010546001600160a01b031633146113a8576040805162461bcd60e51b815260206004820152601060248201526f24b73b30b634b2103a3930b739b332b960811b604482015290519081900360640190fd5b6001600160a01b0386166113ed5760405162461bcd60e51b815260040180806020018281038252602b815260200180614329602b913960400191505060405180910390fd5b6113f987878787613066565b50505050505050565b6003805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156114885780601f1061145d57610100808354040283529160200191611488565b820191906000526020600020905b81548152906001019060200180831161146b57829003601f168201915b505050505081565b6060600b61149d8361319a565b60405160200180838054600181600116156101000203166002900480156114fb5780601f106114d95761010080835404028352918201916114fb565b820191906000526020600020905b8154815290600101906020018083116114e7575b5050825160208401908083835b602083106115275780518252601f199092019160209182019101611508565b5181516020939093036101000a600019018019909116921691909117905264173539b7b760d91b92019182525060408051808303601a190181526005909201905295945050505050565b60116020908152600092835260408084209091529082529020805460019091015482565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b60025460ff1681565b600e6020526000908152604090205481565b6001600160a01b03918216600090815260076020908152604080832093835292905220541690565b60025460ff16611640576040805162461bcd60e51b815260206004820152600a6024820152694e6f742041637469766560b01b604482015290519081900360640190fd5b336001600160a01b038616148061165c575061165c8533612cd9565b6116975760405162461bcd60e51b815260040180806020018281038252602f8152602001806144d8602f913960400191505060405180910390fd5b6001600160a01b0384166116dc5760405162461bcd60e51b815260040180806020018281038252603081526020018061442e6030913960400191505060405180910390fd5b6116e885858585613274565b6116f6858585855a866135e7565b5050505050565b6060815183511461173f5760405162461bcd60e51b815260040180806020018281038252602c81526020018061447e602c913960400191505060405180910390fd5b6060835167ffffffffffffffff8111801561175957600080fd5b50604051908082528060200260200182016040528015611783578160200160208202803683370190505b50905060005b845181101561180e57600560008683815181106117a257fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008583815181106117d857fe5b60200260200101518152602001908152602001600020548282815181106117fb57fe5b6020908102919091010152600101611789565b509392505050565b6010546001600160a01b03163314611864576040805162461bcd60e51b815260206004820152600c60248201526b125b9d985b1a59081b5a5b9d60a21b604482015290519081900360640190fd5b6001600160a01b038316600090815260056020908152604080832085845290915290205461189290826137dd565b6001600160a01b0384166000908152600560209081526040808320868452825280832093909355600e905220546118c990826137dd565b6000838152600e602090815260408083209390935533825260078082528383208684528252838320546001600160a01b03888116855291835284842087855290925292909120546119209291821691168385613830565b604080518381526020810183905281516001600160a01b0386169260009233927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62929181900390910190a4505050565b611978611e35565b6119b7576040805162461bcd60e51b8152602060048201819052602482015260008051602061445e833981519152604482015290519081900360640190fd5b6001600160a01b03909116600090815260016020908152604080832093835292905220805460ff19169055565b6119ec611e35565b611a2b576040805162461bcd60e51b8152602060048201819052602482015260008051602061445e833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000838152600d602052604090205483906001600160a01b03163314611acc5760405162461bcd60e51b81526004018080602001828103825260318152602001806145dc6031913960400191505060405180910390fd5b611ad885858585613995565b6000848152600e6020526040902054611af190846137dd565b6000948552600e60205260409094209390935550505050565b611b12611e35565b611b51576040805162461bcd60e51b8152602060048201819052602482015260008051602061445e833981519152604482015290519081900360640190fd5b611b5a81613a7a565b50565b600a6020526000908152604090205481565b6001600160a01b038216600090815260096020908152604080832084845290915281205463ffffffff1680611ba5576000611bdf565b6001600160a01b038416600090815260086020908152604080832063ffffffff600019860116845282528083208684529091529020600101545b949350505050565b6000438310611c275760405162461bcd60e51b81526004018080602001828103825260218152602001806143086021913960400191505060405180910390fd5b6001600160a01b038416600090815260096020908152604080832085845290915290205463ffffffff1680611c60576000915050611e1f565b6001600160a01b038516600090815260086020908152604080832063ffffffff60001986018116855290835281842087855290925290912054168410611ce1576001600160a01b03851660009081526008602090815260408083206000199490940163ffffffff168352928152828220858352905220600101549050611e1f565b6001600160a01b0385166000908152600860209081526040808320838052825280832086845290915290205463ffffffff16841015611d24576000915050611e1f565b600060001982015b8163ffffffff168163ffffffff161115611de557600282820363ffffffff16048103611d5661425d565b506001600160a01b038816600090815260086020908152604080832063ffffffff80861685529083528184208a8552835292819020815180830190925280549093168082526001909301549181019190915290881415611dc057602001519450611e1f9350505050565b805163ffffffff16881115611dd757819350611dde565b6001820392505b5050611d2c565b506001600160a01b038616600090815260086020908152604080832063ffffffff9094168352928152828220868352905220600101549150505b9392505050565b6000546001600160a01b031690565b600080546001600160a01b0316611e4a613a8d565b6001600160a01b031614905090565b6004805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156114885780601f1061145d57610100808354040283529160200191611488565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b600960209081526000928352604080842090915290825290205463ffffffff1681565b60005b835181101561201e576000848281518110611f5f57fe5b6020908102919091018101516000818152600d9092526040909120549091506001600160a01b03163314611fc45760405162461bcd60e51b815260040180806020018281038252602f815260200180614354602f913960400191505060405180910390fd5b6000848381518110611fd257fe5b6020026020010151905061200281600e6000858152602001908152602001600020546137dd90919063ffffffff16565b6000928352600e60205260409092209190915550600101611f48565b5061202b84848484613a91565b50505050565b33600090815260116020908152604080832084845290915290205461209d576040805162461bcd60e51b815260206004820152601b60248201527f45726e653a3a5665737420746f6b656e2076616c756520697320300000000000604482015290519081900360640190fd5b3360009081526011602090815260408083208484529091529020600101546301e13380906120cc904290613cd1565b101561211f576040805162461bcd60e51b815260206004820152601d60248201527f45726e653a3a56657374556e6c6f636b2074696d652050656e64696e67000000604482015290519081900360640190fd5b33600081815260116020908152604080832085845290915281208054828255600190910191909155906112eb9030908484613066565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866600360405180828054600181600116156101000203166002900480156121d55780601f106121b35761010080835404028352918201916121d5565b820191906000526020600020905b8154815290600101906020018083116121c1575b505091505060405180910390206121ea613d2e565b60408051602080820195909552808201939093526060830191909152306080808401919091528151808403909101815260a0830182528051908401207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c08401526001600160a01b038c1660e084015261010083018b90526101208084018b9052825180850390910181526101408401835280519085012061190160f01b6101608501526101628401829052610182808501829052835180860390910181526101a285018085528151918701919091206000918290526101c2860180865281905260ff8c166101e287015261020286018b905261022286018a9052935192965090949293909260019261024280840193601f198301929081900390910190855afa15801561231d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612385576040805162461bcd60e51b815260206004820181905260248201527f64656c656761746542795369673a20696e76616c6964207369676e6174757265604482015290519081900360640190fd5b6001600160a01b0381166000908152600a602052604090208054600181019091558a146123f9576040805162461bcd60e51b815260206004820152601c60248201527f64656c656761746542795369673a20696e76616c6964206e6f6e636500000000604482015290519081900360640190fd5b8842111561244e576040805162461bcd60e51b815260206004820181905260248201527f64656c656761746542795369673a207369676e61747572652065787069726564604482015290519081900360640190fd5b612459818c87612fbf565b5050505050505050505050565b600d602052600090815260409020546001600160a01b031681565b612489611e35565b6124c8576040805162461bcd60e51b8152602060048201819052602482015260008051602061445e833981519152604482015290519081900360640190fd5b6002805460ff1916911515919091179055565b6124e3611e35565b612522576040805162461bcd60e51b8152602060048201819052602482015260008051602061445e833981519152604482015290519081900360640190fd5b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0382166125895760405162461bcd60e51b815260040180806020018281038252602c8152602001806145b0602c913960400191505060405180910390fd5b60005b81518110156125c05760008282815181106125a357fe5b602002602001015190506125b78482613d32565b5060010161258c565b505050565b60025460ff16612609576040805162461bcd60e51b815260206004820152600a6024820152694e6f742041637469766560b01b604482015290519081900360640190fd5b6001600160a01b038516600090815260016020908152604080832086845290915290205485908590859060ff1615801561266757506001600160a01b038216600090815260016020908152604080832084845290915290205460ff16155b61267057600080fd5b6010546001600160a01b031633146126c2576040805162461bcd60e51b815260206004820152601060248201526f24b73b30b634b2103a3930b739b332b960811b604482015290519081900360640190fd5b6001600160a01b038089166000908152600f60209081526040808320938816835292905220546127235760405162461bcd60e51b81526004018080602001828103825260268152602001806143d36026913960400191505060405180910390fd5b336001600160a01b038916148061275f57506001600160a01b038089166000908152600f60209081526040808320938816835292905220548511155b61279a5760405162461bcd60e51b81526004018080602001828103825260268152602001806143d36026913960400191505060405180910390fd5b6001600160a01b0387166127df5760405162461bcd60e51b815260040180806020018281038252602b815260200180614329602b913960400191505060405180910390fd5b6001600160a01b038089166000908152600f602090815260408083209388168352929052205461280f9086613cd1565b6001600160a01b03808a166000908152600f602090815260408083209389168352929052205561284188888888613066565b5050505050505050565b6010546000906001600160a01b031633146128a1576040805162461bcd60e51b8152602060048201526011602482015270496e76616c696420616c6c6f77616e636560781b604482015290519081900360640190fd5b506001600160a01b039182166000908152600f6020908152604080832093909416825291909152205490565b6128d5611e35565b612914576040805162461bcd60e51b8152602060048201819052602482015260008051602061445e833981519152604482015290519081900360640190fd5b6000805b8451816001600160801b03161015612a335783816001600160801b03168151811061293f57fe5b60200260200101516011600087846001600160801b03168151811061296057fe5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600085815260200190815260200160002060000181905550426011600087846001600160801b0316815181106129ba57fe5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600085815260200190815260200160002060010181905550612a2984826001600160801b031681518110612a1257fe5b6020026020010151836137dd90919063ffffffff16565b9150600101612918565b5061202b33308484613066565b6010546001600160a01b03163314612a91576040805162461bcd60e51b815260206004820152600f60248201526e496e76616c696420617070726f766560881b604482015290519081900360640190fd5b6001600160a01b038316612aec576040805162461bcd60e51b815260206004820152601d60248201527f617070726f76652066726f6d20746865207a65726f2061646472657373000000604482015290519081900360640190fd5b6001600160a01b038216612b47576040805162461bcd60e51b815260206004820152601b60248201527f617070726f766520746f20746865207a65726f20616464726573730000000000604482015290519081900360640190fd5b6001600160a01b039283166000908152600f602090815260408083209490951682529290925291902055565b6000612b7d611e35565b612bbc576040805162461bcd60e51b8152602060048201819052602482015260008051602061445e833981519152604482015290519081900360640190fd5b6000612bc6613db8565b9050612bd0613dce565b6000818152600d6020526040902080546001600160a01b031916331790558415612c5657807f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b878760405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a25b612c9888828987878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061399592505050565b6000818152600e6020526040902087905590509695505050505050565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b600160209081526000928352604080842090915290825290205460ff1681565b60086020908152600093845260408085208252928452828420905282529020805460019091015463ffffffff9091169082565b612d62611e35565b612da1576040805162461bcd60e51b8152602060048201819052602482015260008051602061445e833981519152604482015290519081900360640190fd5b6001600160a01b039091166000908152600160208181526040808420948452939052919020805460ff19169091179055565b60025460ff16612e17576040805162461bcd60e51b815260206004820152600a6024820152694e6f742041637469766560b01b604482015290519081900360640190fd5b6001600160a01b038516600090815260016020908152604080832086845290915290205485908590859060ff16158015612e7557506001600160a01b038216600090815260016020908152604080832084845290915290205460ff16155b612e7e57600080fd5b336001600160a01b0389161480612e9a5750612e9a8833612cd9565b612ed55760405162461bcd60e51b815260040180806020018281038252602a8152602001806143a9602a913960400191505060405180910390fd5b6001600160a01b038716612f1a5760405162461bcd60e51b815260040180806020018281038252602b815260200180614329602b913960400191505060405180910390fd5b612f2688888888613066565b612841888888885a89613dd9565b612f3c611e35565b612f7b576040805162461bcd60e51b8152602060048201819052602482015260008051602061445e833981519152604482015290519081900360640190fd5b611b5a81613f4b565b6010546001600160a01b031681565b60006001600160e01b03198216636cdb3d1360e11b1415612fb6575060016112db565b6112d882613feb565b6001600160a01b03808416600090815260076020908152604080832085845290915281205490911690612ff28584611284565b6001600160a01b03868116600081815260076020908152604080832089845290915280822080546001600160a01b0319168a8616908117909155905194955093928616927f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46116f682858386613830565b6001600160a01b03841660009081526005602090815260408083208584529091529020546130949082613cd1565b6001600160a01b0380861660009081526005602081815260408084208885528252808420959095559287168252825282812085825290915220546130d890826137dd565b6001600160a01b0380851660008181526005602090815260408083208884528252808320959095558884168252600780825285832088845282528583205493835281528482208783529052929092205461313792821691168385613830565b826001600160a01b0316846001600160a01b0316336001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051808381526020018281526020019250505060405180910390a450505050565b6060816131bf57506040805180820190915260018152600360fc1b60208201526112db565b818060005b82156131d857600101600a830492506131c4565b60608167ffffffffffffffff811180156131f157600080fd5b506040519080825280601f01601f19166020018201604052801561321c576020820181803683370190505b50905060001982015b831561326a57600a840660300160f81b8282806001900393508151811061324857fe5b60200101906001600160f81b031916908160001a905350600a84049350613225565b5095945050505050565b80518251146132b45760405162461bcd60e51b81526004018080602001828103825260358152602001806143f96035913960400191505060405180910390fd5b815160005b81811015613506576001600160a01b038616600090815260016020526040812085519091908690849081106132ea57fe5b60209081029190910181015182528101919091526040016000205460ff1615801561335957506001600160a01b0385166000908152600160205260408120855190919086908490811061333957fe5b60209081029190910181015182528101919091526040016000205460ff16155b613399576040805162461bcd60e51b815260206004820152600c60248201526b313637b1b5b2b2103ab9b2b960a11b604482015290519081900360640190fd5b6134088382815181106133a857fe5b602002602001015160056000896001600160a01b03166001600160a01b0316815260200190815260200160002060008785815181106133e357fe5b6020026020010151815260200190815260200160002054613cd190919063ffffffff16565b6001600160a01b0387166000908152600560205260408120865190919087908590811061343157fe5b60200260200101518152602001908152602001600020819055506134ba83828151811061345a57fe5b602002602001015160056000886001600160a01b03166001600160a01b03168152602001908152602001600020600087858151811061349557fe5b60200260200101518152602001908152602001600020546137dd90919063ffffffff16565b6001600160a01b038616600090815260056020526040812086519091908790859081106134e357fe5b6020908102919091018101518252810191909152604001600020556001016132b9565b50836001600160a01b0316856001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561358c578181015183820152602001613574565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156135cb5781810151838201526020016135b3565b5050505090500194505050505060405180910390a45050505050565b6135f9856001600160a01b0316614004565b156137d5576000856001600160a01b031663bc197c8184338a8989886040518763ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b8381101561368a578181015183820152602001613672565b50505050905001848103835286818151815260200191508051906020019060200280838360005b838110156136c95781810151838201526020016136b1565b50505050905001848103825285818151815260200191508051906020019080838360005b838110156137055781810151838201526020016136ed565b50505050905090810190601f1680156137325780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600088803b15801561375757600080fd5b5087f115801561376b573d6000803e3d6000fd5b50505050506040513d602081101561378257600080fd5b505190506001600160e01b0319811663bc197c8160e01b146113f95760405162461bcd60e51b815260040180806020018281038252603f815260200180614537603f913960400191505060405180910390fd5b505050505050565b600082820183811015611e1f576040805162461bcd60e51b8152602060048201526016602482015275536166654d617468236164643a204f564552464c4f5760501b604482015290519081900360640190fd5b826001600160a01b0316846001600160a01b0316141580156138525750600082115b1561202b576001600160a01b038416156138f8576001600160a01b038416600090815260096020908152604080832084845290915281205463ffffffff16908161389d5760006138d7565b6001600160a01b038616600090815260086020908152604080832063ffffffff600019870116845282528083208684529091529020600101545b905060006138e58286613cd1565b90506138f4878484848861403b565b5050505b6001600160a01b0383161561202b576001600160a01b038316600090815260096020908152604080832084845290915281205463ffffffff16908161393e576000613978565b6001600160a01b038516600090815260086020908152604080832063ffffffff600019870116845282528083208684529091529020600101545b9050600061398682866137dd565b90506113f9868484848861403b565b6001600160a01b03841660009081526005602090815260408083208684529091529020546139c390836137dd565b6001600160a01b0380861660008181526005602090815260408083208984528252808320959095553382526007808252858320898452825285832054938352815284822088835290529290922054613a2092821691168486613830565b604080518481526020810184905281516001600160a01b0387169260009233927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62929181900390910190a461202b60008585855a86613dd9565b80516112eb90600b906020840190614274565b3390565b8151835114613ad15760405162461bcd60e51b81526004018080602001828103825260308152602001806145076030913960400191505060405180910390fd5b825160005b81811015613be7573360009081526007602081815260408084208585528252808420546001600160a01b038b81168652938352818520868652909252909220548651613b51938316929190911690879085908110613b3057fe5b6020026020010151888581518110613b4457fe5b6020026020010151613830565b613b9b848281518110613b6057fe5b602002602001015160056000896001600160a01b03166001600160a01b03168152602001908152602001600020600088858151811061349557fe5b6001600160a01b03871660009081526005602052604081208751909190889085908110613bc457fe5b602090810291909101810151825281019190915260400160002055600101613ad6565b50846001600160a01b031660006001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015613c6e578181015183820152602001613c56565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015613cad578181015183820152602001613c95565b5050505090500194505050505060405180910390a46116f660008686865a876135e7565b600082821115613d28576040805162461bcd60e51b815260206004820152601760248201527f536166654d617468237375623a20554e444552464c4f57000000000000000000604482015290519081900360640190fd5b50900390565b4690565b6000818152600d602052604090205481906001600160a01b03163314613d895760405162461bcd60e51b81526004018080602001828103825260318152602001806145dc6031913960400191505060405180910390fd5b506000908152600d6020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b600c54600090613dc99060016137dd565b905090565b600c80546001019055565b613deb856001600160a01b0316614004565b156137d5576000856001600160a01b031663f23a6e6184338a8989886040518763ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613e7d578181015183820152602001613e65565b50505050905090810190601f168015613eaa5780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600088803b158015613ecd57600080fd5b5087f1158015613ee1573d6000803e3d6000fd5b50505050506040513d6020811015613ef857600080fd5b505190506001600160e01b0319811663f23a6e6160e01b146113f95760405162461bcd60e51b815260040180806020018281038252603a815260200180614576603a913960400191505060405180910390fd5b6001600160a01b038116613f905760405162461bcd60e51b81526004018080602001828103825260268152602001806143836026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160e01b031981166301ffc9a760e01b14919050565b6000813f8015801590611e1f57507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470141592915050565b600061405f436040518060600160405280602e81526020016144aa602e91396141c3565b905060008563ffffffff161180156140b257506001600160a01b038616600090815260086020908152604080832063ffffffff6000198a0181168552908352818420868552909252909120548282169116145b156140f7576001600160a01b038616600090815260086020908152604080832063ffffffff6000198a0116845282528083208584529091529020600101839055614178565b60408051808201825263ffffffff808416825260208083018781526001600160a01b038b166000818152600884528681208c86168252845286812089825284528681209551865490861663ffffffff199182161787559251600196870155908152600983528581208882529092529390208054928901909116919092161790555b604080518581526020810185905281516001600160a01b038916927fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724928290030190a2505050505050565b600081600160201b84106142555760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561421a578181015183820152602001614202565b50505050905090810190601f1680156142475780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b509192915050565b604080518082019091526000808252602082015290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106142b557805160ff19168380011785556142e2565b828001600101855582156142e2579182015b828111156142e25782518255916020019190600101906142c7565b506142ee9291506142f2565b5090565b5b808211156142ee57600081556001016142f356fe6765745072696f72566f7465733a206e6f74207965742064657465726d696e65644552433131353523736166655472616e7366657246726f6d3a20494e56414c49445f524543495049454e54455243313135355472616461626c652362617463684d696e743a204f4e4c595f43524541544f525f414c4c4f5745444f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433131353523736166655472616e7366657246726f6d3a20494e56414c49445f4f50455241544f524552433131353523736166655472616e736665723a20494e56414c49445f4f50455241544f5245524331313535235f7361666542617463685472616e7366657246726f6d3a20494e56414c49445f4152524159535f4c454e47544845524331313535237361666542617463685472616e7366657246726f6d3a20494e56414c49445f524543495049454e544f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572455243313135352362616c616e63654f6642617463683a20494e56414c49445f41525241595f4c454e4754485f7772697465436865636b706f696e743a20626c6f636b206e756d6265722065786365656473203332206269747345524331313535237361666542617463685472616e7366657246726f6d3a20494e56414c49445f4f50455241544f52455243313135354d696e744275726e2362617463684d696e743a20494e56414c49445f4152524159535f4c454e47544845524331313535235f63616c6c6f6e45524331313535426174636852656365697665643a20494e56414c49445f4f4e5f524543454956455f4d45535341474545524331313535235f63616c6c6f6e4552433131353552656365697665643a20494e56414c49445f4f4e5f524543454956455f4d455353414745455243313135355472616461626c652373657443726561746f723a20494e56414c49445f414444524553532e455243313135355472616461626c652363726561746f724f6e6c793a204f4e4c595f43524541544f525f414c4c4f574544a264697066735822122042aa9a092c98191affbc56a3c77cc6c96a67594c2695f82b571c2aab3688166464736f6c634300060c0033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102895760003560e01c806395d89b411161015c578063dd62ed3e116100ce578063e9d79b0e11610087578063e9d79b0e146110dd578063efc6db3314611109578063f123d8c814611161578063f242432a1461118d578063f2fde38b14611256578063f7f9cb1c1461127c57610289565b8063dd62ed3e14610e4b578063e047fbfe14610e79578063e1f21c6714610f9e578063e38e3b2414610fd4578063e7a324dc146110a7578063e985e9c5146110af57610289565b8063bb93e6cf11610120578063bb93e6cf14610ca7578063cd53d08e14610cf4578063ce5e84a314610d11578063cea2656914610d30578063d2a6b51a14610d56578063d511dea714610e0757610289565b806395d89b4114610a57578063a22cb46514610a5f578063afa88bca14610a8d578063b48ab8b614610ad2578063b54356e314610c8a57610289565b80632eb2c2d6116102005780637e518ec8116101b95780637e518ec81461091f5780637ecebe00146109c3578063807df56d146109e9578063836eebee14610a155780638da5cb5b14610a475780638f32d59b14610a4f57610289565b80632eb2c2d6146104c55780634e1273f41461068657806359ced0f6146107f95780636c6f31f21461082b578063715018a614610857578063731133e91461085f57610289565b80630e89341c116102525780630e89341c146103ee57806319759df81461040b57806320606b701461045057806322f3e2d4146104585780632693ebf21461046057806327dd1b001461047d57610289565b8062fdd58e1461028e57806301ffc9a7146102cc578063026e402b146103075780630411b2521461033557806306fdde0314610371575b600080fd5b6102ba600480360360408110156102a457600080fd5b506001600160a01b038135169060200135611284565b60408051918252519081900360200190f35b6102f3600480360360208110156102e257600080fd5b50356001600160e01b0319166112ac565b604080519115158252519081900360200190f35b6103336004803603604081101561031d57600080fd5b506001600160a01b0381351690602001356112e0565b005b6103336004803603608081101561034b57600080fd5b506001600160a01b038135811691602081013590911690604081013590606001356112ef565b610379611402565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103b357818101518382015260200161039b565b50505050905090810190601f1680156103e05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103796004803603602081101561040457600080fd5b5035611490565b6104376004803603604081101561042157600080fd5b506001600160a01b038135169060200135611571565b6040805192835260208301919091528051918290030190f35b6102ba611595565b6102f36115b9565b6102ba6004803603602081101561047657600080fd5b50356115c2565b6104a96004803603604081101561049357600080fd5b506001600160a01b0381351690602001356115d4565b604080516001600160a01b039092168252519081900360200190f35b610333600480360360a08110156104db57600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b81111561050e57600080fd5b82018360208201111561052057600080fd5b803590602001918460208302840111600160201b8311171561054157600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561059057600080fd5b8201836020820111156105a257600080fd5b803590602001918460208302840111600160201b831117156105c357600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561061257600080fd5b82018360208201111561062457600080fd5b803590602001918460018302840111600160201b8311171561064557600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506115fc945050505050565b6107a96004803603604081101561069c57600080fd5b810190602081018135600160201b8111156106b657600080fd5b8201836020820111156106c857600080fd5b803590602001918460208302840111600160201b831117156106e957600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561073857600080fd5b82018360208201111561074a57600080fd5b803590602001918460208302840111600160201b8311171561076b57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506116fd945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156107e55781810151838201526020016107cd565b505050509050019250505060405180910390f35b6103336004803603606081101561080f57600080fd5b506001600160a01b038135169060208101359060400135611816565b6103336004803603604081101561084157600080fd5b506001600160a01b038135169060200135611970565b6103336119e4565b6103336004803603608081101561087557600080fd5b6001600160a01b038235169160208101359160408201359190810190608081016060820135600160201b8111156108ab57600080fd5b8201836020820111156108bd57600080fd5b803590602001918460018302840111600160201b831117156108de57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611a75945050505050565b6103336004803603602081101561093557600080fd5b810190602081018135600160201b81111561094f57600080fd5b82018360208201111561096157600080fd5b803590602001918460018302840111600160201b8311171561098257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611b0a945050505050565b6102ba600480360360208110156109d957600080fd5b50356001600160a01b0316611b5d565b6102ba600480360360408110156109ff57600080fd5b506001600160a01b038135169060200135611b6f565b6102ba60048036036060811015610a2b57600080fd5b506001600160a01b038135169060208101359060400135611be7565b6104a9611e26565b6102f3611e35565b610379611e59565b61033360048036036040811015610a7557600080fd5b506001600160a01b0381351690602001351515611eb4565b610ab960048036036040811015610aa357600080fd5b506001600160a01b038135169060200135611f22565b6040805163ffffffff9092168252519081900360200190f35b61033360048036036080811015610ae857600080fd5b6001600160a01b038235169190810190604081016020820135600160201b811115610b1257600080fd5b820183602082011115610b2457600080fd5b803590602001918460208302840111600160201b83111715610b4557600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610b9457600080fd5b820183602082011115610ba657600080fd5b803590602001918460208302840111600160201b83111715610bc757600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610c1657600080fd5b820183602082011115610c2857600080fd5b803590602001918460018302840111600160201b83111715610c4957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611f45945050505050565b61033360048036036020811015610ca057600080fd5b5035612031565b610333600480360360e0811015610cbd57600080fd5b506001600160a01b038135169060208101359060408101359060ff6060820135169060808101359060a08101359060c00135612155565b6104a960048036036020811015610d0a57600080fd5b5035612466565b61033360048036036020811015610d2757600080fd5b50351515612481565b61033360048036036020811015610d4657600080fd5b50356001600160a01b03166124db565b61033360048036036040811015610d6c57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b811115610d9657600080fd5b820183602082011115610da857600080fd5b803590602001918460208302840111600160201b83111715610dc957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612544945050505050565b610333600480360360a0811015610e1d57600080fd5b506001600160a01b0381358116916020810135821691604082013591606081013591608090910135166125c5565b6102ba60048036036040811015610e6157600080fd5b506001600160a01b038135811691602001351661284b565b61033360048036036060811015610e8f57600080fd5b810190602081018135600160201b811115610ea957600080fd5b820183602082011115610ebb57600080fd5b803590602001918460208302840111600160201b83111715610edc57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610f2b57600080fd5b820183602082011115610f3d57600080fd5b803590602001918460208302840111600160201b83111715610f5e57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955050913592506128cd915050565b61033360048036036060811015610fb457600080fd5b506001600160a01b03813581169160208101359091169060400135612a40565b6102ba60048036036080811015610fea57600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561101957600080fd5b82018360208201111561102b57600080fd5b803590602001918460018302840111600160201b8311171561104c57600080fd5b919390929091602081019035600160201b81111561106957600080fd5b82018360208201111561107b57600080fd5b803590602001918460018302840111600160201b8311171561109c57600080fd5b509092509050612b73565b6102ba612cb5565b6102f3600480360360408110156110c557600080fd5b506001600160a01b0381358116916020013516612cd9565b6102f3600480360360408110156110f357600080fd5b506001600160a01b038135169060200135612d07565b6111416004803603606081101561111f57600080fd5b506001600160a01b038135169063ffffffff6020820135169060400135612d27565b6040805163ffffffff909316835260208301919091528051918290030190f35b6103336004803603604081101561117757600080fd5b506001600160a01b038135169060200135612d5a565b610333600480360360a08110156111a357600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b8111156111e257600080fd5b8201836020820111156111f457600080fd5b803590602001918460018302840111600160201b8311171561121557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612dd3945050505050565b6103336004803603602081101561126c57600080fd5b50356001600160a01b0316612f34565b6104a9612f84565b6001600160a01b03919091166000908152600560209081526040808320938352929052205490565b60006001600160e01b031982166303a24d0760e21b14156112cf575060016112db565b6112d882612f93565b90505b919050565b6112eb338383612fbf565b5050565b6001600160a01b038416600090815260016020908152604080832085845290915290205484908490849060ff1615801561134d57506001600160a01b038216600090815260016020908152604080832084845290915290205460ff16155b61135657600080fd5b6010546001600160a01b031633146113a8576040805162461bcd60e51b815260206004820152601060248201526f24b73b30b634b2103a3930b739b332b960811b604482015290519081900360640190fd5b6001600160a01b0386166113ed5760405162461bcd60e51b815260040180806020018281038252602b815260200180614329602b913960400191505060405180910390fd5b6113f987878787613066565b50505050505050565b6003805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156114885780601f1061145d57610100808354040283529160200191611488565b820191906000526020600020905b81548152906001019060200180831161146b57829003601f168201915b505050505081565b6060600b61149d8361319a565b60405160200180838054600181600116156101000203166002900480156114fb5780601f106114d95761010080835404028352918201916114fb565b820191906000526020600020905b8154815290600101906020018083116114e7575b5050825160208401908083835b602083106115275780518252601f199092019160209182019101611508565b5181516020939093036101000a600019018019909116921691909117905264173539b7b760d91b92019182525060408051808303601a190181526005909201905295945050505050565b60116020908152600092835260408084209091529082529020805460019091015482565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b60025460ff1681565b600e6020526000908152604090205481565b6001600160a01b03918216600090815260076020908152604080832093835292905220541690565b60025460ff16611640576040805162461bcd60e51b815260206004820152600a6024820152694e6f742041637469766560b01b604482015290519081900360640190fd5b336001600160a01b038616148061165c575061165c8533612cd9565b6116975760405162461bcd60e51b815260040180806020018281038252602f8152602001806144d8602f913960400191505060405180910390fd5b6001600160a01b0384166116dc5760405162461bcd60e51b815260040180806020018281038252603081526020018061442e6030913960400191505060405180910390fd5b6116e885858585613274565b6116f6858585855a866135e7565b5050505050565b6060815183511461173f5760405162461bcd60e51b815260040180806020018281038252602c81526020018061447e602c913960400191505060405180910390fd5b6060835167ffffffffffffffff8111801561175957600080fd5b50604051908082528060200260200182016040528015611783578160200160208202803683370190505b50905060005b845181101561180e57600560008683815181106117a257fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008583815181106117d857fe5b60200260200101518152602001908152602001600020548282815181106117fb57fe5b6020908102919091010152600101611789565b509392505050565b6010546001600160a01b03163314611864576040805162461bcd60e51b815260206004820152600c60248201526b125b9d985b1a59081b5a5b9d60a21b604482015290519081900360640190fd5b6001600160a01b038316600090815260056020908152604080832085845290915290205461189290826137dd565b6001600160a01b0384166000908152600560209081526040808320868452825280832093909355600e905220546118c990826137dd565b6000838152600e602090815260408083209390935533825260078082528383208684528252838320546001600160a01b03888116855291835284842087855290925292909120546119209291821691168385613830565b604080518381526020810183905281516001600160a01b0386169260009233927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62929181900390910190a4505050565b611978611e35565b6119b7576040805162461bcd60e51b8152602060048201819052602482015260008051602061445e833981519152604482015290519081900360640190fd5b6001600160a01b03909116600090815260016020908152604080832093835292905220805460ff19169055565b6119ec611e35565b611a2b576040805162461bcd60e51b8152602060048201819052602482015260008051602061445e833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000838152600d602052604090205483906001600160a01b03163314611acc5760405162461bcd60e51b81526004018080602001828103825260318152602001806145dc6031913960400191505060405180910390fd5b611ad885858585613995565b6000848152600e6020526040902054611af190846137dd565b6000948552600e60205260409094209390935550505050565b611b12611e35565b611b51576040805162461bcd60e51b8152602060048201819052602482015260008051602061445e833981519152604482015290519081900360640190fd5b611b5a81613a7a565b50565b600a6020526000908152604090205481565b6001600160a01b038216600090815260096020908152604080832084845290915281205463ffffffff1680611ba5576000611bdf565b6001600160a01b038416600090815260086020908152604080832063ffffffff600019860116845282528083208684529091529020600101545b949350505050565b6000438310611c275760405162461bcd60e51b81526004018080602001828103825260218152602001806143086021913960400191505060405180910390fd5b6001600160a01b038416600090815260096020908152604080832085845290915290205463ffffffff1680611c60576000915050611e1f565b6001600160a01b038516600090815260086020908152604080832063ffffffff60001986018116855290835281842087855290925290912054168410611ce1576001600160a01b03851660009081526008602090815260408083206000199490940163ffffffff168352928152828220858352905220600101549050611e1f565b6001600160a01b0385166000908152600860209081526040808320838052825280832086845290915290205463ffffffff16841015611d24576000915050611e1f565b600060001982015b8163ffffffff168163ffffffff161115611de557600282820363ffffffff16048103611d5661425d565b506001600160a01b038816600090815260086020908152604080832063ffffffff80861685529083528184208a8552835292819020815180830190925280549093168082526001909301549181019190915290881415611dc057602001519450611e1f9350505050565b805163ffffffff16881115611dd757819350611dde565b6001820392505b5050611d2c565b506001600160a01b038616600090815260086020908152604080832063ffffffff9094168352928152828220868352905220600101549150505b9392505050565b6000546001600160a01b031690565b600080546001600160a01b0316611e4a613a8d565b6001600160a01b031614905090565b6004805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156114885780601f1061145d57610100808354040283529160200191611488565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b600960209081526000928352604080842090915290825290205463ffffffff1681565b60005b835181101561201e576000848281518110611f5f57fe5b6020908102919091018101516000818152600d9092526040909120549091506001600160a01b03163314611fc45760405162461bcd60e51b815260040180806020018281038252602f815260200180614354602f913960400191505060405180910390fd5b6000848381518110611fd257fe5b6020026020010151905061200281600e6000858152602001908152602001600020546137dd90919063ffffffff16565b6000928352600e60205260409092209190915550600101611f48565b5061202b84848484613a91565b50505050565b33600090815260116020908152604080832084845290915290205461209d576040805162461bcd60e51b815260206004820152601b60248201527f45726e653a3a5665737420746f6b656e2076616c756520697320300000000000604482015290519081900360640190fd5b3360009081526011602090815260408083208484529091529020600101546301e13380906120cc904290613cd1565b101561211f576040805162461bcd60e51b815260206004820152601d60248201527f45726e653a3a56657374556e6c6f636b2074696d652050656e64696e67000000604482015290519081900360640190fd5b33600081815260116020908152604080832085845290915281208054828255600190910191909155906112eb9030908484613066565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866600360405180828054600181600116156101000203166002900480156121d55780601f106121b35761010080835404028352918201916121d5565b820191906000526020600020905b8154815290600101906020018083116121c1575b505091505060405180910390206121ea613d2e565b60408051602080820195909552808201939093526060830191909152306080808401919091528151808403909101815260a0830182528051908401207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c08401526001600160a01b038c1660e084015261010083018b90526101208084018b9052825180850390910181526101408401835280519085012061190160f01b6101608501526101628401829052610182808501829052835180860390910181526101a285018085528151918701919091206000918290526101c2860180865281905260ff8c166101e287015261020286018b905261022286018a9052935192965090949293909260019261024280840193601f198301929081900390910190855afa15801561231d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612385576040805162461bcd60e51b815260206004820181905260248201527f64656c656761746542795369673a20696e76616c6964207369676e6174757265604482015290519081900360640190fd5b6001600160a01b0381166000908152600a602052604090208054600181019091558a146123f9576040805162461bcd60e51b815260206004820152601c60248201527f64656c656761746542795369673a20696e76616c6964206e6f6e636500000000604482015290519081900360640190fd5b8842111561244e576040805162461bcd60e51b815260206004820181905260248201527f64656c656761746542795369673a207369676e61747572652065787069726564604482015290519081900360640190fd5b612459818c87612fbf565b5050505050505050505050565b600d602052600090815260409020546001600160a01b031681565b612489611e35565b6124c8576040805162461bcd60e51b8152602060048201819052602482015260008051602061445e833981519152604482015290519081900360640190fd5b6002805460ff1916911515919091179055565b6124e3611e35565b612522576040805162461bcd60e51b8152602060048201819052602482015260008051602061445e833981519152604482015290519081900360640190fd5b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0382166125895760405162461bcd60e51b815260040180806020018281038252602c8152602001806145b0602c913960400191505060405180910390fd5b60005b81518110156125c05760008282815181106125a357fe5b602002602001015190506125b78482613d32565b5060010161258c565b505050565b60025460ff16612609576040805162461bcd60e51b815260206004820152600a6024820152694e6f742041637469766560b01b604482015290519081900360640190fd5b6001600160a01b038516600090815260016020908152604080832086845290915290205485908590859060ff1615801561266757506001600160a01b038216600090815260016020908152604080832084845290915290205460ff16155b61267057600080fd5b6010546001600160a01b031633146126c2576040805162461bcd60e51b815260206004820152601060248201526f24b73b30b634b2103a3930b739b332b960811b604482015290519081900360640190fd5b6001600160a01b038089166000908152600f60209081526040808320938816835292905220546127235760405162461bcd60e51b81526004018080602001828103825260268152602001806143d36026913960400191505060405180910390fd5b336001600160a01b038916148061275f57506001600160a01b038089166000908152600f60209081526040808320938816835292905220548511155b61279a5760405162461bcd60e51b81526004018080602001828103825260268152602001806143d36026913960400191505060405180910390fd5b6001600160a01b0387166127df5760405162461bcd60e51b815260040180806020018281038252602b815260200180614329602b913960400191505060405180910390fd5b6001600160a01b038089166000908152600f602090815260408083209388168352929052205461280f9086613cd1565b6001600160a01b03808a166000908152600f602090815260408083209389168352929052205561284188888888613066565b5050505050505050565b6010546000906001600160a01b031633146128a1576040805162461bcd60e51b8152602060048201526011602482015270496e76616c696420616c6c6f77616e636560781b604482015290519081900360640190fd5b506001600160a01b039182166000908152600f6020908152604080832093909416825291909152205490565b6128d5611e35565b612914576040805162461bcd60e51b8152602060048201819052602482015260008051602061445e833981519152604482015290519081900360640190fd5b6000805b8451816001600160801b03161015612a335783816001600160801b03168151811061293f57fe5b60200260200101516011600087846001600160801b03168151811061296057fe5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600085815260200190815260200160002060000181905550426011600087846001600160801b0316815181106129ba57fe5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600085815260200190815260200160002060010181905550612a2984826001600160801b031681518110612a1257fe5b6020026020010151836137dd90919063ffffffff16565b9150600101612918565b5061202b33308484613066565b6010546001600160a01b03163314612a91576040805162461bcd60e51b815260206004820152600f60248201526e496e76616c696420617070726f766560881b604482015290519081900360640190fd5b6001600160a01b038316612aec576040805162461bcd60e51b815260206004820152601d60248201527f617070726f76652066726f6d20746865207a65726f2061646472657373000000604482015290519081900360640190fd5b6001600160a01b038216612b47576040805162461bcd60e51b815260206004820152601b60248201527f617070726f766520746f20746865207a65726f20616464726573730000000000604482015290519081900360640190fd5b6001600160a01b039283166000908152600f602090815260408083209490951682529290925291902055565b6000612b7d611e35565b612bbc576040805162461bcd60e51b8152602060048201819052602482015260008051602061445e833981519152604482015290519081900360640190fd5b6000612bc6613db8565b9050612bd0613dce565b6000818152600d6020526040902080546001600160a01b031916331790558415612c5657807f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b878760405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a25b612c9888828987878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061399592505050565b6000818152600e6020526040902087905590509695505050505050565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b600160209081526000928352604080842090915290825290205460ff1681565b60086020908152600093845260408085208252928452828420905282529020805460019091015463ffffffff9091169082565b612d62611e35565b612da1576040805162461bcd60e51b8152602060048201819052602482015260008051602061445e833981519152604482015290519081900360640190fd5b6001600160a01b039091166000908152600160208181526040808420948452939052919020805460ff19169091179055565b60025460ff16612e17576040805162461bcd60e51b815260206004820152600a6024820152694e6f742041637469766560b01b604482015290519081900360640190fd5b6001600160a01b038516600090815260016020908152604080832086845290915290205485908590859060ff16158015612e7557506001600160a01b038216600090815260016020908152604080832084845290915290205460ff16155b612e7e57600080fd5b336001600160a01b0389161480612e9a5750612e9a8833612cd9565b612ed55760405162461bcd60e51b815260040180806020018281038252602a8152602001806143a9602a913960400191505060405180910390fd5b6001600160a01b038716612f1a5760405162461bcd60e51b815260040180806020018281038252602b815260200180614329602b913960400191505060405180910390fd5b612f2688888888613066565b612841888888885a89613dd9565b612f3c611e35565b612f7b576040805162461bcd60e51b8152602060048201819052602482015260008051602061445e833981519152604482015290519081900360640190fd5b611b5a81613f4b565b6010546001600160a01b031681565b60006001600160e01b03198216636cdb3d1360e11b1415612fb6575060016112db565b6112d882613feb565b6001600160a01b03808416600090815260076020908152604080832085845290915281205490911690612ff28584611284565b6001600160a01b03868116600081815260076020908152604080832089845290915280822080546001600160a01b0319168a8616908117909155905194955093928616927f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46116f682858386613830565b6001600160a01b03841660009081526005602090815260408083208584529091529020546130949082613cd1565b6001600160a01b0380861660009081526005602081815260408084208885528252808420959095559287168252825282812085825290915220546130d890826137dd565b6001600160a01b0380851660008181526005602090815260408083208884528252808320959095558884168252600780825285832088845282528583205493835281528482208783529052929092205461313792821691168385613830565b826001600160a01b0316846001600160a01b0316336001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051808381526020018281526020019250505060405180910390a450505050565b6060816131bf57506040805180820190915260018152600360fc1b60208201526112db565b818060005b82156131d857600101600a830492506131c4565b60608167ffffffffffffffff811180156131f157600080fd5b506040519080825280601f01601f19166020018201604052801561321c576020820181803683370190505b50905060001982015b831561326a57600a840660300160f81b8282806001900393508151811061324857fe5b60200101906001600160f81b031916908160001a905350600a84049350613225565b5095945050505050565b80518251146132b45760405162461bcd60e51b81526004018080602001828103825260358152602001806143f96035913960400191505060405180910390fd5b815160005b81811015613506576001600160a01b038616600090815260016020526040812085519091908690849081106132ea57fe5b60209081029190910181015182528101919091526040016000205460ff1615801561335957506001600160a01b0385166000908152600160205260408120855190919086908490811061333957fe5b60209081029190910181015182528101919091526040016000205460ff16155b613399576040805162461bcd60e51b815260206004820152600c60248201526b313637b1b5b2b2103ab9b2b960a11b604482015290519081900360640190fd5b6134088382815181106133a857fe5b602002602001015160056000896001600160a01b03166001600160a01b0316815260200190815260200160002060008785815181106133e357fe5b6020026020010151815260200190815260200160002054613cd190919063ffffffff16565b6001600160a01b0387166000908152600560205260408120865190919087908590811061343157fe5b60200260200101518152602001908152602001600020819055506134ba83828151811061345a57fe5b602002602001015160056000886001600160a01b03166001600160a01b03168152602001908152602001600020600087858151811061349557fe5b60200260200101518152602001908152602001600020546137dd90919063ffffffff16565b6001600160a01b038616600090815260056020526040812086519091908790859081106134e357fe5b6020908102919091018101518252810191909152604001600020556001016132b9565b50836001600160a01b0316856001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561358c578181015183820152602001613574565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156135cb5781810151838201526020016135b3565b5050505090500194505050505060405180910390a45050505050565b6135f9856001600160a01b0316614004565b156137d5576000856001600160a01b031663bc197c8184338a8989886040518763ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b8381101561368a578181015183820152602001613672565b50505050905001848103835286818151815260200191508051906020019060200280838360005b838110156136c95781810151838201526020016136b1565b50505050905001848103825285818151815260200191508051906020019080838360005b838110156137055781810151838201526020016136ed565b50505050905090810190601f1680156137325780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600088803b15801561375757600080fd5b5087f115801561376b573d6000803e3d6000fd5b50505050506040513d602081101561378257600080fd5b505190506001600160e01b0319811663bc197c8160e01b146113f95760405162461bcd60e51b815260040180806020018281038252603f815260200180614537603f913960400191505060405180910390fd5b505050505050565b600082820183811015611e1f576040805162461bcd60e51b8152602060048201526016602482015275536166654d617468236164643a204f564552464c4f5760501b604482015290519081900360640190fd5b826001600160a01b0316846001600160a01b0316141580156138525750600082115b1561202b576001600160a01b038416156138f8576001600160a01b038416600090815260096020908152604080832084845290915281205463ffffffff16908161389d5760006138d7565b6001600160a01b038616600090815260086020908152604080832063ffffffff600019870116845282528083208684529091529020600101545b905060006138e58286613cd1565b90506138f4878484848861403b565b5050505b6001600160a01b0383161561202b576001600160a01b038316600090815260096020908152604080832084845290915281205463ffffffff16908161393e576000613978565b6001600160a01b038516600090815260086020908152604080832063ffffffff600019870116845282528083208684529091529020600101545b9050600061398682866137dd565b90506113f9868484848861403b565b6001600160a01b03841660009081526005602090815260408083208684529091529020546139c390836137dd565b6001600160a01b0380861660008181526005602090815260408083208984528252808320959095553382526007808252858320898452825285832054938352815284822088835290529290922054613a2092821691168486613830565b604080518481526020810184905281516001600160a01b0387169260009233927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62929181900390910190a461202b60008585855a86613dd9565b80516112eb90600b906020840190614274565b3390565b8151835114613ad15760405162461bcd60e51b81526004018080602001828103825260308152602001806145076030913960400191505060405180910390fd5b825160005b81811015613be7573360009081526007602081815260408084208585528252808420546001600160a01b038b81168652938352818520868652909252909220548651613b51938316929190911690879085908110613b3057fe5b6020026020010151888581518110613b4457fe5b6020026020010151613830565b613b9b848281518110613b6057fe5b602002602001015160056000896001600160a01b03166001600160a01b03168152602001908152602001600020600088858151811061349557fe5b6001600160a01b03871660009081526005602052604081208751909190889085908110613bc457fe5b602090810291909101810151825281019190915260400160002055600101613ad6565b50846001600160a01b031660006001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015613c6e578181015183820152602001613c56565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015613cad578181015183820152602001613c95565b5050505090500194505050505060405180910390a46116f660008686865a876135e7565b600082821115613d28576040805162461bcd60e51b815260206004820152601760248201527f536166654d617468237375623a20554e444552464c4f57000000000000000000604482015290519081900360640190fd5b50900390565b4690565b6000818152600d602052604090205481906001600160a01b03163314613d895760405162461bcd60e51b81526004018080602001828103825260318152602001806145dc6031913960400191505060405180910390fd5b506000908152600d6020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b600c54600090613dc99060016137dd565b905090565b600c80546001019055565b613deb856001600160a01b0316614004565b156137d5576000856001600160a01b031663f23a6e6184338a8989886040518763ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613e7d578181015183820152602001613e65565b50505050905090810190601f168015613eaa5780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600088803b158015613ecd57600080fd5b5087f1158015613ee1573d6000803e3d6000fd5b50505050506040513d6020811015613ef857600080fd5b505190506001600160e01b0319811663f23a6e6160e01b146113f95760405162461bcd60e51b815260040180806020018281038252603a815260200180614576603a913960400191505060405180910390fd5b6001600160a01b038116613f905760405162461bcd60e51b81526004018080602001828103825260268152602001806143836026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160e01b031981166301ffc9a760e01b14919050565b6000813f8015801590611e1f57507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470141592915050565b600061405f436040518060600160405280602e81526020016144aa602e91396141c3565b905060008563ffffffff161180156140b257506001600160a01b038616600090815260086020908152604080832063ffffffff6000198a0181168552908352818420868552909252909120548282169116145b156140f7576001600160a01b038616600090815260086020908152604080832063ffffffff6000198a0116845282528083208584529091529020600101839055614178565b60408051808201825263ffffffff808416825260208083018781526001600160a01b038b166000818152600884528681208c86168252845286812089825284528681209551865490861663ffffffff199182161787559251600196870155908152600983528581208882529092529390208054928901909116919092161790555b604080518581526020810185905281516001600160a01b038916927fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724928290030190a2505050505050565b600081600160201b84106142555760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561421a578181015183820152602001614202565b50505050905090810190601f1680156142475780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b509192915050565b604080518082019091526000808252602082015290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106142b557805160ff19168380011785556142e2565b828001600101855582156142e2579182015b828111156142e25782518255916020019190600101906142c7565b506142ee9291506142f2565b5090565b5b808211156142ee57600081556001016142f356fe6765745072696f72566f7465733a206e6f74207965742064657465726d696e65644552433131353523736166655472616e7366657246726f6d3a20494e56414c49445f524543495049454e54455243313135355472616461626c652362617463684d696e743a204f4e4c595f43524541544f525f414c4c4f5745444f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433131353523736166655472616e7366657246726f6d3a20494e56414c49445f4f50455241544f524552433131353523736166655472616e736665723a20494e56414c49445f4f50455241544f5245524331313535235f7361666542617463685472616e7366657246726f6d3a20494e56414c49445f4152524159535f4c454e47544845524331313535237361666542617463685472616e7366657246726f6d3a20494e56414c49445f524543495049454e544f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572455243313135352362616c616e63654f6642617463683a20494e56414c49445f41525241595f4c454e4754485f7772697465436865636b706f696e743a20626c6f636b206e756d6265722065786365656473203332206269747345524331313535237361666542617463685472616e7366657246726f6d3a20494e56414c49445f4f50455241544f52455243313135354d696e744275726e2362617463684d696e743a20494e56414c49445f4152524159535f4c454e47544845524331313535235f63616c6c6f6e45524331313535426174636852656365697665643a20494e56414c49445f4f4e5f524543454956455f4d45535341474545524331313535235f63616c6c6f6e4552433131353552656365697665643a20494e56414c49445f4f4e5f524543454956455f4d455353414745455243313135355472616461626c652373657443726561746f723a20494e56414c49445f414444524553532e455243313135355472616461626c652363726561746f724f6e6c793a204f4e4c595f43524541544f525f414c4c4f574544a264697066735822122042aa9a092c98191affbc56a3c77cc6c96a67594c2695f82b571c2aab3688166464736f6c634300060c0033
Deployed Bytecode Sourcemap
44678:10357:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27034:148;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27034:148:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;43386:257;;;;;;;;;;;;;;;;-1:-1:-1;43386:257:0;-1:-1:-1;;;;;;43386:257:0;;:::i;:::-;;;;;;;;;;;;;;;;;;31703:131;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;31703:131:0;;;;;;;;:::i;:::-;;51304:350;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;51304:350:0;;;;;;;;;;;;;;;;;;;;;;:::i;17902:18::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42055:154;;;;;;;;;;;;;;;;-1:-1:-1;42055:154:0;;:::i;45196:63::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;45196:63:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;19055:122;;;:::i;16145:27::-;;;:::i;44818:47::-;;;;;;;;;;;;;;;;-1:-1:-1;44818:47:0;;:::i;31379:175::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;31379:175:0;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;31379:175:0;;;;;;;;;;;;;;21503:577;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21503:577:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21503:577:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21503:577:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21503:577:0;;;;;;;;-1:-1:-1;21503:577:0;;-1:-1:-1;;;;;21503:577:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21503:577:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21503:577:0;;;;;;;;-1:-1:-1;21503:577:0;;-1:-1:-1;;;;;21503:577:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21503:577:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21503:577:0;;-1:-1:-1;21503:577:0;;-1:-1:-1;;;;;21503:577:0:i;27483:573::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27483:573:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27483:573:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27483:573:0;;;;;;;;-1:-1:-1;27483:573:0;;-1:-1:-1;;;;;27483:573:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27483:573:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27483:573:0;;-1:-1:-1;27483:573:0;;-1:-1:-1;;;;;27483:573:0:i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53016:659;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;53016:659:0;;;;;;;;;;;;;:::i;16762:129::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;16762:129:0;;;;;;;;:::i;15206:140::-;;;:::i;47230:263::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;47230:263:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;47230:263:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;47230:263:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47230:263:0;;-1:-1:-1;47230:263:0;;-1:-1:-1;;;;;47230:263:0:i;48480:159::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;48480:159:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;48480:159:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48480:159:0;;-1:-1:-1;48480:159:0;;-1:-1:-1;;;;;48480:159:0:i;19477:39::-;;;;;;;;;;;;;;;;-1:-1:-1;19477:39:0;-1:-1:-1;;;;;19477:39:0;;:::i;33689:290::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;33689:290:0;;;;;;;;:::i;34414:1333::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;34414:1333:0;;;;;;;;;;;;;:::i;14397:79::-;;;:::i;14761:94::-;;;:::i;17955:20::-;;;:::i;25926:257::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25926:257:0;;;;;;;;;;:::i;18908:70::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18908:70:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;47804:533;;;;;;;;;;;;;;;;-1:-1:-1;;;;;47804:533:0;;;;;;;;;;;;;;;-1:-1:-1;;;47804:533:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;47804:533:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47804:533:0;;;;;;;;-1:-1:-1;47804:533:0;;-1:-1:-1;;;;;47804:533:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;47804:533:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47804:533:0;;;;;;;;-1:-1:-1;47804:533:0;;-1:-1:-1;;;;;47804:533:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;47804:533:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47804:533:0;;-1:-1:-1;47804:533:0;;-1:-1:-1;;;;;47804:533:0:i;54493:527::-;;;;;;;;;;;;;;;;-1:-1:-1;54493:527:0;;:::i;32272:1212::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32272:1212:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;44767:44::-;;;;;;;;;;;;;;;;-1:-1:-1;44767:44:0;;:::i;17373:86::-;;;;;;;;;;;;;;;;-1:-1:-1;17373:86:0;;;;:::i;51775:152::-;;;;;;;;;;;;;;;;-1:-1:-1;51775:152:0;-1:-1:-1;;;;;51775:152:0;;:::i;48828:315::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;48828:315:0;;;;;;;;;;;;;;;-1:-1:-1;;;48828:315:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;48828:315:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48828:315:0;;-1:-1:-1;48828:315:0;;-1:-1:-1;;;;;48828:315:0:i;50137:883::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;50137:883:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;52565:231::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;52565:231:0;;;;;;;;;;:::i;53898:465::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;53898:465:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;53898:465:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53898:465:0;;;;;;;;-1:-1:-1;53898:465:0;;-1:-1:-1;;;;;53898:465:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;53898:465:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53898:465:0;;-1:-1:-1;;53898:465:0;;;-1:-1:-1;53898:465:0;;-1:-1:-1;;53898:465:0:i;52115:364::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;52115:364:0;;;;;;;;;;;;;;;;;:::i;46373:544::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;46373:544:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;46373:544:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;46373:544:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;46373:544:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;46373:544:0;;;;;;;;;;-1:-1:-1;46373:544:0;;-1:-1:-1;46373:544:0;-1:-1:-1;46373:544:0;:::i;19275:117::-;;;:::i;26478:176::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;26478:176:0;;;;;;;;;;:::i;16052:64::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;16052:64:0;;;;;;;;:::i;18746:89::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18746:89:0;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;17088:128;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;17088:128:0;;;;;;;;:::i;20437:643::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20437:643:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;20437:643:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;20437:643:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20437:643:0;;-1:-1:-1;20437:643:0;;-1:-1:-1;;;;;20437:643:0:i;15501:109::-;;;;;;;;;;;;;;;;-1:-1:-1;15501:109:0;-1:-1:-1;;;;;15501:109:0;;:::i;44962:30::-;;;:::i;27034:148::-;-1:-1:-1;;;;;27153:16:0;;;;27121:7;27153:16;;;:8;:16;;;;;;;;:21;;;;;;;;;27034:148::o;43386:257::-;43472:4;-1:-1:-1;;;;;;43493:50:0;;-1:-1:-1;;;43493:50:0;43489:92;;;-1:-1:-1;43565:4:0;43558:11;;43489:92;43598:37;43622:12;43598:23;:37::i;:::-;43591:44;;43386:257;;;;:::o;31703:131::-;31785:41;31795:10;31807:9;31818:7;31785:9;:41::i;:::-;31703:131;;:::o;51304:350::-;-1:-1:-1;;;;;16379:18:0;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;51417:5;;51423:3;;51427;;16379:27;;16378:28;:58;;;;-1:-1:-1;;;;;;16411:16:0;;;;;;:11;:16;;;;;;;;:25;;;;;;;;;;;16410:26;16378:58;16369:69;;;;;;51470:15:::1;::::0;-1:-1:-1;;;;;51470:15:0::1;51456:10;:29;51448:58;;;::::0;;-1:-1:-1;;;51448:58:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;51448:58:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;51525:17:0;::::1;51517:73;;;;-1:-1:-1::0;;;51517:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51603:43;51621:5;51628:3;51633;51638:7;51603:17;:43::i;:::-;51304:350:::0;;;;;;;:::o;17902:18::-;;;;;;;;;;;;;;;-1:-1:-1;;17902:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42055:154::-;42102:13;42159:15;42176:14;42186:3;42176:9;:14::i;:::-;42142:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;42142:58:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;42142:58:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;42142:58:0;;;;;;;;;;;;;;-1:-1:-1;;;42142:58:0;;;;;-1:-1:-1;42142:58:0;;;;;;-1:-1:-1;;42142:58:0;;;;;;;;;;;-1:-1:-1;;;;;42055:154:0:o;45196:63::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19055:122::-;19097:80;19055:122;:::o;16145:27::-;;;;;;:::o;44818:47::-;;;;;;;;;;;;;:::o;31379:175::-;-1:-1:-1;;;;;31516:21:0;;;31484:7;31516:21;;;:10;:21;;;;;;;;:30;;;;;;;;;;31379:175::o;21503:577::-;16520:8;;;;16512:31;;;;;-1:-1:-1;;;16512:31:0;;;;;;;;;;;;-1:-1:-1;;;16512:31:0;;;;;;;;;;;;;;;21717:10:::1;-1:-1:-1::0;;;;;21717:19:0;::::1;;::::0;21716:60:::1;;;21741:35;21758:5;21765:10;21741:16;:35::i;:::-;21708:120;;;;-1:-1:-1::0;;;21708:120:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;21847:17:0;::::1;21839:78;;;;-1:-1:-1::0;;;21839:78:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21938:50;21961:5;21968:3;21973:4;21979:8;21938:22;:50::i;:::-;21999:73;22027:5;22034:3;22039:4;22045:8;22055:9;22066:5;21999:27;:73::i;:::-;21503:577:::0;;;;;:::o;27483:573::-;27595:16;27655:4;:11;27637:7;:14;:29;27629:86;;;;-1:-1:-1;;;27629:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27758:30;27805:7;:14;27791:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27791:29:0;;27758:62;;27895:9;27890:118;27914:7;:14;27910:1;:18;27890:118;;;27967:8;:20;27976:7;27984:1;27976:10;;;;;;;;;;;;;;-1:-1:-1;;;;;27967:20:0;-1:-1:-1;;;;;27967:20:0;;;;;;;;;;;;:29;27988:4;27993:1;27988:7;;;;;;;;;;;;;;27967:29;;;;;;;;;;;;27948:13;27962:1;27948:16;;;;;;;;;;;;;;;;;:48;27930:3;;27890:118;;;-1:-1:-1;28035:13:0;27483:573;-1:-1:-1;;;27483:573:0:o;53016:659::-;53134:15;;-1:-1:-1;;;;;53134:15:0;53120:10;:29;53112:54;;;;;-1:-1:-1;;;53112:54:0;;;;;;;;;;;;-1:-1:-1;;;53112:54:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;53222:13:0;;;;;;:8;:13;;;;;;;;:18;;;;;;;;;:31;;53245:7;53222:22;:31::i;:::-;-1:-1:-1;;;;;53201:13:0;;;;;;:8;:13;;;;;;;;:18;;;;;;;;:52;;;;53283:11;:16;;;;:29;;53304:7;53283:20;:29::i;:::-;53264:16;;;;:11;:16;;;;;;;;:48;;;;53359:10;53348:22;;:10;:22;;;;;;:27;;;;;;;;;-1:-1:-1;;;;;53377:15:0;;;;;;;;;;;:20;;;;;;;;;;;53333:78;;53348:27;;;;53377:20;53399:7;53276:3;53333:14;:78::i;:::-;53450:59;;;;;;;;;;;;;;-1:-1:-1;;;;;53450:59:0;;;53485:3;;53465:10;;53450:59;;;;;;;;;;;53016:659;;;:::o;16762:129::-;14608:9;:7;:9::i;:::-;14600:54;;;;;-1:-1:-1;;;14600:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14600:54:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;16843:22:0;;::::1;16878:5;16843:22:::0;;;:11:::1;:22;::::0;;;;;;;:32;;;;;;;:40;;-1:-1:-1;;16843:40:0::1;::::0;;16762:129::o;15206:140::-;14608:9;:7;:9::i;:::-;14600:54;;;;;-1:-1:-1;;;14600:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14600:54:0;;;;;;;;;;;;;;;15305:1:::1;15289:6:::0;;15268:40:::1;::::0;-1:-1:-1;;;;;15289:6:0;;::::1;::::0;15268:40:::1;::::0;15305:1;;15268:40:::1;15336:1;15319:19:::0;;-1:-1:-1;;;;;;15319:19:0::1;::::0;;15206:140::o;47230:263::-;45411:13;;;;:8;:13;;;;;;47375:3;;-1:-1:-1;;;;;45411:13:0;45428:10;45411:27;45403:89;;;;-1:-1:-1;;;45403:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47391:33:::1;47397:3;47402;47407:9;47418:5;47391;:33::i;:::-;47454:16;::::0;;;:11:::1;:16;::::0;;;;;:31:::1;::::0;47475:9;47454:20:::1;:31::i;:::-;47435:16;::::0;;;:11:::1;:16;::::0;;;;;:50;;;;-1:-1:-1;;;;47230:263:0:o;48480:159::-;14608:9;:7;:9::i;:::-;14600:54;;;;;-1:-1:-1;;;14600:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14600:54:0;;;;;;;;;;;;;;;48591:40:::1;48611:19;48591;:40::i;:::-;48480:159:::0;:::o;19477:39::-;;;;;;;;;;;;;:::o;33689:290::-;-1:-1:-1;;;;;33845:23:0;;33798:7;33845:23;;;:14;:23;;;;;;;;:32;;;;;;;;;;;33895:16;:76;;33970:1;33895:76;;;-1:-1:-1;;;;;33914:20:0;;;;;;:11;:20;;;;;;;;:38;-1:-1:-1;;33935:16:0;;33914:38;;;;;;;;:47;;;;;;;;33950:1;33914:53;;33895:76;33888:83;33689:290;-1:-1:-1;;;;33689:290:0:o;34414:1333::-;34538:7;34585:12;34571:11;:26;34563:72;;;;-1:-1:-1;;;34563:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34674:23:0;;34652:19;34674:23;;;:14;:23;;;;;;;;:32;;;;;;;;;;;34721:17;34717:58;;34762:1;34755:8;;;;;34717:58;-1:-1:-1;;;;;34839:20:0;;;;;;:11;:20;;;;;;;;:38;-1:-1:-1;;34860:16:0;;34839:38;;;;;;;;;;:47;;;;;;;;;:57;;:72;-1:-1:-1;34835:165:0;;-1:-1:-1;;;;;34935:20:0;;;;;;:11;:20;;;;;;;;-1:-1:-1;;34956:16:0;;;;34935:38;;;;;;;;;;:47;;;;;;34971:1;34935:53;;;-1:-1:-1;34928:60:0;;34835:165;-1:-1:-1;;;;;35065:20:0;;;;;;:11;:20;;;;;;;;:23;;;;;;;;:32;;;;;;;;:42;:23;:42;:56;-1:-1:-1;35061:97:0;;;35145:1;35138:8;;;;;35061:97;35174:12;-1:-1:-1;;35216:16:0;;35243:437;35258:5;35250:13;;:5;:13;;;35243:437;;;35322:1;35305:13;;;35304:19;;;35296:27;;35365:20;;:::i;:::-;-1:-1:-1;;;;;;35388:20:0;;;;;;:11;:20;;;;;;;;:28;;;;;;;;;;;;:37;;;;;;;;;35365:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35444:27;;35440:229;;;35499:8;;;;-1:-1:-1;35492:15:0;;-1:-1:-1;;;;35492:15:0;35440:229;35533:12;;:26;;;-1:-1:-1;35529:140:0;;;35588:6;35580:14;;35529:140;;;35652:1;35643:6;:10;35635:18;;35529:140;35243:437;;;;;-1:-1:-1;;;;;;35697:20:0;;;;;;:11;:20;;;;;;;;:27;;;;;;;;;;;;:36;;;;;;:42;;;;-1:-1:-1;;34414:1333:0;;;;;;:::o;14397:79::-;14435:7;14462:6;-1:-1:-1;;;;;14462:6:0;14397:79;:::o;14761:94::-;14801:4;14841:6;;-1:-1:-1;;;;;14841:6:0;14825:12;:10;:12::i;:::-;-1:-1:-1;;;;;14825:22:0;;14818:29;;14761:94;:::o;17955:20::-;;;;;;;;;;;;;;;-1:-1:-1;;17955:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25926:257;26077:10;26067:21;;;;:9;:21;;;;;;;;-1:-1:-1;;;;;26067:32:0;;;;;;;;;;;;:44;;-1:-1:-1;;26067:44:0;;;;;;;;;;26127:48;;;;;;;26067:32;;26077:10;26127:48;;;;;;;;;;;25926:257;;:::o;18908:70::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47804:533::-;47979:9;47974:304;47998:4;:11;47994:1;:15;47974:304;;;48031:11;48045:4;48050:1;48045:7;;;;;;;;;;;;;;;;;;;48075:13;;;;:8;:13;;;;;;;;48045:7;;-1:-1:-1;;;;;;48075:13:0;48092:10;48075:27;48067:87;;;;-1:-1:-1;;;48067:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48169:16;48188:11;48200:1;48188:14;;;;;;;;;;;;;;48169:33;;48236:30;48257:8;48236:11;:16;48248:3;48236:16;;;;;;;;;;;;:20;;:30;;;;:::i;:::-;48217:16;;;;:11;:16;;;;;;:49;;;;-1:-1:-1;48011:3:0;;47974:304;;;;48288:41;48299:3;48304:4;48310:11;48323:5;48288:10;:41::i;:::-;47804:533;;;;:::o;54493:527::-;54581:10;54607:1;54569:23;;;:11;:23;;;;;;;;:28;;;;;;;;:35;54561:79;;;;;-1:-1:-1;;;54561:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;54679:10;54667:23;;;;:11;:23;;;;;;;;:28;;;;;;;;:36;;;54708:8;;54659:45;;:3;;:7;:45::i;:::-;:57;;54651:99;;;;;-1:-1:-1;;;54651:99:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;54820:10;54772:15;54808:23;;;:11;:23;;;;;;;;:28;;;;;;;;:35;;54854:39;;;-1:-1:-1;54904:36:0;;;:40;;;;54808:35;54955:57;;54981:4;;54808:28;:35;54955:17;:57::i;32272:1212::-;32498:23;19097:80;32627:4;32611:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32652:12;:10;:12::i;:::-;32548:163;;;;;;;;;;;;;;;;;;;;;;;;;32691:4;32548:163;;;;;;;;;;;;;;;;;;;;;;;32524:198;;;;;;19321:71;32784:140;;;;-1:-1:-1;;;;;32784:140:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32760:175;;;;;;-1:-1:-1;;;32993:123:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32969:158;;;;;;;;;-1:-1:-1;33164:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32524:198;;-1:-1:-1;32760:175:0;;32969:158;;-1:-1:-1;;33164:26:0;;;;;;;-1:-1:-1;;33164:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;33164:26:0;;-1:-1:-1;;33164:26:0;;;-1:-1:-1;;;;;;;33209:23:0;;33201:68;;;;;-1:-1:-1;;;33201:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33297:17:0;;;;;;:6;:17;;;;;:19;;;;;;;;33288:28;;33280:69;;;;;-1:-1:-1;;;33280:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;33375:6;33368:3;:13;;33360:58;;;;;-1:-1:-1;;;33360:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33436:40;33446:9;33457;33468:7;33436:9;:40::i;:::-;33429:47;;;;32272:1212;;;;;;;:::o;44767:44::-;;;;;;;;;;;;-1:-1:-1;;;;;44767:44:0;;:::o;17373:86::-;14608:9;:7;:9::i;:::-;14600:54;;;;;-1:-1:-1;;;14600:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14600:54:0;;;;;;;;;;;;;;;17433:8:::1;:18:::0;;-1:-1:-1;;17433:18:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17373:86::o;51775:152::-;14608:9;:7;:9::i;:::-;14600:54;;;;;-1:-1:-1;;;14600:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14600:54:0;;;;;;;;;;;;;;;51884:15:::1;:34:::0;;-1:-1:-1;;;;;;51884:34:0::1;-1:-1:-1::0;;;;;51884:34:0;;;::::1;::::0;;;::::1;::::0;;51775:152::o;48828:315::-;-1:-1:-1;;;;;48939:17:0;;48931:74;;;;-1:-1:-1;;;48931:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49021:9;49016:120;49040:4;:11;49036:1;:15;49016:120;;;49071:10;49084:4;49089:1;49084:7;;;;;;;;;;;;;;49071:20;;49104;49116:3;49121:2;49104:11;:20::i;:::-;-1:-1:-1;49053:3:0;;49016:120;;;;48828:315;;:::o;50137:883::-;16520:8;;;;16512:31;;;;;-1:-1:-1;;;16512:31:0;;;;;;;;;;;;-1:-1:-1;;;16512:31:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;16379:18:0;::::1;;::::0;;;:11:::1;:18;::::0;;;;;;;:27;;;;;;;;;50281:5;;50287:3;;50291;;16379:27:::1;;16378:28;:58:::0;::::1;;;-1:-1:-1::0;;;;;;16411:16:0;::::1;;::::0;;;:11:::1;:16;::::0;;;;;;;:25;;;;;;;;;::::1;;16410:26;16378:58;16369:69;;;::::0;::::1;;50335:15:::2;::::0;-1:-1:-1;;;;;50335:15:0::2;50321:10;:29;50313:58;;;::::0;;-1:-1:-1;;;50313:58:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;50313:58:0;;;;;;;;;;;;;::::2;;-1:-1:-1::0;;;;;50390:18:0;;::::2;50421:1;50390:18:::0;;;:11:::2;:18;::::0;;;;;;;:28;;::::2;::::0;;;;;;;50382:83:::2;;;;-1:-1:-1::0;;;50382:83:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50485:10;-1:-1:-1::0;;;;;50485:19:0;::::2;;::::0;50484:64:::2;;-1:-1:-1::0;;;;;;50509:18:0;;::::2;;::::0;;;:11:::2;:18;::::0;;;;;;;:28;;::::2;::::0;;;;;;;:39;-1:-1:-1;50509:39:0::2;50484:64;50476:115;;;;-1:-1:-1::0;;;50476:115:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;50610:17:0;::::2;50602:73;;;;-1:-1:-1::0;;;50602:73:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;50837:18:0;;::::2;;::::0;;;:11:::2;:18;::::0;;;;;;;:28;;::::2;::::0;;;;;;;:41:::2;::::0;50870:7;50837:32:::2;:41::i;:::-;-1:-1:-1::0;;;;;50805:18:0;;::::2;;::::0;;;:11:::2;:18;::::0;;;;;;;:28;;::::2;::::0;;;;;;:73;50889:43:::2;50817:5:::0;50914:3;50919;50924:7;50889:17:::2;:43::i;:::-;16566:1:::1;;;50137:883:::0;;;;;:::o;52565:231::-;52706:15;;52658:7;;-1:-1:-1;;;;;52706:15:0;52692:10;:29;52684:59;;;;;-1:-1:-1;;;52684:59:0;;;;;;;;;;;;-1:-1:-1;;;52684:59:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;;52761:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;52565:231::o;53898:465::-;14608:9;:7;:9::i;:::-;14600:54;;;;;-1:-1:-1;;;14600:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14600:54:0;;;;;;;;;;;;;;;54037:13:::1;::::0;54061:222:::1;54084:8;:15;54080:1;-1:-1:-1::0;;;;;54080:19:0::1;;54061:222;;;54159:7;54167:1;-1:-1:-1::0;;;;;54159:10:0::1;;;;;;;;;;;;;;;54120:11;:24;54132:8;54141:1;-1:-1:-1::0;;;;;54132:11:0::1;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;54120:24:0::1;-1:-1:-1::0;;;;;54120:24:0::1;;;;;;;;;;;;:29;54145:3;54120:29;;;;;;;;;;;:36;;:49;;;;54224:3;54184:11;:24;54196:8;54205:1;-1:-1:-1::0;;;;;54196:11:0::1;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;54184:24:0::1;-1:-1:-1::0;;;;;54184:24:0::1;;;;;;;;;;;;:29;54209:3;54184:29;;;;;;;;;;;:37;;:43;;;;54250:21;54260:7;54268:1;-1:-1:-1::0;;;;;54260:10:0::1;;;;;;;;;;;;;;;54250:5;:9;;:21;;;;:::i;:::-;54242:29:::0;-1:-1:-1;54101:3:0::1;;54061:222;;;;54302:53;54320:10;54339:4;54345:3;54349:5;54302:17;:53::i;52115:364::-:0;52239:15;;-1:-1:-1;;;;;52239:15:0;52225:10;:29;52217:57;;;;;-1:-1:-1;;;52217:57:0;;;;;;;;;;;;-1:-1:-1;;;52217:57:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;52293:19:0;;52285:61;;;;;-1:-1:-1;;;52285:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;52365:21:0;;52357:61;;;;;-1:-1:-1;;;52357:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;52435:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;52115:364::o;46373:544::-;46555:7;14608:9;:7;:9::i;:::-;14600:54;;;;;-1:-1:-1;;;14600:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14600:54:0;;;;;;;;;;;;;;;46581:11:::1;46595:17;:15;:17::i;:::-;46581:31;;46623:23;:21;:23::i;:::-;46657:13;::::0;;;:8:::1;:13;::::0;;;;:26;;-1:-1:-1;;;;;;46657:26:0::1;46673:10;46657:26;::::0;;46708:22;;46704:72:::1;;46760:3;46750:14;46754:4;;46750:14;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;-1:-1:-1::0;;46750:14:0::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;46750:14:0;;-1:-1:-1;;;;46750:14:0::1;46704:72;46796:48;46802:13;46817:3;46822:14;46838:5;;46796:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;46796:5:0::1;::::0;-1:-1:-1;;;46796:48:0:i:1;:::-;46855:16;::::0;;;:11:::1;:16;::::0;;;;:33;;;46867:3;-1:-1:-1;46373:544:0;;;;;;;;:::o;19275:117::-;19321:71;19275:117;:::o;26478:176::-;-1:-1:-1;;;;;26618:17:0;;;26578:15;26618:17;;;:9;:17;;;;;;;;:28;;;;;;;;;;;;;;;26478:176::o;16052:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18746:89::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;17088:128::-;14608:9;:7;:9::i;:::-;14600:54;;;;;-1:-1:-1;;;14600:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14600:54:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;17169:22:0;;::::1;;::::0;;;17204:4:::1;17169:22;::::0;;;;;;;:32;;;;;;;;;:39;;-1:-1:-1;;17169:39:0::1;::::0;;::::1;::::0;;17088:128::o;20437:643::-;16520:8;;;;16512:31;;;;;-1:-1:-1;;;16512:31:0;;;;;;;;;;;;-1:-1:-1;;;16512:31:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;16379:18:0;::::1;;::::0;;;:11:::1;:18;::::0;;;;;;;:27;;;;;;;;;20577:5;;20583:3;;20587;;16379:27:::1;;16378:28;:58:::0;::::1;;;-1:-1:-1::0;;;;;;16411:16:0;::::1;;::::0;;;:11:::1;:16;::::0;;;;;;;:25;;;;;;;;;::::1;;16410:26;16378:58;16369:69;;;::::0;::::1;;20627:10:::2;-1:-1:-1::0;;;;;20627:19:0;::::2;;::::0;20626:60:::2;;;20651:35;20668:5;20675:10;20651:16;:35::i;:::-;20618:115;;;;-1:-1:-1::0;;;20618:115:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;20752:17:0;::::2;20744:72;;;;-1:-1:-1::0;;;20744:72:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20946:43;20964:5;20971:3;20976;20981:7;20946:17;:43::i;:::-;21000:66;21023:5;21030:3;21035;21040:7;21049:9;21060:5;21000:22;:66::i;15501:109::-:0;14608:9;:7;:9::i;:::-;14600:54;;;;;-1:-1:-1;;;14600:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14600:54:0;;;;;;;;;;;;;;;15574:28:::1;15593:8;15574:18;:28::i;44962:30::-:0;;;-1:-1:-1;;;;;44962:30:0;;:::o;36128:249::-;36214:4;-1:-1:-1;;;;;;36235:42:0;;-1:-1:-1;;;36235:42:0;36231:84;;;-1:-1:-1;36299:4:0;36292:11;;36231:84;36332:37;36356:12;36332:23;:37::i;28263:491::-;-1:-1:-1;;;;;28397:21:0;;;28371:23;28397:21;;;:10;:21;;;;;;;;:30;;;;;;;;;;;;;28465:28;28408:9;28419:7;28465:9;:28::i;:::-;-1:-1:-1;;;;;28543:21:0;;;;;;;:10;:21;;;;;;;;:30;;;;;;;;;:42;;-1:-1:-1;;;;;;28543:42:0;;;;;;;;;;28607:54;;28438:55;;-1:-1:-1;28543:42:0;28607:54;;;;;;28543:21;28607:54;28678:68;28693:15;28710:9;28721:16;28738:7;28678:14;:68::i;22512:506::-;-1:-1:-1;;;;;22682:15:0;;;;;;:8;:15;;;;;;;;:20;;;;;;;;;:33;;22707:7;22682:24;:33::i;:::-;-1:-1:-1;;;;;22659:15:0;;;;;;;:8;:15;;;;;;;;:20;;;;;;;;:56;;;;22766:13;;;;;;;;;;:18;;;;;;;;:31;;22789:7;22766:22;:31::i;:::-;-1:-1:-1;;;;;22745:13:0;;;;;;;:8;:13;;;;;;;;:18;;;;;;;;:52;;;;22851:17;;;;;:10;:17;;;;;;:22;;;;;;;;;22875:15;;;;;;;;:20;;;;;;;;;;22836:73;;22851:22;;;22875:20;22897:7;22759:3;22836:14;:73::i;:::-;22992:3;-1:-1:-1;;;;;22958:52:0;22985:5;-1:-1:-1;;;;;22958:52:0;22973:10;-1:-1:-1;;;;;22958:52:0;;22997:3;23002:7;22958:52;;;;;;;;;;;;;;;;;;;;;;;;22512:506;;;;:::o;43909:661::-;43963:27;44007:7;44003:48;;-1:-1:-1;44029:10:0;;;;;;;;;;;;-1:-1:-1;;;44029:10:0;;;;;;44003:48;44083:2;;44071:9;44186:65;44193:6;;44186:65;;44214:5;;44237:2;44232:7;;;;44186:65;;;44271:17;44301:3;44291:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44291:14:0;-1:-1:-1;44271:34:0;-1:-1:-1;;;44328:7:0;;44394:99;44401:7;;44394:99;;44456:2;44451;:7;44446:2;:12;44435:25;;44423:4;44428:3;;;;;;;44423:9;;;;;;;;;;;:37;-1:-1:-1;;;;;44423:37:0;;;;;;;;-1:-1:-1;44479:2:0;44473:8;;;;44394:99;;;-1:-1:-1;44557:4:0;43909:661;-1:-1:-1;;;;;43909:661:0:o;23953:871::-;24120:8;:15;24105:4;:11;:30;24097:96;;;;-1:-1:-1;;;24097:96:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24276:11;;24256:17;24344:371;24368:9;24364:1;:13;24344:371;;;-1:-1:-1;;;;;24409:18:0;;;;;;:11;:18;;;;;24428:7;;24409:18;;;24428:4;;24433:1;;24428:7;;;;;;;;;;;;;;;;;24409:27;;;;;;;;;;-1:-1:-1;24409:27:0;;;;24408:28;:58;;;;-1:-1:-1;;;;;;24441:16:0;;;;;;:11;:16;;;;;24458:7;;24441:16;;;24458:4;;24463:1;;24458:7;;;;;;;;;;;;;;;;;24441:25;;;;;;;;;;-1:-1:-1;24441:25:0;;;;24440:26;24408:58;24399:83;;;;;-1:-1:-1;;;24399:83:0;;;;;;;;;;;;-1:-1:-1;;;24399:83:0;;;;;;;;;;;;;;;24585:41;24614:8;24623:1;24614:11;;;;;;;;;;;;;;24585:8;:15;24594:5;-1:-1:-1;;;;;24585:15:0;-1:-1:-1;;;;;24585:15:0;;;;;;;;;;;;:24;24601:4;24606:1;24601:7;;;;;;;;;;;;;;24585:24;;;;;;;;;;;;:28;;:41;;;;:::i;:::-;-1:-1:-1;;;;;24558:15:0;;;;;;:8;:15;;;;;24574:7;;24558:15;;;24574:4;;24579:1;;24574:7;;;;;;;;;;;;24558:24;;;;;;;;;;;:68;;;;24664:39;24691:8;24700:1;24691:11;;;;;;;;;;;;;;24664:8;:13;24673:3;-1:-1:-1;;;;;24664:13:0;-1:-1:-1;;;;;24664:13:0;;;;;;;;;;;;:22;24678:4;24683:1;24678:7;;;;;;;;;;;;;;24664:22;;;;;;;;;;;;:26;;:39;;;;:::i;:::-;-1:-1:-1;;;;;24639:13:0;;;;;;:8;:13;;;;;24653:7;;24639:13;;;24653:4;;24658:1;;24653:7;;;;;;;;;;;;;;;;;24639:22;;;;;;;;;;-1:-1:-1;24639:22:0;:64;24379:3;;24344:371;;;;24796:3;-1:-1:-1;;;;;24763:53:0;24789:5;-1:-1:-1;;;;;24763:53:0;24777:10;-1:-1:-1;;;;;24763:53:0;;24801:4;24807:8;24763:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23953:871;;;;;:::o;24952:539::-;25191:16;:3;-1:-1:-1;;;;;25191:14:0;;:16::i;:::-;25187:297;;;25222:13;25260:3;-1:-1:-1;;;;;25238:49:0;;25293:9;25304:10;25316:5;25323:4;25329:8;25339:5;25238:107;;;;;;;;;;;;;-1:-1:-1;;;;;25238:107:0;;;;;;-1:-1:-1;;;;;25238:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25238:107:0;;-1:-1:-1;;;;;;;25366:38:0;;-1:-1:-1;;;25366:38:0;25358:114;;;;-1:-1:-1;;;25358:114:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25187:297;24952:539;;;;;;:::o;1692:181::-;1750:7;1782:5;;;1806:6;;;;1798:41;;;;;-1:-1:-1;;;1798:41:0;;;;;;;;;;;;-1:-1:-1;;;1798:41:0;;;;;;;;;;;;;;29009:1020;29132:6;-1:-1:-1;;;;;29122:16:0;:6;-1:-1:-1;;;;;29122:16:0;;;:30;;;;;29151:1;29142:6;:10;29122:30;29118:904;;;-1:-1:-1;;;;;29173:20:0;;;29169:411;;-1:-1:-1;;;;;29281:22:0;;29262:16;29281:22;;;:14;:22;;;;;;;;:31;;;;;;;;;;;;29351:13;:69;;29419:1;29351:69;;;-1:-1:-1;;;;;29367:19:0;;;;;;:11;:19;;;;;;;;:34;-1:-1:-1;;29387:13:0;;29367:34;;;;;;;;:43;;;;;;;;29399:1;29367:49;;29351:69;29331:89;-1:-1:-1;29439:17:0;29459:21;29331:89;29473:6;29459:13;:21::i;:::-;29439:41;;29499:65;29516:6;29524:9;29535;29546;29556:7;29499:16;:65::i;:::-;29169:411;;;;-1:-1:-1;;;;;29604:20:0;;;29600:411;;-1:-1:-1;;;;;29712:22:0;;29693:16;29712:22;;;:14;:22;;;;;;;;:31;;;;;;;;;;;;29782:13;:69;;29850:1;29782:69;;;-1:-1:-1;;;;;29798:19:0;;;;;;:11;:19;;;;;;;;:34;-1:-1:-1;;29818:13:0;;29798:34;;;;;;;;:43;;;;;;;;29830:1;29798:49;;29782:69;29762:89;-1:-1:-1;29870:17:0;29890:21;29762:89;29904:6;29890:13;:21::i;:::-;29870:41;;29930:65;29947:6;29955:9;29966;29977;29987:7;29930:16;:65::i;37132:549::-;-1:-1:-1;;;;;37289:13:0;;;;;;:8;:13;;;;;;;;:18;;;;;;;;;:31;;37312:7;37289:22;:31::i;:::-;-1:-1:-1;;;;;37268:13:0;;;;;;;:8;:13;;;;;;;;:18;;;;;;;;:52;;;;37367:10;37356:22;;:10;:22;;;;;;:27;;;;;;;;;37385:15;;;;;;;;:20;;;;;;;;;;37341:78;;37356:27;;;37385:20;37407:7;37282:3;37341:14;:78::i;:::-;37458:59;;;;;;;;;;;;;;-1:-1:-1;;;;;37458:59:0;;;37493:3;;37473:10;;37458:59;;;;;;;;;;;37600:73;37631:3;37637;37642;37647:7;37656:9;37667:5;37600:22;:73::i;43023:129::-;43107:37;;;;:15;;:37;;;;;:::i;13698:98::-;13778:10;13698:98;:::o;37982:917::-;38142:8;:15;38127:4;:11;:30;38119:91;;;;-1:-1:-1;;;38119:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38286:11;;38270:13;38353:256;38377:5;38373:1;:9;38353:256;;;38427:10;38416:22;;;;:10;:22;;;;;;;;:25;;;;;;;;;-1:-1:-1;;;;;38443:15:0;;;;;;;;;;;:18;;;;;;;;;;38463:11;;38401:82;;38416:25;;;38443:18;;;;;38463:8;;38439:1;;38463:11;;;;;;;;;;;;38475:4;38480:1;38475:7;;;;;;;;;;;;;;38401:14;:82::i;:::-;38558:39;38585:8;38594:1;38585:11;;;;;;;;;;;;;;38558:8;:13;38567:3;-1:-1:-1;;;;;38558:13:0;-1:-1:-1;;;;;38558:13:0;;;;;;;;;;;;:22;38572:4;38577:1;38572:7;;;;;;;38558:39;-1:-1:-1;;;;;38533:13:0;;;;;;:8;:13;;;;;38547:7;;38533:13;;;38547:4;;38552:1;;38547:7;;;;;;;;;;;;;;;;;38533:22;;;;;;;;;;-1:-1:-1;38533:22:0;:64;38384:3;;38353:256;;;;38708:3;-1:-1:-1;;;;;38668:60:0;38702:3;-1:-1:-1;;;;;38668:60:0;38682:10;-1:-1:-1;;;;;38668:60:0;;38713:4;38719:8;38668:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38811:80;38847:3;38853;38858:4;38864:8;38874:9;38885:5;38811:27;:80::i;1425:177::-;1483:7;1516:1;1511;:6;;1503:42;;;;;-1:-1:-1;;;1503:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1568:5:0;;;1425:177::o;31074:153::-;31184:9;31074:153;:::o;49324:111::-;45411:13;;;;:8;:13;;;;;;49392:3;;-1:-1:-1;;;;;45411:13:0;45428:10;45411:27;45403:89;;;;-1:-1:-1;;;45403:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49408:13:0::1;::::0;;;:8:::1;:13;::::0;;;;:19;;-1:-1:-1;;;;;;49408:19:0::1;-1:-1:-1::0;;;;;49408:19:0;;;::::1;::::0;;;::::1;::::0;;49324:111::o;49588:106::-;49664:15;;49637:7;;49664:22;;49684:1;49664:19;:22::i;:::-;49657:29;;49588:106;:::o;49775:78::-;49828:15;:17;;;;;;49775:78::o;23141:492::-;23351:16;:3;-1:-1:-1;;;;;23351:14:0;;:16::i;:::-;23347:279;;;23382:13;23420:3;-1:-1:-1;;;;;23398:44:0;;23448:9;23459:10;23471:5;23478:3;23483:7;23492:5;23398:100;;;;;;;;;;;;;-1:-1:-1;;;;;23398:100:0;;;;;;-1:-1:-1;;;;;23398:100:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23398:100:0;;-1:-1:-1;;;;;;;23519:32:0;;-1:-1:-1;;;23519:32:0;23511:103;;;;-1:-1:-1;;;23511:103:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15716:229;-1:-1:-1;;;;;15790:22:0;;15782:73;;;;-1:-1:-1;;;15782:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15892:6;;;15871:38;;-1:-1:-1;;;;;15871:38:0;;;;15892:6;;;15871:38;;;15920:6;:17;;-1:-1:-1;;;;;;15920:17:0;-1:-1:-1;;;;;15920:17:0;;;;;;;;;;15716:229::o;12757:156::-;-1:-1:-1;;;;;;12858:47:0;;-1:-1:-1;;;12858:47:0;12757:156;;;:::o;11992:431::-;12053:4;12330:21;;12371:15;;;;;:43;;-1:-1:-1;11636:66:0;12390:24;;;12363:52;-1:-1:-1;;11992:431:0:o;30121:768::-;30326:18;30347:70;30354:12;30347:70;;;;;;;;;;;;;;;;;:6;:70::i;:::-;30326:91;;30453:1;30438:12;:16;;;:94;;;;-1:-1:-1;;;;;;30458:22:0;;;;;;:11;:22;;;;;;;;:74;-1:-1:-1;;30481:16:0;;30458:40;;;;;;;;;;:49;;;;;;;;;:59;:74;;;:59;;:74;30438:94;30434:375;;;-1:-1:-1;;;;;30549:22:0;;;;;;:11;:22;;;;;;;;:40;-1:-1:-1;;30572:16:0;;30549:40;;;;;;;;:49;;;;;;;;30587:1;30549:55;:66;;;30434:375;;;30696:33;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30648:22:0;;-1:-1:-1;30648:22:0;;;:11;:22;;;;;:36;;;;;;;;;;:45;;;;;;;;:81;;;;;;;-1:-1:-1;;30648:81:0;;;;;;;;;;;;;30744:25;;;:14;:25;;;;;:34;;;;;;;;;:53;;30781:16;;;30744:53;;;;;;;;;;30434:375;30830:51;;;;;;;;;;;;;;-1:-1:-1;;;;;30830:51:0;;;;;;;;;;;30121:768;;;;;;:::o;30901:161::-;30976:6;31014:12;-1:-1:-1;;;31003:9:0;;30995:32;;;;-1:-1:-1;;;30995:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31052:1:0;;30901:161;-1:-1:-1;;30901:161:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;
Swarm Source
ipfs://42aa9a092c98191affbc56a3c77cc6c96a67594c2695f82b571c2aab36881664
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.