BscScan - Sponsored slots available. Book your slot here!
BEP-20
Overview
Max Total Supply
700,000,000AFU
Holders
1,243
Market
Price
$0.00 @ 0.000000 BNB
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
1 AFUValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
AFU
Compiler Version
v0.7.6+commit.7338295f
Contract Source Code (Solidity)
/** *Submitted for verification at BscScan.com on 2022-07-20 */ /** *Submitted for verification at BscScan.com on 2021-12-23 */ pragma solidity ^0.7.6; /** * @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); } // File: contracts/Context.sol pragma solidity >=0.6.0 <0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: contracts/IUniswapV2Router01.sol pragma solidity >=0.6.2; 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); } // File: contracts/IUniswapV2Router02.sol pragma solidity >=0.6.2; 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; } // File: contracts/IUniswapV2Factory.sol pragma solidity >=0.5.0; 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; } // File: contracts/IUniswapV2Pair.sol pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // File: contracts/IterableMapping.sol pragma solidity ^0.7.6; library IterableMapping { // Iterable mapping from address to uint; struct Map { address[] keys; mapping(address => uint) values; mapping(address => uint) indexOf; mapping(address => bool) inserted; } function get(Map storage map, address key) public view returns (uint) { return map.values[key]; } function getIndexOfKey(Map storage map, address key) public view returns (int) { if(!map.inserted[key]) { return -1; } return int(map.indexOf[key]); } function getKeyAtIndex(Map storage map, uint index) public view returns (address) { return map.keys[index]; } function size(Map storage map) public view returns (uint) { return map.keys.length; } function set(Map storage map, address key, uint val) public { if (map.inserted[key]) { map.values[key] = val; } else { map.inserted[key] = true; map.values[key] = val; map.indexOf[key] = map.keys.length; map.keys.push(key); } } function remove(Map storage map, address key) public { if (!map.inserted[key]) { return; } delete map.inserted[key]; delete map.values[key]; uint index = map.indexOf[key]; uint lastIndex = map.keys.length - 1; address lastKey = map.keys[lastIndex]; map.indexOf[lastKey] = index; delete map.indexOf[key]; map.keys[index] = lastKey; map.keys.pop(); } } // File: contracts/Ownable.sol pragma solidity ^0.7.6; /** * @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 () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), 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 { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: contracts/IDividendPayingTokenOptional.sol pragma solidity ^0.7.6; /// @title Dividend-Paying Token Optional Interface /// @author Roger Wu (https://github.com/roger-wu) /// @dev OPTIONAL functions for a dividend-paying token contract. interface IDividendPayingTokenOptional { /// @notice View the amount of dividend in wei that an address can withdraw. /// @param _owner The address of a token holder. /// @return The amount of dividend in wei that `_owner` can withdraw. function withdrawableDividendOf(address _owner) external view returns(uint256); /// @notice View the amount of dividend in wei that an address has withdrawn. /// @param _owner The address of a token holder. /// @return The amount of dividend in wei that `_owner` has withdrawn. function withdrawnDividendOf(address _owner) external view returns(uint256); /// @notice View the amount of dividend in wei that an address has earned in total. /// @dev accumulativeDividendOf(_owner) = withdrawableDividendOf(_owner) + withdrawnDividendOf(_owner) /// @param _owner The address of a token holder. /// @return The amount of dividend in wei that `_owner` has earned in total. function accumulativeDividendOf(address _owner) external view returns(uint256); } // File: contracts/IDividendPayingToken.sol pragma solidity ^0.7.6; /// @title Dividend-Paying Token Interface /// @author Roger Wu (https://github.com/roger-wu) /// @dev An interface for a dividend-paying token contract. interface IDividendPayingToken { /// @notice View the amount of dividend in wei that an address can withdraw. /// @param _owner The address of a token holder. /// @return The amount of dividend in wei that `_owner` can withdraw. function dividendOf(address _owner) external view returns(uint256); /// @notice Distributes ether to token holders as dividends. /// @dev SHOULD distribute the paid ether to token holders as dividends. /// SHOULD NOT directly transfer ether to token holders in this function. /// MUST emit a `DividendsDistributed` event when the amount of distributed ether is greater than 0. function distributeDividends() external payable; /// @notice Withdraws the ether distributed to the sender. /// @dev SHOULD transfer `dividendOf(msg.sender)` wei to `msg.sender`, and `dividendOf(msg.sender)` SHOULD be 0 after the transfer. /// MUST emit a `DividendWithdrawn` event if the amount of ether transferred is greater than 0. function withdrawDividend() external; /// @dev This event MUST emit when ether is distributed to token holders. /// @param from The address which sends ether to this contract. /// @param weiAmount The amount of distributed ether in wei. event DividendsDistributed( address indexed from, uint256 weiAmount ); /// @dev This event MUST emit when an address withdraws their dividend. /// @param to The address which withdraws ether from this contract. /// @param weiAmount The amount of withdrawn ether in wei. event DividendWithdrawn( address indexed to, uint256 weiAmount, address indexed tokenWithdrawn ); } // File: contracts/SafeMathInt.sol pragma solidity ^0.7.6; /** * @title SafeMathInt * @dev Math operations with safety checks that revert on error * @dev SafeMath adapted for int256 * Based on code of https://github.com/RequestNetwork/requestNetwork/blob/master/packages/requestNetworkSmartContracts/contracts/base/math/SafeMathInt.sol */ library SafeMathInt { function mul(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when multiplying INT256_MIN with -1 // https://github.com/RequestNetwork/requestNetwork/issues/43 require(!(a == - 2**255 && b == -1) && !(b == - 2**255 && a == -1)); int256 c = a * b; require((b == 0) || (c / b == a)); return c; } function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing INT256_MIN by -1 // https://github.com/RequestNetwork/requestNetwork/issues/43 require(!(a == - 2**255 && b == -1) && (b > 0)); return a / b; } function sub(int256 a, int256 b) internal pure returns (int256) { require((b >= 0 && a - b <= a) || (b < 0 && a - b > a)); return a - b; } function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } // File: contracts/SafeMathUint.sol pragma solidity ^0.7.6; /** * @title SafeMathUint * @dev Math operations with safety checks that revert on error */ library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } // File: contracts/ERC20.sol pragma solidity ^0.7.6; /** * @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 { using SafeMath for uint256; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for {name} and {symbol}, initializes {decimals} with * a default value of 18. * * To select a different value for {decimals}, use {_setupDecimals}. * * All three of these values are immutable: they can only be set once during * construction. */ constructor (string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _decimals = 18; } /** * @dev Returns the name of the token. */ function name() public view virtual returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is * called. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual returns (uint8) { return _decimals; } /** * @dev See {IERC20-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); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `to` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Sets {decimals} to a value other than the default one of 18. * * WARNING: This function should only be called from the constructor. Most * applications that interact with token contracts will not expect * {decimals} to ever change, and may work incorrectly if it does. */ function _setupDecimals(uint8 decimals_) internal virtual { _decimals = decimals_; } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { } } // File: contracts/SafeMath.sol pragma solidity ^0.7.6; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) return 0; uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } } // File: contracts/ AFUDividendPayingToken.sol pragma solidity ^0.7.6; /// @title Dividend-Paying Token /// @author Roger Wu (https://github.com/roger-wu) /// @dev A mintable ERC20 token that allows anyone to pay and distribute ether /// to token holders as dividends and allows token holders to withdraw their dividends. /// Reference: the source code of PoWH3D: https://etherscan.io/address/0xB3775fB83F7D12A36E0475aBdD1FCA35c091efBe#code contract DividendPayingToken is ERC20, IDividendPayingToken, IDividendPayingTokenOptional { using SafeMath for uint256; using SafeMathUint for uint256; using SafeMathInt for int256; // With `magnitude`, we can properly distribute dividends even if the amount of received ether is small. // For more discussion about choosing the value of `magnitude`, // see https://github.com/ethereum/EIPs/issues/1726#issuecomment-472352728 uint256 constant internal magnitude = 2**128; uint256 internal magnifiedDividendPerShare; uint256 internal lastAmount; address public DividendToken = address(0); address public masterContract; modifier onlyMaster() { require(masterContract == msg.sender, "Ownable: caller is not the master contract"); _; } mapping(address => int256) internal magnifiedDividendCorrections; mapping(address => uint256) internal withdrawnDividends; uint256 public totalDividendsDistributed; constructor(string memory _name, string memory _symbol) public ERC20(_name, _symbol) { masterContract = msg.sender; } receive() external payable { } function updateMasterContract(address newAddress) public onlyMaster { masterContract = newAddress; } function distributeDividends() public override payable onlyMaster { require(totalSupply() > 0); if (msg.value > 0) { magnifiedDividendPerShare = magnifiedDividendPerShare.add( (msg.value).mul(magnitude) / totalSupply() ); emit DividendsDistributed(msg.sender, msg.value); totalDividendsDistributed = totalDividendsDistributed.add(msg.value); } } function distributeTokenDividends(uint256 amount) public onlyMaster{ require(totalSupply() > 0); if (amount > 0) { magnifiedDividendPerShare = magnifiedDividendPerShare.add( (amount).mul(magnitude) / totalSupply() ); emit DividendsDistributed(msg.sender, amount); totalDividendsDistributed = totalDividendsDistributed.add(amount); } } function withdrawDividend() public virtual override { _withdrawDividendOfUser(msg.sender); } function _withdrawDividendOfUser(address payable user) internal returns (uint256) { uint256 _withdrawableDividend = withdrawableDividendOf(user); if (_withdrawableDividend > 0) { withdrawnDividends[user] = withdrawnDividends[user].add(_withdrawableDividend); bool success = false; if(DividendToken == address(0)){ (bool sent,) = user.call{value: _withdrawableDividend}(""); success = sent; emit DividendWithdrawn(user, _withdrawableDividend, DividendToken); }else{ success = IERC20(DividendToken).transfer(user, _withdrawableDividend); emit DividendWithdrawn(user, _withdrawableDividend, DividendToken); } if(!success) { withdrawnDividends[user] = withdrawnDividends[user].sub(_withdrawableDividend); return 0; } return _withdrawableDividend; } return 0; } function dividendOf(address _owner) public view override returns(uint256) { return withdrawableDividendOf(_owner); } function withdrawableDividendOf(address _owner) public view override returns(uint256) { return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]); } function withdrawnDividendOf(address _owner) public view override returns(uint256) { return withdrawnDividends[_owner]; } function accumulativeDividendOf(address _owner) public view override returns(uint256) { return magnifiedDividendPerShare.mul(balanceOf(_owner)).toInt256Safe() .add(magnifiedDividendCorrections[_owner]).toUint256Safe() / magnitude; } function _transfer(address from, address to, uint256 value) internal virtual override { require(false); int256 _magCorrection = magnifiedDividendPerShare.mul(value).toInt256Safe(); magnifiedDividendCorrections[from] = magnifiedDividendCorrections[from].add(_magCorrection); magnifiedDividendCorrections[to] = magnifiedDividendCorrections[to].sub(_magCorrection); } function _mint(address account, uint256 value) internal override { super._mint(account, value); magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account] .sub( (magnifiedDividendPerShare.mul(value)).toInt256Safe() ); } function _burn(address account, uint256 value) internal override { super._burn(account, value); magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account] .add( (magnifiedDividendPerShare.mul(value)).toInt256Safe() ); } function _setBalance(address account, uint256 newBalance) internal { uint256 currentBalance = balanceOf(account); if(newBalance > currentBalance) { uint256 mintAmount = newBalance.sub(currentBalance); _mint(account, mintAmount); } else if(newBalance < currentBalance) { uint256 burnAmount = currentBalance.sub(newBalance); _burn(account, burnAmount); } } } // File: contracts/ AFU.sol pragma solidity ^0.7.6; contract AFU is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public uniswapV2Router; address public immutable uniswapV2Pair; address public DividendToken = address(0); bool private swapping; AFUDividendTracker public dividendTracker; address public burnAddress; uint256 public maxBuyTransactionAmount = 700000000 * (10**18); uint256 public maxSellTransactionAmount = 700000000 * (10**18); uint256 public swapTokensAtAmount = 700000000 * (10**18); uint256 public _maxWalletToken = 700000000 * (10**18); uint256 public sellLimitTime = 86400; mapping(address => uint256) public buycooldown; mapping(address => uint256) public sellcooldown; mapping(address => uint256) public firstsell; mapping(address => uint256) public sellnumber; address payable public marketAddress; address payable public charityAddress; address payable public buyBackAddress; address public marketTokenAddressForFee; address public charityTokenAddressForFee; address public buyBackTokenAddressForFee; // transfer fees uint256 public marketFee = 0; uint256 public charityFee = 0; uint256 public buyBackFee = 0; uint256 public tokenRewardsFee = 0; uint256 public liquidityFee = 0; uint256 public burnFee = 0; uint256 public totalFees = tokenRewardsFee.add(liquidityFee).add(marketFee).add(charityFee).add(buyBackFee).add(burnFee); // buy fees uint256 public buyMarketFee = 0; uint256 public buyCharityFee = 0; uint256 public buyBuyBackFee = 0; uint256 public buyTokenRewardsFee = 0; uint256 public buyLiquidityFee = 0; uint256 public buyBurnFee = 0; uint256 public buyTotalFees = buyTokenRewardsFee.add(buyLiquidityFee).add(buyMarketFee).add(buyCharityFee).add(buyBuyBackFee).add(buyBurnFee); // sell fees uint256 public sellMarketFee = 0; uint256 public sellCharityFee = 0; uint256 public sellBuyBackFee = 0; uint256 public sellTokenRewardsFee = 0; uint256 public sellLiquidityFee = 0; uint256 public sellBurnFee = 0; uint256 public sellTotalFees = sellTokenRewardsFee.add(sellLiquidityFee).add(sellMarketFee).add(sellCharityFee).add(sellBuyBackFee).add(sellBurnFee); // fee tracker uint256 private previousMarketFee = marketFee; uint256 private previousCharityFee = charityFee; uint256 private previousBuyBackFee = buyBackFee; uint256 private previousTokenRewardsFee = tokenRewardsFee; uint256 private previousLiquidityFee = liquidityFee; uint256 private previousBurnFee = burnFee; uint256 private previousTotalFees = totalFees; uint256 public processDividendTime; uint256 public dividendTime = 3600; bool public isBuyBackActive = false; bool public isTransferFeesDisabled = false; uint256 public gasForProcessing = 300000; address public presaleAddress = address(0); uint256 public tradingEnabledTimestamp = 1626399138; mapping (address => bool) private _isBlacklisted; mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) private _isExcludedFromLimits; mapping (address => bool) private canTransferBeforeTradingIsEnabled; mapping (address => bool) public automatedMarketMakerPairs; event UpdateDividendTracker(address indexed newAddress, address indexed oldAddress); event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress); event UpdateDividendToken(address indexed newAddress, address indexed oldAddress); event ExcludeFromFees(address indexed account, bool isExcluded); event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded); event ExcludedMaxSellTransactionAmount(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event BurnWalletUpdated(address indexed newBurnWallet, address indexed oldBurnWallet); event GasForProcessingUpdated(uint256 indexed newValue, uint256 indexed oldValue); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); event SendDividends( uint256 tokensSwapped, uint256 amount ); event ProcessedDividendTracker( uint256 iterations, uint256 claims, uint256 lastProcessedIndex, bool indexed automatic, uint256 gas, address indexed processor ); constructor() public ERC20("Animal Friends United", " AFU") { burnAddress = address(0xdead); uint256 _processDividendTime = block.timestamp; processDividendTime = _processDividendTime; dividendTracker = new AFUDividendTracker(); IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x10ED43C718714eb63d5aA57B78B54704E256024E); address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; _setAutomatedMarketMakerPair(_uniswapV2Pair, true); dividendTracker.excludeFromDividends(address(dividendTracker)); dividendTracker.excludeFromDividends(address(this)); dividendTracker.excludeFromDividends(address(_uniswapV2Router)); dividendTracker.excludeFromDividends(owner()); _isExcludedFromLimits[address(dividendTracker)]; _isExcludedFromLimits[address(this)]; _isExcludedFromLimits[address(_uniswapV2Router)]; _isExcludedFromLimits[owner()]; _isExcludedFromLimits[_uniswapV2Pair]; excludeFromFees(burnAddress, true); excludeFromFees(address(this), true); excludeFromFees(owner(), true); canTransferBeforeTradingIsEnabled[owner()] = true; /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(owner(), 700000000 * (10**decimals())); } receive() external payable { } function swapAndLiquifyOwner(uint256 _tokens) external onlyOwner { swapAndLiquify(_tokens); } function swapAndSendDividendsOwner(uint256 _tokens) external onlyOwner { swapAndSendDividends(_tokens); } function restoreFees() internal { marketFee = previousMarketFee; charityFee = previousCharityFee; buyBackFee = previousBuyBackFee; tokenRewardsFee = previousTokenRewardsFee; liquidityFee = previousLiquidityFee; burnFee = previousBurnFee; totalFees = previousTotalFees; } function updateSellLimitTime(uint256 _newTime) external onlyOwner { sellLimitTime = _newTime; } function updateMaxSellTx(uint256 _newAmountNoDecimals) external onlyOwner { maxSellTransactionAmount = _newAmountNoDecimals * (10**decimals()); } function updateMaxWalletAmount(uint256 newAmountNoDecimials) external onlyOwner { _maxWalletToken = newAmountNoDecimials * (10**decimals()); } function updateSwapAtAmount(uint256 newAmountNoDecimials) external onlyOwner { swapTokensAtAmount = newAmountNoDecimials * (10**decimals()); } function updateMaxBuyTx(uint256 _newAmountNoDecimals) external onlyOwner { maxBuyTransactionAmount = _newAmountNoDecimals * (10**decimals()); } function updatedividendTime(uint256 _dividendTime) external onlyOwner { dividendTime = _dividendTime; } function updateBuyBackMode(bool _isBuyBackActive) external onlyOwner { isBuyBackActive = _isBuyBackActive; } function updateisTransferDisabled(bool _isTransferDisabled) external onlyOwner { isTransferFeesDisabled = _isTransferDisabled; } function updateTradingEnabledTime (uint256 newTimeInEpoch) external onlyOwner { tradingEnabledTimestamp = newTimeInEpoch; } function updateMinimumBalanceForDividends (uint256 newAmountNoDecimials) external onlyOwner { dividendTracker.updateMinimumBalanceForDividends(newAmountNoDecimials); } function updateTokenForDividend(address newAddress) external onlyOwner { dividendTracker.updateTokenForDividend(newAddress); DividendToken = newAddress; emit UpdateDividendToken(newAddress, address(DividendToken)); } function updateMarketAddress(address payable newAddress) external onlyOwner { marketAddress = newAddress; _isExcludedFromFees[newAddress] = true; //dividendTracker.excludeFromDividends(marketAddress); } function updateCharityAddress(address payable newAddress) external onlyOwner { charityAddress = newAddress; _isExcludedFromFees[newAddress] = true; //dividendTracker.excludeFromDividends(charityAddress); } function updateBuyBackAddress(address payable newAddress) external onlyOwner { buyBackAddress = newAddress; _isExcludedFromFees[newAddress] = true; //dividendTracker.excludeFromDividends(buyBackAddress); } function updateMarketTokenFeeAddress(address newAddress) external onlyOwner { marketTokenAddressForFee = newAddress; } function updateCharityTokenFeeAddress(address newAddress) external onlyOwner { charityTokenAddressForFee = newAddress; } function updateBuyBackTokenFeeAddress(address newAddress) external onlyOwner { buyBackTokenAddressForFee = newAddress; } function burnTokens(uint256 amountNoDecimals) external onlyOwner { uint256 sendAmount = amountNoDecimals * (10**decimals()); super._transfer(address(this), burnAddress, sendAmount); } function updateFees(uint256 _tokenRewardsFee, uint256 _liquidityFee, uint256 _marketFee, uint256 _charityFee, uint256 _buyBackFee, uint256 _burnFee) external onlyOwner { tokenRewardsFee = _tokenRewardsFee; liquidityFee = _liquidityFee; marketFee = _marketFee; charityFee = _charityFee; buyBackFee = _buyBackFee; burnFee = _burnFee; totalFees = _tokenRewardsFee.add(_liquidityFee).add(_marketFee).add(_charityFee).add(_buyBackFee).add(_burnFee); } function updateBuyFees(uint256 _tokenRewardsFee, uint256 _liquidityFee, uint256 _marketFee, uint256 _charityFee, uint256 _buyBackFee, uint256 _burnFee) external onlyOwner { buyTokenRewardsFee = _tokenRewardsFee; buyLiquidityFee = _liquidityFee; buyMarketFee = _marketFee; buyCharityFee = _charityFee; buyBuyBackFee = _buyBackFee; buyBurnFee = _burnFee; buyTotalFees = _tokenRewardsFee.add(_liquidityFee).add(_marketFee).add(_charityFee).add(_buyBackFee).add(_burnFee); } function updateSellFees(uint256 _tokenRewardsFee, uint256 _liquidityFee, uint256 _marketFee, uint256 _charityFee, uint256 _buyBackFee, uint256 _burnFee) external onlyOwner { sellTokenRewardsFee = _tokenRewardsFee; sellLiquidityFee = _liquidityFee; sellMarketFee = _marketFee; sellCharityFee = _charityFee; sellBuyBackFee = _buyBackFee; sellBurnFee = _burnFee; sellTotalFees = _tokenRewardsFee.add(_liquidityFee).add(_marketFee).add(_charityFee).add(_buyBackFee).add(_burnFee); } function whitelistDxSale(address _presaleAddress, address _routerAddress) external onlyOwner { presaleAddress = _presaleAddress; canTransferBeforeTradingIsEnabled[presaleAddress] = true; dividendTracker.excludeFromDividends(_presaleAddress); excludeFromFees(_presaleAddress, true); canTransferBeforeTradingIsEnabled[_routerAddress] = true; dividendTracker.excludeFromDividends(_routerAddress); excludeFromFees(_routerAddress, true); } function updateDividendTracker(address newAddress) external onlyOwner { require(newAddress != address(dividendTracker), " AFU: The dividend tracker already has that address"); AFUDividendTracker newDividendTracker = AFUDividendTracker(payable(newAddress)); require(newDividendTracker.owner() == address(this), " AFU: The new dividend tracker must be owned by the AFU token contract"); newDividendTracker.excludeFromDividends(address(newDividendTracker)); newDividendTracker.excludeFromDividends(address(this)); newDividendTracker.excludeFromDividends(address(uniswapV2Router)); emit UpdateDividendTracker(newAddress, address(dividendTracker)); dividendTracker = newDividendTracker; } function updateUniswapV2Router(address newAddress) external onlyOwner { require(newAddress != address(uniswapV2Router), " AFU: 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, " AFU: Account is already the value of 'excluded'"); _isExcludedFromFees[account] = excluded; //dividendTracker.excludeFromDividends(account); //emit ExcludeFromFees(account, excluded); } function excludeFromLimits(address account, bool excluded) public onlyOwner { //require(_isExcludedFromFees[account] != excluded, " AFU: Account is already the value of 'excluded'"); _isExcludedFromLimits[account] = excluded; //dividendTracker.excludeFromDividends(account); //emit ExcludeFromFees(account, excluded); } //test function excludeMultipleAccountsFromLimits(address[] calldata accounts, bool excluded) external onlyOwner { for(uint256 i = 0; i < accounts.length; i++) { _isExcludedFromLimits[accounts[i]] = excluded; } } function blacklistAddress(address account, bool excluded) public onlyOwner { //require(_isExcludedFromFees[account] != excluded, " AFU: Account is already the value of 'excluded'"); _isBlacklisted[account] = excluded; dividendTracker.excludeFromDividends(account); //emit ExcludeFromFees(account, excluded); } function excludeFromDividends(address account) public onlyOwner { //require(_isExcludedFromFees[account] != excluded, " AFU: Account is already the value of 'excluded'"); dividendTracker.excludeFromDividends(account); //emit ExcludeFromFees(account, excluded); } function enableDividends(address account) public onlyOwner { //require(_isExcludedFromFees[account] != excluded, " AFU: Account is already the value of 'excluded'"); dividendTracker.enableDividends(account); //emit ExcludeFromFees(account, excluded); } function excludeMultipleAccountsFromFees(address[] calldata accounts, bool excluded) external onlyOwner { for(uint256 i = 0; i < accounts.length; i++) { _isExcludedFromFees[accounts[i]] = excluded; } emit ExcludeMultipleAccountsFromFees(accounts, excluded); } function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner { require(pair != uniswapV2Pair, " AFU: The PancakeSwap pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { require(automatedMarketMakerPairs[pair] != value, " AFU: Automated market maker pair is already set to that value"); automatedMarketMakerPairs[pair] = value; if(value) { dividendTracker.excludeFromDividends(pair); } emit SetAutomatedMarketMakerPair(pair, value); } function updateGasForProcessing(uint256 newValue) public onlyOwner { require(newValue >= 200000 && newValue <= 500000, " AFU: gasForProcessing must be between 200,000 and 500,000"); require(newValue != gasForProcessing, " AFU: Cannot update gasForProcessing to same value"); emit GasForProcessingUpdated(newValue, gasForProcessing); gasForProcessing = newValue; } function updateClaimWait(uint256 claimWait) external onlyOwner { dividendTracker.updateClaimWait(claimWait); } function getClaimWait() external view returns(uint256) { return dividendTracker.claimWait(); } function getTotalDividendsDistributed() external view returns (uint256) { return dividendTracker.totalDividendsDistributed(); } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } function isExcludedFromLimits(address account) public view returns(bool) { return _isExcludedFromLimits[account]; } function withdrawableDividendOf(address account) public view returns(uint256) { return dividendTracker.withdrawableDividendOf(account); } function dividendTokenBalanceOf(address account) public view returns (uint256) { return dividendTracker.balanceOf(account); } function getAccountDividendsInfo(address account) external view returns ( address, int256, int256, uint256, uint256, uint256, uint256, uint256) { return dividendTracker.getAccount(account); } function getAccountDividendsInfoAtIndex(uint256 index) external view returns ( address, int256, int256, uint256, uint256, uint256, uint256, uint256) { return dividendTracker.getAccountAtIndex(index); } function processDividendTracker(uint256 gas) external { (uint256 iterations, uint256 claims, uint256 lastProcessedIndex) = dividendTracker.process(gas); emit ProcessedDividendTracker(iterations, claims, lastProcessedIndex, false, gas, tx.origin); } function claim() external { dividendTracker.processAccount(msg.sender, false); } function getLastProcessedIndex() external view returns(uint256) { return dividendTracker.getLastProcessedIndex(); } function getNumberOfDividendTokenHolders() external view returns(uint256) { return dividendTracker.getNumberOfTokenHolders(); } function getTradingIsEnabled() public view returns (bool) { return block.timestamp >= tradingEnabledTimestamp; } function swapAndLiquify(uint256 tokens) private { uint256 marketFeeFull; uint256 charityFeeFull; uint256 buyBackFeeFull; if(marketFee != 0){ marketFeeFull = tokens.mul(marketFee).div(100); } if(charityFee != 0){ charityFeeFull = tokens.mul(charityFee).div(100); } if(buyBackFee != 0){ buyBackFeeFull = tokens.mul(buyBackFee).div(100); } uint256 tokensAfterFee = tokens - marketFeeFull - charityFeeFull - buyBackFeeFull; // split the contract balance into halves uint256 initHalf = tokens.div(2); uint256 half = tokensAfterFee.div(2); uint256 otherHalf = tokensAfterFee.sub(half); // capture the contract's current ETH balance. // this is so that we can capture exactly the amount of ETH that the // swap creates, and not make the liquidity event include any ETH that // has been manually sent to the contract uint256 initialBalance = address(this).balance; // swap tokens for ETH swapTokensForEth(initHalf); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered // how much ETH did we just swap into? uint256 newBalance = address(this).balance.sub(initialBalance); uint256 marketFeeBalance; uint256 charityFeeBalance; uint256 buyBackFeeBalance; if(marketFee != 0){ marketFeeBalance = newBalance.mul(marketFee).div(100); } if(charityFee != 0){ charityFeeBalance = newBalance.mul(charityFee).div(100); } if(buyBackFee != 0){ buyBackFeeBalance = newBalance.mul(buyBackFee).div(100); } uint256 finalBalance = newBalance - marketFeeBalance - charityFeeBalance - buyBackFeeBalance; uint256 finalHalf = otherHalf; if(marketFeeBalance != 0){ if(marketTokenAddressForFee != address(0)){ swapEthForTokens(marketFeeBalance, marketTokenAddressForFee, marketAddress); }else{ (bool sent,) = marketAddress.call{value: marketFeeBalance}(""); }} if(charityFeeBalance != 0){ if(charityTokenAddressForFee != address(0)){ swapEthForTokens(charityFeeBalance, charityTokenAddressForFee, charityAddress); }else{ (bool sent,) = charityAddress.call{value: charityFeeBalance}(""); }} if(buyBackFeeBalance != 0){ if(isBuyBackActive){ swapEthForTokens(buyBackFeeBalance, address(this), buyBackAddress); }else{ (bool sent,) = buyBackAddress.call{value: buyBackFeeBalance}(""); }} // add liquidity to uniswap addLiquidity(finalHalf, finalBalance); emit SwapAndLiquify(half, finalBalance, otherHalf); } // modified to support BNB dividend function swapAndSendDividends(uint256 tokens) private { address payable diviTracker = address(dividendTracker); bool success = false; uint256 dividends; if(DividendToken != address(0)){ swapTokensForTokens(tokens, address(this)); dividends = IERC20(DividendToken).balanceOf(address(this)); success = IERC20(DividendToken).transfer(address(dividendTracker), dividends); }else{ uint256 initialBalance = address(this).balance; swapTokensForEth(tokens); uint256 newBalance = address(this).balance.sub(initialBalance); dividends = newBalance; (bool sent,) = diviTracker.call{value: newBalance}(""); success = sent; } if (success) { dividendTracker.distributeTokenDividends(dividends); emit SendDividends(tokens, dividends); } } function swapEthForTokens(uint256 ethAmount, address tokenAddress, address receiver) private { // generate the uniswap pair path of weth -> token address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = tokenAddress; // make the swap uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmount}( 0, // accept any amount of ETH path, receiver, block.timestamp ); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function swapTokensForTokens(uint256 tokenAmount, address recipient) private { // generate the uniswap pair path of weth -> busd address[] memory path = new address[](3); path[0] = address(this); path[1] = uniswapV2Router.WETH(); path[2] = DividendToken; _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of BUSD path, recipient, block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) internal { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable burnAddress, block.timestamp ); } function _transfer( address from, address to, uint256 amount ) internal override { require(!_isBlacklisted[from], "Blacklisted address cannot transfer!"); require(!_isBlacklisted[to], "Blacklisted address cannot transfer!"); require(from != address(0), "ERC20: transfer to the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if(amount == 0) { super._transfer(from, to, 0); return; } bool buyOrSell = false; if ( from != owner() && to != address(0) && to != address(0xdead) && automatedMarketMakerPairs[from] ) { if(!_isExcludedFromLimits[from]){ require( amount <= maxBuyTransactionAmount, "Transfer amount exceeds the maxTxAmount." ); } previousMarketFee = marketFee; previousCharityFee = charityFee; previousBuyBackFee = buyBackFee; previousTokenRewardsFee = tokenRewardsFee; previousLiquidityFee = liquidityFee; previousBurnFee = liquidityFee; previousTotalFees = totalFees; marketFee = buyMarketFee; charityFee = buyCharityFee; buyBackFee = buyBuyBackFee; tokenRewardsFee = buyTokenRewardsFee; liquidityFee = buyLiquidityFee; burnFee = buyBurnFee; totalFees = buyTotalFees; buyOrSell = true; } bool tradingIsEnabled = getTradingIsEnabled(); if(!tradingIsEnabled) { require(canTransferBeforeTradingIsEnabled[from], " AFU: This account cannot send tokens until trading is enabled"); } if( from != owner() && !swapping && tradingIsEnabled && automatedMarketMakerPairs[to] && // sells only by detecting transfer to automated market maker pair from != address(uniswapV2Router) && //router -> pair is removing liquidity which shouldn't have max !_isExcludedFromFees[to] //no max for those excluded from fees ) { // sets reset if(firstsell[from] + sellLimitTime < block.timestamp){ sellnumber[from] = 0; } if(!_isExcludedFromLimits[from]){ require(amount + sellnumber[from] <= maxSellTransactionAmount, "Sell transfer amount exceeds the maxSellAmount for the given time."); //require(sellcooldown[from] < block.timestamp, "Wait for sell cooldown!"); } // increment existing amount or restart if (sellnumber[from] > 0) { sellnumber[from] += amount; }else{ firstsell[from] = block.timestamp; //sellcooldown[from] = block.timestamp + sellLimitTime; sellnumber[from] += amount; } // previousMarketFee = marketFee; previousCharityFee = charityFee; previousBuyBackFee = buyBackFee; previousTokenRewardsFee = tokenRewardsFee; previousLiquidityFee = liquidityFee; previousBurnFee = burnFee; previousTotalFees = totalFees; marketFee = sellMarketFee; charityFee = sellCharityFee; buyBackFee = sellBuyBackFee; tokenRewardsFee = sellTokenRewardsFee; liquidityFee = sellLiquidityFee; burnFee = sellBurnFee; totalFees = sellTotalFees; buyOrSell = true; } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if( tradingIsEnabled && canSwap && !swapping && !automatedMarketMakerPairs[from] && from != burnAddress && to != burnAddress ) { swapping = true; // added to sell this amount set instead of just trigger //contractTokenBalance = swapTokensAtAmount; //uint256 swapTokens = contractTokenBalance.mul(liquidityFee).div(totalFees); swapAndLiquify(swapTokensAtAmount); uint256 sellTokens = balanceOf(address(this)); swapAndSendDividends(sellTokens); swapping = false; } bool takeFee = tradingIsEnabled && !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFees[from] || _isExcludedFromFees[to] || isTransferFeesDisabled) { takeFee = false; } if(takeFee || buyOrSell ) { if(_isExcludedFromFees[from] || _isExcludedFromFees[to]){ // exclude fees from those excluded from fees in case of buy or sell }else{ uint256 calcFee = totalFees.sub(burnFee); uint256 feeAmount = amount.mul(calcFee).div(100); uint burnAmount = amount.mul(burnFee).div(100); amount = amount.sub(feeAmount).sub(burnAmount); super._transfer(from, address(this), feeAmount); super._transfer(from, burnAddress, burnAmount); } }else{ if(_isExcludedFromFees[from] || _isExcludedFromFees[to]){ // exclude burn from those excluded from fees }else{ uint burnAmount = amount.mul(burnFee).div(100); amount = amount.sub(burnAmount); super._transfer(from, burnAddress, burnAmount); } } super._transfer(from, to, amount); restoreFees(); try dividendTracker.setBalance(payable(from), balanceOf(from)) {} catch {} try dividendTracker.setBalance(payable(to), balanceOf(to)) {} catch {} bool canDividend = block.timestamp >= processDividendTime; if(!swapping && canDividend) { uint256 gas = gasForProcessing; processDividendTime += dividendTime; try dividendTracker.process(gas) returns (uint256 iterations, uint256 claims, uint256 lastProcessedIndex) { emit ProcessedDividendTracker(iterations, claims, lastProcessedIndex, true, gas, tx.origin); } catch { } } } } contract AFUDividendTracker is DividendPayingToken, Ownable { using SafeMath for uint256; using SafeMathInt for int256; using IterableMapping for IterableMapping.Map; IterableMapping.Map private tokenHoldersMap; uint256 public lastProcessedIndex; mapping (address => bool) public excludedFromDividends; mapping (address => uint256) public lastClaimTimes; uint256 public claimWait; uint256 public minimumTokenBalanceForDividends; event ExcludeFromDividends(address indexed account); event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue); event Claim(address indexed account, uint256 amount, bool indexed automatic); constructor() public DividendPayingToken(" AFU_Dividend_Tracker", " AFU_Dividend_Tracker") { claimWait = 3600; minimumTokenBalanceForDividends = 1 * (10**18); } function updateMinimumBalanceForDividends(uint256 newAmountNoDecimials) external onlyOwner{ minimumTokenBalanceForDividends = newAmountNoDecimials * (10**18); } function updateTokenForDividend(address newAddress) external onlyOwner { DividendToken = newAddress; } function _transfer(address, address, uint256) internal override { require(false, " AFU_Dividend_Tracker: No transfers allowed"); } function withdrawDividend() public override { require(false, " AFU_Dividend_Tracker: withdrawDividend disabled. Use the 'claim' function on the main AFU contract."); } function excludeFromDividends(address account) external onlyOwner { //require(!excludedFromDividends[account]); excludedFromDividends[account] = true; _setBalance(account, 0); tokenHoldersMap.remove(account); //emit ExcludeFromDividends(account); } function enableDividends(address account) external onlyOwner { //require(!excludedFromDividends[account]); excludedFromDividends[account] = false; //emit ExcludeFromDividends(account); } function updateClaimWait(uint256 newClaimWait) external onlyOwner { require(newClaimWait >= 3600 && newClaimWait <= 86400, " AFU_Dividend_Tracker: claimWait must be updated to between 1 and 24 hours"); require(newClaimWait != claimWait, " AFU_Dividend_Tracker: Cannot update claimWait to same value"); emit ClaimWaitUpdated(newClaimWait, claimWait); claimWait = newClaimWait; } function getLastProcessedIndex() external view returns(uint256) { return lastProcessedIndex; } function getNumberOfTokenHolders() external view returns(uint256) { return tokenHoldersMap.keys.length; } function getAccount(address _account) public view returns ( address account, int256 index, int256 iterationsUntilProcessed, uint256 withdrawableDividends, uint256 totalDividends, uint256 lastClaimTime, uint256 nextClaimTime, uint256 secondsUntilAutoClaimAvailable) { account = _account; index = tokenHoldersMap.getIndexOfKey(account); iterationsUntilProcessed = -1; if(index >= 0) { if(uint256(index) > lastProcessedIndex) { iterationsUntilProcessed = index.sub(int256(lastProcessedIndex)); } else { uint256 processesUntilEndOfArray = tokenHoldersMap.keys.length > lastProcessedIndex ? tokenHoldersMap.keys.length.sub(lastProcessedIndex) : 0; iterationsUntilProcessed = index.add(int256(processesUntilEndOfArray)); } } withdrawableDividends = withdrawableDividendOf(account); totalDividends = accumulativeDividendOf(account); lastClaimTime = lastClaimTimes[account]; nextClaimTime = lastClaimTime > 0 ? lastClaimTime.add(claimWait) : 0; secondsUntilAutoClaimAvailable = nextClaimTime > block.timestamp ? nextClaimTime.sub(block.timestamp) : 0; } function getAccountAtIndex(uint256 index) public view returns ( address, int256, int256, uint256, uint256, uint256, uint256, uint256) { if(index >= tokenHoldersMap.size()) { return (0x0000000000000000000000000000000000000000, -1, -1, 0, 0, 0, 0, 0); } address account = tokenHoldersMap.getKeyAtIndex(index); return getAccount(account); } function canAutoClaim(uint256 lastClaimTime) private view returns (bool) { if(lastClaimTime > block.timestamp) { return false; } return block.timestamp.sub(lastClaimTime) >= claimWait; } function setBalance(address payable account, uint256 newBalance) external onlyOwner { if(excludedFromDividends[account]) { return; } if(newBalance >= minimumTokenBalanceForDividends) { _setBalance(account, newBalance); tokenHoldersMap.set(account, newBalance); } else { _setBalance(account, 0); tokenHoldersMap.remove(account); } processAccount(account, true); } function process(uint256 gas) public returns (uint256, uint256, uint256) { uint256 numberOfTokenHolders = tokenHoldersMap.keys.length; if(numberOfTokenHolders == 0) { return (0, 0, lastProcessedIndex); } uint256 _lastProcessedIndex = lastProcessedIndex; uint256 gasUsed = 0; uint256 gasLeft = gasleft(); uint256 iterations = 0; uint256 claims = 0; while(gasUsed < gas && iterations < numberOfTokenHolders) { _lastProcessedIndex++; if(_lastProcessedIndex >= tokenHoldersMap.keys.length) { _lastProcessedIndex = 0; } address account = tokenHoldersMap.keys[_lastProcessedIndex]; if(canAutoClaim(lastClaimTimes[account])) { if(processAccount(payable(account), true)) { claims++; } } iterations++; uint256 newGasLeft = gasleft(); if(gasLeft > newGasLeft) { gasUsed = gasUsed.add(gasLeft.sub(newGasLeft)); } gasLeft = newGasLeft; } lastProcessedIndex = _lastProcessedIndex; return (iterations, claims, lastProcessedIndex); } function processAccount(address payable account, bool automatic) public onlyOwner returns (bool) { uint256 amount = _withdrawDividendOfUser(account); if(amount > 0) { lastClaimTimes[account] = block.timestamp; emit Claim(account, amount, automatic); return true; } return false; } }
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":"newBurnWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldBurnWallet","type":"address"}],"name":"BurnWalletUpdated","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":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedMaxSellTransactionAmount","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":false,"internalType":"uint256","name":"iterations","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claims","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastProcessedIndex","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"},{"indexed":false,"internalType":"uint256","name":"gas","type":"uint256"},{"indexed":true,"internalType":"address","name":"processor","type":"address"}],"name":"ProcessedDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SendDividends","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":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","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":"UpdateDividendToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateDividendTracker","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"},{"inputs":[],"name":"DividendToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"blacklistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountNoDecimals","type":"uint256"}],"name":"burnTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyBackAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackTokenAddressForFee","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBuyBackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyCharityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTokenRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"buycooldown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"charityAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"charityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"charityTokenAddressForFee","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","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":[],"name":"dividendTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"dividendTokenBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendTracker","outputs":[{"internalType":"contract AFUDividendTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"enableDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromDividends","outputs":[],"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":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromLimits","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":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"firstsell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gasForProcessing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccountDividendsInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getAccountDividendsInfoAtIndex","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getClaimWait","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastProcessedIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfDividendTokenHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDividendsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTradingIsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isBuyBackActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"isExcludedFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTransferFeesDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketTokenAddressForFee","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"presaleAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"processDividendTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"processDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellBuyBackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellCharityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLimitTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTokenRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"sellcooldown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"sellnumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokens","type":"uint256"}],"name":"swapAndLiquifyOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokens","type":"uint256"}],"name":"swapAndSendDividendsOwner","outputs":[],"stateMutability":"nonpayable","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":"tokenRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabledTimestamp","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 payable","name":"newAddress","type":"address"}],"name":"updateBuyBackAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isBuyBackActive","type":"bool"}],"name":"updateBuyBackMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateBuyBackTokenFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenRewardsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketFee","type":"uint256"},{"internalType":"uint256","name":"_charityFee","type":"uint256"},{"internalType":"uint256","name":"_buyBackFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newAddress","type":"address"}],"name":"updateCharityAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateCharityTokenFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"claimWait","type":"uint256"}],"name":"updateClaimWait","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenRewardsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketFee","type":"uint256"},{"internalType":"uint256","name":"_charityFee","type":"uint256"},{"internalType":"uint256","name":"_buyBackFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"updateGasForProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newAddress","type":"address"}],"name":"updateMarketAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateMarketTokenFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmountNoDecimals","type":"uint256"}],"name":"updateMaxBuyTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmountNoDecimals","type":"uint256"}],"name":"updateMaxSellTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmountNoDecimials","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmountNoDecimials","type":"uint256"}],"name":"updateMinimumBalanceForDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenRewardsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketFee","type":"uint256"},{"internalType":"uint256","name":"_charityFee","type":"uint256"},{"internalType":"uint256","name":"_buyBackFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newTime","type":"uint256"}],"name":"updateSellLimitTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmountNoDecimials","type":"uint256"}],"name":"updateSwapAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateTokenForDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTimeInEpoch","type":"uint256"}],"name":"updateTradingEnabledTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_dividendTime","type":"uint256"}],"name":"updatedividendTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isTransferDisabled","type":"bool"}],"name":"updateisTransferDisabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_presaleAddress","type":"address"},{"internalType":"address","name":"_routerAddress","type":"address"}],"name":"whitelistDxSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a0604052600780546001600160a01b03191690556b024306c4097859c43c000000600a819055600b819055600c819055600d5562015180600e5560006019819055601a819055601b819055601c819055601d819055601e81905562000091906200007d818181818181818062000755602090811b62003df717901c565b6200075560201b62003df71790919060201c565b601f55600060205560006021556000602255600060235560006024556000602555620000ec6025546200007d6022546200007d6021546200007d6020546200007d6024546023546200075560201b62003df71790919060201c565b6026556000602755600060285560006029556000602a556000602b556000602c5562000147602c546200007d6029546200007d6028546200007d6027546200007d602b54602a546200075560201b62003df71790919060201c565b602d55601954602e55601a54602f55601b54603055601c54603155601d54603255601e54603355601f54603455610e106036556037805461ffff19169055620493e0603855603980546001600160a01b03191690556360f0e1a2603a55348015620001b157600080fd5b50604080518082018252601581527f416e696d616c20467269656e647320556e6974656400000000000000000000006020808301918252835180850190945260048452632041465560e01b908401528151919291620002139160039162000ac3565b5080516200022990600490602084019062000ac3565b50506005805460ff1916601217905550600062000245620007b7565b60058054610100600160a81b0319166101006001600160a01b03841690810291909117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600980546001600160a01b03191661dead179055426035819055604051620002c39062000b58565b604051809103906000f080158015620002e0573d6000803e3d6000fd5b50600860006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060007310ed43c718714eb63d5aa57b78b54704e256024e90506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200035c57600080fd5b505afa15801562000371573d6000803e3d6000fd5b505050506040513d60208110156200038857600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263c9c653969230929187169163ad5c464891600480820192602092909190829003018186803b158015620003d957600080fd5b505afa158015620003ee573d6000803e3d6000fd5b505050506040513d60208110156200040557600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b1580156200045857600080fd5b505af11580156200046d573d6000803e3d6000fd5b505050506040513d60208110156200048457600080fd5b5051600680546001600160a01b0319166001600160a01b038516179055606081901b6001600160601b0319166080529050620004c2816001620007bb565b6008546040805163031e79db60e41b81526001600160a01b0390921660048301819052905190916331e79db091602480830192600092919082900301818387803b1580156200051057600080fd5b505af115801562000525573d6000803e3d6000fd5b50506008546040805163031e79db60e41b815230600482015290516001600160a01b0390921693506331e79db0925060248082019260009290919082900301818387803b1580156200057657600080fd5b505af11580156200058b573d6000803e3d6000fd5b50506008546040805163031e79db60e41b81526001600160a01b03878116600483015291519190921693506331e79db09250602480830192600092919082900301818387803b158015620005de57600080fd5b505af1158015620005f3573d6000803e3d6000fd5b50506008546001600160a01b031691506331e79db0905062000614620008ee565b6040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156200065457600080fd5b505af115801562000669573d6000803e3d6000fd5b5050603d60208190526001600160a01b0385166000908152909250905062000690620008ee565b6001600160a01b039081168252602091820192909252828216600052603d9052600954620006c19116600162000902565b620006ce30600162000902565b620006e4620006dc620008ee565b600162000902565b6001603e6000620006f4620008ee565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556200074c6200072a620008ee565b62000734620009a6565b60ff16600a0a6329b9270002620009af60201b60201c565b50505062000b7d565b600082820183811015620007b0576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3390565b6001600160a01b0382166000908152603f602052604090205460ff16151581151514156200081b5760405162461bcd60e51b815260040180806020018281038252603e815260200180620091d0603e913960400191505060405180910390fd5b6001600160a01b0382166000908152603f60205260409020805460ff19168215801591909117909155620008b2576008546040805163031e79db60e41b81526001600160a01b038581166004830152915191909216916331e79db091602480830192600092919082900301818387803b1580156200089857600080fd5b505af1158015620008ad573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b60055461010090046001600160a01b031690565b6200090c620007b7565b6001600160a01b03166200091f620008ee565b6001600160a01b0316146200097b576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b03919091166000908152603c60205260409020805460ff1916911515919091179055565b60055460ff1690565b6001600160a01b03821662000a0b576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b62000a196000838362000abe565b62000a35816002546200075560201b62003df71790919060201c565b6002556001600160a01b0382166000908152602081815260409091205462000a6891839062003df762000755821b17901c565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b505050565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928262000afb576000855562000b46565b82601f1062000b1657805160ff191683800117855562000b46565b8280016001018555821562000b46579182015b8281111562000b4657825182559160200191906001019062000b29565b5062000b5492915062000b66565b5090565b61293d806200689383390190565b5b8082111562000b54576000815560010162000b67565b60805160601c615cf362000ba060003980612093528061303e5250615cf36000f3fe6080604052600436106106d75760003560e01c80637a41865b1161037a578063c0a904a2116101d1578063e708a0f911610102578063f11a24d3116100a0578063f63743421161007a578063f6374342146117d9578063f7822e09146117ee578063fa280d4414611818578063fce589d814611842576106de565b8063f11a24d314611767578063f27fd2541461177c578063f2fde38b146117a6576106de565b8063e7841ec0116100dc578063e7841ec0146116e9578063e98030c7146116fe578063e9d3d61e14611728578063ecfca89914611752576106de565b8063e708a0f9146116aa578063e71dc3f5146116bf578063e76ed0e3146116d4576106de565b8063d4d90c251161016f578063dd62ed3e11610149578063dd62ed3e14611619578063e2f4560514611654578063e371f7cf14611669578063e4a1b95f14611695576106de565b8063d4d90c25146115bc578063d644c365146115d1578063d85ba06314611604576106de565b8063c55d2287116101ab578063c55d2287146114cb578063c6e5a5ab146114f5578063c9fa039614611574578063d2630cc314611589576106de565b8063c0a904a2146113e7578063c18bc19514611422578063c492f0461461144c576106de565b80639a7a23d6116102ab578063a9059cbb11610249578063ae5a17a711610223578063ae5a17a714611331578063afcf2fc414611364578063b62496f514611379578063c0246668146113ac576106de565b8063a9059cbb14611265578063ad56c13c1461129e578063adb873bd1461131c576106de565b8063a26579ad11610285578063a26579ad146111b1578063a457c2d7146111c6578063a5afbcb8146111ff578063a8b9d24014611232576106de565b80639a7a23d61461114c5780639c1b8af514611187578063a1dc92bc1461119c576106de565b806394305f4e11610318578063974d628c116102f2578063974d628c146110a757806398118cb4146110bc57806398eac156146110d1578063992c58e414611104576106de565b806394305f4e14611068578063956236411461107d57806395d89b4114611092576106de565b806388bdd9be1161035457806388bdd9be14610fc35780638ae1cf2214610ff65780638da5cb5b146110295780638f7142601461103e576106de565b80637a41865b14610f3357806381dcc26614610f66578063871c128d14610f99576106de565b80633d0c89631161052e5780635cce86cd1161045f578063700bb191116103fd578063715018a6116103d7578063715018a614610eac57806378109e5414610ec1578063783478ad14610ed657806379e02b4414610eeb576106de565b8063700bb19114610e3a57806370a0823114610e6457806370d5ae0514610e97576106de565b806365b8dbc01161043957806365b8dbc014610d955780636843cd8414610dc85780636a486a8e14610dfb5780636d1b229d14610e10576106de565b80635cce86cd14610d23578063616c594614610d5657806364b0f65314610d80576106de565b80634be8f8b1116104cc5780634e83ff6f116104a65780634e83ff6f14610c745780634fbee19314610caf57806354503bf714610ce25780635aa821a914610d0e576106de565b80634be8f8b114610c355780634d33b1ef14610c4a5780634e71d92d14610c5f576106de565b8063425b682e11610508578063425b682e14610bbb578063455a439614610bd0578063486b6d8614610c0b57806349bd5a5e14610c20576106de565b80633d0c896314610b2b5780633fe9092214610b5e578063407e378714610b91576106de565b80631fe70a981161060857806330bb4cff116105a657806335b5fb631161058057806335b5fb6314610a9e57806338b7692314610ab35780633950935114610ac85780633b364da814610b01576106de565b806330bb4cff14610a2b578063313ce56714610a4057806331e79db014610a6b576106de565b8063255e9d0a116105e2578063255e9d0a146109c257806325b61703146109d757806325e47531146109ec5780632c1f521614610a16576106de565b80631fe70a981461092057806322d3e2aa1461093557806323b872dd1461097f576106de565b8063122fe685116106755780631694505e1161064f5780631694505e146108ae57806318160ddd146108c35780631a221dbb146108d85780631bc8b18f146108ed576106de565b8063122fe685146108355780631283f1ca1461086657806313114a9d14610899576106de565b806308b2a12c116106b157806308b2a12c146107a9578063095ea7b3146107be5780630ccf21561461080b5780630d7f144114610820576106de565b806302259e9e146106e357806302df64d61461070a57806306fdde031461071f576106de565b366106de57005b600080fd5b3480156106ef57600080fd5b506106f8611857565b60408051918252519081900360200190f35b34801561071657600080fd5b506106f861185d565b34801561072b57600080fd5b50610734611863565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561076e578181015183820152602001610756565b50505050905090810190601f16801561079b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156107b557600080fd5b506106f86118f9565b3480156107ca57600080fd5b506107f7600480360360408110156107e157600080fd5b506001600160a01b0381351690602001356118ff565b604080519115158252519081900360200190f35b34801561081757600080fd5b506106f861191d565b34801561082c57600080fd5b506106f8611923565b34801561084157600080fd5b5061084a611929565b604080516001600160a01b039092168252519081900360200190f35b34801561087257600080fd5b506106f86004803603602081101561088957600080fd5b50356001600160a01b0316611938565b3480156108a557600080fd5b506106f861194a565b3480156108ba57600080fd5b5061084a611950565b3480156108cf57600080fd5b506106f861195f565b3480156108e457600080fd5b506106f8611965565b3480156108f957600080fd5b506106f86004803603602081101561091057600080fd5b50356001600160a01b031661196b565b34801561092c57600080fd5b506106f861197d565b34801561094157600080fd5b5061097d600480360360c081101561095857600080fd5b5080359060208101359060408101359060608101359060808101359060a00135611983565b005b34801561098b57600080fd5b506107f7600480360360608110156109a257600080fd5b506001600160a01b03813581169160208101359091169060400135611a28565b3480156109ce57600080fd5b506106f8611aaf565b3480156109e357600080fd5b506106f8611ab5565b3480156109f857600080fd5b5061097d60048036036020811015610a0f57600080fd5b5035611abb565b348015610a2257600080fd5b5061084a611b22565b348015610a3757600080fd5b506106f8611b31565b348015610a4c57600080fd5b50610a55611ba7565b6040805160ff9092168252519081900360200190f35b348015610a7757600080fd5b5061097d60048036036020811015610a8e57600080fd5b50356001600160a01b0316611bb0565b348015610aaa57600080fd5b506106f8611c7b565b348015610abf57600080fd5b5061084a611c81565b348015610ad457600080fd5b506107f760048036036040811015610aeb57600080fd5b506001600160a01b038135169060200135611c90565b348015610b0d57600080fd5b5061097d60048036036020811015610b2457600080fd5b5035611cde565b348015610b3757600080fd5b5061097d60048036036020811015610b4e57600080fd5b50356001600160a01b0316611d8d565b348015610b6a57600080fd5b5061097d60048036036020811015610b8157600080fd5b50356001600160a01b0316611ea5565b348015610b9d57600080fd5b5061097d60048036036020811015610bb457600080fd5b5035611f29565b348015610bc757600080fd5b506107f7611f97565b348015610bdc57600080fd5b5061097d60048036036040811015610bf357600080fd5b506001600160a01b0381351690602001351515611fa0565b348015610c1757600080fd5b506107f7612083565b348015610c2c57600080fd5b5061084a612091565b348015610c4157600080fd5b506106f86120b5565b348015610c5657600080fd5b506107f76120bb565b348015610c6b57600080fd5b5061097d6120c4565b348015610c8057600080fd5b5061097d60048036036040811015610c9757600080fd5b506001600160a01b0381358116916020013516612149565b348015610cbb57600080fd5b506107f760048036036020811015610cd257600080fd5b50356001600160a01b03166122d1565b348015610cee57600080fd5b5061097d60048036036020811015610d0557600080fd5b503515156122ef565b348015610d1a57600080fd5b506106f8612364565b348015610d2f57600080fd5b506107f760048036036020811015610d4657600080fd5b50356001600160a01b031661236a565b348015610d6257600080fd5b5061097d60048036036020811015610d7957600080fd5b5035612388565b348015610d8c57600080fd5b506106f86123ef565b348015610da157600080fd5b5061097d60048036036020811015610db857600080fd5b50356001600160a01b0316612434565b348015610dd457600080fd5b506106f860048036036020811015610deb57600080fd5b50356001600160a01b0316612540565b348015610e0757600080fd5b506106f86125c3565b348015610e1c57600080fd5b5061097d60048036036020811015610e3357600080fd5b50356125c9565b348015610e4657600080fd5b5061097d60048036036020811015610e5d57600080fd5b503561265a565b348015610e7057600080fd5b506106f860048036036020811015610e8757600080fd5b50356001600160a01b0316612741565b348015610ea357600080fd5b5061084a61275c565b348015610eb857600080fd5b5061097d61276b565b348015610ecd57600080fd5b506106f861281d565b348015610ee257600080fd5b5061084a612823565b348015610ef757600080fd5b5061097d600480360360c0811015610f0e57600080fd5b5080359060208101359060408101359060608101359060808101359060a00135612832565b348015610f3f57600080fd5b506106f860048036036020811015610f5657600080fd5b50356001600160a01b03166128d1565b348015610f7257600080fd5b506106f860048036036020811015610f8957600080fd5b50356001600160a01b03166128e3565b348015610fa557600080fd5b5061097d60048036036020811015610fbc57600080fd5b50356128f5565b348015610fcf57600080fd5b5061097d60048036036020811015610fe657600080fd5b50356001600160a01b0316612a1c565b34801561100257600080fd5b5061097d6004803603602081101561101957600080fd5b50356001600160a01b0316612d0f565b34801561103557600080fd5b5061084a612dab565b34801561104a57600080fd5b5061097d6004803603602081101561106157600080fd5b5035612dbf565b34801561107457600080fd5b506106f8612e35565b34801561108957600080fd5b5061084a612e3b565b34801561109e57600080fd5b50610734612e4a565b3480156110b357600080fd5b506106f8612eab565b3480156110c857600080fd5b506106f8612eb1565b3480156110dd57600080fd5b5061097d600480360360208110156110f457600080fd5b50356001600160a01b0316612eb7565b34801561111057600080fd5b5061097d600480360360c081101561112757600080fd5b5080359060208101359060408101359060608101359060808101359060a00135612f3b565b34801561115857600080fd5b5061097d6004803603604081101561116f57600080fd5b506001600160a01b0381351690602001351515612fda565b34801561119357600080fd5b506106f86130b7565b3480156111a857600080fd5b506106f86130bd565b3480156111bd57600080fd5b506106f86130c3565b3480156111d257600080fd5b506107f7600480360360408110156111e957600080fd5b506001600160a01b038135169060200135613108565b34801561120b57600080fd5b5061097d6004803603602081101561122257600080fd5b50356001600160a01b0316613170565b34801561123e57600080fd5b506106f86004803603602081101561125557600080fd5b50356001600160a01b031661320c565b34801561127157600080fd5b506107f76004803603604081101561128857600080fd5b506001600160a01b03813516906020013561325d565b3480156112aa57600080fd5b506112d1600480360360208110156112c157600080fd5b50356001600160a01b0316613271565b604080516001600160a01b0390991689526020890197909752878701959095526060870193909352608086019190915260a085015260c084015260e083015251908190036101000190f35b34801561132857600080fd5b506106f8613351565b34801561133d57600080fd5b5061097d6004803603602081101561135457600080fd5b50356001600160a01b0316613357565b34801561137057600080fd5b5061084a6133f3565b34801561138557600080fd5b506107f76004803603602081101561139c57600080fd5b50356001600160a01b0316613402565b3480156113b857600080fd5b5061097d600480360360408110156113cf57600080fd5b506001600160a01b0381351690602001351515613417565b3480156113f357600080fd5b5061097d6004803603604081101561140a57600080fd5b506001600160a01b03813516906020013515156134a4565b34801561142e57600080fd5b5061097d6004803603602081101561144557600080fd5b5035613531565b34801561145857600080fd5b5061097d6004803603604081101561146f57600080fd5b81019060208101813564010000000081111561148a57600080fd5b82018360208201111561149c57600080fd5b803590602001918460208302840111640100000000831117156114be57600080fd5b91935091503515156135a7565b3480156114d757600080fd5b5061097d600480360360208110156114ee57600080fd5b50356136d1565b34801561150157600080fd5b5061097d6004803603604081101561151857600080fd5b81019060208101813564010000000081111561153357600080fd5b82018360208201111561154557600080fd5b8035906020019184602083028401116401000000008311171561156757600080fd5b9193509150351515613747565b34801561158057600080fd5b5061084a613804565b34801561159557600080fd5b5061097d600480360360208110156115ac57600080fd5b50356001600160a01b0316613813565b3480156115c857600080fd5b5061084a613897565b3480156115dd57600080fd5b5061097d600480360360208110156115f457600080fd5b50356001600160a01b03166138a6565b34801561161057600080fd5b506106f8613956565b34801561162557600080fd5b506106f86004803603604081101561163c57600080fd5b506001600160a01b038135811691602001351661395c565b34801561166057600080fd5b506106f8613987565b34801561167557600080fd5b5061097d6004803603602081101561168c57600080fd5b5035151561398d565b3480156116a157600080fd5b506106f8613a09565b3480156116b657600080fd5b506106f8613a0f565b3480156116cb57600080fd5b506106f8613a15565b3480156116e057600080fd5b5061084a613a1b565b3480156116f557600080fd5b506106f8613a2a565b34801561170a57600080fd5b5061097d6004803603602081101561172157600080fd5b5035613a6f565b34801561173457600080fd5b5061097d6004803603602081101561174b57600080fd5b5035613b1e565b34801561175e57600080fd5b506106f8613b89565b34801561177357600080fd5b506106f8613b8f565b34801561178857600080fd5b506112d16004803603602081101561179f57600080fd5b5035613b95565b3480156117b257600080fd5b5061097d600480360360208110156117c957600080fd5b50356001600160a01b0316613bfb565b3480156117e557600080fd5b506106f8613d09565b3480156117fa57600080fd5b5061097d6004803603602081101561181157600080fd5b5035613d0f565b34801561182457600080fd5b5061097d6004803603602081101561183b57600080fd5b5035613d76565b34801561184e57600080fd5b506106f8613df1565b600b5481565b60235481565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156118ef5780601f106118c4576101008083540402835291602001916118ef565b820191906000526020600020905b8154815290600101906020018083116118d257829003601f168201915b5050505050905090565b602a5481565b600061191361190c613e58565b8484613e5c565b5060015b92915050565b60195481565b60285481565b6039546001600160a01b031681565b600f6020526000908152604090205481565b601f5481565b6006546001600160a01b031681565b60025490565b60295481565b60116020526000908152604090205481565b60225481565b61198b613e58565b6001600160a01b031661199c612dab565b6001600160a01b0316146119e5576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b602a869055602b859055602784905560288390556029829055602c819055611a1d81611a17848187818a818e8e613df7565b90613df7565b602d55505050505050565b6000611a35848484613f48565b611aa584611a41613e58565b611aa085604051806060016040528060288152602001615b45602891396001600160a01b038a16600090815260016020526040812090611a7f613e58565b6001600160a01b031681526020810191909152604001600020549190614934565b613e5c565b5060019392505050565b60365481565b603a5481565b611ac3613e58565b6001600160a01b0316611ad4612dab565b6001600160a01b031614611b1d576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b600e55565b6008546001600160a01b031681565b600854604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae916004808301926020929190829003018186803b158015611b7657600080fd5b505afa158015611b8a573d6000803e3d6000fd5b505050506040513d6020811015611ba057600080fd5b5051905090565b60055460ff1690565b611bb8613e58565b6001600160a01b0316611bc9612dab565b6001600160a01b031614611c12576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b6008546040805163031e79db60e41b81526001600160a01b038481166004830152915191909216916331e79db091602480830192600092919082900301818387803b158015611c6057600080fd5b505af1158015611c74573d6000803e3d6000fd5b5050505050565b60275481565b6018546001600160a01b031681565b6000611913611c9d613e58565b84611aa08560016000611cae613e58565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490613df7565b611ce6613e58565b6001600160a01b0316611cf7612dab565b6001600160a01b031614611d40576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b60085460408051630766c9b560e31b81526004810184905290516001600160a01b0390921691633b364da89160248082019260009290919082900301818387803b158015611c6057600080fd5b611d95613e58565b6001600160a01b0316611da6612dab565b6001600160a01b031614611def576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b60085460408051633d0c896360e01b81526001600160a01b03848116600483015291519190921691633d0c896391602480830192600092919082900301818387803b158015611e3d57600080fd5b505af1158015611e51573d6000803e3d6000fd5b5050600780546001600160a01b0319166001600160a01b03858116918217928390556040519216935091507fc50953975bfb7dc05da466bc18236bf737c11097c9cc7ef9d079bc7ed96f03ae90600090a350565b611ead613e58565b6001600160a01b0316611ebe612dab565b6001600160a01b031614611f07576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b601780546001600160a01b0319166001600160a01b0392909216919091179055565b611f31613e58565b6001600160a01b0316611f42612dab565b6001600160a01b031614611f8b576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b611f94816149cb565b50565b60375460ff1681565b611fa8613e58565b6001600160a01b0316611fb9612dab565b6001600160a01b031614612002576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b6001600160a01b038281166000818152603b6020526040808220805460ff1916861515179055600854815163031e79db60e41b8152600481019490945290519316926331e79db092602480820193929182900301818387803b15801561206757600080fd5b505af115801561207b573d6000803e3d6000fd5b505050505050565b603754610100900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b601b5481565b603a5442101590565b6008546040805163bc4c4b3760e01b815233600482015260006024820181905291516001600160a01b039093169263bc4c4b3792604480840193602093929083900390910190829087803b15801561211b57600080fd5b505af115801561212f573d6000803e3d6000fd5b505050506040513d602081101561214557600080fd5b5050565b612151613e58565b6001600160a01b0316612162612dab565b6001600160a01b0316146121ab576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b603980546001600160a01b0319166001600160a01b03848116918217928390559182166000908152603e6020526040808220805460ff19166001179055600854815163031e79db60e41b8152600481019490945290519316926331e79db092602480820193929182900301818387803b15801561222757600080fd5b505af115801561223b573d6000803e3d6000fd5b5050505061224a826001613417565b6001600160a01b038082166000818152603e6020526040808220805460ff19166001179055600854815163031e79db60e41b8152600481019490945290519316926331e79db092602480820193929182900301818387803b1580156122ae57600080fd5b505af11580156122c2573d6000803e3d6000fd5b50505050612145816001613417565b6001600160a01b03166000908152603c602052604090205460ff1690565b6122f7613e58565b6001600160a01b0316612308612dab565b6001600160a01b031614612351576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b6037805460ff1916911515919091179055565b600a5481565b6001600160a01b03166000908152603d602052604090205460ff1690565b612390613e58565b6001600160a01b03166123a1612dab565b6001600160a01b0316146123ea576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b603a55565b600854604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde916004808301926020929190829003018186803b158015611b7657600080fd5b61243c613e58565b6001600160a01b031661244d612dab565b6001600160a01b031614612496576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b6006546001600160a01b03828116911614156124e35760405162461bcd60e51b81526004018080602001828103825260298152602001806159156029913960400191505060405180910390fd5b6006546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b600854604080516370a0823160e01b81526001600160a01b038481166004830152915160009392909216916370a0823191602480820192602092909190829003018186803b15801561259157600080fd5b505afa1580156125a5573d6000803e3d6000fd5b505050506040513d60208110156125bb57600080fd5b505192915050565b602d5481565b6125d1613e58565b6001600160a01b03166125e2612dab565b6001600160a01b03161461262b576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b6000612635611ba7565b60095460ff91909116600a0a830291506121459030906001600160a01b031683614d11565b600854604080516001624d3b8760e01b03198152600481018490529051600092839283926001600160a01b039092169163ffb2c4799160248082019260609290919082900301818787803b1580156126b157600080fd5b505af11580156126c5573d6000803e3d6000fd5b505050506040513d60608110156126db57600080fd5b5080516020808301516040938401518451848152928301829052828501819052606083018990529351929650945091925032916000917fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989181900360800190a350505050565b6001600160a01b031660009081526020819052604090205490565b6009546001600160a01b031681565b612773613e58565b6001600160a01b0316612784612dab565b6001600160a01b0316146127cd576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b60055460405160009161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360058054610100600160a81b0319169055565b600d5481565b6015546001600160a01b031681565b61283a613e58565b6001600160a01b031661284b612dab565b6001600160a01b031614612894576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b6023869055602485905560208490556021839055602282905560258190556128c681611a17848187818a818e8e613df7565b602655505050505050565b60106020526000908152604090205481565b60126020526000908152604090205481565b6128fd613e58565b6001600160a01b031661290e612dab565b6001600160a01b031614612957576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b62030d40811015801561296d57506207a1208111155b6129a85760405162461bcd60e51b815260040180806020018281038252603a815260200180615bf0603a913960400191505060405180910390fd5b6038548114156129e95760405162461bcd60e51b8152600401808060200182810382526032815260200180615af26032913960400191505060405180910390fd5b60385460405182907f40d7e40e79af4e8e5a9b3c57030d8ea93f13d669c06d448c4d631d4ae7d23db790600090a3603855565b612a24613e58565b6001600160a01b0316612a35612dab565b6001600160a01b031614612a7e576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b6008546001600160a01b0382811691161415612acb5760405162461bcd60e51b8152600401808060200182810382526033815260200180615a366033913960400191505060405180910390fd5b6000819050306001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015612b1357600080fd5b505afa158015612b27573d6000803e3d6000fd5b505050506040513d6020811015612b3d57600080fd5b50516001600160a01b031614612b845760405162461bcd60e51b8152600401808060200182810382526047815260200180615a696047913960600191505060405180910390fd5b806001600160a01b03166331e79db0826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b158015612bd357600080fd5b505af1158015612be7573d6000803e3d6000fd5b50506040805163031e79db60e41b815230600482015290516001600160a01b03851693506331e79db09250602480830192600092919082900301818387803b158015612c3257600080fd5b505af1158015612c46573d6000803e3d6000fd5b50506006546040805163031e79db60e41b81526001600160a01b039283166004820152905191851693506331e79db0925060248082019260009290919082900301818387803b158015612c9857600080fd5b505af1158015612cac573d6000803e3d6000fd5b50506008546040516001600160a01b03918216935090851691507f90c7d74461c613da5efa97d90740869367d74ab3aa5837aa4ae9a975f954b7a890600090a3600880546001600160a01b0319166001600160a01b039290921691909117905550565b612d17613e58565b6001600160a01b0316612d28612dab565b6001600160a01b031614612d71576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b601580546001600160a01b039092166001600160a01b0319909216821790556000908152603c60205260409020805460ff19166001179055565b60055461010090046001600160a01b031690565b612dc7613e58565b6001600160a01b0316612dd8612dab565b6001600160a01b031614612e21576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b612e29611ba7565b60ff16600a0a02600b55565b600e5481565b6013546001600160a01b031681565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156118ef5780601f106118c4576101008083540402835291602001916118ef565b60355481565b601d5481565b612ebf613e58565b6001600160a01b0316612ed0612dab565b6001600160a01b031614612f19576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b601680546001600160a01b0319166001600160a01b0392909216919091179055565b612f43613e58565b6001600160a01b0316612f54612dab565b6001600160a01b031614612f9d576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b601c869055601d8590556019849055601a839055601b829055601e819055612fcf81611a17848187818a818e8e613df7565b601f55505050505050565b612fe2613e58565b6001600160a01b0316612ff3612dab565b6001600160a01b03161461303c576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156130ad5760405162461bcd60e51b815260040180806020018281038252604b815260200180615c4e604b913960600191505060405180910390fd5b6121458282614e6c565b60385481565b60215481565b60085460408051631bc9e27b60e21b815290516000926001600160a01b031691636f2789ec916004808301926020929190829003018186803b158015611b7657600080fd5b6000611913613115613e58565b84611aa085604051806060016040528060258152602001615c99602591396001600061313f613e58565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190614934565b613178613e58565b6001600160a01b0316613189612dab565b6001600160a01b0316146131d2576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b601380546001600160a01b039092166001600160a01b0319909216821790556000908152603c60205260409020805460ff19166001179055565b600854604080516302a2e74960e61b81526001600160a01b0384811660048301529151600093929092169163a8b9d24091602480820192602092909190829003018186803b15801561259157600080fd5b600061191361326a613e58565b8484613f48565b600080600080600080600080600860009054906101000a90046001600160a01b03166001600160a01b031663fbcbc0f18a6040518263ffffffff1660e01b815260040180826001600160a01b031681526020019150506101006040518083038186803b1580156132e057600080fd5b505afa1580156132f4573d6000803e3d6000fd5b505050506040513d61010081101561330b57600080fd5b508051602082015160408301516060840151608085015160a086015160c087015160e090970151959e50939c50919a509850965094509092509050919395975091939597565b602c5481565b61335f613e58565b6001600160a01b0316613370612dab565b6001600160a01b0316146133b9576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b601480546001600160a01b039092166001600160a01b0319909216821790556000908152603c60205260409020805460ff19166001179055565b6014546001600160a01b031681565b603f6020526000908152604090205460ff1681565b61341f613e58565b6001600160a01b0316613430612dab565b6001600160a01b031614613479576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152603c60205260409020805460ff1916911515919091179055565b6134ac613e58565b6001600160a01b03166134bd612dab565b6001600160a01b031614613506576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152603d60205260409020805460ff1916911515919091179055565b613539613e58565b6001600160a01b031661354a612dab565b6001600160a01b031614613593576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b61359b611ba7565b60ff16600a0a02600d55565b6135af613e58565b6001600160a01b03166135c0612dab565b6001600160a01b031614613609576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b60005b8281101561365e5781603c600086868581811061362557fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff191691151591909117905560010161360c565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b35838383604051808060200183151581526020018281038252858582818152602001925060200280828437600083820152604051601f909101601f1916909201829003965090945050505050a1505050565b6136d9613e58565b6001600160a01b03166136ea612dab565b6001600160a01b031614613733576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b61373b611ba7565b60ff16600a0a02600c55565b61374f613e58565b6001600160a01b0316613760612dab565b6001600160a01b0316146137a9576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b60005b828110156137fe5781603d60008686858181106137c557fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff19169115159190911790556001016137ac565b50505050565b6017546001600160a01b031681565b61381b613e58565b6001600160a01b031661382c612dab565b6001600160a01b031614613875576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b601880546001600160a01b0319166001600160a01b0392909216919091179055565b6016546001600160a01b031681565b6138ae613e58565b6001600160a01b03166138bf612dab565b6001600160a01b031614613908576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b6008546040805163d644c36560e01b81526001600160a01b0384811660048301529151919092169163d644c36591602480830192600092919082900301818387803b158015611c6057600080fd5b60265481565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600c5481565b613995613e58565b6001600160a01b03166139a6612dab565b6001600160a01b0316146139ef576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b603780549115156101000261ff0019909216919091179055565b60205481565b601c5481565b60255481565b6007546001600160a01b031681565b6008546040805163039e107b60e61b815290516000926001600160a01b03169163e7841ec0916004808301926020929190829003018186803b158015611b7657600080fd5b613a77613e58565b6001600160a01b0316613a88612dab565b6001600160a01b031614613ad1576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b6008546040805163e98030c760e01b81526004810184905290516001600160a01b039092169163e98030c79160248082019260009290919082900301818387803b158015611c6057600080fd5b613b26613e58565b6001600160a01b0316613b37612dab565b6001600160a01b031614613b80576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b611f9481614f9a565b601a5481565b60245481565b600080600080600080600080600860009054906101000a90046001600160a01b03166001600160a01b0316635183d6fd8a6040518263ffffffff1660e01b8152600401808281526020019150506101006040518083038186803b1580156132e057600080fd5b613c03613e58565b6001600160a01b0316613c14612dab565b6001600160a01b031614613c5d576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b6001600160a01b038116613ca25760405162461bcd60e51b815260040180806020018281038252602681526020018061593e6026913960400191505060405180910390fd5b6005546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b602b5481565b613d17613e58565b6001600160a01b0316613d28612dab565b6001600160a01b031614613d71576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b603655565b613d7e613e58565b6001600160a01b0316613d8f612dab565b6001600160a01b031614613dd8576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b613de0611ba7565b60ff16600a0a8102600a8190555050565b601e5481565b600082820183811015613e51576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3390565b6001600160a01b038316613ea15760405162461bcd60e51b8152600401808060200182810382526024815260200180615c2a6024913960400191505060405180910390fd5b6001600160a01b038216613ee65760405162461bcd60e51b81526004018080602001828103825260228152602001806159646022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166000908152603b602052604090205460ff1615613fa05760405162461bcd60e51b81526004018080602001828103825260248152602001806159ac6024913960400191505060405180910390fd5b6001600160a01b0382166000908152603b602052604090205460ff1615613ff85760405162461bcd60e51b81526004018080602001828103825260248152602001806159ac6024913960400191505060405180910390fd5b6001600160a01b03831661403d5760405162461bcd60e51b81526004018080602001828103825260238152602001806158f26023913960400191505060405180910390fd5b6001600160a01b0382166140825760405162461bcd60e51b81526004018080602001828103825260238152602001806158f26023913960400191505060405180910390fd5b806140985761409383836000614d11565b61492f565b60006140a2612dab565b6001600160a01b0316846001600160a01b0316141580156140cb57506001600160a01b03831615155b80156140e257506001600160a01b03831661dead14155b801561410657506001600160a01b0384166000908152603f602052604090205460ff165b156141c6576001600160a01b0384166000908152603d602052604090205460ff1661416c57600a5482111561416c5760405162461bcd60e51b81526004018080602001828103825260288152602001806159d06028913960400191505060405180910390fd5b5060198054602e55601a8054602f55601b8054603055601c8054603155601d80546032819055603355601f805460345560205490955560215490935560225490915560235490556024549055602554601e55602654905560015b60006141d06120bb565b90508061422e576001600160a01b0385166000908152603e602052604090205460ff1661422e5760405162461bcd60e51b815260040180806020018281038252603e815260200180615b8d603e913960400191505060405180910390fd5b614236612dab565b6001600160a01b0316856001600160a01b0316141580156142615750600754600160a01b900460ff16155b801561426a5750805b801561428e57506001600160a01b0384166000908152603f602052604090205460ff165b80156142a857506006546001600160a01b03868116911614155b80156142cd57506001600160a01b0384166000908152603c602052604090205460ff16155b1561445557600e546001600160a01b0386166000908152601160205260409020544291011015614311576001600160a01b0385166000908152601260205260408120555b6001600160a01b0385166000908152603d602052604090205460ff1661438c57600b546001600160a01b0386166000908152601260205260409020548401111561438c5760405162461bcd60e51b8152600401808060200182810382526042815260200180615ab06042913960600191505060405180910390fd5b6001600160a01b038516600090815260126020526040902054156143cd576001600160a01b03851660009081526012602052604090208054840190556143f9565b6001600160a01b0385166000908152601160209081526040808320429055601290915290208054840190555b60198054602e55601a8054602f55601b8054603055601c8054603155601d8054603255601e8054603355601f8054603455602754909655602854909455602954909255602a549055602b549055602c549055602d549055600191505b600061446030612741565b600c549091508110158280156144735750805b80156144895750600754600160a01b900460ff16155b80156144ae57506001600160a01b0387166000908152603f602052604090205460ff16155b80156144c857506009546001600160a01b03888116911614155b80156144e257506009546001600160a01b03878116911614155b1561452b576007805460ff60a01b1916600160a01b179055600c54614506906149cb565b600061451130612741565b905061451c81614f9a565b506007805460ff60a01b191690555b60008380156145445750600754600160a01b900460ff16155b6001600160a01b0389166000908152603c602052604090205490915060ff168061458657506001600160a01b0387166000908152603c602052604090205460ff165b806145985750603754610100900460ff165b156145a1575060005b80806145aa5750845b1561468c576001600160a01b0388166000908152603c602052604090205460ff16806145ee57506001600160a01b0387166000908152603c602052604090205460ff165b156145f857614687565b6000614611601e54601f546151e790919063ffffffff16565b9050600061462a60646146248a85615244565b9061529d565b905060006146486064614624601e548c61524490919063ffffffff16565b905061465e816146588b856151e7565b906151e7565b985061466b8b3084614d11565b600954614683908c906001600160a01b031683614d11565b5050505b61471a565b6001600160a01b0388166000908152603c602052604090205460ff16806146cb57506001600160a01b0387166000908152603c602052604090205460ff165b156146d55761471a565b60006146f16064614624601e548a61524490919063ffffffff16565b90506146fd87826151e7565b600954909750614718908a906001600160a01b031683614d11565b505b614725888888614d11565b61472d615304565b6008546001600160a01b031663e30443bc8961474881612741565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561478e57600080fd5b505af192505050801561479f575060015b506008546001600160a01b031663e30443bc886147bb81612741565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561480157600080fd5b505af1925050508015614812575060015b5060355460075442919091101590600160a01b900460ff161580156148345750805b1561492857603854603654603580549091019055600854604080516001624d3b8760e01b031981526004810184905290516001600160a01b039092169163ffb2c479916024808201926060929091908290030181600087803b15801561489957600080fd5b505af19250505080156148cd57506040513d60608110156148b957600080fd5b508051602082015160409092015190919060015b6148d657614926565b604080518481526020810184905280820183905260608101869052905132916001917fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989181900360800190a35050505b505b5050505050505b505050565b600081848411156149c35760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614988578181015183820152602001614970565b50505050905090810190601f1680156149b55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008060006019546000146149f7576149f460646146246019548761524490919063ffffffff16565b92505b601a5415614a1c57614a196064614624601a548761524490919063ffffffff16565b91505b601b5415614a4157614a3e6064614624601b548761524490919063ffffffff16565b90505b8284038290038190036000614a5786600261529d565b90506000614a6683600261529d565b90506000614a7484836151e7565b905047614a8084615330565b6000614a8c47836151e7565b90506000806000601954600014614aba57614ab760646146246019548761524490919063ffffffff16565b92505b601a5415614adf57614adc6064614624601a548761524490919063ffffffff16565b91505b601b5415614b0457614b016064614624601b548761524490919063ffffffff16565b90505b828403829003819003868415614b9f576016546001600160a01b031615614b4857601654601354614b439187916001600160a01b0391821691166154c3565b614b9f565b6013546040516000916001600160a01b03169087908381818185875af1925050503d8060008114614b95576040519150601f19603f3d011682016040523d82523d6000602084013e614b9a565b606091505b505050505b8315614c30576017546001600160a01b031615614bd957601754601454614bd49186916001600160a01b0391821691166154c3565b614c30565b6014546040516000916001600160a01b03169086908381818185875af1925050503d8060008114614c26576040519150601f19603f3d011682016040523d82523d6000602084013e614c2b565b606091505b505050505b8215614cb65760375460ff1615614c5f57601554614c5a90849030906001600160a01b03166154c3565b614cb6565b6015546040516000916001600160a01b03169085908381818185875af1925050503d8060008114614cac576040519150601f19603f3d011682016040523d82523d6000602084013e614cb1565b606091505b505050505b614cc0818361565c565b604080518a8152602081018490528082018a905290517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a1505050505050505050505050505050565b6001600160a01b038316614d565760405162461bcd60e51b8152600401808060200182810382526025815260200180615bcb6025913960400191505060405180910390fd5b6001600160a01b038216614d9b5760405162461bcd60e51b81526004018080602001828103825260238152602001806158f26023913960400191505060405180910390fd5b614da683838361492f565b614de381604051806060016040528060268152602001615986602691396001600160a01b0386166000908152602081905260409020549190614934565b6001600160a01b038085166000908152602081905260408082209390935590841681522054614e129082613df7565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6001600160a01b0382166000908152603f602052604090205460ff1615158115151415614eca5760405162461bcd60e51b815260040180806020018281038252603e8152602001806159f8603e913960400191505060405180910390fd5b6001600160a01b0382166000908152603f60205260409020805460ff19168215801591909117909155614f5e576008546040805163031e79db60e41b81526001600160a01b038581166004830152915191909216916331e79db091602480830192600092919082900301818387803b158015614f4557600080fd5b505af1158015614f59573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6008546007546001600160a01b0391821691600091829116156150c657614fc18430615714565b600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561500c57600080fd5b505afa158015615020573d6000803e3d6000fd5b505050506040513d602081101561503657600080fd5b50516007546008546040805163a9059cbb60e01b81526001600160a01b03928316600482015260248101859052905193945091169163a9059cbb916044808201926020929091908290030181600087803b15801561509357600080fd5b505af11580156150a7573d6000803e3d6000fd5b505050506040513d60208110156150bd57600080fd5b5051915061513b565b476150d085615330565b60006150dc47836151e7565b6040519093508391506000906001600160a01b0387169083908381818185875af1925050503d806000811461512d576040519150601f19603f3d011682016040523d82523d6000602084013e615132565b606091505b50909550505050505b81156137fe576008546040805163b0c7ce3760e01b81526004810184905290516001600160a01b039092169163b0c7ce379160248082019260009290919082900301818387803b15801561518e57600080fd5b505af11580156151a2573d6000803e3d6000fd5b5050604080518781526020810185905281517f80195cc573b02cc48460cbca6e6e4cc85ddb91959d946e1c3025ea3d87942dc39450908190039091019150a150505050565b60008282111561523e576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60008261525357506000611917565b8282028284828161526057fe5b0414613e515760405162461bcd60e51b8152600401808060200182810382526021815260200180615b246021913960400191505060405180910390fd5b60008082116152f3576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b8183816152fc57fe5b049392505050565b602e54601955602f54601a55603054601b55603154601c55603254601d55603354601e55603454601f55565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061535f57fe5b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156153b357600080fd5b505afa1580156153c7573d6000803e3d6000fd5b505050506040513d60208110156153dd57600080fd5b50518151829060019081106153ee57fe5b6001600160a01b0392831660209182029290920101526006546154149130911684613e5c565b60065460405163791ac94760e01b8152600481018481526000602483018190523060648401819052426084850181905260a060448601908152875160a487015287516001600160a01b039097169663791ac947968a968a9594939092909160c40190602080880191028083838b5b8381101561549a578181015183820152602001615482565b505050509050019650505050505050600060405180830381600087803b15801561206757600080fd5b6040805160028082526060820183526000926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561552857600080fd5b505afa15801561553c573d6000803e3d6000fd5b505050506040513d602081101561555257600080fd5b50518151829060009061556157fe5b60200260200101906001600160a01b031690816001600160a01b031681525050828160018151811061558f57fe5b6001600160a01b0392831660209182029290920181019190915260065460405163b6f9de9560e01b815260006004820181815287861660448401524260648401819052608060248501908152885160848601528851959097169663b6f9de95968c9694958a958c95939260a49092019187810191028083838b5b83811015615621578181015183820152602001615609565b50505050905001955050505050506000604051808303818588803b15801561564857600080fd5b505af1158015614928573d6000803e3d6000fd5b6006546156749030906001600160a01b031684613e5c565b6006546009546040805163f305d71960e01b81523060048201526024810186905260006044820181905260648201526001600160a01b0392831660848201524260a48201529051919092169163f305d71991849160c48082019260609290919082900301818588803b1580156156e957600080fd5b505af11580156156fd573d6000803e3d6000fd5b50505050506040513d60608110156137fe57600080fd5b6040805160038082526080820190925260009160208201606080368337019050509050308160008151811061574557fe5b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561579957600080fd5b505afa1580156157ad573d6000803e3d6000fd5b505050506040513d60208110156157c357600080fd5b50518151829060019081106157d457fe5b6001600160a01b0392831660209182029290920101526007548251911690829060029081106157ff57fe5b6001600160a01b0392831660209182029290920101526006546158259130911685613e5c565b600654604051635c11d79560e01b8152600481018581526000602483018190526001600160a01b038681166064850152426084850181905260a060448601908152875160a487015287519290961695635c11d795958a9589948b9493919260c40190602080880191028083838b5b838110156158ab578181015183820152602001615893565b505050509050019650505050505050600060405180830381600087803b1580156158d457600080fd5b505af11580156158e8573d6000803e3d6000fd5b5050505050505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373204146553a2054686520726f7574657220616c726561647920686173207468617420616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365426c61636b6c697374656420616464726573732063616e6e6f74207472616e73666572215472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e204146553a204175746f6d61746564206d61726b6574206d616b6572207061697220697320616c72656164792073657420746f20746861742076616c7565204146553a20546865206469766964656e6420747261636b657220616c72656164792068617320746861742061646472657373204146553a20546865206e6577206469766964656e6420747261636b6572206d757374206265206f776e656420627920746865202041465520746f6b656e20636f6e747261637453656c6c207472616e7366657220616d6f756e74206578636565647320746865206d617853656c6c416d6f756e7420666f722074686520676976656e2074696d652e204146553a2043616e6e6f742075706461746520676173466f7250726f63657373696e6720746f2073616d652076616c7565536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572204146553a2054686973206163636f756e742063616e6e6f742073656e6420746f6b656e7320756e74696c2074726164696e6720697320656e61626c656445524332303a207472616e736665722066726f6d20746865207a65726f2061646472657373204146553a20676173466f7250726f63657373696e67206d757374206265206265747765656e203230302c30303020616e64203530302c30303045524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373204146553a205468652050616e63616b655377617020706169722063616e6e6f742062652072656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b6572506169727345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220535c0cad5cf49d13c401d79f593ed35caa142b99ef09ea25b683341a5d69fc3e64736f6c634300070600336080604052600880546001600160a01b03191690553480156200002157600080fd5b5060408051808201825260158082527f204146555f4469766964656e645f547261636b65720000000000000000000000602080840182815285518087019096529285528401528151919291839183916200007e916003916200012e565b508051620000949060049060208401906200012e565b50506005805460ff191660121790555050600980546001600160a01b03191633179055506000620000c46200012a565b600d80546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350610e10601555670de0b6b3a7640000601655620001da565b3390565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620001665760008555620001b1565b82601f106200018157805160ff1916838001178555620001b1565b82800160010185558215620001b1579182015b82811115620001b157825182559160200191906001019062000194565b50620001bf929150620001c3565b5090565b5b80821115620001bf5760008155600101620001c4565b61275380620001ea6000396000f3fe6080604052600436106102555760003560e01c806385a6b3ae11610139578063be10b614116100b6578063e76ed0e31161007a578063e76ed0e314610919578063e7841ec01461092e578063e98030c714610943578063f2fde38b1461096d578063fbcbc0f1146109a0578063ffb2c479146109d35761025c565b8063be10b61414610848578063cd446e221461085d578063d644c36514610872578063dd62ed3e146108a5578063e30443bc146108e05761025c565b8063a8b9d240116100fd578063a8b9d24014610744578063a9059cbb14610777578063aafd847a146107b0578063b0c7ce37146107e3578063bc4c4b371461080d5761025c565b806385a6b3ae1461067d5780638da5cb5b1461069257806391b89fba146106c357806395d89b41146106f6578063a457c2d71461070b5761025c565b8063313ce567116101d25780634e7b827f116101965780634e7b827f146105635780635183d6fd146105965780636a4740021461060b5780636f2789ec1461062057806370a0823114610635578063715018a6146106685761025c565b8063313ce5671461046f57806331e79db01461049a57806339509351146104cd5780633b364da8146105065780633d0c8963146105305761025c565b8063226cfa3d11610219578063226cfa3d1461037e57806323b872dd146103b157806327ce0147146103f45780632a150127146104275780633009a6091461045a5761025c565b806303c833021461026157806306fdde031461026b578063095ea7b3146102f557806309bbedde1461034257806318160ddd146103695761025c565b3661025c57005b600080fd5b610269610a1b565b005b34801561027757600080fd5b50610280610af5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102ba5781810151838201526020016102a2565b50505050905090810190601f1680156102e75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561030157600080fd5b5061032e6004803603604081101561031857600080fd5b506001600160a01b038135169060200135610b8b565b604080519115158252519081900360200190f35b34801561034e57600080fd5b50610357610ba9565b60408051918252519081900360200190f35b34801561037557600080fd5b50610357610baf565b34801561038a57600080fd5b50610357600480360360208110156103a157600080fd5b50356001600160a01b0316610bb5565b3480156103bd57600080fd5b5061032e600480360360608110156103d457600080fd5b506001600160a01b03813581169160208101359091169060400135610bc7565b34801561040057600080fd5b506103576004803603602081101561041757600080fd5b50356001600160a01b0316610c4e565b34801561043357600080fd5b506102696004803603602081101561044a57600080fd5b50356001600160a01b0316610cad565b34801561046657600080fd5b50610357610d18565b34801561047b57600080fd5b50610484610d1e565b6040805160ff9092168252519081900360200190f35b3480156104a657600080fd5b50610269600480360360208110156104bd57600080fd5b50356001600160a01b0316610d27565b3480156104d957600080fd5b5061032e600480360360408110156104f057600080fd5b506001600160a01b038135169060200135610e33565b34801561051257600080fd5b506102696004803603602081101561052957600080fd5b5035610e81565b34801561053c57600080fd5b506102696004803603602081101561055357600080fd5b50356001600160a01b0316610ef2565b34801561056f57600080fd5b5061032e6004803603602081101561058657600080fd5b50356001600160a01b0316610f76565b3480156105a257600080fd5b506105c0600480360360208110156105b957600080fd5b5035610f8b565b604080516001600160a01b0390991689526020890197909752878701959095526060870193909352608086019190915260a085015260c084015260e083015251908190036101000190f35b34801561061757600080fd5b506102696110ea565b34801561062c57600080fd5b50610357611121565b34801561064157600080fd5b506103576004803603602081101561065857600080fd5b50356001600160a01b0316611127565b34801561067457600080fd5b50610269611142565b34801561068957600080fd5b506103576111ee565b34801561069e57600080fd5b506106a76111f4565b604080516001600160a01b039092168252519081900360200190f35b3480156106cf57600080fd5b50610357600480360360208110156106e657600080fd5b50356001600160a01b0316611203565b34801561070257600080fd5b5061028061120e565b34801561071757600080fd5b5061032e6004803603604081101561072e57600080fd5b506001600160a01b03813516906020013561126f565b34801561075057600080fd5b506103576004803603602081101561076757600080fd5b50356001600160a01b03166112d7565b34801561078357600080fd5b5061032e6004803603604081101561079a57600080fd5b506001600160a01b038135169060200135611303565b3480156107bc57600080fd5b50610357600480360360208110156107d357600080fd5b50356001600160a01b0316611317565b3480156107ef57600080fd5b506102696004803603602081101561080657600080fd5b5035611332565b34801561081957600080fd5b5061032e6004803603604081101561083057600080fd5b506001600160a01b03813516906020013515156113fb565b34801561085457600080fd5b506103576114da565b34801561086957600080fd5b506106a76114e0565b34801561087e57600080fd5b506102696004803603602081101561089557600080fd5b50356001600160a01b03166114ef565b3480156108b157600080fd5b50610357600480360360408110156108c857600080fd5b506001600160a01b0381358116916020013516611572565b3480156108ec57600080fd5b506102696004803603604081101561090357600080fd5b506001600160a01b03813516906020013561159d565b34801561092557600080fd5b506106a7611753565b34801561093a57600080fd5b50610357611762565b34801561094f57600080fd5b506102696004803603602081101561096657600080fd5b5035611768565b34801561097957600080fd5b506102696004803603602081101561099057600080fd5b50356001600160a01b031661188e565b3480156109ac57600080fd5b506105c0600480360360208110156109c357600080fd5b50356001600160a01b0316611991565b3480156109df57600080fd5b506109fd600480360360208110156109f657600080fd5b5035611b04565b60408051938452602084019290925282820152519081900360600190f35b6009546001600160a01b03163314610a645760405162461bcd60e51b815260040180806020018281038252602a8152602001806125ba602a913960400191505060405180910390fd5b6000610a6e610baf565b11610a7857600080fd5b3415610af357610aa9610a89610baf565b610a9734600160801b611c02565b81610a9e57fe5b600654919004611c62565b60065560408051348152905133917fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d78454116511919081900360200190a2600c54610aef9034611c62565b600c555b565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610b815780601f10610b5657610100808354040283529160200191610b81565b820191906000526020600020905b815481529060010190602001808311610b6457829003601f168201915b5050505050905090565b6000610b9f610b98611cbc565b8484611cc0565b5060015b92915050565b600e5490565b60025490565b60146020526000908152604090205481565b6000610bd4848484611dac565b610c4484610be0611cbc565b610c3f8560405180606001604052806028815260200161266c602891396001600160a01b038a16600090815260016020526040812090610c1e611cbc565b6001600160a01b031681526020810191909152604001600020549190611de3565b611cc0565b5060019392505050565b6001600160a01b0381166000908152600a6020526040812054600160801b90610c9d90610c9890610c92610c8d610c8488611127565b60065490611c02565b611e7a565b90611e8a565b611ebd565b81610ca457fe5b0490505b919050565b6009546001600160a01b03163314610cf65760405162461bcd60e51b815260040180806020018281038252602a8152602001806125ba602a913960400191505060405180910390fd5b600980546001600160a01b0319166001600160a01b0392909216919091179055565b60125481565b60055460ff1690565b610d2f611cbc565b6001600160a01b0316610d406111f4565b6001600160a01b031614610d89576040805162461bcd60e51b81526020600482018190526024820152600080516020612694833981519152604482015290519081900360640190fd5b6001600160a01b0381166000908152601360205260408120805460ff19166001179055610db7908290611ed0565b6040805163131836e760e21b8152600e60048201526001600160a01b0383166024820152905173f38c7c109f3819e19202a6335ec96f46275c327291634c60db9c916044808301926000929190829003018186803b158015610e1857600080fd5b505af4158015610e2c573d6000803e3d6000fd5b5050505050565b6000610b9f610e40611cbc565b84610c3f8560016000610e51611cbc565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611c62565b610e89611cbc565b6001600160a01b0316610e9a6111f4565b6001600160a01b031614610ee3576040805162461bcd60e51b81526020600482018190526024820152600080516020612694833981519152604482015290519081900360640190fd5b670de0b6b3a764000002601655565b610efa611cbc565b6001600160a01b0316610f0b6111f4565b6001600160a01b031614610f54576040805162461bcd60e51b81526020600482018190526024820152600080516020612694833981519152604482015290519081900360640190fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b60136020526000908152604090205460ff1681565b600080600080600080600080600e73f38c7c109f3819e19202a6335ec96f46275c327263deb3d89690916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610fe957600080fd5b505af4158015610ffd573d6000803e3d6000fd5b505050506040513d602081101561101357600080fd5b5051891061103a5750600096506000199550859450869350839250829150819050806110df565b6000600e73f38c7c109f3819e19202a6335ec96f46275c327263d1aa9e7e90918c6040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561109657600080fd5b505af41580156110aa573d6000803e3d6000fd5b505050506040513d60208110156110c057600080fd5b505190506110cd81611991565b98509850985098509850985098509850505b919395975091939597565b60405162461bcd60e51b81526004018080602001828103825260658152602001806125556065913960800191505060405180910390fd5b60155481565b6001600160a01b031660009081526020819052604090205490565b61114a611cbc565b6001600160a01b031661115b6111f4565b6001600160a01b0316146111a4576040805162461bcd60e51b81526020600482018190526024820152600080516020612694833981519152604482015290519081900360640190fd5b600d546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600d80546001600160a01b0319169055565b600c5481565b600d546001600160a01b031690565b6000610ba3826112d7565b60048054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610b815780601f10610b5657610100808354040283529160200191610b81565b6000610b9f61127c611cbc565b84610c3f856040518060600160405280602581526020016126f960259139600160006112a6611cbc565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611de3565b6001600160a01b0381166000908152600b6020526040812054610ba3906112fd84610c4e565b90611f29565b6000610b9f611310611cbc565b8484611dac565b6001600160a01b03166000908152600b602052604090205490565b6009546001600160a01b0316331461137b5760405162461bcd60e51b815260040180806020018281038252602a8152602001806125ba602a913960400191505060405180910390fd5b6000611385610baf565b1161138f57600080fd5b80156113f8576113ae6113a0610baf565b610a9783600160801b611c02565b60065560408051828152905133917fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d78454116511919081900360200190a2600c546113f49082611c62565b600c555b50565b6000611405611cbc565b6001600160a01b03166114166111f4565b6001600160a01b03161461145f576040805162461bcd60e51b81526020600482018190526024820152600080516020612694833981519152604482015290519081900360640190fd5b600061146a84611f86565b905080156114d0576001600160a01b0384166000818152601460209081526040918290204290558151848152915186151593927fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf09292908290030190a36001915050610ba3565b5060009392505050565b60165481565b6009546001600160a01b031681565b6114f7611cbc565b6001600160a01b03166115086111f4565b6001600160a01b031614611551576040805162461bcd60e51b81526020600482018190526024820152600080516020612694833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152601360205260409020805460ff19169055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6115a5611cbc565b6001600160a01b03166115b66111f4565b6001600160a01b0316146115ff576040805162461bcd60e51b81526020600482018190526024820152600080516020612694833981519152604482015290519081900360640190fd5b6001600160a01b03821660009081526013602052604090205460ff16156116255761174f565b60165481106116bd576116388282611ed0565b60408051632f0ad01760e21b8152600e60048201526001600160a01b038416602482015260448101839052905173f38c7c109f3819e19202a6335ec96f46275c32729163bc2b405c916064808301926000929190829003018186803b1580156116a057600080fd5b505af41580156116b4573d6000803e3d6000fd5b50505050611742565b6116c8826000611ed0565b6040805163131836e760e21b8152600e60048201526001600160a01b0384166024820152905173f38c7c109f3819e19202a6335ec96f46275c327291634c60db9c916044808301926000929190829003018186803b15801561172957600080fd5b505af415801561173d573d6000803e3d6000fd5b505050505b61174d8260016113fb565b505b5050565b6008546001600160a01b031681565b60125490565b611770611cbc565b6001600160a01b03166117816111f4565b6001600160a01b0316146117ca576040805162461bcd60e51b81526020600482018190526024820152600080516020612694833981519152604482015290519081900360640190fd5b610e1081101580156117df5750620151808111155b61181a5760405162461bcd60e51b815260040180806020018281038252604a81526020018061250b604a913960600191505060405180910390fd5b60155481141561185b5760405162461bcd60e51b815260040180806020018281038252603c8152602001806125e4603c913960400191505060405180910390fd5b60155460405182907f474ea64804364a1e29a4487ddb63c3342a2dd826ccd8acf48825e680a0e6f20f90600090a3601555565b611896611cbc565b6001600160a01b03166118a76111f4565b6001600160a01b0316146118f0576040805162461bcd60e51b81526020600482018190526024820152600080516020612694833981519152604482015290519081900360640190fd5b6001600160a01b0381166119355760405162461bcd60e51b81526004018080602001828103825260268152602001806124c36026913960400191505060405180910390fd5b600d546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600d80546001600160a01b0319166001600160a01b0392909216919091179055565b600080600080600080600080889750600e73f38c7c109f3819e19202a6335ec96f46275c32726317e142d190918a6040518363ffffffff1660e01b815260040180838152602001826001600160a01b031681526020019250505060206040518083038186803b158015611a0357600080fd5b505af4158015611a17573d6000803e3d6000fd5b505050506040513d6020811015611a2d57600080fd5b50519650600019955060008712611a9157601254871115611a5d57601254611a569088906121b1565b9550611a91565b601254600e5460009110611a72576000611a81565b601254600e54611a8191611f29565b9050611a8d8882611e8a565b9650505b611a9a886112d7565b9450611aa588610c4e565b6001600160a01b038916600090815260146020526040902054909450925082611acf576000611add565b601554611add908490611c62565b9150428211611aed576000611af7565b611af78242611f29565b9050919395975091939597565b600e546000908190819080611b2457505060125460009250829150611bfb565b6012546000805a90506000805b8984108015611b3f57508582105b15611bea57600e546001909501948510611b5857600094505b6000600e6000018681548110611b6a57fe5b60009182526020808320909101546001600160a01b03168083526014909152604090912054909150611b9b906121e5565b15611bb757611bab8160016113fb565b15611bb7576001909101905b60019092019160005a905080851115611be157611bde611bd78683611f29565b8790611c62565b95505b9350611b319050565b601285905590975095509193505050505b9193909250565b600082611c1157506000610ba3565b82820282848281611c1e57fe5b0414611c5b5760405162461bcd60e51b815260040180806020018281038252602181526020018061264b6021913960400191505060405180910390fd5b9392505050565b600082820183811015611c5b576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b3390565b6001600160a01b038316611d055760405162461bcd60e51b81526004018080602001828103825260248152602001806126d56024913960400191505060405180910390fd5b6001600160a01b038216611d4a5760405162461bcd60e51b81526004018080602001828103825260228152602001806124e96022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b60405162461bcd60e51b815260040180806020018281038252602b815260200180612620602b913960400191505060405180910390fd5b60008184841115611e725760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611e37578181015183820152602001611e1f565b50505050905090810190601f168015611e645780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008181811215610ba357600080fd5b6000828201818312801590611e9f5750838112155b80611eb45750600083128015611eb457508381125b611c5b57600080fd5b600080821215611ecc57600080fd5b5090565b6000611edb83611127565b905080821115611f03576000611ef18383611f29565b9050611efd848261220c565b5061174d565b8082101561174d576000611f178284611f29565b9050611f238482612270565b50505050565b600082821115611f80576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600080611f92836112d7565b905080156121a8576001600160a01b0383166000908152600b6020526040902054611fbd9082611c62565b6001600160a01b038085166000908152600b602052604081209290925560085416612086576040516000906001600160a01b0386169084908381818185875af1925050503d806000811461202d576040519150601f19603f3d011682016040523d82523d6000602084013e612032565b606091505b50506008546040805186815290519294508493506001600160a01b0391821692918816917feb063efb53b3790d2bc15284b59af7544466c8787c2883321ee27095647911b69181900360200190a350612152565b6008546040805163a9059cbb60e01b81526001600160a01b038781166004830152602482018690529151919092169163a9059cbb9160448083019260209291908290030181600087803b1580156120dc57600080fd5b505af11580156120f0573d6000803e3d6000fd5b505050506040513d602081101561210657600080fd5b50516008546040805185815290519293506001600160a01b0391821692918716917feb063efb53b3790d2bc15284b59af7544466c8787c2883321ee27095647911b69181900360200190a35b806121a0576001600160a01b0384166000908152600b602052604090205461217a9083611f29565b6001600160a01b0385166000908152600b60205260408120919091559250610ca8915050565b509050610ca8565b50600092915050565b60008082121580156121c557508282840313155b806121dc57506000821280156121dc575082828403135b611f8057600080fd5b6000428211156121f757506000610ca8565b6015546122044284611f29565b101592915050565b61221682826122b4565b612250612231610c8d83600654611c0290919063ffffffff16565b6001600160a01b0384166000908152600a6020526040902054906121b1565b6001600160a01b039092166000908152600a602052604090209190915550565b61227a82826123a4565b612250612295610c8d83600654611c0290919063ffffffff16565b6001600160a01b0384166000908152600a602052604090205490611e8a565b6001600160a01b03821661230f576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b61231b6000838361174d565b6002546123289082611c62565b6002556001600160a01b03821660009081526020819052604090205461234e9082611c62565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b0382166123e95760405162461bcd60e51b81526004018080602001828103825260218152602001806126b46021913960400191505060405180910390fd5b6123f58260008361174d565b612432816040518060600160405280602281526020016124a1602291396001600160a01b0385166000908152602081905260409020549190611de3565b6001600160a01b0383166000908152602081905260409020556002546124589082611f29565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3505056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373204146555f4469766964656e645f547261636b65723a20636c61696d57616974206d757374206265207570646174656420746f206265747765656e203120616e6420323420686f757273204146555f4469766964656e645f547261636b65723a2077697468647261774469766964656e642064697361626c65642e20557365207468652027636c61696d272066756e6374696f6e206f6e20746865206d61696e202041465520636f6e74726163742e4f776e61626c653a2063616c6c6572206973206e6f7420746865206d617374657220636f6e7472616374204146555f4469766964656e645f547261636b65723a2043616e6e6f742075706461746520636c61696d5761697420746f2073616d652076616c7565204146555f4469766964656e645f547261636b65723a204e6f207472616e736665727320616c6c6f776564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657245524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122064c015715837b83714f1b841e08c61144160edd88884c8c6522fc4796708b0dd64736f6c63430007060033204146553a204175746f6d61746564206d61726b6574206d616b6572207061697220697320616c72656164792073657420746f20746861742076616c7565
Deployed Bytecode
0x6080604052600436106106d75760003560e01c80637a41865b1161037a578063c0a904a2116101d1578063e708a0f911610102578063f11a24d3116100a0578063f63743421161007a578063f6374342146117d9578063f7822e09146117ee578063fa280d4414611818578063fce589d814611842576106de565b8063f11a24d314611767578063f27fd2541461177c578063f2fde38b146117a6576106de565b8063e7841ec0116100dc578063e7841ec0146116e9578063e98030c7146116fe578063e9d3d61e14611728578063ecfca89914611752576106de565b8063e708a0f9146116aa578063e71dc3f5146116bf578063e76ed0e3146116d4576106de565b8063d4d90c251161016f578063dd62ed3e11610149578063dd62ed3e14611619578063e2f4560514611654578063e371f7cf14611669578063e4a1b95f14611695576106de565b8063d4d90c25146115bc578063d644c365146115d1578063d85ba06314611604576106de565b8063c55d2287116101ab578063c55d2287146114cb578063c6e5a5ab146114f5578063c9fa039614611574578063d2630cc314611589576106de565b8063c0a904a2146113e7578063c18bc19514611422578063c492f0461461144c576106de565b80639a7a23d6116102ab578063a9059cbb11610249578063ae5a17a711610223578063ae5a17a714611331578063afcf2fc414611364578063b62496f514611379578063c0246668146113ac576106de565b8063a9059cbb14611265578063ad56c13c1461129e578063adb873bd1461131c576106de565b8063a26579ad11610285578063a26579ad146111b1578063a457c2d7146111c6578063a5afbcb8146111ff578063a8b9d24014611232576106de565b80639a7a23d61461114c5780639c1b8af514611187578063a1dc92bc1461119c576106de565b806394305f4e11610318578063974d628c116102f2578063974d628c146110a757806398118cb4146110bc57806398eac156146110d1578063992c58e414611104576106de565b806394305f4e14611068578063956236411461107d57806395d89b4114611092576106de565b806388bdd9be1161035457806388bdd9be14610fc35780638ae1cf2214610ff65780638da5cb5b146110295780638f7142601461103e576106de565b80637a41865b14610f3357806381dcc26614610f66578063871c128d14610f99576106de565b80633d0c89631161052e5780635cce86cd1161045f578063700bb191116103fd578063715018a6116103d7578063715018a614610eac57806378109e5414610ec1578063783478ad14610ed657806379e02b4414610eeb576106de565b8063700bb19114610e3a57806370a0823114610e6457806370d5ae0514610e97576106de565b806365b8dbc01161043957806365b8dbc014610d955780636843cd8414610dc85780636a486a8e14610dfb5780636d1b229d14610e10576106de565b80635cce86cd14610d23578063616c594614610d5657806364b0f65314610d80576106de565b80634be8f8b1116104cc5780634e83ff6f116104a65780634e83ff6f14610c745780634fbee19314610caf57806354503bf714610ce25780635aa821a914610d0e576106de565b80634be8f8b114610c355780634d33b1ef14610c4a5780634e71d92d14610c5f576106de565b8063425b682e11610508578063425b682e14610bbb578063455a439614610bd0578063486b6d8614610c0b57806349bd5a5e14610c20576106de565b80633d0c896314610b2b5780633fe9092214610b5e578063407e378714610b91576106de565b80631fe70a981161060857806330bb4cff116105a657806335b5fb631161058057806335b5fb6314610a9e57806338b7692314610ab35780633950935114610ac85780633b364da814610b01576106de565b806330bb4cff14610a2b578063313ce56714610a4057806331e79db014610a6b576106de565b8063255e9d0a116105e2578063255e9d0a146109c257806325b61703146109d757806325e47531146109ec5780632c1f521614610a16576106de565b80631fe70a981461092057806322d3e2aa1461093557806323b872dd1461097f576106de565b8063122fe685116106755780631694505e1161064f5780631694505e146108ae57806318160ddd146108c35780631a221dbb146108d85780631bc8b18f146108ed576106de565b8063122fe685146108355780631283f1ca1461086657806313114a9d14610899576106de565b806308b2a12c116106b157806308b2a12c146107a9578063095ea7b3146107be5780630ccf21561461080b5780630d7f144114610820576106de565b806302259e9e146106e357806302df64d61461070a57806306fdde031461071f576106de565b366106de57005b600080fd5b3480156106ef57600080fd5b506106f8611857565b60408051918252519081900360200190f35b34801561071657600080fd5b506106f861185d565b34801561072b57600080fd5b50610734611863565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561076e578181015183820152602001610756565b50505050905090810190601f16801561079b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156107b557600080fd5b506106f86118f9565b3480156107ca57600080fd5b506107f7600480360360408110156107e157600080fd5b506001600160a01b0381351690602001356118ff565b604080519115158252519081900360200190f35b34801561081757600080fd5b506106f861191d565b34801561082c57600080fd5b506106f8611923565b34801561084157600080fd5b5061084a611929565b604080516001600160a01b039092168252519081900360200190f35b34801561087257600080fd5b506106f86004803603602081101561088957600080fd5b50356001600160a01b0316611938565b3480156108a557600080fd5b506106f861194a565b3480156108ba57600080fd5b5061084a611950565b3480156108cf57600080fd5b506106f861195f565b3480156108e457600080fd5b506106f8611965565b3480156108f957600080fd5b506106f86004803603602081101561091057600080fd5b50356001600160a01b031661196b565b34801561092c57600080fd5b506106f861197d565b34801561094157600080fd5b5061097d600480360360c081101561095857600080fd5b5080359060208101359060408101359060608101359060808101359060a00135611983565b005b34801561098b57600080fd5b506107f7600480360360608110156109a257600080fd5b506001600160a01b03813581169160208101359091169060400135611a28565b3480156109ce57600080fd5b506106f8611aaf565b3480156109e357600080fd5b506106f8611ab5565b3480156109f857600080fd5b5061097d60048036036020811015610a0f57600080fd5b5035611abb565b348015610a2257600080fd5b5061084a611b22565b348015610a3757600080fd5b506106f8611b31565b348015610a4c57600080fd5b50610a55611ba7565b6040805160ff9092168252519081900360200190f35b348015610a7757600080fd5b5061097d60048036036020811015610a8e57600080fd5b50356001600160a01b0316611bb0565b348015610aaa57600080fd5b506106f8611c7b565b348015610abf57600080fd5b5061084a611c81565b348015610ad457600080fd5b506107f760048036036040811015610aeb57600080fd5b506001600160a01b038135169060200135611c90565b348015610b0d57600080fd5b5061097d60048036036020811015610b2457600080fd5b5035611cde565b348015610b3757600080fd5b5061097d60048036036020811015610b4e57600080fd5b50356001600160a01b0316611d8d565b348015610b6a57600080fd5b5061097d60048036036020811015610b8157600080fd5b50356001600160a01b0316611ea5565b348015610b9d57600080fd5b5061097d60048036036020811015610bb457600080fd5b5035611f29565b348015610bc757600080fd5b506107f7611f97565b348015610bdc57600080fd5b5061097d60048036036040811015610bf357600080fd5b506001600160a01b0381351690602001351515611fa0565b348015610c1757600080fd5b506107f7612083565b348015610c2c57600080fd5b5061084a612091565b348015610c4157600080fd5b506106f86120b5565b348015610c5657600080fd5b506107f76120bb565b348015610c6b57600080fd5b5061097d6120c4565b348015610c8057600080fd5b5061097d60048036036040811015610c9757600080fd5b506001600160a01b0381358116916020013516612149565b348015610cbb57600080fd5b506107f760048036036020811015610cd257600080fd5b50356001600160a01b03166122d1565b348015610cee57600080fd5b5061097d60048036036020811015610d0557600080fd5b503515156122ef565b348015610d1a57600080fd5b506106f8612364565b348015610d2f57600080fd5b506107f760048036036020811015610d4657600080fd5b50356001600160a01b031661236a565b348015610d6257600080fd5b5061097d60048036036020811015610d7957600080fd5b5035612388565b348015610d8c57600080fd5b506106f86123ef565b348015610da157600080fd5b5061097d60048036036020811015610db857600080fd5b50356001600160a01b0316612434565b348015610dd457600080fd5b506106f860048036036020811015610deb57600080fd5b50356001600160a01b0316612540565b348015610e0757600080fd5b506106f86125c3565b348015610e1c57600080fd5b5061097d60048036036020811015610e3357600080fd5b50356125c9565b348015610e4657600080fd5b5061097d60048036036020811015610e5d57600080fd5b503561265a565b348015610e7057600080fd5b506106f860048036036020811015610e8757600080fd5b50356001600160a01b0316612741565b348015610ea357600080fd5b5061084a61275c565b348015610eb857600080fd5b5061097d61276b565b348015610ecd57600080fd5b506106f861281d565b348015610ee257600080fd5b5061084a612823565b348015610ef757600080fd5b5061097d600480360360c0811015610f0e57600080fd5b5080359060208101359060408101359060608101359060808101359060a00135612832565b348015610f3f57600080fd5b506106f860048036036020811015610f5657600080fd5b50356001600160a01b03166128d1565b348015610f7257600080fd5b506106f860048036036020811015610f8957600080fd5b50356001600160a01b03166128e3565b348015610fa557600080fd5b5061097d60048036036020811015610fbc57600080fd5b50356128f5565b348015610fcf57600080fd5b5061097d60048036036020811015610fe657600080fd5b50356001600160a01b0316612a1c565b34801561100257600080fd5b5061097d6004803603602081101561101957600080fd5b50356001600160a01b0316612d0f565b34801561103557600080fd5b5061084a612dab565b34801561104a57600080fd5b5061097d6004803603602081101561106157600080fd5b5035612dbf565b34801561107457600080fd5b506106f8612e35565b34801561108957600080fd5b5061084a612e3b565b34801561109e57600080fd5b50610734612e4a565b3480156110b357600080fd5b506106f8612eab565b3480156110c857600080fd5b506106f8612eb1565b3480156110dd57600080fd5b5061097d600480360360208110156110f457600080fd5b50356001600160a01b0316612eb7565b34801561111057600080fd5b5061097d600480360360c081101561112757600080fd5b5080359060208101359060408101359060608101359060808101359060a00135612f3b565b34801561115857600080fd5b5061097d6004803603604081101561116f57600080fd5b506001600160a01b0381351690602001351515612fda565b34801561119357600080fd5b506106f86130b7565b3480156111a857600080fd5b506106f86130bd565b3480156111bd57600080fd5b506106f86130c3565b3480156111d257600080fd5b506107f7600480360360408110156111e957600080fd5b506001600160a01b038135169060200135613108565b34801561120b57600080fd5b5061097d6004803603602081101561122257600080fd5b50356001600160a01b0316613170565b34801561123e57600080fd5b506106f86004803603602081101561125557600080fd5b50356001600160a01b031661320c565b34801561127157600080fd5b506107f76004803603604081101561128857600080fd5b506001600160a01b03813516906020013561325d565b3480156112aa57600080fd5b506112d1600480360360208110156112c157600080fd5b50356001600160a01b0316613271565b604080516001600160a01b0390991689526020890197909752878701959095526060870193909352608086019190915260a085015260c084015260e083015251908190036101000190f35b34801561132857600080fd5b506106f8613351565b34801561133d57600080fd5b5061097d6004803603602081101561135457600080fd5b50356001600160a01b0316613357565b34801561137057600080fd5b5061084a6133f3565b34801561138557600080fd5b506107f76004803603602081101561139c57600080fd5b50356001600160a01b0316613402565b3480156113b857600080fd5b5061097d600480360360408110156113cf57600080fd5b506001600160a01b0381351690602001351515613417565b3480156113f357600080fd5b5061097d6004803603604081101561140a57600080fd5b506001600160a01b03813516906020013515156134a4565b34801561142e57600080fd5b5061097d6004803603602081101561144557600080fd5b5035613531565b34801561145857600080fd5b5061097d6004803603604081101561146f57600080fd5b81019060208101813564010000000081111561148a57600080fd5b82018360208201111561149c57600080fd5b803590602001918460208302840111640100000000831117156114be57600080fd5b91935091503515156135a7565b3480156114d757600080fd5b5061097d600480360360208110156114ee57600080fd5b50356136d1565b34801561150157600080fd5b5061097d6004803603604081101561151857600080fd5b81019060208101813564010000000081111561153357600080fd5b82018360208201111561154557600080fd5b8035906020019184602083028401116401000000008311171561156757600080fd5b9193509150351515613747565b34801561158057600080fd5b5061084a613804565b34801561159557600080fd5b5061097d600480360360208110156115ac57600080fd5b50356001600160a01b0316613813565b3480156115c857600080fd5b5061084a613897565b3480156115dd57600080fd5b5061097d600480360360208110156115f457600080fd5b50356001600160a01b03166138a6565b34801561161057600080fd5b506106f8613956565b34801561162557600080fd5b506106f86004803603604081101561163c57600080fd5b506001600160a01b038135811691602001351661395c565b34801561166057600080fd5b506106f8613987565b34801561167557600080fd5b5061097d6004803603602081101561168c57600080fd5b5035151561398d565b3480156116a157600080fd5b506106f8613a09565b3480156116b657600080fd5b506106f8613a0f565b3480156116cb57600080fd5b506106f8613a15565b3480156116e057600080fd5b5061084a613a1b565b3480156116f557600080fd5b506106f8613a2a565b34801561170a57600080fd5b5061097d6004803603602081101561172157600080fd5b5035613a6f565b34801561173457600080fd5b5061097d6004803603602081101561174b57600080fd5b5035613b1e565b34801561175e57600080fd5b506106f8613b89565b34801561177357600080fd5b506106f8613b8f565b34801561178857600080fd5b506112d16004803603602081101561179f57600080fd5b5035613b95565b3480156117b257600080fd5b5061097d600480360360208110156117c957600080fd5b50356001600160a01b0316613bfb565b3480156117e557600080fd5b506106f8613d09565b3480156117fa57600080fd5b5061097d6004803603602081101561181157600080fd5b5035613d0f565b34801561182457600080fd5b5061097d6004803603602081101561183b57600080fd5b5035613d76565b34801561184e57600080fd5b506106f8613df1565b600b5481565b60235481565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156118ef5780601f106118c4576101008083540402835291602001916118ef565b820191906000526020600020905b8154815290600101906020018083116118d257829003601f168201915b5050505050905090565b602a5481565b600061191361190c613e58565b8484613e5c565b5060015b92915050565b60195481565b60285481565b6039546001600160a01b031681565b600f6020526000908152604090205481565b601f5481565b6006546001600160a01b031681565b60025490565b60295481565b60116020526000908152604090205481565b60225481565b61198b613e58565b6001600160a01b031661199c612dab565b6001600160a01b0316146119e5576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b602a869055602b859055602784905560288390556029829055602c819055611a1d81611a17848187818a818e8e613df7565b90613df7565b602d55505050505050565b6000611a35848484613f48565b611aa584611a41613e58565b611aa085604051806060016040528060288152602001615b45602891396001600160a01b038a16600090815260016020526040812090611a7f613e58565b6001600160a01b031681526020810191909152604001600020549190614934565b613e5c565b5060019392505050565b60365481565b603a5481565b611ac3613e58565b6001600160a01b0316611ad4612dab565b6001600160a01b031614611b1d576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b600e55565b6008546001600160a01b031681565b600854604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae916004808301926020929190829003018186803b158015611b7657600080fd5b505afa158015611b8a573d6000803e3d6000fd5b505050506040513d6020811015611ba057600080fd5b5051905090565b60055460ff1690565b611bb8613e58565b6001600160a01b0316611bc9612dab565b6001600160a01b031614611c12576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b6008546040805163031e79db60e41b81526001600160a01b038481166004830152915191909216916331e79db091602480830192600092919082900301818387803b158015611c6057600080fd5b505af1158015611c74573d6000803e3d6000fd5b5050505050565b60275481565b6018546001600160a01b031681565b6000611913611c9d613e58565b84611aa08560016000611cae613e58565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490613df7565b611ce6613e58565b6001600160a01b0316611cf7612dab565b6001600160a01b031614611d40576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b60085460408051630766c9b560e31b81526004810184905290516001600160a01b0390921691633b364da89160248082019260009290919082900301818387803b158015611c6057600080fd5b611d95613e58565b6001600160a01b0316611da6612dab565b6001600160a01b031614611def576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b60085460408051633d0c896360e01b81526001600160a01b03848116600483015291519190921691633d0c896391602480830192600092919082900301818387803b158015611e3d57600080fd5b505af1158015611e51573d6000803e3d6000fd5b5050600780546001600160a01b0319166001600160a01b03858116918217928390556040519216935091507fc50953975bfb7dc05da466bc18236bf737c11097c9cc7ef9d079bc7ed96f03ae90600090a350565b611ead613e58565b6001600160a01b0316611ebe612dab565b6001600160a01b031614611f07576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b601780546001600160a01b0319166001600160a01b0392909216919091179055565b611f31613e58565b6001600160a01b0316611f42612dab565b6001600160a01b031614611f8b576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b611f94816149cb565b50565b60375460ff1681565b611fa8613e58565b6001600160a01b0316611fb9612dab565b6001600160a01b031614612002576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b6001600160a01b038281166000818152603b6020526040808220805460ff1916861515179055600854815163031e79db60e41b8152600481019490945290519316926331e79db092602480820193929182900301818387803b15801561206757600080fd5b505af115801561207b573d6000803e3d6000fd5b505050505050565b603754610100900460ff1681565b7f000000000000000000000000343bda4a1e49b97ff323c250797e110c15eff57b81565b601b5481565b603a5442101590565b6008546040805163bc4c4b3760e01b815233600482015260006024820181905291516001600160a01b039093169263bc4c4b3792604480840193602093929083900390910190829087803b15801561211b57600080fd5b505af115801561212f573d6000803e3d6000fd5b505050506040513d602081101561214557600080fd5b5050565b612151613e58565b6001600160a01b0316612162612dab565b6001600160a01b0316146121ab576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b603980546001600160a01b0319166001600160a01b03848116918217928390559182166000908152603e6020526040808220805460ff19166001179055600854815163031e79db60e41b8152600481019490945290519316926331e79db092602480820193929182900301818387803b15801561222757600080fd5b505af115801561223b573d6000803e3d6000fd5b5050505061224a826001613417565b6001600160a01b038082166000818152603e6020526040808220805460ff19166001179055600854815163031e79db60e41b8152600481019490945290519316926331e79db092602480820193929182900301818387803b1580156122ae57600080fd5b505af11580156122c2573d6000803e3d6000fd5b50505050612145816001613417565b6001600160a01b03166000908152603c602052604090205460ff1690565b6122f7613e58565b6001600160a01b0316612308612dab565b6001600160a01b031614612351576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b6037805460ff1916911515919091179055565b600a5481565b6001600160a01b03166000908152603d602052604090205460ff1690565b612390613e58565b6001600160a01b03166123a1612dab565b6001600160a01b0316146123ea576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b603a55565b600854604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde916004808301926020929190829003018186803b158015611b7657600080fd5b61243c613e58565b6001600160a01b031661244d612dab565b6001600160a01b031614612496576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b6006546001600160a01b03828116911614156124e35760405162461bcd60e51b81526004018080602001828103825260298152602001806159156029913960400191505060405180910390fd5b6006546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b600854604080516370a0823160e01b81526001600160a01b038481166004830152915160009392909216916370a0823191602480820192602092909190829003018186803b15801561259157600080fd5b505afa1580156125a5573d6000803e3d6000fd5b505050506040513d60208110156125bb57600080fd5b505192915050565b602d5481565b6125d1613e58565b6001600160a01b03166125e2612dab565b6001600160a01b03161461262b576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b6000612635611ba7565b60095460ff91909116600a0a830291506121459030906001600160a01b031683614d11565b600854604080516001624d3b8760e01b03198152600481018490529051600092839283926001600160a01b039092169163ffb2c4799160248082019260609290919082900301818787803b1580156126b157600080fd5b505af11580156126c5573d6000803e3d6000fd5b505050506040513d60608110156126db57600080fd5b5080516020808301516040938401518451848152928301829052828501819052606083018990529351929650945091925032916000917fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989181900360800190a350505050565b6001600160a01b031660009081526020819052604090205490565b6009546001600160a01b031681565b612773613e58565b6001600160a01b0316612784612dab565b6001600160a01b0316146127cd576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b60055460405160009161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360058054610100600160a81b0319169055565b600d5481565b6015546001600160a01b031681565b61283a613e58565b6001600160a01b031661284b612dab565b6001600160a01b031614612894576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b6023869055602485905560208490556021839055602282905560258190556128c681611a17848187818a818e8e613df7565b602655505050505050565b60106020526000908152604090205481565b60126020526000908152604090205481565b6128fd613e58565b6001600160a01b031661290e612dab565b6001600160a01b031614612957576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b62030d40811015801561296d57506207a1208111155b6129a85760405162461bcd60e51b815260040180806020018281038252603a815260200180615bf0603a913960400191505060405180910390fd5b6038548114156129e95760405162461bcd60e51b8152600401808060200182810382526032815260200180615af26032913960400191505060405180910390fd5b60385460405182907f40d7e40e79af4e8e5a9b3c57030d8ea93f13d669c06d448c4d631d4ae7d23db790600090a3603855565b612a24613e58565b6001600160a01b0316612a35612dab565b6001600160a01b031614612a7e576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b6008546001600160a01b0382811691161415612acb5760405162461bcd60e51b8152600401808060200182810382526033815260200180615a366033913960400191505060405180910390fd5b6000819050306001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015612b1357600080fd5b505afa158015612b27573d6000803e3d6000fd5b505050506040513d6020811015612b3d57600080fd5b50516001600160a01b031614612b845760405162461bcd60e51b8152600401808060200182810382526047815260200180615a696047913960600191505060405180910390fd5b806001600160a01b03166331e79db0826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b158015612bd357600080fd5b505af1158015612be7573d6000803e3d6000fd5b50506040805163031e79db60e41b815230600482015290516001600160a01b03851693506331e79db09250602480830192600092919082900301818387803b158015612c3257600080fd5b505af1158015612c46573d6000803e3d6000fd5b50506006546040805163031e79db60e41b81526001600160a01b039283166004820152905191851693506331e79db0925060248082019260009290919082900301818387803b158015612c9857600080fd5b505af1158015612cac573d6000803e3d6000fd5b50506008546040516001600160a01b03918216935090851691507f90c7d74461c613da5efa97d90740869367d74ab3aa5837aa4ae9a975f954b7a890600090a3600880546001600160a01b0319166001600160a01b039290921691909117905550565b612d17613e58565b6001600160a01b0316612d28612dab565b6001600160a01b031614612d71576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b601580546001600160a01b039092166001600160a01b0319909216821790556000908152603c60205260409020805460ff19166001179055565b60055461010090046001600160a01b031690565b612dc7613e58565b6001600160a01b0316612dd8612dab565b6001600160a01b031614612e21576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b612e29611ba7565b60ff16600a0a02600b55565b600e5481565b6013546001600160a01b031681565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156118ef5780601f106118c4576101008083540402835291602001916118ef565b60355481565b601d5481565b612ebf613e58565b6001600160a01b0316612ed0612dab565b6001600160a01b031614612f19576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b601680546001600160a01b0319166001600160a01b0392909216919091179055565b612f43613e58565b6001600160a01b0316612f54612dab565b6001600160a01b031614612f9d576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b601c869055601d8590556019849055601a839055601b829055601e819055612fcf81611a17848187818a818e8e613df7565b601f55505050505050565b612fe2613e58565b6001600160a01b0316612ff3612dab565b6001600160a01b03161461303c576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b7f000000000000000000000000343bda4a1e49b97ff323c250797e110c15eff57b6001600160a01b0316826001600160a01b031614156130ad5760405162461bcd60e51b815260040180806020018281038252604b815260200180615c4e604b913960600191505060405180910390fd5b6121458282614e6c565b60385481565b60215481565b60085460408051631bc9e27b60e21b815290516000926001600160a01b031691636f2789ec916004808301926020929190829003018186803b158015611b7657600080fd5b6000611913613115613e58565b84611aa085604051806060016040528060258152602001615c99602591396001600061313f613e58565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190614934565b613178613e58565b6001600160a01b0316613189612dab565b6001600160a01b0316146131d2576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b601380546001600160a01b039092166001600160a01b0319909216821790556000908152603c60205260409020805460ff19166001179055565b600854604080516302a2e74960e61b81526001600160a01b0384811660048301529151600093929092169163a8b9d24091602480820192602092909190829003018186803b15801561259157600080fd5b600061191361326a613e58565b8484613f48565b600080600080600080600080600860009054906101000a90046001600160a01b03166001600160a01b031663fbcbc0f18a6040518263ffffffff1660e01b815260040180826001600160a01b031681526020019150506101006040518083038186803b1580156132e057600080fd5b505afa1580156132f4573d6000803e3d6000fd5b505050506040513d61010081101561330b57600080fd5b508051602082015160408301516060840151608085015160a086015160c087015160e090970151959e50939c50919a509850965094509092509050919395975091939597565b602c5481565b61335f613e58565b6001600160a01b0316613370612dab565b6001600160a01b0316146133b9576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b601480546001600160a01b039092166001600160a01b0319909216821790556000908152603c60205260409020805460ff19166001179055565b6014546001600160a01b031681565b603f6020526000908152604090205460ff1681565b61341f613e58565b6001600160a01b0316613430612dab565b6001600160a01b031614613479576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152603c60205260409020805460ff1916911515919091179055565b6134ac613e58565b6001600160a01b03166134bd612dab565b6001600160a01b031614613506576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152603d60205260409020805460ff1916911515919091179055565b613539613e58565b6001600160a01b031661354a612dab565b6001600160a01b031614613593576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b61359b611ba7565b60ff16600a0a02600d55565b6135af613e58565b6001600160a01b03166135c0612dab565b6001600160a01b031614613609576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b60005b8281101561365e5781603c600086868581811061362557fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff191691151591909117905560010161360c565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b35838383604051808060200183151581526020018281038252858582818152602001925060200280828437600083820152604051601f909101601f1916909201829003965090945050505050a1505050565b6136d9613e58565b6001600160a01b03166136ea612dab565b6001600160a01b031614613733576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b61373b611ba7565b60ff16600a0a02600c55565b61374f613e58565b6001600160a01b0316613760612dab565b6001600160a01b0316146137a9576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b60005b828110156137fe5781603d60008686858181106137c557fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff19169115159190911790556001016137ac565b50505050565b6017546001600160a01b031681565b61381b613e58565b6001600160a01b031661382c612dab565b6001600160a01b031614613875576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b601880546001600160a01b0319166001600160a01b0392909216919091179055565b6016546001600160a01b031681565b6138ae613e58565b6001600160a01b03166138bf612dab565b6001600160a01b031614613908576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b6008546040805163d644c36560e01b81526001600160a01b0384811660048301529151919092169163d644c36591602480830192600092919082900301818387803b158015611c6057600080fd5b60265481565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600c5481565b613995613e58565b6001600160a01b03166139a6612dab565b6001600160a01b0316146139ef576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b603780549115156101000261ff0019909216919091179055565b60205481565b601c5481565b60255481565b6007546001600160a01b031681565b6008546040805163039e107b60e61b815290516000926001600160a01b03169163e7841ec0916004808301926020929190829003018186803b158015611b7657600080fd5b613a77613e58565b6001600160a01b0316613a88612dab565b6001600160a01b031614613ad1576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b6008546040805163e98030c760e01b81526004810184905290516001600160a01b039092169163e98030c79160248082019260009290919082900301818387803b158015611c6057600080fd5b613b26613e58565b6001600160a01b0316613b37612dab565b6001600160a01b031614613b80576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b611f9481614f9a565b601a5481565b60245481565b600080600080600080600080600860009054906101000a90046001600160a01b03166001600160a01b0316635183d6fd8a6040518263ffffffff1660e01b8152600401808281526020019150506101006040518083038186803b1580156132e057600080fd5b613c03613e58565b6001600160a01b0316613c14612dab565b6001600160a01b031614613c5d576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b6001600160a01b038116613ca25760405162461bcd60e51b815260040180806020018281038252602681526020018061593e6026913960400191505060405180910390fd5b6005546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b602b5481565b613d17613e58565b6001600160a01b0316613d28612dab565b6001600160a01b031614613d71576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b603655565b613d7e613e58565b6001600160a01b0316613d8f612dab565b6001600160a01b031614613dd8576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b613de0611ba7565b60ff16600a0a8102600a8190555050565b601e5481565b600082820183811015613e51576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3390565b6001600160a01b038316613ea15760405162461bcd60e51b8152600401808060200182810382526024815260200180615c2a6024913960400191505060405180910390fd5b6001600160a01b038216613ee65760405162461bcd60e51b81526004018080602001828103825260228152602001806159646022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166000908152603b602052604090205460ff1615613fa05760405162461bcd60e51b81526004018080602001828103825260248152602001806159ac6024913960400191505060405180910390fd5b6001600160a01b0382166000908152603b602052604090205460ff1615613ff85760405162461bcd60e51b81526004018080602001828103825260248152602001806159ac6024913960400191505060405180910390fd5b6001600160a01b03831661403d5760405162461bcd60e51b81526004018080602001828103825260238152602001806158f26023913960400191505060405180910390fd5b6001600160a01b0382166140825760405162461bcd60e51b81526004018080602001828103825260238152602001806158f26023913960400191505060405180910390fd5b806140985761409383836000614d11565b61492f565b60006140a2612dab565b6001600160a01b0316846001600160a01b0316141580156140cb57506001600160a01b03831615155b80156140e257506001600160a01b03831661dead14155b801561410657506001600160a01b0384166000908152603f602052604090205460ff165b156141c6576001600160a01b0384166000908152603d602052604090205460ff1661416c57600a5482111561416c5760405162461bcd60e51b81526004018080602001828103825260288152602001806159d06028913960400191505060405180910390fd5b5060198054602e55601a8054602f55601b8054603055601c8054603155601d80546032819055603355601f805460345560205490955560215490935560225490915560235490556024549055602554601e55602654905560015b60006141d06120bb565b90508061422e576001600160a01b0385166000908152603e602052604090205460ff1661422e5760405162461bcd60e51b815260040180806020018281038252603e815260200180615b8d603e913960400191505060405180910390fd5b614236612dab565b6001600160a01b0316856001600160a01b0316141580156142615750600754600160a01b900460ff16155b801561426a5750805b801561428e57506001600160a01b0384166000908152603f602052604090205460ff165b80156142a857506006546001600160a01b03868116911614155b80156142cd57506001600160a01b0384166000908152603c602052604090205460ff16155b1561445557600e546001600160a01b0386166000908152601160205260409020544291011015614311576001600160a01b0385166000908152601260205260408120555b6001600160a01b0385166000908152603d602052604090205460ff1661438c57600b546001600160a01b0386166000908152601260205260409020548401111561438c5760405162461bcd60e51b8152600401808060200182810382526042815260200180615ab06042913960600191505060405180910390fd5b6001600160a01b038516600090815260126020526040902054156143cd576001600160a01b03851660009081526012602052604090208054840190556143f9565b6001600160a01b0385166000908152601160209081526040808320429055601290915290208054840190555b60198054602e55601a8054602f55601b8054603055601c8054603155601d8054603255601e8054603355601f8054603455602754909655602854909455602954909255602a549055602b549055602c549055602d549055600191505b600061446030612741565b600c549091508110158280156144735750805b80156144895750600754600160a01b900460ff16155b80156144ae57506001600160a01b0387166000908152603f602052604090205460ff16155b80156144c857506009546001600160a01b03888116911614155b80156144e257506009546001600160a01b03878116911614155b1561452b576007805460ff60a01b1916600160a01b179055600c54614506906149cb565b600061451130612741565b905061451c81614f9a565b506007805460ff60a01b191690555b60008380156145445750600754600160a01b900460ff16155b6001600160a01b0389166000908152603c602052604090205490915060ff168061458657506001600160a01b0387166000908152603c602052604090205460ff165b806145985750603754610100900460ff165b156145a1575060005b80806145aa5750845b1561468c576001600160a01b0388166000908152603c602052604090205460ff16806145ee57506001600160a01b0387166000908152603c602052604090205460ff165b156145f857614687565b6000614611601e54601f546151e790919063ffffffff16565b9050600061462a60646146248a85615244565b9061529d565b905060006146486064614624601e548c61524490919063ffffffff16565b905061465e816146588b856151e7565b906151e7565b985061466b8b3084614d11565b600954614683908c906001600160a01b031683614d11565b5050505b61471a565b6001600160a01b0388166000908152603c602052604090205460ff16806146cb57506001600160a01b0387166000908152603c602052604090205460ff165b156146d55761471a565b60006146f16064614624601e548a61524490919063ffffffff16565b90506146fd87826151e7565b600954909750614718908a906001600160a01b031683614d11565b505b614725888888614d11565b61472d615304565b6008546001600160a01b031663e30443bc8961474881612741565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561478e57600080fd5b505af192505050801561479f575060015b506008546001600160a01b031663e30443bc886147bb81612741565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561480157600080fd5b505af1925050508015614812575060015b5060355460075442919091101590600160a01b900460ff161580156148345750805b1561492857603854603654603580549091019055600854604080516001624d3b8760e01b031981526004810184905290516001600160a01b039092169163ffb2c479916024808201926060929091908290030181600087803b15801561489957600080fd5b505af19250505080156148cd57506040513d60608110156148b957600080fd5b508051602082015160409092015190919060015b6148d657614926565b604080518481526020810184905280820183905260608101869052905132916001917fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989181900360800190a35050505b505b5050505050505b505050565b600081848411156149c35760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614988578181015183820152602001614970565b50505050905090810190601f1680156149b55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008060006019546000146149f7576149f460646146246019548761524490919063ffffffff16565b92505b601a5415614a1c57614a196064614624601a548761524490919063ffffffff16565b91505b601b5415614a4157614a3e6064614624601b548761524490919063ffffffff16565b90505b8284038290038190036000614a5786600261529d565b90506000614a6683600261529d565b90506000614a7484836151e7565b905047614a8084615330565b6000614a8c47836151e7565b90506000806000601954600014614aba57614ab760646146246019548761524490919063ffffffff16565b92505b601a5415614adf57614adc6064614624601a548761524490919063ffffffff16565b91505b601b5415614b0457614b016064614624601b548761524490919063ffffffff16565b90505b828403829003819003868415614b9f576016546001600160a01b031615614b4857601654601354614b439187916001600160a01b0391821691166154c3565b614b9f565b6013546040516000916001600160a01b03169087908381818185875af1925050503d8060008114614b95576040519150601f19603f3d011682016040523d82523d6000602084013e614b9a565b606091505b505050505b8315614c30576017546001600160a01b031615614bd957601754601454614bd49186916001600160a01b0391821691166154c3565b614c30565b6014546040516000916001600160a01b03169086908381818185875af1925050503d8060008114614c26576040519150601f19603f3d011682016040523d82523d6000602084013e614c2b565b606091505b505050505b8215614cb65760375460ff1615614c5f57601554614c5a90849030906001600160a01b03166154c3565b614cb6565b6015546040516000916001600160a01b03169085908381818185875af1925050503d8060008114614cac576040519150601f19603f3d011682016040523d82523d6000602084013e614cb1565b606091505b505050505b614cc0818361565c565b604080518a8152602081018490528082018a905290517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a1505050505050505050505050505050565b6001600160a01b038316614d565760405162461bcd60e51b8152600401808060200182810382526025815260200180615bcb6025913960400191505060405180910390fd5b6001600160a01b038216614d9b5760405162461bcd60e51b81526004018080602001828103825260238152602001806158f26023913960400191505060405180910390fd5b614da683838361492f565b614de381604051806060016040528060268152602001615986602691396001600160a01b0386166000908152602081905260409020549190614934565b6001600160a01b038085166000908152602081905260408082209390935590841681522054614e129082613df7565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6001600160a01b0382166000908152603f602052604090205460ff1615158115151415614eca5760405162461bcd60e51b815260040180806020018281038252603e8152602001806159f8603e913960400191505060405180910390fd5b6001600160a01b0382166000908152603f60205260409020805460ff19168215801591909117909155614f5e576008546040805163031e79db60e41b81526001600160a01b038581166004830152915191909216916331e79db091602480830192600092919082900301818387803b158015614f4557600080fd5b505af1158015614f59573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6008546007546001600160a01b0391821691600091829116156150c657614fc18430615714565b600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561500c57600080fd5b505afa158015615020573d6000803e3d6000fd5b505050506040513d602081101561503657600080fd5b50516007546008546040805163a9059cbb60e01b81526001600160a01b03928316600482015260248101859052905193945091169163a9059cbb916044808201926020929091908290030181600087803b15801561509357600080fd5b505af11580156150a7573d6000803e3d6000fd5b505050506040513d60208110156150bd57600080fd5b5051915061513b565b476150d085615330565b60006150dc47836151e7565b6040519093508391506000906001600160a01b0387169083908381818185875af1925050503d806000811461512d576040519150601f19603f3d011682016040523d82523d6000602084013e615132565b606091505b50909550505050505b81156137fe576008546040805163b0c7ce3760e01b81526004810184905290516001600160a01b039092169163b0c7ce379160248082019260009290919082900301818387803b15801561518e57600080fd5b505af11580156151a2573d6000803e3d6000fd5b5050604080518781526020810185905281517f80195cc573b02cc48460cbca6e6e4cc85ddb91959d946e1c3025ea3d87942dc39450908190039091019150a150505050565b60008282111561523e576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60008261525357506000611917565b8282028284828161526057fe5b0414613e515760405162461bcd60e51b8152600401808060200182810382526021815260200180615b246021913960400191505060405180910390fd5b60008082116152f3576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b8183816152fc57fe5b049392505050565b602e54601955602f54601a55603054601b55603154601c55603254601d55603354601e55603454601f55565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061535f57fe5b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156153b357600080fd5b505afa1580156153c7573d6000803e3d6000fd5b505050506040513d60208110156153dd57600080fd5b50518151829060019081106153ee57fe5b6001600160a01b0392831660209182029290920101526006546154149130911684613e5c565b60065460405163791ac94760e01b8152600481018481526000602483018190523060648401819052426084850181905260a060448601908152875160a487015287516001600160a01b039097169663791ac947968a968a9594939092909160c40190602080880191028083838b5b8381101561549a578181015183820152602001615482565b505050509050019650505050505050600060405180830381600087803b15801561206757600080fd5b6040805160028082526060820183526000926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561552857600080fd5b505afa15801561553c573d6000803e3d6000fd5b505050506040513d602081101561555257600080fd5b50518151829060009061556157fe5b60200260200101906001600160a01b031690816001600160a01b031681525050828160018151811061558f57fe5b6001600160a01b0392831660209182029290920181019190915260065460405163b6f9de9560e01b815260006004820181815287861660448401524260648401819052608060248501908152885160848601528851959097169663b6f9de95968c9694958a958c95939260a49092019187810191028083838b5b83811015615621578181015183820152602001615609565b50505050905001955050505050506000604051808303818588803b15801561564857600080fd5b505af1158015614928573d6000803e3d6000fd5b6006546156749030906001600160a01b031684613e5c565b6006546009546040805163f305d71960e01b81523060048201526024810186905260006044820181905260648201526001600160a01b0392831660848201524260a48201529051919092169163f305d71991849160c48082019260609290919082900301818588803b1580156156e957600080fd5b505af11580156156fd573d6000803e3d6000fd5b50505050506040513d60608110156137fe57600080fd5b6040805160038082526080820190925260009160208201606080368337019050509050308160008151811061574557fe5b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561579957600080fd5b505afa1580156157ad573d6000803e3d6000fd5b505050506040513d60208110156157c357600080fd5b50518151829060019081106157d457fe5b6001600160a01b0392831660209182029290920101526007548251911690829060029081106157ff57fe5b6001600160a01b0392831660209182029290920101526006546158259130911685613e5c565b600654604051635c11d79560e01b8152600481018581526000602483018190526001600160a01b038681166064850152426084850181905260a060448601908152875160a487015287519290961695635c11d795958a9589948b9493919260c40190602080880191028083838b5b838110156158ab578181015183820152602001615893565b505050509050019650505050505050600060405180830381600087803b1580156158d457600080fd5b505af11580156158e8573d6000803e3d6000fd5b5050505050505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373204146553a2054686520726f7574657220616c726561647920686173207468617420616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365426c61636b6c697374656420616464726573732063616e6e6f74207472616e73666572215472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e204146553a204175746f6d61746564206d61726b6574206d616b6572207061697220697320616c72656164792073657420746f20746861742076616c7565204146553a20546865206469766964656e6420747261636b657220616c72656164792068617320746861742061646472657373204146553a20546865206e6577206469766964656e6420747261636b6572206d757374206265206f776e656420627920746865202041465520746f6b656e20636f6e747261637453656c6c207472616e7366657220616d6f756e74206578636565647320746865206d617853656c6c416d6f756e7420666f722074686520676976656e2074696d652e204146553a2043616e6e6f742075706461746520676173466f7250726f63657373696e6720746f2073616d652076616c7565536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572204146553a2054686973206163636f756e742063616e6e6f742073656e6420746f6b656e7320756e74696c2074726164696e6720697320656e61626c656445524332303a207472616e736665722066726f6d20746865207a65726f2061646472657373204146553a20676173466f7250726f63657373696e67206d757374206265206265747765656e203230302c30303020616e64203530302c30303045524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373204146553a205468652050616e63616b655377617020706169722063616e6e6f742062652072656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b6572506169727345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220535c0cad5cf49d13c401d79f593ed35caa142b99ef09ea25b683341a5d69fc3e64736f6c63430007060033
Deployed Bytecode Sourcemap
45051:32192:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45458:62;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;46678:37;;;;;;;;;;;;;:::i;23070:91::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47084:38;;;;;;;;;;;;;:::i;25216:169::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25216:169:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;46199:28;;;;;;;;;;;;;:::i;47004:33::-;;;;;;;;;;;;;:::i;47999:42::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;47999:42:0;;;;;;;;;;;;;;45696:46;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45696:46:0;-1:-1:-1;;;;;45696:46:0;;:::i;46418:120::-;;;;;;;;;;;;;:::i;45125:41::-;;;;;;;;;;;;;:::i;24169:108::-;;;;;;;;;;;;;:::i;47044:33::-;;;;;;;;;;;;;:::i;45803:44::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45803:44:0;-1:-1:-1;;;;;45803:44:0;;:::i;46639:32::-;;;;;;;;;;;;;:::i;56301:546::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;56301:546:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25867:321;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25867:321:0;;;;;;;;;;;;;;;;;:::i;47806:34::-;;;;;;;;;;;;;:::i;48050:51::-;;;;;;;;;;;;;:::i;51979:109::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51979:109:0;;:::i;45301:41::-;;;;;;;;;;;;;:::i;62110:141::-;;;;;;;;;;;;;:::i;24013:91::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;59853:294;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;59853:294:0;-1:-1:-1;;;;;59853:294:0;;:::i;46965:32::-;;;;;;;;;;;;;:::i;46130:40::-;;;;;;;;;;;;;:::i;26597:218::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;26597:218:0;;;;;;;;:::i;53358:181::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53358:181:0;;:::i;53557:248::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53557:248:0;-1:-1:-1;;;;;53557:248:0;;:::i;54713:134::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54713:134:0;-1:-1:-1;;;;;54713:134:0;;:::i;51346:107::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51346:107:0;;:::i;47853:35::-;;;;;;;;;;;;;:::i;59491:350::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;59491:350:0;;;;;;;;;;:::i;47895:42::-;;;;;;;;;;;;;:::i;45173:38::-;;;;;;;;;;;;;:::i;46270:29::-;;;;;;;;;;;;;:::i;64172:126::-;;;;;;;;;;;;;:::i;63784:94::-;;;;;;;;;;;;;:::i;56859:504::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;56859:504:0;;;;;;;;;;:::i;62259:125::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;62259:125:0;-1:-1:-1;;;;;62259:125:0;;:::i;52915:122::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52915:122:0;;;;:::i;45390:61::-;;;;;;;;;;;;;:::i;62400:129::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;62400:129:0;-1:-1:-1;;;;;62400:129:0;;:::i;53208:137::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53208:137:0;;:::i;64023:141::-;;;;;;;;;;;;;:::i;58152:315::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;58152:315:0;-1:-1:-1;;;;;58152:315:0;;:::i;62696:139::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;62696:139:0;-1:-1:-1;;;;;62696:139:0;;:::i;47208:148::-;;;;;;;;;;;;;:::i;55005:206::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;55005:206:0;;:::i;63505:271::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;63505:271:0;;:::i;24340:127::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24340:127:0;-1:-1:-1;;;;;24340:127:0;;:::i;45351:26::-;;;;;;;;;;;;;:::i;15439:148::-;;;;;;;;;;;;;:::i;45590:53::-;;;;;;;;;;;;;:::i;45993:37::-;;;;;;;;;;;;;:::i;55747:538::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;55747:538:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;45749:47::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45749:47:0;-1:-1:-1;;;;;45749:47:0;;:::i;45854:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45854:45:0;-1:-1:-1;;;;;45854:45:0;;:::i;61450:404::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;61450:404:0;;:::i;57371:773::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;57371:773:0;-1:-1:-1;;;;;57371:773:0;;:::i;54320:237::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54320:237:0;-1:-1:-1;;;;;54320:237:0;;:::i;14788:87::-;;;;;;;;;;;;;:::i;52107:159::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52107:159:0;;:::i;45653:36::-;;;;;;;;;;;;;:::i;45906:::-;;;;;;;;;;;;;:::i;23280:95::-;;;;;;;;;;;;;:::i;47765:34::-;;;;;;;;;;;;;:::i;46347:31::-;;;;;;;;;;;;;:::i;54569:132::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54569:132:0;-1:-1:-1;;;;;54569:132:0;;:::i;55217:514::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;55217:514:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;60765:264::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;60765:264:0;;;;;;;;;;:::i;47946:40::-;;;;;;;;;;;;;:::i;46600:32::-;;;;;;;;;;;;;:::i;61994:108::-;;;;;;;;;;;;;:::i;27318:269::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27318:269:0;;;;;;;;:::i;53817:239::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53817:239:0;-1:-1:-1;;;;;53817:239:0;;:::i;62537:151::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;62537:151:0;-1:-1:-1;;;;;62537:151:0;;:::i;24680:175::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24680:175:0;;;;;;;;:::i;62843:318::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;62843:318:0;-1:-1:-1;;;;;62843:318:0;;:::i;:::-;;;;-1:-1:-1;;;;;62843:318:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47171:30;;;;;;;;;;;;;:::i;54068:237::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54068:237:0;-1:-1:-1;;;;;54068:237:0;;:::i;45949:37::-;;;;;;;;;;;;;:::i;48365:58::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48365:58:0;-1:-1:-1;;;;;48365:58:0;;:::i;58475:356::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;58475:356:0;;;;;;;;;;:::i;58854:360::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;58854:360:0;;;;;;;;;;:::i;52277:156::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52277:156:0;;:::i;60451:306::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;60451:306:0;-1:-1:-1;60451:306:0;;;;:::i;52446:156::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52446:156:0;;:::i;59239:242::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;59239:242:0;-1:-1:-1;59239:242:0;;;;:::i;46083:40::-;;;;;;;;;;;;;:::i;54859:134::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54859:134:0;-1:-1:-1;;;;;54859:134:0;;:::i;46037:39::-;;;;;;;;;;;;;:::i;60159:284::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;60159:284:0;-1:-1:-1;;;;;60159:284:0;;:::i;46799:141::-;;;;;;;;;;;;;:::i;24918:151::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24918:151:0;;;;;;;;;;:::i;45527:56::-;;;;;;;;;;;;;:::i;53053:142::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53053:142:0;;;;:::i;46562:31::-;;;;;;;;;;;;;:::i;46306:34::-;;;;;;;;;;;;;:::i;46763:29::-;;;;;;;;;;;;;:::i;45220:41::-;;;;;;;;;;;;;:::i;63886:129::-;;;;;;;;;;;;;:::i;61862:124::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;61862:124:0;;:::i;51469:119::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51469:119:0;;:::i;46234:29::-;;;;;;;;;;;;;:::i;46722:34::-;;;;;;;;;;;;;:::i;63169:328::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;63169:328:0;;:::i;15742:244::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15742:244:0;-1:-1:-1;;;;;15742:244:0;;:::i;47129:35::-;;;;;;;;;;;;;:::i;52780:117::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52780:117:0;;:::i;52615:157::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52615:157:0;;:::i;46385:26::-;;;;;;;;;;;;;:::i;45458:62::-;;;;:::o;46678:37::-;;;;:::o;23070:91::-;23148:5;23141:12;;;;;;;;-1:-1:-1;;23141:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23115:13;;23141:12;;23148:5;;23141:12;;23148:5;23141:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23070:91;:::o;47084:38::-;;;;:::o;25216:169::-;25299:4;25316:39;25325:12;:10;:12::i;:::-;25339:7;25348:6;25316:8;:39::i;:::-;-1:-1:-1;25373:4:0;25216:169;;;;;:::o;46199:28::-;;;;:::o;47004:33::-;;;;:::o;47999:42::-;;;-1:-1:-1;;;;;47999:42:0;;:::o;45696:46::-;;;;;;;;;;;;;:::o;46418:120::-;;;;:::o;45125:41::-;;;-1:-1:-1;;;;;45125:41:0;;:::o;24169:108::-;24257:12;;24169:108;:::o;47044:33::-;;;;:::o;45803:44::-;;;;;;;;;;;;;:::o;46639:32::-;;;;:::o;56301:546::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;56484:19:::1;:38:::0;;;56533:16:::1;:32:::0;;;56576:13:::1;:26:::0;;;56613:14:::1;:28:::0;;;56652:14:::1;:28:::0;;;56691:11:::1;:22:::0;;;56740:99:::1;56705:8:::0;56740:85:::1;56669:11:::0;56740:85;56630:11;56740:85;56592:10;56740:85;56506:16;56552:13;56740:20:::1;:35::i;:::-;:39:::0;::::1;:51::i;:99::-;56724:13;:115:::0;-1:-1:-1;;;;;;56301:546:0:o;25867:321::-;25973:4;25990:36;26000:6;26008:9;26019:6;25990:9;:36::i;:::-;26037:121;26046:6;26054:12;:10;:12::i;:::-;26068:89;26106:6;26068:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26068:19:0;;;;;;:11;:19;;;;;;26088:12;:10;:12::i;:::-;-1:-1:-1;;;;;26068:33:0;;;;;;;;;;;;-1:-1:-1;26068:33:0;;;:89;:37;:89::i;:::-;26037:8;:121::i;:::-;-1:-1:-1;26176:4:0;25867:321;;;;;:::o;47806:34::-;;;;:::o;48050:51::-;;;;:::o;51979:109::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;52056:13:::1;:24:::0;51979:109::o;45301:41::-;;;-1:-1:-1;;;;;45301:41:0;;:::o;62110:141::-;62200:15;;:43;;;-1:-1:-1;;;62200:43:0;;;;62173:7;;-1:-1:-1;;;;;62200:15:0;;:41;;:43;;;;;;;;;;;;;;:15;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;62200:43:0;;-1:-1:-1;62110:141:0;:::o;24013:91::-;24087:9;;;;24013:91;:::o;59853:294::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;60042:15:::1;::::0;:45:::1;::::0;;-1:-1:-1;;;60042:45:0;;-1:-1:-1;;;;;60042:45:0;;::::1;;::::0;::::1;::::0;;;:15;;;::::1;::::0;:36:::1;::::0;:45;;;;;:15:::1;::::0;:45;;;;;;;:15;;:45;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;59853:294:::0;:::o;46965:32::-;;;;:::o;46130:40::-;;;-1:-1:-1;;;;;46130:40:0;;:::o;26597:218::-;26685:4;26702:83;26711:12;:10;:12::i;:::-;26725:7;26734:50;26773:10;26734:11;:25;26746:12;:10;:12::i;:::-;-1:-1:-1;;;;;26734:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;26734:25:0;;;:34;;;;;;;;;;;:38;:50::i;53358:181::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;53461:15:::1;::::0;:70:::1;::::0;;-1:-1:-1;;;53461:70:0;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;53461:15:0;;::::1;::::0;:48:::1;::::0;:70;;;;;:15:::1;::::0;:70;;;;;;;;:15;;:70;::::1;;::::0;::::1;;;;::::0;::::1;53557:248:::0;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;53639:15:::1;::::0;:50:::1;::::0;;-1:-1:-1;;;53639:50:0;;-1:-1:-1;;;;;53639:50:0;;::::1;;::::0;::::1;::::0;;;:15;;;::::1;::::0;:38:::1;::::0;:50;;;;;:15:::1;::::0;:50;;;;;;;:15;;:50;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;53700:13:0::1;:26:::0;;-1:-1:-1;;;;;;53700:26:0::1;-1:-1:-1::0;;;;;53700:26:0;;::::1;::::0;;::::1;::::0;;;;53742:55:::1;::::0;53782:13;::::1;::::0;-1:-1:-1;53700:26:0;-1:-1:-1;53742:55:0::1;::::0;-1:-1:-1;;53742:55:0::1;53557:248:::0;:::o;54713:134::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;54801:25:::1;:38:::0;;-1:-1:-1;;;;;;54801:38:0::1;-1:-1:-1::0;;;;;54801:38:0;;;::::1;::::0;;;::::1;::::0;;54713:134::o;51346:107::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;51422:23:::1;51437:7;51422:14;:23::i;:::-;51346:107:::0;:::o;47853:35::-;;;;;;:::o;59491:350::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;59691:23:0;;::::1;;::::0;;;:14:::1;:23;::::0;;;;;:34;;-1:-1:-1;;59691:34:0::1;::::0;::::1;;;::::0;;59736:15:::1;::::0;:45;;-1:-1:-1;;;59736:45:0;;::::1;::::0;::::1;::::0;;;;;;:15;::::1;::::0;:36:::1;::::0;:45;;;;;59691:23;59736:45;;;;;;59691:23;59736:15;:45;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;59491:350:::0;;:::o;47895:42::-;;;;;;;;;:::o;45173:38::-;;;:::o;46270:29::-;;;;:::o;64172:126::-;64267:23;;64248:15;:42;;64172:126;:::o;63784:94::-;63821:15;;:49;;;-1:-1:-1;;;63821:49:0;;63852:10;63821:49;;;;:15;:49;;;;;;;;-1:-1:-1;;;;;63821:15:0;;;;:30;;:49;;;;;;;;;;;;;;;;;;:15;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;63784:94:0:o;56859:504::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;56963:14:::1;:32:::0;;-1:-1:-1;;;;;;56963:32:0::1;-1:-1:-1::0;;;;;56963:32:0;;::::1;::::0;;::::1;::::0;;;;57040:14;;::::1;-1:-1:-1::0;57006:49:0;;;:33:::1;:49;::::0;;;;;:56;;-1:-1:-1;;57006:56:0::1;-1:-1:-1::0;57006:56:0::1;::::0;;57073:15:::1;::::0;:53;;-1:-1:-1;;;57073:53:0;;::::1;::::0;::::1;::::0;;;;;;:15;::::1;::::0;:36:::1;::::0;:53;;;;;-1:-1:-1;57073:53:0;;;;;;-1:-1:-1;57073:15:0;:53;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;57137:38;57153:15;57170:4;57137:15;:38::i;:::-;-1:-1:-1::0;;;;;57188:49:0;;::::1;;::::0;;;:33:::1;:49;::::0;;;;;:56;;-1:-1:-1;;57188:56:0::1;57240:4;57188:56;::::0;;57255:15:::1;::::0;:52;;-1:-1:-1;;;57255:52:0;;::::1;::::0;::::1;::::0;;;;;;:15;::::1;::::0;:36:::1;::::0;:52;;;;;57188:49;57255:52;;;;;;57188:49;57255:15;:52;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;57318:37;57334:14;57350:4;57318:15;:37::i;62259:125::-:0;-1:-1:-1;;;;;62348:28:0;62324:4;62348:28;;;:19;:28;;;;;;;;;62259:125::o;52915:122::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;52995:15:::1;:34:::0;;-1:-1:-1;;52995:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;52915:122::o;45390:61::-;;;;:::o;62400:129::-;-1:-1:-1;;;;;62491:30:0;62467:4;62491:30;;;:21;:30;;;;;;;;;62400:129::o;53208:137::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;53297:23:::1;:40:::0;53208:137::o;64023:141::-;64115:15;;:41;;;-1:-1:-1;;;64115:41:0;;;;64088:7;;-1:-1:-1;;;;;64115:15:0;;:39;;:41;;;;;;;;;;;;;;:15;:41;;;;;;;;;;58152:315;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;58263:15:::1;::::0;-1:-1:-1;;;;;58241:38:0;;::::1;58263:15:::0;::::1;58241:38;;58233:92;;;;-1:-1:-1::0;;;58233:92:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58383:15;::::0;58341:59:::1;::::0;-1:-1:-1;;;;;58383:15:0;;::::1;::::0;58341:59;::::1;::::0;::::1;::::0;58383:15:::1;::::0;58341:59:::1;58411:15;:48:::0;;-1:-1:-1;;;;;;58411:48:0::1;-1:-1:-1::0;;;;;58411:48:0;;;::::1;::::0;;;::::1;::::0;;58152:315::o;62696:139::-;62793:15;;:34;;;-1:-1:-1;;;62793:34:0;;-1:-1:-1;;;;;62793:34:0;;;;;;;;;62766:7;;62793:15;;;;;:25;;:34;;;;;;;;;;;;;;;:15;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;62793:34:0;;62696:139;-1:-1:-1;;62696:139:0:o;47208:148::-;;;;:::o;55005:206::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;55081:18:::1;55126:10;:8;:10::i;:::-;55179:11;::::0;55122:14:::1;::::0;;;::::1;:2;:14;55102:35:::0;::::1;::::0;-1:-1:-1;55148:55:0::1;::::0;55172:4:::1;::::0;-1:-1:-1;;;;;55179:11:0::1;55102:35:::0;55148:15:::1;:55::i;63505:271::-:0;63637:15;;:28;;;-1:-1:-1;;;;;;63637:28:0;;;;;;;;;;63571:18;;;;;;-1:-1:-1;;;;;63637:15:0;;;;:23;;:28;;;;;;;;;;;;;;;63571:18;63637:15;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;63637:28:0;;;;;;;;;;;;63681:87;;;;;;;;;;;;;;;;;63637:28;63681:87;;;;;;;63637:28;;-1:-1:-1;63637:28:0;-1:-1:-1;63637:28:0;;-1:-1:-1;63758:9:0;;63746:5;;63681:87;;;;;;;;;63505:271;;;;:::o;24340:127::-;-1:-1:-1;;;;;24441:18:0;24414:7;24441:18;;;;;;;;;;;;24340:127::o;45351:26::-;;;-1:-1:-1;;;;;45351:26:0;;:::o;15439:148::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;15530:6:::1;::::0;15509:40:::1;::::0;15546:1:::1;::::0;15530:6:::1;::::0;::::1;-1:-1:-1::0;;;;;15530:6:0::1;::::0;15509:40:::1;::::0;15546:1;;15509:40:::1;15560:6;:19:::0;;-1:-1:-1;;;;;;15560:19:0::1;::::0;;15439:148::o;45590:53::-;;;;:::o;45993:37::-;;;-1:-1:-1;;;;;45993:37:0;;:::o;55747:538::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;55929:18:::1;:37:::0;;;55977:15:::1;:31:::0;;;56019:12:::1;:25:::0;;;56055:13:::1;:27:::0;;;56093:13:::1;:27:::0;;;56131:10:::1;:21:::0;;;56178:99:::1;56144:8:::0;56178:85:::1;56109:11:::0;56178:85;56071:11;56178:85;56034:10;56178:85;55950:16;55995:13;56178:20:::1;:35::i;:99::-;56163:12;:114:::0;-1:-1:-1;;;;;;55747:538:0:o;45749:47::-;;;;;;;;;;;;;:::o;45854:45::-;;;;;;;;;;;;;:::o;61450:404::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;61548:6:::1;61536:8;:18;;:40;;;;;61570:6;61558:8;:18;;61536:40;61528:111;;;;-1:-1:-1::0;;;61528:111:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61670:16;;61658:8;:28;;61650:91;;;;-1:-1:-1::0;;;61650:91:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61791:16;::::0;61757:51:::1;::::0;61781:8;;61757:51:::1;::::0;;;::::1;61819:16;:27:::0;61450:404::o;57371:773::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;57482:15:::1;::::0;-1:-1:-1;;;;;57460:38:0;;::::1;57482:15:::0;::::1;57460:38;;57452:102;;;;-1:-1:-1::0;;;57452:102:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57568:37;57636:10;57568:80;;57707:4;-1:-1:-1::0;;;;;57669:43:0::1;:18;-1:-1:-1::0;;;;;57669:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;57669:26:0;-1:-1:-1;;;;;57669:43:0::1;;57661:127;;;;-1:-1:-1::0;;;57661:127:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57801:18;-1:-1:-1::0;;;;;57801:39:0::1;;57849:18;57801:68;;;;;;;;;;;;;-1:-1:-1::0;;;;;57801:68:0::1;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;57880:54:0::1;::::0;;-1:-1:-1;;;57880:54:0;;57928:4:::1;57880:54;::::0;::::1;::::0;;;-1:-1:-1;;;;;57880:39:0;::::1;::::0;-1:-1:-1;57880:39:0::1;::::0;-1:-1:-1;57880:54:0;;;;;-1:-1:-1;;57880:54:0;;;;;;;-1:-1:-1;57880:39:0;:54;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;57993:15:0::1;::::0;57945:65:::1;::::0;;-1:-1:-1;;;57945:65:0;;-1:-1:-1;;;;;57993:15:0;;::::1;57945:65;::::0;::::1;::::0;;;:39;;::::1;::::0;-1:-1:-1;57945:39:0::1;::::0;-1:-1:-1;57945:65:0;;;;;57993:15:::1;::::0;57945:65;;;;;;;;57993:15;57945:39;:65;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;58070:15:0::1;::::0;58028:59:::1;::::0;-1:-1:-1;;;;;58070:15:0;;::::1;::::0;-1:-1:-1;58028:59:0;;::::1;::::0;-1:-1:-1;58028:59:0::1;::::0;58070:15:::1;::::0;58028:59:::1;58100:15;:36:::0;;-1:-1:-1;;;;;;58100:36:0::1;-1:-1:-1::0;;;;;58100:36:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;57371:773:0:o;54320:237::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;54408:14:::1;:27:::0;;-1:-1:-1;;;;;54408:27:0;;::::1;-1:-1:-1::0;;;;;;54408:27:0;;::::1;::::0;::::1;::::0;;:14:::1;54446:31:::0;;;:19:::1;:31;::::0;;;;:38;;-1:-1:-1;;54446:38:0::1;54408:27:::0;54446:38:::1;::::0;;54320:237::o;14788:87::-;14861:6;;;;;-1:-1:-1;;;;;14861:6:0;;14788:87::o;52107:159::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;52247:10:::1;:8;:10::i;:::-;52243:14;;:2;:14;52219:39;52192:24;:66:::0;52107:159::o;45653:36::-;;;;:::o;45906:::-;;;-1:-1:-1;;;;;45906:36:0;;:::o;23280:95::-;23360:7;23353:14;;;;;;;;-1:-1:-1;;23353:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23327:13;;23353:14;;23360:7;;23353:14;;23360:7;23353:14;;;;;;;;;;;;;;;;;;;;;;;;47765:34;;;;:::o;46347:31::-;;;;:::o;54569:132::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;54656:24:::1;:37:::0;;-1:-1:-1;;;;;;54656:37:0::1;-1:-1:-1::0;;;;;54656:37:0;;;::::1;::::0;;;::::1;::::0;;54569:132::o;55217:514::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;55396:15:::1;:34:::0;;;55441:12:::1;:28:::0;;;55480:9:::1;:22:::0;;;55513:10:::1;:24:::0;;;55548:10:::1;:24:::0;;;55583:7:::1;:18:::0;;;55624:99:::1;55593:8:::0;55624:85:::1;55561:11:::0;55624:85;55526:11;55624:85;55492:10;55624:85;55414:16;55456:13;55624:20:::1;:35::i;:99::-;55612:9;:111:::0;-1:-1:-1;;;;;;55217:514:0:o;60765:264::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;60874:13:::1;-1:-1:-1::0;;;;;60866:21:0::1;:4;-1:-1:-1::0;;;;;60866:21:0::1;;;60858:109;;;;-1:-1:-1::0;;;60858:109:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60980:41;61009:4;61015:5;60980:28;:41::i;47946:40::-:0;;;;:::o;46600:32::-;;;;:::o;61994:108::-;62067:15;;:27;;;-1:-1:-1;;;62067:27:0;;;;62040:7;;-1:-1:-1;;;;;62067:15:0;;:25;;:27;;;;;;;;;;;;;;:15;:27;;;;;;;;;;27318:269;27411:4;27428:129;27437:12;:10;:12::i;:::-;27451:7;27460:96;27499:15;27460:96;;;;;;;;;;;;;;;;;:11;:25;27472:12;:10;:12::i;:::-;-1:-1:-1;;;;;27460:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;27460:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;53817:239::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;53904:13:::1;:26:::0;;-1:-1:-1;;;;;53904:26:0;;::::1;-1:-1:-1::0;;;;;;53904:26:0;;::::1;::::0;::::1;::::0;;:13:::1;53941:31:::0;;;:19:::1;:31;::::0;;;;:38;;-1:-1:-1;;53941:38:0::1;53904:26:::0;53941:38:::1;::::0;;53817:239::o;62537:151::-;62633:15;;:47;;;-1:-1:-1;;;62633:47:0;;-1:-1:-1;;;;;62633:47:0;;;;;;;;;62606:7;;62633:15;;;;;:38;;:47;;;;;;;;;;;;;;;:15;:47;;;;;;;;;;24680:175;24766:4;24783:42;24793:12;:10;:12::i;:::-;24807:9;24818:6;24783:9;:42::i;62843:318::-;62939:7;62961:6;62982;63003:7;63025;63047;63069;63091;63118:15;;;;;;;;;-1:-1:-1;;;;;63118:15:0;-1:-1:-1;;;;;63118:26:0;;63145:7;63118:35;;;;;;;;;;;;;-1:-1:-1;;;;;63118:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;63118:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;63118:35:0;;-1:-1:-1;63118:35:0;;-1:-1:-1;63118:35:0;-1:-1:-1;63118:35:0;-1:-1:-1;63118:35:0;-1:-1:-1;63118:35:0;;-1:-1:-1;63118:35:0;-1:-1:-1;62843:318:0;;;;;;;;;:::o;47171:30::-;;;;:::o;54068:237::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;54156:14:::1;:27:::0;;-1:-1:-1;;;;;54156:27:0;;::::1;-1:-1:-1::0;;;;;;54156:27:0;;::::1;::::0;::::1;::::0;;:14:::1;54194:31:::0;;;:19:::1;:31;::::0;;;;:38;;-1:-1:-1;;54194:38:0::1;54156:27:::0;54194:38:::1;::::0;;54068:237::o;45949:37::-;;;-1:-1:-1;;;;;45949:37:0;;:::o;48365:58::-;;;;;;;;;;;;;;;:::o;58475:356::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;58674:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:39;;-1:-1:-1;;58674:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;58475:356::o;58854:360::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;59055:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:41;;-1:-1:-1;;59055:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;58854:360::o;52277:156::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;52414:10:::1;:8;:10::i;:::-;52410:14;;:2;:14;52386:39;52368:15;:57:::0;52277:156::o;60451:306::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;60570:9:::1;60566:115;60585:19:::0;;::::1;60566:115;;;60661:8;60626:19;:32;60646:8;;60655:1;60646:11;;;;;;;;::::0;;::::1;::::0;;;::::1;;-1:-1:-1::0;;;;;60646:11:0::1;60626:32:::0;;-1:-1:-1;60626:32:0;::::1;::::0;;;;;;-1:-1:-1;60626:32:0;:43;;-1:-1:-1;;60626:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;60606:3:0::1;60566:115;;;;60698:51;60730:8;;60740;60698:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;-1:-1:-1::0;;60698:51:0::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;60698:51:0;;-1:-1:-1;;;;;60698:51:0::1;60451:306:::0;;;:::o;52446:156::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;52583:10:::1;:8;:10::i;:::-;52579:14;;:2;:14;52555:39;52534:18;:60:::0;52446:156::o;59239:242::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;59360:9:::1;59356:117;59375:19:::0;;::::1;59356:117;;;59453:8;59416:21;:34;59438:8;;59447:1;59438:11;;;;;;;;::::0;;::::1;::::0;;;::::1;;-1:-1:-1::0;;;;;59438:11:0::1;59416:34:::0;;-1:-1:-1;59416:34:0;::::1;::::0;;;;;;-1:-1:-1;59416:34:0;:45;;-1:-1:-1;;59416:45:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;59396:3:0::1;59356:117;;;;59239:242:::0;;;:::o;46083:40::-;;;-1:-1:-1;;;;;46083:40:0;;:::o;54859:134::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;54947:25:::1;:38:::0;;-1:-1:-1;;;;;;54947:38:0::1;-1:-1:-1::0;;;;;54947:38:0;;;::::1;::::0;;;::::1;::::0;;54859:134::o;46037:39::-;;;-1:-1:-1;;;;;46037:39:0;;:::o;60159:284::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;60343:15:::1;::::0;:40:::1;::::0;;-1:-1:-1;;;60343:40:0;;-1:-1:-1;;;;;60343:40:0;;::::1;;::::0;::::1;::::0;;;:15;;;::::1;::::0;:31:::1;::::0;:40;;;;;:15:::1;::::0;:40;;;;;;;:15;;:40;::::1;;::::0;::::1;;;;::::0;::::1;46799:141:::0;;;;:::o;24918:151::-;-1:-1:-1;;;;;25034:18:0;;;25007:7;25034:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;24918:151::o;45527:56::-;;;;:::o;53053:142::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;53143:22:::1;:44:::0;;;::::1;;;;-1:-1:-1::0;;53143:44:0;;::::1;::::0;;;::::1;::::0;;53053:142::o;46562:31::-;;;;:::o;46306:34::-;;;;:::o;46763:29::-;;;;:::o;45220:41::-;;;-1:-1:-1;;;;;45220:41:0;;:::o;63886:129::-;63968:15;;:39;;;-1:-1:-1;;;63968:39:0;;;;63941:7;;-1:-1:-1;;;;;63968:15:0;;:37;;:39;;;;;;;;;;;;;;:15;:39;;;;;;;;;;61862:124;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;61936:15:::1;::::0;:42:::1;::::0;;-1:-1:-1;;;61936:42:0;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;61936:15:0;;::::1;::::0;:31:::1;::::0;:42;;;;;:15:::1;::::0;:42;;;;;;;;:15;;:42;::::1;;::::0;::::1;;;;::::0;::::1;51469:119:::0;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;51551:29:::1;51572:7;51551:20;:29::i;46234:::-:0;;;;:::o;46722:34::-;;;;:::o;63169:328::-;63270:7;63292:6;63313;63334:7;63356;63378;63400;63422;63449:15;;;;;;;;;-1:-1:-1;;;;;63449:15:0;-1:-1:-1;;;;;63449:33:0;;63483:5;63449:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15742:244;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;15831:22:0;::::1;15823:73;;;;-1:-1:-1::0;;;15823:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15933:6;::::0;15912:38:::1;::::0;-1:-1:-1;;;;;15912:38:0;;::::1;::::0;15933:6:::1;::::0;::::1;;::::0;15912:38:::1;::::0;;;::::1;15961:6;:17:::0;;-1:-1:-1;;;;;15961:17:0;;::::1;;;-1:-1:-1::0;;;;;;15961:17:0;;::::1;::::0;;;::::1;::::0;;15742:244::o;47129:35::-;;;;:::o;52780:117::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;52861:12:::1;:28:::0;52780:117::o;52615:157::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;52753:10:::1;:8;:10::i;:::-;52749:14;;:2;:14;52725:20;:39;52699:23;:65;;;;52615:157:::0;:::o;46385:26::-;;;;:::o;34703:179::-;34761:7;34793:5;;;34817:6;;;;34809:46;;;;;-1:-1:-1;;;34809:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;34873:1;34703:179;-1:-1:-1;;;34703:179:0:o;3422:106::-;3510:10;3422:106;:::o;30465:346::-;-1:-1:-1;;;;;30567:19:0;;30559:68;;;;-1:-1:-1;;;30559:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30646:21:0;;30638:68;;;;-1:-1:-1;;;30638:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30719:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;30771:32;;;;;;;;;;;;;;;;;30465:346;;;:::o;70621:6613::-;-1:-1:-1;;;;;70754:20:0;;;;;;:14;:20;;;;;;;;70753:21;70745:70;;;;-1:-1:-1;;;70745:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;70835:18:0;;;;;;:14;:18;;;;;;;;70834:19;70826:68;;;;-1:-1:-1;;;70826:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;70913:18:0;;70905:66;;;;-1:-1:-1;;;70905:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;70990:16:0;;70982:64;;;;-1:-1:-1;;;70982:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;71060:11;71057:92;;71088:28;71104:4;71110:2;71114:1;71088:15;:28::i;:::-;71131:7;;71057:92;71161:14;71220:7;:5;:7::i;:::-;-1:-1:-1;;;;;71212:15:0;:4;-1:-1:-1;;;;;71212:15:0;;;:48;;;;-1:-1:-1;;;;;;71244:16:0;;;;71212:48;:86;;;;-1:-1:-1;;;;;;71277:21:0;;71291:6;71277:21;;71212:86;:134;;;;-1:-1:-1;;;;;;71315:31:0;;;;;;:25;:31;;;;;;;;71212:134;71194:1043;;;-1:-1:-1;;;;;71377:27:0;;;;;;:21;:27;;;;;;;;71373:198;;71456:23;;71446:6;:33;;71420:135;;;;-1:-1:-1;;;71420:135:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;71607:9:0;;;71587:17;:29;71652:10;;;71631:18;:31;71698:10;;;71677:18;:31;71749:15;;;71723:23;:41;71802:12;;;71779:20;:35;;;71829:15;:30;71894:9;;;71874:17;:29;71930:12;;71918:24;;;71970:13;;71957:26;;;72011:13;;71998:26;;;72057:18;;72039:36;;72105:15;;72090:30;;72145:10;;72135:7;:20;72182:12;;72170:24;;-1:-1:-1;71194:1043:0;72257:21;72281;:19;:21::i;:::-;72257:45;;72327:16;72323:163;;-1:-1:-1;;;;;72368:39:0;;;;;;:33;:39;;;;;;;;72360:114;;;;-1:-1:-1;;;72360:114:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;72524:7;:5;:7::i;:::-;-1:-1:-1;;;;;72516:15:0;:4;-1:-1:-1;;;;;72516:15:0;;;:41;;;;-1:-1:-1;72549:8:0;;-1:-1:-1;;;72549:8:0;;;;72548:9;72516:41;:74;;;;;72574:16;72516:74;:120;;;;-1:-1:-1;;;;;;72607:29:0;;;;;;:25;:29;;;;;;;;72516:120;:236;;;;-1:-1:-1;72736:15:0;;-1:-1:-1;;;;;72720:32:0;;;72736:15;;72720:32;;72516:236;:341;;;;-1:-1:-1;;;;;;72834:23:0;;;;;;:19;:23;;;;;;;;72833:24;72516:341;72498:1909;;;72972:13;;-1:-1:-1;;;;;72954:15:0;;;;;;:9;:15;;;;;;72988;72954:31;;:49;72951:108;;;-1:-1:-1;;;;;73023:16:0;;73042:1;73023:16;;;:10;:16;;;;;:20;72951:108;-1:-1:-1;;;;;73079:27:0;;;;;;:21;:27;;;;;;;;73075:292;;73163:24;;-1:-1:-1;;;;;73143:16:0;;;;;;:10;:16;;;;;;73134:25;;:53;;73126:132;;;;-1:-1:-1;;;73126:132:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;73438:16:0;;73457:1;73438:16;;;:10;:16;;;;;;:20;73434:277;;-1:-1:-1;;;;;73479:16:0;;;;;;:10;:16;;;;;:26;;;;;;73434:277;;;-1:-1:-1;;;;;73544:15:0;;;;;;:9;:15;;;;;;;;73562;73544:33;;73669:10;:16;;;;;:26;;;;;;73434:277;73761:9;;;73741:17;:29;73806:10;;;73785:18;:31;73852:10;;;73831:18;:31;73903:15;;;73877:23;:41;73956:12;;;73933:20;:35;74001:7;;;73983:15;:25;74043:9;;;74023:17;:29;74079:13;;74067:25;;;74120:14;;74107:27;;;74162:14;;74149:27;;;74209:19;;74191:37;;74258:16;;74243:31;;74299:11;;74289:21;;74337:13;;74325:25;;-1:-1:-1;;;72498:1909:0;74419:28;74450:24;74468:4;74450:9;:24::i;:::-;74534:18;;74419:55;;-1:-1:-1;74510:42:0;;;74582:16;:41;;;;;74616:7;74582:41;:67;;;;-1:-1:-1;74641:8:0;;-1:-1:-1;;;74641:8:0;;;;74640:9;74582:67;:116;;;;-1:-1:-1;;;;;;74667:31:0;;;;;;:25;:31;;;;;;;;74666:32;74582:116;:152;;;;-1:-1:-1;74723:11:0;;-1:-1:-1;;;;;74715:19:0;;;74723:11;;74715:19;;74582:152;:186;;;;-1:-1:-1;74757:11:0;;-1:-1:-1;;;;;74751:17:0;;;74757:11;;74751:17;;74582:186;74565:667;;;74795:8;:15;;-1:-1:-1;;;;74795:15:0;-1:-1:-1;;;74795:15:0;;;75059:18;;75044:34;;:14;:34::i;:::-;75095:18;75116:24;75134:4;75116:9;:24::i;:::-;75095:45;;75155:32;75176:10;75155:20;:32::i;:::-;-1:-1:-1;75204:8:0;:16;;-1:-1:-1;;;;75204:16:0;;;74565:667;75246:12;75261:16;:29;;;;-1:-1:-1;75282:8:0;;-1:-1:-1;;;75282:8:0;;;;75281:9;75261:29;-1:-1:-1;;;;;75391:25:0;;;;;;:19;:25;;;;;;75246:44;;-1:-1:-1;75391:25:0;;;:52;;-1:-1:-1;;;;;;75420:23:0;;;;;;:19;:23;;;;;;;;75391:52;:78;;;-1:-1:-1;75447:22:0;;;;;;;75391:78;75388:125;;;-1:-1:-1;75496:5:0;75388:125;75528:7;:20;;;;75539:9;75528:20;75525:940;;;-1:-1:-1;;;;;75569:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;75598:23:0;;;;;;:19;:23;;;;;;;;75569:52;75566:538;;;;;;75740:15;75758:22;75772:7;;75758:9;;:13;;:22;;;;:::i;:::-;75740:40;-1:-1:-1;75795:17:0;75815:28;75839:3;75815:19;:6;75740:40;75815:10;:19::i;:::-;:23;;:28::i;:::-;75795:48;;75858:15;75876:28;75900:3;75876:19;75887:7;;75876:6;:10;;:19;;;;:::i;:28::-;75858:46;-1:-1:-1;75928:37:0;75858:46;75928:21;:6;75939:9;75928:10;:21::i;:::-;:25;;:37::i;:::-;75919:46;;75980:47;75996:4;76010;76017:9;75980:15;:47::i;:::-;76064:11;;76042:46;;76058:4;;-1:-1:-1;;;;;76064:11:0;76077:10;76042:15;:46::i;:::-;75566:538;;;;75525:940;;;-1:-1:-1;;;;;76137:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;76166:23:0;;;;;;:19;:23;;;;;;;;76137:52;76134:320;;;;;;76285:15;76303:28;76327:3;76303:19;76314:7;;76303:6;:10;;:19;;;;:::i;:28::-;76285:46;-1:-1:-1;76355:22:0;:6;76285:46;76355:10;:22::i;:::-;76414:11;;76346:31;;-1:-1:-1;76392:46:0;;76408:4;;-1:-1:-1;;;;;76414:11:0;76427:10;76392:15;:46::i;:::-;76134:320;;76487:33;76503:4;76509:2;76513:6;76487:15;:33::i;:::-;76535:13;:11;:13::i;:::-;76575:15;;-1:-1:-1;;;;;76575:15:0;:26;76610:4;76617:15;76610:4;76617:9;:15::i;:::-;76575:58;;;;;;;;;;;;;-1:-1:-1;;;;;76575:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;76571:74;76659:15;;-1:-1:-1;;;;;76659:15:0;:26;76694:2;76699:13;76694:2;76699:9;:13::i;:::-;76659:54;;;;;;;;;;;;;-1:-1:-1;;;;;76659:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;76655:70;76775:19;;76811:8;;76756:15;:38;;;;;;-1:-1:-1;;;76811:8:0;;;;76810:9;:24;;;;;76823:11;76810:24;76807:420;;;76865:16;;76919:12;;76896:19;:35;;;;;;;76950:15;;:28;;;-1:-1:-1;;;;;;76950:28:0;;;;;;;;;;-1:-1:-1;;;;;76950:15:0;;;;:23;;:28;;;;;;;;;;;;;;;76851:11;76950:15;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;76950:28:0;;;;;;;;;;;;;;;;76946:270;;;;;77076:86;;;;;;;;;;;;;;;;;;;;;;;;;;77152:9;;77141:4;;77076:86;;;;;;;;;76979:199;;;76946:270;76807:420;;70621:6613;;;;;;;;;;:::o;37530:166::-;37616:7;37652:12;37644:6;;;;37636:29;;;;-1:-1:-1;;;37636:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;37683:5:0;;;37530:166::o;64306:2952::-;64366:21;64398:22;64431;64477:9;;64490:1;64477:14;64474:91;;64523:30;64549:3;64523:21;64534:9;;64523:6;:10;;:21;;;;:::i;:30::-;64507:46;;64474:91;64578:10;;:15;64575:94;;64626:31;64653:3;64626:22;64637:10;;64626:6;:10;;:22;;;;:::i;:31::-;64609:48;;64575:94;64682:10;;:15;64679:94;;64730:31;64757:3;64730:22;64741:10;;64730:6;:10;;:22;;;;:::i;:31::-;64713:48;;64679:94;64810:22;;;:39;;;:56;;;64785:22;64947:13;64810:6;64958:1;64947:10;:13::i;:::-;64928:32;-1:-1:-1;64971:12:0;64986:21;:14;65005:1;64986:18;:21::i;:::-;64971:36;-1:-1:-1;65018:17:0;65038:24;:14;64971:36;65038:18;:24::i;:::-;65018:44;-1:-1:-1;65365:21:0;65431:26;65448:8;65431:16;:26::i;:::-;65586:18;65607:41;:21;65633:14;65607:25;:41::i;:::-;65586:62;;65661:24;65696:25;65732;65773:9;;65786:1;65773:14;65770:98;;65822:34;65852:3;65822:25;65837:9;;65822:10;:14;;:25;;;;:::i;:34::-;65803:53;;65770:98;65881:10;;:15;65878:101;;65932:35;65963:3;65932:26;65947:10;;65932;:14;;:26;;;;:::i;:35::-;65912:55;;65878:101;65992:10;;:15;65989:101;;66043:35;66074:3;66043:26;66058:10;;66043;:14;;:26;;;;:::i;:35::-;66023:55;;65989:101;66133:29;;;:49;;;:69;;;66233:9;66258:21;;66255:274;;66294:24;;-1:-1:-1;;;;;66294:24:0;:38;66291:237;;66383:24;;66409:13;;66348:75;;66365:16;;-1:-1:-1;;;;;66383:24:0;;;;66409:13;66348:16;:75::i;:::-;66291:237;;;66469:13;;:47;;66455:9;;-1:-1:-1;;;;;66469:13:0;;66495:16;;66455:9;66469:47;66455:9;66469:47;66495:16;66469:13;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;66291:237:0;66544:22;;66541:289;;66589:25;;-1:-1:-1;;;;;66589:25:0;:39;66586:243;;66680:25;;66707:14;;66644:78;;66661:17;;-1:-1:-1;;;;;66680:25:0;;;;66707:14;66644:16;:78::i;:::-;66586:243;;;66768:14;;:49;;66754:9;;-1:-1:-1;;;;;66768:14:0;;66795:17;;66754:9;66768:49;66754:9;66768:49;66795:17;66768:14;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;66586:243:0;66853:22;;66850:253;;66898:15;;;;66895:207;;;66980:14;;66929:66;;66946:17;;66973:4;;-1:-1:-1;;;;;66980:14:0;66929:16;:66::i;:::-;66895:207;;;67041:14;;:49;;67027:9;;-1:-1:-1;;;;;67041:14:0;;67068:17;;67027:9;67041:49;67027:9;67041:49;67068:17;67041:14;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;66895:207:0;67152:37;67165:9;67176:12;67152;:37::i;:::-;67205:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;64306:2952;;;;;;;;;;;;;;;:::o;28077:539::-;-1:-1:-1;;;;;28183:20:0;;28175:70;;;;-1:-1:-1;;;28175:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28264:23:0;;28256:71;;;;-1:-1:-1;;;28256:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28340:47;28361:6;28369:9;28380:6;28340:20;:47::i;:::-;28420:71;28442:6;28420:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28420:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;28400:17:0;;;:9;:17;;;;;;;;;;;:91;;;;28525:20;;;;;;;:32;;28550:6;28525:24;:32::i;:::-;-1:-1:-1;;;;;28502:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;28573:35;;;;;;;28502:20;;28573:35;;;;;;;;;;;;;28077:539;;;:::o;61037:405::-;-1:-1:-1;;;;;61128:31:0;;;;;;:25;:31;;;;;;;;:40;;;;;;;61120:115;;;;-1:-1:-1;;;61120:115:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;61246:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;61246:39:0;;;;;;;;;;;;61298:79;;61323:15;;:42;;;-1:-1:-1;;;61323:42:0;;-1:-1:-1;;;;;61323:42:0;;;;;;;;;:15;;;;;:36;;:42;;;;;:15;;:42;;;;;;;:15;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61298:79;61394:40;;;;;;-1:-1:-1;;;;;61394:40:0;;;;;;;;61037:405;;:::o;67305:942::-;67408:15;;67497:13;;-1:-1:-1;;;;;67408:15:0;;;;67370:27;;;;67497:13;:27;67494:593;;67540:42;67560:6;67576:4;67540:19;:42::i;:::-;67616:13;;67609:46;;;-1:-1:-1;;;67609:46:0;;67649:4;67609:46;;;;;;-1:-1:-1;;;;;67616:13:0;;;;67609:31;;:46;;;;;;;;;;;;;;;67616:13;67609:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;67609:46:0;67687:13;;67719:15;;67680:67;;;-1:-1:-1;;;67680:67:0;;-1:-1:-1;;;;;67719:15:0;;;67680:67;;;;;;;;;;;;67609:46;;-1:-1:-1;67687:13:0;;;67680:30;;:67;;;;;67609:46;;67680:67;;;;;;;;67687:13;;67680:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;67680:67:0;;-1:-1:-1;67494:593:0;;;67803:21;67839:24;67856:6;67839:16;:24::i;:::-;67878:18;67899:41;:21;67925:14;67899:25;:41::i;:::-;68007:39;;67878:62;;-1:-1:-1;67878:62:0;;-1:-1:-1;67993:9:0;;-1:-1:-1;;;;;68007:16:0;;;67878:62;;67993:9;68007:39;67993:9;68007:39;67878:62;68007:16;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;67992:54:0;;-1:-1:-1;;;;;67494:593:0;68101:7;68097:143;;;68125:15;;:51;;;-1:-1:-1;;;68125:51:0;;;;;;;;;;-1:-1:-1;;;;;68125:15:0;;;;:40;;:51;;;;;:15;;:51;;;;;;;;:15;;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;68196:32:0;;;;;;;;;;;;;;;;-1:-1:-1;68196:32:0;;;;;;;;-1:-1:-1;68196:32:0;67305:942;;;;:::o;35165:158::-;35223:7;35256:1;35251;:6;;35243:49;;;;;-1:-1:-1;;;35243:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35310:5:0;;;35165:158::o;35582:220::-;35640:7;35664:6;35660:20;;-1:-1:-1;35679:1:0;35672:8;;35660:20;35703:5;;;35707:1;35703;:5;:1;35727:5;;;;;:10;35719:56;;;;-1:-1:-1;;;35719:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36280:153;36338:7;36370:1;36366;:5;36358:44;;;;;-1:-1:-1;;;36358:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;36424:1;36420;:5;;;;;;;36280:153;-1:-1:-1;;;36280:153:0:o;51594:366::-;51653:17;;51641:9;:29;51698:18;;51685:10;:31;51744:18;;51731:10;:31;51795:23;;51777:15;:41;51848:20;;51833:12;:35;51893:15;;51883:7;:25;51935:17;;51923:9;:29;51594:366::o;68798:603::-;68952:16;;;68966:1;68952:16;;;;;;;;68928:21;;68952:16;;;;;;;;;;-1:-1:-1;68952:16:0;68928:40;;68997:4;68979;68984:1;68979:7;;;;;;;;-1:-1:-1;;;;;68979:23:0;;;:7;;;;;;;;;;:23;;;;69023:15;;:22;;;-1:-1:-1;;;69023:22:0;;;;:15;;;;;:20;;:22;;;;;68979:7;;69023:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;69023:22:0;69013:7;;:4;;69018:1;;69013:7;;;;;;-1:-1:-1;;;;;69013:32:0;;;:7;;;;;;;;;:32;69090:15;;69058:62;;69075:4;;69090:15;69108:11;69058:8;:62::i;:::-;69159:15;;:224;;-1:-1:-1;;;69159:224:0;;;;;;;;:15;:224;;;;;;69337:4;69159:224;;;;;;69357:15;69159:224;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;69159:15:0;;;;:66;;69240:11;;69310:4;;69337;69357:15;69159:224;;;;;;;;;;;;;;;;:15;:224;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;68254:538;68442:16;;;68456:1;68442:16;;;;;;;;68418:21;;68442:16;;;;;;;;-1:-1:-1;;68479:15:0;;:22;;;-1:-1:-1;;;68479:22:0;;;;68418:40;;-1:-1:-1;;;;;;68479:15:0;;;;:20;;-1:-1:-1;68479:22:0;;;;;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;68479:22:0;68469:7;;:4;;68474:1;;68469:7;;;;;;;;;:32;-1:-1:-1;;;;;68469:32:0;;;-1:-1:-1;;;;;68469:32:0;;;;;68522:12;68512:4;68517:1;68512:7;;;;;;;;-1:-1:-1;;;;;68512:22:0;;;:7;;;;;;;;;;:22;;;;68573:15;;:211;;-1:-1:-1;;;68573:211:0;;:15;:211;;;;;;;;;;;;;68758:15;68573:211;;;;;;;;;;;;;;;;;;;;;:15;;;;;:66;;68647:9;;68573:15;;68716:4;;68735:8;;68573:211;;;;;;;;;;;;;;;:15;:211;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;70076:537;70267:15;;70235:62;;70252:4;;-1:-1:-1;;;;;70267:15:0;70285:11;70235:8;:62::i;:::-;70339:15;;70543:11;;70339:256;;;-1:-1:-1;;;70339:256:0;;70411:4;70339:256;;;;;;;;;;:15;:256;;;;;;;;;;-1:-1:-1;;;;;70543:11:0;;;70339:256;;;;70569:15;70339:256;;;;;;:15;;;;;:31;;70378:9;;70339:256;;;;;;;;;;;;;;;70378:9;70339:15;:256;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;69407:663;69587:16;;;69601:1;69587:16;;;;;;;;;69563:21;;69587:16;;;;;;;;;;-1:-1:-1;69587:16:0;69563:40;;69632:4;69614;69619:1;69614:7;;;;;;;;-1:-1:-1;;;;;69614:23:0;;;:7;;;;;;;;;;:23;;;;69658:15;;:22;;;-1:-1:-1;;;69658:22:0;;;;:15;;;;;:20;;:22;;;;;69614:7;;69658:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;69658:22:0;69648:7;;:4;;69653:1;;69648:7;;;;;;-1:-1:-1;;;;;69648:32:0;;;:7;;;;;;;;;:32;69701:13;;69691:7;;69701:13;;;69691:4;;69696:1;;69691:7;;;;;;-1:-1:-1;;;;;69691:23:0;;;:7;;;;;;;;;:23;69759:15;;69727:62;;69744:4;;69759:15;69777:11;69727:8;:62::i;:::-;69828:15;;:224;;-1:-1:-1;;;69828:224:0;;;;;;;;:15;:224;;;;;;-1:-1:-1;;;;;69828:224:0;;;;;;;70026:15;69828:224;;;;;;;;;;;;;;;;;;;;;:15;;;;;:69;;69912:11;;69983:4;;70002:9;;70026:15;69828:224;;;;;;;;;;;;;;:15;:224;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;69407:663;;;:::o
Swarm Source
ipfs://64c015715837b83714f1b841e08c61144160edd88884c8c6522fc4796708b0dd
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.