ERC-20
Overview
Max Total Supply
100,000 REDABB
Holders
77
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
RewardDABB
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-12-28 */ // SPDX-License-Identifier: Unlicensed pragma solidity 0.8.17; /** * @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); } // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } /** * @dev 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 meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } 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; } 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; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } /** * @dev Interface for the Buy Back Reward contract that can be used to build * custom logic to elevate user rewards */ interface IConditional { /** * @dev Returns whether a wallet passes the test. */ function passesTest(address wallet) external view returns (bool); } contract RewardDABB is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; address payable public treasuryWallet = payable(0x026777F93789aC717bd87746617760BDfd67AeDD); address public constant deadAddress = 0x000000000000000000000000000000000000dEaD; mapping(address => uint256) private _rOwned; mapping(address => uint256) private _tOwned; mapping(address => mapping(address => uint256)) private _allowances; mapping(address => bool) private _isSniper; address[] private _confirmedSnipers; uint256 public rewardsClaimTimeSeconds = 60 * 60 * 24 * 7; // 1 week mapping(address => uint256) private _rewardsLastClaim; mapping(address => bool) private _isExcludedFee; mapping(address => bool) private _isExcludedReward; address[] private _excluded; string private constant _name = 'Reward DABB'; string private constant _symbol = 'REDABB'; uint8 private constant _decimals = 9; uint256 private constant MAX = ~uint256(0); uint256 private constant _tTotal = 1e5 * 10**_decimals; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; uint256 public reflectionFee = 0; uint256 private _previousReflectFee = reflectionFee; uint256 public treasuryFee = 5; uint256 private _previousTreasuryFee = treasuryFee; uint256 public ethRewardsFee = 0; uint256 private _previousETHRewardsFee = ethRewardsFee; uint256 public ethRewardsBalance; uint256 public buybackFee = 0; uint256 private _previousBuybackFee = buybackFee; address public buybackTokenAddress = 0x82F729d6fbc640f99f3dB63512835fA8F7be4BE1; address public buybackReceiver = address(this); uint256 public feeSellMultiplier = 5; uint256 public feeRate = 10; uint256 public launchTime; uint256 public boostRewardsPercent = 50; address public boostRewardsContract; address public feeExclusionContract; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; mapping(address => bool) private _isUniswapPair; // PancakeSwap: 0x10ED43C718714eb63d5aA57B78B54704E256024E // Uniswap V2: 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D address private constant _uniswapRouterAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; bool private _inSwapAndLiquify; bool private _isSelling; bool private _tradingOpen = false; bool private _isMaxBuyActivated = true; uint256 public _maxTxAmount = _tTotal.mul(2).div(100); // 2% uint256 public _maxWalletSize = _tTotal.mul(2).div(100); // 2% uint256 public _maximumBuyAmount = _tTotal.mul(2).div(100); // 2% event MaxTxAmountUpdated(uint256 _maxTxAmount); event MaxWalletSizeUpdated(uint256 _maxWalletSize); event SendETHRewards(address to, uint256 amountETH); event SendTokenRewards(address to, address token, uint256 amount); event SwapETHForTokens(address whereTo, uint256 amountIn, address[] path); event SwapTokensForETH(uint256 amountIn, address[] path); event SwapAndLiquify( uint256 tokensSwappedForEth, uint256 ethAddedForLp, uint256 tokensAddedForLp ); modifier lockTheSwap() { _inSwapAndLiquify = true; _; _inSwapAndLiquify = false; } constructor() { _rOwned[_msgSender()] = _rTotal; emit Transfer(address(0), _msgSender(), _tTotal); } function initContract() external onlyOwner { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( _uniswapRouterAddress ); uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair( address(this), _uniswapV2Router.WETH() ); uniswapV2Router = _uniswapV2Router; _isExcludedFee[owner()] = true; _isExcludedFee[address(this)] = true; _isExcludedFee[treasuryWallet] = true; } function openTrading() external onlyOwner { treasuryFee = _previousTreasuryFee; ethRewardsFee = _previousETHRewardsFee; reflectionFee = _previousReflectFee; buybackFee = _previousBuybackFee; _tradingOpen = true; launchTime = block.timestamp; } function name() external pure returns (string memory) { return _name; } function symbol() external pure returns (string memory) { return _symbol; } function decimals() external pure returns (uint8) { return _decimals; } function totalSupply() external pure override returns (uint256) { return _tTotal; } function MaxTXAmount() external view returns (uint256) { return _maxTxAmount; } function MaxWalletSize() external view returns (uint256) { return _maxWalletSize; } function balanceOf(address account) public view override returns (uint256) { if (_isExcludedReward[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) external override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) external view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) external override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) external override returns (bool) { _transfer(sender, recipient, amount); _approve( sender, _msgSender(), _allowances[sender][_msgSender()].sub( amount, 'ERC20: transfer amount exceeds allowance' ) ); return true; } function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue) ); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].sub( subtractedValue, 'ERC20: decreased allowance below zero' ) ); return true; } function setMaxTxnAmount(uint256 maxTxAmountPercetange) external onlyOwner{ require(maxTxAmountPercetange < 1000, "Maximum amount per transaction must be lower than 100%"); require(maxTxAmountPercetange > 1, "Maximum amount per transaction must be higher than 0.1%"); _maxTxAmount = _tTotal.mul(maxTxAmountPercetange).div(1000); emit MaxTxAmountUpdated(_maxTxAmount); } function setMaxWalletSize(uint256 maxWalletSizePercentage) external onlyOwner{ require(maxWalletSizePercentage < 1000, "Maximum wallet size must be lower than 100%"); require(maxWalletSizePercentage > 10, "Maximum wallet size must be higher than 1%"); _maxWalletSize = _tTotal.mul(maxWalletSizePercentage).div(1000); emit MaxWalletSizeUpdated(_maxWalletSize); } function getLastETHRewardsClaim(address wallet) external view returns (uint256) { return _rewardsLastClaim[wallet]; } function totalFees() external view returns (uint256) { return _tFeeTotal; } function deliver(uint256 tAmount) external { address sender = _msgSender(); require( !_isExcludedReward[sender], 'Excluded addresses cannot call this function' ); (uint256 rAmount, , , , , ) = _getValues(sender, tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) external view returns (uint256) { require(tAmount <= _tTotal, 'Amount must be less than supply'); if (!deductTransferFee) { (uint256 rAmount, , , , , ) = _getValues(address(0), tAmount); return rAmount; } else { (, uint256 rTransferAmount, , , , ) = _getValues(address(0), tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns (uint256) { require(rAmount <= _rTotal, 'Amount must be less than total reflections'); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeFromReward(address account) external onlyOwner { require(!_isExcludedReward[account], 'Account is already excluded'); if (_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcludedReward[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner { require(_isExcludedReward[account], 'Account is already included'); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcludedReward[account] = false; _excluded.pop(); break; } } } function _approve( address owner, address spender, uint256 amount ) private { 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); } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), 'ERC20: transfer from the zero address'); require(to != address(0), 'ERC20: transfer to the zero address'); require(amount > 0, 'Transfer amount must be greater than zero'); require(!_isSniper[to], 'Stop sniping!'); require(!_isSniper[from], 'Stop sniping!'); require(!_isSniper[_msgSender()], 'Stop sniping!'); //check transaction amount only when selling if ( (to == uniswapV2Pair || _isUniswapPair[to]) && from != address(uniswapV2Router) && !isExcludedFromFee(to) && !isExcludedFromFee(from) ) { require(amount <= _maxTxAmount, "TOKEN: Max Transaction Limit"); } if ( to != uniswapV2Pair && !_isUniswapPair[to] && !isExcludedFromFee(to) && !isExcludedFromFee(from) ) { require(balanceOf(to) + amount < _maxWalletSize, "TOKEN: Balance exceeds wallet size!"); if (_isMaxBuyActivated) { if (block.timestamp <= launchTime + 30 minutes) { require(amount <= _maximumBuyAmount, "Amount too much"); } } } // reset receiver's timer to prevent users buying and // immmediately transferring to buypass timer _rewardsLastClaim[to] = block.timestamp; bool excludedFromFee = false; // buy if ( (from == uniswapV2Pair || _isUniswapPair[from]) && to != address(uniswapV2Router) ) { // normal buy, check for snipers if (!isExcludedFromFee(to)) { require(_tradingOpen, 'Trading not yet enabled.'); // antibot if (block.timestamp == launchTime) { _isSniper[to] = true; _confirmedSnipers.push(to); } _rewardsLastClaim[from] = block.timestamp; } else { // set excluded flag for takeFee below since buyer is excluded excludedFromFee = true; } } // sell if ( !_inSwapAndLiquify && _tradingOpen && (to == uniswapV2Pair || _isUniswapPair[to]) ) { uint256 _contractTokenBalance = balanceOf(address(this)); if (_contractTokenBalance > 0) { if ( _contractTokenBalance > balanceOf(uniswapV2Pair).mul(feeRate).div(100) ) { _contractTokenBalance = balanceOf(uniswapV2Pair).mul(feeRate).div( 100 ); } _swapTokens(_contractTokenBalance); } _rewardsLastClaim[from] = block.timestamp; _isSelling = true; excludedFromFee = isExcludedFromFee(from); } bool takeFee = false; // take fee only on swaps if ( (from == uniswapV2Pair || to == uniswapV2Pair || _isUniswapPair[to] || _isUniswapPair[from]) && !excludedFromFee ) { takeFee = true; } _tokenTransfer(from, to, amount, takeFee); _isSelling = false; } function _swapTokens(uint256 _contractTokenBalance) private lockTheSwap { uint256 ethBalanceBefore = address(this).balance; _swapTokensForEth(_contractTokenBalance); uint256 ethBalanceAfter = address(this).balance; uint256 ethBalanceUpdate = ethBalanceAfter.sub(ethBalanceBefore); uint256 _liquidityFeeTotal = _liquidityFeeAggregate(address(0)); ethRewardsBalance += ethBalanceUpdate.mul(ethRewardsFee).div( _liquidityFeeTotal ); // send ETH to treasury address uint256 treasuryETHBalance = ethBalanceUpdate.mul(treasuryFee).div( _liquidityFeeTotal ); if (treasuryETHBalance > 0) { _sendETHToTreasury(treasuryETHBalance); } // buy back uint256 buybackETHBalance = ethBalanceUpdate.mul(buybackFee).div( _liquidityFeeTotal ); if (buybackETHBalance > 0) { _buyBackTokens(buybackETHBalance); } } function _sendETHToTreasury(uint256 amount) private { treasuryWallet.call{ value: amount }(''); } function _buyBackTokens(uint256 amount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = buybackTokenAddress; // make the swap uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{ value: amount }( 0, // accept any amount of tokens path, buybackReceiver, block.timestamp ); emit SwapETHForTokens(buybackReceiver, amount, path); } 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), // the contract block.timestamp ); emit SwapTokensForETH(tokenAmount, path); } function _tokenTransfer( address sender, address recipient, uint256 amount, bool takeFee ) private { if (!takeFee) _removeAllFee(); if (_isExcludedReward[sender] && !_isExcludedReward[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcludedReward[sender] && _isExcludedReward[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (_isExcludedReward[sender] && _isExcludedReward[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if (!takeFee) _restoreAllFee(); } function _transferStandard( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity ) = _getValues(sender, tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity ) = _getValues(sender, tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity ) = _getValues(sender, tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferBothExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity ) = _getValues(sender, tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(address seller, uint256 tAmount) private view returns ( uint256, uint256, uint256, uint256, uint256, uint256 ) { (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues( seller, tAmount ); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues( tAmount, tFee, tLiquidity, _getRate() ); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity); } function _getTValues(address seller, uint256 tAmount) private view returns ( uint256, uint256, uint256 ) { uint256 tFee = _calculateReflectFee(tAmount); uint256 tLiquidity = _calculateLiquidityFee(seller, tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity); return (tTransferAmount, tFee, tLiquidity); } function _getRValues( uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate ) private pure returns ( uint256, uint256, uint256 ) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns (uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns (uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeLiquidity(uint256 tLiquidity) private { uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity); if (_isExcludedReward[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity); } function _calculateReflectFee(uint256 _amount) private view returns (uint256) { return _amount.mul(reflectionFee).div(10**2); } function _liquidityFeeAggregate(address seller) private view returns (uint256) { uint256 feeMultiplier = _isSelling && !canClaimRewards(seller) ? feeSellMultiplier : 1; return (treasuryFee.add(ethRewardsFee).add(buybackFee)).mul(feeMultiplier); } function _calculateLiquidityFee(address seller, uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityFeeAggregate(seller)).div(10**2); } function _removeAllFee() private { if ( reflectionFee == 0 && treasuryFee == 0 && ethRewardsFee == 0 && buybackFee == 0 ) return; _previousReflectFee = reflectionFee; _previousTreasuryFee = treasuryFee; _previousETHRewardsFee = ethRewardsFee; _previousBuybackFee = buybackFee; reflectionFee = 0; treasuryFee = 0; ethRewardsFee = 0; buybackFee = 0; } function _restoreAllFee() private { reflectionFee = _previousReflectFee; treasuryFee = _previousTreasuryFee; ethRewardsFee = _previousETHRewardsFee; buybackFee = _previousBuybackFee; } function getSellSlippage(address seller) external view returns (uint256) { uint256 feeAgg = treasuryFee.add(ethRewardsFee).add(buybackFee); return isExcludedFromFee(seller) ? 0 : !canClaimRewards(seller) ? feeAgg.mul(feeSellMultiplier) : feeAgg; } function isUniswapPair(address _pair) external view returns (bool) { if (_pair == uniswapV2Pair) return true; return _isUniswapPair[_pair]; } function eligibleForRewardBooster(address wallet) public view returns (bool) { return boostRewardsContract != address(0) && IConditional(boostRewardsContract).passesTest(wallet); } function isExcludedFromFee(address account) public view returns (bool) { return _isExcludedFee[account] || (feeExclusionContract != address(0) && IConditional(feeExclusionContract).passesTest(account)); } function isExcludedFromReward(address account) external view returns (bool) { return _isExcludedReward[account]; } function excludeFromFee(address account) external onlyOwner { _isExcludedFee[account] = true; } function includeInFee(address account) external onlyOwner { _isExcludedFee[account] = false; } function setRewardsClaimTimeSeconds(uint256 _seconds) external onlyOwner { require(_seconds >= 0 &&_seconds <= 60 * 60 * 24 * 8, 'claim time delay must be greater or equal to 0 seconds and less than or equal to 8 days'); rewardsClaimTimeSeconds = _seconds; } // tax can be raised to maximum 10% - buy and 20% - sell function setNewFeesPercentages(uint256 _reflectionNewFee, uint256 _treasuryNewFee, uint256 _ethRewardsNewFee, uint256 _buybackRewardsNewFee) external onlyOwner { require(_reflectionNewFee + _treasuryNewFee + _ethRewardsNewFee + _buybackRewardsNewFee <= 30, 'Tax cannot be higher than 30%'); reflectionFee = _reflectionNewFee; treasuryFee = _treasuryNewFee; ethRewardsFee = _ethRewardsNewFee; buybackFee = _buybackRewardsNewFee; } function setFeeSellMultiplier(uint256 multiplier) external onlyOwner { require(multiplier <= 7, 'must be less than or equal to 7'); feeSellMultiplier = multiplier; } function setTreasuryAddress(address _treasuryWallet) external onlyOwner { treasuryWallet = payable(_treasuryWallet); _isExcludedFee[treasuryWallet] = true; } function setIsMaxBuyActivated(bool _value) public onlyOwner { _isMaxBuyActivated = _value; } function setBuybackTokenAddress(address _tokenAddress) external onlyOwner { buybackTokenAddress = _tokenAddress; } function setBuybackReceiver(address _receiver) external onlyOwner { buybackReceiver = _receiver; } function addUniswapPair(address _pair) external onlyOwner { _isUniswapPair[_pair] = true; } function removeUniswapPair(address _pair) external onlyOwner { _isUniswapPair[_pair] = false; } function setBoostRewardsPercent(uint256 perc) external onlyOwner { boostRewardsPercent = perc; } function setBoostRewardsContract(address _contract) external onlyOwner { if (_contract != address(0)) { IConditional _contCheck = IConditional(_contract); // allow setting to zero address to effectively turn off check logic require( _contCheck.passesTest(address(0)) == true || _contCheck.passesTest(address(0)) == false, 'contract does not implement interface' ); } boostRewardsContract = _contract; } function setFeeExclusionContract(address _contract) external onlyOwner { if (_contract != address(0)) { IConditional _contCheck = IConditional(_contract); // allow setting to zero address to effectively turn off check logic require( _contCheck.passesTest(address(0)) == true || _contCheck.passesTest(address(0)) == false, 'contract does not implement interface' ); } feeExclusionContract = _contract; } function isRemovedSniper(address account) external view returns (bool) { return _isSniper[account]; } function removeSniper(address account) external onlyOwner { require(account != _uniswapRouterAddress, 'We can not blacklist Uniswap'); require(!_isSniper[account], 'Account is already blacklisted'); _isSniper[account] = true; _confirmedSnipers.push(account); } function amnestySniper(address account) external onlyOwner { require(_isSniper[account], 'Account is not blacklisted'); for (uint256 i = 0; i < _confirmedSnipers.length; i++) { if (_confirmedSnipers[i] == account) { _confirmedSnipers[i] = _confirmedSnipers[_confirmedSnipers.length - 1]; _isSniper[account] = false; _confirmedSnipers.pop(); break; } } } function calculateETHRewards(address wallet) public view returns (uint256) { uint256 baseRewards = ethRewardsBalance.mul(balanceOf(wallet)).div( _tTotal.sub(balanceOf(deadAddress)) // circulating supply ); uint256 rewardsWithBooster = eligibleForRewardBooster(wallet) ? baseRewards.add(baseRewards.mul(boostRewardsPercent).div(10**2)) : baseRewards; return rewardsWithBooster > ethRewardsBalance ? baseRewards : rewardsWithBooster; } function calculateTokenRewards(address wallet, address tokenAddress) public view returns (uint256) { IERC20 token = IERC20(tokenAddress); uint256 contractTokenBalance = token.balanceOf(address(this)); uint256 baseRewards = contractTokenBalance.mul(balanceOf(wallet)).div( _tTotal.sub(balanceOf(deadAddress)) // circulating supply ); uint256 rewardsWithBooster = eligibleForRewardBooster(wallet) ? baseRewards.add(baseRewards.mul(boostRewardsPercent).div(10**2)) : baseRewards; return rewardsWithBooster > contractTokenBalance ? baseRewards : rewardsWithBooster; } function claimETHRewards() external { require( balanceOf(_msgSender()) > 0, 'You must have a balance to claim ETH rewards' ); require( canClaimRewards(_msgSender()), 'Must wait claim period before claiming rewards' ); _rewardsLastClaim[_msgSender()] = block.timestamp; uint256 rewardsSent = calculateETHRewards(_msgSender()); ethRewardsBalance -= rewardsSent; _msgSender().call{ value: rewardsSent }(''); emit SendETHRewards(_msgSender(), rewardsSent); } function canClaimRewards(address user) public view returns (bool) { if (_rewardsLastClaim[user] == 0) { return block.timestamp > launchTime.add(rewardsClaimTimeSeconds); } else { return block.timestamp > _rewardsLastClaim[user].add(rewardsClaimTimeSeconds); } } function claimTokenRewards(address token) external { require( balanceOf(_msgSender()) > 0, 'You must have a balance to claim rewards' ); require( IERC20(token).balanceOf(address(this)) > 0, 'We must have a token balance to claim rewards' ); require( canClaimRewards(_msgSender()), 'Must wait claim period before claiming rewards' ); _rewardsLastClaim[_msgSender()] = block.timestamp; uint256 rewardsSent = calculateTokenRewards(_msgSender(), token); IERC20(token).transfer(_msgSender(), rewardsSent); emit SendTokenRewards(_msgSender(), token, rewardsSent); } function setFeeRate(uint256 _rate) external onlyOwner { feeRate = _rate; } function manualswap(uint256 amount) external onlyOwner { require(amount <= balanceOf(address(this)) && amount > 0, "Wrong amount"); _swapTokens(amount); } function emergencyWithdraw() external onlyOwner { payable(owner()).send(address(this).balance); } // to recieve ETH from uniswapV2Router when swaping receive() external payable {} }
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":false,"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxWalletSize","type":"uint256"}],"name":"MaxWalletSizeUpdated","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":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountETH","type":"uint256"}],"name":"SendETHRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SendTokenRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwappedForEth","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethAddedForLp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensAddedForLp","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"whereTo","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MaxTXAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maximumBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"addUniswapPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"amnestySniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"boostRewardsContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"boostRewardsPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"calculateETHRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"calculateTokenRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"canClaimRewards","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimETHRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"claimTokenRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"eligibleForRewardBooster","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ethRewardsBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ethRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeExclusionContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeSellMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"getLastETHRewardsClaim","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"seller","type":"address"}],"name":"getSellSlippage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isRemovedSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"isUniswapPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualswap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"removeUniswapPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardsClaimTimeSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"}],"name":"setBoostRewardsContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"perc","type":"uint256"}],"name":"setBoostRewardsPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"}],"name":"setBuybackReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"setBuybackTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"}],"name":"setFeeExclusionContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rate","type":"uint256"}],"name":"setFeeRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"multiplier","type":"uint256"}],"name":"setFeeSellMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setIsMaxBuyActivated","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmountPercetange","type":"uint256"}],"name":"setMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletSizePercentage","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reflectionNewFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryNewFee","type":"uint256"},{"internalType":"uint256","name":"_ethRewardsNewFee","type":"uint256"},{"internalType":"uint256","name":"_buybackRewardsNewFee","type":"uint256"}],"name":"setNewFeesPercentages","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_seconds","type":"uint256"}],"name":"setRewardsClaimTimeSeconds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasuryWallet","type":"address"}],"name":"setTreasuryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","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":"pure","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":"treasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","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"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052600180546001600160a01b03191673026777f93789ac717bd87746617760bdfd67aedd17905562093a806007556200003f6009600a6200038f565b6200004e90620186a0620003a0565b6200005c90600019620003d0565b6200006a90600019620003e7565b600c556000600e819055600f819055600560108190556011819055601282905560138290556015829055601691909155601780546001600160a01b03199081167382f729d6fbc640f99f3db63512835fa8f7be4be1179091556018805490911630179055601955600a601a8190556032601c556022805463ffff000019166301000000179055620001459060649062000131906002906200010e906009906200038f565b6200011d90620186a0620003a0565b6200020760201b62002cff1790919060201c565b6200021e60201b62002d0b1790919060201c565b6023556200016260646200013160026200010e6009600a6200038f565b6024556200017f60646200013160026200010e6009600a6200038f565b6025553480156200018f57600080fd5b506200019b336200022c565b600c5433600081815260026020526040812092909255907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620001e16009600a6200038f565b620001f090620186a0620003a0565b60405190815260200160405180910390a362000414565b6000620002158284620003a0565b90505b92915050565b6000620002158284620003fd565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620002d3578160001904821115620002b757620002b76200027c565b80851615620002c557918102915b93841c939080029062000297565b509250929050565b600082620002ec5750600162000218565b81620002fb5750600062000218565b81600181146200031457600281146200031f576200033f565b600191505062000218565b60ff8411156200033357620003336200027c565b50506001821b62000218565b5060208310610133831016604e8410600b841016171562000364575081810a62000218565b62000370838362000292565b80600019048211156200038757620003876200027c565b029392505050565b60006200021560ff841683620002db565b80820281158282048414176200021857620002186200027c565b634e487b7160e01b600052601260045260246000fd5b600082620003e257620003e2620003ba565b500690565b818103818111156200021857620002186200027c565b6000826200040f576200040f620003ba565b500490565b61483580620004246000396000f3fe6080604052600436106104615760003560e01c806370a082311161023f578063a6931ed711610139578063d0c48342116100b6578063ea1644d51161007a578063ea1644d514610d79578063ea2f0b3714610d99578063f2fde38b14610db9578063f4234ad714610dd9578063f709300d14610def57600080fd5b8063d0c4834214610cbe578063d94fc43014610cde578063db2e21bc14610cfe578063dc6571eb14610d13578063dd62ed3e14610d3357600080fd5b8063b74411e1116100fd578063b74411e114610c33578063bd008d0414610c53578063c5b3442214610c73578063c9567bf914610c93578063cc32d17614610ca857600080fd5b8063a6931ed714610b9e578063a7f404e214610bbe578063a9059cbb14610bde578063a9b47a6614610bfe578063b4b72c1d14610c1e57600080fd5b80638da5cb5b116101c7578063978bbdb91161018b578063978bbdb914610b125780639a1313db14610b285780639cece12e14610b3e5780639f13157114610b5e578063a457c2d714610b7e57600080fd5b80638da5cb5b14610a6f5780638ef588fc14610a8d5780638f9a55c014610aad57806392d9029d14610ac357806395d89b4114610ae357600080fd5b80637d1db4a51161020e5780637d1db4a5146109d55780638203f5fe146109eb57806383ad799414610a00578063881dce6014610a1657806388f8202014610a3657600080fd5b806370a082311461096a578063715018a61461098a57806374010ece1461099f578063790ca413146109bf57600080fd5b806335e0edb01161035b5780634549b039116102d857806352390c021161029c57806352390c02146108b15780635342acb4146108d15780636028c2a6146108f1578063610d5b19146109115780636605bfda1461094a57600080fd5b80634549b0391461081b57806345596e2e1461083b5780634626402b1461085b57806349bd5a5e1461087b5780634fa33dd71461089b57600080fd5b80633bd5d1731161031f5780633bd5d1731461077a57806340276a881461079a57806340ea7513146107af57806343558a91146107c5578063437823ec146107fb57600080fd5b806335e0edb0146106e45780633685d4191461070457806339509351146107245780633a17fd67146107445780633b2d081c1461076457600080fd5b80631f0cff72116103e957806329b8cff3116103ad57806329b8cff31461065d5780632d838119146106725780632eac5b6f14610692578063313ce567146106a857806333251a0b146106c457600080fd5b80631f0cff72146105d15780632014e5d6146105f15780632355c9f81461060757806323b872dd1461062757806327c8f8351461064757600080fd5b80630e1c80b9116104305780630e1c80b91461052557806313114a9d146105455780631694505e1461056457806318160ddd1461059c5780631df59e2f146105b157600080fd5b806306aa52f91461046d57806306fdde031461048f578063095ea7b3146104d55780630b2a808c1461050557600080fd5b3661046857005b600080fd5b34801561047957600080fd5b5061048d610488366004614219565b610e0f565b005b34801561049b57600080fd5b5060408051808201909152600b81526a2932bbb0b932102220a12160a91b60208201525b6040516104cc9190614236565b60405180910390f35b3480156104e157600080fd5b506104f56104f0366004614284565b61105f565b60405190151581526020016104cc565b34801561051157600080fd5b5061048d610520366004614219565b611076565b34801561053157600080fd5b5061048d610540366004614219565b611223565b34801561055157600080fd5b50600d545b6040519081526020016104cc565b34801561057057600080fd5b50601f54610584906001600160a01b031681565b6040516001600160a01b0390911681526020016104cc565b3480156105a857600080fd5b5061055661137d565b3480156105bd57600080fd5b50601854610584906001600160a01b031681565b3480156105dd57600080fd5b506104f56105ec366004614219565b61139d565b3480156105fd57600080fd5b5061055660125481565b34801561061357600080fd5b5061048d610622366004614219565b611424565b34801561063357600080fd5b506104f56106423660046142b0565b61157e565b34801561065357600080fd5b5061058461dead81565b34801561066957600080fd5b50602454610556565b34801561067e57600080fd5b5061055661068d3660046142f1565b6115e7565b34801561069e57600080fd5b5061055660255481565b3480156106b457600080fd5b50604051600981526020016104cc565b3480156106d057600080fd5b5061048d6106df366004614219565b61166b565b3480156106f057600080fd5b5061048d6106ff3660046142f1565b6117d1565b34801561071057600080fd5b5061048d61071f366004614219565b611851565b34801561073057600080fd5b506104f561073f366004614284565b6119dd565b34801561075057600080fd5b5061055661075f36600461430a565b611a13565b34801561077057600080fd5b5061055660155481565b34801561078657600080fd5b5061048d6107953660046142f1565b611b26565b3480156107a657600080fd5b50602354610556565b3480156107bb57600080fd5b5061055660075481565b3480156107d157600080fd5b506105566107e0366004614219565b6001600160a01b031660009081526008602052604090205490565b34801561080757600080fd5b5061048d610816366004614219565b611c11565b34801561082757600080fd5b50610556610836366004614351565b611c5f565b34801561084757600080fd5b5061048d6108563660046142f1565b611d06565b34801561086757600080fd5b50600154610584906001600160a01b031681565b34801561088757600080fd5b50602054610584906001600160a01b031681565b3480156108a757600080fd5b5061055660195481565b3480156108bd57600080fd5b5061048d6108cc366004614219565b611d35565b3480156108dd57600080fd5b506104f56108ec366004614219565b611e88565b3480156108fd57600080fd5b5061048d61090c366004614376565b611ef1565b34801561091d57600080fd5b506104f561092c366004614219565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561095657600080fd5b5061048d610965366004614219565b611f9f565b34801561097657600080fd5b50610556610985366004614219565b612004565b34801561099657600080fd5b5061048d612063565b3480156109ab57600080fd5b5061048d6109ba3660046142f1565b612099565b3480156109cb57600080fd5b50610556601b5481565b3480156109e157600080fd5b5061055660235481565b3480156109f757600080fd5b5061048d61220e565b348015610a0c57600080fd5b50610556600e5481565b348015610a2257600080fd5b5061048d610a313660046142f1565b612409565b348015610a4257600080fd5b506104f5610a51366004614219565b6001600160a01b03166000908152600a602052604090205460ff1690565b348015610a7b57600080fd5b506000546001600160a01b0316610584565b348015610a9957600080fd5b5061048d610aa8366004614219565b612492565b348015610ab957600080fd5b5061055660245481565b348015610acf57600080fd5b5061048d610ade3660046142f1565b6124de565b348015610aef57600080fd5b506040805180820190915260068152652922a220a12160d11b60208201526104bf565b348015610b1e57600080fd5b50610556601a5481565b348015610b3457600080fd5b5061055660145481565b348015610b4a57600080fd5b506104f5610b59366004614219565b6125ac565b348015610b6a57600080fd5b5061048d610b793660046143a8565b6125ec565b348015610b8a57600080fd5b506104f5610b99366004614284565b612634565b348015610baa57600080fd5b5061048d610bb9366004614219565b612683565b348015610bca57600080fd5b5061048d610bd9366004614219565b6126ce565b348015610bea57600080fd5b506104f5610bf9366004614284565b61271c565b348015610c0a57600080fd5b506104f5610c19366004614219565b612729565b348015610c2a57600080fd5b5061048d612784565b348015610c3f57600080fd5b5061048d610c4e366004614219565b6128d9565b348015610c5f57600080fd5b5061048d610c6e3660046142f1565b612925565b348015610c7f57600080fd5b50601d54610584906001600160a01b031681565b348015610c9f57600080fd5b5061048d612954565b348015610cb457600080fd5b5061055660105481565b348015610cca57600080fd5b50610556610cd9366004614219565b6129ad565b348015610cea57600080fd5b50601754610584906001600160a01b031681565b348015610d0a57600080fd5b5061048d612a25565b348015610d1f57600080fd5b50610556610d2e366004614219565b612a7a565b348015610d3f57600080fd5b50610556610d4e36600461430a565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610d8557600080fd5b5061048d610d943660046142f1565b612adf565b348015610da557600080fd5b5061048d610db4366004614219565b612c1c565b348015610dc557600080fd5b5061048d610dd4366004614219565b612c67565b348015610de557600080fd5b50610556601c5481565b348015610dfb57600080fd5b50601e54610584906001600160a01b031681565b6000610e1a33612004565b11610e7d5760405162461bcd60e51b815260206004820152602860248201527f596f75206d757374206861766520612062616c616e636520746f20636c61696d604482015267207265776172647360c01b60648201526084015b60405180910390fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee891906143c5565b11610f4b5760405162461bcd60e51b815260206004820152602d60248201527f5765206d7573742068617665206120746f6b656e2062616c616e636520746f2060448201526c636c61696d207265776172647360981b6064820152608401610e74565b610f5433612729565b610f705760405162461bcd60e51b8152600401610e74906143de565b33600081815260086020526040812042905590610f8d9083611a13565b90506001600160a01b03821663a9059cbb336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af1158015610fec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611010919061442c565b50604080513381526001600160a01b03841660208201529081018290527f461310925e682d8354b34f2245c1ea43ea9a27ceea708a1be23757f31eb88b4f906060015b60405180910390a15050565b600061106c338484612d17565b5060015b92915050565b6000546001600160a01b031633146110a05760405162461bcd60e51b8152600401610e7490614449565b6001600160a01b03811660009081526005602052604090205460ff166111085760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c69737465640000000000006044820152606401610e74565b60005b60065481101561121f57816001600160a01b0316600682815481106111325761113261447e565b6000918252602090912001546001600160a01b03160361120d576006805461115c906001906144aa565b8154811061116c5761116c61447e565b600091825260209091200154600680546001600160a01b0390921691839081106111985761119861447e565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600590915260409020805460ff1916905560068054806111e7576111e76144bd565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80611217816144d3565b91505061110b565b5050565b6000546001600160a01b0316331461124d5760405162461bcd60e51b8152600401610e7490614449565b6001600160a01b0381161561135b57604051632b35867560e11b81526000600482015281906001600160a01b0382169063566b0cea90602401602060405180830381865afa1580156112a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c7919061442c565b15156001148061133d5750604051632b35867560e11b8152600060048201526001600160a01b0382169063566b0cea90602401602060405180830381865afa158015611317573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133b919061442c565b155b6113595760405162461bcd60e51b8152600401610e74906144ec565b505b601e80546001600160a01b0319166001600160a01b0392909216919091179055565b600061138b6009600a614615565b61139890620186a0614624565b905090565b601d546000906001600160a01b0316158015906110705750601d54604051632b35867560e11b81526001600160a01b0384811660048301529091169063566b0cea906024015b602060405180830381865afa158015611400573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611070919061442c565b6000546001600160a01b0316331461144e5760405162461bcd60e51b8152600401610e7490614449565b6001600160a01b0381161561155c57604051632b35867560e11b81526000600482015281906001600160a01b0382169063566b0cea90602401602060405180830381865afa1580156114a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c8919061442c565b15156001148061153e5750604051632b35867560e11b8152600060048201526001600160a01b0382169063566b0cea90602401602060405180830381865afa158015611518573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153c919061442c565b155b61155a5760405162461bcd60e51b8152600401610e74906144ec565b505b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b600061158b848484612e3b565b6115dd84336115d8856040518060600160405280602881526020016147b3602891396001600160a01b038a166000908152600460209081526040808320338452909152902054919061350d565b612d17565b5060019392505050565b6000600c5482111561164e5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610e74565b6000611658613539565b90506116648382612d0b565b9392505050565b6000546001600160a01b031633146116955760405162461bcd60e51b8152600401610e7490614449565b737a250d5630b4cf539739df2c5dacb4c659f2488c196001600160a01b038216016117025760405162461bcd60e51b815260206004820152601c60248201527f57652063616e206e6f7420626c61636b6c69737420556e6973776170000000006044820152606401610e74565b6001600160a01b03811660009081526005602052604090205460ff161561176b5760405162461bcd60e51b815260206004820152601e60248201527f4163636f756e7420697320616c726561647920626c61636b6c697374656400006044820152606401610e74565b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6000546001600160a01b031633146117fb5760405162461bcd60e51b8152600401610e7490614449565b600781111561184c5760405162461bcd60e51b815260206004820152601f60248201527f6d757374206265206c657373207468616e206f7220657175616c20746f2037006044820152606401610e74565b601955565b6000546001600160a01b0316331461187b5760405162461bcd60e51b8152600401610e7490614449565b6001600160a01b0381166000908152600a602052604090205460ff166118e35760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c7564656400000000006044820152606401610e74565b60005b600b5481101561121f57816001600160a01b0316600b828154811061190d5761190d61447e565b6000918252602090912001546001600160a01b0316036119cb57600b8054611937906001906144aa565b815481106119475761194761447e565b600091825260209091200154600b80546001600160a01b0390921691839081106119735761197361447e565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600382526040808220829055600a90925220805460ff19169055600b8054806111e7576111e76144bd565b806119d5816144d3565b9150506118e6565b3360008181526004602090815260408083206001600160a01b0387168452909152812054909161106c9185906115d8908661355c565b6040516370a0823160e01b8152306004820152600090829082906001600160a01b038316906370a0823190602401602060405180830381865afa158015611a5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8291906143c5565b90506000611acf611ab6611a9761dead612004565b611aa36009600a614615565b611ab090620186a0614624565b90613568565b611ac9611ac289612004565b8590612cff565b90612d0b565b90506000611adc8761139d565b611ae65781611b0a565b611b0a611b036064611ac9601c5486612cff90919063ffffffff16565b839061355c565b9050828111611b195780611b1b565b815b979650505050505050565b336000818152600a602052604090205460ff1615611b9b5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610e74565b6000611ba78284613574565b505050506001600160a01b038416600090815260026020526040902054919250611bd391905082613568565b6001600160a01b038316600090815260026020526040902055600c54611bf99082613568565b600c55600d54611c09908461355c565b600d55505050565b6000546001600160a01b03163314611c3b5760405162461bcd60e51b8152600401610e7490614449565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000611c6d6009600a614615565b611c7a90620186a0614624565b831115611cc95760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610e74565b81611cea576000611cdb600085613574565b50939550611070945050505050565b6000611cf7600085613574565b50929550611070945050505050565b6000546001600160a01b03163314611d305760405162461bcd60e51b8152600401610e7490614449565b601a55565b6000546001600160a01b03163314611d5f5760405162461bcd60e51b8152600401610e7490614449565b6001600160a01b0381166000908152600a602052604090205460ff1615611dc85760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610e74565b6001600160a01b03811660009081526002602052604090205415611e22576001600160a01b038116600090815260026020526040902054611e08906115e7565b6001600160a01b0382166000908152600360205260409020555b6001600160a01b03166000818152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319169091179055565b6001600160a01b03811660009081526009602052604081205460ff16806110705750601e546001600160a01b0316158015906110705750601e54604051632b35867560e11b81526001600160a01b0384811660048301529091169063566b0cea906024016113e3565b6000546001600160a01b03163314611f1b5760405162461bcd60e51b8152600401610e7490614449565b601e8183611f29868861463b565b611f33919061463b565b611f3d919061463b565b1115611f8b5760405162461bcd60e51b815260206004820152601d60248201527f5461782063616e6e6f7420626520686967686572207468616e203330250000006044820152606401610e74565b600e93909355601091909155601255601555565b6000546001600160a01b03163314611fc95760405162461bcd60e51b8152600401610e7490614449565b600180546001600160a01b039092166001600160a01b031990921682178155600091825260096020526040909120805460ff19169091179055565b6001600160a01b0381166000908152600a602052604081205460ff161561204157506001600160a01b031660009081526003602052604090205490565b6001600160a01b038216600090815260026020526040902054611070906115e7565b6000546001600160a01b0316331461208d5760405162461bcd60e51b8152600401610e7490614449565b61209760006135c7565b565b6000546001600160a01b031633146120c35760405162461bcd60e51b8152600401610e7490614449565b6103e881106121335760405162461bcd60e51b815260206004820152603660248201527f4d6178696d756d20616d6f756e7420706572207472616e73616374696f6e206d604482015275757374206265206c6f776572207468616e203130302560501b6064820152608401610e74565b600181116121a95760405162461bcd60e51b815260206004820152603760248201527f4d6178696d756d20616d6f756e7420706572207472616e73616374696f6e206d60448201527f75737420626520686967686572207468616e20302e31250000000000000000006064820152608401610e74565b6121d26103e8611ac9836121bf6009600a614615565b6121cc90620186a0614624565b90612cff565b60238190556040519081527f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf906020015b60405180910390a150565b6000546001600160a01b031633146122385760405162461bcd60e51b8152600401610e7490614449565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561228f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b3919061464e565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612300573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612324919061464e565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612371573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612395919061464e565b602080546001600160a01b03199081166001600160a01b03938416178255601f805490911693831693909317909255600080548216815260099092526040808320805460ff199081166001908117909255308552828520805482168317905581549093168452922080549091169091179055565b6000546001600160a01b031633146124335760405162461bcd60e51b8152600401610e7490614449565b61243c30612004565b811115801561244b5750600081115b6124865760405162461bcd60e51b815260206004820152600c60248201526b15dc9bdb99c8185b5bdd5b9d60a21b6044820152606401610e74565b61248f81613617565b50565b6000546001600160a01b031633146124bc5760405162461bcd60e51b8152600401610e7490614449565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146125085760405162461bcd60e51b8152600401610e7490614449565b620a8c008111156125a75760405162461bcd60e51b815260206004820152605760248201527f636c61696d2074696d652064656c6179206d757374206265206772656174657260448201527f206f7220657175616c20746f2030207365636f6e647320616e64206c6573732060648201527f7468616e206f7220657175616c20746f20382064617973000000000000000000608482015260a401610e74565b600755565b6020546000906001600160a01b03908116908316036125cd57506001919050565b506001600160a01b031660009081526021602052604090205460ff1690565b6000546001600160a01b031633146126165760405162461bcd60e51b8152600401610e7490614449565b6022805491151563010000000263ff00000019909216919091179055565b600061106c33846115d8856040518060600160405280602581526020016147db602591393360009081526004602090815260408083206001600160a01b038d168452909152902054919061350d565b6000546001600160a01b031633146126ad5760405162461bcd60e51b8152600401610e7490614449565b6001600160a01b03166000908152602160205260409020805460ff19169055565b6000546001600160a01b031633146126f85760405162461bcd60e51b8152600401610e7490614449565b6001600160a01b03166000908152602160205260409020805460ff19166001179055565b600061106c338484612e3b565b6001600160a01b038116600090815260086020526040812054810361275f57600754601b546127579161355c565b421192915050565b6007546001600160a01b0383166000908152600860205260409020546127579161355c565b600061278f33612004565b116127f15760405162461bcd60e51b815260206004820152602c60248201527f596f75206d757374206861766520612062616c616e636520746f20636c61696d60448201526b20455448207265776172647360a01b6064820152608401610e74565b6127fa33612729565b6128165760405162461bcd60e51b8152600401610e74906143de565b33600081815260086020526040812042905590612832906129ad565b9050806014600082825461284691906144aa565b909155505060405133908290600081818185875af1925050503d806000811461288b576040519150601f19603f3d011682016040523d82523d6000602084013e612890565b606091505b5050507f7d8a5d8268a1c264e8bb2e0a542db0263a9f1ab2759a8594a1302e73c8096ce76128bb3390565b604080516001600160a01b0390921682526020820184905201612203565b6000546001600160a01b031633146129035760405162461bcd60e51b8152600401610e7490614449565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461294f5760405162461bcd60e51b8152600401610e7490614449565b601c55565b6000546001600160a01b0316331461297e5760405162461bcd60e51b8152600401610e7490614449565b601154601055601354601255600f54600e556016546015556022805462ff000019166201000017905542601b55565b6000806129d66129c1611a9761dead612004565b611ac96129cd86612004565b60145490612cff565b905060006129e38461139d565b6129ed5781612a0a565b612a0a611b036064611ac9601c5486612cff90919063ffffffff16565b90506014548111612a1b5780612a1d565b815b949350505050565b6000546001600160a01b03163314612a4f5760405162461bcd60e51b8152600401610e7490614449565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f15050505050565b600080612aa0601554612a9a60125460105461355c90919063ffffffff16565b9061355c565b9050612aab83611e88565b612ad657612ab883612729565b15612ac35780611664565b601954612ad1908290612cff565b611664565b60009392505050565b6000546001600160a01b03163314612b095760405162461bcd60e51b8152600401610e7490614449565b6103e88110612b6e5760405162461bcd60e51b815260206004820152602b60248201527f4d6178696d756d2077616c6c65742073697a65206d757374206265206c6f776560448201526a72207468616e203130302560a81b6064820152608401610e74565b600a8111612bd15760405162461bcd60e51b815260206004820152602a60248201527f4d6178696d756d2077616c6c65742073697a65206d75737420626520686967686044820152696572207468616e20312560b01b6064820152608401610e74565b612be76103e8611ac9836121bf6009600a614615565b60248190556040519081527ffb1fe1002b7550e87616e67793dbb7d3f437a79c2688c372c66dc170dbcb0efd90602001612203565b6000546001600160a01b03163314612c465760405162461bcd60e51b8152600401610e7490614449565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6000546001600160a01b03163314612c915760405162461bcd60e51b8152600401610e7490614449565b6001600160a01b038116612cf65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e74565b61248f816135c7565b60006116648284614624565b6000611664828461466b565b6001600160a01b038316612d795760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610e74565b6001600160a01b038216612dda5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610e74565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612e9f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610e74565b6001600160a01b038216612f015760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610e74565b60008111612f635760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610e74565b6001600160a01b03821660009081526005602052604090205460ff1615612f9c5760405162461bcd60e51b8152600401610e749061468d565b6001600160a01b03831660009081526005602052604090205460ff1615612fd55760405162461bcd60e51b8152600401610e749061468d565b3360009081526005602052604090205460ff16156130055760405162461bcd60e51b8152600401610e749061468d565b6020546001600160a01b038381169116148061303957506001600160a01b03821660009081526021602052604090205460ff165b80156130535750601f546001600160a01b03848116911614155b8015613065575061306382611e88565b155b8015613077575061307583611e88565b155b156130ce576023548111156130ce5760405162461bcd60e51b815260206004820152601c60248201527f544f4b454e3a204d6178205472616e73616374696f6e204c696d6974000000006044820152606401610e74565b6020546001600160a01b0383811691161480159061310557506001600160a01b03821660009081526021602052604090205460ff16155b8015613117575061311582611e88565b155b8015613129575061312783611e88565b155b15613209576024548161313b84612004565b613145919061463b565b1061319e5760405162461bcd60e51b815260206004820152602360248201527f544f4b454e3a2042616c616e636520657863656564732077616c6c65742073696044820152627a652160e81b6064820152608401610e74565b6022546301000000900460ff161561320957601b546131bf9061070861463b565b4211613209576025548111156132095760405162461bcd60e51b815260206004820152600f60248201526e082dadeeadce840e8dede40daeac6d608b1b6044820152606401610e74565b6001600160a01b03808316600090815260086020908152604082204290555490918581169116148061325357506001600160a01b03841660009081526021602052604090205460ff165b801561326d5750601f546001600160a01b03848116911614155b1561336a5761327b83611e88565b6133665760225462010000900460ff166132d75760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e00000000000000006044820152606401610e74565b601b544203613346576001600160a01b0383166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b03191690911790555b6001600160a01b038416600090815260086020526040902042905561336a565b5060015b60225460ff16158015613385575060225462010000900460ff165b80156133c057506020546001600160a01b03848116911614806133c057506001600160a01b03831660009081526021602052604090205460ff165b1561346a5760006133d030612004565b9050801561343357601a546020546133fc91606491611ac991906121cc906001600160a01b0316612004565b81111561342a57601a5460205461342791606491611ac991906121cc906001600160a01b0316612004565b90505b61343381613617565b6001600160a01b03851660009081526008602052604090204290556022805461ff00191661010017905561346685611e88565b9150505b6020546000906001600160a01b038681169116148061349657506020546001600160a01b038581169116145b806134b957506001600160a01b03841660009081526021602052604090205460ff165b806134dc57506001600160a01b03851660009081526021602052604090205460ff165b80156134e6575081155b156134ef575060015b6134fb858585846136e7565b50506022805461ff0019169055505050565b600081848411156135315760405162461bcd60e51b8152600401610e749190614236565b505050900390565b600080600061354661381e565b90925090506135558282612d0b565b9250505090565b6000611664828461463b565b600061166482846144aa565b600080600080600080600080600061358c8b8b6139fc565b92509250925060008060006135aa8d86866135a5613539565b613a3a565b919d509b5099509497509295509093505050509295509295509295565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6022805460ff191660011790554761362e82613a8a565b47600061363b8284613568565b905060006136496000613c11565b905061366481611ac960125485612cff90919063ffffffff16565b60146000828254613675919061463b565b92505081905550600061369782611ac960105486612cff90919063ffffffff16565b905080156136a8576136a881613c65565b60006136c383611ac960155487612cff90919063ffffffff16565b905080156136d4576136d481613cb2565b50506022805460ff191690555050505050565b806136f4576136f4613e43565b6001600160a01b0384166000908152600a602052604090205460ff16801561373557506001600160a01b0383166000908152600a602052604090205460ff16155b1561374a57613745848484613e9e565b6137f6565b6001600160a01b0384166000908152600a602052604090205460ff1615801561378b57506001600160a01b0383166000908152600a602052604090205460ff165b1561379b57613745848484613fc5565b6001600160a01b0384166000908152600a602052604090205460ff1680156137db57506001600160a01b0383166000908152600a602052604090205460ff165b156137eb5761374584848461406f565b6137f68484846140e3565b8061381857613818600f54600e55601154601055601354601255601654601555565b50505050565b600c546000908190816138336009600a614615565b61384090620186a0614624565b905060005b600b548110156139a0578260026000600b84815481106138675761386761447e565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806138d257508160036000600b84815481106138ab576138ab61447e565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156138fe57600c546138e66009600a614615565b6138f390620186a0614624565b945094505050509091565b61394460026000600b84815481106139185761391861447e565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490613568565b925061398c60036000600b84815481106139605761396061447e565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390613568565b915080613998816144d3565b915050613845565b506139c66139b06009600a614615565b6139bd90620186a0614624565b600c5490612d0b565b8210156139f357600c546139dc6009600a614615565b6139e990620186a0614624565b9350935050509091565b90939092509050565b600080600080613a0b85614128565b90506000613a198787614144565b90506000613a2b82611ab08986613568565b95509193509150509250925092565b6000808080613a498886612cff565b90506000613a578887612cff565b90506000613a658888612cff565b90506000613a7782611ab08686613568565b939b939a50919850919650505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613abf57613abf61447e565b6001600160a01b03928316602091820292909201810191909152601f54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613b18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b3c919061464e565b81600181518110613b4f57613b4f61447e565b6001600160a01b039283166020918202929092010152601f54613b759130911684612d17565b601f5460405163791ac94760e01b81526001600160a01b039091169063791ac94790613bae9085906000908690309042906004016146f8565b600060405180830381600087803b158015613bc857600080fd5b505af1158015613bdc573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051611053929190614734565b6022546000908190610100900460ff168015613c335750613c3183612729565b155b613c3e576001613c42565b6019545b9050611664816121cc601554612a9a60125460105461355c90919063ffffffff16565b6001546040516001600160a01b03909116908290600081818185875af1925050503d8060008114613818576040519150601f19603f3d011682016040523d82523d6000602084013e613818565b6040805160028082526060820183526000926020830190803683375050601f54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015613d1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d40919061464e565b81600081518110613d5357613d5361447e565b6001600160a01b039283166020918202929092010152601754825191169082906001908110613d8457613d8461447e565b6001600160a01b039283166020918202929092010152601f5460185460405163b6f9de9560e01b81529183169263b6f9de95928692613dd092600092889290911690429060040161474d565b6000604051808303818588803b158015613de957600080fd5b505af1158015613dfd573d6000803e3d6000fd5b50506018546040517fe9d8c77238db27a9c74786624137d346727f868e8e54d82636abf1a2a8344819945061105393506001600160a01b03909116915085908590614782565b600e54158015613e535750601054155b8015613e5f5750601254155b8015613e6b5750601554155b15613e7257565b600e8054600f556010805460115560128054601355601580546016556000938490559183905582905555565b600080600080600080613eb18988613574565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150613ee39088613568565b6001600160a01b038a16600090815260036020908152604080832093909355600290522054613f129087613568565b6001600160a01b03808b1660009081526002602052604080822093909355908a1681522054613f41908661355c565b6001600160a01b038916600090815260026020526040902055613f6381614157565b613f6d84836141e0565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613fb291815260200190565b60405180910390a3505050505050505050565b600080600080600080613fd88988613574565b6001600160a01b038f16600090815260026020526040902054959b5093995091975095509350915061400a9087613568565b6001600160a01b03808b16600090815260026020908152604080832094909455918b16815260039091522054614040908461355c565b6001600160a01b038916600090815260036020908152604080832093909355600290522054613f41908661355c565b6000806000806000806140828988613574565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506140b49088613568565b6001600160a01b038a1660009081526003602090815260408083209390935560029052205461400a9087613568565b6000806000806000806140f68988613574565b6001600160a01b038f16600090815260026020526040902054959b50939950919750955093509150613f129087613568565b60006110706064611ac9600e5485612cff90919063ffffffff16565b60006116646064611ac9611ac286613c11565b6000614161613539565b9050600061416f8383612cff565b3060009081526002602052604090205490915061418c908261355c565b30600090815260026020908152604080832093909355600a9052205460ff16156141db57306000908152600360205260409020546141ca908461355c565b306000908152600360205260409020555b505050565b600c546141ed9083613568565b600c55600d546141fd908261355c565b600d555050565b6001600160a01b038116811461248f57600080fd5b60006020828403121561422b57600080fd5b813561166481614204565b600060208083528351808285015260005b8181101561426357858101830151858201604001528201614247565b506000604082860101526040601f19601f8301168501019250505092915050565b6000806040838503121561429757600080fd5b82356142a281614204565b946020939093013593505050565b6000806000606084860312156142c557600080fd5b83356142d081614204565b925060208401356142e081614204565b929592945050506040919091013590565b60006020828403121561430357600080fd5b5035919050565b6000806040838503121561431d57600080fd5b823561432881614204565b9150602083013561433881614204565b809150509250929050565b801515811461248f57600080fd5b6000806040838503121561436457600080fd5b82359150602083013561433881614343565b6000806000806080858703121561438c57600080fd5b5050823594602084013594506040840135936060013592509050565b6000602082840312156143ba57600080fd5b813561166481614343565b6000602082840312156143d757600080fd5b5051919050565b6020808252602e908201527f4d757374207761697420636c61696d20706572696f64206265666f726520636c60408201526d61696d696e67207265776172647360901b606082015260800190565b60006020828403121561443e57600080fd5b815161166481614343565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111561107057611070614494565b634e487b7160e01b600052603160045260246000fd5b6000600182016144e5576144e5614494565b5060010190565b60208082526025908201527f636f6e747261637420646f6573206e6f7420696d706c656d656e7420696e7465604082015264726661636560d81b606082015260800190565b600181815b8085111561456c57816000190482111561455257614552614494565b8085161561455f57918102915b93841c9390800290614536565b509250929050565b60008261458357506001611070565b8161459057506000611070565b81600181146145a657600281146145b0576145cc565b6001915050611070565b60ff8411156145c1576145c1614494565b50506001821b611070565b5060208310610133831016604e8410600b84101617156145ef575081810a611070565b6145f98383614531565b806000190482111561460d5761460d614494565b029392505050565b600061166460ff841683614574565b808202811582820484141761107057611070614494565b8082018082111561107057611070614494565b60006020828403121561466057600080fd5b815161166481614204565b60008261468857634e487b7160e01b600052601260045260246000fd5b500490565b6020808252600d908201526c53746f7020736e6970696e672160981b604082015260600190565b600081518084526020808501945080840160005b838110156146ed5781516001600160a01b0316875295820195908201906001016146c8565b509495945050505050565b85815284602082015260a06040820152600061471760a08301866146b4565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201526000612a1d60408301846146b4565b84815260806020820152600061476660808301866146b4565b6001600160a01b03949094166040830152506060015292915050565b60018060a01b03841681528260208201526060604082015260006147a960608301846146b4565b9594505050505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208de19d9b40d25e9ce3afb8f081aefc3e43b9ecc9e17aba5777702184f0da323d64736f6c63430008110033
Deployed Bytecode
0x6080604052600436106104615760003560e01c806370a082311161023f578063a6931ed711610139578063d0c48342116100b6578063ea1644d51161007a578063ea1644d514610d79578063ea2f0b3714610d99578063f2fde38b14610db9578063f4234ad714610dd9578063f709300d14610def57600080fd5b8063d0c4834214610cbe578063d94fc43014610cde578063db2e21bc14610cfe578063dc6571eb14610d13578063dd62ed3e14610d3357600080fd5b8063b74411e1116100fd578063b74411e114610c33578063bd008d0414610c53578063c5b3442214610c73578063c9567bf914610c93578063cc32d17614610ca857600080fd5b8063a6931ed714610b9e578063a7f404e214610bbe578063a9059cbb14610bde578063a9b47a6614610bfe578063b4b72c1d14610c1e57600080fd5b80638da5cb5b116101c7578063978bbdb91161018b578063978bbdb914610b125780639a1313db14610b285780639cece12e14610b3e5780639f13157114610b5e578063a457c2d714610b7e57600080fd5b80638da5cb5b14610a6f5780638ef588fc14610a8d5780638f9a55c014610aad57806392d9029d14610ac357806395d89b4114610ae357600080fd5b80637d1db4a51161020e5780637d1db4a5146109d55780638203f5fe146109eb57806383ad799414610a00578063881dce6014610a1657806388f8202014610a3657600080fd5b806370a082311461096a578063715018a61461098a57806374010ece1461099f578063790ca413146109bf57600080fd5b806335e0edb01161035b5780634549b039116102d857806352390c021161029c57806352390c02146108b15780635342acb4146108d15780636028c2a6146108f1578063610d5b19146109115780636605bfda1461094a57600080fd5b80634549b0391461081b57806345596e2e1461083b5780634626402b1461085b57806349bd5a5e1461087b5780634fa33dd71461089b57600080fd5b80633bd5d1731161031f5780633bd5d1731461077a57806340276a881461079a57806340ea7513146107af57806343558a91146107c5578063437823ec146107fb57600080fd5b806335e0edb0146106e45780633685d4191461070457806339509351146107245780633a17fd67146107445780633b2d081c1461076457600080fd5b80631f0cff72116103e957806329b8cff3116103ad57806329b8cff31461065d5780632d838119146106725780632eac5b6f14610692578063313ce567146106a857806333251a0b146106c457600080fd5b80631f0cff72146105d15780632014e5d6146105f15780632355c9f81461060757806323b872dd1461062757806327c8f8351461064757600080fd5b80630e1c80b9116104305780630e1c80b91461052557806313114a9d146105455780631694505e1461056457806318160ddd1461059c5780631df59e2f146105b157600080fd5b806306aa52f91461046d57806306fdde031461048f578063095ea7b3146104d55780630b2a808c1461050557600080fd5b3661046857005b600080fd5b34801561047957600080fd5b5061048d610488366004614219565b610e0f565b005b34801561049b57600080fd5b5060408051808201909152600b81526a2932bbb0b932102220a12160a91b60208201525b6040516104cc9190614236565b60405180910390f35b3480156104e157600080fd5b506104f56104f0366004614284565b61105f565b60405190151581526020016104cc565b34801561051157600080fd5b5061048d610520366004614219565b611076565b34801561053157600080fd5b5061048d610540366004614219565b611223565b34801561055157600080fd5b50600d545b6040519081526020016104cc565b34801561057057600080fd5b50601f54610584906001600160a01b031681565b6040516001600160a01b0390911681526020016104cc565b3480156105a857600080fd5b5061055661137d565b3480156105bd57600080fd5b50601854610584906001600160a01b031681565b3480156105dd57600080fd5b506104f56105ec366004614219565b61139d565b3480156105fd57600080fd5b5061055660125481565b34801561061357600080fd5b5061048d610622366004614219565b611424565b34801561063357600080fd5b506104f56106423660046142b0565b61157e565b34801561065357600080fd5b5061058461dead81565b34801561066957600080fd5b50602454610556565b34801561067e57600080fd5b5061055661068d3660046142f1565b6115e7565b34801561069e57600080fd5b5061055660255481565b3480156106b457600080fd5b50604051600981526020016104cc565b3480156106d057600080fd5b5061048d6106df366004614219565b61166b565b3480156106f057600080fd5b5061048d6106ff3660046142f1565b6117d1565b34801561071057600080fd5b5061048d61071f366004614219565b611851565b34801561073057600080fd5b506104f561073f366004614284565b6119dd565b34801561075057600080fd5b5061055661075f36600461430a565b611a13565b34801561077057600080fd5b5061055660155481565b34801561078657600080fd5b5061048d6107953660046142f1565b611b26565b3480156107a657600080fd5b50602354610556565b3480156107bb57600080fd5b5061055660075481565b3480156107d157600080fd5b506105566107e0366004614219565b6001600160a01b031660009081526008602052604090205490565b34801561080757600080fd5b5061048d610816366004614219565b611c11565b34801561082757600080fd5b50610556610836366004614351565b611c5f565b34801561084757600080fd5b5061048d6108563660046142f1565b611d06565b34801561086757600080fd5b50600154610584906001600160a01b031681565b34801561088757600080fd5b50602054610584906001600160a01b031681565b3480156108a757600080fd5b5061055660195481565b3480156108bd57600080fd5b5061048d6108cc366004614219565b611d35565b3480156108dd57600080fd5b506104f56108ec366004614219565b611e88565b3480156108fd57600080fd5b5061048d61090c366004614376565b611ef1565b34801561091d57600080fd5b506104f561092c366004614219565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561095657600080fd5b5061048d610965366004614219565b611f9f565b34801561097657600080fd5b50610556610985366004614219565b612004565b34801561099657600080fd5b5061048d612063565b3480156109ab57600080fd5b5061048d6109ba3660046142f1565b612099565b3480156109cb57600080fd5b50610556601b5481565b3480156109e157600080fd5b5061055660235481565b3480156109f757600080fd5b5061048d61220e565b348015610a0c57600080fd5b50610556600e5481565b348015610a2257600080fd5b5061048d610a313660046142f1565b612409565b348015610a4257600080fd5b506104f5610a51366004614219565b6001600160a01b03166000908152600a602052604090205460ff1690565b348015610a7b57600080fd5b506000546001600160a01b0316610584565b348015610a9957600080fd5b5061048d610aa8366004614219565b612492565b348015610ab957600080fd5b5061055660245481565b348015610acf57600080fd5b5061048d610ade3660046142f1565b6124de565b348015610aef57600080fd5b506040805180820190915260068152652922a220a12160d11b60208201526104bf565b348015610b1e57600080fd5b50610556601a5481565b348015610b3457600080fd5b5061055660145481565b348015610b4a57600080fd5b506104f5610b59366004614219565b6125ac565b348015610b6a57600080fd5b5061048d610b793660046143a8565b6125ec565b348015610b8a57600080fd5b506104f5610b99366004614284565b612634565b348015610baa57600080fd5b5061048d610bb9366004614219565b612683565b348015610bca57600080fd5b5061048d610bd9366004614219565b6126ce565b348015610bea57600080fd5b506104f5610bf9366004614284565b61271c565b348015610c0a57600080fd5b506104f5610c19366004614219565b612729565b348015610c2a57600080fd5b5061048d612784565b348015610c3f57600080fd5b5061048d610c4e366004614219565b6128d9565b348015610c5f57600080fd5b5061048d610c6e3660046142f1565b612925565b348015610c7f57600080fd5b50601d54610584906001600160a01b031681565b348015610c9f57600080fd5b5061048d612954565b348015610cb457600080fd5b5061055660105481565b348015610cca57600080fd5b50610556610cd9366004614219565b6129ad565b348015610cea57600080fd5b50601754610584906001600160a01b031681565b348015610d0a57600080fd5b5061048d612a25565b348015610d1f57600080fd5b50610556610d2e366004614219565b612a7a565b348015610d3f57600080fd5b50610556610d4e36600461430a565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610d8557600080fd5b5061048d610d943660046142f1565b612adf565b348015610da557600080fd5b5061048d610db4366004614219565b612c1c565b348015610dc557600080fd5b5061048d610dd4366004614219565b612c67565b348015610de557600080fd5b50610556601c5481565b348015610dfb57600080fd5b50601e54610584906001600160a01b031681565b6000610e1a33612004565b11610e7d5760405162461bcd60e51b815260206004820152602860248201527f596f75206d757374206861766520612062616c616e636520746f20636c61696d604482015267207265776172647360c01b60648201526084015b60405180910390fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee891906143c5565b11610f4b5760405162461bcd60e51b815260206004820152602d60248201527f5765206d7573742068617665206120746f6b656e2062616c616e636520746f2060448201526c636c61696d207265776172647360981b6064820152608401610e74565b610f5433612729565b610f705760405162461bcd60e51b8152600401610e74906143de565b33600081815260086020526040812042905590610f8d9083611a13565b90506001600160a01b03821663a9059cbb336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af1158015610fec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611010919061442c565b50604080513381526001600160a01b03841660208201529081018290527f461310925e682d8354b34f2245c1ea43ea9a27ceea708a1be23757f31eb88b4f906060015b60405180910390a15050565b600061106c338484612d17565b5060015b92915050565b6000546001600160a01b031633146110a05760405162461bcd60e51b8152600401610e7490614449565b6001600160a01b03811660009081526005602052604090205460ff166111085760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c69737465640000000000006044820152606401610e74565b60005b60065481101561121f57816001600160a01b0316600682815481106111325761113261447e565b6000918252602090912001546001600160a01b03160361120d576006805461115c906001906144aa565b8154811061116c5761116c61447e565b600091825260209091200154600680546001600160a01b0390921691839081106111985761119861447e565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600590915260409020805460ff1916905560068054806111e7576111e76144bd565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80611217816144d3565b91505061110b565b5050565b6000546001600160a01b0316331461124d5760405162461bcd60e51b8152600401610e7490614449565b6001600160a01b0381161561135b57604051632b35867560e11b81526000600482015281906001600160a01b0382169063566b0cea90602401602060405180830381865afa1580156112a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c7919061442c565b15156001148061133d5750604051632b35867560e11b8152600060048201526001600160a01b0382169063566b0cea90602401602060405180830381865afa158015611317573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133b919061442c565b155b6113595760405162461bcd60e51b8152600401610e74906144ec565b505b601e80546001600160a01b0319166001600160a01b0392909216919091179055565b600061138b6009600a614615565b61139890620186a0614624565b905090565b601d546000906001600160a01b0316158015906110705750601d54604051632b35867560e11b81526001600160a01b0384811660048301529091169063566b0cea906024015b602060405180830381865afa158015611400573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611070919061442c565b6000546001600160a01b0316331461144e5760405162461bcd60e51b8152600401610e7490614449565b6001600160a01b0381161561155c57604051632b35867560e11b81526000600482015281906001600160a01b0382169063566b0cea90602401602060405180830381865afa1580156114a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c8919061442c565b15156001148061153e5750604051632b35867560e11b8152600060048201526001600160a01b0382169063566b0cea90602401602060405180830381865afa158015611518573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153c919061442c565b155b61155a5760405162461bcd60e51b8152600401610e74906144ec565b505b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b600061158b848484612e3b565b6115dd84336115d8856040518060600160405280602881526020016147b3602891396001600160a01b038a166000908152600460209081526040808320338452909152902054919061350d565b612d17565b5060019392505050565b6000600c5482111561164e5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610e74565b6000611658613539565b90506116648382612d0b565b9392505050565b6000546001600160a01b031633146116955760405162461bcd60e51b8152600401610e7490614449565b737a250d5630b4cf539739df2c5dacb4c659f2488c196001600160a01b038216016117025760405162461bcd60e51b815260206004820152601c60248201527f57652063616e206e6f7420626c61636b6c69737420556e6973776170000000006044820152606401610e74565b6001600160a01b03811660009081526005602052604090205460ff161561176b5760405162461bcd60e51b815260206004820152601e60248201527f4163636f756e7420697320616c726561647920626c61636b6c697374656400006044820152606401610e74565b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6000546001600160a01b031633146117fb5760405162461bcd60e51b8152600401610e7490614449565b600781111561184c5760405162461bcd60e51b815260206004820152601f60248201527f6d757374206265206c657373207468616e206f7220657175616c20746f2037006044820152606401610e74565b601955565b6000546001600160a01b0316331461187b5760405162461bcd60e51b8152600401610e7490614449565b6001600160a01b0381166000908152600a602052604090205460ff166118e35760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c7564656400000000006044820152606401610e74565b60005b600b5481101561121f57816001600160a01b0316600b828154811061190d5761190d61447e565b6000918252602090912001546001600160a01b0316036119cb57600b8054611937906001906144aa565b815481106119475761194761447e565b600091825260209091200154600b80546001600160a01b0390921691839081106119735761197361447e565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600382526040808220829055600a90925220805460ff19169055600b8054806111e7576111e76144bd565b806119d5816144d3565b9150506118e6565b3360008181526004602090815260408083206001600160a01b0387168452909152812054909161106c9185906115d8908661355c565b6040516370a0823160e01b8152306004820152600090829082906001600160a01b038316906370a0823190602401602060405180830381865afa158015611a5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8291906143c5565b90506000611acf611ab6611a9761dead612004565b611aa36009600a614615565b611ab090620186a0614624565b90613568565b611ac9611ac289612004565b8590612cff565b90612d0b565b90506000611adc8761139d565b611ae65781611b0a565b611b0a611b036064611ac9601c5486612cff90919063ffffffff16565b839061355c565b9050828111611b195780611b1b565b815b979650505050505050565b336000818152600a602052604090205460ff1615611b9b5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610e74565b6000611ba78284613574565b505050506001600160a01b038416600090815260026020526040902054919250611bd391905082613568565b6001600160a01b038316600090815260026020526040902055600c54611bf99082613568565b600c55600d54611c09908461355c565b600d55505050565b6000546001600160a01b03163314611c3b5760405162461bcd60e51b8152600401610e7490614449565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000611c6d6009600a614615565b611c7a90620186a0614624565b831115611cc95760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610e74565b81611cea576000611cdb600085613574565b50939550611070945050505050565b6000611cf7600085613574565b50929550611070945050505050565b6000546001600160a01b03163314611d305760405162461bcd60e51b8152600401610e7490614449565b601a55565b6000546001600160a01b03163314611d5f5760405162461bcd60e51b8152600401610e7490614449565b6001600160a01b0381166000908152600a602052604090205460ff1615611dc85760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610e74565b6001600160a01b03811660009081526002602052604090205415611e22576001600160a01b038116600090815260026020526040902054611e08906115e7565b6001600160a01b0382166000908152600360205260409020555b6001600160a01b03166000818152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319169091179055565b6001600160a01b03811660009081526009602052604081205460ff16806110705750601e546001600160a01b0316158015906110705750601e54604051632b35867560e11b81526001600160a01b0384811660048301529091169063566b0cea906024016113e3565b6000546001600160a01b03163314611f1b5760405162461bcd60e51b8152600401610e7490614449565b601e8183611f29868861463b565b611f33919061463b565b611f3d919061463b565b1115611f8b5760405162461bcd60e51b815260206004820152601d60248201527f5461782063616e6e6f7420626520686967686572207468616e203330250000006044820152606401610e74565b600e93909355601091909155601255601555565b6000546001600160a01b03163314611fc95760405162461bcd60e51b8152600401610e7490614449565b600180546001600160a01b039092166001600160a01b031990921682178155600091825260096020526040909120805460ff19169091179055565b6001600160a01b0381166000908152600a602052604081205460ff161561204157506001600160a01b031660009081526003602052604090205490565b6001600160a01b038216600090815260026020526040902054611070906115e7565b6000546001600160a01b0316331461208d5760405162461bcd60e51b8152600401610e7490614449565b61209760006135c7565b565b6000546001600160a01b031633146120c35760405162461bcd60e51b8152600401610e7490614449565b6103e881106121335760405162461bcd60e51b815260206004820152603660248201527f4d6178696d756d20616d6f756e7420706572207472616e73616374696f6e206d604482015275757374206265206c6f776572207468616e203130302560501b6064820152608401610e74565b600181116121a95760405162461bcd60e51b815260206004820152603760248201527f4d6178696d756d20616d6f756e7420706572207472616e73616374696f6e206d60448201527f75737420626520686967686572207468616e20302e31250000000000000000006064820152608401610e74565b6121d26103e8611ac9836121bf6009600a614615565b6121cc90620186a0614624565b90612cff565b60238190556040519081527f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf906020015b60405180910390a150565b6000546001600160a01b031633146122385760405162461bcd60e51b8152600401610e7490614449565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561228f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b3919061464e565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612300573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612324919061464e565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612371573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612395919061464e565b602080546001600160a01b03199081166001600160a01b03938416178255601f805490911693831693909317909255600080548216815260099092526040808320805460ff199081166001908117909255308552828520805482168317905581549093168452922080549091169091179055565b6000546001600160a01b031633146124335760405162461bcd60e51b8152600401610e7490614449565b61243c30612004565b811115801561244b5750600081115b6124865760405162461bcd60e51b815260206004820152600c60248201526b15dc9bdb99c8185b5bdd5b9d60a21b6044820152606401610e74565b61248f81613617565b50565b6000546001600160a01b031633146124bc5760405162461bcd60e51b8152600401610e7490614449565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146125085760405162461bcd60e51b8152600401610e7490614449565b620a8c008111156125a75760405162461bcd60e51b815260206004820152605760248201527f636c61696d2074696d652064656c6179206d757374206265206772656174657260448201527f206f7220657175616c20746f2030207365636f6e647320616e64206c6573732060648201527f7468616e206f7220657175616c20746f20382064617973000000000000000000608482015260a401610e74565b600755565b6020546000906001600160a01b03908116908316036125cd57506001919050565b506001600160a01b031660009081526021602052604090205460ff1690565b6000546001600160a01b031633146126165760405162461bcd60e51b8152600401610e7490614449565b6022805491151563010000000263ff00000019909216919091179055565b600061106c33846115d8856040518060600160405280602581526020016147db602591393360009081526004602090815260408083206001600160a01b038d168452909152902054919061350d565b6000546001600160a01b031633146126ad5760405162461bcd60e51b8152600401610e7490614449565b6001600160a01b03166000908152602160205260409020805460ff19169055565b6000546001600160a01b031633146126f85760405162461bcd60e51b8152600401610e7490614449565b6001600160a01b03166000908152602160205260409020805460ff19166001179055565b600061106c338484612e3b565b6001600160a01b038116600090815260086020526040812054810361275f57600754601b546127579161355c565b421192915050565b6007546001600160a01b0383166000908152600860205260409020546127579161355c565b600061278f33612004565b116127f15760405162461bcd60e51b815260206004820152602c60248201527f596f75206d757374206861766520612062616c616e636520746f20636c61696d60448201526b20455448207265776172647360a01b6064820152608401610e74565b6127fa33612729565b6128165760405162461bcd60e51b8152600401610e74906143de565b33600081815260086020526040812042905590612832906129ad565b9050806014600082825461284691906144aa565b909155505060405133908290600081818185875af1925050503d806000811461288b576040519150601f19603f3d011682016040523d82523d6000602084013e612890565b606091505b5050507f7d8a5d8268a1c264e8bb2e0a542db0263a9f1ab2759a8594a1302e73c8096ce76128bb3390565b604080516001600160a01b0390921682526020820184905201612203565b6000546001600160a01b031633146129035760405162461bcd60e51b8152600401610e7490614449565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461294f5760405162461bcd60e51b8152600401610e7490614449565b601c55565b6000546001600160a01b0316331461297e5760405162461bcd60e51b8152600401610e7490614449565b601154601055601354601255600f54600e556016546015556022805462ff000019166201000017905542601b55565b6000806129d66129c1611a9761dead612004565b611ac96129cd86612004565b60145490612cff565b905060006129e38461139d565b6129ed5781612a0a565b612a0a611b036064611ac9601c5486612cff90919063ffffffff16565b90506014548111612a1b5780612a1d565b815b949350505050565b6000546001600160a01b03163314612a4f5760405162461bcd60e51b8152600401610e7490614449565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f15050505050565b600080612aa0601554612a9a60125460105461355c90919063ffffffff16565b9061355c565b9050612aab83611e88565b612ad657612ab883612729565b15612ac35780611664565b601954612ad1908290612cff565b611664565b60009392505050565b6000546001600160a01b03163314612b095760405162461bcd60e51b8152600401610e7490614449565b6103e88110612b6e5760405162461bcd60e51b815260206004820152602b60248201527f4d6178696d756d2077616c6c65742073697a65206d757374206265206c6f776560448201526a72207468616e203130302560a81b6064820152608401610e74565b600a8111612bd15760405162461bcd60e51b815260206004820152602a60248201527f4d6178696d756d2077616c6c65742073697a65206d75737420626520686967686044820152696572207468616e20312560b01b6064820152608401610e74565b612be76103e8611ac9836121bf6009600a614615565b60248190556040519081527ffb1fe1002b7550e87616e67793dbb7d3f437a79c2688c372c66dc170dbcb0efd90602001612203565b6000546001600160a01b03163314612c465760405162461bcd60e51b8152600401610e7490614449565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6000546001600160a01b03163314612c915760405162461bcd60e51b8152600401610e7490614449565b6001600160a01b038116612cf65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e74565b61248f816135c7565b60006116648284614624565b6000611664828461466b565b6001600160a01b038316612d795760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610e74565b6001600160a01b038216612dda5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610e74565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612e9f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610e74565b6001600160a01b038216612f015760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610e74565b60008111612f635760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610e74565b6001600160a01b03821660009081526005602052604090205460ff1615612f9c5760405162461bcd60e51b8152600401610e749061468d565b6001600160a01b03831660009081526005602052604090205460ff1615612fd55760405162461bcd60e51b8152600401610e749061468d565b3360009081526005602052604090205460ff16156130055760405162461bcd60e51b8152600401610e749061468d565b6020546001600160a01b038381169116148061303957506001600160a01b03821660009081526021602052604090205460ff165b80156130535750601f546001600160a01b03848116911614155b8015613065575061306382611e88565b155b8015613077575061307583611e88565b155b156130ce576023548111156130ce5760405162461bcd60e51b815260206004820152601c60248201527f544f4b454e3a204d6178205472616e73616374696f6e204c696d6974000000006044820152606401610e74565b6020546001600160a01b0383811691161480159061310557506001600160a01b03821660009081526021602052604090205460ff16155b8015613117575061311582611e88565b155b8015613129575061312783611e88565b155b15613209576024548161313b84612004565b613145919061463b565b1061319e5760405162461bcd60e51b815260206004820152602360248201527f544f4b454e3a2042616c616e636520657863656564732077616c6c65742073696044820152627a652160e81b6064820152608401610e74565b6022546301000000900460ff161561320957601b546131bf9061070861463b565b4211613209576025548111156132095760405162461bcd60e51b815260206004820152600f60248201526e082dadeeadce840e8dede40daeac6d608b1b6044820152606401610e74565b6001600160a01b03808316600090815260086020908152604082204290555490918581169116148061325357506001600160a01b03841660009081526021602052604090205460ff165b801561326d5750601f546001600160a01b03848116911614155b1561336a5761327b83611e88565b6133665760225462010000900460ff166132d75760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e00000000000000006044820152606401610e74565b601b544203613346576001600160a01b0383166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b03191690911790555b6001600160a01b038416600090815260086020526040902042905561336a565b5060015b60225460ff16158015613385575060225462010000900460ff165b80156133c057506020546001600160a01b03848116911614806133c057506001600160a01b03831660009081526021602052604090205460ff165b1561346a5760006133d030612004565b9050801561343357601a546020546133fc91606491611ac991906121cc906001600160a01b0316612004565b81111561342a57601a5460205461342791606491611ac991906121cc906001600160a01b0316612004565b90505b61343381613617565b6001600160a01b03851660009081526008602052604090204290556022805461ff00191661010017905561346685611e88565b9150505b6020546000906001600160a01b038681169116148061349657506020546001600160a01b038581169116145b806134b957506001600160a01b03841660009081526021602052604090205460ff165b806134dc57506001600160a01b03851660009081526021602052604090205460ff165b80156134e6575081155b156134ef575060015b6134fb858585846136e7565b50506022805461ff0019169055505050565b600081848411156135315760405162461bcd60e51b8152600401610e749190614236565b505050900390565b600080600061354661381e565b90925090506135558282612d0b565b9250505090565b6000611664828461463b565b600061166482846144aa565b600080600080600080600080600061358c8b8b6139fc565b92509250925060008060006135aa8d86866135a5613539565b613a3a565b919d509b5099509497509295509093505050509295509295509295565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6022805460ff191660011790554761362e82613a8a565b47600061363b8284613568565b905060006136496000613c11565b905061366481611ac960125485612cff90919063ffffffff16565b60146000828254613675919061463b565b92505081905550600061369782611ac960105486612cff90919063ffffffff16565b905080156136a8576136a881613c65565b60006136c383611ac960155487612cff90919063ffffffff16565b905080156136d4576136d481613cb2565b50506022805460ff191690555050505050565b806136f4576136f4613e43565b6001600160a01b0384166000908152600a602052604090205460ff16801561373557506001600160a01b0383166000908152600a602052604090205460ff16155b1561374a57613745848484613e9e565b6137f6565b6001600160a01b0384166000908152600a602052604090205460ff1615801561378b57506001600160a01b0383166000908152600a602052604090205460ff165b1561379b57613745848484613fc5565b6001600160a01b0384166000908152600a602052604090205460ff1680156137db57506001600160a01b0383166000908152600a602052604090205460ff165b156137eb5761374584848461406f565b6137f68484846140e3565b8061381857613818600f54600e55601154601055601354601255601654601555565b50505050565b600c546000908190816138336009600a614615565b61384090620186a0614624565b905060005b600b548110156139a0578260026000600b84815481106138675761386761447e565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806138d257508160036000600b84815481106138ab576138ab61447e565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156138fe57600c546138e66009600a614615565b6138f390620186a0614624565b945094505050509091565b61394460026000600b84815481106139185761391861447e565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490613568565b925061398c60036000600b84815481106139605761396061447e565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390613568565b915080613998816144d3565b915050613845565b506139c66139b06009600a614615565b6139bd90620186a0614624565b600c5490612d0b565b8210156139f357600c546139dc6009600a614615565b6139e990620186a0614624565b9350935050509091565b90939092509050565b600080600080613a0b85614128565b90506000613a198787614144565b90506000613a2b82611ab08986613568565b95509193509150509250925092565b6000808080613a498886612cff565b90506000613a578887612cff565b90506000613a658888612cff565b90506000613a7782611ab08686613568565b939b939a50919850919650505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613abf57613abf61447e565b6001600160a01b03928316602091820292909201810191909152601f54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613b18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b3c919061464e565b81600181518110613b4f57613b4f61447e565b6001600160a01b039283166020918202929092010152601f54613b759130911684612d17565b601f5460405163791ac94760e01b81526001600160a01b039091169063791ac94790613bae9085906000908690309042906004016146f8565b600060405180830381600087803b158015613bc857600080fd5b505af1158015613bdc573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051611053929190614734565b6022546000908190610100900460ff168015613c335750613c3183612729565b155b613c3e576001613c42565b6019545b9050611664816121cc601554612a9a60125460105461355c90919063ffffffff16565b6001546040516001600160a01b03909116908290600081818185875af1925050503d8060008114613818576040519150601f19603f3d011682016040523d82523d6000602084013e613818565b6040805160028082526060820183526000926020830190803683375050601f54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015613d1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d40919061464e565b81600081518110613d5357613d5361447e565b6001600160a01b039283166020918202929092010152601754825191169082906001908110613d8457613d8461447e565b6001600160a01b039283166020918202929092010152601f5460185460405163b6f9de9560e01b81529183169263b6f9de95928692613dd092600092889290911690429060040161474d565b6000604051808303818588803b158015613de957600080fd5b505af1158015613dfd573d6000803e3d6000fd5b50506018546040517fe9d8c77238db27a9c74786624137d346727f868e8e54d82636abf1a2a8344819945061105393506001600160a01b03909116915085908590614782565b600e54158015613e535750601054155b8015613e5f5750601254155b8015613e6b5750601554155b15613e7257565b600e8054600f556010805460115560128054601355601580546016556000938490559183905582905555565b600080600080600080613eb18988613574565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150613ee39088613568565b6001600160a01b038a16600090815260036020908152604080832093909355600290522054613f129087613568565b6001600160a01b03808b1660009081526002602052604080822093909355908a1681522054613f41908661355c565b6001600160a01b038916600090815260026020526040902055613f6381614157565b613f6d84836141e0565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613fb291815260200190565b60405180910390a3505050505050505050565b600080600080600080613fd88988613574565b6001600160a01b038f16600090815260026020526040902054959b5093995091975095509350915061400a9087613568565b6001600160a01b03808b16600090815260026020908152604080832094909455918b16815260039091522054614040908461355c565b6001600160a01b038916600090815260036020908152604080832093909355600290522054613f41908661355c565b6000806000806000806140828988613574565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506140b49088613568565b6001600160a01b038a1660009081526003602090815260408083209390935560029052205461400a9087613568565b6000806000806000806140f68988613574565b6001600160a01b038f16600090815260026020526040902054959b50939950919750955093509150613f129087613568565b60006110706064611ac9600e5485612cff90919063ffffffff16565b60006116646064611ac9611ac286613c11565b6000614161613539565b9050600061416f8383612cff565b3060009081526002602052604090205490915061418c908261355c565b30600090815260026020908152604080832093909355600a9052205460ff16156141db57306000908152600360205260409020546141ca908461355c565b306000908152600360205260409020555b505050565b600c546141ed9083613568565b600c55600d546141fd908261355c565b600d555050565b6001600160a01b038116811461248f57600080fd5b60006020828403121561422b57600080fd5b813561166481614204565b600060208083528351808285015260005b8181101561426357858101830151858201604001528201614247565b506000604082860101526040601f19601f8301168501019250505092915050565b6000806040838503121561429757600080fd5b82356142a281614204565b946020939093013593505050565b6000806000606084860312156142c557600080fd5b83356142d081614204565b925060208401356142e081614204565b929592945050506040919091013590565b60006020828403121561430357600080fd5b5035919050565b6000806040838503121561431d57600080fd5b823561432881614204565b9150602083013561433881614204565b809150509250929050565b801515811461248f57600080fd5b6000806040838503121561436457600080fd5b82359150602083013561433881614343565b6000806000806080858703121561438c57600080fd5b5050823594602084013594506040840135936060013592509050565b6000602082840312156143ba57600080fd5b813561166481614343565b6000602082840312156143d757600080fd5b5051919050565b6020808252602e908201527f4d757374207761697420636c61696d20706572696f64206265666f726520636c60408201526d61696d696e67207265776172647360901b606082015260800190565b60006020828403121561443e57600080fd5b815161166481614343565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111561107057611070614494565b634e487b7160e01b600052603160045260246000fd5b6000600182016144e5576144e5614494565b5060010190565b60208082526025908201527f636f6e747261637420646f6573206e6f7420696d706c656d656e7420696e7465604082015264726661636560d81b606082015260800190565b600181815b8085111561456c57816000190482111561455257614552614494565b8085161561455f57918102915b93841c9390800290614536565b509250929050565b60008261458357506001611070565b8161459057506000611070565b81600181146145a657600281146145b0576145cc565b6001915050611070565b60ff8411156145c1576145c1614494565b50506001821b611070565b5060208310610133831016604e8410600b84101617156145ef575081810a611070565b6145f98383614531565b806000190482111561460d5761460d614494565b029392505050565b600061166460ff841683614574565b808202811582820484141761107057611070614494565b8082018082111561107057611070614494565b60006020828403121561466057600080fd5b815161166481614204565b60008261468857634e487b7160e01b600052601260045260246000fd5b500490565b6020808252600d908201526c53746f7020736e6970696e672160981b604082015260600190565b600081518084526020808501945080840160005b838110156146ed5781516001600160a01b0316875295820195908201906001016146c8565b509495945050505050565b85815284602082015260a06040820152600061471760a08301866146b4565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201526000612a1d60408301846146b4565b84815260806020820152600061476660808301866146b4565b6001600160a01b03949094166040830152506060015292915050565b60018060a01b03841681528260208201526060604082015260006147a960608301846146b4565b9594505050505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208de19d9b40d25e9ce3afb8f081aefc3e43b9ecc9e17aba5777702184f0da323d64736f6c63430008110033
Deployed Bytecode Sourcemap
28895:29875:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57649:656;;;;;;;;;;-1:-1:-1;57649:656:0;;;;;:::i;:::-;;:::i;:::-;;33022:79;;;;;;;;;;-1:-1:-1;33090:5:0;;;;;;;;;;;;-1:-1:-1;;;33090:5:0;;;;33022:79;;;;;;;:::i;:::-;;;;;;;;34119:171;;;;;;;;;;-1:-1:-1;34119:171:0;;;;;:::i;:::-;;:::i;:::-;;;1440:14:1;;1433:22;1415:41;;1403:2;1388:18;34119:171:0;1275:187:1;55206:421:0;;;;;;;;;;-1:-1:-1;55206:421:0;;;;;:::i;:::-;;:::i;54319:477::-;;;;;;;;;;-1:-1:-1;54319:477:0;;;;;:::i;:::-;;:::i;36217:83::-;;;;;;;;;;-1:-1:-1;36284:10:0;;36217:83;;;1613:25:1;;;1601:2;1586:18;36217:83:0;1467:177:1;30849:41:0;;;;;;;;;;-1:-1:-1;30849:41:0;;;;-1:-1:-1;;;;;30849:41:0;;;;;;-1:-1:-1;;;;;1840:32:1;;;1822:51;;1810:2;1795:18;30849:41:0;1649:230:1;33281:91:0;;;;;;;;;;;;;:::i;30563:46::-;;;;;;;;;;-1:-1:-1;30563:46:0;;;;-1:-1:-1;;;;;30563:46:0;;;51210:202;;;;;;;;;;-1:-1:-1;51210:202:0;;;;;:::i;:::-;;:::i;30257:32::-;;;;;;;;;;;;;;;;53836:477;;;;;;;;;;-1:-1:-1;53836:477:0;;;;;:::i;:::-;;:::i;34296:376::-;;;;;;;;;;-1:-1:-1;34296:376:0;;;;;:::i;:::-;;:::i;29112:85::-;;;;;;;;;;;;29155:42;29112:85;;33471:91;;;;;;;;;;-1:-1:-1;33542:14:0;;33471:91;;37160:239;;;;;;;;;;-1:-1:-1;37160:239:0;;;;;:::i;:::-;;:::i;31484:58::-;;;;;;;;;;;;;;;;33196:79;;;;;;;;;;-1:-1:-1;33196:79:0;;29869:1;2880:36:1;;2868:2;2853:18;33196:79:0;2738:184:1;54917:283:0;;;;;;;;;;-1:-1:-1;54917:283:0;;;;;:::i;:::-;;:::i;52806:178::-;;;;;;;;;;-1:-1:-1;52806:178:0;;;;;:::i;:::-;;:::i;37729:423::-;;;;;;;;;;-1:-1:-1;37729:423:0;;;;;:::i;:::-;;:::i;34678:256::-;;;;;;;;;;-1:-1:-1;34678:256:0;;;;;:::i;:::-;;:::i;56123:660::-;;;;;;;;;;-1:-1:-1;56123:660:0;;;;;:::i;:::-;;:::i;30392:29::-;;;;;;;;;;;;;;;;36306:393;;;;;;;;;;-1:-1:-1;36306:393:0;;;;;:::i;:::-;;:::i;33378:87::-;;;;;;;;;;-1:-1:-1;33447:12:0;;33378:87;;29461:57;;;;;;;;;;;;;;;;36068:143;;;;;;;;;;-1:-1:-1;36068:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;36180:25:0;36154:7;36180:25;;;:17;:25;;;;;;;36068:143;51787:103;;;;;;;;;;-1:-1:-1;51787:103:0;;;;;:::i;:::-;;:::i;36705:449::-;;;;;;;;;;-1:-1:-1;36705:449:0;;;;;:::i;:::-;;:::i;58311:82::-;;;;;;;;;;-1:-1:-1;58311:82:0;;;;;:::i;:::-;;:::i;29011:96::-;;;;;;;;;;-1:-1:-1;29011:96:0;;;;-1:-1:-1;;;;;29011:96:0;;;30895:28;;;;;;;;;;-1:-1:-1;30895:28:0;;;;-1:-1:-1;;;;;30895:28:0;;;30616:36;;;;;;;;;;;;;;;;37405:318;;;;;;;;;;-1:-1:-1;37405:318:0;;;;;:::i;:::-;;:::i;51418:235::-;;;;;;;;;;-1:-1:-1;51418:235:0;;;;;:::i;:::-;;:::i;52343:457::-;;;;;;;;;;-1:-1:-1;52343:457:0;;;;;:::i;:::-;;:::i;54802:109::-;;;;;;;;;;-1:-1:-1;54802:109:0;;;;;:::i;:::-;-1:-1:-1;;;;;54887:18:0;54867:4;54887:18;;;:9;:18;;;;;;;;;54802:109;52990:170;;;;;;;;;;-1:-1:-1;52990:170:0;;;;;:::i;:::-;;:::i;33568:194::-;;;;;;;;;;-1:-1:-1;33568:194:0;;;;;:::i;:::-;;:::i;11995:94::-;;;;;;;;;;;;;:::i;35280:392::-;;;;;;;;;;-1:-1:-1;35280:392:0;;;;;:::i;:::-;;:::i;30689:25::-;;;;;;;;;;;;;;;;31354:53;;;;;;;;;;;;;;;;32276:458;;;;;;;;;;;;;:::i;30070:32::-;;;;;;;;;;;;;;;;58399:167;;;;;;;;;;-1:-1:-1;58399:167:0;;;;;:::i;:::-;;:::i;51659:122::-;;;;;;;;;;-1:-1:-1;51659:122:0;;;;;:::i;:::-;-1:-1:-1;;;;;51749:26:0;51729:4;51749:26;;;:17;:26;;;;;;;;;51659:122;11344:87;;;;;;;;;;-1:-1:-1;11390:7:0;11417:6;-1:-1:-1;;;;;11417:6:0;11344:87;;53400:106;;;;;;;;;;-1:-1:-1;53400:106:0;;;;;:::i;:::-;;:::i;31418:55::-;;;;;;;;;;;;;;;;52004:271;;;;;;;;;;-1:-1:-1;52004:271:0;;;;;:::i;:::-;;:::i;33107:83::-;;;;;;;;;;-1:-1:-1;33177:7:0;;;;;;;;;;;;-1:-1:-1;;;33177:7:0;;;;33107:83;;30657:27;;;;;;;;;;;;;;;;30353:32;;;;;;;;;;;;;;;;51050:154;;;;;;;;;;-1:-1:-1;51050:154:0;;;;;:::i;:::-;;:::i;53166:100::-;;;;;;;;;;-1:-1:-1;53166:100:0;;;;;:::i;:::-;;:::i;34940:334::-;;;;;;;;;;-1:-1:-1;34940:334:0;;;;;:::i;:::-;;:::i;53617:103::-;;;;;;;;;;-1:-1:-1;53617:103:0;;;;;:::i;:::-;;:::i;53512:99::-;;;;;;;;;;-1:-1:-1;53512:99:0;;;;;:::i;:::-;;:::i;33768:177::-;;;;;;;;;;-1:-1:-1;33768:177:0;;;;;:::i;:::-;;:::i;57327:316::-;;;;;;;;;;-1:-1:-1;57327:316:0;;;;;:::i;:::-;;:::i;56789:532::-;;;;;;;;;;;;;:::i;53272:122::-;;;;;;;;;;-1:-1:-1;53272:122:0;;;;;:::i;:::-;;:::i;53726:104::-;;;;;;;;;;-1:-1:-1;53726:104:0;;;;;:::i;:::-;;:::i;30767:35::-;;;;;;;;;;-1:-1:-1;30767:35:0;;;;-1:-1:-1;;;;;30767:35:0;;;32740:276;;;;;;;;;;;;;:::i;30165:30::-;;;;;;;;;;;;;;;;55633:484;;;;;;;;;;-1:-1:-1;55633:484:0;;;;;:::i;:::-;;:::i;30479:79::-;;;;;;;;;;-1:-1:-1;30479:79:0;;;;-1:-1:-1;;;;;30479:79:0;;;58572:105;;;;;;;;;;;;;:::i;50759:285::-;;;;;;;;;;-1:-1:-1;50759:285:0;;;;;:::i;:::-;;:::i;33951:162::-;;;;;;;;;;-1:-1:-1;33951:162:0;;;;;:::i;:::-;-1:-1:-1;;;;;34080:18:0;;;34054:7;34080:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;33951:162;35678:384;;;;;;;;;;-1:-1:-1;35678:384:0;;;;;:::i;:::-;;:::i;51896:102::-;;;;;;;;;;-1:-1:-1;51896:102:0;;;;;:::i;:::-;;:::i;12244:192::-;;;;;;;;;;-1:-1:-1;12244:192:0;;;;;:::i;:::-;;:::i;30721:39::-;;;;;;;;;;;;;;;;30807:35;;;;;;;;;;-1:-1:-1;30807:35:0;;;;-1:-1:-1;;;;;30807:35:0;;;57649:656;57749:1;57723:23;10300:10;33568:194;:::i;57723:23::-;:27;57707:101;;;;-1:-1:-1;;;57707:101:0;;4819:2:1;57707:101:0;;;4801:21:1;4858:2;4838:18;;;4831:30;4897:34;4877:18;;;4870:62;-1:-1:-1;;;4948:18:1;;;4941:38;4996:19;;57707:101:0;;;;;;;;;57831:38;;-1:-1:-1;;;57831:38:0;;57863:4;57831:38;;;1822:51:1;57872:1:0;;-1:-1:-1;;;;;57831:23:0;;;;;1795:18:1;;57831:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:42;57815:121;;;;-1:-1:-1;;;57815:121:0;;5417:2:1;57815:121:0;;;5399:21:1;5456:2;5436:18;;;5429:30;5495:34;5475:18;;;5468:62;-1:-1:-1;;;5546:18:1;;;5539:43;5599:19;;57815:121:0;5215:409:1;57815:121:0;57959:29;10300:10;57327:316;:::i;57959:29::-;57943:109;;;;-1:-1:-1;;;57943:109:0;;;;;;;:::i;:::-;10300:10;58059:31;;;;:17;:31;;;;;58093:15;58059:49;;:31;58139:42;;58175:5;58139:21;:42::i;:::-;58117:64;-1:-1:-1;;;;;;58188:22:0;;;10300:10;58188:49;;-1:-1:-1;;;;;;58188:49:0;;;;;;;-1:-1:-1;;;;;6236:32:1;;;58188:49:0;;;6218:51:1;6285:18;;;6278:34;;;6191:18;;58188:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;58249:50:0;;;10300:10;6813:34:1;;-1:-1:-1;;;;;6883:15:1;;6878:2;6863:18;;6856:43;6915:18;;;6908:34;;;58249:50:0;;6763:2:1;6748:18;58249:50:0;;;;;;;;57700:605;57649:656;:::o;34119:171::-;34211:4;34227:39;10300:10;34250:7;34259:6;34227:8;:39::i;:::-;-1:-1:-1;34280:4:0;34119:171;;;;;:::o;55206:421::-;11390:7;11417:6;-1:-1:-1;;;;;11417:6:0;10300:10;11564:23;11556:68;;;;-1:-1:-1;;;11556:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;55280:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;;::::1;;55272:57;;;::::0;-1:-1:-1;;;55272:57:0;;7516:2:1;55272:57:0::1;::::0;::::1;7498:21:1::0;7555:2;7535:18;;;7528:30;7594:28;7574:18;;;7567:56;7640:18;;55272:57:0::1;7314:350:1::0;55272:57:0::1;55341:9;55336:286;55360:17;:24:::0;55356:28;::::1;55336:286;;;55428:7;-1:-1:-1::0;;;;;55404:31:0::1;:17;55422:1;55404:20;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;55404:20:0::1;:31:::0;55400:215:::1;;55471:17;55489:24:::0;;:28:::1;::::0;55516:1:::1;::::0;55489:28:::1;:::i;:::-;55471:47;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;55448:17:::1;:20:::0;;-1:-1:-1;;;;;55471:47:0;;::::1;::::0;55466:1;;55448:20;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:70:::0;;-1:-1:-1;;;;;;55448:70:0::1;-1:-1:-1::0;;;;;55448:70:0;;::::1;;::::0;;55529:18;;::::1;::::0;;:9:::1;:18:::0;;;;;;:26;;-1:-1:-1;;55529:26:0::1;::::0;;55566:17:::1;:23:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;55566:23:0;;;;;-1:-1:-1;;;;;;55566:23:0::1;::::0;;;;;55336:286:::1;55206:421:::0;:::o;55400:215::-:1;55386:3:::0;::::1;::::0;::::1;:::i;:::-;;;;55336:286;;;;55206:421:::0;:::o;54319:477::-;11390:7;11417:6;-1:-1:-1;;;;;11417:6:0;10300:10;11564:23;11556:68;;;;-1:-1:-1;;;11556:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;54401:23:0;::::1;::::0;54397:355:::1;;54587:33;::::0;-1:-1:-1;;;54587:33:0;;54435:23:::1;54587:33;::::0;::::1;1822:51:1::0;54474:9:0;;-1:-1:-1;;;;;54587:21:0;::::1;::::0;::::1;::::0;1795:18:1;;54587:33:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:41;;54624:4;54587:41;::::0;:98:::1;;-1:-1:-1::0;54643:33:0::1;::::0;-1:-1:-1;;;54643:33:0;;54673:1:::1;54643:33;::::0;::::1;1822:51:1::0;-1:-1:-1;;;;;54643:21:0;::::1;::::0;::::1;::::0;1795:18:1;;54643:33:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:42;54587:98;54569:175;;;;-1:-1:-1::0;;;54569:175:0::1;;;;;;;:::i;:::-;54426:326;54397:355;54758:20;:32:::0;;-1:-1:-1;;;;;;54758:32:0::1;-1:-1:-1::0;;;;;54758:32:0;;;::::1;::::0;;;::::1;::::0;;54319:477::o;33281:91::-;33336:7;29965:13;29869:1;29965:2;:13;:::i;:::-;29959:19;;:3;:19;:::i;:::-;33352:14;;33281:91;:::o;51210:202::-;51308:20;;51281:4;;-1:-1:-1;;;;;51308:20:0;:34;;;;:98;;-1:-1:-1;51366:20:0;;51353:53;;-1:-1:-1;;;51353:53:0;;-1:-1:-1;;;;;1840:32:1;;;51353:53:0;;;1822:51:1;51366:20:0;;;;51353:45;;1795:18:1;;51353:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;53836:477::-;11390:7;11417:6;-1:-1:-1;;;;;11417:6:0;10300:10;11564:23;11556:68;;;;-1:-1:-1;;;11556:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;53918:23:0;::::1;::::0;53914:355:::1;;54104:33;::::0;-1:-1:-1;;;54104:33:0;;53952:23:::1;54104:33;::::0;::::1;1822:51:1::0;53991:9:0;;-1:-1:-1;;;;;54104:21:0;::::1;::::0;::::1;::::0;1795:18:1;;54104:33:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:41;;54141:4;54104:41;::::0;:98:::1;;-1:-1:-1::0;54160:33:0::1;::::0;-1:-1:-1;;;54160:33:0;;54190:1:::1;54160:33;::::0;::::1;1822:51:1::0;-1:-1:-1;;;;;54160:21:0;::::1;::::0;::::1;::::0;1795:18:1;;54160:33:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:42;54104:98;54086:175;;;;-1:-1:-1::0;;;54086:175:0::1;;;;;;;:::i;:::-;53943:326;53914:355;54275:20;:32:::0;;-1:-1:-1;;;;;;54275:32:0::1;-1:-1:-1::0;;;;;54275:32:0;;;::::1;::::0;;;::::1;::::0;;53836:477::o;34296:376::-;34416:4;34429:36;34439:6;34447:9;34458:6;34429:9;:36::i;:::-;34472:176;34489:6;10300:10;34525:116;34573:6;34525:116;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34525:19:0;;;;;;:11;:19;;;;;;;;10300:10;34525:33;;;;;;;;;;:37;:116::i;:::-;34472:8;:176::i;:::-;-1:-1:-1;34662:4:0;34296:376;;;;;:::o;37160:239::-;37227:7;37262;;37251;:18;;37243:73;;;;-1:-1:-1;;;37243:73:0;;10502:2:1;37243:73:0;;;10484:21:1;10541:2;10521:18;;;10514:30;10580:34;10560:18;;;10553:62;-1:-1:-1;;;10631:18:1;;;10624:40;10681:19;;37243:73:0;10300:406:1;37243:73:0;37323:19;37345:10;:8;:10::i;:::-;37323:32;-1:-1:-1;37369:24:0;:7;37323:32;37369:11;:24::i;:::-;37362:31;37160:239;-1:-1:-1;;;37160:239:0:o;54917:283::-;11390:7;11417:6;-1:-1:-1;;;;;11417:6:0;10300:10;11564:23;11556:68;;;;-1:-1:-1;;;11556:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;54990:32:0;::::1;::::0;54982:73:::1;;;::::0;-1:-1:-1;;;54982:73:0;;10913:2:1;54982:73:0::1;::::0;::::1;10895:21:1::0;10952:2;10932:18;;;10925:30;10991;10971:18;;;10964:58;11039:18;;54982:73:0::1;10711:352:1::0;54982:73:0::1;-1:-1:-1::0;;;;;55071:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;;::::1;;55070:19;55062:62;;;::::0;-1:-1:-1;;;55062:62:0;;11270:2:1;55062:62:0::1;::::0;::::1;11252:21:1::0;11309:2;11289:18;;;11282:30;11348:32;11328:18;;;11321:60;11398:18;;55062:62:0::1;11068:354:1::0;55062:62:0::1;-1:-1:-1::0;;;;;55131:18:0::1;;::::0;;;:9:::1;:18;::::0;;;;:25;;-1:-1:-1;;55131:25:0::1;55152:4;55131:25:::0;;::::1;::::0;;;55163:17:::1;:31:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;55163:31:0::1;::::0;;::::1;::::0;;54917:283::o;52806:178::-;11390:7;11417:6;-1:-1:-1;;;;;11417:6:0;10300:10;11564:23;11556:68;;;;-1:-1:-1;;;11556:68:0;;;;;;;:::i;:::-;52904:1:::1;52890:10;:15;;52882:59;;;::::0;-1:-1:-1;;;52882:59:0;;11629:2:1;52882:59:0::1;::::0;::::1;11611:21:1::0;11668:2;11648:18;;;11641:30;11707:33;11687:18;;;11680:61;11758:18;;52882:59:0::1;11427:355:1::0;52882:59:0::1;52948:17;:30:::0;52806:178::o;37729:423::-;11390:7;11417:6;-1:-1:-1;;;;;11417:6:0;10300:10;11564:23;11556:68;;;;-1:-1:-1;;;11556:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37805:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;::::1;;37797:66;;;::::0;-1:-1:-1;;;37797:66:0;;11989:2:1;37797:66:0::1;::::0;::::1;11971:21:1::0;12028:2;12008:18;;;12001:30;12067:29;12047:18;;;12040:57;12114:18;;37797:66:0::1;11787:351:1::0;37797:66:0::1;37875:9;37870:277;37894:9;:16:::0;37890:20;::::1;37870:277;;;37946:7;-1:-1:-1::0;;;;;37930:23:0::1;:9;37940:1;37930:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;37930:12:0::1;:23:::0;37926:214:::1;;37981:9;37991:16:::0;;:20:::1;::::0;38010:1:::1;::::0;37991:20:::1;:::i;:::-;37981:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;37966:9:::1;:12:::0;;-1:-1:-1;;;;;37981:31:0;;::::1;::::0;37976:1;;37966:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;37966:46:0::1;-1:-1:-1::0;;;;;37966:46:0;;::::1;;::::0;;38023:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;38054:17:::1;:26:::0;;;;:34;;-1:-1:-1;;38054:34:0::1;::::0;;38099:9:::1;:15:::0;;;::::1;;;;:::i;37926:214::-;37912:3:::0;::::1;::::0;::::1;:::i;:::-;;;;37870:277;;34678:256:::0;10300:10;34783:4;34853:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;34853:34:0;;;;;;;;;;34783:4;;34799:111;;34837:7;;34853:50;;34892:10;34853:38;:50::i;56123:660::-;56320:30;;-1:-1:-1;;;56320:30:0;;56344:4;56320:30;;;1822:51:1;56228:7:0;;56269:12;;56228:7;;-1:-1:-1;;;;;56320:15:0;;;;;1795:18:1;;56320:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;56289:61;;56357:19;56379:120;56435:35;56447:22;29155:42;56447:9;:22::i;:::-;29965:13;29869:1;29965:2;:13;:::i;:::-;29959:19;;:3;:19;:::i;:::-;56435:11;;:35::i;:::-;56379:43;56404:17;56414:6;56404:9;:17::i;:::-;56379:20;;:24;:43::i;:::-;:47;;:120::i;:::-;56357:142;;56506:26;56535:32;56560:6;56535:24;:32::i;:::-;:127;;56651:11;56535:127;;;56577:64;56593:47;56634:5;56593:36;56609:19;;56593:11;:15;;:36;;;;:::i;:47::-;56577:11;;:15;:64::i;:::-;56506:156;;56704:20;56683:18;:41;:94;;56759:18;56683:94;;;56736:11;56683:94;56669:108;56123:660;-1:-1:-1;;;;;;;56123:660:0:o;36306:393::-;10300:10;36356:14;36409:25;;;:17;:25;;;;;;;;36408:26;36392:104;;;;-1:-1:-1;;;36392:104:0;;12345:2:1;36392:104:0;;;12327:21:1;12384:2;12364:18;;;12357:30;12423:34;12403:18;;;12396:62;-1:-1:-1;;;12474:18:1;;;12467:42;12526:19;;36392:104:0;12143:408:1;36392:104:0;36504:15;36533:27;36544:6;36552:7;36533:10;:27::i;:::-;-1:-1:-1;;;;;;;;;36585:15:0;;;;;;:7;:15;;;;;;36503:57;;-1:-1:-1;36585:28:0;;:15;-1:-1:-1;36503:57:0;36585:19;:28::i;:::-;-1:-1:-1;;;;;36567:15:0;;;;;;:7;:15;;;;;:46;36630:7;;:20;;36642:7;36630:11;:20::i;:::-;36620:7;:30;36670:10;;:23;;36685:7;36670:14;:23::i;:::-;36657:10;:36;-1:-1:-1;;;36306:393:0:o;51787:103::-;11390:7;11417:6;-1:-1:-1;;;;;11417:6:0;10300:10;11564:23;11556:68;;;;-1:-1:-1;;;11556:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;51854:23:0::1;;::::0;;;:14:::1;:23;::::0;;;;:30;;-1:-1:-1;;51854:30:0::1;51880:4;51854:30;::::0;;51787:103::o;36705:449::-;36813:7;29965:13;29869:1;29965:2;:13;:::i;:::-;29959:19;;:3;:19;:::i;:::-;36840:7;:18;;36832:62;;;;-1:-1:-1;;;36832:62:0;;12758:2:1;36832:62:0;;;12740:21:1;12797:2;12777:18;;;12770:30;12836:33;12816:18;;;12809:61;12887:18;;36832:62:0;12556:355:1;36832:62:0;36906:17;36901:248;;36935:15;36964:31;36983:1;36987:7;36964:10;:31::i;:::-;-1:-1:-1;36934:61:0;;-1:-1:-1;37004:14:0;;-1:-1:-1;;;;;37004:14:0;36901:248;37044:23;37079:31;37098:1;37102:7;37079:10;:31::i;:::-;-1:-1:-1;37041:69:0;;-1:-1:-1;37119:22:0;;-1:-1:-1;;;;;37119:22:0;58311:82;11390:7;11417:6;-1:-1:-1;;;;;11417:6:0;10300:10;11564:23;11556:68;;;;-1:-1:-1;;;11556:68:0;;;;;;;:::i;:::-;58372:7:::1;:15:::0;58311:82::o;37405:318::-;11390:7;11417:6;-1:-1:-1;;;;;11417:6:0;10300:10;11564:23;11556:68;;;;-1:-1:-1;;;11556:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37484:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;::::1;;37483:27;37475:67;;;::::0;-1:-1:-1;;;37475:67:0;;13118:2:1;37475:67:0::1;::::0;::::1;13100:21:1::0;13157:2;13137:18;;;13130:30;13196:29;13176:18;;;13169:57;13243:18;;37475:67:0::1;12916:351:1::0;37475:67:0::1;-1:-1:-1::0;;;;;37553:16:0;::::1;37572:1;37553:16:::0;;;:7:::1;:16;::::0;;;;;:20;37549:99:::1;;-1:-1:-1::0;;;;;37623:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;37603:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;37584:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;37549:99:::1;-1:-1:-1::0;;;;;37654:26:0::1;;::::0;;;:17:::1;:26;::::0;;;;:33;;-1:-1:-1;;37654:33:0::1;37683:4;37654:33:::0;;::::1;::::0;;;37694:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;37694:23:0::1;::::0;;::::1;::::0;;37405:318::o;51418:235::-;-1:-1:-1;;;;;51510:23:0;;51483:4;51510:23;;;:14;:23;;;;;;;;;:137;;-1:-1:-1;51545:20:0;;-1:-1:-1;;;;;51545:20:0;:34;;;;:101;;-1:-1:-1;51605:20:0;;51592:54;;-1:-1:-1;;;51592:54:0;;-1:-1:-1;;;;;1840:32:1;;;51592:54:0;;;1822:51:1;51605:20:0;;;;51592:45;;1795:18:1;;51592:54:0;1649:230:1;52343:457:0;11390:7;11417:6;-1:-1:-1;;;;;11417:6:0;10300:10;11564:23;11556:68;;;;-1:-1:-1;;;11556:68:0;;;;;;;:::i;:::-;52601:2:::1;52576:21:::0;52556:17;52518:35:::1;52538:15:::0;52518:17;:35:::1;:::i;:::-;:55;;;;:::i;:::-;:79;;;;:::i;:::-;:85;;52510:127;;;::::0;-1:-1:-1;;;52510:127:0;;13604:2:1;52510:127:0::1;::::0;::::1;13586:21:1::0;13643:2;13623:18;;;13616:30;13682:31;13662:18;;;13655:59;13731:18;;52510:127:0::1;13402:353:1::0;52510:127:0::1;52644:13;:33:::0;;;;52684:11:::1;:29:::0;;;;52720:13:::1;:33:::0;52760:10:::1;:34:::0;52343:457::o;52990:170::-;11390:7;11417:6;-1:-1:-1;;;;;11417:6:0;10300:10;11564:23;11556:68;;;;-1:-1:-1;;;11556:68:0;;;;;;;:::i;:::-;53069:14:::1;:41:::0;;-1:-1:-1;;;;;53069:41:0;;::::1;-1:-1:-1::0;;;;;;53069:41:0;;::::1;::::0;::::1;::::0;;:14:::1;53117:30:::0;;;:14:::1;:30;::::0;;;;;:37;;-1:-1:-1;;53117:37:0::1;::::0;;::::1;::::0;;52990:170::o;33568:194::-;-1:-1:-1;;;;;33654:26:0;;33634:7;33654:26;;;:17;:26;;;;;;;;33650:55;;;-1:-1:-1;;;;;;33689:16:0;;;;;:7;:16;;;;;;;33568:194::o;33650:55::-;-1:-1:-1;;;;;33739:16:0;;;;;;:7;:16;;;;;;33719:37;;:19;:37::i;11995:94::-;11390:7;11417:6;-1:-1:-1;;;;;11417:6:0;10300:10;11564:23;11556:68;;;;-1:-1:-1;;;11556:68:0;;;;;;;:::i;:::-;12060:21:::1;12078:1;12060:9;:21::i;:::-;11995:94::o:0;35280:392::-;11390:7;11417:6;-1:-1:-1;;;;;11417:6:0;10300:10;11564:23;11556:68;;;;-1:-1:-1;;;11556:68:0;;;;;;;:::i;:::-;35393:4:::1;35369:21;:28;35361:95;;;::::0;-1:-1:-1;;;35361:95:0;;13962:2:1;35361:95:0::1;::::0;::::1;13944:21:1::0;14001:2;13981:18;;;13974:30;14040:34;14020:18;;;14013:62;-1:-1:-1;;;14091:18:1;;;14084:52;14153:19;;35361:95:0::1;13760:418:1::0;35361:95:0::1;35495:1;35471:21;:25;35463:93;;;::::0;-1:-1:-1;;;35463:93:0;;14385:2:1;35463:93:0::1;::::0;::::1;14367:21:1::0;14424:2;14404:18;;;14397:30;14463:34;14443:18;;;14436:62;14534:25;14514:18;;;14507:53;14577:19;;35463:93:0::1;14183:419:1::0;35463:93:0::1;35578:44;35617:4;35578:34;35590:21:::0;29965:13:::1;29869:1;29965:2;:13;:::i;:::-;29959:19;::::0;:3:::1;:19;:::i;:::-;35578:11:::0;::::1;:34::i;:44::-;35563:12;:59:::0;;;35634:32:::1;::::0;1613:25:1;;;35634:32:0::1;::::0;1601:2:1;1586:18;35634:32:0::1;;;;;;;;35280:392:::0;:::o;32276:458::-;11390:7;11417:6;-1:-1:-1;;;;;11417:6:0;10300:10;11564:23;11556:68;;;;-1:-1:-1;;;11556:68:0;;;;;;;:::i;:::-;32326:35:::1;31159:42;32326:93;;32460:16;-1:-1:-1::0;;;;;32460:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32442:56:0::1;;32515:4;32529:16;-1:-1:-1::0;;;;;32529:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32442:117;::::0;-1:-1:-1;;;;;;32442:117:0::1;::::0;;;;;;-1:-1:-1;;;;;15093:15:1;;;32442:117:0::1;::::0;::::1;15075:34:1::0;15145:15;;15125:18;;;15118:43;15010:18;;32442:117:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32426:13;:133:::0;;-1:-1:-1;;;;;;32426:133:0;;::::1;-1:-1:-1::0;;;;;32426:133:0;;::::1;;::::0;;32568:15:::1;:34:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;11417:6:0;;;;32611:23;;:14:::1;:23:::0;;;;;;;:30;;-1:-1:-1;;32611:30:0;;::::1;-1:-1:-1::0;32611:30:0;;::::1;::::0;;;32671:4:::1;32648:29:::0;;;;;:36;;;::::1;::::0;::::1;::::0;;32706:14;;;;::::1;32691:30:::0;;;;:37;;;;::::1;::::0;;::::1;::::0;;32276:458::o;58399:167::-;11390:7;11417:6;-1:-1:-1;;;;;11417:6:0;10300:10;11564:23;11556:68;;;;-1:-1:-1;;;11556:68:0;;;;;;;:::i;:::-;58479:24:::1;58497:4;58479:9;:24::i;:::-;58469:6;:34;;:48;;;;;58516:1;58507:6;:10;58469:48;58461:73;;;::::0;-1:-1:-1;;;58461:73:0;;15374:2:1;58461:73:0::1;::::0;::::1;15356:21:1::0;15413:2;15393:18;;;15386:30;-1:-1:-1;;;15432:18:1;;;15425:42;15484:18;;58461:73:0::1;15172:336:1::0;58461:73:0::1;58541:19;58553:6;58541:11;:19::i;:::-;58399:167:::0;:::o;53400:106::-;11390:7;11417:6;-1:-1:-1;;;;;11417:6:0;10300:10;11564:23;11556:68;;;;-1:-1:-1;;;11556:68:0;;;;;;;:::i;:::-;53473:15:::1;:27:::0;;-1:-1:-1;;;;;;53473:27:0::1;-1:-1:-1::0;;;;;53473:27:0;;;::::1;::::0;;;::::1;::::0;;53400:106::o;52004:271::-;11390:7;11417:6;-1:-1:-1;;;;;11417:6:0;10300:10;11564:23;11556:68;;;;-1:-1:-1;;;11556:68:0;;;;;;;:::i;:::-;52120:16:::1;52108:8;:28;;52084:144;;;::::0;-1:-1:-1;;;52084:144:0;;15715:2:1;52084:144:0::1;::::0;::::1;15697:21:1::0;15754:2;15734:18;;;15727:30;15793:34;15773:18;;;15766:62;15864:34;15844:18;;;15837:62;15936:25;15915:19;;;15908:54;15979:19;;52084:144:0::1;15513:491:1::0;52084:144:0::1;52235:23;:34:::0;52004:271::o;51050:154::-;51137:13;;51111:4;;-1:-1:-1;;;;;51137:13:0;;;51128:22;;;;51124:39;;-1:-1:-1;51159:4:0;;51050:154;-1:-1:-1;51050:154:0:o;51124:39::-;-1:-1:-1;;;;;;51177:21:0;;;;;:14;:21;;;;;;;;;51050:154::o;53166:100::-;11390:7;11417:6;-1:-1:-1;;;;;11417:6:0;10300:10;11564:23;11556:68;;;;-1:-1:-1;;;11556:68:0;;;;;;;:::i;:::-;53233:18:::1;:27:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;53233:27:0;;::::1;::::0;;;::::1;::::0;;53166:100::o;34940:334::-;35050:4;35066:184;10300:10;35104:7;35120:123;35169:15;35120:123;;;;;;;;;;;;;;;;;10300:10;35120:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;35120:34:0;;;;;;;;;;;;:38;:123::i;53617:103::-;11390:7;11417:6;-1:-1:-1;;;;;11417:6:0;10300:10;11564:23;11556:68;;;;-1:-1:-1;;;11556:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;53685:21:0::1;53709:5;53685:21:::0;;;:14:::1;:21;::::0;;;;:29;;-1:-1:-1;;53685:29:0::1;::::0;;53617:103::o;53512:99::-;11390:7;11417:6;-1:-1:-1;;;;;11417:6:0;10300:10;11564:23;11556:68;;;;-1:-1:-1;;;11556:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;53577:21:0::1;;::::0;;;:14:::1;:21;::::0;;;;:28;;-1:-1:-1;;53577:28:0::1;53601:4;53577:28;::::0;;53512:99::o;33768:177::-;33863:4;33879:42;10300:10;33903:9;33914:6;33879:9;:42::i;57327:316::-;-1:-1:-1;;;;;57404:23:0;;57387:4;57404:23;;;:17;:23;;;;;;:28;;57400:238;;57492:23;;57477:10;;:39;;:14;:39::i;:::-;57459:15;:57;;57327:316;-1:-1:-1;;57327:316:0:o;57400:238::-;57606:23;;-1:-1:-1;;;;;57578:23:0;;;;;;:17;:23;;;;;;:52;;:27;:52::i;56789:532::-;56874:1;56848:23;10300:10;33568:194;:::i;56848:23::-;:27;56832:105;;;;-1:-1:-1;;;56832:105:0;;16211:2:1;56832:105:0;;;16193:21:1;16250:2;16230:18;;;16223:30;16289:34;16269:18;;;16262:62;-1:-1:-1;;;16340:18:1;;;16333:42;16392:19;;56832:105:0;16009:408:1;56832:105:0;56960:29;10300:10;57327:316;:::i;56960:29::-;56944:109;;;;-1:-1:-1;;;56944:109:0;;;;;;;:::i;:::-;10300:10;57060:31;;;;:17;:31;;;;;57094:15;57060:49;;:31;57140:33;;55633:484;:::i;57140:33::-;57118:55;;57201:11;57180:17;;:32;;;;;;;:::i;:::-;;;;-1:-1:-1;;57219:43:0;;10300:10;;57245:11;;57219:43;;;;57245:11;10300:10;57219:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57274:41;57289:12;10300:10;;10220:98;57289:12;57274:41;;;-1:-1:-1;;;;;6236:32:1;;;6218:51;;6300:2;6285:18;;6278:34;;;6191:18;57274:41:0;6044:274:1;53272:122:0;11390:7;11417:6;-1:-1:-1;;;;;11417:6:0;10300:10;11564:23;11556:68;;;;-1:-1:-1;;;11556:68:0;;;;;;;:::i;:::-;53353:19:::1;:35:::0;;-1:-1:-1;;;;;;53353:35:0::1;-1:-1:-1::0;;;;;53353:35:0;;;::::1;::::0;;;::::1;::::0;;53272:122::o;53726:104::-;11390:7;11417:6;-1:-1:-1;;;;;11417:6:0;10300:10;11564:23;11556:68;;;;-1:-1:-1;;;11556:68:0;;;;;;;:::i;:::-;53798:19:::1;:26:::0;53726:104::o;32740:276::-;11390:7;11417:6;-1:-1:-1;;;;;11417:6:0;10300:10;11564:23;11556:68;;;;-1:-1:-1;;;11556:68:0;;;;;;;:::i;:::-;32803:20:::1;::::0;32789:11:::1;:34:::0;32846:22:::1;::::0;32830:13:::1;:38:::0;32891:19:::1;::::0;32875:13:::1;:35:::0;32930:19:::1;::::0;32917:10:::1;:32:::0;32956:12:::1;:19:::0;;-1:-1:-1;;32956:19:0::1;::::0;::::1;::::0;;32995:15:::1;32982:10;:28:::0;32740:276::o;55633:484::-;55699:7;55715:19;55737:117;55790:35;55802:22;29155:42;55802:9;:22::i;55790:35::-;55737:40;55759:17;55769:6;55759:9;:17::i;:::-;55737;;;:21;:40::i;:117::-;55715:139;;55861:26;55890:32;55915:6;55890:24;:32::i;:::-;:127;;56006:11;55890:127;;;55932:64;55948:47;55989:5;55948:36;55964:19;;55948:11;:15;;:36;;;;:::i;55932:64::-;55861:156;;56059:17;;56038:18;:38;:73;;56093:18;56038:73;;;56079:11;56038:73;56024:87;55633:484;-1:-1:-1;;;;55633:484:0:o;58572:105::-;11390:7;11417:6;-1:-1:-1;;;;;11417:6:0;10300:10;11564:23;11556:68;;;;-1:-1:-1;;;11556:68:0;;;;;;;:::i;:::-;11390:7;11417:6;;58627:44:::1;::::0;-1:-1:-1;;;;;11417:6:0;;;;58649:21:::1;58627:44:::0;::::1;;;::::0;58649:21;;58627:44;11390:7;58627:44;58649:21;11417:6;58627:44;::::1;-1:-1:-1::0;;;;;58572:105:0:o;50759:285::-;50823:7;50839:14;50856:46;50891:10;;50856:30;50872:13;;50856:11;;:15;;:30;;;;:::i;:::-;:34;;:46::i;:::-;50839:63;;50923:25;50941:6;50923:17;:25::i;:::-;:115;;50956:23;50972:6;50956:15;:23::i;:::-;50955:24;:83;;51032:6;50923:115;;50955:83;51002:17;;50991:29;;:6;;:10;:29::i;:::-;50923:115;;;50951:1;50909:129;50759:285;-1:-1:-1;;;50759:285:0:o;35678:384::-;11390:7;11417:6;-1:-1:-1;;;;;11417:6:0;10300:10;11564:23;11556:68;;;;-1:-1:-1;;;11556:68:0;;;;;;;:::i;:::-;35796:4:::1;35770:23;:30;35762:86;;;::::0;-1:-1:-1;;;35762:86:0;;16834:2:1;35762:86:0::1;::::0;::::1;16816:21:1::0;16873:2;16853:18;;;16846:30;16912:34;16892:18;;;16885:62;-1:-1:-1;;;16963:18:1;;;16956:41;17014:19;;35762:86:0::1;16632:407:1::0;35762:86:0::1;35889:2;35863:23;:28;35855:83;;;::::0;-1:-1:-1;;;35855:83:0;;17246:2:1;35855:83:0::1;::::0;::::1;17228:21:1::0;17285:2;17265:18;;;17258:30;17324:34;17304:18;;;17297:62;-1:-1:-1;;;17375:18:1;;;17368:40;17425:19;;35855:83:0::1;17044:406:1::0;35855:83:0::1;35962:46;36003:4;35962:36;35974:23:::0;29965:13:::1;29869:1;29965:2;:13;:::i;35962:46::-;35945:14;:63:::0;;;36020:36:::1;::::0;1613:25:1;;;36020:36:0::1;::::0;1601:2:1;1586:18;36020:36:0::1;1467:177:1::0;51896:102:0;11390:7;11417:6;-1:-1:-1;;;;;11417:6:0;10300:10;11564:23;11556:68;;;;-1:-1:-1;;;11556:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;51961:23:0::1;51987:5;51961:23:::0;;;:14:::1;:23;::::0;;;;:31;;-1:-1:-1;;51961:31:0::1;::::0;;51896:102::o;12244:192::-;11390:7;11417:6;-1:-1:-1;;;;;11417:6:0;10300:10;11564:23;11556:68;;;;-1:-1:-1;;;11556:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12333:22:0;::::1;12325:73;;;::::0;-1:-1:-1;;;12325:73:0;;17657:2:1;12325:73:0::1;::::0;::::1;17639:21:1::0;17696:2;17676:18;;;17669:30;17735:34;17715:18;;;17708:62;-1:-1:-1;;;17786:18:1;;;17779:36;17832:19;;12325:73:0::1;17455:402:1::0;12325:73:0::1;12409:19;12419:8;12409:9;:19::i;6253:98::-:0;6311:7;6338:5;6342:1;6338;:5;:::i;6652:98::-;6710:7;6737:5;6741:1;6737;:5;:::i;38158:339::-;-1:-1:-1;;;;;38267:19:0;;38259:68;;;;-1:-1:-1;;;38259:68:0;;18286:2:1;38259:68:0;;;18268:21:1;18325:2;18305:18;;;18298:30;18364:34;18344:18;;;18337:62;-1:-1:-1;;;18415:18:1;;;18408:34;18459:19;;38259:68:0;18084:400:1;38259:68:0;-1:-1:-1;;;;;38342:21:0;;38334:68;;;;-1:-1:-1;;;38334:68:0;;18691:2:1;38334:68:0;;;18673:21:1;18730:2;18710:18;;;18703:30;18769:34;18749:18;;;18742:62;-1:-1:-1;;;18820:18:1;;;18813:32;18862:19;;38334:68:0;18489:398:1;38334:68:0;-1:-1:-1;;;;;38411:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;38459:32;;1613:25:1;;;38459:32:0;;1586:18:1;38459:32:0;;;;;;;38158:339;;;:::o;38503:3004::-;-1:-1:-1;;;;;38607:18:0;;38599:68;;;;-1:-1:-1;;;38599:68:0;;19094:2:1;38599:68:0;;;19076:21:1;19133:2;19113:18;;;19106:30;19172:34;19152:18;;;19145:62;-1:-1:-1;;;19223:18:1;;;19216:35;19268:19;;38599:68:0;18892:401:1;38599:68:0;-1:-1:-1;;;;;38682:16:0;;38674:64;;;;-1:-1:-1;;;38674:64:0;;19500:2:1;38674:64:0;;;19482:21:1;19539:2;19519:18;;;19512:30;19578:34;19558:18;;;19551:62;-1:-1:-1;;;19629:18:1;;;19622:33;19672:19;;38674:64:0;19298:399:1;38674:64:0;38762:1;38753:6;:10;38745:64;;;;-1:-1:-1;;;38745:64:0;;19904:2:1;38745:64:0;;;19886:21:1;19943:2;19923:18;;;19916:30;19982:34;19962:18;;;19955:62;-1:-1:-1;;;20033:18:1;;;20026:39;20082:19;;38745:64:0;19702:405:1;38745:64:0;-1:-1:-1;;;;;38825:13:0;;;;;;:9;:13;;;;;;;;38824:14;38816:40;;;;-1:-1:-1;;;38816:40:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38872:15:0;;;;;;:9;:15;;;;;;;;38871:16;38863:42;;;;-1:-1:-1;;;38863:42:0;;;;;;;:::i;:::-;10300:10;38921:23;;;;:9;:23;;;;;;;;38920:24;38912:50;;;;-1:-1:-1;;;38912:50:0;;;;;;;:::i;:::-;39040:13;;-1:-1:-1;;;;;39034:19:0;;;39040:13;;39034:19;;:41;;-1:-1:-1;;;;;;39057:18:0;;;;;;:14;:18;;;;;;;;39034:41;39033:87;;;;-1:-1:-1;39104:15:0;;-1:-1:-1;;;;;39088:32:0;;;39104:15;;39088:32;;39033:87;:120;;;;;39132:21;39150:2;39132:17;:21::i;:::-;39131:22;39033:120;:155;;;;;39165:23;39183:4;39165:17;:23::i;:::-;39164:24;39033:155;39021:257;;;39225:12;;39215:6;:22;;39207:63;;;;-1:-1:-1;;;39207:63:0;;20656:2:1;39207:63:0;;;20638:21:1;20695:2;20675:18;;;20668:30;20734;20714:18;;;20707:58;20782:18;;39207:63:0;20454:352:1;39207:63:0;39304:13;;-1:-1:-1;;;;;39298:19:0;;;39304:13;;39298:19;;;;:49;;-1:-1:-1;;;;;;39329:18:0;;;;;;:14;:18;;;;;;;;39328:19;39298:49;:82;;;;;39359:21;39377:2;39359:17;:21::i;:::-;39358:22;39298:82;:118;;;;;39393:23;39411:4;39393:17;:23::i;:::-;39392:24;39298:118;39286:424;;;39468:14;;39459:6;39443:13;39453:2;39443:9;:13::i;:::-;:22;;;;:::i;:::-;:39;39435:87;;;;-1:-1:-1;;;39435:87:0;;21013:2:1;39435:87:0;;;20995:21:1;21052:2;21032:18;;;21025:30;21091:34;21071:18;;;21064:62;-1:-1:-1;;;21142:18:1;;;21135:33;21185:19;;39435:87:0;20811:399:1;39435:87:0;39535:18;;;;;;;39531:172;;;39589:10;;:23;;39602:10;39589:23;:::i;:::-;39570:15;:42;39566:128;;39645:17;;39635:6;:27;;39627:55;;;;-1:-1:-1;;;39627:55:0;;21417:2:1;39627:55:0;;;21399:21:1;21456:2;21436:18;;;21429:30;-1:-1:-1;;;21475:18:1;;;21468:45;21530:18;;39627:55:0;21215:339:1;39627:55:0;-1:-1:-1;;;;;39828:21:0;;;;;;;:17;:21;;;;;;;39852:15;39828:39;;39946:13;39828:21;;39938;;;39946:13;;39938:21;;:45;;-1:-1:-1;;;;;;39963:20:0;;;;;;:14;:20;;;;;;;;39938:45;39937:88;;;;-1:-1:-1;40009:15:0;;-1:-1:-1;;;;;39995:30:0;;;40009:15;;39995:30;;39937:88;39925:586;;;40087:21;40105:2;40087:17;:21::i;:::-;40082:422;;40129:12;;;;;;;40121:49;;;;-1:-1:-1;;;40121:49:0;;21761:2:1;40121:49:0;;;21743:21:1;21800:2;21780:18;;;21773:30;21839:26;21819:18;;;21812:54;21883:18;;40121:49:0;21559:348:1;40121:49:0;40226:10;;40207:15;:29;40203:119;;-1:-1:-1;;;;;40251:13:0;;;;;;:9;:13;;;;;:20;;-1:-1:-1;;40251:20:0;40267:4;40251:20;;;;;;40284:17;:26;;;;;;;;;;;;;;-1:-1:-1;;;;;;40284:26:0;;;;;;40203:119;-1:-1:-1;;;;;40332:23:0;;;;;;:17;:23;;;;;40358:15;40332:41;;40082:422;;;-1:-1:-1;40490:4:0;40082:422;40545:17;;;;40544:18;:41;;;;-1:-1:-1;40573:12:0;;;;;;;40544:41;:95;;;;-1:-1:-1;40603:13:0;;-1:-1:-1;;;;;40597:19:0;;;40603:13;;40597:19;;:41;;-1:-1:-1;;;;;;40620:18:0;;;;;;:14;:18;;;;;;;;40597:41;40532:637;;;40656:29;40688:24;40706:4;40688:9;:24::i;:::-;40656:56;-1:-1:-1;40725:25:0;;40721:315;;40832:7;;40813:13;;40803:46;;40845:3;;40803:37;;40832:7;40803:24;;-1:-1:-1;;;;;40813:13:0;40803:9;:24::i;:46::-;40779:21;:70;40763:219;;;40927:7;;40908:13;;40898:72;;40954:3;;40898:37;;40927:7;40898:24;;-1:-1:-1;;;;;40908:13:0;40898:9;:24::i;:72::-;40874:96;;40763:219;40992:34;41004:21;40992:11;:34::i;:::-;-1:-1:-1;;;;;41044:23:0;;;;;;:17;:23;;;;;41070:15;41044:41;;41094:10;:17;;-1:-1:-1;;41094:17:0;;;;;41138:23;41062:4;41138:17;:23::i;:::-;41120:41;;40647:522;40532:637;41258:13;;41177:12;;-1:-1:-1;;;;;41250:21:0;;;41258:13;;41250:21;;:53;;-1:-1:-1;41290:13:0;;-1:-1:-1;;;;;41284:19:0;;;41290:13;;41284:19;41250:53;:84;;;-1:-1:-1;;;;;;41316:18:0;;;;;;:14;:18;;;;;;;;41250:84;:117;;;-1:-1:-1;;;;;;41347:20:0;;;;;;:14;:20;;;;;;;;41250:117;41249:139;;;;;41373:15;41372:16;41249:139;41237:190;;;-1:-1:-1;41415:4:0;41237:190;41435:41;41450:4;41456:2;41460:6;41468:7;41435:14;:41::i;:::-;-1:-1:-1;;41483:10:0;:18;;-1:-1:-1;;41483:18:0;;;-1:-1:-1;;;38503:3004:0:o;7794:240::-;7914:7;7975:12;7967:6;;;;7959:29;;;;-1:-1:-1;;;7959:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;8010:5:0;;;7794:240::o;48426:154::-;48468:7;48485:15;48502;48521:19;:17;:19::i;:::-;48484:56;;-1:-1:-1;48484:56:0;-1:-1:-1;48554:20:0;48484:56;;48554:11;:20::i;:::-;48547:27;;;;48426:154;:::o;5515:98::-;5573:7;5600:5;5604:1;5600;:5;:::i;5896:98::-;5954:7;5981:5;5985:1;5981;:5;:::i;46990:552::-;47088:7;47104;47120;47136;47152;47168;47194:23;47219:12;47233:18;47255:49;47275:6;47290:7;47255:11;:49::i;:::-;47193:111;;;;;;47312:15;47329:23;47354:12;47370:85;47390:7;47406:4;47419:10;47438;:8;:10::i;:::-;47370:11;:85::i;:::-;47311:144;;-1:-1:-1;47311:144:0;-1:-1:-1;47311:144:0;-1:-1:-1;47502:15:0;;-1:-1:-1;47519:4:0;;-1:-1:-1;47525:10:0;;-1:-1:-1;;;;46990:552:0;;;;;;;;:::o;12444:173::-;12500:16;12519:6;;-1:-1:-1;;;;;12536:17:0;;;-1:-1:-1;;;;;;12536:17:0;;;;;;12569:40;;12519:6;;;;;;;12569:40;;12500:16;12569:40;12489:128;12444:173;:::o;41513:920::-;32081:17;:24;;-1:-1:-1;;32081:24:0;32101:4;32081:24;;;41619:21:::1;41647:40;41665:21:::0;41647:17:::1;:40::i;:::-;41720:21;41694:23;41775:37;41720:21:::0;41795:16;41775:19:::1;:37::i;:::-;41748:64;;41819:26;41848:34;41879:1;41848:22;:34::i;:::-;41819:63;;41912:73;41960:18;41912:35;41933:13;;41912:16;:20;;:35;;;;:::i;:73::-;41891:17;;:94;;;;;;;:::i;:::-;;;;;;;;42031:26;42060:71;42106:18;42060:33;42081:11;;42060:16;:20;;:33;;;;:::i;:71::-;42031:100:::0;-1:-1:-1;42142:22:0;;42138:83:::1;;42175:38;42194:18;42175;:38::i;:::-;42246:25;42274:70;42319:18;42274:32;42295:10;;42274:16;:20;;:32;;;;:::i;:70::-;42246:98:::0;-1:-1:-1;42355:21:0;;42351:77:::1;;42387:33;42402:17;42387:14;:33::i;:::-;-1:-1:-1::0;;32120:17:0;:25;;-1:-1:-1;;32120:25:0;;;-1:-1:-1;;;;;41513:920:0:o;43681:674::-;43815:7;43810:29;;43824:15;:13;:15::i;:::-;-1:-1:-1;;;;;43852:25:0;;;;;;:17;:25;;;;;;;;:58;;;;-1:-1:-1;;;;;;43882:28:0;;;;;;:17;:28;;;;;;;;43881:29;43852:58;43848:463;;;43921:48;43943:6;43951:9;43962:6;43921:21;:48::i;:::-;43848:463;;;-1:-1:-1;;;;;43988:25:0;;;;;;:17;:25;;;;;;;;43987:26;:58;;;;-1:-1:-1;;;;;;44017:28:0;;;;;;:17;:28;;;;;;;;43987:58;43983:328;;;44056:46;44076:6;44084:9;44095:6;44056:19;:46::i;43983:328::-;-1:-1:-1;;;;;44120:25:0;;;;;;:17;:25;;;;;;;;:57;;;;-1:-1:-1;;;;;;44149:28:0;;;;;;:17;:28;;;;;;;;44120:57;44116:195;;;44188:48;44210:6;44218:9;44229:6;44188:21;:48::i;44116:195::-;44259:44;44277:6;44285:9;44296:6;44259:17;:44::i;:::-;44324:7;44319:30;;44333:16;50603:19;;50587:13;:35;50643:20;;50629:11;:34;50686:22;;50670:13;:38;50728:19;;50715:10;:32;50546:207;44333:16;43681:674;;;;:::o;48586:521::-;48680:7;;48637;;;;;29965:13;29869:1;29965:2;:13;:::i;:::-;29959:19;;:3;:19;:::i;:::-;48694:25;;48731:9;48726:276;48750:9;:16;48746:20;;48726:276;;;48810:7;48786;:21;48794:9;48804:1;48794:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;48794:12:0;48786:21;;;;;;;;;;;;;:31;;:66;;;48845:7;48821;:21;48829:9;48839:1;48829:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;48829:12:0;48821:21;;;;;;;;;;;;;:31;48786:66;48782:106;;;48871:7;;29965:13;29869:1;29965:2;:13;:::i;:::-;29959:19;;:3;:19;:::i;:::-;48863:25;;;;;;;48586:521;;:::o;48782:106::-;48907:34;48919:7;:21;48927:9;48937:1;48927:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;48927:12:0;48919:21;;;;;;;;;;;;;48907:7;;:11;:34::i;:::-;48897:44;;48960:34;48972:7;:21;48980:9;48990:1;48980:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;48980:12:0;48972:21;;;;;;;;;;;;;48960:7;;:11;:34::i;:::-;48950:44;-1:-1:-1;48768:3:0;;;;:::i;:::-;;;;48726:276;;;-1:-1:-1;49022:20:0;29965:13;29869:1;29965:2;:13;:::i;:::-;29959:19;;:3;:19;:::i;:::-;49022:7;;;:11;:20::i;:::-;49012:7;:30;49008:61;;;49052:7;;29965:13;29869:1;29965:2;:13;:::i;:::-;29959:19;;:3;:19;:::i;:::-;49044:25;;;;;;48586:521;;:::o;49008:61::-;49084:7;;49093;;-1:-1:-1;48586:521:0;-1:-1:-1;48586:521:0:o;47548:388::-;47647:7;47663;47679;47704:12;47719:29;47740:7;47719:20;:29::i;:::-;47704:44;;47755:18;47776:39;47799:6;47807:7;47776:22;:39::i;:::-;47755:60;-1:-1:-1;47822:23:0;47848:33;47755:60;47848:17;:7;47860:4;47848:11;:17::i;:33::-;47822:59;-1:-1:-1;47913:4:0;;-1:-1:-1;47919:10:0;-1:-1:-1;;47548:388:0;;;;;:::o;47942:478::-;48105:7;;;;48180:24;:7;48192:11;48180;:24::i;:::-;48162:42;-1:-1:-1;48211:12:0;48226:21;:4;48235:11;48226:8;:21::i;:::-;48211:36;-1:-1:-1;48254:18:0;48275:27;:10;48290:11;48275:14;:27::i;:::-;48254:48;-1:-1:-1;48309:23:0;48335:33;48254:48;48335:17;:7;48347:4;48335:11;:17::i;:33::-;48383:7;;;;-1:-1:-1;48409:4:0;;-1:-1:-1;47942:478:0;;-1:-1:-1;;;;;;;47942:478:0:o;43084:591::-;43227:16;;;43241:1;43227:16;;;;;;;;43203:21;;43227:16;;;;;;;;;;-1:-1:-1;43227:16:0;43203:40;;43268:4;43250;43255:1;43250:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;43250:23:0;;;:7;;;;;;;;;;:23;;;;43290:15;;:22;;;-1:-1:-1;;;43290:22:0;;;;:15;;;;;:20;;:22;;;;;43250:7;;43290:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43280:4;43285:1;43280:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;43280:32:0;;;:7;;;;;;;;;:32;43353:15;;43321:62;;43338:4;;43353:15;43371:11;43321:8;:62::i;:::-;43414:15;;:206;;-1:-1:-1;;;43414:206:0;;-1:-1:-1;;;;;43414:15:0;;;;:66;;:206;;43489:11;;43414:15;;43547:4;;43568;;43598:15;;43414:206;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43634:35;43651:11;43664:4;43634:35;;;;;;;:::i;49615:291::-;49743:10;;49700:7;;;;49743:10;;;;;:38;;;;;49758:23;49774:6;49758:15;:23::i;:::-;49757:24;49743:38;:76;;49818:1;49743:76;;;49791:17;;49743:76;49719:100;;49833:67;49886:13;49834:46;49869:10;;49834:30;49850:13;;49834:11;;:15;;:30;;;;:::i;42439:105::-;42498:14;;:40;;-1:-1:-1;;;;;42498:14:0;;;;42526:6;;42498:40;;;;42526:6;42498:14;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42550:528;42685:16;;;42699:1;42685:16;;;;;;;;42661:21;;42685:16;;;;;;;;-1:-1:-1;;42718:15:0;;:22;;;-1:-1:-1;;;42718:22:0;;;;42661:40;;-1:-1:-1;;;;;;42718:15:0;;;;:20;;-1:-1:-1;42718:22:0;;;;;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42708:4;42713:1;42708:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;42708:32:0;;;:7;;;;;;;;;:32;42757:19;;42747:7;;42757:19;;;42747:4;;42757:19;;42747:7;;;;;;:::i;:::-;-1:-1:-1;;;;;42747:29:0;;;:7;;;;;;;;;:29;42807:15;;42965;;42807:204;;-1:-1:-1;;;42807:204:0;;:15;;;;:66;;42889:6;;42807:204;;:15;;42952:4;;42965:15;;;;42989;;42807:204;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;43042:15:0;;43025:47;;;;-1:-1:-1;43025:47:0;;-1:-1:-1;;;;;;43042:15:0;;;;-1:-1:-1;43059:6:0;;43067:4;;43025:47;:::i;50106:434::-;50158:13;;:18;:45;;;;-1:-1:-1;50187:11:0;;:16;50158:45;:74;;;;-1:-1:-1;50214:13:0;;:18;50158:74;:100;;;;-1:-1:-1;50243:10:0;;:15;50158:100;50146:127;;;50106:434::o;50146:127::-;50303:13;;;50281:19;:35;50346:11;;;50323:20;:34;50389:13;;;50364:22;:38;50431:10;;;50409:19;:32;-1:-1:-1;50450:17:0;;;;50474:15;;;;50496:17;;;50520:14;50106:434::o;45548:610::-;45675:15;45699:23;45731:12;45752:23;45784:12;45805:18;45833:27;45844:6;45852:7;45833:10;:27::i;:::-;-1:-1:-1;;;;;45885:15:0;;;;;;:7;:15;;;;;;45666:194;;-1:-1:-1;45666:194:0;;-1:-1:-1;45666:194:0;;-1:-1:-1;45666:194:0;-1:-1:-1;45666:194:0;-1:-1:-1;45666:194:0;-1:-1:-1;45885:28:0;;45905:7;45885:19;:28::i;:::-;-1:-1:-1;;;;;45867:15:0;;;;;;:7;:15;;;;;;;;:46;;;;45938:7;:15;;;;:28;;45958:7;45938:19;:28::i;:::-;-1:-1:-1;;;;;45920:15:0;;;;;;;:7;:15;;;;;;:46;;;;45994:18;;;;;;;:39;;46017:15;45994:22;:39::i;:::-;-1:-1:-1;;;;;45973:18:0;;;;;;:7;:18;;;;;:60;46040:26;46055:10;46040:14;:26::i;:::-;46073:23;46085:4;46091;46073:11;:23::i;:::-;46125:9;-1:-1:-1;;;;;46108:44:0;46117:6;-1:-1:-1;;;;;46108:44:0;;46136:15;46108:44;;;;1613:25:1;;1601:2;1586:18;;1467:177;46108:44:0;;;;;;;;45659:499;;;;;;45548:610;;;:::o;44920:622::-;45045:15;45069:23;45101:12;45122:23;45154:12;45175:18;45203:27;45214:6;45222:7;45203:10;:27::i;:::-;-1:-1:-1;;;;;45255:15:0;;;;;;:7;:15;;;;;;45036:194;;-1:-1:-1;45036:194:0;;-1:-1:-1;45036:194:0;;-1:-1:-1;45036:194:0;-1:-1:-1;45036:194:0;-1:-1:-1;45036:194:0;-1:-1:-1;45255:28:0;;45036:194;45255:19;:28::i;:::-;-1:-1:-1;;;;;45237:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;45311:18;;;;;:7;:18;;;;;:39;;45334:15;45311:22;:39::i;:::-;-1:-1:-1;;;;;45290:18:0;;;;;;:7;:18;;;;;;;;:60;;;;45378:7;:18;;;;:39;;45401:15;45378:22;:39::i;46164:677::-;46291:15;46315:23;46347:12;46368:23;46400:12;46421:18;46449:27;46460:6;46468:7;46449:10;:27::i;:::-;-1:-1:-1;;;;;46501:15:0;;;;;;:7;:15;;;;;;46282:194;;-1:-1:-1;46282:194:0;;-1:-1:-1;46282:194:0;;-1:-1:-1;46282:194:0;-1:-1:-1;46282:194:0;-1:-1:-1;46282:194:0;-1:-1:-1;46501:28:0;;46521:7;46501:19;:28::i;:::-;-1:-1:-1;;;;;46483:15:0;;;;;;:7;:15;;;;;;;;:46;;;;46554:7;:15;;;;:28;;46574:7;46554:19;:28::i;44361:553::-;44484:15;44508:23;44540:12;44561:23;44593:12;44614:18;44642:27;44653:6;44661:7;44642:10;:27::i;:::-;-1:-1:-1;;;;;44694:15:0;;;;;;:7;:15;;;;;;44475:194;;-1:-1:-1;44475:194:0;;-1:-1:-1;44475:194:0;;-1:-1:-1;44475:194:0;-1:-1:-1;44475:194:0;-1:-1:-1;44475:194:0;-1:-1:-1;44694:28:0;;44475:194;44694:19;:28::i;49456:153::-;49540:7;49566:37;49597:5;49566:26;49578:13;;49566:7;:11;;:26;;;;:::i;49912:188::-;50014:7;50040:54;50088:5;50040:43;50052:30;50075:6;50052:22;:30::i;49113:337::-;49172:19;49194:10;:8;:10::i;:::-;49172:32;-1:-1:-1;49211:18:0;49232:27;:10;49172:32;49232:14;:27::i;:::-;49307:4;49291:22;;;;:7;:22;;;;;;49211:48;;-1:-1:-1;49291:38:0;;49211:48;49291:26;:38::i;:::-;49282:4;49266:22;;;;:7;:22;;;;;;;;:63;;;;49340:17;:32;;;;;;49336:108;;;49422:4;49406:22;;;;:7;:22;;;;;;:38;;49433:10;49406:26;:38::i;:::-;49397:4;49381:22;;;;:7;:22;;;;;:63;49336:108;49165:285;;49113:337;:::o;46847:137::-;46921:7;;:17;;46933:4;46921:11;:17::i;:::-;46911:7;:27;46958:10;;:20;;46973:4;46958:14;:20::i;:::-;46945:10;:33;-1:-1:-1;;46847:137:0:o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;402:548::-;514:4;543:2;572;561:9;554:21;604:6;598:13;647:6;642:2;631:9;627:18;620:34;672:1;682:140;696:6;693:1;690:13;682:140;;;791:14;;;787:23;;781:30;757:17;;;776:2;753:26;746:66;711:10;;682:140;;;686:3;871:1;866:2;857:6;846:9;842:22;838:31;831:42;941:2;934;930:7;925:2;917:6;913:15;909:29;898:9;894:45;890:54;882:62;;;;402:548;;;;:::o;955:315::-;1023:6;1031;1084:2;1072:9;1063:7;1059:23;1055:32;1052:52;;;1100:1;1097;1090:12;1052:52;1139:9;1126:23;1158:31;1183:5;1158:31;:::i;:::-;1208:5;1260:2;1245:18;;;;1232:32;;-1:-1:-1;;;955:315:1:o;2092:456::-;2169:6;2177;2185;2238:2;2226:9;2217:7;2213:23;2209:32;2206:52;;;2254:1;2251;2244:12;2206:52;2293:9;2280:23;2312:31;2337:5;2312:31;:::i;:::-;2362:5;-1:-1:-1;2419:2:1;2404:18;;2391:32;2432:33;2391:32;2432:33;:::i;:::-;2092:456;;2484:7;;-1:-1:-1;;;2538:2:1;2523:18;;;;2510:32;;2092:456::o;2553:180::-;2612:6;2665:2;2653:9;2644:7;2640:23;2636:32;2633:52;;;2681:1;2678;2671:12;2633:52;-1:-1:-1;2704:23:1;;2553:180;-1:-1:-1;2553:180:1:o;2927:388::-;2995:6;3003;3056:2;3044:9;3035:7;3031:23;3027:32;3024:52;;;3072:1;3069;3062:12;3024:52;3111:9;3098:23;3130:31;3155:5;3130:31;:::i;:::-;3180:5;-1:-1:-1;3237:2:1;3222:18;;3209:32;3250:33;3209:32;3250:33;:::i;:::-;3302:7;3292:17;;;2927:388;;;;;:::o;3320:118::-;3406:5;3399:13;3392:21;3385:5;3382:32;3372:60;;3428:1;3425;3418:12;3443:309;3508:6;3516;3569:2;3557:9;3548:7;3544:23;3540:32;3537:52;;;3585:1;3582;3575:12;3537:52;3621:9;3608:23;3598:33;;3681:2;3670:9;3666:18;3653:32;3694:28;3716:5;3694:28;:::i;3981:385::-;4067:6;4075;4083;4091;4144:3;4132:9;4123:7;4119:23;4115:33;4112:53;;;4161:1;4158;4151:12;4112:53;-1:-1:-1;;4184:23:1;;;4254:2;4239:18;;4226:32;;-1:-1:-1;4305:2:1;4290:18;;4277:32;;4356:2;4341:18;4328:32;;-1:-1:-1;3981:385:1;-1:-1:-1;3981:385:1:o;4371:241::-;4427:6;4480:2;4468:9;4459:7;4455:23;4451:32;4448:52;;;4496:1;4493;4486:12;4448:52;4535:9;4522:23;4554:28;4576:5;4554:28;:::i;5026:184::-;5096:6;5149:2;5137:9;5128:7;5124:23;5120:32;5117:52;;;5165:1;5162;5155:12;5117:52;-1:-1:-1;5188:16:1;;5026:184;-1:-1:-1;5026:184:1:o;5629:410::-;5831:2;5813:21;;;5870:2;5850:18;;;5843:30;5909:34;5904:2;5889:18;;5882:62;-1:-1:-1;;;5975:2:1;5960:18;;5953:44;6029:3;6014:19;;5629:410::o;6323:245::-;6390:6;6443:2;6431:9;6422:7;6418:23;6414:32;6411:52;;;6459:1;6456;6449:12;6411:52;6491:9;6485:16;6510:28;6532:5;6510:28;:::i;6953:356::-;7155:2;7137:21;;;7174:18;;;7167:30;7233:34;7228:2;7213:18;;7206:62;7300:2;7285:18;;6953:356::o;7669:127::-;7730:10;7725:3;7721:20;7718:1;7711:31;7761:4;7758:1;7751:15;7785:4;7782:1;7775:15;7801:127;7862:10;7857:3;7853:20;7850:1;7843:31;7893:4;7890:1;7883:15;7917:4;7914:1;7907:15;7933:128;8000:9;;;8021:11;;;8018:37;;;8035:18;;:::i;8066:127::-;8127:10;8122:3;8118:20;8115:1;8108:31;8158:4;8155:1;8148:15;8182:4;8179:1;8172:15;8198:135;8237:3;8258:17;;;8255:43;;8278:18;;:::i;:::-;-1:-1:-1;8325:1:1;8314:13;;8198:135::o;8338:401::-;8540:2;8522:21;;;8579:2;8559:18;;;8552:30;8618:34;8613:2;8598:18;;8591:62;-1:-1:-1;;;8684:2:1;8669:18;;8662:35;8729:3;8714:19;;8338:401::o;8744:422::-;8833:1;8876:5;8833:1;8890:270;8911:7;8901:8;8898:21;8890:270;;;8970:4;8966:1;8962:6;8958:17;8952:4;8949:27;8946:53;;;8979:18;;:::i;:::-;9029:7;9019:8;9015:22;9012:55;;;9049:16;;;;9012:55;9128:22;;;;9088:15;;;;8890:270;;;8894:3;8744:422;;;;;:::o;9171:806::-;9220:5;9250:8;9240:80;;-1:-1:-1;9291:1:1;9305:5;;9240:80;9339:4;9329:76;;-1:-1:-1;9376:1:1;9390:5;;9329:76;9421:4;9439:1;9434:59;;;;9507:1;9502:130;;;;9414:218;;9434:59;9464:1;9455:10;;9478:5;;;9502:130;9539:3;9529:8;9526:17;9523:43;;;9546:18;;:::i;:::-;-1:-1:-1;;9602:1:1;9588:16;;9617:5;;9414:218;;9716:2;9706:8;9703:16;9697:3;9691:4;9688:13;9684:36;9678:2;9668:8;9665:16;9660:2;9654:4;9651:12;9647:35;9644:77;9641:159;;;-1:-1:-1;9753:19:1;;;9785:5;;9641:159;9832:34;9857:8;9851:4;9832:34;:::i;:::-;9902:6;9898:1;9894:6;9890:19;9881:7;9878:32;9875:58;;;9913:18;;:::i;:::-;9951:20;;9171:806;-1:-1:-1;;;9171:806:1:o;9982:140::-;10040:5;10069:47;10110:4;10100:8;10096:19;10090:4;10069:47;:::i;10127:168::-;10200:9;;;10231;;10248:15;;;10242:22;;10228:37;10218:71;;10269:18;;:::i;13272:125::-;13337:9;;;13358:10;;;13355:36;;;13371:18;;:::i;14607:251::-;14677:6;14730:2;14718:9;14709:7;14705:23;14701:32;14698:52;;;14746:1;14743;14736:12;14698:52;14778:9;14772:16;14797:31;14822:5;14797:31;:::i;17862:217::-;17902:1;17928;17918:132;;17972:10;17967:3;17963:20;17960:1;17953:31;18007:4;18004:1;17997:15;18035:4;18032:1;18025:15;17918:132;-1:-1:-1;18064:9:1;;17862:217::o;20112:337::-;20314:2;20296:21;;;20353:2;20333:18;;;20326:30;-1:-1:-1;;;20387:2:1;20372:18;;20365:43;20440:2;20425:18;;20112:337::o;22044:461::-;22097:3;22135:5;22129:12;22162:6;22157:3;22150:19;22188:4;22217:2;22212:3;22208:12;22201:19;;22254:2;22247:5;22243:14;22275:1;22285:195;22299:6;22296:1;22293:13;22285:195;;;22364:13;;-1:-1:-1;;;;;22360:39:1;22348:52;;22420:12;;;;22455:15;;;;22396:1;22314:9;22285:195;;;-1:-1:-1;22496:3:1;;22044:461;-1:-1:-1;;;;;22044:461:1:o;22510:582::-;22809:6;22798:9;22791:25;22852:6;22847:2;22836:9;22832:18;22825:34;22895:3;22890:2;22879:9;22875:18;22868:31;22772:4;22916:57;22968:3;22957:9;22953:19;22945:6;22916:57;:::i;:::-;-1:-1:-1;;;;;23009:32:1;;;;23004:2;22989:18;;22982:60;-1:-1:-1;23073:3:1;23058:19;23051:35;22908:65;22510:582;-1:-1:-1;;;22510:582:1:o;23097:332::-;23304:6;23293:9;23286:25;23347:2;23342;23331:9;23327:18;23320:30;23267:4;23367:56;23419:2;23408:9;23404:18;23396:6;23367:56;:::i;23434:510::-;23705:6;23694:9;23687:25;23748:3;23743:2;23732:9;23728:18;23721:31;23668:4;23769:57;23821:3;23810:9;23806:19;23798:6;23769:57;:::i;:::-;-1:-1:-1;;;;;23862:32:1;;;;23857:2;23842:18;;23835:60;-1:-1:-1;23926:2:1;23911:18;23904:34;23761:65;23434:510;-1:-1:-1;;23434:510:1:o;23949:429::-;24213:1;24209;24204:3;24200:11;24196:19;24188:6;24184:32;24173:9;24166:51;24253:6;24248:2;24237:9;24233:18;24226:34;24296:2;24291;24280:9;24276:18;24269:30;24147:4;24316:56;24368:2;24357:9;24353:18;24345:6;24316:56;:::i;:::-;24308:64;23949:429;-1:-1:-1;;;;;23949:429:1:o
Swarm Source
ipfs://8de19d9b40d25e9ce3afb8f081aefc3e43b9ecc9e17aba5777702184f0da323d
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.