Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 9 from a total of 9 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Approve | 11959022 | 1157 days ago | IN | 0 ETH | 0.00374363 | ||||
Approve | 11959017 | 1157 days ago | IN | 0 ETH | 0.00374462 | ||||
Approve | 11959013 | 1157 days ago | IN | 0 ETH | 0.00374462 | ||||
Approve | 11959002 | 1157 days ago | IN | 0 ETH | 0.00383486 | ||||
Approve | 11958994 | 1157 days ago | IN | 0 ETH | 0.00365439 | ||||
Approve | 11958983 | 1157 days ago | IN | 0 ETH | 0.00362281 | ||||
Approve | 11958981 | 1157 days ago | IN | 0 ETH | 0.00362281 | ||||
Approve | 11958979 | 1157 days ago | IN | 0 ETH | 0.00362281 | ||||
0x60806040 | 11953174 | 1158 days ago | IN | Create: ShadowsToken | 0 ETH | 1.038007 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
ShadowsToken
Compiler Version
v0.6.11+commit.5ef660b1
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-03-01 */ // SPDX-License-Identifier: MIT // solhint-disable-next-line compiler-version pragma solidity >=0.4.24 <0.8.0; /** * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. * * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}. * * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. */ abstract contract Initializable { /** * @dev Indicates that the contract has been initialized. */ bool private _initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool private _initializing; /** * @dev Modifier to protect an initializer function from being invoked twice. */ modifier initializer() { require(_initializing || _isConstructor() || !_initialized, "Initializable: contract is already initialized"); bool isTopLevelCall = !_initializing; if (isTopLevelCall) { _initializing = true; _initialized = true; } _; if (isTopLevelCall) { _initializing = false; } } /// @dev Returns true if and only if the function is running in the constructor function _isConstructor() private view returns (bool) { // extcodesize checks the size of the code stored in an address, and // address returns the current address. Since the code is still not // deployed when running a constructor, any checks on its code size will // yield zero, making it an effective way to detect if a contract is // under construction or not. address self = address(this); uint256 cs; // solhint-disable-next-line no-inline-assembly assembly { cs := extcodesize(self) } return cs == 0; } } // File: @openzeppelin/contracts-upgradeable/GSN/ContextUpgradeable.sol pragma solidity >=0.6.0 <0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with 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 ContextUpgradeable is Initializable { function __Context_init() internal initializer { __Context_init_unchained(); } function __Context_init_unchained() internal initializer { } function _msgSender() internal view virtual returns (address payable) { 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; } uint256[50] private __gap; } // File: @openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol pragma solidity >=0.6.0 <0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20Upgradeable { /** * @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); } // File: @openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol pragma solidity >=0.6.0 <0.8.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMathUpgradeable { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File: @openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol pragma solidity >=0.6.0 <0.8.0; /** * @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 ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable { using SafeMathUpgradeable for uint256; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; /** * @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. */ function __ERC20_init(string memory name_, string memory symbol_) internal initializer { __Context_init_unchained(); __ERC20_init_unchained(name_, symbol_); } function __ERC20_init_unchained(string memory name_, string memory symbol_) internal initializer { _name = name_; _symbol = symbol_; _decimals = 18; } /** * @dev Returns the name of the token. */ function name() public view returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view returns (string memory) { return _symbol; } /** * @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 returns (uint8) { return _decimals; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view 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"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), 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 { _decimals = decimals_; } /** * @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 from, address to, uint256 amount) internal virtual { } uint256[44] private __gap; } // File: @openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol pragma solidity >=0.6.0 <0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract PausableUpgradeable is Initializable, ContextUpgradeable { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ function __Pausable_init() internal initializer { __Context_init_unchained(); __Pausable_init_unchained(); } function __Pausable_init_unchained() internal initializer { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!_paused, "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(_paused, "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } uint256[49] private __gap; } // File: @openzeppelin/contracts-upgradeable/token/ERC20/ERC20PausableUpgradeable.sol pragma solidity >=0.6.0 <0.8.0; /** * @dev ERC20 token with pausable token transfers, minting and burning. * * Useful for scenarios such as preventing trades until the end of an evaluation * period, or having an emergency switch for freezing all token transfers in the * event of a large bug. */ abstract contract ERC20PausableUpgradeable is Initializable, ERC20Upgradeable, PausableUpgradeable { function __ERC20Pausable_init() internal initializer { __Context_init_unchained(); __Pausable_init_unchained(); __ERC20Pausable_init_unchained(); } function __ERC20Pausable_init_unchained() internal initializer { } /** * @dev See {ERC20-_beforeTokenTransfer}. * * Requirements: * * - the contract must not be paused. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual override { super._beforeTokenTransfer(from, to, amount); require(!paused(), "ERC20Pausable: token transfer while paused"); } uint256[50] private __gap; } // File: @openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol pragma solidity >=0.6.0 <0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract OwnableUpgradeable is Initializable, ContextUpgradeable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ function __Ownable_init() internal initializer { __Context_init_unchained(); __Ownable_init_unchained(); } function __Ownable_init_unchained() internal initializer { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view 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; } uint256[49] private __gap; } // File: contracts/AuthorizeableUpgradeable.sol pragma solidity 0.6.11; contract AuthorizeableUpgradeable is Initializable, ContextUpgradeable, OwnableUpgradeable { address[] private _authorizedAddresses; /** * @dev Initializes the contract setting the deployer as the initial owner. */ function __Authorizeable_init() internal initializer { __Context_init_unchained(); } function addAuthorizedAddress(address address_) external onlyOwner { require(address_ != address(0), "Add authorize address is zero"); for (uint256 i = 0; i < _authorizedAddresses.length; i++) { require( _authorizedAddresses[i] != address_, "address_ already exists" ); } _authorizedAddresses.push(address_); } function removeAuthorizedAddress(address address_) external onlyOwner { require(address_ != address(0), "Remove authorize address is zero"); for (uint256 i = 0; i < _authorizedAddresses.length; i++) { if (_authorizedAddresses[i] == address_) { _authorizedAddresses[i] = _authorizedAddresses[ _authorizedAddresses.length - 1 ]; _authorizedAddresses.pop(); return; } } } /** * @dev Returns the address of the current owner. */ function authorizedAddresses() external view onlyOwner returns (address[] memory) { return _authorizedAddresses; } modifier onlyAuthorized() { address msgSender = _msgSender(); bool isAuthorized = false; for (uint256 i = 0; i < _authorizedAddresses.length; i++) { if (_authorizedAddresses[i] == msgSender) { isAuthorized = true; break; } } require(isAuthorized, "Sender not authorized"); _; } } // File: contracts/ShadowsToken.sol pragma solidity 0.6.11; pragma experimental ABIEncoderV2; struct FrozenWallet { address wallet; uint256 totalAmount; uint256 monthlyAmount; uint256 initialAmount; uint256 startDay; bool immediately; bool scheduled; } struct VestingType { uint256 monthlyRate; uint256 initialRate; uint256 afterDays; bool immediately; bool vesting; } contract ShadowsToken is Initializable, OwnableUpgradeable, AuthorizeableUpgradeable, ERC20PausableUpgradeable { event AddFrozenWallet(address indexed _address); event Pause(); event Unpause(); mapping(address => FrozenWallet) public frozenWallets; VestingType[] public vestingTypes; // Maximum Total Supply 100 M uint256 constant maxTotalSupply = 1e8 ether; // Release Date 15.12.2020 uint256 constant releaseTime = 1614697200; function initialize() external initializer { __Ownable_init(); __Authorizeable_init(); __ERC20_init("Shadows Network", "DOWS"); __ERC20Pausable_init(); _mint(address(0x24F6e9860b05B21bcfB9d4f56D09aa6Aefb589e3), 2000000 ether); _mint(address(0xF2faAC2a134381124ee0Be7Ec76258e8a4c11C7b), 2000000 ether); vestingTypes.push( VestingType( 1e19, 2e19, 0, true, true ) ); // 20% unlock immediately on TGE, rest unlocked over 8 months vestingTypes.push( VestingType( 9375e15, 25e18, 0, true, true ) ); // 25% unlock immediately on TGE, rest unlocked over 8 months vestingTypes.push( VestingType(416e16, 0, 270 days, false, true) ); // First unlock at month 10, rest unlock over 24 months } function addAllocations( address[] memory addresses, uint256[] memory totalAmounts, uint256 vestingTypeIndex ) external onlyOwner returns (bool) { require( addresses.length == totalAmounts.length, "Address and totalAmounts length must be same" ); require( vestingTypes[vestingTypeIndex].vesting, "Vesting type isn't found" ); VestingType memory vestingType = vestingTypes[vestingTypeIndex]; uint256 addressesLength = addresses.length; for (uint256 i = 0; i < addressesLength; i++) { address address_ = addresses[i]; uint256 totalAmount = totalAmounts[i]; uint256 monthlyAmount = totalAmounts[i].mul(vestingType.monthlyRate).div( 100000000000000000000 ); uint256 initialAmount = totalAmounts[i].mul(vestingType.initialRate).div( 100000000000000000000 ); uint256 afterDay = vestingType.afterDays; bool immediately = vestingType.immediately; addFrozenWallet( address_, totalAmount, monthlyAmount, initialAmount, afterDay, immediately ); } return true; } function addFrozenWallet( address wallet, uint256 totalAmount, uint256 monthlyAmount, uint256 initialAmount, uint256 afterDays, bool immediately ) internal { if (!frozenWallets[wallet].scheduled) { _mint(wallet, totalAmount); // Add wallet to frozen wallets frozenWallets[wallet] = FrozenWallet( wallet, totalAmount, monthlyAmount, initialAmount, releaseTime.add(afterDays), immediately, true ); emit AddFrozenWallet(wallet); } } function mint(address account, uint256 amount) external onlyAuthorized { _mint(account, amount); } function _mint(address account, uint256 amount) internal override { uint256 totalSupply = super.totalSupply(); require( maxTotalSupply >= totalSupply.add(amount), "Max total supply over" ); super._mint(account, amount); } // @override function _beforeTokenTransfer( address sender, address recipient, uint256 amount ) internal virtual override { require(canTransfer(sender, amount), "Wait for the vesting day!"); super._beforeTokenTransfer(sender, recipient, amount); } function getTransferableAmount(address sender) public view returns (uint256) { FrozenWallet memory frozenWallet = frozenWallets[sender]; uint256 months = getMonths(frozenWallet.immediately, frozenWallet.startDay); uint256 monthlyTransferableAmount = frozenWallet.monthlyAmount.mul(months); uint256 transferableAmount = monthlyTransferableAmount.add(frozenWallet.initialAmount); return transferableAmount > frozenWallet.totalAmount ? frozenWallet.totalAmount : transferableAmount; } function getRequiredAmount(address sender) public view returns (uint256) { uint256 transferableAmount = getTransferableAmount(sender); return frozenWallets[sender].totalAmount.sub(transferableAmount); } // Transfer control // Zero control has from erc20 function canTransfer(address sender, uint256 amount) public view returns (bool) { // Control is scheduled wallet if (!frozenWallets[sender].scheduled) { return true; } uint256 balance = balanceOf(sender); uint256 requiredAmount = getRequiredAmount(sender); if ( !isStarted(frozenWallets[sender].startDay) || balance.sub(amount) < requiredAmount ) { return false; } return true; } // Frozen wallet can get initial amount with immediately parameter function getMonths(bool immediately, uint256 startDay) public view returns (uint256) { uint256 delay = immediately ? 0 : 1; if (block.timestamp < startDay) { return 0; } uint256 diff = block.timestamp.sub(startDay); uint256 months = diff.div(30 days).add(delay); return months; } function isStarted(uint256 startDay) public view returns (bool) { if (block.timestamp < releaseTime || block.timestamp < startDay) { return false; } return true; } function pause(bool status) external onlyOwner { if (status) { _pause(); emit Pause(); } else { _unpause(); emit Unpause(); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_address","type":"address"}],"name":"AddFrozenWallet","type":"event"},{"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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"totalAmounts","type":"uint256[]"},{"internalType":"uint256","name":"vestingTypeIndex","type":"uint256"}],"name":"addAllocations","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"addAuthorizedAddress","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":[],"name":"authorizedAddresses","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","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":"sender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"canTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"","type":"address"}],"name":"frozenWallets","outputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint256","name":"totalAmount","type":"uint256"},{"internalType":"uint256","name":"monthlyAmount","type":"uint256"},{"internalType":"uint256","name":"initialAmount","type":"uint256"},{"internalType":"uint256","name":"startDay","type":"uint256"},{"internalType":"bool","name":"immediately","type":"bool"},{"internalType":"bool","name":"scheduled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"immediately","type":"bool"},{"internalType":"uint256","name":"startDay","type":"uint256"}],"name":"getMonths","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"getRequiredAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"getTransferableAmount","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":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"startDay","type":"uint256"}],"name":"isStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"removeAuthorizedAddress","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"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"vestingTypes","outputs":[{"internalType":"uint256","name":"monthlyRate","type":"uint256"},{"internalType":"uint256","name":"initialRate","type":"uint256"},{"internalType":"uint256","name":"afterDays","type":"uint256"},{"internalType":"bool","name":"immediately","type":"bool"},{"internalType":"bool","name":"vesting","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50614a7d806100206000396000f3fe608060405234801561001057600080fd5b50600436106101ce5760003560e01c8063715018a611610104578063a457c2d7116100a2578063d45e09c111610071578063d45e09c11461056f578063dd62ed3e1461059f578063e66fa239146105cf578063f2fde38b14610603576101ce565b8063a457c2d7146104af578063a851c2e5146104df578063a9059cbb1461050f578063abd225e11461053f576101ce565b80638da5cb5b116100de5780638da5cb5b1461041357806395d89b411461043157806398ee37b41461044f578063a18f100a1461047f576101ce565b8063715018a6146103c957806371849403146103d35780638129fc1c14610409576101ce565b80633950935111610171578063521987411161014b57806352198741146103415780635c975abb1461035f578063707129391461037d57806370a0823114610399576101ce565b806339509351146102d957806340c10f191461030957806342f1181e14610325576101ce565b8063095ea7b3116101ad578063095ea7b31461023d57806318160ddd1461026d57806323b872dd1461028b578063313ce567146102bb576101ce565b8062b61dd9146101d357806302329a291461020357806306fdde031461021f575b600080fd5b6101ed60048036038101906101e89190613a25565b61061f565b6040516101fa9190614765565b60405180910390f35b61021d60048036038101906102189190613b94565b610797565b005b6102276108a5565b60405161023491906144a3565b60405180910390f35b61025760048036038101906102529190613ad9565b610947565b6040516102649190614488565b60405180910390f35b610275610965565b6040516102829190614765565b60405180910390f35b6102a560048036038101906102a09190613a8a565b61096f565b6040516102b29190614488565b60405180910390f35b6102c3610a48565b6040516102d091906147d3565b60405180910390f35b6102f360048036038101906102ee9190613ad9565b610a5f565b6040516103009190614488565b60405180910390f35b610323600480360381019061031e9190613ad9565b610b12565b005b61033f600480360381019061033a9190613a25565b610c08565b005b610349610e3c565b6040516103569190614466565b60405180910390f35b610367610f61565b6040516103749190614488565b60405180910390f35b61039760048036038101906103929190613a25565b610f78565b005b6103b360048036038101906103ae9190613a25565b6111ea565b6040516103c09190614765565b60405180910390f35b6103d1611233565b005b6103ed60048036038101906103e89190613a25565b61138b565b60405161040097969594939291906143f7565b60405180910390f35b610411611407565b005b61041b611827565b60405161042891906143c1565b60405180910390f35b610439611851565b60405161044691906144a3565b60405180910390f35b61046960048036038101906104649190613a25565b6118f3565b6040516104769190614765565b60405180910390f35b61049960048036038101906104949190613bbd565b61195e565b6040516104a69190614765565b60405180910390f35b6104c960048036038101906104c49190613ad9565b6119d7565b6040516104d69190614488565b60405180910390f35b6104f960048036038101906104f49190613b15565b611aa4565b6040516105069190614488565b60405180910390f35b61052960048036038101906105249190613ad9565b611d87565b6040516105369190614488565b60405180910390f35b61055960048036038101906105549190613bf9565b611da5565b6040516105669190614488565b60405180910390f35b61058960048036038101906105849190613ad9565b611dd0565b6040516105969190614488565b60405180910390f35b6105b960048036038101906105b49190613a4e565b611ece565b6040516105c69190614765565b60405180910390f35b6105e960048036038101906105e49190613bf9565b611f55565b6040516105fa959493929190614780565b60405180910390f35b61061d60048036038101906106189190613a25565b611fb2565b005b60006106296137b1565b60fc60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060e00160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820160009054906101000a900460ff161515151581526020016005820160019054906101000a900460ff1615151515815250509050600061073d8260a00151836080015161195e565b9050600061075882846040015161217990919063ffffffff16565b905060006107738460600151836121e990919063ffffffff16565b905083602001518111610786578061078c565b83602001515b945050505050919050565b61079f61223e565b73ffffffffffffffffffffffffffffffffffffffff16603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461082e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082590614685565b60405180910390fd5b801561086d5761083c612246565b7f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a16108a2565b6108756122f1565b7f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a15b50565b606060698054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561093d5780601f106109125761010080835404028352916020019161093d565b820191906000526020600020905b81548152906001019060200180831161092057829003601f168201915b5050505050905090565b600061095b61095461223e565b848461239b565b6001905092915050565b6000606854905090565b600061097c848484612566565b610a3d8461098861223e565b610a38856040518060600160405280602881526020016149fb60289139606760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006109ee61223e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127ff9092919063ffffffff16565b61239b565b600190509392505050565b6000606b60009054906101000a900460ff16905090565b6000610b08610a6c61223e565b84610b038560676000610a7d61223e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121e990919063ffffffff16565b61239b565b6001905092915050565b6000610b1c61223e565b9050600080905060008090505b606580549050811015610bb7578273ffffffffffffffffffffffffffffffffffffffff1660658281548110610b5a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610baa5760019150610bb7565b8080600101915050610b29565b5080610bf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bef90614505565b60405180910390fd5b610c02848461285a565b50505050565b610c1061223e565b73ffffffffffffffffffffffffffffffffffffffff16603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9690614685565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d06906146e5565b60405180910390fd5b60008090505b606580549050811015610dd5578173ffffffffffffffffffffffffffffffffffffffff1660658281548110610d4657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610dc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbf90614645565b60405180910390fd5b8080600101915050610d15565b506065819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060610e4661223e565b73ffffffffffffffffffffffffffffffffffffffff16603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ed5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecc90614685565b60405180910390fd5b6065805480602002602001604051908101604052809291908181526020018280548015610f5757602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610f0d575b5050505050905090565b6000609860009054906101000a900460ff16905090565b610f8061223e565b73ffffffffffffffffffffffffffffffffffffffff16603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461100f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100690614685565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561107f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611076906145c5565b60405180910390fd5b60008090505b6065805490508110156111e5578173ffffffffffffffffffffffffffffffffffffffff16606582815481106110b657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156111d85760656001606580549050038154811061111257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166065828154811061114a57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606580548061119d57fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055506111e7565b8080600101915050611085565b505b50565b6000606660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61123b61223e565b73ffffffffffffffffffffffffffffffffffffffff16603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c190614685565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60fc6020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154908060040154908060050160009054906101000a900460ff16908060050160019054906101000a900460ff16905087565b600060019054906101000a900460ff168061142657506114256128d5565b5b8061143d57506000809054906101000a900460ff16155b61147c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147390614625565b60405180910390fd5b60008060019054906101000a900460ff1615905080156114cc576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b6114d46128ec565b6114dc6129e5565b6115506040518060400160405280600f81526020017f536861646f7773204e6574776f726b00000000000000000000000000000000008152506040518060400160405280600481526020017f444f575300000000000000000000000000000000000000000000000000000000815250612ad6565b611558612bd3565b6115817324f6e9860b05b21bcfb9d4f56d09aa6aefb589e36a01a784379d99db4200000061285a565b6115aa73f2faac2a134381124ee0be7ec76258e8a4c11c7b6a01a784379d99db4200000061285a565b60fd6040518060a00160405280678ac7230489e8000081526020016801158e460913d0000081526020016000815260200160011515815260200160011515815250908060018154018082558091505060019003906000526020600020906004020160009091909190915060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548160ff02191690831515021790555060808201518160030160016101000a81548160ff021916908315150217905550505060fd6040518060a0016040528067821ab0d441498000815260200168015af1d78b58c4000081526020016000815260200160011515815260200160011515815250908060018154018082558091505060019003906000526020600020906004020160009091909190915060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548160ff02191690831515021790555060808201518160030160016101000a81548160ff021916908315150217905550505060fd6040518060a001604052806739bb49f599a00000815260200160008152602001630163f500815260200160001515815260200160011515815250908060018154018082558091505060019003906000526020600020906004020160009091909190915060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548160ff02191690831515021790555060808201518160030160016101000a81548160ff021916908315150217905550505080156118245760008060016101000a81548160ff0219169083151502179055505b50565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060606a8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118e95780601f106118be576101008083540402835291602001916118e9565b820191906000526020600020905b8154815290600101906020018083116118cc57829003601f168201915b5050505050905090565b6000806118ff8361061f565b90506119568160fc60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154612cd490919063ffffffff16565b915050919050565b6000808361196d576001611970565b60005b60ff169050824210156119875760009150506119d1565b600061199c8442612cd490919063ffffffff16565b905060006119c8836119ba62278d0085612d1e90919063ffffffff16565b6121e990919063ffffffff16565b90508093505050505b92915050565b6000611a9a6119e461223e565b84611a9585604051806060016040528060258152602001614a236025913960676000611a0e61223e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127ff9092919063ffffffff16565b61239b565b6001905092915050565b6000611aae61223e565b73ffffffffffffffffffffffffffffffffffffffff16603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3490614685565b60405180910390fd5b8251845114611b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7890614725565b60405180910390fd5b60fd8281548110611b8e57fe5b906000526020600020906004020160030160019054906101000a900460ff16611bec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be390614605565b60405180910390fd5b611bf4613808565b60fd8381548110611c0157fe5b90600052602060002090600402016040518060a00160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff161515151581526020016003820160019054906101000a900460ff161515151581525050905060008551905060008090505b81811015611d79576000878281518110611c9257fe5b602002602001015190506000878381518110611caa57fe5b602002602001015190506000611cfb68056bc75e2d63100000611ced88600001518c8881518110611cd757fe5b602002602001015161217990919063ffffffff16565b612d1e90919063ffffffff16565b90506000611d4468056bc75e2d63100000611d3689602001518d8981518110611d2057fe5b602002602001015161217990919063ffffffff16565b612d1e90919063ffffffff16565b9050600087604001519050600088606001519050611d66868686868686612d68565b5050505050508080600101915050611c7c565b506001925050509392505050565b6000611d9b611d9461223e565b8484612566565b6001905092915050565b600063603e52f0421080611db857508142105b15611dc65760009050611dcb565b600190505b919050565b600060fc60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160019054906101000a900460ff16611e2f5760019050611ec8565b6000611e3a846111ea565b90506000611e47856118f3565b9050611e9460fc60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040154611da5565b1580611eb1575080611eaf8584612cd490919063ffffffff16565b105b15611ec157600092505050611ec8565b6001925050505b92915050565b6000606760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60fd8181548110611f6257fe5b90600052602060002090600402016000915090508060000154908060010154908060020154908060030160009054906101000a900460ff16908060030160019054906101000a900460ff16905085565b611fba61223e565b73ffffffffffffffffffffffffffffffffffffffff16603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612049576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204090614685565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b090614525565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008083141561218c57600090506121e3565b600082840290508284828161219d57fe5b04146121de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d590614665565b60405180910390fd5b809150505b92915050565b600080828401905083811015612234576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222b90614585565b60405180910390fd5b8091505092915050565b600033905090565b609860009054906101000a900460ff1615612296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228d906145e5565b60405180910390fd5b6001609860006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586122da61223e565b6040516122e791906143dc565b60405180910390a1565b609860009054906101000a900460ff16612340576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612337906144e5565b60405180910390fd5b6000609860006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61238461223e565b60405161239191906143dc565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561240b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612402906146c5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561247b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247290614545565b60405180910390fd5b80606760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125599190614765565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125cd906146a5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612646576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263d906144c5565b60405180910390fd5b612651838383612f67565b6126bd816040518060600160405280602681526020016149d560269139606660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127ff9092919063ffffffff16565b606660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061275281606660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121e990919063ffffffff16565b606660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516127f29190614765565b60405180910390a3505050565b6000838311158290612847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283e91906144a3565b60405180910390fd5b5060008385039050809150509392505050565b6000612864610965565b905061287982826121e990919063ffffffff16565b6a52b7d2dcc80cd2e400000010156128c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128bd906145a5565b60405180910390fd5b6128d08383612fc0565b505050565b6000803090506000813b9050600081149250505090565b600060019054906101000a900460ff168061290b575061290a6128d5565b5b8061292257506000809054906101000a900460ff16155b612961576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295890614625565b60405180910390fd5b60008060019054906101000a900460ff1615905080156129b1576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b6129b9613156565b6129c161323f565b80156129e25760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff1680612a045750612a036128d5565b5b80612a1b57506000809054906101000a900460ff16155b612a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5190614625565b60405180910390fd5b60008060019054906101000a900460ff161590508015612aaa576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b612ab2613156565b8015612ad35760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff1680612af55750612af46128d5565b5b80612b0c57506000809054906101000a900460ff16155b612b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4290614625565b60405180910390fd5b60008060019054906101000a900460ff161590508015612b9b576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b612ba3613156565b612bad83836133d1565b8015612bce5760008060016101000a81548160ff0219169083151502179055505b505050565b600060019054906101000a900460ff1680612bf25750612bf16128d5565b5b80612c0957506000809054906101000a900460ff16155b612c48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3f90614625565b60405180910390fd5b60008060019054906101000a900460ff161590508015612c98576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b612ca0613156565b612ca8613506565b612cb061360a565b8015612cd15760008060016101000a81548160ff0219169083151502179055505b50565b6000612d1683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506127ff565b905092915050565b6000612d6083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506136f3565b905092915050565b60fc60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160019054906101000a900460ff16612f5f57612dc6868661285a565b6040518060e001604052808773ffffffffffffffffffffffffffffffffffffffff168152602001868152602001858152602001848152602001612e168463603e52f06121e990919063ffffffff16565b815260200182151581526020016001151581525060fc60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050160006101000a81548160ff02191690831515021790555060c08201518160050160016101000a81548160ff0219169083151502179055509050508573ffffffffffffffffffffffffffffffffffffffff167f5de2b219e6bbc6713b512b49d1069bc227bbc516453803fe85c636d0543be65460405160405180910390a25b505050505050565b612f718382611dd0565b612fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa790614565565b60405180910390fd5b612fbb838383613754565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613030576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302790614705565b60405180910390fd5b61303c60008383612f67565b613051816068546121e990919063ffffffff16565b6068819055506130a981606660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121e990919063ffffffff16565b606660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161314a9190614765565b60405180910390a35050565b600060019054906101000a900460ff168061317557506131746128d5565b5b8061318c57506000809054906101000a900460ff16155b6131cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c290614625565b60405180910390fd5b60008060019054906101000a900460ff16159050801561321b576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b801561323c5760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff168061325e575061325d6128d5565b5b8061327557506000809054906101000a900460ff16155b6132b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ab90614625565b60405180910390fd5b60008060019054906101000a900460ff161590508015613304576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b600061330e61223e565b905080603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35080156133ce5760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff16806133f057506133ef6128d5565b5b8061340757506000809054906101000a900460ff16155b613446576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343d90614625565b60405180910390fd5b60008060019054906101000a900460ff161590508015613496576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b82606990805190602001906134ac92919061383b565b5081606a90805190602001906134c392919061383b565b506012606b60006101000a81548160ff021916908360ff16021790555080156135015760008060016101000a81548160ff0219169083151502179055505b505050565b600060019054906101000a900460ff168061352557506135246128d5565b5b8061353c57506000809054906101000a900460ff16155b61357b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161357290614625565b60405180910390fd5b60008060019054906101000a900460ff1615905080156135cb576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b6000609860006101000a81548160ff02191690831515021790555080156136075760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff168061362957506136286128d5565b5b8061364057506000809054906101000a900460ff16155b61367f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161367690614625565b60405180910390fd5b60008060019054906101000a900460ff1615905080156136cf576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b80156136f05760008060016101000a81548160ff0219169083151502179055505b50565b6000808311829061373a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161373191906144a3565b60405180910390fd5b50600083858161374657fe5b049050809150509392505050565b61375f8383836137ac565b613767610f61565b156137a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161379e90614745565b60405180910390fd5b505050565b505050565b6040518060e00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b6040518060a001604052806000815260200160008152602001600081526020016000151581526020016000151581525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061387c57805160ff19168380011785556138aa565b828001600101855582156138aa579182015b828111156138a957825182559160200191906001019061388e565b5b5090506138b791906138bb565b5090565b6138dd91905b808211156138d95760008160009055506001016138c1565b5090565b90565b6000813590506138ef8161498f565b92915050565b600082601f83011261390657600080fd5b81356139196139148261481b565b6147ee565b9150818183526020840193506020810190508385602084028201111561393e57600080fd5b60005b8381101561396e578161395488826138e0565b845260208401935060208301925050600181019050613941565b5050505092915050565b600082601f83011261398957600080fd5b813561399c61399782614843565b6147ee565b915081818352602084019350602081019050838560208402820111156139c157600080fd5b60005b838110156139f157816139d78882613a10565b8452602084019350602083019250506001810190506139c4565b5050505092915050565b600081359050613a0a816149a6565b92915050565b600081359050613a1f816149bd565b92915050565b600060208284031215613a3757600080fd5b6000613a45848285016138e0565b91505092915050565b60008060408385031215613a6157600080fd5b6000613a6f858286016138e0565b9250506020613a80858286016138e0565b9150509250929050565b600080600060608486031215613a9f57600080fd5b6000613aad868287016138e0565b9350506020613abe868287016138e0565b9250506040613acf86828701613a10565b9150509250925092565b60008060408385031215613aec57600080fd5b6000613afa858286016138e0565b9250506020613b0b85828601613a10565b9150509250929050565b600080600060608486031215613b2a57600080fd5b600084013567ffffffffffffffff811115613b4457600080fd5b613b50868287016138f5565b935050602084013567ffffffffffffffff811115613b6d57600080fd5b613b7986828701613978565b9250506040613b8a86828701613a10565b9150509250925092565b600060208284031215613ba657600080fd5b6000613bb4848285016139fb565b91505092915050565b60008060408385031215613bd057600080fd5b6000613bde858286016139fb565b9250506020613bef85828601613a10565b9150509250929050565b600060208284031215613c0b57600080fd5b6000613c1984828501613a10565b91505092915050565b6000613c2e8383613c49565b60208301905092915050565b613c4381614915565b82525050565b613c52816148c0565b82525050565b613c61816148c0565b82525050565b6000613c728261487b565b613c7c818561489e565b9350613c878361486b565b8060005b83811015613cb8578151613c9f8882613c22565b9750613caa83614891565b925050600181019050613c8b565b5085935050505092915050565b613cce816148d2565b82525050565b6000613cdf82614886565b613ce981856148af565b9350613cf981856020860161494b565b613d028161497e565b840191505092915050565b6000613d1a6023836148af565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613d806014836148af565b91507f5061757361626c653a206e6f74207061757365640000000000000000000000006000830152602082019050919050565b6000613dc06015836148af565b91507f53656e646572206e6f7420617574686f72697a656400000000000000000000006000830152602082019050919050565b6000613e006026836148af565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613e666022836148af565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613ecc6019836148af565b91507f5761697420666f72207468652076657374696e672064617921000000000000006000830152602082019050919050565b6000613f0c601b836148af565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000613f4c6015836148af565b91507f4d617820746f74616c20737570706c79206f76657200000000000000000000006000830152602082019050919050565b6000613f8c6020836148af565b91507f52656d6f766520617574686f72697a652061646472657373206973207a65726f6000830152602082019050919050565b6000613fcc6010836148af565b91507f5061757361626c653a20706175736564000000000000000000000000000000006000830152602082019050919050565b600061400c6018836148af565b91507f56657374696e6720747970652069736e277420666f756e6400000000000000006000830152602082019050919050565b600061404c602e836148af565b91507f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008301527f647920696e697469616c697a65640000000000000000000000000000000000006020830152604082019050919050565b60006140b26017836148af565b91507f616464726573735f20616c7265616479206578697374730000000000000000006000830152602082019050919050565b60006140f26021836148af565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141586020836148af565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006141986025836148af565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141fe6024836148af565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614264601d836148af565b91507f41646420617574686f72697a652061646472657373206973207a65726f0000006000830152602082019050919050565b60006142a4601f836148af565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b60006142e4602c836148af565b91507f4164647265737320616e6420746f74616c416d6f756e7473206c656e6774682060008301527f6d7573742062652073616d6500000000000000000000000000000000000000006020830152604082019050919050565b600061434a602a836148af565b91507f45524332305061757361626c653a20746f6b656e207472616e7366657220776860008301527f696c6520706175736564000000000000000000000000000000000000000000006020830152604082019050919050565b6143ac816148fe565b82525050565b6143bb81614908565b82525050565b60006020820190506143d66000830184613c58565b92915050565b60006020820190506143f16000830184613c3a565b92915050565b600060e08201905061440c600083018a613c58565b61441960208301896143a3565b61442660408301886143a3565b61443360608301876143a3565b61444060808301866143a3565b61444d60a0830185613cc5565b61445a60c0830184613cc5565b98975050505050505050565b600060208201905081810360008301526144808184613c67565b905092915050565b600060208201905061449d6000830184613cc5565b92915050565b600060208201905081810360008301526144bd8184613cd4565b905092915050565b600060208201905081810360008301526144de81613d0d565b9050919050565b600060208201905081810360008301526144fe81613d73565b9050919050565b6000602082019050818103600083015261451e81613db3565b9050919050565b6000602082019050818103600083015261453e81613df3565b9050919050565b6000602082019050818103600083015261455e81613e59565b9050919050565b6000602082019050818103600083015261457e81613ebf565b9050919050565b6000602082019050818103600083015261459e81613eff565b9050919050565b600060208201905081810360008301526145be81613f3f565b9050919050565b600060208201905081810360008301526145de81613f7f565b9050919050565b600060208201905081810360008301526145fe81613fbf565b9050919050565b6000602082019050818103600083015261461e81613fff565b9050919050565b6000602082019050818103600083015261463e8161403f565b9050919050565b6000602082019050818103600083015261465e816140a5565b9050919050565b6000602082019050818103600083015261467e816140e5565b9050919050565b6000602082019050818103600083015261469e8161414b565b9050919050565b600060208201905081810360008301526146be8161418b565b9050919050565b600060208201905081810360008301526146de816141f1565b9050919050565b600060208201905081810360008301526146fe81614257565b9050919050565b6000602082019050818103600083015261471e81614297565b9050919050565b6000602082019050818103600083015261473e816142d7565b9050919050565b6000602082019050818103600083015261475e8161433d565b9050919050565b600060208201905061477a60008301846143a3565b92915050565b600060a08201905061479560008301886143a3565b6147a260208301876143a3565b6147af60408301866143a3565b6147bc6060830185613cc5565b6147c96080830184613cc5565b9695505050505050565b60006020820190506147e860008301846143b2565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561481157600080fd5b8060405250919050565b600067ffffffffffffffff82111561483257600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561485a57600080fd5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006148cb826148de565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061492082614927565b9050919050565b600061493282614939565b9050919050565b6000614944826148de565b9050919050565b60005b8381101561496957808201518184015260208101905061494e565b83811115614978576000848401525b50505050565b6000601f19601f8301169050919050565b614998816148c0565b81146149a357600080fd5b50565b6149af816148d2565b81146149ba57600080fd5b50565b6149c6816148fe565b81146149d157600080fd5b5056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a2a878c6543403d2c347038af6ce703941ddb3098a35d9f10ffe2d68b8e7f44d64736f6c634300060b0033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101ce5760003560e01c8063715018a611610104578063a457c2d7116100a2578063d45e09c111610071578063d45e09c11461056f578063dd62ed3e1461059f578063e66fa239146105cf578063f2fde38b14610603576101ce565b8063a457c2d7146104af578063a851c2e5146104df578063a9059cbb1461050f578063abd225e11461053f576101ce565b80638da5cb5b116100de5780638da5cb5b1461041357806395d89b411461043157806398ee37b41461044f578063a18f100a1461047f576101ce565b8063715018a6146103c957806371849403146103d35780638129fc1c14610409576101ce565b80633950935111610171578063521987411161014b57806352198741146103415780635c975abb1461035f578063707129391461037d57806370a0823114610399576101ce565b806339509351146102d957806340c10f191461030957806342f1181e14610325576101ce565b8063095ea7b3116101ad578063095ea7b31461023d57806318160ddd1461026d57806323b872dd1461028b578063313ce567146102bb576101ce565b8062b61dd9146101d357806302329a291461020357806306fdde031461021f575b600080fd5b6101ed60048036038101906101e89190613a25565b61061f565b6040516101fa9190614765565b60405180910390f35b61021d60048036038101906102189190613b94565b610797565b005b6102276108a5565b60405161023491906144a3565b60405180910390f35b61025760048036038101906102529190613ad9565b610947565b6040516102649190614488565b60405180910390f35b610275610965565b6040516102829190614765565b60405180910390f35b6102a560048036038101906102a09190613a8a565b61096f565b6040516102b29190614488565b60405180910390f35b6102c3610a48565b6040516102d091906147d3565b60405180910390f35b6102f360048036038101906102ee9190613ad9565b610a5f565b6040516103009190614488565b60405180910390f35b610323600480360381019061031e9190613ad9565b610b12565b005b61033f600480360381019061033a9190613a25565b610c08565b005b610349610e3c565b6040516103569190614466565b60405180910390f35b610367610f61565b6040516103749190614488565b60405180910390f35b61039760048036038101906103929190613a25565b610f78565b005b6103b360048036038101906103ae9190613a25565b6111ea565b6040516103c09190614765565b60405180910390f35b6103d1611233565b005b6103ed60048036038101906103e89190613a25565b61138b565b60405161040097969594939291906143f7565b60405180910390f35b610411611407565b005b61041b611827565b60405161042891906143c1565b60405180910390f35b610439611851565b60405161044691906144a3565b60405180910390f35b61046960048036038101906104649190613a25565b6118f3565b6040516104769190614765565b60405180910390f35b61049960048036038101906104949190613bbd565b61195e565b6040516104a69190614765565b60405180910390f35b6104c960048036038101906104c49190613ad9565b6119d7565b6040516104d69190614488565b60405180910390f35b6104f960048036038101906104f49190613b15565b611aa4565b6040516105069190614488565b60405180910390f35b61052960048036038101906105249190613ad9565b611d87565b6040516105369190614488565b60405180910390f35b61055960048036038101906105549190613bf9565b611da5565b6040516105669190614488565b60405180910390f35b61058960048036038101906105849190613ad9565b611dd0565b6040516105969190614488565b60405180910390f35b6105b960048036038101906105b49190613a4e565b611ece565b6040516105c69190614765565b60405180910390f35b6105e960048036038101906105e49190613bf9565b611f55565b6040516105fa959493929190614780565b60405180910390f35b61061d60048036038101906106189190613a25565b611fb2565b005b60006106296137b1565b60fc60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060e00160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820160009054906101000a900460ff161515151581526020016005820160019054906101000a900460ff1615151515815250509050600061073d8260a00151836080015161195e565b9050600061075882846040015161217990919063ffffffff16565b905060006107738460600151836121e990919063ffffffff16565b905083602001518111610786578061078c565b83602001515b945050505050919050565b61079f61223e565b73ffffffffffffffffffffffffffffffffffffffff16603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461082e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082590614685565b60405180910390fd5b801561086d5761083c612246565b7f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a16108a2565b6108756122f1565b7f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a15b50565b606060698054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561093d5780601f106109125761010080835404028352916020019161093d565b820191906000526020600020905b81548152906001019060200180831161092057829003601f168201915b5050505050905090565b600061095b61095461223e565b848461239b565b6001905092915050565b6000606854905090565b600061097c848484612566565b610a3d8461098861223e565b610a38856040518060600160405280602881526020016149fb60289139606760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006109ee61223e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127ff9092919063ffffffff16565b61239b565b600190509392505050565b6000606b60009054906101000a900460ff16905090565b6000610b08610a6c61223e565b84610b038560676000610a7d61223e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121e990919063ffffffff16565b61239b565b6001905092915050565b6000610b1c61223e565b9050600080905060008090505b606580549050811015610bb7578273ffffffffffffffffffffffffffffffffffffffff1660658281548110610b5a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610baa5760019150610bb7565b8080600101915050610b29565b5080610bf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bef90614505565b60405180910390fd5b610c02848461285a565b50505050565b610c1061223e565b73ffffffffffffffffffffffffffffffffffffffff16603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9690614685565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d06906146e5565b60405180910390fd5b60008090505b606580549050811015610dd5578173ffffffffffffffffffffffffffffffffffffffff1660658281548110610d4657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610dc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbf90614645565b60405180910390fd5b8080600101915050610d15565b506065819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060610e4661223e565b73ffffffffffffffffffffffffffffffffffffffff16603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ed5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecc90614685565b60405180910390fd5b6065805480602002602001604051908101604052809291908181526020018280548015610f5757602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610f0d575b5050505050905090565b6000609860009054906101000a900460ff16905090565b610f8061223e565b73ffffffffffffffffffffffffffffffffffffffff16603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461100f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100690614685565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561107f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611076906145c5565b60405180910390fd5b60008090505b6065805490508110156111e5578173ffffffffffffffffffffffffffffffffffffffff16606582815481106110b657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156111d85760656001606580549050038154811061111257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166065828154811061114a57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606580548061119d57fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055506111e7565b8080600101915050611085565b505b50565b6000606660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61123b61223e565b73ffffffffffffffffffffffffffffffffffffffff16603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c190614685565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60fc6020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154908060040154908060050160009054906101000a900460ff16908060050160019054906101000a900460ff16905087565b600060019054906101000a900460ff168061142657506114256128d5565b5b8061143d57506000809054906101000a900460ff16155b61147c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147390614625565b60405180910390fd5b60008060019054906101000a900460ff1615905080156114cc576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b6114d46128ec565b6114dc6129e5565b6115506040518060400160405280600f81526020017f536861646f7773204e6574776f726b00000000000000000000000000000000008152506040518060400160405280600481526020017f444f575300000000000000000000000000000000000000000000000000000000815250612ad6565b611558612bd3565b6115817324f6e9860b05b21bcfb9d4f56d09aa6aefb589e36a01a784379d99db4200000061285a565b6115aa73f2faac2a134381124ee0be7ec76258e8a4c11c7b6a01a784379d99db4200000061285a565b60fd6040518060a00160405280678ac7230489e8000081526020016801158e460913d0000081526020016000815260200160011515815260200160011515815250908060018154018082558091505060019003906000526020600020906004020160009091909190915060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548160ff02191690831515021790555060808201518160030160016101000a81548160ff021916908315150217905550505060fd6040518060a0016040528067821ab0d441498000815260200168015af1d78b58c4000081526020016000815260200160011515815260200160011515815250908060018154018082558091505060019003906000526020600020906004020160009091909190915060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548160ff02191690831515021790555060808201518160030160016101000a81548160ff021916908315150217905550505060fd6040518060a001604052806739bb49f599a00000815260200160008152602001630163f500815260200160001515815260200160011515815250908060018154018082558091505060019003906000526020600020906004020160009091909190915060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548160ff02191690831515021790555060808201518160030160016101000a81548160ff021916908315150217905550505080156118245760008060016101000a81548160ff0219169083151502179055505b50565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060606a8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118e95780601f106118be576101008083540402835291602001916118e9565b820191906000526020600020905b8154815290600101906020018083116118cc57829003601f168201915b5050505050905090565b6000806118ff8361061f565b90506119568160fc60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154612cd490919063ffffffff16565b915050919050565b6000808361196d576001611970565b60005b60ff169050824210156119875760009150506119d1565b600061199c8442612cd490919063ffffffff16565b905060006119c8836119ba62278d0085612d1e90919063ffffffff16565b6121e990919063ffffffff16565b90508093505050505b92915050565b6000611a9a6119e461223e565b84611a9585604051806060016040528060258152602001614a236025913960676000611a0e61223e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127ff9092919063ffffffff16565b61239b565b6001905092915050565b6000611aae61223e565b73ffffffffffffffffffffffffffffffffffffffff16603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3490614685565b60405180910390fd5b8251845114611b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7890614725565b60405180910390fd5b60fd8281548110611b8e57fe5b906000526020600020906004020160030160019054906101000a900460ff16611bec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be390614605565b60405180910390fd5b611bf4613808565b60fd8381548110611c0157fe5b90600052602060002090600402016040518060a00160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff161515151581526020016003820160019054906101000a900460ff161515151581525050905060008551905060008090505b81811015611d79576000878281518110611c9257fe5b602002602001015190506000878381518110611caa57fe5b602002602001015190506000611cfb68056bc75e2d63100000611ced88600001518c8881518110611cd757fe5b602002602001015161217990919063ffffffff16565b612d1e90919063ffffffff16565b90506000611d4468056bc75e2d63100000611d3689602001518d8981518110611d2057fe5b602002602001015161217990919063ffffffff16565b612d1e90919063ffffffff16565b9050600087604001519050600088606001519050611d66868686868686612d68565b5050505050508080600101915050611c7c565b506001925050509392505050565b6000611d9b611d9461223e565b8484612566565b6001905092915050565b600063603e52f0421080611db857508142105b15611dc65760009050611dcb565b600190505b919050565b600060fc60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160019054906101000a900460ff16611e2f5760019050611ec8565b6000611e3a846111ea565b90506000611e47856118f3565b9050611e9460fc60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040154611da5565b1580611eb1575080611eaf8584612cd490919063ffffffff16565b105b15611ec157600092505050611ec8565b6001925050505b92915050565b6000606760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60fd8181548110611f6257fe5b90600052602060002090600402016000915090508060000154908060010154908060020154908060030160009054906101000a900460ff16908060030160019054906101000a900460ff16905085565b611fba61223e565b73ffffffffffffffffffffffffffffffffffffffff16603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612049576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204090614685565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b090614525565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008083141561218c57600090506121e3565b600082840290508284828161219d57fe5b04146121de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d590614665565b60405180910390fd5b809150505b92915050565b600080828401905083811015612234576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222b90614585565b60405180910390fd5b8091505092915050565b600033905090565b609860009054906101000a900460ff1615612296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228d906145e5565b60405180910390fd5b6001609860006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586122da61223e565b6040516122e791906143dc565b60405180910390a1565b609860009054906101000a900460ff16612340576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612337906144e5565b60405180910390fd5b6000609860006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61238461223e565b60405161239191906143dc565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561240b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612402906146c5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561247b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247290614545565b60405180910390fd5b80606760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125599190614765565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125cd906146a5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612646576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263d906144c5565b60405180910390fd5b612651838383612f67565b6126bd816040518060600160405280602681526020016149d560269139606660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127ff9092919063ffffffff16565b606660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061275281606660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121e990919063ffffffff16565b606660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516127f29190614765565b60405180910390a3505050565b6000838311158290612847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283e91906144a3565b60405180910390fd5b5060008385039050809150509392505050565b6000612864610965565b905061287982826121e990919063ffffffff16565b6a52b7d2dcc80cd2e400000010156128c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128bd906145a5565b60405180910390fd5b6128d08383612fc0565b505050565b6000803090506000813b9050600081149250505090565b600060019054906101000a900460ff168061290b575061290a6128d5565b5b8061292257506000809054906101000a900460ff16155b612961576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295890614625565b60405180910390fd5b60008060019054906101000a900460ff1615905080156129b1576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b6129b9613156565b6129c161323f565b80156129e25760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff1680612a045750612a036128d5565b5b80612a1b57506000809054906101000a900460ff16155b612a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5190614625565b60405180910390fd5b60008060019054906101000a900460ff161590508015612aaa576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b612ab2613156565b8015612ad35760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff1680612af55750612af46128d5565b5b80612b0c57506000809054906101000a900460ff16155b612b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4290614625565b60405180910390fd5b60008060019054906101000a900460ff161590508015612b9b576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b612ba3613156565b612bad83836133d1565b8015612bce5760008060016101000a81548160ff0219169083151502179055505b505050565b600060019054906101000a900460ff1680612bf25750612bf16128d5565b5b80612c0957506000809054906101000a900460ff16155b612c48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3f90614625565b60405180910390fd5b60008060019054906101000a900460ff161590508015612c98576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b612ca0613156565b612ca8613506565b612cb061360a565b8015612cd15760008060016101000a81548160ff0219169083151502179055505b50565b6000612d1683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506127ff565b905092915050565b6000612d6083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506136f3565b905092915050565b60fc60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160019054906101000a900460ff16612f5f57612dc6868661285a565b6040518060e001604052808773ffffffffffffffffffffffffffffffffffffffff168152602001868152602001858152602001848152602001612e168463603e52f06121e990919063ffffffff16565b815260200182151581526020016001151581525060fc60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050160006101000a81548160ff02191690831515021790555060c08201518160050160016101000a81548160ff0219169083151502179055509050508573ffffffffffffffffffffffffffffffffffffffff167f5de2b219e6bbc6713b512b49d1069bc227bbc516453803fe85c636d0543be65460405160405180910390a25b505050505050565b612f718382611dd0565b612fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa790614565565b60405180910390fd5b612fbb838383613754565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613030576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302790614705565b60405180910390fd5b61303c60008383612f67565b613051816068546121e990919063ffffffff16565b6068819055506130a981606660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121e990919063ffffffff16565b606660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161314a9190614765565b60405180910390a35050565b600060019054906101000a900460ff168061317557506131746128d5565b5b8061318c57506000809054906101000a900460ff16155b6131cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c290614625565b60405180910390fd5b60008060019054906101000a900460ff16159050801561321b576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b801561323c5760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff168061325e575061325d6128d5565b5b8061327557506000809054906101000a900460ff16155b6132b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ab90614625565b60405180910390fd5b60008060019054906101000a900460ff161590508015613304576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b600061330e61223e565b905080603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35080156133ce5760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff16806133f057506133ef6128d5565b5b8061340757506000809054906101000a900460ff16155b613446576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343d90614625565b60405180910390fd5b60008060019054906101000a900460ff161590508015613496576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b82606990805190602001906134ac92919061383b565b5081606a90805190602001906134c392919061383b565b506012606b60006101000a81548160ff021916908360ff16021790555080156135015760008060016101000a81548160ff0219169083151502179055505b505050565b600060019054906101000a900460ff168061352557506135246128d5565b5b8061353c57506000809054906101000a900460ff16155b61357b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161357290614625565b60405180910390fd5b60008060019054906101000a900460ff1615905080156135cb576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b6000609860006101000a81548160ff02191690831515021790555080156136075760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff168061362957506136286128d5565b5b8061364057506000809054906101000a900460ff16155b61367f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161367690614625565b60405180910390fd5b60008060019054906101000a900460ff1615905080156136cf576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b80156136f05760008060016101000a81548160ff0219169083151502179055505b50565b6000808311829061373a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161373191906144a3565b60405180910390fd5b50600083858161374657fe5b049050809150509392505050565b61375f8383836137ac565b613767610f61565b156137a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161379e90614745565b60405180910390fd5b505050565b505050565b6040518060e00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b6040518060a001604052806000815260200160008152602001600081526020016000151581526020016000151581525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061387c57805160ff19168380011785556138aa565b828001600101855582156138aa579182015b828111156138a957825182559160200191906001019061388e565b5b5090506138b791906138bb565b5090565b6138dd91905b808211156138d95760008160009055506001016138c1565b5090565b90565b6000813590506138ef8161498f565b92915050565b600082601f83011261390657600080fd5b81356139196139148261481b565b6147ee565b9150818183526020840193506020810190508385602084028201111561393e57600080fd5b60005b8381101561396e578161395488826138e0565b845260208401935060208301925050600181019050613941565b5050505092915050565b600082601f83011261398957600080fd5b813561399c61399782614843565b6147ee565b915081818352602084019350602081019050838560208402820111156139c157600080fd5b60005b838110156139f157816139d78882613a10565b8452602084019350602083019250506001810190506139c4565b5050505092915050565b600081359050613a0a816149a6565b92915050565b600081359050613a1f816149bd565b92915050565b600060208284031215613a3757600080fd5b6000613a45848285016138e0565b91505092915050565b60008060408385031215613a6157600080fd5b6000613a6f858286016138e0565b9250506020613a80858286016138e0565b9150509250929050565b600080600060608486031215613a9f57600080fd5b6000613aad868287016138e0565b9350506020613abe868287016138e0565b9250506040613acf86828701613a10565b9150509250925092565b60008060408385031215613aec57600080fd5b6000613afa858286016138e0565b9250506020613b0b85828601613a10565b9150509250929050565b600080600060608486031215613b2a57600080fd5b600084013567ffffffffffffffff811115613b4457600080fd5b613b50868287016138f5565b935050602084013567ffffffffffffffff811115613b6d57600080fd5b613b7986828701613978565b9250506040613b8a86828701613a10565b9150509250925092565b600060208284031215613ba657600080fd5b6000613bb4848285016139fb565b91505092915050565b60008060408385031215613bd057600080fd5b6000613bde858286016139fb565b9250506020613bef85828601613a10565b9150509250929050565b600060208284031215613c0b57600080fd5b6000613c1984828501613a10565b91505092915050565b6000613c2e8383613c49565b60208301905092915050565b613c4381614915565b82525050565b613c52816148c0565b82525050565b613c61816148c0565b82525050565b6000613c728261487b565b613c7c818561489e565b9350613c878361486b565b8060005b83811015613cb8578151613c9f8882613c22565b9750613caa83614891565b925050600181019050613c8b565b5085935050505092915050565b613cce816148d2565b82525050565b6000613cdf82614886565b613ce981856148af565b9350613cf981856020860161494b565b613d028161497e565b840191505092915050565b6000613d1a6023836148af565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613d806014836148af565b91507f5061757361626c653a206e6f74207061757365640000000000000000000000006000830152602082019050919050565b6000613dc06015836148af565b91507f53656e646572206e6f7420617574686f72697a656400000000000000000000006000830152602082019050919050565b6000613e006026836148af565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613e666022836148af565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613ecc6019836148af565b91507f5761697420666f72207468652076657374696e672064617921000000000000006000830152602082019050919050565b6000613f0c601b836148af565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000613f4c6015836148af565b91507f4d617820746f74616c20737570706c79206f76657200000000000000000000006000830152602082019050919050565b6000613f8c6020836148af565b91507f52656d6f766520617574686f72697a652061646472657373206973207a65726f6000830152602082019050919050565b6000613fcc6010836148af565b91507f5061757361626c653a20706175736564000000000000000000000000000000006000830152602082019050919050565b600061400c6018836148af565b91507f56657374696e6720747970652069736e277420666f756e6400000000000000006000830152602082019050919050565b600061404c602e836148af565b91507f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008301527f647920696e697469616c697a65640000000000000000000000000000000000006020830152604082019050919050565b60006140b26017836148af565b91507f616464726573735f20616c7265616479206578697374730000000000000000006000830152602082019050919050565b60006140f26021836148af565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141586020836148af565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006141986025836148af565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141fe6024836148af565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614264601d836148af565b91507f41646420617574686f72697a652061646472657373206973207a65726f0000006000830152602082019050919050565b60006142a4601f836148af565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b60006142e4602c836148af565b91507f4164647265737320616e6420746f74616c416d6f756e7473206c656e6774682060008301527f6d7573742062652073616d6500000000000000000000000000000000000000006020830152604082019050919050565b600061434a602a836148af565b91507f45524332305061757361626c653a20746f6b656e207472616e7366657220776860008301527f696c6520706175736564000000000000000000000000000000000000000000006020830152604082019050919050565b6143ac816148fe565b82525050565b6143bb81614908565b82525050565b60006020820190506143d66000830184613c58565b92915050565b60006020820190506143f16000830184613c3a565b92915050565b600060e08201905061440c600083018a613c58565b61441960208301896143a3565b61442660408301886143a3565b61443360608301876143a3565b61444060808301866143a3565b61444d60a0830185613cc5565b61445a60c0830184613cc5565b98975050505050505050565b600060208201905081810360008301526144808184613c67565b905092915050565b600060208201905061449d6000830184613cc5565b92915050565b600060208201905081810360008301526144bd8184613cd4565b905092915050565b600060208201905081810360008301526144de81613d0d565b9050919050565b600060208201905081810360008301526144fe81613d73565b9050919050565b6000602082019050818103600083015261451e81613db3565b9050919050565b6000602082019050818103600083015261453e81613df3565b9050919050565b6000602082019050818103600083015261455e81613e59565b9050919050565b6000602082019050818103600083015261457e81613ebf565b9050919050565b6000602082019050818103600083015261459e81613eff565b9050919050565b600060208201905081810360008301526145be81613f3f565b9050919050565b600060208201905081810360008301526145de81613f7f565b9050919050565b600060208201905081810360008301526145fe81613fbf565b9050919050565b6000602082019050818103600083015261461e81613fff565b9050919050565b6000602082019050818103600083015261463e8161403f565b9050919050565b6000602082019050818103600083015261465e816140a5565b9050919050565b6000602082019050818103600083015261467e816140e5565b9050919050565b6000602082019050818103600083015261469e8161414b565b9050919050565b600060208201905081810360008301526146be8161418b565b9050919050565b600060208201905081810360008301526146de816141f1565b9050919050565b600060208201905081810360008301526146fe81614257565b9050919050565b6000602082019050818103600083015261471e81614297565b9050919050565b6000602082019050818103600083015261473e816142d7565b9050919050565b6000602082019050818103600083015261475e8161433d565b9050919050565b600060208201905061477a60008301846143a3565b92915050565b600060a08201905061479560008301886143a3565b6147a260208301876143a3565b6147af60408301866143a3565b6147bc6060830185613cc5565b6147c96080830184613cc5565b9695505050505050565b60006020820190506147e860008301846143b2565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561481157600080fd5b8060405250919050565b600067ffffffffffffffff82111561483257600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561485a57600080fd5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006148cb826148de565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061492082614927565b9050919050565b600061493282614939565b9050919050565b6000614944826148de565b9050919050565b60005b8381101561496957808201518184015260208101905061494e565b83811115614978576000848401525b50505050565b6000601f19601f8301169050919050565b614998816148c0565b81146149a357600080fd5b50565b6149af816148d2565b81146149ba57600080fd5b50565b6149c6816148fe565b81146149d157600080fd5b5056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a2a878c6543403d2c347038af6ce703941ddb3098a35d9f10ffe2d68b8e7f44d64736f6c634300060b0033
Deployed Bytecode Sourcemap
32234:6854:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36671:651;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38874:211;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14563:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16669:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15638:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17320:321;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15490:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18050:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35938:112;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30179:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31194:169;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24744:78;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30598:515;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15801:119;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29141:148;;;:::i;:::-;;32471:53;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;32738:1033;;;:::i;:::-;;28499:79;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14765:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37330:225;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38259:389;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18771:269;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33779:1444;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16133:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38656:210;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37624:555;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16371:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32531:33;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;29444:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36671:651;36766:7;36791:32;;:::i;:::-;36826:13;:21;36840:6;36826:21;;;;;;;;;;;;;;;36791:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36858:14;36888:58;36898:12;:24;;;36924:12;:21;;;36888:9;:58::i;:::-;36858:88;;36957:33;37006:38;37037:6;37006:12;:26;;;:30;;:38;;;;:::i;:::-;36957:87;;37055:26;37097:57;37127:12;:26;;;37097:25;:29;;:57;;;;:::i;:::-;37055:99;;37208:12;:24;;;37187:18;:45;:127;;37296:18;37187:127;;;37252:12;:24;;;37187:127;37167:147;;;;;;36671:651;;;:::o;38874:211::-;28721:12;:10;:12::i;:::-;28711:22;;:6;;;;;;;;;;;:22;;;28703:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38936:6:::1;38932:146;;;38959:8;:6;:8::i;:::-;38987:7;;;;;;;;;;38932:146;;;39027:10;:8;:10::i;:::-;39057:9;;;;;;;;;;38932:146;38874:211:::0;:::o;14563:83::-;14600:13;14633:5;14626:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14563:83;:::o;16669:169::-;16752:4;16769:39;16778:12;:10;:12::i;:::-;16792:7;16801:6;16769:8;:39::i;:::-;16826:4;16819:11;;16669:169;;;;:::o;15638:100::-;15691:7;15718:12;;15711:19;;15638:100;:::o;17320:321::-;17426:4;17443:36;17453:6;17461:9;17472:6;17443:9;:36::i;:::-;17490:121;17499:6;17507:12;:10;:12::i;:::-;17521:89;17559:6;17521:89;;;;;;;;;;;;;;;;;:11;:19;17533:6;17521:19;;;;;;;;;;;;;;;:33;17541:12;:10;:12::i;:::-;17521:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;17490:8;:121::i;:::-;17629:4;17622:11;;17320:321;;;;;:::o;15490:83::-;15531:5;15556:9;;;;;;;;;;;15549:16;;15490:83;:::o;18050:218::-;18138:4;18155:83;18164:12;:10;:12::i;:::-;18178:7;18187:50;18226:10;18187:11;:25;18199:12;:10;:12::i;:::-;18187:25;;;;;;;;;;;;;;;:34;18213:7;18187:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;18155:8;:83::i;:::-;18256:4;18249:11;;18050:218;;;;:::o;35938:112::-;31408:17;31428:12;:10;:12::i;:::-;31408:32;;31451:17;31471:5;31451:25;;31494:9;31506:1;31494:13;;31489:204;31513:20;:27;;;;31509:1;:31;31489:204;;;31593:9;31566:36;;:20;31587:1;31566:23;;;;;;;;;;;;;;;;;;;;;;;;;:36;;;31562:120;;;31638:4;31623:19;;31661:5;;31562:120;31542:3;;;;;;;31489:204;;;;31713:12;31705:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;36020:22:::1;36026:7;36035:6;36020:5;:22::i;:::-;35938:112:::0;;;;:::o;30179:411::-;28721:12;:10;:12::i;:::-;28711:22;;:6;;;;;;;;;;;:22;;;28703:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30285:1:::1;30265:22;;:8;:22;;;;30257:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;30337:9;30349:1:::0;30337:13:::1;;30332:205;30356:20;:27;;;;30352:1;:31;30332:205;;;30458:8;30431:35;;:20;30452:1;30431:23;;;;;;;;;;;;;;;;;;;;;;;;;:35;;;;30405:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;30385:3;;;;;;;30332:205;;;;30547:20;30573:8;30547:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30179:411:::0;:::o;31194:169::-;31294:16;28721:12;:10;:12::i;:::-;28711:22;;:6;;;;;;;;;;;:22;;;28703:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31335:20:::1;31328:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31194:169:::0;:::o;24744:78::-;24783:4;24807:7;;;;;;;;;;;24800:14;;24744:78;:::o;30598:515::-;28721:12;:10;:12::i;:::-;28711:22;;:6;;;;;;;;;;;:22;;;28703:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30707:1:::1;30687:22;;:8;:22;;;;30679:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30762:9;30774:1:::0;30762:13:::1;;30757:349;30781:20;:27;;;;30777:1;:31;30757:349;;;30861:8;30834:35;;:20;30855:1;30834:23;;;;;;;;;;;;;;;;;;;;;;;;;:35;;;30830:265;;;30916:20;30989:1;30959:20;:27;;;;:31;30916:93;;;;;;;;;;;;;;;;;;;;;;;;;30890:20;30911:1;30890:23;;;;;;;;;;;;;;;;:119;;;;;;;;;;;;;;;;;;31028:20;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31073:7;;;30830:265;30810:3;;;;;;;30757:349;;;;28781:1;30598:515:::0;:::o;15801:119::-;15867:7;15894:9;:18;15904:7;15894:18;;;;;;;;;;;;;;;;15887:25;;15801:119;;;:::o;29141:148::-;28721:12;:10;:12::i;:::-;28711:22;;:6;;;;;;;;;;;:22;;;28703:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29248:1:::1;29211:40;;29232:6;;;;;;;;;;;29211:40;;;;;;;;;;;;29279:1;29262:6;;:19;;;;;;;;;;;;;;;;;;29141:148::o:0;32471:53::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32738:1033::-;1506:13;;;;;;;;;;;:33;;;;1523:16;:14;:16::i;:::-;1506:33;:50;;;;1544:12;;;;;;;;;;;1543:13;1506:50;1498:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;1620:19;1643:13;;;;;;;;;;;1642:14;1620:36;;1671:14;1667:101;;;1718:4;1702:13;;:20;;;;;;;;;;;;;;;;;;1752:4;1737:12;;:19;;;;;;;;;;;;;;;;;;1667:101;32792:16:::1;:14;:16::i;:::-;32819:22;:20;:22::i;:::-;32852:39;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;::::0;:12:::1;:39::i;:::-;32902:22;:20;:22::i;:::-;32937:73;32951:42;32996:13;32937:5;:73::i;:::-;33021;33035:42;33080:13;33021:5;:73::i;:::-;33107:12;33139:138;;;;;;;;33169:4;33139:138;;;;33192:4;33139:138;;;;33215:1;33139:138;;;;33235:4;33139:138;;;;;;33258:4;33139:138;;;;::::0;33107:181:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33361:12;33393:142;;;;;;;;33423:7;33393:142;;;;33449:5;33393:142;;;;33473:1;33393:142;;;;33493:4;33393:142;;;;;;33516:4;33393:142;;;;::::0;33361:185:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33619:12;33651:45;;;;;;;;33663:6;33651:45;;;;33671:1;33651:45;;;;33674:8;33651:45;;;;33684:5;33651:45;;;;;;33691:4;33651:45;;;;::::0;33619:88:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1798:14:::0;1794:68;;;1845:5;1829:13;;:21;;;;;;;;;;;;;;;;;;1794:68;32738:1033;:::o;28499:79::-;28537:7;28564:6;;;;;;;;;;;28557:13;;28499:79;:::o;14765:87::-;14804:13;14837:7;14830:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14765:87;:::o;37330:225::-;37394:7;37414:26;37443:29;37465:6;37443:21;:29::i;:::-;37414:58;;37490:57;37528:18;37490:13;:21;37504:6;37490:21;;;;;;;;;;;;;;;:33;;;:37;;:57;;;;:::i;:::-;37483:64;;;37330:225;;;:::o;38259:389::-;38362:7;38387:13;38403:11;:19;;38421:1;38403:19;;;38417:1;38403:19;38387:35;;;;38457:8;38439:15;:26;38435:67;;;38489:1;38482:8;;;;;38435:67;38514:12;38529:29;38549:8;38529:15;:19;;:29;;;;:::i;:::-;38514:44;;38569:14;38586:28;38608:5;38586:17;38595:7;38586:4;:8;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;38569:45;;38634:6;38627:13;;;;;38259:389;;;;;:::o;18771:269::-;18864:4;18881:129;18890:12;:10;:12::i;:::-;18904:7;18913:96;18952:15;18913:96;;;;;;;;;;;;;;;;;:11;:25;18925:12;:10;:12::i;:::-;18913:25;;;;;;;;;;;;;;;:34;18939:7;18913:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;18881:8;:129::i;:::-;19028:4;19021:11;;18771:269;;;;:::o;33779:1444::-;33950:4;28721:12;:10;:12::i;:::-;28711:22;;:6;;;;;;;;;;;:22;;;28703:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34009:12:::1;:19;33989:9;:16;:39;33967:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;34133:12;34146:16;34133:30;;;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;34111:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;34236:30;;:::i;:::-;34269:12;34282:16;34269:30;;;;;;;;;;;;;;;;;;34236:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;34310:23;34336:9;:16;34310:42;;34370:9;34382:1:::0;34370:13:::1;;34365:827;34389:15;34385:1;:19;34365:827;;;34426:16;34445:9;34455:1;34445:12;;;;;;;;;;;;;;34426:31;;34472:19;34494:12;34507:1;34494:15;;;;;;;;;;;;;;34472:37;;34524:21;34565:111;34636:21;34565:44;34585:11;:23;;;34565:12;34578:1;34565:15;;;;;;;;;;;;;;:19;;:44;;;;:::i;:::-;:48;;:111;;;;:::i;:::-;34524:152;;34691:21;34732:111;34803:21;34732:44;34752:11;:23;;;34732:12;34745:1;34732:15;;;;;;;;;;;;;;:19;;:44;;;;:::i;:::-;:48;;:111;;;;:::i;:::-;34691:152;;34858:16;34877:11;:21;;;34858:40;;34913:16;34932:11;:23;;;34913:42;;34972:208;35006:8;35033:11;35063:13;35095;35127:8;35154:11;34972:15;:208::i;:::-;34365:827;;;;;;34406:3;;;;;;;34365:827;;;;35211:4;35204:11;;;;33779:1444:::0;;;;;:::o;16133:175::-;16219:4;16236:42;16246:12;:10;:12::i;:::-;16260:9;16271:6;16236:9;:42::i;:::-;16296:4;16289:11;;16133:175;;;;:::o;38656:210::-;38714:4;32719:10;38735:15;:29;:59;;;;38786:8;38768:15;:26;38735:59;38731:104;;;38818:5;38811:12;;;;38731:104;38854:4;38847:11;;38656:210;;;;:::o;37624:555::-;37725:4;37792:13;:21;37806:6;37792:21;;;;;;;;;;;;;;;:31;;;;;;;;;;;;37787:76;;37847:4;37840:11;;;;37787:76;37875:15;37893:17;37903:6;37893:9;:17::i;:::-;37875:35;;37921:22;37946:25;37964:6;37946:17;:25::i;:::-;37921:50;;38003:41;38013:13;:21;38027:6;38013:21;;;;;;;;;;;;;;;:30;;;38003:9;:41::i;:::-;38002:42;:95;;;;38083:14;38061:19;38073:6;38061:7;:11;;:19;;;;:::i;:::-;:36;38002:95;37984:164;;;38131:5;38124:12;;;;;;37984:164;38167:4;38160:11;;;;37624:555;;;;;:::o;16371:151::-;16460:7;16487:11;:18;16499:5;16487:18;;;;;;;;;;;;;;;:27;16506:7;16487:27;;;;;;;;;;;;;;;;16480:34;;16371:151;;;;:::o;32531:33::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29444:244::-;28721:12;:10;:12::i;:::-;28711:22;;:6;;;;;;;;;;;:22;;;28703:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29553:1:::1;29533:22;;:8;:22;;;;29525:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29643:8;29614:38;;29635:6;;;;;;;;;;;29614:38;;;;;;;;;;;;29672:8;29663:6;;:17;;;;;;;;;;;;;;;;;;29444:244:::0;:::o;8983:471::-;9041:7;9291:1;9286;:6;9282:47;;;9316:1;9309:8;;;;9282:47;9341:9;9357:1;9353;:5;9341:17;;9386:1;9381;9377;:5;;;;;;:10;9369:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;9445:1;9438:8;;;8983:471;;;;;:::o;7629:181::-;7687:7;7707:9;7723:1;7719;:5;7707:17;;7748:1;7743;:6;;7735:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;7801:1;7794:8;;;7629:181;;;;:::o;3431:106::-;3484:15;3519:10;3512:17;;3431:106;:::o;25534:118::-;25062:7;;;;;;;;;;;25061:8;25053:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;25604:4:::1;25594:7;;:14;;;;;;;;;;;;;;;;;;25624:20;25631:12;:10;:12::i;:::-;25624:20;;;;;;:::i;:::-;;;;;;;;25534:118::o:0;25793:120::-;25338:7;;;;;;;;;;;25330:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;25862:5:::1;25852:7;;:15;;;;;;;;;;;;;;;;;;25883:22;25892:12;:10;:12::i;:::-;25883:22;;;;;;:::i;:::-;;;;;;;;25793:120::o:0;21918:346::-;22037:1;22020:19;;:5;:19;;;;22012:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22118:1;22099:21;;:7;:21;;;;22091:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22202:6;22172:11;:18;22184:5;22172:18;;;;;;;;;;;;;;;:27;22191:7;22172:27;;;;;;;;;;;;;;;:36;;;;22240:7;22224:32;;22233:5;22224:32;;;22249:6;22224:32;;;;;;:::i;:::-;;;;;;;;21918:346;;;:::o;19530:539::-;19654:1;19636:20;;:6;:20;;;;19628:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;19738:1;19717:23;;:9;:23;;;;19709:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;19793:47;19814:6;19822:9;19833:6;19793:20;:47::i;:::-;19873:71;19895:6;19873:71;;;;;;;;;;;;;;;;;:9;:17;19883:6;19873:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;19853:9;:17;19863:6;19853:17;;;;;;;;;;;;;;;:91;;;;19978:32;20003:6;19978:9;:20;19988:9;19978:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;19955:9;:20;19965:9;19955:20;;;;;;;;;;;;;;;:55;;;;20043:9;20026:35;;20035:6;20026:35;;;20054:6;20026:35;;;;;;:::i;:::-;;;;;;;;19530:539;;;:::o;8532:192::-;8618:7;8651:1;8646;:6;;8654:12;8638:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;8678:9;8694:1;8690;:5;8678:17;;8715:1;8708:8;;;8532:192;;;;;:::o;36058:290::-;36135:19;36157;:17;:19::i;:::-;36135:41;;36227:23;36243:6;36227:11;:15;;:23;;;;:::i;:::-;32640:9;36209:41;;36187:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;36312:28;36324:7;36333:6;36312:11;:28::i;:::-;36058:290;;;:::o;1962:604::-;2010:4;2381:12;2404:4;2381:28;;2420:10;2527:4;2515:17;2509:23;;2557:1;2551:2;:7;2544:14;;;;1962:604;:::o;28085:129::-;1506:13;;;;;;;;;;;:33;;;;1523:16;:14;:16::i;:::-;1506:33;:50;;;;1544:12;;;;;;;;;;;1543:13;1506:50;1498:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;1620:19;1643:13;;;;;;;;;;;1642:14;1620:36;;1671:14;1667:101;;;1718:4;1702:13;;:20;;;;;;;;;;;;;;;;;;1752:4;1737:12;;:19;;;;;;;;;;;;;;;;;;1667:101;28143:26:::1;:24;:26::i;:::-;28180;:24;:26::i;:::-;1798:14:::0;1794:68;;;1845:5;1829:13;;:21;;;;;;;;;;;;;;;;;;1794:68;28085:129;:::o;30073:98::-;1506:13;;;;;;;;;;;:33;;;;1523:16;:14;:16::i;:::-;1506:33;:50;;;;1544:12;;;;;;;;;;;1543:13;1506:50;1498:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;1620:19;1643:13;;;;;;;;;;;1642:14;1620:36;;1671:14;1667:101;;;1718:4;1702:13;;:20;;;;;;;;;;;;;;;;;;1752:4;1737:12;;:19;;;;;;;;;;;;;;;;;;1667:101;30137:26:::1;:24;:26::i;:::-;1798:14:::0;1794:68;;;1845:5;1829:13;;:21;;;;;;;;;;;;;;;;;;1794:68;30073:98;:::o;14122:181::-;1506:13;;;;;;;;;;;:33;;;;1523:16;:14;:16::i;:::-;1506:33;:50;;;;1544:12;;;;;;;;;;;1543:13;1506:50;1498:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;1620:19;1643:13;;;;;;;;;;;1642:14;1620:36;;1671:14;1667:101;;;1718:4;1702:13;;:20;;;;;;;;;;;;;;;;;;1752:4;1737:12;;:19;;;;;;;;;;;;;;;;;;1667:101;14220:26:::1;:24;:26::i;:::-;14257:38;14280:5;14287:7;14257:22;:38::i;:::-;1798:14:::0;1794:68;;;1845:5;1829:13;;:21;;;;;;;;;;;;;;;;;;1794:68;14122:181;;;:::o;26469:179::-;1506:13;;;;;;;;;;;:33;;;;1523:16;:14;:16::i;:::-;1506:33;:50;;;;1544:12;;;;;;;;;;;1543:13;1506:50;1498:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;1620:19;1643:13;;;;;;;;;;;1642:14;1620:36;;1671:14;1667:101;;;1718:4;1702:13;;:20;;;;;;;;;;;;;;;;;;1752:4;1737:12;;:19;;;;;;;;;;;;;;;;;;1667:101;26533:26:::1;:24;:26::i;:::-;26570:27;:25;:27::i;:::-;26608:32;:30;:32::i;:::-;1798:14:::0;1794:68;;;1845:5;1829:13;;:21;;;;;;;;;;;;;;;;;;1794:68;26469:179;:::o;8093:136::-;8151:7;8178:43;8182:1;8185;8178:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;8171:50;;8093:136;;;;:::o;9930:132::-;9988:7;10015:39;10019:1;10022;10015:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;10008:46;;9930:132;;;;:::o;35231:699::-;35462:13;:21;35476:6;35462:21;;;;;;;;;;;;;;;:31;;;;;;;;;;;;35457:466;;35510:26;35516:6;35524:11;35510:5;:26::i;:::-;35622:244;;;;;;;;35653:6;35622:244;;;;;;35678:11;35622:244;;;;35708:13;35622:244;;;;35740:13;35622:244;;;;35772:26;35788:9;32719:10;35772:15;;:26;;;;:::i;:::-;35622:244;;;;35817:11;35622:244;;;;;;35847:4;35622:244;;;;;35598:13;:21;35612:6;35598:21;;;;;;;;;;;;;;;:268;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35904:6;35888:23;;;;;;;;;;;;35457:466;35231:699;;;;;;:::o;36374:289::-;36534:27;36546:6;36554;36534:11;:27::i;:::-;36526:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;36602:53;36629:6;36637:9;36648:6;36602:26;:53::i;:::-;36374:289;;;:::o;20351:378::-;20454:1;20435:21;;:7;:21;;;;20427:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;20505:49;20534:1;20538:7;20547:6;20505:20;:49::i;:::-;20582:24;20599:6;20582:12;;:16;;:24;;;;:::i;:::-;20567:12;:39;;;;20638:30;20661:6;20638:9;:18;20648:7;20638:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;20617:9;:18;20627:7;20617:18;;;;;;;;;;;;;;;:51;;;;20705:7;20684:37;;20701:1;20684:37;;;20714:6;20684:37;;;;;;:::i;:::-;;;;;;;;20351:378;;:::o;3360:65::-;1506:13;;;;;;;;;;;:33;;;;1523:16;:14;:16::i;:::-;1506:33;:50;;;;1544:12;;;;;;;;;;;1543:13;1506:50;1498:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;1620:19;1643:13;;;;;;;;;;;1642:14;1620:36;;1671:14;1667:101;;;1718:4;1702:13;;:20;;;;;;;;;;;;;;;;;;1752:4;1737:12;;:19;;;;;;;;;;;;;;;;;;1667:101;1798:14;1794:68;;;1845:5;1829:13;;:21;;;;;;;;;;;;;;;;;;1794:68;3360:65;:::o;28222:196::-;1506:13;;;;;;;;;;;:33;;;;1523:16;:14;:16::i;:::-;1506:33;:50;;;;1544:12;;;;;;;;;;;1543:13;1506:50;1498:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;1620:19;1643:13;;;;;;;;;;;1642:14;1620:36;;1671:14;1667:101;;;1718:4;1702:13;;:20;;;;;;;;;;;;;;;;;;1752:4;1737:12;;:19;;;;;;;;;;;;;;;;;;1667:101;28290:17:::1;28310:12;:10;:12::i;:::-;28290:32;;28342:9;28333:6;;:18;;;;;;;;;;;;;;;;;;28400:9;28367:43;;28396:1;28367:43;;;;;;;;;;;;1780:1;1798:14:::0;1794:68;;;1845:5;1829:13;;:21;;;;;;;;;;;;;;;;;;1794:68;28222:196;:::o;14311:182::-;1506:13;;;;;;;;;;;:33;;;;1523:16;:14;:16::i;:::-;1506:33;:50;;;;1544:12;;;;;;;;;;;1543:13;1506:50;1498:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;1620:19;1643:13;;;;;;;;;;;1642:14;1620:36;;1671:14;1667:101;;;1718:4;1702:13;;:20;;;;;;;;;;;;;;;;;;1752:4;1737:12;;:19;;;;;;;;;;;;;;;;;;1667:101;14427:5:::1;14419;:13;;;;;;;;;;;;:::i;:::-;;14453:7;14443;:17;;;;;;;;;;;;:::i;:::-;;14483:2;14471:9;;:14;;;;;;;;;;;;;;;;;;1798::::0;1794:68;;;1845:5;1829:13;;:21;;;;;;;;;;;;;;;;;;1794:68;14311:182;;;:::o;24552:92::-;1506:13;;;;;;;;;;;:33;;;;1523:16;:14;:16::i;:::-;1506:33;:50;;;;1544:12;;;;;;;;;;;1543:13;1506:50;1498:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;1620:19;1643:13;;;;;;;;;;;1642:14;1620:36;;1671:14;1667:101;;;1718:4;1702:13;;:20;;;;;;;;;;;;;;;;;;1752:4;1737:12;;:19;;;;;;;;;;;;;;;;;;1667:101;24631:5:::1;24621:7;;:15;;;;;;;;;;;;;;;;;;1798:14:::0;1794:68;;;1845:5;1829:13;;:21;;;;;;;;;;;;;;;;;;1794:68;24552:92;:::o;26656:71::-;1506:13;;;;;;;;;;;:33;;;;1523:16;:14;:16::i;:::-;1506:33;:50;;;;1544:12;;;;;;;;;;;1543:13;1506:50;1498:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;1620:19;1643:13;;;;;;;;;;;1642:14;1620:36;;1671:14;1667:101;;;1718:4;1702:13;;:20;;;;;;;;;;;;;;;;;;1752:4;1737:12;;:19;;;;;;;;;;;;;;;;;;1667:101;1798:14;1794:68;;;1845:5;1829:13;;:21;;;;;;;;;;;;;;;;;;1794:68;26656:71;:::o;10558:278::-;10644:7;10676:1;10672;:5;10679:12;10664:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;10703:9;10719:1;10715;:5;;;;;;10703:17;;10827:1;10820:8;;;10558:278;;;;;:::o;26879:238::-;26988:44;27015:4;27021:2;27025:6;26988:26;:44::i;:::-;27054:8;:6;:8::i;:::-;27053:9;27045:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26879:238;;;:::o;23289:92::-;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5:130::-;;85:6;72:20;63:29;;97:33;124:5;97:33;:::i;:::-;57:78;;;;:::o;160:707::-;;277:3;270:4;262:6;258:17;254:27;244:2;;295:1;292;285:12;244:2;332:6;319:20;354:80;369:64;426:6;369:64;:::i;:::-;354:80;:::i;:::-;345:89;;451:5;476:6;469:5;462:21;506:4;498:6;494:17;484:27;;528:4;523:3;519:14;512:21;;581:6;628:3;620:4;612:6;608:17;603:3;599:27;596:36;593:2;;;645:1;642;635:12;593:2;670:1;655:206;680:6;677:1;674:13;655:206;;;738:3;760:37;793:3;781:10;760:37;:::i;:::-;755:3;748:50;821:4;816:3;812:14;805:21;;849:4;844:3;840:14;833:21;;712:149;702:1;699;695:9;690:14;;655:206;;;659:14;237:630;;;;;;;:::o;893:707::-;;1010:3;1003:4;995:6;991:17;987:27;977:2;;1028:1;1025;1018:12;977:2;1065:6;1052:20;1087:80;1102:64;1159:6;1102:64;:::i;:::-;1087:80;:::i;:::-;1078:89;;1184:5;1209:6;1202:5;1195:21;1239:4;1231:6;1227:17;1217:27;;1261:4;1256:3;1252:14;1245:21;;1314:6;1361:3;1353:4;1345:6;1341:17;1336:3;1332:27;1329:36;1326:2;;;1378:1;1375;1368:12;1326:2;1403:1;1388:206;1413:6;1410:1;1407:13;1388:206;;;1471:3;1493:37;1526:3;1514:10;1493:37;:::i;:::-;1488:3;1481:50;1554:4;1549:3;1545:14;1538:21;;1582:4;1577:3;1573:14;1566:21;;1445:149;1435:1;1432;1428:9;1423:14;;1388:206;;;1392:14;970:630;;;;;;;:::o;1608:124::-;;1685:6;1672:20;1663:29;;1697:30;1721:5;1697:30;:::i;:::-;1657:75;;;;:::o;1739:130::-;;1819:6;1806:20;1797:29;;1831:33;1858:5;1831:33;:::i;:::-;1791:78;;;;:::o;1876:241::-;;1980:2;1968:9;1959:7;1955:23;1951:32;1948:2;;;1996:1;1993;1986:12;1948:2;2031:1;2048:53;2093:7;2084:6;2073:9;2069:22;2048:53;:::i;:::-;2038:63;;2010:97;1942:175;;;;:::o;2124:366::-;;;2245:2;2233:9;2224:7;2220:23;2216:32;2213:2;;;2261:1;2258;2251:12;2213:2;2296:1;2313:53;2358:7;2349:6;2338:9;2334:22;2313:53;:::i;:::-;2303:63;;2275:97;2403:2;2421:53;2466:7;2457:6;2446:9;2442:22;2421:53;:::i;:::-;2411:63;;2382:98;2207:283;;;;;:::o;2497:491::-;;;;2635:2;2623:9;2614:7;2610:23;2606:32;2603:2;;;2651:1;2648;2641:12;2603:2;2686:1;2703:53;2748:7;2739:6;2728:9;2724:22;2703:53;:::i;:::-;2693:63;;2665:97;2793:2;2811:53;2856:7;2847:6;2836:9;2832:22;2811:53;:::i;:::-;2801:63;;2772:98;2901:2;2919:53;2964:7;2955:6;2944:9;2940:22;2919:53;:::i;:::-;2909:63;;2880:98;2597:391;;;;;:::o;2995:366::-;;;3116:2;3104:9;3095:7;3091:23;3087:32;3084:2;;;3132:1;3129;3122:12;3084:2;3167:1;3184:53;3229:7;3220:6;3209:9;3205:22;3184:53;:::i;:::-;3174:63;;3146:97;3274:2;3292:53;3337:7;3328:6;3317:9;3313:22;3292:53;:::i;:::-;3282:63;;3253:98;3078:283;;;;;:::o;3368:763::-;;;;3556:2;3544:9;3535:7;3531:23;3527:32;3524:2;;;3572:1;3569;3562:12;3524:2;3635:1;3624:9;3620:17;3607:31;3658:18;3650:6;3647:30;3644:2;;;3690:1;3687;3680:12;3644:2;3710:78;3780:7;3771:6;3760:9;3756:22;3710:78;:::i;:::-;3700:88;;3586:208;3853:2;3842:9;3838:18;3825:32;3877:18;3869:6;3866:30;3863:2;;;3909:1;3906;3899:12;3863:2;3929:78;3999:7;3990:6;3979:9;3975:22;3929:78;:::i;:::-;3919:88;;3804:209;4044:2;4062:53;4107:7;4098:6;4087:9;4083:22;4062:53;:::i;:::-;4052:63;;4023:98;3518:613;;;;;:::o;4138:235::-;;4239:2;4227:9;4218:7;4214:23;4210:32;4207:2;;;4255:1;4252;4245:12;4207:2;4290:1;4307:50;4349:7;4340:6;4329:9;4325:22;4307:50;:::i;:::-;4297:60;;4269:94;4201:172;;;;:::o;4380:360::-;;;4498:2;4486:9;4477:7;4473:23;4469:32;4466:2;;;4514:1;4511;4504:12;4466:2;4549:1;4566:50;4608:7;4599:6;4588:9;4584:22;4566:50;:::i;:::-;4556:60;;4528:94;4653:2;4671:53;4716:7;4707:6;4696:9;4692:22;4671:53;:::i;:::-;4661:63;;4632:98;4460:280;;;;;:::o;4747:241::-;;4851:2;4839:9;4830:7;4826:23;4822:32;4819:2;;;4867:1;4864;4857:12;4819:2;4902:1;4919:53;4964:7;4955:6;4944:9;4940:22;4919:53;:::i;:::-;4909:63;;4881:97;4813:175;;;;:::o;4996:173::-;;5083:46;5125:3;5117:6;5083:46;:::i;:::-;5158:4;5153:3;5149:14;5135:28;;5076:93;;;;:::o;5177:142::-;5268:45;5307:5;5268:45;:::i;:::-;5263:3;5256:58;5250:69;;:::o;5326:103::-;5399:24;5417:5;5399:24;:::i;:::-;5394:3;5387:37;5381:48;;:::o;5436:113::-;5519:24;5537:5;5519:24;:::i;:::-;5514:3;5507:37;5501:48;;:::o;5587:690::-;;5732:54;5780:5;5732:54;:::i;:::-;5799:86;5878:6;5873:3;5799:86;:::i;:::-;5792:93;;5906:56;5956:5;5906:56;:::i;:::-;5982:7;6010:1;5995:260;6020:6;6017:1;6014:13;5995:260;;;6087:6;6081:13;6108:63;6167:3;6152:13;6108:63;:::i;:::-;6101:70;;6188:60;6241:6;6188:60;:::i;:::-;6178:70;;6052:203;6042:1;6039;6035:9;6030:14;;5995:260;;;5999:14;6268:3;6261:10;;5711:566;;;;;;;:::o;6285:104::-;6362:21;6377:5;6362:21;:::i;:::-;6357:3;6350:34;6344:45;;:::o;6396:347::-;;6508:39;6541:5;6508:39;:::i;:::-;6559:71;6623:6;6618:3;6559:71;:::i;:::-;6552:78;;6635:52;6680:6;6675:3;6668:4;6661:5;6657:16;6635:52;:::i;:::-;6708:29;6730:6;6708:29;:::i;:::-;6703:3;6699:39;6692:46;;6488:255;;;;;:::o;6751:372::-;;6911:67;6975:2;6970:3;6911:67;:::i;:::-;6904:74;;7011:34;7007:1;7002:3;6998:11;6991:55;7080:5;7075:2;7070:3;7066:12;7059:27;7114:2;7109:3;7105:12;7098:19;;6897:226;;;:::o;7132:320::-;;7292:67;7356:2;7351:3;7292:67;:::i;:::-;7285:74;;7392:22;7388:1;7383:3;7379:11;7372:43;7443:2;7438:3;7434:12;7427:19;;7278:174;;;:::o;7461:321::-;;7621:67;7685:2;7680:3;7621:67;:::i;:::-;7614:74;;7721:23;7717:1;7712:3;7708:11;7701:44;7773:2;7768:3;7764:12;7757:19;;7607:175;;;:::o;7791:375::-;;7951:67;8015:2;8010:3;7951:67;:::i;:::-;7944:74;;8051:34;8047:1;8042:3;8038:11;8031:55;8120:8;8115:2;8110:3;8106:12;8099:30;8157:2;8152:3;8148:12;8141:19;;7937:229;;;:::o;8175:371::-;;8335:67;8399:2;8394:3;8335:67;:::i;:::-;8328:74;;8435:34;8431:1;8426:3;8422:11;8415:55;8504:4;8499:2;8494:3;8490:12;8483:26;8537:2;8532:3;8528:12;8521:19;;8321:225;;;:::o;8555:325::-;;8715:67;8779:2;8774:3;8715:67;:::i;:::-;8708:74;;8815:27;8811:1;8806:3;8802:11;8795:48;8871:2;8866:3;8862:12;8855:19;;8701:179;;;:::o;8889:327::-;;9049:67;9113:2;9108:3;9049:67;:::i;:::-;9042:74;;9149:29;9145:1;9140:3;9136:11;9129:50;9207:2;9202:3;9198:12;9191:19;;9035:181;;;:::o;9225:321::-;;9385:67;9449:2;9444:3;9385:67;:::i;:::-;9378:74;;9485:23;9481:1;9476:3;9472:11;9465:44;9537:2;9532:3;9528:12;9521:19;;9371:175;;;:::o;9555:332::-;;9715:67;9779:2;9774:3;9715:67;:::i;:::-;9708:74;;9815:34;9811:1;9806:3;9802:11;9795:55;9878:2;9873:3;9869:12;9862:19;;9701:186;;;:::o;9896:316::-;;10056:67;10120:2;10115:3;10056:67;:::i;:::-;10049:74;;10156:18;10152:1;10147:3;10143:11;10136:39;10203:2;10198:3;10194:12;10187:19;;10042:170;;;:::o;10221:324::-;;10381:67;10445:2;10440:3;10381:67;:::i;:::-;10374:74;;10481:26;10477:1;10472:3;10468:11;10461:47;10536:2;10531:3;10527:12;10520:19;;10367:178;;;:::o;10554:383::-;;10714:67;10778:2;10773:3;10714:67;:::i;:::-;10707:74;;10814:34;10810:1;10805:3;10801:11;10794:55;10883:16;10878:2;10873:3;10869:12;10862:38;10928:2;10923:3;10919:12;10912:19;;10700:237;;;:::o;10946:323::-;;11106:67;11170:2;11165:3;11106:67;:::i;:::-;11099:74;;11206:25;11202:1;11197:3;11193:11;11186:46;11260:2;11255:3;11251:12;11244:19;;11092:177;;;:::o;11278:370::-;;11438:67;11502:2;11497:3;11438:67;:::i;:::-;11431:74;;11538:34;11534:1;11529:3;11525:11;11518:55;11607:3;11602:2;11597:3;11593:12;11586:25;11639:2;11634:3;11630:12;11623:19;;11424:224;;;:::o;11657:332::-;;11817:67;11881:2;11876:3;11817:67;:::i;:::-;11810:74;;11917:34;11913:1;11908:3;11904:11;11897:55;11980:2;11975:3;11971:12;11964:19;;11803:186;;;:::o;11998:374::-;;12158:67;12222:2;12217:3;12158:67;:::i;:::-;12151:74;;12258:34;12254:1;12249:3;12245:11;12238:55;12327:7;12322:2;12317:3;12313:12;12306:29;12363:2;12358:3;12354:12;12347:19;;12144:228;;;:::o;12381:373::-;;12541:67;12605:2;12600:3;12541:67;:::i;:::-;12534:74;;12641:34;12637:1;12632:3;12628:11;12621:55;12710:6;12705:2;12700:3;12696:12;12689:28;12745:2;12740:3;12736:12;12729:19;;12527:227;;;:::o;12763:329::-;;12923:67;12987:2;12982:3;12923:67;:::i;:::-;12916:74;;13023:31;13019:1;13014:3;13010:11;13003:52;13083:2;13078:3;13074:12;13067:19;;12909:183;;;:::o;13101:331::-;;13261:67;13325:2;13320:3;13261:67;:::i;:::-;13254:74;;13361:33;13357:1;13352:3;13348:11;13341:54;13423:2;13418:3;13414:12;13407:19;;13247:185;;;:::o;13441:381::-;;13601:67;13665:2;13660:3;13601:67;:::i;:::-;13594:74;;13701:34;13697:1;13692:3;13688:11;13681:55;13770:14;13765:2;13760:3;13756:12;13749:36;13813:2;13808:3;13804:12;13797:19;;13587:235;;;:::o;13831:379::-;;13991:67;14055:2;14050:3;13991:67;:::i;:::-;13984:74;;14091:34;14087:1;14082:3;14078:11;14071:55;14160:12;14155:2;14150:3;14146:12;14139:34;14201:2;14196:3;14192:12;14185:19;;13977:233;;;:::o;14218:113::-;14301:24;14319:5;14301:24;:::i;:::-;14296:3;14289:37;14283:48;;:::o;14338:107::-;14417:22;14433:5;14417:22;:::i;:::-;14412:3;14405:35;14399:46;;:::o;14452:222::-;;14579:2;14568:9;14564:18;14556:26;;14593:71;14661:1;14650:9;14646:17;14637:6;14593:71;:::i;:::-;14550:124;;;;:::o;14681:238::-;;14816:2;14805:9;14801:18;14793:26;;14830:79;14906:1;14895:9;14891:17;14882:6;14830:79;:::i;:::-;14787:132;;;;:::o;14926:868::-;;15209:3;15198:9;15194:19;15186:27;;15224:71;15292:1;15281:9;15277:17;15268:6;15224:71;:::i;:::-;15306:72;15374:2;15363:9;15359:18;15350:6;15306:72;:::i;:::-;15389;15457:2;15446:9;15442:18;15433:6;15389:72;:::i;:::-;15472;15540:2;15529:9;15525:18;15516:6;15472:72;:::i;:::-;15555:73;15623:3;15612:9;15608:19;15599:6;15555:73;:::i;:::-;15639:67;15701:3;15690:9;15686:19;15677:6;15639:67;:::i;:::-;15717;15779:3;15768:9;15764:19;15755:6;15717:67;:::i;:::-;15180:614;;;;;;;;;;:::o;15801:370::-;;15978:2;15967:9;15963:18;15955:26;;16028:9;16022:4;16018:20;16014:1;16003:9;15999:17;15992:47;16053:108;16156:4;16147:6;16053:108;:::i;:::-;16045:116;;15949:222;;;;:::o;16178:210::-;;16299:2;16288:9;16284:18;16276:26;;16313:65;16375:1;16364:9;16360:17;16351:6;16313:65;:::i;:::-;16270:118;;;;:::o;16395:310::-;;16542:2;16531:9;16527:18;16519:26;;16592:9;16586:4;16582:20;16578:1;16567:9;16563:17;16556:47;16617:78;16690:4;16681:6;16617:78;:::i;:::-;16609:86;;16513:192;;;;:::o;16712:416::-;;16912:2;16901:9;16897:18;16889:26;;16962:9;16956:4;16952:20;16948:1;16937:9;16933:17;16926:47;16987:131;17113:4;16987:131;:::i;:::-;16979:139;;16883:245;;;:::o;17135:416::-;;17335:2;17324:9;17320:18;17312:26;;17385:9;17379:4;17375:20;17371:1;17360:9;17356:17;17349:47;17410:131;17536:4;17410:131;:::i;:::-;17402:139;;17306:245;;;:::o;17558:416::-;;17758:2;17747:9;17743:18;17735:26;;17808:9;17802:4;17798:20;17794:1;17783:9;17779:17;17772:47;17833:131;17959:4;17833:131;:::i;:::-;17825:139;;17729:245;;;:::o;17981:416::-;;18181:2;18170:9;18166:18;18158:26;;18231:9;18225:4;18221:20;18217:1;18206:9;18202:17;18195:47;18256:131;18382:4;18256:131;:::i;:::-;18248:139;;18152:245;;;:::o;18404:416::-;;18604:2;18593:9;18589:18;18581:26;;18654:9;18648:4;18644:20;18640:1;18629:9;18625:17;18618:47;18679:131;18805:4;18679:131;:::i;:::-;18671:139;;18575:245;;;:::o;18827:416::-;;19027:2;19016:9;19012:18;19004:26;;19077:9;19071:4;19067:20;19063:1;19052:9;19048:17;19041:47;19102:131;19228:4;19102:131;:::i;:::-;19094:139;;18998:245;;;:::o;19250:416::-;;19450:2;19439:9;19435:18;19427:26;;19500:9;19494:4;19490:20;19486:1;19475:9;19471:17;19464:47;19525:131;19651:4;19525:131;:::i;:::-;19517:139;;19421:245;;;:::o;19673:416::-;;19873:2;19862:9;19858:18;19850:26;;19923:9;19917:4;19913:20;19909:1;19898:9;19894:17;19887:47;19948:131;20074:4;19948:131;:::i;:::-;19940:139;;19844:245;;;:::o;20096:416::-;;20296:2;20285:9;20281:18;20273:26;;20346:9;20340:4;20336:20;20332:1;20321:9;20317:17;20310:47;20371:131;20497:4;20371:131;:::i;:::-;20363:139;;20267:245;;;:::o;20519:416::-;;20719:2;20708:9;20704:18;20696:26;;20769:9;20763:4;20759:20;20755:1;20744:9;20740:17;20733:47;20794:131;20920:4;20794:131;:::i;:::-;20786:139;;20690:245;;;:::o;20942:416::-;;21142:2;21131:9;21127:18;21119:26;;21192:9;21186:4;21182:20;21178:1;21167:9;21163:17;21156:47;21217:131;21343:4;21217:131;:::i;:::-;21209:139;;21113:245;;;:::o;21365:416::-;;21565:2;21554:9;21550:18;21542:26;;21615:9;21609:4;21605:20;21601:1;21590:9;21586:17;21579:47;21640:131;21766:4;21640:131;:::i;:::-;21632:139;;21536:245;;;:::o;21788:416::-;;21988:2;21977:9;21973:18;21965:26;;22038:9;22032:4;22028:20;22024:1;22013:9;22009:17;22002:47;22063:131;22189:4;22063:131;:::i;:::-;22055:139;;21959:245;;;:::o;22211:416::-;;22411:2;22400:9;22396:18;22388:26;;22461:9;22455:4;22451:20;22447:1;22436:9;22432:17;22425:47;22486:131;22612:4;22486:131;:::i;:::-;22478:139;;22382:245;;;:::o;22634:416::-;;22834:2;22823:9;22819:18;22811:26;;22884:9;22878:4;22874:20;22870:1;22859:9;22855:17;22848:47;22909:131;23035:4;22909:131;:::i;:::-;22901:139;;22805:245;;;:::o;23057:416::-;;23257:2;23246:9;23242:18;23234:26;;23307:9;23301:4;23297:20;23293:1;23282:9;23278:17;23271:47;23332:131;23458:4;23332:131;:::i;:::-;23324:139;;23228:245;;;:::o;23480:416::-;;23680:2;23669:9;23665:18;23657:26;;23730:9;23724:4;23720:20;23716:1;23705:9;23701:17;23694:47;23755:131;23881:4;23755:131;:::i;:::-;23747:139;;23651:245;;;:::o;23903:416::-;;24103:2;24092:9;24088:18;24080:26;;24153:9;24147:4;24143:20;24139:1;24128:9;24124:17;24117:47;24178:131;24304:4;24178:131;:::i;:::-;24170:139;;24074:245;;;:::o;24326:416::-;;24526:2;24515:9;24511:18;24503:26;;24576:9;24570:4;24566:20;24562:1;24551:9;24547:17;24540:47;24601:131;24727:4;24601:131;:::i;:::-;24593:139;;24497:245;;;:::o;24749:416::-;;24949:2;24938:9;24934:18;24926:26;;24999:9;24993:4;24989:20;24985:1;24974:9;24970:17;24963:47;25024:131;25150:4;25024:131;:::i;:::-;25016:139;;24920:245;;;:::o;25172:416::-;;25372:2;25361:9;25357:18;25349:26;;25422:9;25416:4;25412:20;25408:1;25397:9;25393:17;25386:47;25447:131;25573:4;25447:131;:::i;:::-;25439:139;;25343:245;;;:::o;25595:222::-;;25722:2;25711:9;25707:18;25699:26;;25736:71;25804:1;25793:9;25789:17;25780:6;25736:71;:::i;:::-;25693:124;;;;:::o;25824:644::-;;26051:3;26040:9;26036:19;26028:27;;26066:71;26134:1;26123:9;26119:17;26110:6;26066:71;:::i;:::-;26148:72;26216:2;26205:9;26201:18;26192:6;26148:72;:::i;:::-;26231;26299:2;26288:9;26284:18;26275:6;26231:72;:::i;:::-;26314:66;26376:2;26365:9;26361:18;26352:6;26314:66;:::i;:::-;26391:67;26453:3;26442:9;26438:19;26429:6;26391:67;:::i;:::-;26022:446;;;;;;;;:::o;26475:214::-;;26598:2;26587:9;26583:18;26575:26;;26612:67;26676:1;26665:9;26661:17;26652:6;26612:67;:::i;:::-;26569:120;;;;:::o;26696:256::-;;26758:2;26752:9;26742:19;;26796:4;26788:6;26784:17;26895:6;26883:10;26880:22;26859:18;26847:10;26844:34;26841:62;26838:2;;;26916:1;26913;26906:12;26838:2;26936:10;26932:2;26925:22;26736:216;;;;:::o;26959:304::-;;27118:18;27110:6;27107:30;27104:2;;;27150:1;27147;27140:12;27104:2;27185:4;27177:6;27173:17;27165:25;;27248:4;27242;27238:15;27230:23;;27041:222;;;:::o;27270:304::-;;27429:18;27421:6;27418:30;27415:2;;;27461:1;27458;27451:12;27415:2;27496:4;27488:6;27484:17;27476:25;;27559:4;27553;27549:15;27541:23;;27352:222;;;:::o;27581:151::-;;27667:3;27659:11;;27705:4;27700:3;27696:14;27688:22;;27653:79;;;:::o;27739:137::-;;27848:5;27842:12;27832:22;;27813:63;;;:::o;27883:122::-;;27977:5;27971:12;27961:22;;27942:63;;;:::o;28012:108::-;;28110:4;28105:3;28101:14;28093:22;;28087:33;;;:::o;28128:178::-;;28258:6;28253:3;28246:19;28295:4;28290:3;28286:14;28271:29;;28239:67;;;;:::o;28315:163::-;;28430:6;28425:3;28418:19;28467:4;28462:3;28458:14;28443:29;;28411:67;;;;:::o;28486:91::-;;28548:24;28566:5;28548:24;:::i;:::-;28537:35;;28531:46;;;:::o;28584:85::-;;28657:5;28650:13;28643:21;28632:32;;28626:43;;;:::o;28676:121::-;;28749:42;28742:5;28738:54;28727:65;;28721:76;;;:::o;28804:72::-;;28866:5;28855:16;;28849:27;;;:::o;28883:81::-;;28954:4;28947:5;28943:16;28932:27;;28926:38;;;:::o;28971:129::-;;29058:37;29089:5;29058:37;:::i;:::-;29045:50;;29039:61;;;:::o;29107:121::-;;29186:37;29217:5;29186:37;:::i;:::-;29173:50;;29167:61;;;:::o;29235:108::-;;29314:24;29332:5;29314:24;:::i;:::-;29301:37;;29295:48;;;:::o;29351:268::-;29416:1;29423:101;29437:6;29434:1;29431:13;29423:101;;;29513:1;29508:3;29504:11;29498:18;29494:1;29489:3;29485:11;29478:39;29459:2;29456:1;29452:10;29447:15;;29423:101;;;29539:6;29536:1;29533:13;29530:2;;;29604:1;29595:6;29590:3;29586:16;29579:27;29530:2;29400:219;;;;:::o;29627:97::-;;29715:2;29711:7;29706:2;29699:5;29695:14;29691:28;29681:38;;29675:49;;;:::o;29732:117::-;29801:24;29819:5;29801:24;:::i;:::-;29794:5;29791:35;29781:2;;29840:1;29837;29830:12;29781:2;29775:74;:::o;29856:111::-;29922:21;29937:5;29922:21;:::i;:::-;29915:5;29912:32;29902:2;;29958:1;29955;29948:12;29902:2;29896:71;:::o;29974:117::-;30043:24;30061:5;30043:24;:::i;:::-;30036:5;30033:35;30023:2;;30082:1;30079;30072:12;30023:2;30017:74;:::o
Swarm Source
ipfs://a2a878c6543403d2c347038af6ce703941ddb3098a35d9f10ffe2d68b8e7f44d
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 25 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.