Polygon Sponsored slots available. Book your slot here!
Overview ERC-20
Price
$0.00 @ 0.000347 MATIC
Fully Diluted Market Cap
Total Supply:
1,564,907.951342 ECHO
Holders:
7,362 addresses
Transfers:
-
Contract:
Decimals:
18
Official Site:
[ Download CSV Export ]
[ Download CSV Export ]
OVERVIEW
Echelon is a decentralized autonomous organization (DAO) that is governed by smart contracts, fixed protocols and community votes.Market
Volume (24H) | : | $0.00 |
Market Capitalization | : | $0.00 |
Circulating Supply | : | 0.00 ECHO |
Market Data Source: Coinmarketcap |
Update? Click here to update the token ICO / general information
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
EchelonDAO
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-19 */ pragma solidity 0.8.7; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override 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 this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } 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] + 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) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This 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); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(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: * * - `account` 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 += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(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) public virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(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 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 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 {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been 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 _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SignedSafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SignedSafeMath { /** * @dev Returns the multiplication of two signed integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(int256 a, int256 b) internal pure returns (int256) { return a * b; } /** * @dev Returns the integer division of two signed integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(int256 a, int256 b) internal pure returns (int256) { return a / b; } /** * @dev Returns the subtraction of two signed integers, reverting on * overflow. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(int256 a, int256 b) internal pure returns (int256) { return a - b; } /** * @dev Returns the addition of two signed integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(int256 a, int256 b) internal pure returns (int256) { return a + b; } } // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } /** * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow * checks. * * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can * easily result in undesired exploitation or bugs, since developers usually * assume that overflows raise errors. `SafeCast` restores this intuition by * reverting the transaction when such 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. * * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing * all math on `uint256` and `int256` and then downcasting. */ library SafeCast { /** * @dev Returns the downcasted uint224 from uint256, reverting on * overflow (when the input is greater than largest uint224). * * Counterpart to Solidity's `uint224` operator. * * Requirements: * * - input must fit into 224 bits */ function toUint224(uint256 value) internal pure returns (uint224) { require(value <= type(uint224).max, "SafeCast: value doesn't fit in 224 bits"); return uint224(value); } /** * @dev Returns the downcasted uint128 from uint256, reverting on * overflow (when the input is greater than largest uint128). * * Counterpart to Solidity's `uint128` operator. * * Requirements: * * - input must fit into 128 bits */ function toUint128(uint256 value) internal pure returns (uint128) { require(value <= type(uint128).max, "SafeCast: value doesn't fit in 128 bits"); return uint128(value); } /** * @dev Returns the downcasted uint96 from uint256, reverting on * overflow (when the input is greater than largest uint96). * * Counterpart to Solidity's `uint96` operator. * * Requirements: * * - input must fit into 96 bits */ function toUint96(uint256 value) internal pure returns (uint96) { require(value <= type(uint96).max, "SafeCast: value doesn't fit in 96 bits"); return uint96(value); } /** * @dev Returns the downcasted uint64 from uint256, reverting on * overflow (when the input is greater than largest uint64). * * Counterpart to Solidity's `uint64` operator. * * Requirements: * * - input must fit into 64 bits */ function toUint64(uint256 value) internal pure returns (uint64) { require(value <= type(uint64).max, "SafeCast: value doesn't fit in 64 bits"); return uint64(value); } /** * @dev Returns the downcasted uint32 from uint256, reverting on * overflow (when the input is greater than largest uint32). * * Counterpart to Solidity's `uint32` operator. * * Requirements: * * - input must fit into 32 bits */ function toUint32(uint256 value) internal pure returns (uint32) { require(value <= type(uint32).max, "SafeCast: value doesn't fit in 32 bits"); return uint32(value); } /** * @dev Returns the downcasted uint16 from uint256, reverting on * overflow (when the input is greater than largest uint16). * * Counterpart to Solidity's `uint16` operator. * * Requirements: * * - input must fit into 16 bits */ function toUint16(uint256 value) internal pure returns (uint16) { require(value <= type(uint16).max, "SafeCast: value doesn't fit in 16 bits"); return uint16(value); } /** * @dev Returns the downcasted uint8 from uint256, reverting on * overflow (when the input is greater than largest uint8). * * Counterpart to Solidity's `uint8` operator. * * Requirements: * * - input must fit into 8 bits. */ function toUint8(uint256 value) internal pure returns (uint8) { require(value <= type(uint8).max, "SafeCast: value doesn't fit in 8 bits"); return uint8(value); } /** * @dev Converts a signed int256 into an unsigned uint256. * * Requirements: * * - input must be greater than or equal to 0. */ function toUint256(int256 value) internal pure returns (uint256) { require(value >= 0, "SafeCast: value must be positive"); return uint256(value); } /** * @dev Returns the downcasted int128 from int256, reverting on * overflow (when the input is less than smallest int128 or * greater than largest int128). * * Counterpart to Solidity's `int128` operator. * * Requirements: * * - input must fit into 128 bits * * _Available since v3.1._ */ function toInt128(int256 value) internal pure returns (int128) { require(value >= type(int128).min && value <= type(int128).max, "SafeCast: value doesn't fit in 128 bits"); return int128(value); } /** * @dev Returns the downcasted int64 from int256, reverting on * overflow (when the input is less than smallest int64 or * greater than largest int64). * * Counterpart to Solidity's `int64` operator. * * Requirements: * * - input must fit into 64 bits * * _Available since v3.1._ */ function toInt64(int256 value) internal pure returns (int64) { require(value >= type(int64).min && value <= type(int64).max, "SafeCast: value doesn't fit in 64 bits"); return int64(value); } /** * @dev Returns the downcasted int32 from int256, reverting on * overflow (when the input is less than smallest int32 or * greater than largest int32). * * Counterpart to Solidity's `int32` operator. * * Requirements: * * - input must fit into 32 bits * * _Available since v3.1._ */ function toInt32(int256 value) internal pure returns (int32) { require(value >= type(int32).min && value <= type(int32).max, "SafeCast: value doesn't fit in 32 bits"); return int32(value); } /** * @dev Returns the downcasted int16 from int256, reverting on * overflow (when the input is less than smallest int16 or * greater than largest int16). * * Counterpart to Solidity's `int16` operator. * * Requirements: * * - input must fit into 16 bits * * _Available since v3.1._ */ function toInt16(int256 value) internal pure returns (int16) { require(value >= type(int16).min && value <= type(int16).max, "SafeCast: value doesn't fit in 16 bits"); return int16(value); } /** * @dev Returns the downcasted int8 from int256, reverting on * overflow (when the input is less than smallest int8 or * greater than largest int8). * * Counterpart to Solidity's `int8` operator. * * Requirements: * * - input must fit into 8 bits. * * _Available since v3.1._ */ function toInt8(int256 value) internal pure returns (int8) { require(value >= type(int8).min && value <= type(int8).max, "SafeCast: value doesn't fit in 8 bits"); return int8(value); } /** * @dev Converts an unsigned uint256 into a signed int256. * * Requirements: * * - input must be less than or equal to maxInt256. */ function toInt256(uint256 value) internal pure returns (int256) { // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive require(value <= uint256(type(int256).max), "SafeCast: value doesn't fit in an int256"); return int256(value); } } contract EchelonDAO is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public uniswapV2Router; address public immutable uniswapV2Pair; bool private inSwap; bool public swapEnabled = true; // uint256 public maxSellTransactionAmount = 2100000 * (10**18); // uint256 public maxBuyTransactionAmount = 2100000 * (10**18); uint256 public swapTokensAtAmount = 3500 * (10**18); uint256 public BuyFee; uint256 public SellFee; uint256 public TransferFee; address payable public ECHELONWallet; address payable public BuyBackWallet; address payable public DAOWallet; // exlcude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; mapping(address => bool) private _isExcludedFromMaxTx; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping (address => bool) public automatedMarketMakerPairs; event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress); event ExcludeFromFees(address indexed account, bool isExcluded); event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event GasForProcessingUpdated(uint256 indexed newValue, uint256 indexed oldValue); event SwapEnabledUpdated(bool enabled); event swapTokens( uint256 tokensIntoLiqudity, uint256 ethReceived ); modifier lockTheSwap { inSwap = true; _; inSwap = false; } function setAllFees(uint256 _BuyFee, uint256 _SellFee, uint256 _TransferFee) public onlyOwner { require(_BuyFee <16); require(_SellFee <16); require(_TransferFee <16); BuyFee = _BuyFee; SellFee = _SellFee; TransferFee = _TransferFee; } // function setMaxSellTx(uint256 _maxSellTxAmount) public onlyOwner { // maxSellTransactionAmount = _maxSellTxAmount * (10**18); // } function setSwapTokensAtAmount(uint256 _newAmount) public onlyOwner { swapTokensAtAmount = _newAmount * (10**18); } // function setMaxBuyTx(uint256 _maxBuyTxAmount) public onlyOwner { // maxBuyTransactionAmount = _maxBuyTxAmount * (10**18); // } function setFeeAddresses(address payable AddE,address payable AddBB,address payable AddD) public onlyOwner{ ECHELONWallet = payable(AddE); BuyBackWallet = payable(AddBB); DAOWallet = payable(AddD); } constructor() ERC20("Echelon DAO", "ECHO") { BuyFee = 3; SellFee = 3; TransferFee = 3; ECHELONWallet = payable(0xbEB667695A799D6cD5d50EA2E261E14535DD73b9); BuyBackWallet = payable(0xD29ff50Bd08f2bB8387D33944Df130B59a5C1A0a); DAOWallet = payable(0x262e1a7E62DbB9321DcAa1f1e13A77b4dA0F411D); IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff); // Create a uniswap pair for this new token address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; _setAutomatedMarketMakerPair(_uniswapV2Pair, true); // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(ECHELONWallet, true); excludeFromFees(BuyBackWallet, true); excludeFromFees(DAOWallet, true); excludeFromFees(address(this), true); // exclude from max tx _isExcludedFromMaxTx[owner()] = true; _isExcludedFromMaxTx[address(this)] = true; _isExcludedFromMaxTx[ECHELONWallet] = true; _isExcludedFromMaxTx[BuyBackWallet] = true; _isExcludedFromMaxTx[DAOWallet] = true; /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(owner(), 2100000 * (10**18)); } receive() external payable { } function updateUniswapV2Router(address newAddress) public onlyOwner { require(newAddress != address(uniswapV2Router), "TFT: The router already has that address"); emit UpdateUniswapV2Router(newAddress, address(uniswapV2Router)); uniswapV2Router = IUniswapV2Router02(newAddress); } function excludeFromFees(address account, bool excluded) public onlyOwner { require(_isExcludedFromFees[account] != excluded, "TFT: Account is already the value of 'excluded'"); _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function setExcludeFromMaxTx(address _address, bool value) public onlyOwner { _isExcludedFromMaxTx[_address] = value; } function setExcludeFromAll(address _address) public onlyOwner { _isExcludedFromMaxTx[_address] = true; _isExcludedFromFees[_address] = true; } function excludeMultipleAccountsFromFees(address[] calldata accounts, bool excluded) public onlyOwner { for(uint256 i = 0; i < accounts.length; i++) { _isExcludedFromFees[accounts[i]] = excluded; } emit ExcludeMultipleAccountsFromFees(accounts, excluded); } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "TFT: The PancakeSwap pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { require(automatedMarketMakerPairs[pair] != value, "TFT: Automated market maker pair is already set to that value"); automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } function isExcludedFromMaxTx(address account) public view returns(bool) { return _isExcludedFromMaxTx[account]; } function setSwapEnabled(bool _enabled) public onlyOwner { swapEnabled = _enabled; emit SwapEnabledUpdated(_enabled); } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if(amount == 0) { super._transfer(from, to, 0); return; } // if(automatedMarketMakerPairs[from] && (!_isExcludedFromMaxTx[from]) && (!_isExcludedFromMaxTx[to])){ // require(amount <= maxBuyTransactionAmount, "amount exceeds the maxBuyTransactionAmount."); // } // if(automatedMarketMakerPairs[to] && (!_isExcludedFromMaxTx[from]) && (!_isExcludedFromMaxTx[to])){ // require(amount <= maxSellTransactionAmount, "amount exceeds the maxSellTransactionAmount."); // } uint256 contractTokenBalance = balanceOf(address(this)); bool overMinTokenBalance = contractTokenBalance >= swapTokensAtAmount; if( overMinTokenBalance && !inSwap && !automatedMarketMakerPairs[from] && swapEnabled ) { swapAndSendToWallets(contractTokenBalance); } // if any account belongs to _isExcludedFromFee account then remove the fee if(!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) { uint256 BuyTax = (amount*BuyFee)/100; uint256 SellTax = (amount*SellFee)/100; uint256 TransferTax = (amount*TransferFee)/100; if(automatedMarketMakerPairs[to]) { amount = amount-SellTax; super._transfer(from, address(this), SellTax); } else if(automatedMarketMakerPairs[from]) { amount = amount-BuyTax; super._transfer(from, address(this), BuyTax); } else { amount = amount-TransferTax; super._transfer(from, address(this), TransferTax); } } super._transfer(from, to, amount); } function swapAndSendToWallets(uint256 contractTokenBalance) private lockTheSwap { uint256 initialBalance = address(this).balance; // swap tokens for Polygon swapTokensForPolygon(contractTokenBalance, address(this)); uint256 deltaBalance = address(this).balance-initialBalance; uint256 ECHELONWalletShare = deltaBalance.div(3); uint256 BuyBackWalletShare = deltaBalance.div(3); uint256 DAOWalletShare = deltaBalance.sub(ECHELONWalletShare).sub(BuyBackWalletShare); // send Polygon to wallets ECHELONWallet.transfer(ECHELONWalletShare); BuyBackWallet.transfer(BuyBackWalletShare); DAOWallet.transfer(DAOWalletShare); emit swapTokens(contractTokenBalance, deltaBalance); } function swapTokensForPolygon(uint256 tokenAmount, address _to) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); if(allowance(address(this), address(uniswapV2Router)) < tokenAmount) { _approve(address(this), address(uniswapV2Router), ~uint256(0)); } // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, _to, block.timestamp ); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"GasForProcessingUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapEnabledUpdated","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":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"swapTokens","type":"event"},{"inputs":[],"name":"BuyBackWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DAOWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ECHELONWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TransferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"_burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_BuyFee","type":"uint256"},{"internalType":"uint256","name":"_SellFee","type":"uint256"},{"internalType":"uint256","name":"_TransferFee","type":"uint256"}],"name":"setAllFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setExcludeFromAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setExcludeFromMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"AddE","type":"address"},{"internalType":"address payable","name":"AddBB","type":"address"},{"internalType":"address payable","name":"AddD","type":"address"}],"name":"setFeeAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a06040526001600660156101000a81548160ff02191690831515021790555068bdbc41e0348b3000006007553480156200003957600080fd5b506040518060400160405280600b81526020017f456368656c6f6e2044414f0000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4543484f000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000be92919062000d05565b508060049080519060200190620000d792919062000d05565b505050620000fa620000ee6200078360201b60201c565b6200078b60201b60201c565b600360088190555060036009819055506003600a8190555073beb667695a799d6cd5d50ea2e261e14535dd73b9600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d29ff50bd08f2bb8387d33944df130b59a5c1a0a600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073262e1a7e62dbb9321dcaa1f1e13a77b4da0f411d600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073a5e0829caced8ffdd4de3c43696c57f7d7a678ff905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200027357600080fd5b505afa15801562000288573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ae919062000dcc565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200031157600080fd5b505afa15801562000326573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034c919062000dcc565b6040518363ffffffff1660e01b81526004016200036b92919062000ecd565b602060405180830381600087803b1580156200038657600080fd5b505af11580156200039b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c1919062000dcc565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250506200044e8160016200085160201b60201c565b62000470620004626200098860201b60201c565b6001620009b260201b60201c565b620004a5600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620009b260201b60201c565b620004da600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620009b260201b60201c565b6200050f600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620009b260201b60201c565b62000522306001620009b260201b60201c565b6001600f6000620005386200098860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200077b620007636200098860201b60201c565b6a01bcb13a657b263880000062000b8260201b60201c565b505062001217565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415620008e7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008de9062000f39565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620009c26200078360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620009e86200098860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000a41576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a389062000f5b565b60405180910390fd5b801515600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141562000ad7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ace9062000f17565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000b76919062000efa565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000bf5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bec9062000f7d565b60405180910390fd5b62000c096000838362000cfb60201b60201c565b806002600082825462000c1d919062000fcd565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000c74919062000fcd565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000cdb919062000f9f565b60405180910390a362000cf76000838362000d0060201b60201c565b5050565b505050565b505050565b82805462000d139062001074565b90600052602060002090601f01602090048101928262000d37576000855562000d83565b82601f1062000d5257805160ff191683800117855562000d83565b8280016001018555821562000d83579182015b8281111562000d8257825182559160200191906001019062000d65565b5b50905062000d92919062000d96565b5090565b5b8082111562000db157600081600090555060010162000d97565b5090565b60008151905062000dc681620011fd565b92915050565b60006020828403121562000de55762000de462001108565b5b600062000df58482850162000db5565b91505092915050565b62000e09816200102a565b82525050565b62000e1a816200103e565b82525050565b600062000e2f602f8362000fbc565b915062000e3c826200110d565b604082019050919050565b600062000e56603d8362000fbc565b915062000e63826200115c565b604082019050919050565b600062000e7d60208362000fbc565b915062000e8a82620011ab565b602082019050919050565b600062000ea4601f8362000fbc565b915062000eb182620011d4565b602082019050919050565b62000ec7816200106a565b82525050565b600060408201905062000ee4600083018562000dfe565b62000ef3602083018462000dfe565b9392505050565b600060208201905062000f11600083018462000e0f565b92915050565b6000602082019050818103600083015262000f328162000e20565b9050919050565b6000602082019050818103600083015262000f548162000e47565b9050919050565b6000602082019050818103600083015262000f768162000e6e565b9050919050565b6000602082019050818103600083015262000f988162000e95565b9050919050565b600060208201905062000fb6600083018462000ebc565b92915050565b600082825260208201905092915050565b600062000fda826200106a565b915062000fe7836200106a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200101f576200101e620010aa565b5b828201905092915050565b600062001037826200104a565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060028204905060018216806200108d57607f821691505b60208210811415620010a457620010a3620010d9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b7f5446543a204163636f756e7420697320616c7265616479207468652076616c7560008201527f65206f6620276578636c75646564270000000000000000000000000000000000602082015250565b7f5446543a204175746f6d61746564206d61726b6574206d616b6572207061697260008201527f20697320616c72656164792073657420746f20746861742076616c7565000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b62001208816200102a565b81146200121457600080fd5b50565b60805160601c6141356200123d60003960008181610ce3015261149501526141356000f3fe6080604052600436106102295760003560e01c80638c6cecdf11610123578063c0246668116100ab578063dd8546521161006f578063dd8546521461084c578063dfdb5ae414610877578063e01af92c146108a2578063e2f45605146108cb578063f2fde38b146108f657610230565b8063c024666814610769578063c492f04614610792578063cb01a4bf146107bb578063cf9522fd146107e4578063dd62ed3e1461080f57610230565b8063a457c2d7116100f2578063a457c2d714610660578063a9059cbb1461069d578063aa1ef598146106da578063afa4f3b214610703578063b62496f51461072c57610230565b80638c6cecdf146105b65780638da5cb5b146105e157806395d89b411461060c5780639a7a23d61461063757610230565b806349bd5a5e116101b157806365b8dbc01161017557806365b8dbc0146104e35780636ddd17131461050c5780636e94312d1461053757806370a0823114610562578063715018a61461059f57610230565b806349bd5a5e146103ec5780634fbee193146104175780635b89029c146104545780636161eb181461047d578063658c27a9146104a657610230565b806318160ddd116101f857806318160ddd146102f357806323b872dd1461031e578063313ce5671461035b578063395093511461038657806349928a50146103c357610230565b80630306c1971461023557806306fdde0314610260578063095ea7b31461028b5780631694505e146102c857610230565b3661023057005b600080fd5b34801561024157600080fd5b5061024a61091f565b604051610257919061373f565b60405180910390f35b34801561026c57600080fd5b50610275610925565b604051610282919061353d565b60405180910390f35b34801561029757600080fd5b506102b260048036038101906102ad9190612fc1565b6109b7565b6040516102bf9190613507565b60405180910390f35b3480156102d457600080fd5b506102dd6109d5565b6040516102ea9190613522565b60405180910390f35b3480156102ff57600080fd5b506103086109fb565b604051610315919061373f565b60405180910390f35b34801561032a57600080fd5b5061034560048036038101906103409190612f2e565b610a05565b6040516103529190613507565b60405180910390f35b34801561036757600080fd5b50610370610afd565b60405161037d91906137dd565b60405180910390f35b34801561039257600080fd5b506103ad60048036038101906103a89190612fc1565b610b06565b6040516103ba9190613507565b60405180910390f35b3480156103cf57600080fd5b506103ea60048036038101906103e59190612e41565b610bb2565b005b3480156103f857600080fd5b50610401610ce1565b60405161040e919061349f565b60405180910390f35b34801561042357600080fd5b5061043e60048036038101906104399190612e41565b610d05565b60405161044b9190613507565b60405180910390f35b34801561046057600080fd5b5061047b60048036038101906104769190612f81565b610d5b565b005b34801561048957600080fd5b506104a4600480360381019061049f9190612fc1565b610e32565b005b3480156104b257600080fd5b506104cd60048036038101906104c89190612e41565b611009565b6040516104da9190613507565b60405180910390f35b3480156104ef57600080fd5b5061050a60048036038101906105059190612e41565b61105f565b005b34801561051857600080fd5b5061052161122c565b60405161052e9190613507565b60405180910390f35b34801561054357600080fd5b5061054c61123f565b60405161055991906134ba565b60405180910390f35b34801561056e57600080fd5b5061058960048036038101906105849190612e41565b611265565b604051610596919061373f565b60405180910390f35b3480156105ab57600080fd5b506105b46112ad565b005b3480156105c257600080fd5b506105cb611335565b6040516105d891906134ba565b60405180910390f35b3480156105ed57600080fd5b506105f661135b565b604051610603919061349f565b60405180910390f35b34801561061857600080fd5b50610621611385565b60405161062e919061353d565b60405180910390f35b34801561064357600080fd5b5061065e60048036038101906106599190612f81565b611417565b005b34801561066c57600080fd5b5061068760048036038101906106829190612fc1565b611530565b6040516106949190613507565b60405180910390f35b3480156106a957600080fd5b506106c460048036038101906106bf9190612fc1565b61161b565b6040516106d19190613507565b60405180910390f35b3480156106e657600080fd5b5061070160048036038101906106fc9190612e9b565b611639565b005b34801561070f57600080fd5b5061072a6004803603810190610725919061308e565b61177d565b005b34801561073857600080fd5b50610753600480360381019061074e9190612e41565b611816565b6040516107609190613507565b60405180910390f35b34801561077557600080fd5b50610790600480360381019061078b9190612f81565b611836565b005b34801561079e57600080fd5b506107b960048036038101906107b49190613001565b6119ee565b005b3480156107c757600080fd5b506107e260048036038101906107dd91906130bb565b611b4a565b005b3480156107f057600080fd5b506107f9611c07565b604051610806919061373f565b60405180910390f35b34801561081b57600080fd5b5061083660048036038101906108319190612eee565b611c0d565b604051610843919061373f565b60405180910390f35b34801561085857600080fd5b50610861611c94565b60405161086e919061373f565b60405180910390f35b34801561088357600080fd5b5061088c611c9a565b60405161089991906134ba565b60405180910390f35b3480156108ae57600080fd5b506108c960048036038101906108c49190613061565b611cc0565b005b3480156108d757600080fd5b506108e0611d90565b6040516108ed919061373f565b60405180910390f35b34801561090257600080fd5b5061091d60048036038101906109189190612e41565b611d96565b005b600a5481565b60606003805461093490613a72565b80601f016020809104026020016040519081016040528092919081815260200182805461096090613a72565b80156109ad5780601f10610982576101008083540402835291602001916109ad565b820191906000526020600020905b81548152906001019060200180831161099057829003601f168201915b5050505050905090565b60006109cb6109c4611e8e565b8484611e96565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b6000610a12848484612061565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a5d611e8e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610add576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad49061365f565b60405180910390fd5b610af185610ae9611e8e565b858403611e96565b60019150509392505050565b60006012905090565b6000610ba8610b13611e8e565b848460016000610b21611e8e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ba3919061387b565b611e96565b6001905092915050565b610bba611e8e565b73ffffffffffffffffffffffffffffffffffffffff16610bd861135b565b73ffffffffffffffffffffffffffffffffffffffff1614610c2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c259061367f565b60405180910390fd5b6001600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610d63611e8e565b73ffffffffffffffffffffffffffffffffffffffff16610d8161135b565b73ffffffffffffffffffffffffffffffffffffffff1614610dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dce9061367f565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e999061369f565b60405180910390fd5b610eae8260008361241e565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610f34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2b9061357f565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254610f8b919061395c565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ff0919061373f565b60405180910390a361100483600084612423565b505050565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611067611e8e565b73ffffffffffffffffffffffffffffffffffffffff1661108561135b565b73ffffffffffffffffffffffffffffffffffffffff16146110db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d29061367f565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561116c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611163906135ff565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e60405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600660159054906101000a900460ff1681565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112b5611e8e565b73ffffffffffffffffffffffffffffffffffffffff166112d361135b565b73ffffffffffffffffffffffffffffffffffffffff1614611329576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113209061367f565b60405180910390fd5b6113336000612428565b565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461139490613a72565b80601f01602080910402602001604051908101604052809291908181526020018280546113c090613a72565b801561140d5780601f106113e25761010080835404028352916020019161140d565b820191906000526020600020905b8154815290600101906020018083116113f057829003601f168201915b5050505050905090565b61141f611e8e565b73ffffffffffffffffffffffffffffffffffffffff1661143d61135b565b73ffffffffffffffffffffffffffffffffffffffff1614611493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148a9061367f565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611522576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115199061371f565b60405180910390fd5b61152c82826124ee565b5050565b6000806001600061153f611e8e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156115fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f3906136ff565b60405180910390fd5b611610611607611e8e565b85858403611e96565b600191505092915050565b600061162f611628611e8e565b8484612061565b6001905092915050565b611641611e8e565b73ffffffffffffffffffffffffffffffffffffffff1661165f61135b565b73ffffffffffffffffffffffffffffffffffffffff16146116b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ac9061367f565b60405180910390fd5b82600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b611785611e8e565b73ffffffffffffffffffffffffffffffffffffffff166117a361135b565b73ffffffffffffffffffffffffffffffffffffffff16146117f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f09061367f565b60405180910390fd5b670de0b6b3a76400008161180d9190613902565b60078190555050565b60106020528060005260406000206000915054906101000a900460ff1681565b61183e611e8e565b73ffffffffffffffffffffffffffffffffffffffff1661185c61135b565b73ffffffffffffffffffffffffffffffffffffffff16146118b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a99061367f565b60405180910390fd5b801515600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415611945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193c9061359f565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516119e29190613507565b60405180910390a25050565b6119f6611e8e565b73ffffffffffffffffffffffffffffffffffffffff16611a1461135b565b73ffffffffffffffffffffffffffffffffffffffff1614611a6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a619061367f565b60405180910390fd5b60005b83839050811015611b095781600e6000868685818110611a9057611a8f613b7a565b5b9050602002016020810190611aa59190612e41565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611b0190613aa4565b915050611a6d565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b35838383604051611b3d939291906134d5565b60405180910390a1505050565b611b52611e8e565b73ffffffffffffffffffffffffffffffffffffffff16611b7061135b565b73ffffffffffffffffffffffffffffffffffffffff1614611bc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbd9061367f565b60405180910390fd5b60108310611bd357600080fd5b60108210611be057600080fd5b60108110611bed57600080fd5b826008819055508160098190555080600a81905550505050565b60095481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611cc8611e8e565b73ffffffffffffffffffffffffffffffffffffffff16611ce661135b565b73ffffffffffffffffffffffffffffffffffffffff1614611d3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d339061367f565b60405180910390fd5b80600660156101000a81548160ff0219169083151502179055507f436b6cf978c7b6998fcce43dfe4d37e3a0dc2bb780144a2eb55d7138201e8a1281604051611d859190613507565b60405180910390a150565b60075481565b611d9e611e8e565b73ffffffffffffffffffffffffffffffffffffffff16611dbc61135b565b73ffffffffffffffffffffffffffffffffffffffff1614611e12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e099061367f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e79906135bf565b60405180910390fd5b611e8b81612428565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efd906136df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6d906135df565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612054919061373f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c8906136bf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612141576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121389061355f565b60405180910390fd5b600081141561215b5761215683836000612622565b612419565b600061216630611265565b90506000600754821015905080801561218c5750600660149054906101000a900460ff16155b80156121e25750601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156121fa5750600660159054906101000a900460ff165b1561220957612208826128a3565b5b600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156122ad5750600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561240b5760006064600854856122c49190613902565b6122ce91906138d1565b905060006064600954866122e29190613902565b6122ec91906138d1565b905060006064600a54876123009190613902565b61230a91906138d1565b9050601060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561237c57818661236a919061395c565b9550612377883084612622565b612407565b601060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156123ec5782866123da919061395c565b95506123e7883085612622565b612406565b80866123f8919061395c565b9550612405883083612622565b5b5b5050505b612416858585612622565b50505b505050565b505050565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415612581576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125789061363f565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612692576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612689906136bf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612702576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f99061355f565b60405180910390fd5b61270d83838361241e565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278a9061361f565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612826919061387b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161288a919061373f565b60405180910390a361289d848484612423565b50505050565b6001600660146101000a81548160ff02191690831515021790555060004790506128cd8230612acd565b600081476128db919061395c565b905060006128f3600383612d5690919063ffffffff16565b9050600061290b600384612d5690919063ffffffff16565b90506000612934826129268587612d6c90919063ffffffff16565b612d6c90919063ffffffff16565b9050600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f1935050505015801561299e573d6000803e3d6000fd5b50600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015612a07573d6000803e3d6000fd5b50600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612a70573d6000803e3d6000fd5b507f88ab076fb0b42da7e38a991a11ff7a6496277aad8dc5001b0311ab53176e5e2e8685604051612aa29291906137b4565b60405180910390a150505050506000600660146101000a81548160ff02191690831515021790555050565b6000600267ffffffffffffffff811115612aea57612ae9613ba9565b5b604051908082528060200260200182016040528015612b185781602001602082028036833780820191505090505b5090503081600081518110612b3057612b2f613b7a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612bd257600080fd5b505afa158015612be6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c0a9190612e6e565b81600181518110612c1e57612c1d613b7a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505082612c8530600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611c0d565b1015612cbb57612cba30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600019611e96565b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008486426040518663ffffffff1660e01b8152600401612d1f95949392919061375a565b600060405180830381600087803b158015612d3957600080fd5b505af1158015612d4d573d6000803e3d6000fd5b50505050505050565b60008183612d6491906138d1565b905092915050565b60008183612d7a919061395c565b905092915050565b600081359050612d91816140a3565b92915050565b600081519050612da6816140a3565b92915050565b600081359050612dbb816140ba565b92915050565b60008083601f840112612dd757612dd6613bdd565b5b8235905067ffffffffffffffff811115612df457612df3613bd8565b5b602083019150836020820283011115612e1057612e0f613be2565b5b9250929050565b600081359050612e26816140d1565b92915050565b600081359050612e3b816140e8565b92915050565b600060208284031215612e5757612e56613bec565b5b6000612e6584828501612d82565b91505092915050565b600060208284031215612e8457612e83613bec565b5b6000612e9284828501612d97565b91505092915050565b600080600060608486031215612eb457612eb3613bec565b5b6000612ec286828701612dac565b9350506020612ed386828701612dac565b9250506040612ee486828701612dac565b9150509250925092565b60008060408385031215612f0557612f04613bec565b5b6000612f1385828601612d82565b9250506020612f2485828601612d82565b9150509250929050565b600080600060608486031215612f4757612f46613bec565b5b6000612f5586828701612d82565b9350506020612f6686828701612d82565b9250506040612f7786828701612e2c565b9150509250925092565b60008060408385031215612f9857612f97613bec565b5b6000612fa685828601612d82565b9250506020612fb785828601612e17565b9150509250929050565b60008060408385031215612fd857612fd7613bec565b5b6000612fe685828601612d82565b9250506020612ff785828601612e2c565b9150509250929050565b60008060006040848603121561301a57613019613bec565b5b600084013567ffffffffffffffff81111561303857613037613be7565b5b61304486828701612dc1565b9350935050602061305786828701612e17565b9150509250925092565b60006020828403121561307757613076613bec565b5b600061308584828501612e17565b91505092915050565b6000602082840312156130a4576130a3613bec565b5b60006130b284828501612e2c565b91505092915050565b6000806000606084860312156130d4576130d3613bec565b5b60006130e286828701612e2c565b93505060206130f386828701612e2c565b925050604061310486828701612e2c565b9150509250925092565b600061311a8383613135565b60208301905092915050565b61312f816139a2565b82525050565b61313e81613990565b82525050565b61314d81613990565b82525050565b600061315f8385613842565b935061316a826137f8565b8060005b858110156131a3576131808284613864565b61318a888261310e565b975061319583613828565b92505060018101905061316e565b5085925050509392505050565b60006131bb82613812565b6131c58185613842565b93506131d083613802565b8060005b838110156132015781516131e8888261310e565b97506131f383613835565b9250506001810190506131d4565b5085935050505092915050565b613217816139b4565b82525050565b613226816139f7565b82525050565b61323581613a09565b82525050565b60006132468261381d565b6132508185613853565b9350613260818560208601613a3f565b61326981613bf1565b840191505092915050565b6000613281602383613853565b915061328c82613c02565b604082019050919050565b60006132a4602283613853565b91506132af82613c51565b604082019050919050565b60006132c7602f83613853565b91506132d282613ca0565b604082019050919050565b60006132ea602683613853565b91506132f582613cef565b604082019050919050565b600061330d602283613853565b915061331882613d3e565b604082019050919050565b6000613330602883613853565b915061333b82613d8d565b604082019050919050565b6000613353602683613853565b915061335e82613ddc565b604082019050919050565b6000613376603d83613853565b915061338182613e2b565b604082019050919050565b6000613399602883613853565b91506133a482613e7a565b604082019050919050565b60006133bc602083613853565b91506133c782613ec9565b602082019050919050565b60006133df602183613853565b91506133ea82613ef2565b604082019050919050565b6000613402602583613853565b915061340d82613f41565b604082019050919050565b6000613425602483613853565b915061343082613f90565b604082019050919050565b6000613448602583613853565b915061345382613fdf565b604082019050919050565b600061346b604a83613853565b91506134768261402e565b606082019050919050565b61348a816139e0565b82525050565b613499816139ea565b82525050565b60006020820190506134b46000830184613144565b92915050565b60006020820190506134cf6000830184613126565b92915050565b600060408201905081810360008301526134f0818587613153565b90506134ff602083018461320e565b949350505050565b600060208201905061351c600083018461320e565b92915050565b6000602082019050613537600083018461321d565b92915050565b60006020820190508181036000830152613557818461323b565b905092915050565b6000602082019050818103600083015261357881613274565b9050919050565b6000602082019050818103600083015261359881613297565b9050919050565b600060208201905081810360008301526135b8816132ba565b9050919050565b600060208201905081810360008301526135d8816132dd565b9050919050565b600060208201905081810360008301526135f881613300565b9050919050565b6000602082019050818103600083015261361881613323565b9050919050565b6000602082019050818103600083015261363881613346565b9050919050565b6000602082019050818103600083015261365881613369565b9050919050565b600060208201905081810360008301526136788161338c565b9050919050565b60006020820190508181036000830152613698816133af565b9050919050565b600060208201905081810360008301526136b8816133d2565b9050919050565b600060208201905081810360008301526136d8816133f5565b9050919050565b600060208201905081810360008301526136f881613418565b9050919050565b600060208201905081810360008301526137188161343b565b9050919050565b600060208201905081810360008301526137388161345e565b9050919050565b60006020820190506137546000830184613481565b92915050565b600060a08201905061376f6000830188613481565b61377c602083018761322c565b818103604083015261378e81866131b0565b905061379d6060830185613144565b6137aa6080830184613481565b9695505050505050565b60006040820190506137c96000830185613481565b6137d66020830184613481565b9392505050565b60006020820190506137f26000830184613490565b92915050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006138736020840184612d82565b905092915050565b6000613886826139e0565b9150613891836139e0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156138c6576138c5613aed565b5b828201905092915050565b60006138dc826139e0565b91506138e7836139e0565b9250826138f7576138f6613b1c565b5b828204905092915050565b600061390d826139e0565b9150613918836139e0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561395157613950613aed565b5b828202905092915050565b6000613967826139e0565b9150613972836139e0565b92508282101561398557613984613aed565b5b828203905092915050565b600061399b826139c0565b9050919050565b60006139ad826139c0565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000613a0282613a1b565b9050919050565b6000613a14826139e0565b9050919050565b6000613a2682613a2d565b9050919050565b6000613a38826139c0565b9050919050565b60005b83811015613a5d578082015181840152602081019050613a42565b83811115613a6c576000848401525b50505050565b60006002820490506001821680613a8a57607f821691505b60208210811415613a9e57613a9d613b4b565b5b50919050565b6000613aaf826139e0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613ae257613ae1613aed565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f5446543a204163636f756e7420697320616c7265616479207468652076616c7560008201527f65206f6620276578636c75646564270000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f5446543a2054686520726f7574657220616c726561647920686173207468617460008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f5446543a204175746f6d61746564206d61726b6574206d616b6572207061697260008201527f20697320616c72656164792073657420746f20746861742076616c7565000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f5446543a205468652050616e63616b655377617020706169722063616e6e6f7460008201527f2062652072656d6f7665642066726f6d206175746f6d617465644d61726b657460208201527f4d616b6572506169727300000000000000000000000000000000000000000000604082015250565b6140ac81613990565b81146140b757600080fd5b50565b6140c3816139a2565b81146140ce57600080fd5b50565b6140da816139b4565b81146140e557600080fd5b50565b6140f1816139e0565b81146140fc57600080fd5b5056fea2646970667358221220af840c8cc006a598e76fbe87f6f81082ea7f71c822aa41c1863052d31cb19e3164736f6c63430008070033
Deployed ByteCode Sourcemap
39666:10411:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40164:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5537:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7704:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39746:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6657:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8355:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6499:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9256:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44863:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39794:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45942:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44721:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12629:589;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46079:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44094:312;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39869:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40243:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6828:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17057:94;;;;;;;;;;;;;:::i;:::-;;40199:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16406:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5756:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45348:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9974:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7168:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42150:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41854:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40659:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44414:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45036:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41389:294;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40135:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7406:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40107:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40287:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46214:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40047:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17306:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40164:26;;;;:::o;5537:100::-;5591:13;5624:5;5617:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5537:100;:::o;7704:169::-;7787:4;7804:39;7813:12;:10;:12::i;:::-;7827:7;7836:6;7804:8;:39::i;:::-;7861:4;7854:11;;7704:169;;;;:::o;39746:41::-;;;;;;;;;;;;;:::o;6657:108::-;6718:7;6745:12;;6738:19;;6657:108;:::o;8355:492::-;8495:4;8512:36;8522:6;8530:9;8541:6;8512:9;:36::i;:::-;8561:24;8588:11;:19;8600:6;8588:19;;;;;;;;;;;;;;;:33;8608:12;:10;:12::i;:::-;8588:33;;;;;;;;;;;;;;;;8561:60;;8660:6;8640:16;:26;;8632:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;8747:57;8756:6;8764:12;:10;:12::i;:::-;8797:6;8778:16;:25;8747:8;:57::i;:::-;8835:4;8828:11;;;8355:492;;;;;:::o;6499:93::-;6557:5;6582:2;6575:9;;6499:93;:::o;9256:215::-;9344:4;9361:80;9370:12;:10;:12::i;:::-;9384:7;9430:10;9393:11;:25;9405:12;:10;:12::i;:::-;9393:25;;;;;;;;;;;;;;;:34;9419:7;9393:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;9361:8;:80::i;:::-;9459:4;9452:11;;9256:215;;;;:::o;44863:165::-;16637:12;:10;:12::i;:::-;16626:23;;:7;:5;:7::i;:::-;:23;;;16618:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44969:4:::1;44936:20;:30;44957:8;44936:30;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;45016:4;44984:19;:29;45004:8;44984:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;44863:165:::0;:::o;39794:38::-;;;:::o;45942:125::-;46007:4;46031:19;:28;46051:7;46031:28;;;;;;;;;;;;;;;;;;;;;;;;;46024:35;;45942:125;;;:::o;44721:134::-;16637:12;:10;:12::i;:::-;16626:23;;:7;:5;:7::i;:::-;:23;;;16618:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44842:5:::1;44809:20;:30;44830:8;44809:30;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;44721:134:::0;;:::o;12629:589::-;12730:1;12711:21;;:7;:21;;;;12703:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;12783:49;12804:7;12821:1;12825:6;12783:20;:49::i;:::-;12845:22;12870:9;:18;12880:7;12870:18;;;;;;;;;;;;;;;;12845:43;;12925:6;12907:14;:24;;12899:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13044:6;13027:14;:23;13006:9;:18;13016:7;13006:18;;;;;;;;;;;;;;;:44;;;;13088:6;13072:12;;:22;;;;;;;:::i;:::-;;;;;;;;13138:1;13112:37;;13121:7;13112:37;;;13142:6;13112:37;;;;;;:::i;:::-;;;;;;;;13162:48;13182:7;13199:1;13203:6;13162:19;:48::i;:::-;12692:526;12629:589;;:::o;46079:127::-;46145:4;46169:20;:29;46190:7;46169:29;;;;;;;;;;;;;;;;;;;;;;;;;46162:36;;46079:127;;;:::o;44094:312::-;16637:12;:10;:12::i;:::-;16626:23;;:7;:5;:7::i;:::-;:23;;;16618:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44203:15:::1;;;;;;;;;;;44181:38;;:10;:38;;;;44173:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;44322:15;;;;;;;;;;;44280:59;;44302:10;44280:59;;;;;;;;;;;;44387:10;44350:15;;:48;;;;;;;;;;;;;;;;;;44094:312:::0;:::o;39869:30::-;;;;;;;;;;;;;:::o;40243:37::-;;;;;;;;;;;;;:::o;6828:127::-;6902:7;6929:9;:18;6939:7;6929:18;;;;;;;;;;;;;;;;6922:25;;6828:127;;;:::o;17057:94::-;16637:12;:10;:12::i;:::-;16626:23;;:7;:5;:7::i;:::-;:23;;;16618:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17122:21:::1;17140:1;17122:9;:21::i;:::-;17057:94::o:0;40199:37::-;;;;;;;;;;;;;:::o;16406:87::-;16452:7;16479:6;;;;;;;;;;;16472:13;;16406:87;:::o;5756:104::-;5812:13;5845:7;5838:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5756:104;:::o;45348:261::-;16637:12;:10;:12::i;:::-;16626:23;;:7;:5;:7::i;:::-;:23;;;16618:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45455:13:::1;45447:21;;:4;:21;;;;45439:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;45560:41;45589:4;45595:5;45560:28;:41::i;:::-;45348:261:::0;;:::o;9974:413::-;10067:4;10084:24;10111:11;:25;10123:12;:10;:12::i;:::-;10111:25;;;;;;;;;;;;;;;:34;10137:7;10111:34;;;;;;;;;;;;;;;;10084:61;;10184:15;10164:16;:35;;10156:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10277:67;10286:12;:10;:12::i;:::-;10300:7;10328:15;10309:16;:34;10277:8;:67::i;:::-;10375:4;10368:11;;;9974:413;;;;:::o;7168:175::-;7254:4;7271:42;7281:12;:10;:12::i;:::-;7295:9;7306:6;7271:9;:42::i;:::-;7331:4;7324:11;;7168:175;;;;:::o;42150:261::-;16637:12;:10;:12::i;:::-;16626:23;;:7;:5;:7::i;:::-;:23;;;16618:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42301:4:::1;42277:13;;:29;;;;;;;;;;;;;;;;;;42341:5;42317:13;;:30;;;;;;;;;;;;;;;;;;42378:4;42358:9;;:25;;;;;;;;;;;;;;;;;;42150:261:::0;;;:::o;41854:129::-;16637:12;:10;:12::i;:::-;16626:23;;:7;:5;:7::i;:::-;:23;;;16618:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41968:6:::1;41954:10;:21;;;;:::i;:::-;41933:18;:42;;;;41854:129:::0;:::o;40659:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;44414:295::-;16637:12;:10;:12::i;:::-;16626:23;;:7;:5;:7::i;:::-;:23;;;16618:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44539:8:::1;44507:40;;:19;:28;44527:7;44507:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;;44499:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;44641:8;44610:19;:28;44630:7;44610:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;44683:7;44667:34;;;44692:8;44667:34;;;;;;:::i;:::-;;;;;;;;44414:295:::0;;:::o;45036:304::-;16637:12;:10;:12::i;:::-;16626:23;;:7;:5;:7::i;:::-;:23;;;16618:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45153:9:::1;45149:115;45172:8;;:15;;45168:1;:19;45149:115;;;45244:8;45209:19;:32;45229:8;;45238:1;45229:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;45209:32;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;45189:3;;;;;:::i;:::-;;;;45149:115;;;;45281:51;45313:8;;45323;45281:51;;;;;;;;:::i;:::-;;;;;;;;45036:304:::0;;;:::o;41389:294::-;16637:12;:10;:12::i;:::-;16626:23;;:7;:5;:7::i;:::-;:23;;;16618:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41511:2:::1;41502:7;:11;41494:20;;;::::0;::::1;;41543:2;41533:8;:12;41525:21;;;::::0;::::1;;41579:2;41565:12;:16;41557:25;;;::::0;::::1;;41602:7;41593:6;:16;;;;41630:8;41620:7;:18;;;;41663:12;41649:11;:26;;;;41389:294:::0;;;:::o;40135:22::-;;;;:::o;7406:151::-;7495:7;7522:11;:18;7534:5;7522:18;;;;;;;;;;;;;;;:27;7541:7;7522:27;;;;;;;;;;;;;;;;7515:34;;7406:151;;;;:::o;40107:21::-;;;;:::o;40287:33::-;;;;;;;;;;;;;:::o;46214:141::-;16637:12;:10;:12::i;:::-;16626:23;;:7;:5;:7::i;:::-;:23;;;16618:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46295:8:::1;46281:11;;:22;;;;;;;;;;;;;;;;;;46319:28;46338:8;46319:28;;;;;;:::i;:::-;;;;;;;;46214:141:::0;:::o;40047:51::-;;;;:::o;17306:192::-;16637:12;:10;:12::i;:::-;16626:23;;:7;:5;:7::i;:::-;:23;;;16618:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17415:1:::1;17395:22;;:8;:22;;;;17387:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;17471:19;17481:8;17471:9;:19::i;:::-;17306:192:::0;:::o;63:98::-;116:7;143:10;136:17;;63:98;:::o;13656:380::-;13809:1;13792:19;;:5;:19;;;;13784:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13890:1;13871:21;;:7;:21;;;;13863:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13974:6;13944:11;:18;13956:5;13944:18;;;;;;;;;;;;;;;:27;13963:7;13944:27;;;;;;;;;;;;;;;:36;;;;14012:7;13996:32;;14005:5;13996:32;;;14021:6;13996:32;;;;;;:::i;:::-;;;;;;;;13656:380;;;:::o;46363:2174::-;46511:1;46495:18;;:4;:18;;;;46487:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46588:1;46574:16;;:2;:16;;;;46566:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;46656:1;46646:6;:11;46643:92;;;46674:28;46690:4;46696:2;46700:1;46674:15;:28::i;:::-;46717:7;;46643:92;47234:28;47265:24;47283:4;47265:9;:24::i;:::-;47234:55;;47310:24;47361:18;;47337:20;:42;;47310:69;;47416:19;:43;;;;;47453:6;;;;;;;;;;;47452:7;47416:43;:92;;;;;47477:25;:31;47503:4;47477:31;;;;;;;;;;;;;;;;;;;;;;;;;47476:32;47416:92;:121;;;;;47526:11;;;;;;;;;;;47416:121;47399:219;;;47564:42;47585:20;47564;:42::i;:::-;47399:219;47720:19;:25;47740:4;47720:25;;;;;;;;;;;;;;;;;;;;;;;;;47719:26;:54;;;;;47750:19;:23;47770:2;47750:23;;;;;;;;;;;;;;;;;;;;;;;;;47749:24;47719:54;47716:766;;;47787:14;47820:3;47812:6;;47805;:13;;;;:::i;:::-;47804:19;;;;:::i;:::-;47787:36;;47835:15;47870:3;47861:7;;47854:6;:14;;;;:::i;:::-;47853:20;;;;:::i;:::-;47835:38;;47885:19;47928:3;47915:11;;47908:6;:18;;;;:::i;:::-;47907:24;;;;:::i;:::-;47885:46;;47951:25;:29;47977:2;47951:29;;;;;;;;;;;;;;;;;;;;;;;;;47948:509;;;48017:7;48010:6;:14;;;;:::i;:::-;48001:23;;48043:45;48059:4;48073;48080:7;48043:15;:45::i;:::-;47948:509;;;48141:25;:31;48167:4;48141:31;;;;;;;;;;;;;;;;;;;;;;;;;48138:319;;;48209:6;48202;:13;;;;:::i;:::-;48193:22;;48234:44;48250:4;48264;48271:6;48234:15;:44::i;:::-;48138:319;;;48362:11;48355:6;:18;;;;:::i;:::-;48346:27;;48392:49;48408:4;48422;48429:11;48392:15;:49::i;:::-;48138:319;47948:509;47775:707;;;47716:766;48494:33;48510:4;48516:2;48520:6;48494:15;:33::i;:::-;46476:2061;;46363:2174;;;;:::o;14636:125::-;;;;:::o;15365:124::-;;;;:::o;17506:173::-;17562:16;17581:6;;;;;;;;;;;17562:25;;17607:8;17598:6;;:17;;;;;;;;;;;;;;;;;;17662:8;17631:40;;17652:8;17631:40;;;;;;;;;;;;17551:128;17506:173;:::o;45617:313::-;45743:5;45708:40;;:25;:31;45734:4;45708:31;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;;45700:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;45859:5;45825:25;:31;45851:4;45825:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;45916:5;45882:40;;45910:4;45882:40;;;;;;;;;;;;45617:313;;:::o;10877:733::-;11035:1;11017:20;;:6;:20;;;;11009:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11119:1;11098:23;;:9;:23;;;;11090:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11174:47;11195:6;11203:9;11214:6;11174:20;:47::i;:::-;11234:21;11258:9;:17;11268:6;11258:17;;;;;;;;;;;;;;;;11234:41;;11311:6;11294:13;:23;;11286:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;11432:6;11416:13;:22;11396:9;:17;11406:6;11396:17;;;;;;;;;;;;;;;:42;;;;11484:6;11460:9;:20;11470:9;11460:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;11525:9;11508:35;;11517:6;11508:35;;;11536:6;11508:35;;;;;;:::i;:::-;;;;;;;;11556:46;11576:6;11584:9;11595:6;11556:19;:46::i;:::-;10998:612;10877:733;;;:::o;48545:808::-;41332:4;41323:6;;:13;;;;;;;;;;;;;;;;;;48636:22:::1;48661:21;48636:46;;48731:57;48752:20;48782:4;48731:20;:57::i;:::-;48801:20;48846:14;48824:21;:36;;;;:::i;:::-;48801:59;;48881:26;48910:19;48927:1;48910:12;:16;;:19;;;;:::i;:::-;48881:48;;48940:26;48969:19;48986:1;48969:12;:16;;:19;;;;:::i;:::-;48940:48;;48999:22;49024:60;49065:18;49024:36;49041:18;49024:12;:16;;:36;;;;:::i;:::-;:40;;:60;;;;:::i;:::-;48999:85;;49133:13;;;;;;;;;;;:22;;:42;49156:18;49133:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;49186:13;;;;;;;;;;;:22;;:42;49209:18;49186:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;49239:9;;;;;;;;;;;:18;;:34;49258:14;49239:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;49299:46;49310:20;49332:12;49299:46;;;;;;;:::i;:::-;;;;;;;;48625:728;;;;;41368:5:::0;41359:6;;:14;;;;;;;;;;;;;;;;;;48545:808;:::o;49361:711::-;49516:21;49554:1;49540:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49516:40;;49585:4;49567;49572:1;49567:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;49611:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49601:4;49606:1;49601:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;49702:11;49649:50;49667:4;49682:15;;;;;;;;;;;49649:9;:50::i;:::-;:64;49646:156;;;49728:62;49745:4;49760:15;;;;;;;;;;;49787:1;49778:11;49728:8;:62::i;:::-;49646:156;49840:15;;;;;;;;;;;:66;;;49921:11;49947:1;49991:4;50010:3;50028:15;49840:214;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49433:639;49361:711;;:::o;28697:98::-;28755:7;28786:1;28782;:5;;;;:::i;:::-;28775:12;;28697:98;;;;:::o;27941:::-;27999:7;28030:1;28026;:5;;;;:::i;:::-;28019:12;;27941:98;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;152:143;;;;:::o;301:155::-;355:5;393:6;380:20;371:29;;409:41;444:5;409:41;:::i;:::-;301:155;;;;:::o;479:568::-;552:8;562:6;612:3;605:4;597:6;593:17;589:27;579:122;;620:79;;:::i;:::-;579:122;733:6;720:20;710:30;;763:18;755:6;752:30;749:117;;;785:79;;:::i;:::-;749:117;899:4;891:6;887:17;875:29;;953:3;945:4;937:6;933:17;923:8;919:32;916:41;913:128;;;960:79;;:::i;:::-;913:128;479:568;;;;;:::o;1053:133::-;1096:5;1134:6;1121:20;1112:29;;1150:30;1174:5;1150:30;:::i;:::-;1053:133;;;;:::o;1192:139::-;1238:5;1276:6;1263:20;1254:29;;1292:33;1319:5;1292:33;:::i;:::-;1192:139;;;;:::o;1337:329::-;1396:6;1445:2;1433:9;1424:7;1420:23;1416:32;1413:119;;;1451:79;;:::i;:::-;1413:119;1571:1;1596:53;1641:7;1632:6;1621:9;1617:22;1596:53;:::i;:::-;1586:63;;1542:117;1337:329;;;;:::o;1672:351::-;1742:6;1791:2;1779:9;1770:7;1766:23;1762:32;1759:119;;;1797:79;;:::i;:::-;1759:119;1917:1;1942:64;1998:7;1989:6;1978:9;1974:22;1942:64;:::i;:::-;1932:74;;1888:128;1672:351;;;;:::o;2029:667::-;2130:6;2138;2146;2195:2;2183:9;2174:7;2170:23;2166:32;2163:119;;;2201:79;;:::i;:::-;2163:119;2321:1;2346:61;2399:7;2390:6;2379:9;2375:22;2346:61;:::i;:::-;2336:71;;2292:125;2456:2;2482:61;2535:7;2526:6;2515:9;2511:22;2482:61;:::i;:::-;2472:71;;2427:126;2592:2;2618:61;2671:7;2662:6;2651:9;2647:22;2618:61;:::i;:::-;2608:71;;2563:126;2029:667;;;;;:::o;2702:474::-;2770:6;2778;2827:2;2815:9;2806:7;2802:23;2798:32;2795:119;;;2833:79;;:::i;:::-;2795:119;2953:1;2978:53;3023:7;3014:6;3003:9;2999:22;2978:53;:::i;:::-;2968:63;;2924:117;3080:2;3106:53;3151:7;3142:6;3131:9;3127:22;3106:53;:::i;:::-;3096:63;;3051:118;2702:474;;;;;:::o;3182:619::-;3259:6;3267;3275;3324:2;3312:9;3303:7;3299:23;3295:32;3292:119;;;3330:79;;:::i;:::-;3292:119;3450:1;3475:53;3520:7;3511:6;3500:9;3496:22;3475:53;:::i;:::-;3465:63;;3421:117;3577:2;3603:53;3648:7;3639:6;3628:9;3624:22;3603:53;:::i;:::-;3593:63;;3548:118;3705:2;3731:53;3776:7;3767:6;3756:9;3752:22;3731:53;:::i;:::-;3721:63;;3676:118;3182:619;;;;;:::o;3807:468::-;3872:6;3880;3929:2;3917:9;3908:7;3904:23;3900:32;3897:119;;;3935:79;;:::i;:::-;3897:119;4055:1;4080:53;4125:7;4116:6;4105:9;4101:22;4080:53;:::i;:::-;4070:63;;4026:117;4182:2;4208:50;4250:7;4241:6;4230:9;4226:22;4208:50;:::i;:::-;4198:60;;4153:115;3807:468;;;;;:::o;4281:474::-;4349:6;4357;4406:2;4394:9;4385:7;4381:23;4377:32;4374:119;;;4412:79;;:::i;:::-;4374:119;4532:1;4557:53;4602:7;4593:6;4582:9;4578:22;4557:53;:::i;:::-;4547:63;;4503:117;4659:2;4685:53;4730:7;4721:6;4710:9;4706:22;4685:53;:::i;:::-;4675:63;;4630:118;4281:474;;;;;:::o;4761:698::-;4853:6;4861;4869;4918:2;4906:9;4897:7;4893:23;4889:32;4886:119;;;4924:79;;:::i;:::-;4886:119;5072:1;5061:9;5057:17;5044:31;5102:18;5094:6;5091:30;5088:117;;;5124:79;;:::i;:::-;5088:117;5237:80;5309:7;5300:6;5289:9;5285:22;5237:80;:::i;:::-;5219:98;;;;5015:312;5366:2;5392:50;5434:7;5425:6;5414:9;5410:22;5392:50;:::i;:::-;5382:60;;5337:115;4761:698;;;;;:::o;5465:323::-;5521:6;5570:2;5558:9;5549:7;5545:23;5541:32;5538:119;;;5576:79;;:::i;:::-;5538:119;5696:1;5721:50;5763:7;5754:6;5743:9;5739:22;5721:50;:::i;:::-;5711:60;;5667:114;5465:323;;;;:::o;5794:329::-;5853:6;5902:2;5890:9;5881:7;5877:23;5873:32;5870:119;;;5908:79;;:::i;:::-;5870:119;6028:1;6053:53;6098:7;6089:6;6078:9;6074:22;6053:53;:::i;:::-;6043:63;;5999:117;5794:329;;;;:::o;6129:619::-;6206:6;6214;6222;6271:2;6259:9;6250:7;6246:23;6242:32;6239:119;;;6277:79;;:::i;:::-;6239:119;6397:1;6422:53;6467:7;6458:6;6447:9;6443:22;6422:53;:::i;:::-;6412:63;;6368:117;6524:2;6550:53;6595:7;6586:6;6575:9;6571:22;6550:53;:::i;:::-;6540:63;;6495:118;6652:2;6678:53;6723:7;6714:6;6703:9;6699:22;6678:53;:::i;:::-;6668:63;;6623:118;6129:619;;;;;:::o;6754:179::-;6823:10;6844:46;6886:3;6878:6;6844:46;:::i;:::-;6922:4;6917:3;6913:14;6899:28;;6754:179;;;;:::o;6939:142::-;7042:32;7068:5;7042:32;:::i;:::-;7037:3;7030:45;6939:142;;:::o;7087:108::-;7164:24;7182:5;7164:24;:::i;:::-;7159:3;7152:37;7087:108;;:::o;7201:118::-;7288:24;7306:5;7288:24;:::i;:::-;7283:3;7276:37;7201:118;;:::o;7355:699::-;7484:3;7507:86;7586:6;7581:3;7507:86;:::i;:::-;7500:93;;7617:58;7669:5;7617:58;:::i;:::-;7698:7;7729:1;7714:315;7739:6;7736:1;7733:13;7714:315;;;7809:42;7844:6;7835:7;7809:42;:::i;:::-;7871:63;7930:3;7915:13;7871:63;:::i;:::-;7864:70;;7957:62;8012:6;7957:62;:::i;:::-;7947:72;;7774:255;7761:1;7758;7754:9;7749:14;;7714:315;;;7718:14;8045:3;8038:10;;7489:565;;7355:699;;;;;:::o;8090:732::-;8209:3;8238:54;8286:5;8238:54;:::i;:::-;8308:86;8387:6;8382:3;8308:86;:::i;:::-;8301:93;;8418:56;8468:5;8418:56;:::i;:::-;8497:7;8528:1;8513:284;8538:6;8535:1;8532:13;8513:284;;;8614:6;8608:13;8641:63;8700:3;8685:13;8641:63;:::i;:::-;8634:70;;8727:60;8780:6;8727:60;:::i;:::-;8717:70;;8573:224;8560:1;8557;8553:9;8548:14;;8513:284;;;8517:14;8813:3;8806:10;;8214:608;;;8090:732;;;;:::o;8828:109::-;8909:21;8924:5;8909:21;:::i;:::-;8904:3;8897:34;8828:109;;:::o;8943:185::-;9057:64;9115:5;9057:64;:::i;:::-;9052:3;9045:77;8943:185;;:::o;9134:147::-;9229:45;9268:5;9229:45;:::i;:::-;9224:3;9217:58;9134:147;;:::o;9287:364::-;9375:3;9403:39;9436:5;9403:39;:::i;:::-;9458:71;9522:6;9517:3;9458:71;:::i;:::-;9451:78;;9538:52;9583:6;9578:3;9571:4;9564:5;9560:16;9538:52;:::i;:::-;9615:29;9637:6;9615:29;:::i;:::-;9610:3;9606:39;9599:46;;9379:272;9287:364;;;;:::o;9657:366::-;9799:3;9820:67;9884:2;9879:3;9820:67;:::i;:::-;9813:74;;9896:93;9985:3;9896:93;:::i;:::-;10014:2;10009:3;10005:12;9998:19;;9657:366;;;:::o;10029:::-;10171:3;10192:67;10256:2;10251:3;10192:67;:::i;:::-;10185:74;;10268:93;10357:3;10268:93;:::i;:::-;10386:2;10381:3;10377:12;10370:19;;10029:366;;;:::o;10401:::-;10543:3;10564:67;10628:2;10623:3;10564:67;:::i;:::-;10557:74;;10640:93;10729:3;10640:93;:::i;:::-;10758:2;10753:3;10749:12;10742:19;;10401:366;;;:::o;10773:::-;10915:3;10936:67;11000:2;10995:3;10936:67;:::i;:::-;10929:74;;11012:93;11101:3;11012:93;:::i;:::-;11130:2;11125:3;11121:12;11114:19;;10773:366;;;:::o;11145:::-;11287:3;11308:67;11372:2;11367:3;11308:67;:::i;:::-;11301:74;;11384:93;11473:3;11384:93;:::i;:::-;11502:2;11497:3;11493:12;11486:19;;11145:366;;;:::o;11517:::-;11659:3;11680:67;11744:2;11739:3;11680:67;:::i;:::-;11673:74;;11756:93;11845:3;11756:93;:::i;:::-;11874:2;11869:3;11865:12;11858:19;;11517:366;;;:::o;11889:::-;12031:3;12052:67;12116:2;12111:3;12052:67;:::i;:::-;12045:74;;12128:93;12217:3;12128:93;:::i;:::-;12246:2;12241:3;12237:12;12230:19;;11889:366;;;:::o;12261:::-;12403:3;12424:67;12488:2;12483:3;12424:67;:::i;:::-;12417:74;;12500:93;12589:3;12500:93;:::i;:::-;12618:2;12613:3;12609:12;12602:19;;12261:366;;;:::o;12633:::-;12775:3;12796:67;12860:2;12855:3;12796:67;:::i;:::-;12789:74;;12872:93;12961:3;12872:93;:::i;:::-;12990:2;12985:3;12981:12;12974:19;;12633:366;;;:::o;13005:::-;13147:3;13168:67;13232:2;13227:3;13168:67;:::i;:::-;13161:74;;13244:93;13333:3;13244:93;:::i;:::-;13362:2;13357:3;13353:12;13346:19;;13005:366;;;:::o;13377:::-;13519:3;13540:67;13604:2;13599:3;13540:67;:::i;:::-;13533:74;;13616:93;13705:3;13616:93;:::i;:::-;13734:2;13729:3;13725:12;13718:19;;13377:366;;;:::o;13749:::-;13891:3;13912:67;13976:2;13971:3;13912:67;:::i;:::-;13905:74;;13988:93;14077:3;13988:93;:::i;:::-;14106:2;14101:3;14097:12;14090:19;;13749:366;;;:::o;14121:::-;14263:3;14284:67;14348:2;14343:3;14284:67;:::i;:::-;14277:74;;14360:93;14449:3;14360:93;:::i;:::-;14478:2;14473:3;14469:12;14462:19;;14121:366;;;:::o;14493:::-;14635:3;14656:67;14720:2;14715:3;14656:67;:::i;:::-;14649:74;;14732:93;14821:3;14732:93;:::i;:::-;14850:2;14845:3;14841:12;14834:19;;14493:366;;;:::o;14865:::-;15007:3;15028:67;15092:2;15087:3;15028:67;:::i;:::-;15021:74;;15104:93;15193:3;15104:93;:::i;:::-;15222:2;15217:3;15213:12;15206:19;;14865:366;;;:::o;15237:118::-;15324:24;15342:5;15324:24;:::i;:::-;15319:3;15312:37;15237:118;;:::o;15361:112::-;15444:22;15460:5;15444:22;:::i;:::-;15439:3;15432:35;15361:112;;:::o;15479:222::-;15572:4;15610:2;15599:9;15595:18;15587:26;;15623:71;15691:1;15680:9;15676:17;15667:6;15623:71;:::i;:::-;15479:222;;;;:::o;15707:254::-;15816:4;15854:2;15843:9;15839:18;15831:26;;15867:87;15951:1;15940:9;15936:17;15927:6;15867:87;:::i;:::-;15707:254;;;;:::o;15967:491::-;16142:4;16180:2;16169:9;16165:18;16157:26;;16229:9;16223:4;16219:20;16215:1;16204:9;16200:17;16193:47;16257:118;16370:4;16361:6;16353;16257:118;:::i;:::-;16249:126;;16385:66;16447:2;16436:9;16432:18;16423:6;16385:66;:::i;:::-;15967:491;;;;;;:::o;16464:210::-;16551:4;16589:2;16578:9;16574:18;16566:26;;16602:65;16664:1;16653:9;16649:17;16640:6;16602:65;:::i;:::-;16464:210;;;;:::o;16680:276::-;16800:4;16838:2;16827:9;16823:18;16815:26;;16851:98;16946:1;16935:9;16931:17;16922:6;16851:98;:::i;:::-;16680:276;;;;:::o;16962:313::-;17075:4;17113:2;17102:9;17098:18;17090:26;;17162:9;17156:4;17152:20;17148:1;17137:9;17133:17;17126:47;17190:78;17263:4;17254:6;17190:78;:::i;:::-;17182:86;;16962:313;;;;:::o;17281:419::-;17447:4;17485:2;17474:9;17470:18;17462:26;;17534:9;17528:4;17524:20;17520:1;17509:9;17505:17;17498:47;17562:131;17688:4;17562:131;:::i;:::-;17554:139;;17281:419;;;:::o;17706:::-;17872:4;17910:2;17899:9;17895:18;17887:26;;17959:9;17953:4;17949:20;17945:1;17934:9;17930:17;17923:47;17987:131;18113:4;17987:131;:::i;:::-;17979:139;;17706:419;;;:::o;18131:::-;18297:4;18335:2;18324:9;18320:18;18312:26;;18384:9;18378:4;18374:20;18370:1;18359:9;18355:17;18348:47;18412:131;18538:4;18412:131;:::i;:::-;18404:139;;18131:419;;;:::o;18556:::-;18722:4;18760:2;18749:9;18745:18;18737:26;;18809:9;18803:4;18799:20;18795:1;18784:9;18780:17;18773:47;18837:131;18963:4;18837:131;:::i;:::-;18829:139;;18556:419;;;:::o;18981:::-;19147:4;19185:2;19174:9;19170:18;19162:26;;19234:9;19228:4;19224:20;19220:1;19209:9;19205:17;19198:47;19262:131;19388:4;19262:131;:::i;:::-;19254:139;;18981:419;;;:::o;19406:::-;19572:4;19610:2;19599:9;19595:18;19587:26;;19659:9;19653:4;19649:20;19645:1;19634:9;19630:17;19623:47;19687:131;19813:4;19687:131;:::i;:::-;19679:139;;19406:419;;;:::o;19831:::-;19997:4;20035:2;20024:9;20020:18;20012:26;;20084:9;20078:4;20074:20;20070:1;20059:9;20055:17;20048:47;20112:131;20238:4;20112:131;:::i;:::-;20104:139;;19831:419;;;:::o;20256:::-;20422:4;20460:2;20449:9;20445:18;20437:26;;20509:9;20503:4;20499:20;20495:1;20484:9;20480:17;20473:47;20537:131;20663:4;20537:131;:::i;:::-;20529:139;;20256:419;;;:::o;20681:::-;20847:4;20885:2;20874:9;20870:18;20862:26;;20934:9;20928:4;20924:20;20920:1;20909:9;20905:17;20898:47;20962:131;21088:4;20962:131;:::i;:::-;20954:139;;20681:419;;;:::o;21106:::-;21272:4;21310:2;21299:9;21295:18;21287:26;;21359:9;21353:4;21349:20;21345:1;21334:9;21330:17;21323:47;21387:131;21513:4;21387:131;:::i;:::-;21379:139;;21106:419;;;:::o;21531:::-;21697:4;21735:2;21724:9;21720:18;21712:26;;21784:9;21778:4;21774:20;21770:1;21759:9;21755:17;21748:47;21812:131;21938:4;21812:131;:::i;:::-;21804:139;;21531:419;;;:::o;21956:::-;22122:4;22160:2;22149:9;22145:18;22137:26;;22209:9;22203:4;22199:20;22195:1;22184:9;22180:17;22173:47;22237:131;22363:4;22237:131;:::i;:::-;22229:139;;21956:419;;;:::o;22381:::-;22547:4;22585:2;22574:9;22570:18;22562:26;;22634:9;22628:4;22624:20;22620:1;22609:9;22605:17;22598:47;22662:131;22788:4;22662:131;:::i;:::-;22654:139;;22381:419;;;:::o;22806:::-;22972:4;23010:2;22999:9;22995:18;22987:26;;23059:9;23053:4;23049:20;23045:1;23034:9;23030:17;23023:47;23087:131;23213:4;23087:131;:::i;:::-;23079:139;;22806:419;;;:::o;23231:::-;23397:4;23435:2;23424:9;23420:18;23412:26;;23484:9;23478:4;23474:20;23470:1;23459:9;23455:17;23448:47;23512:131;23638:4;23512:131;:::i;:::-;23504:139;;23231:419;;;:::o;23656:222::-;23749:4;23787:2;23776:9;23772:18;23764:26;;23800:71;23868:1;23857:9;23853:17;23844:6;23800:71;:::i;:::-;23656:222;;;;:::o;23884:831::-;24147:4;24185:3;24174:9;24170:19;24162:27;;24199:71;24267:1;24256:9;24252:17;24243:6;24199:71;:::i;:::-;24280:80;24356:2;24345:9;24341:18;24332:6;24280:80;:::i;:::-;24407:9;24401:4;24397:20;24392:2;24381:9;24377:18;24370:48;24435:108;24538:4;24529:6;24435:108;:::i;:::-;24427:116;;24553:72;24621:2;24610:9;24606:18;24597:6;24553:72;:::i;:::-;24635:73;24703:3;24692:9;24688:19;24679:6;24635:73;:::i;:::-;23884:831;;;;;;;;:::o;24721:332::-;24842:4;24880:2;24869:9;24865:18;24857:26;;24893:71;24961:1;24950:9;24946:17;24937:6;24893:71;:::i;:::-;24974:72;25042:2;25031:9;25027:18;25018:6;24974:72;:::i;:::-;24721:332;;;;;:::o;25059:214::-;25148:4;25186:2;25175:9;25171:18;25163:26;;25199:67;25263:1;25252:9;25248:17;25239:6;25199:67;:::i;:::-;25059:214;;;;:::o;25360:102::-;25429:4;25452:3;25444:11;;25360:102;;;:::o;25468:132::-;25535:4;25558:3;25550:11;;25588:4;25583:3;25579:14;25571:22;;25468:132;;;:::o;25606:114::-;25673:6;25707:5;25701:12;25691:22;;25606:114;;;:::o;25726:99::-;25778:6;25812:5;25806:12;25796:22;;25726:99;;;:::o;25831:115::-;25903:4;25935;25930:3;25926:14;25918:22;;25831:115;;;:::o;25952:113::-;26022:4;26054;26049:3;26045:14;26037:22;;25952:113;;;:::o;26071:184::-;26170:11;26204:6;26199:3;26192:19;26244:4;26239:3;26235:14;26220:29;;26071:184;;;;:::o;26261:169::-;26345:11;26379:6;26374:3;26367:19;26419:4;26414:3;26410:14;26395:29;;26261:169;;;;:::o;26436:122::-;26488:5;26513:39;26548:2;26543:3;26539:12;26534:3;26513:39;:::i;:::-;26504:48;;26436:122;;;;:::o;26564:305::-;26604:3;26623:20;26641:1;26623:20;:::i;:::-;26618:25;;26657:20;26675:1;26657:20;:::i;:::-;26652:25;;26811:1;26743:66;26739:74;26736:1;26733:81;26730:107;;;26817:18;;:::i;:::-;26730:107;26861:1;26858;26854:9;26847:16;;26564:305;;;;:::o;26875:185::-;26915:1;26932:20;26950:1;26932:20;:::i;:::-;26927:25;;26966:20;26984:1;26966:20;:::i;:::-;26961:25;;27005:1;26995:35;;27010:18;;:::i;:::-;26995:35;27052:1;27049;27045:9;27040:14;;26875:185;;;;:::o;27066:348::-;27106:7;27129:20;27147:1;27129:20;:::i;:::-;27124:25;;27163:20;27181:1;27163:20;:::i;:::-;27158:25;;27351:1;27283:66;27279:74;27276:1;27273:81;27268:1;27261:9;27254:17;27250:105;27247:131;;;27358:18;;:::i;:::-;27247:131;27406:1;27403;27399:9;27388:20;;27066:348;;;;:::o;27420:191::-;27460:4;27480:20;27498:1;27480:20;:::i;:::-;27475:25;;27514:20;27532:1;27514:20;:::i;:::-;27509:25;;27553:1;27550;27547:8;27544:34;;;27558:18;;:::i;:::-;27544:34;27603:1;27600;27596:9;27588:17;;27420:191;;;;:::o;27617:96::-;27654:7;27683:24;27701:5;27683:24;:::i;:::-;27672:35;;27617:96;;;:::o;27719:104::-;27764:7;27793:24;27811:5;27793:24;:::i;:::-;27782:35;;27719:104;;;:::o;27829:90::-;27863:7;27906:5;27899:13;27892:21;27881:32;;27829:90;;;:::o;27925:126::-;27962:7;28002:42;27995:5;27991:54;27980:65;;27925:126;;;:::o;28057:77::-;28094:7;28123:5;28112:16;;28057:77;;;:::o;28140:86::-;28175:7;28215:4;28208:5;28204:16;28193:27;;28140:86;;;:::o;28232:153::-;28309:9;28342:37;28373:5;28342:37;:::i;:::-;28329:50;;28232:153;;;:::o;28391:121::-;28449:9;28482:24;28500:5;28482:24;:::i;:::-;28469:37;;28391:121;;;:::o;28518:126::-;28568:9;28601:37;28632:5;28601:37;:::i;:::-;28588:50;;28518:126;;;:::o;28650:113::-;28700:9;28733:24;28751:5;28733:24;:::i;:::-;28720:37;;28650:113;;;:::o;28769:307::-;28837:1;28847:113;28861:6;28858:1;28855:13;28847:113;;;28946:1;28941:3;28937:11;28931:18;28927:1;28922:3;28918:11;28911:39;28883:2;28880:1;28876:10;28871:15;;28847:113;;;28978:6;28975:1;28972:13;28969:101;;;29058:1;29049:6;29044:3;29040:16;29033:27;28969:101;28818:258;28769:307;;;:::o;29082:320::-;29126:6;29163:1;29157:4;29153:12;29143:22;;29210:1;29204:4;29200:12;29231:18;29221:81;;29287:4;29279:6;29275:17;29265:27;;29221:81;29349:2;29341:6;29338:14;29318:18;29315:38;29312:84;;;29368:18;;:::i;:::-;29312:84;29133:269;29082:320;;;:::o;29408:233::-;29447:3;29470:24;29488:5;29470:24;:::i;:::-;29461:33;;29516:66;29509:5;29506:77;29503:103;;;29586:18;;:::i;:::-;29503:103;29633:1;29626:5;29622:13;29615:20;;29408:233;;;:::o;29647:180::-;29695:77;29692:1;29685:88;29792:4;29789:1;29782:15;29816:4;29813:1;29806:15;29833:180;29881:77;29878:1;29871:88;29978:4;29975:1;29968:15;30002:4;29999:1;29992:15;30019:180;30067:77;30064:1;30057:88;30164:4;30161:1;30154:15;30188:4;30185:1;30178:15;30205:180;30253:77;30250:1;30243:88;30350:4;30347:1;30340:15;30374:4;30371:1;30364:15;30391:180;30439:77;30436:1;30429:88;30536:4;30533:1;30526:15;30560:4;30557:1;30550:15;30577:117;30686:1;30683;30676:12;30700:117;30809:1;30806;30799:12;30823:117;30932:1;30929;30922:12;30946:117;31055:1;31052;31045:12;31069:117;31178:1;31175;31168:12;31192:102;31233:6;31284:2;31280:7;31275:2;31268:5;31264:14;31260:28;31250:38;;31192:102;;;:::o;31300:222::-;31440:34;31436:1;31428:6;31424:14;31417:58;31509:5;31504:2;31496:6;31492:15;31485:30;31300:222;:::o;31528:221::-;31668:34;31664:1;31656:6;31652:14;31645:58;31737:4;31732:2;31724:6;31720:15;31713:29;31528:221;:::o;31755:234::-;31895:34;31891:1;31883:6;31879:14;31872:58;31964:17;31959:2;31951:6;31947:15;31940:42;31755:234;:::o;31995:225::-;32135:34;32131:1;32123:6;32119:14;32112:58;32204:8;32199:2;32191:6;32187:15;32180:33;31995:225;:::o;32226:221::-;32366:34;32362:1;32354:6;32350:14;32343:58;32435:4;32430:2;32422:6;32418:15;32411:29;32226:221;:::o;32453:227::-;32593:34;32589:1;32581:6;32577:14;32570:58;32662:10;32657:2;32649:6;32645:15;32638:35;32453:227;:::o;32686:225::-;32826:34;32822:1;32814:6;32810:14;32803:58;32895:8;32890:2;32882:6;32878:15;32871:33;32686:225;:::o;32917:248::-;33057:34;33053:1;33045:6;33041:14;33034:58;33126:31;33121:2;33113:6;33109:15;33102:56;32917:248;:::o;33171:227::-;33311:34;33307:1;33299:6;33295:14;33288:58;33380:10;33375:2;33367:6;33363:15;33356:35;33171:227;:::o;33404:182::-;33544:34;33540:1;33532:6;33528:14;33521:58;33404:182;:::o;33592:220::-;33732:34;33728:1;33720:6;33716:14;33709:58;33801:3;33796:2;33788:6;33784:15;33777:28;33592:220;:::o;33818:224::-;33958:34;33954:1;33946:6;33942:14;33935:58;34027:7;34022:2;34014:6;34010:15;34003:32;33818:224;:::o;34048:223::-;34188:34;34184:1;34176:6;34172:14;34165:58;34257:6;34252:2;34244:6;34240:15;34233:31;34048:223;:::o;34277:224::-;34417:34;34413:1;34405:6;34401:14;34394:58;34486:7;34481:2;34473:6;34469:15;34462:32;34277:224;:::o;34507:298::-;34647:34;34643:1;34635:6;34631:14;34624:58;34716:34;34711:2;34703:6;34699:15;34692:59;34785:12;34780:2;34772:6;34768:15;34761:37;34507:298;:::o;34811:122::-;34884:24;34902:5;34884:24;:::i;:::-;34877:5;34874:35;34864:63;;34923:1;34920;34913:12;34864:63;34811:122;:::o;34939:138::-;35020:32;35046:5;35020:32;:::i;:::-;35013:5;35010:43;35000:71;;35067:1;35064;35057:12;35000:71;34939:138;:::o;35083:116::-;35153:21;35168:5;35153:21;:::i;:::-;35146:5;35143:32;35133:60;;35189:1;35186;35179:12;35133:60;35083:116;:::o;35205:122::-;35278:24;35296:5;35278:24;:::i;:::-;35271:5;35268:35;35258:63;;35317:1;35314;35307:12;35258:63;35205:122;:::o
Swarm Source
ipfs://af840c8cc006a598e76fbe87f6f81082ea7f71c822aa41c1863052d31cb19e31