Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
15005521 | 969 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
DividendTracker
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-06-22 */ pragma solidity ^0.8.12; // SPDX-License-Identifier: Unlicensed interface IERC20 { 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); } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != - 1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? - a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } abstract contract Context { //function _msgSender() internal view virtual returns (address payable) { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @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) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @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"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (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"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); 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 // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @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. */ contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } interface IUniswapV2Factory { function createPair(address tokenA, address tokenB) external returns (address pair); } interface IUniswapV2Router02 { function swapExactTokensForETHSupportingFeeOnTransferTokens( 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 WETH() external pure returns (address); function factory() external pure returns (address); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); 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 removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); } contract GoldenOnes is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } IUniswapV2Router02 public uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); address public uniswapV2Pair = address(0); mapping(address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private botWallets; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private isExchangeWallet; mapping (address => bool) private _isExcludedFromRewards; string private _name = "Teh Golden Ones"; string private _symbol = "Gold 2.0"; uint8 private _decimals = 9; uint256 private _tTotal = 100000000000000000 * 10 ** _decimals; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; bool isTaxFreeTransfer = false; uint256 public ethPriceToSwap = 200000000000000000; //.2 ETH uint256 public _maxWalletAmount = 3000000000000000 * 10** _decimals; address public marketingAddress = 0xe2cf8C9FEB5E6C9AD3E62AE4B9F4800f865D3779; address public deadWallet = 0x000000000000000000000000000000000000dEaD; address public dividendContractAddress = address(0); uint256 public gasForProcessing = 50000; //address public USDCAddress = 0x4DBCdF9B62e891a7cec5A2568C3F4FAF9E8Abe2b; //Rinkeby address public USDCAddress = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48; //Mainnet event ProcessedDividendTracker(uint256 iterations, uint256 claims, uint256 lastProcessedIndex, bool indexed automatic,uint256 gas, address indexed processor); event SendDividends(uint256 EthAmount); struct Distribution { uint256 marketing; uint256 dividend; } struct TaxFees { uint256 buyFee; uint256 sellFee; } bool private doTakeFees; bool private isSellTxn; TaxFees public taxFees; Distribution public distribution; DividendTracker private dividendTracker; IERC20 public USDCToken = IERC20(USDCAddress); constructor () { _balances[_msgSender()] = _tTotal; _isExcludedFromFee[owner()] = true; _isExcludedFromFee[_msgSender()] = true; _isExcludedFromFee[marketingAddress] = true; _isExcludedFromRewards[_msgSender()] = true; _isExcludedFromRewards[owner()] = true; _isExcludedFromRewards[deadWallet] = true; _isExcludedFromRewards[address(this)] = true; taxFees = TaxFees(6,8); distribution = Distribution(50,50); emit Transfer(address(0), _msgSender(), _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public 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) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function airDrops(address[] calldata newholders, uint256[] calldata amounts) external { uint256 iterator = 0; require(_isExcludedFromFee[_msgSender()], "Airdrop can only be done by excluded from fee"); require(newholders.length == amounts.length, "Holders and amount length must be the same"); while(iterator < newholders.length){ _tokenTransfer(_msgSender(), newholders[iterator], amounts[iterator] * 10**9, false, false, false); iterator += 1; } } function setMaxWalletAmount(uint256 maxWalletAmount) external onlyOwner() { _maxWalletAmount = maxWalletAmount * 10**9; } function excludeIncludeFromFee(address[] calldata addresses, bool isExcludeFromFee) public onlyOwner { addRemoveFee(addresses, isExcludeFromFee); } function addRemoveExchange(address[] calldata addresses, bool isAddExchange) public onlyOwner { _addRemoveExchange(addresses, isAddExchange); } function excludeIncludeFromRewards(address[] calldata addresses, bool isExcluded) public onlyOwner { addRemoveRewards(addresses, isExcluded); } function isExcludedFromRewards(address addr) public view returns(bool) { return _isExcludedFromRewards[addr]; } function addRemoveRewards(address[] calldata addresses, bool flag) private { for (uint256 i = 0; i < addresses.length; i++) { address addr = addresses[i]; _isExcludedFromRewards[addr] = flag; } } function setEthPriceToSwap(uint256 ethPriceToSwap_) external onlyOwner { ethPriceToSwap = ethPriceToSwap_; } function createV2Pair() external onlyOwner { require(uniswapV2Pair == address(0),"UniswapV2Pair has already been set"); uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH()); _isExcludedFromRewards[uniswapV2Pair] = true; } function _addRemoveExchange(address[] calldata addresses, bool flag) private { for (uint256 i = 0; i < addresses.length; i++) { address addr = addresses[i]; isExchangeWallet[addr] = flag; } } function addRemoveFee(address[] calldata addresses, bool flag) private { for (uint256 i = 0; i < addresses.length; i++) { address addr = addresses[i]; _isExcludedFromFee[addr] = flag; } } function setTaxFees(uint256 buyFee, uint256 sellFee) external onlyOwner { taxFees.buyFee = buyFee; taxFees.sellFee = sellFee; } function setDistribution(uint256 dividend, uint256 marketing) external onlyOwner { distribution.dividend = dividend; distribution.marketing = marketing; } function setMarketingAddress(address marketingAddr) external onlyOwner { marketingAddress = marketingAddr; } function isAddressBlocked(address addr) public view returns (bool) { return botWallets[addr]; } function blockAddresses(address[] memory addresses) external onlyOwner() { blockUnblockAddress(addresses, true); } function unblockAddresses(address[] memory addresses) external onlyOwner() { blockUnblockAddress(addresses, false); } function blockUnblockAddress(address[] memory addresses, bool doBlock) private { for (uint256 i = 0; i < addresses.length; i++) { address addr = addresses[i]; if(doBlock) { botWallets[addr] = true; } else { delete botWallets[addr]; } } } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } receive() external payable {} function getTokenEthValue(uint tokenAmount) public view returns (uint) { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); return uniswapV2Router.getAmountsOut(tokenAmount, path)[1]; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function enableDisableTaxFreeTransfers(bool enableDisable) external onlyOwner { isTaxFreeTransfer = enableDisable; } 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(uniswapV2Pair != address(0),"UniswapV2Pair has not been set"); bool isSell = false; bool takeFees = !_isExcludedFromFee[from] && !_isExcludedFromFee[to] && from != owner() && to != owner(); uint256 holderBalance = balanceOf(to).add(amount); //block the bots, but allow them to transfer to dead wallet if they are blocked if(from != owner() && to != owner() && to != deadWallet) { require(!botWallets[from] && !botWallets[to], "bots are not allowed to sell or transfer tokens"); } if(from == uniswapV2Pair || isExchangeWallet[from]) { require(holderBalance <= _maxWalletAmount, "Wallet cannot exceed max Wallet limit"); } if(from != uniswapV2Pair && to == uniswapV2Pair || (!isExchangeWallet[from] && isExchangeWallet[to])) { //if sell //only tax if tokens are going back to Uniswap isSell = true; sellTaxTokens(); } if(from != uniswapV2Pair && to != uniswapV2Pair && !isExchangeWallet[from] && !isExchangeWallet[to]) { if(isTaxFreeTransfer) { takeFees = false; } require(holderBalance <= _maxWalletAmount, "Wallet cannot exceed max Wallet limit"); } _tokenTransfer(from, to, amount, takeFees, isSell, true); } function sellTaxTokens() private { uint256 contractTokenBalance = balanceOf(address(this)); if(contractTokenBalance > 0) { uint ethPrice = getTokenEthValue(contractTokenBalance); if (ethPrice >= ethPriceToSwap && !inSwapAndLiquify && swapAndLiquifyEnabled) { //send eth to wallets investment and dev distributeShares(contractTokenBalance); } } } function updateGasForProcessing(uint256 newValue) public onlyOwner { require(newValue != gasForProcessing, "Cannot update gasForProcessing to same value"); gasForProcessing = newValue; } function distributeShares(uint256 balanceToShareTokens) private lockTheSwap { swapTokensForUSDC(balanceToShareTokens); uint256 distributionEth = IERC20(USDCAddress).balanceOf(address(this)); uint256 marketingShare = distributionEth.mul(distribution.marketing).div(100); uint256 dividendShare = distributionEth.mul(distribution.dividend).div(100); USDCToken.transfer(marketingAddress,marketingShare); USDCToken.transfer(dividendContractAddress, dividendShare); } function setDividendTracker(address dividendContractAddress_) external onlyOwner { dividendTracker = DividendTracker(payable(dividendContractAddress_)); dividendContractAddress = dividendContractAddress_; } function swapTokensForUSDC(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, path, address(this), block.timestamp ); swapEthForUSDC(); } function swapEthForUSDC() private { uint256 ethBalance = address(this).balance; address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = USDCAddress; // make the swap uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethBalance}( 0, // accept any amount of Ethereum path, address(this), block.timestamp ); } function swapTokens() external { // require(_msgSender() != address(this),"Swapping cannot be triggered by deployer"); uint256 contractTokenBalance = balanceOf(address(this)); distributeShares(contractTokenBalance); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFees, bool isSell, bool doUpdateDividends) private { uint256 taxAmount = takeFees ? amount.mul(taxFees.buyFee).div(100) : 0; if(takeFees && isSell) { taxAmount = amount.mul(taxFees.sellFee).div(100); } uint256 transferAmount = amount.sub(taxAmount); _balances[sender] = _balances[sender].sub(amount); _balances[recipient] = _balances[recipient].add(transferAmount); _balances[address(this)] = _balances[address(this)].add(taxAmount); emit Transfer(sender, recipient, amount); if(doUpdateDividends) { try dividendTracker.setTokenBalance(sender) {} catch{} try dividendTracker.setTokenBalance(recipient) {} catch{} try dividendTracker.process(gasForProcessing) returns (uint256 iterations, uint256 claims, uint256 lastProcessedIndex) { emit ProcessedDividendTracker(iterations, claims, lastProcessedIndex, true, gasForProcessing, tx.origin); }catch {} } } } contract IterableMapping { // Iterable mapping from address to uint; struct Map { address[] keys; mapping(address => uint) values; mapping(address => uint) indexOf; mapping(address => bool) inserted; } Map private map; function get(address key) public view returns (uint) { return map.values[key]; } function keyExists(address key) public view returns(bool) { return (getIndexOfKey(key) != -1); } function getIndexOfKey(address key) public view returns (int) { if (!map.inserted[key]) { return - 1; } return int(map.indexOf[key]); } function getKeyAtIndex(uint index) public view returns (address) { return map.keys[index]; } function size() public view returns (uint) { return map.keys.length; } function set(address key, uint val) public { if (map.inserted[key]) { map.values[key] = val; } else { map.inserted[key] = true; map.values[key] = val; map.indexOf[key] = map.keys.length; map.keys.push(key); } } function remove(address key) public { if (!map.inserted[key]) { return; } delete map.inserted[key]; delete map.values[key]; uint index = map.indexOf[key]; uint lastIndex = map.keys.length - 1; address lastKey = map.keys[lastIndex]; map.indexOf[lastKey] = index; delete map.indexOf[key]; map.keys[index] = lastKey; map.keys.pop(); } } contract DividendTracker is IERC20, Context, Ownable { using SafeMath for uint256; using SafeMathUint for uint256; using SafeMathInt for int256; uint256 constant internal magnitude = 2 ** 128; uint256 internal magnifiedDividendPerShare; mapping(address => int256) internal magnifiedDividendCorrections; mapping(address => uint256) internal withdrawnDividends; mapping(address => uint256) internal claimedDividends; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name = "Golden Tracker"; string private _symbol = "GOLDENT"; uint8 private _decimals = 9; uint256 public totalDividendsDistributed; IterableMapping private tokenHoldersMap = new IterableMapping(); uint256 public minimumTokenBalanceForDividends = 50000000000000 * 10 ** _decimals; GoldenOnes private goldenOnesToken; event updateBalance(address addr, uint256 amount); event DividendsDistributed(address indexed from,uint256 weiAmount); event DividendWithdrawn(address indexed to,uint256 weiAmount); uint256 public lastProcessedIndex; mapping(address => uint256) public lastClaimTimes; uint256 public claimWait = 3600; event ExcludeFromDividends(address indexed account); event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue); event Claim(address indexed account, uint256 amount, bool indexed automatic); IUniswapV2Router02 public uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //address public USDCAddress = 0x4DBCdF9B62e891a7cec5A2568C3F4FAF9E8Abe2b; //Rinkeby address public USDCAddress = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48; //Mainnet IERC20 public usdcToken = IERC20(USDCAddress); constructor() { emit Transfer(address(0), _msgSender(), 0); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address, uint256) public pure returns (bool) { require(false, "No transfers allowed in dividend tracker"); return true; } function transferFrom(address, address, uint256) public pure override returns (bool) { require(false, "No transfers allowed in dividend tracker"); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } 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 setTokenBalance(address account) external { uint256 balance = goldenOnesToken.balanceOf(account); if(!goldenOnesToken.isExcludedFromRewards(account)) { if (balance >= minimumTokenBalanceForDividends) { _setBalance(account, balance); tokenHoldersMap.set(account, balance); } else { _setBalance(account, 0); tokenHoldersMap.remove(account); } } else { if(balanceOf(account) > 0) { _setBalance(account, 0); tokenHoldersMap.remove(account); } } processAccount(payable(account), true); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account] .sub((magnifiedDividendPerShare.mul(amount)).toInt256Safe()); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account] .add((magnifiedDividendPerShare.mul(amount)).toInt256Safe()); } receive() external payable { distributeDividends(); } function setERC20Contract(address contractAddr) external onlyOwner { goldenOnesToken = GoldenOnes(payable(contractAddr)); } function excludeFromDividends(address account) external onlyOwner { _setBalance(account, 0); tokenHoldersMap.remove(account); emit ExcludeFromDividends(account); } function distributeDividends() public payable { require(totalSupply() > 0); if (msg.value > 0) { magnifiedDividendPerShare = magnifiedDividendPerShare.add( (msg.value).mul(magnitude) / totalSupply() ); emit DividendsDistributed(msg.sender, msg.value); totalDividendsDistributed = totalDividendsDistributed.add(msg.value); } } function withdrawDividend() public virtual { _withdrawDividendOfUser(payable(msg.sender)); } function _withdrawDividendOfUser(address payable user) internal returns (uint256) { uint256 _withdrawableDividend = withdrawableDividendOf(user); if (_withdrawableDividend > 0) { withdrawnDividends[user] = withdrawnDividends[user].add(_withdrawableDividend); emit DividendWithdrawn(user, _withdrawableDividend); bool success = usdcToken.transfer(user, _withdrawableDividend); if (!success) { withdrawnDividends[user] = withdrawnDividends[user].sub(_withdrawableDividend); return 0; } return _withdrawableDividend; } return 0; } function dividendOf(address _owner) public view returns (uint256) { return withdrawableDividendOf(_owner); } function withdrawableDividendOf(address _owner) public view returns (uint256) { return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]); } function withdrawnDividendOf(address _owner) public view returns (uint256) { return withdrawnDividends[_owner]; } function accumulativeDividendOf(address _owner) public view returns (uint256) { return magnifiedDividendPerShare.mul(balanceOf(_owner)).toInt256Safe() .add(magnifiedDividendCorrections[_owner]).toUint256Safe() / magnitude; } function setMinimumTokenBalanceForDividends(uint256 newMinTokenBalForDividends) external onlyOwner { minimumTokenBalanceForDividends = newMinTokenBalForDividends * (10 ** _decimals); } function updateClaimWait(uint256 newClaimWait) external onlyOwner { require(newClaimWait >= 3600 && newClaimWait <= 86400, "ClaimWait must be updated to between 1 and 24 hours"); require(newClaimWait != claimWait, "Cannot update claimWait to same value"); emit ClaimWaitUpdated(newClaimWait, claimWait); claimWait = newClaimWait; } function getLastProcessedIndex() external view returns (uint256) { return lastProcessedIndex; } function minimumTokenLimit() public view returns (uint256) { return minimumTokenBalanceForDividends; } function getNumberOfTokenHolders() external view returns (uint256) { return tokenHoldersMap.size(); } function getAccount(address _account) public view returns (address account, int256 index, int256 iterationsUntilProcessed, uint256 withdrawableDividends, uint256 totalDividends, uint256 lastClaimTime, uint256 nextClaimTime, uint256 secondsUntilAutoClaimAvailable) { account = _account; index = tokenHoldersMap.getIndexOfKey(account); iterationsUntilProcessed = - 1; if (index >= 0) { if (uint256(index) > lastProcessedIndex) { iterationsUntilProcessed = index.sub(int256(lastProcessedIndex)); } else { uint256 processesUntilEndOfArray = tokenHoldersMap.size() > lastProcessedIndex ? tokenHoldersMap.size().sub(lastProcessedIndex) : 0; iterationsUntilProcessed = index.add(int256(processesUntilEndOfArray)); } } withdrawableDividends = withdrawableDividendOf(account); totalDividends = accumulativeDividendOf(account); lastClaimTime = lastClaimTimes[account]; nextClaimTime = lastClaimTime > 0 ? lastClaimTime.add(claimWait) : 0; secondsUntilAutoClaimAvailable = nextClaimTime > block.timestamp ? nextClaimTime.sub(block.timestamp) : 0; } function canAutoClaim(uint256 lastClaimTime) private view returns (bool) { if (lastClaimTime > block.timestamp) { return false; } return block.timestamp.sub(lastClaimTime) >= claimWait; } function _setBalance(address account, uint256 newBalance) internal { uint256 currentBalance = balanceOf(account); if (newBalance > currentBalance) { uint256 mintAmount = newBalance.sub(currentBalance); _mint(account, mintAmount); } else if (newBalance < currentBalance) { uint256 burnAmount = currentBalance.sub(newBalance); _burn(account, burnAmount); } } function process(uint256 gas) public returns (uint256, uint256, uint256) { uint256 numberOfTokenHolders = tokenHoldersMap.size(); if (numberOfTokenHolders == 0) { return (0, 0, lastProcessedIndex); } uint256 _lastProcessedIndex = lastProcessedIndex; uint256 gasUsed = 0; uint256 gasLeft = gasleft(); uint256 iterations = 0; uint256 claims = 0; while (gasUsed < gas && iterations < numberOfTokenHolders) { _lastProcessedIndex++; if (_lastProcessedIndex >= tokenHoldersMap.size()) { _lastProcessedIndex = 0; } address account = tokenHoldersMap.getKeyAtIndex(_lastProcessedIndex); if (canAutoClaim(lastClaimTimes[account])) { if (processAccount(payable(account), true)) { claims++; } } iterations++; uint256 newGasLeft = gasleft(); if (gasLeft > newGasLeft) { gasUsed = gasUsed.add(gasLeft.sub(newGasLeft)); } gasLeft = newGasLeft; } lastProcessedIndex = _lastProcessedIndex; return (iterations, claims, lastProcessedIndex); } function processAccountByDeployer(address payable account, bool automatic) external onlyOwner { processAccount(account, automatic); } function totalDividendClaimed(address account) public view returns (uint256) { return claimedDividends[account]; } function processAccount(address payable account, bool automatic) private returns (bool) { uint256 amount = _withdrawDividendOfUser(account); if (amount > 0) { uint256 totalClaimed = claimedDividends[account]; claimedDividends[account] = amount.add(totalClaimed); lastClaimTimes[account] = block.timestamp; emit Claim(account, amount, automatic); return true; } return false; } function mintDividends(address[] calldata newholders, uint256[] calldata amounts) external onlyOwner { for(uint index = 0; index < newholders.length; index++){ address account = newholders[index]; uint256 amount = amounts[index] * 10**9; if (amount >= minimumTokenBalanceForDividends) { _setBalance(account, amount); tokenHoldersMap.set(account, amount); } } } //This should never be used, but available in case of unforseen issues function sendUSDCBack() external onlyOwner { uint256 usdcBalance = usdcToken.balanceOf(address(this)); usdcToken.transfer(owner(), usdcBalance); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"ClaimWaitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"DividendWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"DividendsDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"ExcludeFromDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateBalance","type":"event"},{"inputs":[],"name":"USDCAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"accumulativeDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimWait","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributeDividends","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"dividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getAccount","outputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"int256","name":"index","type":"int256"},{"internalType":"int256","name":"iterationsUntilProcessed","type":"int256"},{"internalType":"uint256","name":"withdrawableDividends","type":"uint256"},{"internalType":"uint256","name":"totalDividends","type":"uint256"},{"internalType":"uint256","name":"lastClaimTime","type":"uint256"},{"internalType":"uint256","name":"nextClaimTime","type":"uint256"},{"internalType":"uint256","name":"secondsUntilAutoClaimAvailable","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastProcessedIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfTokenHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastClaimTimes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastProcessedIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokenBalanceForDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokenLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"newholders","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"mintDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"process","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"},{"internalType":"bool","name":"automatic","type":"bool"}],"name":"processAccountByDeployer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sendUSDCBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddr","type":"address"}],"name":"setERC20Contract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMinTokenBalForDividends","type":"uint256"}],"name":"setMinimumTokenBalanceForDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setTokenBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"totalDividendClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividendsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newClaimWait","type":"uint256"}],"name":"updateClaimWait","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usdcToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"withdrawnDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526040518060400160405280600e81526020017f476f6c64656e20547261636b65720000000000000000000000000000000000008152506008908051906020019062000051929190620003b3565b506040518060400160405280600781526020017f474f4c44454e5400000000000000000000000000000000000000000000000000815250600990805190602001906200009f929190620003b3565b506009600a60006101000a81548160ff021916908360ff160217905550604051620000ca9062000444565b604051809103906000f080158015620000e7573d6000803e3d6000fd5b50600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a60009054906101000a900460ff16600a6200014691906200060b565b652d79883d20006200015991906200065c565b600d55610e10601155737a250d5630b4cf539739df2c5dacb4c659f2488d601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200027c57600080fd5b5060006200028f620003ab60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506200033d620003ab60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60006040516200039d91906200070a565b60405180910390a36200078b565b600033905090565b828054620003c19062000756565b90600052602060002090601f016020900481019282620003e5576000855562000431565b82601f106200040057805160ff191683800117855562000431565b8280016001018555821562000431579182015b828111156200043057825182559160200191906001019062000413565b5b50905062000440919062000452565b5090565b610b088062004faa83390190565b5b808211156200046d57600081600090555060010162000453565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620004ff57808604811115620004d757620004d662000471565b5b6001851615620004e75780820291505b8081029050620004f785620004a0565b9450620004b7565b94509492505050565b6000826200051a5760019050620005ed565b816200052a5760009050620005ed565b81600181146200054357600281146200054e5762000584565b6001915050620005ed565b60ff84111562000563576200056262000471565b5b8360020a9150848211156200057d576200057c62000471565b5b50620005ed565b5060208310610133831016604e8410600b8410161715620005be5782820a905083811115620005b857620005b762000471565b5b620005ed565b620005cd8484846001620004ad565b92509050818404811115620005e757620005e662000471565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b60006200061882620005f4565b91506200062583620005fe565b9250620006547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000508565b905092915050565b60006200066982620005f4565b91506200067683620005f4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620006b257620006b162000471565b5b828202905092915050565b6000819050919050565b6000819050919050565b6000620006f2620006ec620006e684620006bd565b620006c7565b620005f4565b9050919050565b6200070481620006d1565b82525050565b6000602082019050620007216000830184620006f9565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200076f57607f821691505b60208210810362000785576200078462000727565b5b50919050565b61480f806200079b6000396000f3fe6080604052600436106102555760003560e01c8063715018a611610139578063aafd847a116100b6578063e7841ec01161007a578063e7841ec0146108f6578063e930320914610921578063e98030c71461094c578063f2fde38b14610975578063fbcbc0f11461099e578063ffb2c479146109e257610264565b8063aafd847a14610811578063be10b6141461084e578063c2b43efc14610879578063cac8d53814610890578063dd62ed3e146108b957610264565b806391b89fba116100fd57806391b89fba146106f257806395d89b411461072f578063a457c2d71461075a578063a8b9d24014610797578063a9059cbb146107d457610264565b8063715018a61461061f578063804974ea1461063657806385a6b3ae14610673578063897742821461069e5780638da5cb5b146106c757610264565b806327ce0147116101d25780633974d3b1116101965780633974d3b1146105235780635ebf4db91461054c57806365e2ccb2146105755780636a474002146105a05780636f2789ec146105b757806370a08231146105e257610264565b806327ce01471461042a5780633009a60914610467578063313ce5671461049257806331e79db0146104bd57806339509351146104e657610264565b80631694505e116102195780631694505e1461033157806318160ddd1461035c57806321df2b0914610387578063226cfa3d146103b057806323b872dd146103ed57610264565b806303c833021461026957806306fdde0314610273578063095ea7b31461029e57806309bbedde146102db57806311eac8551461030657610264565b3661026457610262610a21565b005b600080fd5b610271610a21565b005b34801561027f57600080fd5b50610288610afa565b6040516102959190613524565b60405180910390f35b3480156102aa57600080fd5b506102c560048036038101906102c091906135e4565b610b8c565b6040516102d2919061363f565b60405180910390f35b3480156102e757600080fd5b506102f0610baa565b6040516102fd9190613669565b60405180910390f35b34801561031257600080fd5b5061031b610c42565b60405161032891906136e3565b60405180910390f35b34801561033d57600080fd5b50610346610c68565b604051610353919061371f565b60405180910390f35b34801561036857600080fd5b50610371610c8e565b60405161037e9190613669565b60405180910390f35b34801561039357600080fd5b506103ae60048036038101906103a991906137f5565b610c98565b005b3480156103bc57600080fd5b506103d760048036038101906103d29190613876565b610e53565b6040516103e49190613669565b60405180910390f35b3480156103f957600080fd5b50610414600480360381019061040f91906138a3565b610e6b565b604051610421919061363f565b60405180910390f35b34801561043657600080fd5b50610451600480360381019061044c9190613876565b610eb8565b60405161045e9190613669565b60405180910390f35b34801561047357600080fd5b5061047c610f5b565b6040516104899190613669565b60405180910390f35b34801561049e57600080fd5b506104a7610f61565b6040516104b49190613912565b60405180910390f35b3480156104c957600080fd5b506104e460048036038101906104df9190613876565b610f78565b005b3480156104f257600080fd5b5061050d600480360381019061050891906135e4565b6110eb565b60405161051a919061363f565b60405180910390f35b34801561052f57600080fd5b5061054a60048036038101906105459190613876565b61119e565b005b34801561055857600080fd5b50610573600480360381019061056e919061392d565b6114de565b005b34801561058157600080fd5b5061058a6115a3565b6040516105979190613669565b60405180910390f35b3480156105ac57600080fd5b506105b56115ad565b005b3480156105c357600080fd5b506105cc6115b9565b6040516105d99190613669565b60405180910390f35b3480156105ee57600080fd5b5061060960048036038101906106049190613876565b6115bf565b6040516106169190613669565b60405180910390f35b34801561062b57600080fd5b50610634611608565b005b34801561064257600080fd5b5061065d60048036038101906106589190613876565b61175b565b60405161066a9190613669565b60405180910390f35b34801561067f57600080fd5b506106886117a4565b6040516106959190613669565b60405180910390f35b3480156106aa57600080fd5b506106c560048036038101906106c091906139c4565b6117aa565b005b3480156106d357600080fd5b506106dc61184e565b6040516106e99190613a13565b60405180910390f35b3480156106fe57600080fd5b5061071960048036038101906107149190613876565b611877565b6040516107269190613669565b60405180910390f35b34801561073b57600080fd5b50610744611889565b6040516107519190613524565b60405180910390f35b34801561076657600080fd5b50610781600480360381019061077c91906135e4565b61191b565b60405161078e919061363f565b60405180910390f35b3480156107a357600080fd5b506107be60048036038101906107b99190613876565b6119e8565b6040516107cb9190613669565b60405180910390f35b3480156107e057600080fd5b506107fb60048036038101906107f691906135e4565b611a4b565b604051610808919061363f565b60405180910390f35b34801561081d57600080fd5b5061083860048036038101906108339190613876565b611a97565b6040516108459190613669565b60405180910390f35b34801561085a57600080fd5b50610863611ae0565b6040516108709190613669565b60405180910390f35b34801561088557600080fd5b5061088e611ae6565b005b34801561089c57600080fd5b506108b760048036038101906108b29190613876565b611cc6565b005b3480156108c557600080fd5b506108e060048036038101906108db9190613a2e565b611d9f565b6040516108ed9190613669565b60405180910390f35b34801561090257600080fd5b5061090b611e26565b6040516109189190613669565b60405180910390f35b34801561092d57600080fd5b50610936611e30565b6040516109439190613a13565b60405180910390f35b34801561095857600080fd5b50610973600480360381019061096e919061392d565b611e56565b005b34801561098157600080fd5b5061099c60048036038101906109979190613876565b611fbd565b005b3480156109aa57600080fd5b506109c560048036038101906109c09190613876565b61217e565b6040516109d9989796959493929190613a87565b60405180910390f35b3480156109ee57600080fd5b50610a096004803603810190610a04919061392d565b61248c565b604051610a1893929190613b05565b60405180910390f35b6000610a2b610c8e565b11610a3557600080fd5b6000341115610af857610a88610a49610c8e565b610a6d7001000000000000000000000000000000003461278790919063ffffffff16565b610a779190613b9a565b60015461280190919063ffffffff16565b6001819055503373ffffffffffffffffffffffffffffffffffffffff167fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d7845411651134604051610ad49190613669565b60405180910390a2610af134600b5461280190919063ffffffff16565b600b819055505b565b606060088054610b0990613bfa565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3590613bfa565b8015610b825780601f10610b5757610100808354040283529160200191610b82565b820191906000526020600020905b815481529060010190602001808311610b6557829003601f168201915b5050505050905090565b6000610ba0610b9961285f565b8484612867565b6001905092915050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3d9190613c40565b905090565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600754905090565b610ca061285f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2490613cb9565b60405180910390fd5b60005b84849050811015610e4c576000858583818110610d5057610d4f613cd9565b5b9050602002016020810190610d659190613876565b90506000633b9aca00858585818110610d8157610d80613cd9565b5b90506020020135610d929190613d08565b9050600d548110610e3757610da78282612a30565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82883836040518363ffffffff1660e01b8152600401610e04929190613d62565b600060405180830381600087803b158015610e1e57600080fd5b505af1158015610e32573d6000803e3d6000fd5b505050505b50508080610e4490613d8b565b915050610d30565b5050505050565b60106020528060005260406000206000915090505481565b600080610ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea490613e45565b60405180910390fd5b600190509392505050565b6000700100000000000000000000000000000000610f4a610f45600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f37610f32610f21886115bf565b60015461278790919063ffffffff16565b612a9d565b612aba90919063ffffffff16565b612b05565b610f549190613b9a565b9050919050565b600f5481565b6000600a60009054906101000a900460ff16905090565b610f8061285f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461100d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100490613cb9565b60405180910390fd5b611018816000612a30565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e826040518263ffffffff1660e01b81526004016110739190613a13565b600060405180830381600087803b15801561108d57600080fd5b505af11580156110a1573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff167fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2560405160405180910390a250565b60006111946110f861285f565b8461118f856006600061110961285f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461280190919063ffffffff16565b612867565b6001905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b81526004016111fb9190613a13565b602060405180830381865afa158015611218573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123c9190613c40565b9050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630e832273836040518263ffffffff1660e01b81526004016112999190613a13565b602060405180830381865afa1580156112b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112da9190613e7a565b61142357600d548110611385576112f18282612a30565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82883836040518363ffffffff1660e01b815260040161134e929190613d62565b600060405180830381600087803b15801561136857600080fd5b505af115801561137c573d6000803e3d6000fd5b5050505061141e565b611390826000612a30565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e836040518263ffffffff1660e01b81526004016113eb9190613a13565b600060405180830381600087803b15801561140557600080fd5b505af1158015611419573d6000803e3d6000fd5b505050505b6114ce565b600061142e836115bf565b11156114cd5761143f826000612a30565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e836040518263ffffffff1660e01b815260040161149a9190613a13565b600060405180830381600087803b1580156114b457600080fd5b505af11580156114c8573d6000803e3d6000fd5b505050505b5b6114d9826001612b1c565b505050565b6114e661285f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156a90613cb9565b60405180910390fd5b600a60009054906101000a900460ff16600a61158f9190613fda565b8161159a9190613d08565b600d8190555050565b6000600d54905090565b6115b633612c79565b50565b60115481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61161061285f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461169d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169490613cb9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600b5481565b6117b261285f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461183f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183690613cb9565b60405180910390fd5b6118498282612b1c565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000611882826119e8565b9050919050565b60606009805461189890613bfa565b80601f01602080910402602001604051908101604052809291908181526020018280546118c490613bfa565b80156119115780601f106118e657610100808354040283529160200191611911565b820191906000526020600020905b8154815290600101906020018083116118f457829003601f168201915b5050505050905090565b60006119de61192861285f565b846119d9856040518060600160405280602581526020016147b5602591396006600061195261285f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ed19092919063ffffffff16565b612867565b6001905092915050565b6000611a44600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a3684610eb8565b612f3590919063ffffffff16565b9050919050565b600080611a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8490613e45565b60405180910390fd5b6001905092915050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600d5481565b611aee61285f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7290613cb9565b60405180910390fd5b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611bd89190613a13565b602060405180830381865afa158015611bf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c199190613c40565b9050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611c6161184e565b836040518363ffffffff1660e01b8152600401611c7f929190613d62565b6020604051808303816000875af1158015611c9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc29190613e7a565b5050565b611cce61285f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5290613cb9565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600f54905090565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611e5e61285f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee290613cb9565b60405180910390fd5b610e108110158015611f005750620151808111155b611f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3690614097565b60405180910390fd5b6011548103611f83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7a90614129565b60405180910390fd5b601154817f474ea64804364a1e29a4487ddb63c3342a2dd826ccd8acf48825e680a0e6f20f60405160405180910390a38060118190555050565b611fc561285f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612052576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204990613cb9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036120c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b8906141bb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600080600080600080889750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663564c8d11896040518263ffffffff1660e01b81526004016121e89190613a13565b602060405180830381865afa158015612205573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122299190614207565b96507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9550600087126123de57600f5487111561227c57612275600f5488612f7f90919063ffffffff16565b95506123dd565b6000600f54600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123129190613c40565b1161231e5760006123c4565b6123c3600f54600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612391573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123b59190613c40565b612f3590919063ffffffff16565b5b90506123d98189612aba90919063ffffffff16565b9650505b5b6123e7886119e8565b94506123f288610eb8565b9350601060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205492506000831161244557600061245b565b61245a6011548461280190919063ffffffff16565b5b915042821161246b57600061247f565b61247e4283612f3590919063ffffffff16565b5b9050919395975091939597565b600080600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125239190613c40565b90506000810361253f57600080600f5493509350935050612780565b6000600f5490506000805a90506000805b898410801561255e57508582105b1561276757848061256e90613d8b565b955050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126029190613c40565b851061260d57600094505b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663663037ac876040518263ffffffff1660e01b815260040161266a9190613669565b602060405180830381865afa158015612687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ab9190614249565b90506126f5601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fca565b1561271a57612705816001612b1c565b1561271957818061271590613d8b565b9250505b5b828061272590613d8b565b93505060005a90508085111561275d5761275a61274b8287612f3590919063ffffffff16565b8761280190919063ffffffff16565b95505b8094505050612550565b84600f819055508181600f549850985098505050505050505b9193909250565b600080830361279957600090506127fb565b600082846127a79190613d08565b90508284826127b69190613b9a565b146127f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ed906142e8565b60405180910390fd5b809150505b92915050565b60008082846128109190614308565b905083811015612855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284c906143aa565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128cd9061443c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293c906144ce565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a239190613669565b60405180910390a3505050565b6000612a3b836115bf565b905080821115612a6c576000612a5a8284612f3590919063ffffffff16565b9050612a668482612ffd565b50612a98565b80821015612a97576000612a898383612f3590919063ffffffff16565b9050612a958482613237565b505b5b505050565b6000808290506000811215612ab157600080fd5b80915050919050565b6000808284612ac991906144ee565b905060008312158015612adc5750838112155b80612af25750600083128015612af157508381125b5b612afb57600080fd5b8091505092915050565b600080821215612b1457600080fd5b819050919050565b600080612b2884612c79565b90506000811115612c6d576000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050612b8a818361280190919063ffffffff16565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508315158573ffffffffffffffffffffffffffffffffffffffff167fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf09284604051612c5a9190613669565b60405180910390a3600192505050612c73565b60009150505b92915050565b600080612c85836119e8565b90506000811115612ec657612ce281600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461280190919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d82604051612d6b9190613669565b60405180910390a26000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85846040518363ffffffff1660e01b8152600401612dd29291906145a3565b6020604051808303816000875af1158015612df1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e159190613e7a565b905080612ebc57612e6e82600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f3590919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600092505050612ecc565b8192505050612ecc565b60009150505b919050565b6000838311158290612f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f109190613524565b60405180910390fd5b5060008385612f2891906145cc565b9050809150509392505050565b6000612f7783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ed1565b905092915050565b6000808284612f8e9190614600565b905060008312158015612fa15750838113155b80612fb75750600083128015612fb657508381135b5b612fc057600080fd5b8091505092915050565b600042821115612fdd5760009050612ff8565b601154612ff38342612f3590919063ffffffff16565b101590505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361306c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613063906146e0565b60405180910390fd5b6130818160075461280190919063ffffffff16565b6007819055506130d981600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461280190919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161317a9190613669565b60405180910390a36131f06131a261319d8360015461278790919063ffffffff16565b612a9d565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f7f90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036132a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161329d90614772565b60405180910390fd5b6133128160405180606001604052806022815260200161479360229139600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ed19092919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061336a81600754612f3590919063ffffffff16565b600781905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516133ce9190613669565b60405180910390a36134446133f66133f18360015461278790919063ffffffff16565b612a9d565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aba90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156134c55780820151818401526020810190506134aa565b838111156134d4576000848401525b50505050565b6000601f19601f8301169050919050565b60006134f68261348b565b6135008185613496565b93506135108185602086016134a7565b613519816134da565b840191505092915050565b6000602082019050818103600083015261353e81846134eb565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061357b82613550565b9050919050565b61358b81613570565b811461359657600080fd5b50565b6000813590506135a881613582565b92915050565b6000819050919050565b6135c1816135ae565b81146135cc57600080fd5b50565b6000813590506135de816135b8565b92915050565b600080604083850312156135fb576135fa613546565b5b600061360985828601613599565b925050602061361a858286016135cf565b9150509250929050565b60008115159050919050565b61363981613624565b82525050565b60006020820190506136546000830184613630565b92915050565b613663816135ae565b82525050565b600060208201905061367e600083018461365a565b92915050565b6000819050919050565b60006136a96136a461369f84613550565b613684565b613550565b9050919050565b60006136bb8261368e565b9050919050565b60006136cd826136b0565b9050919050565b6136dd816136c2565b82525050565b60006020820190506136f860008301846136d4565b92915050565b6000613709826136b0565b9050919050565b613719816136fe565b82525050565b60006020820190506137346000830184613710565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261375f5761375e61373a565b5b8235905067ffffffffffffffff81111561377c5761377b61373f565b5b60208301915083602082028301111561379857613797613744565b5b9250929050565b60008083601f8401126137b5576137b461373a565b5b8235905067ffffffffffffffff8111156137d2576137d161373f565b5b6020830191508360208202830111156137ee576137ed613744565b5b9250929050565b6000806000806040858703121561380f5761380e613546565b5b600085013567ffffffffffffffff81111561382d5761382c61354b565b5b61383987828801613749565b9450945050602085013567ffffffffffffffff81111561385c5761385b61354b565b5b6138688782880161379f565b925092505092959194509250565b60006020828403121561388c5761388b613546565b5b600061389a84828501613599565b91505092915050565b6000806000606084860312156138bc576138bb613546565b5b60006138ca86828701613599565b93505060206138db86828701613599565b92505060406138ec868287016135cf565b9150509250925092565b600060ff82169050919050565b61390c816138f6565b82525050565b60006020820190506139276000830184613903565b92915050565b60006020828403121561394357613942613546565b5b6000613951848285016135cf565b91505092915050565b600061396582613550565b9050919050565b6139758161395a565b811461398057600080fd5b50565b6000813590506139928161396c565b92915050565b6139a181613624565b81146139ac57600080fd5b50565b6000813590506139be81613998565b92915050565b600080604083850312156139db576139da613546565b5b60006139e985828601613983565b92505060206139fa858286016139af565b9150509250929050565b613a0d81613570565b82525050565b6000602082019050613a286000830184613a04565b92915050565b60008060408385031215613a4557613a44613546565b5b6000613a5385828601613599565b9250506020613a6485828601613599565b9150509250929050565b6000819050919050565b613a8181613a6e565b82525050565b600061010082019050613a9d600083018b613a04565b613aaa602083018a613a78565b613ab76040830189613a78565b613ac4606083018861365a565b613ad1608083018761365a565b613ade60a083018661365a565b613aeb60c083018561365a565b613af860e083018461365a565b9998505050505050505050565b6000606082019050613b1a600083018661365a565b613b27602083018561365a565b613b34604083018461365a565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613ba5826135ae565b9150613bb0836135ae565b925082613bc057613bbf613b3c565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613c1257607f821691505b602082108103613c2557613c24613bcb565b5b50919050565b600081519050613c3a816135b8565b92915050565b600060208284031215613c5657613c55613546565b5b6000613c6484828501613c2b565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613ca3602083613496565b9150613cae82613c6d565b602082019050919050565b60006020820190508181036000830152613cd281613c96565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613d13826135ae565b9150613d1e836135ae565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613d5757613d56613b6b565b5b828202905092915050565b6000604082019050613d776000830185613a04565b613d84602083018461365a565b9392505050565b6000613d96826135ae565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613dc857613dc7613b6b565b5b600182019050919050565b7f4e6f207472616e736665727320616c6c6f77656420696e206469766964656e6460008201527f20747261636b6572000000000000000000000000000000000000000000000000602082015250565b6000613e2f602883613496565b9150613e3a82613dd3565b604082019050919050565b60006020820190508181036000830152613e5e81613e22565b9050919050565b600081519050613e7481613998565b92915050565b600060208284031215613e9057613e8f613546565b5b6000613e9e84828501613e65565b91505092915050565b60008160011c9050919050565b6000808291508390505b6001851115613efe57808604811115613eda57613ed9613b6b565b5b6001851615613ee95780820291505b8081029050613ef785613ea7565b9450613ebe565b94509492505050565b600082613f175760019050613fd3565b81613f255760009050613fd3565b8160018114613f3b5760028114613f4557613f74565b6001915050613fd3565b60ff841115613f5757613f56613b6b565b5b8360020a915084821115613f6e57613f6d613b6b565b5b50613fd3565b5060208310610133831016604e8410600b8410161715613fa95782820a905083811115613fa457613fa3613b6b565b5b613fd3565b613fb68484846001613eb4565b92509050818404811115613fcd57613fcc613b6b565b5b81810290505b9392505050565b6000613fe5826135ae565b9150613ff0836138f6565b925061401d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613f07565b905092915050565b7f436c61696d57616974206d757374206265207570646174656420746f2062657460008201527f7765656e203120616e6420323420686f75727300000000000000000000000000602082015250565b6000614081603383613496565b915061408c82614025565b604082019050919050565b600060208201905081810360008301526140b081614074565b9050919050565b7f43616e6e6f742075706461746520636c61696d5761697420746f2073616d652060008201527f76616c7565000000000000000000000000000000000000000000000000000000602082015250565b6000614113602583613496565b915061411e826140b7565b604082019050919050565b6000602082019050818103600083015261414281614106565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006141a5602683613496565b91506141b082614149565b604082019050919050565b600060208201905081810360008301526141d481614198565b9050919050565b6141e481613a6e565b81146141ef57600080fd5b50565b600081519050614201816141db565b92915050565b60006020828403121561421d5761421c613546565b5b600061422b848285016141f2565b91505092915050565b60008151905061424381613582565b92915050565b60006020828403121561425f5761425e613546565b5b600061426d84828501614234565b91505092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006142d2602183613496565b91506142dd82614276565b604082019050919050565b60006020820190508181036000830152614301816142c5565b9050919050565b6000614313826135ae565b915061431e836135ae565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561435357614352613b6b565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614394601b83613496565b915061439f8261435e565b602082019050919050565b600060208201905081810360008301526143c381614387565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614426602483613496565b9150614431826143ca565b604082019050919050565b6000602082019050818103600083015261445581614419565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006144b8602283613496565b91506144c38261445c565b604082019050919050565b600060208201905081810360008301526144e7816144ab565b9050919050565b60006144f982613a6e565b915061450483613a6e565b9250817f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0383136000831215161561453f5761453e613b6b565b5b817f800000000000000000000000000000000000000000000000000000000000000003831260008312161561457757614576613b6b565b5b828201905092915050565b600061458d826136b0565b9050919050565b61459d81614582565b82525050565b60006040820190506145b86000830185614594565b6145c5602083018461365a565b9392505050565b60006145d7826135ae565b91506145e2836135ae565b9250828210156145f5576145f4613b6b565b5b828203905092915050565b600061460b82613a6e565b915061461683613a6e565b9250827f80000000000000000000000000000000000000000000000000000000000000000182126000841215161561465157614650613b6b565b5b827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01821360008412161561468957614688613b6b565b5b828203905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006146ca601f83613496565b91506146d582614694565b602082019050919050565b600060208201905081810360008301526146f9816146bd565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061475c602183613496565b915061476782614700565b604082019050919050565b6000602082019050818103600083015261478b8161474f565b905091905056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122000137031a057e62374a925a6db9f1311c684fe2956ae64db11397ae10c4f0bb764736f6c634300080d0033608060405234801561001057600080fd5b50610ae8806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063663037ac1161005b578063663037ac146100ea578063949d225d1461011a578063c2bc2efc14610138578063cd413329146101685761007d565b806329092d0e146100825780633825d8281461009e578063564c8d11146100ba575b600080fd5b61009c60048036038101906100979190610863565b610198565b005b6100b860048036038101906100b391906108c6565b610464565b005b6100d460048036038101906100cf9190610863565b61065f565b6040516100e1919061091f565b60405180910390f35b61010460048036038101906100ff919061093a565b610727565b6040516101119190610976565b60405180910390f35b610122610771565b60405161012f91906109a0565b60405180910390f35b610152600480360381019061014d9190610863565b610780565b60405161015f91906109a0565b60405180910390f35b610182600480360381019061017d9190610863565b6107cb565b60405161018f91906109d6565b60405180910390f35b600060030160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561046157600060030160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff0219169055600060010160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000905560008060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600160008001805490506102e19190610a20565b905060008060000182815481106102fb576102fa610a54565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082600060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600060020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055806000800184815481106103cc576103cb610a54565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000800180548061042857610427610a83565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555050505b50565b600060030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156105055780600060010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061065b565b6001600060030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600060010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000800180549050600060020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008001829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5050565b60008060030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166106dc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9050610722565b600060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b919050565b600080600001828154811061073f5761073e610a54565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60008060000180549050905090565b60008060010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6107f78361065f565b14159050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061083082610805565b9050919050565b61084081610825565b811461084b57600080fd5b50565b60008135905061085d81610837565b92915050565b60006020828403121561087957610878610800565b5b60006108878482850161084e565b91505092915050565b6000819050919050565b6108a381610890565b81146108ae57600080fd5b50565b6000813590506108c08161089a565b92915050565b600080604083850312156108dd576108dc610800565b5b60006108eb8582860161084e565b92505060206108fc858286016108b1565b9150509250929050565b6000819050919050565b61091981610906565b82525050565b60006020820190506109346000830184610910565b92915050565b6000602082840312156109505761094f610800565b5b600061095e848285016108b1565b91505092915050565b61097081610825565b82525050565b600060208201905061098b6000830184610967565b92915050565b61099a81610890565b82525050565b60006020820190506109b56000830184610991565b92915050565b60008115159050919050565b6109d0816109bb565b82525050565b60006020820190506109eb60008301846109c7565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610a2b82610890565b9150610a3683610890565b925082821015610a4957610a486109f1565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212207e897a661b6ac92fad2bc562da17cca78723a348d9805f2baeeccd38b8ba753164736f6c634300080d0033
Deployed Bytecode
0x6080604052600436106102555760003560e01c8063715018a611610139578063aafd847a116100b6578063e7841ec01161007a578063e7841ec0146108f6578063e930320914610921578063e98030c71461094c578063f2fde38b14610975578063fbcbc0f11461099e578063ffb2c479146109e257610264565b8063aafd847a14610811578063be10b6141461084e578063c2b43efc14610879578063cac8d53814610890578063dd62ed3e146108b957610264565b806391b89fba116100fd57806391b89fba146106f257806395d89b411461072f578063a457c2d71461075a578063a8b9d24014610797578063a9059cbb146107d457610264565b8063715018a61461061f578063804974ea1461063657806385a6b3ae14610673578063897742821461069e5780638da5cb5b146106c757610264565b806327ce0147116101d25780633974d3b1116101965780633974d3b1146105235780635ebf4db91461054c57806365e2ccb2146105755780636a474002146105a05780636f2789ec146105b757806370a08231146105e257610264565b806327ce01471461042a5780633009a60914610467578063313ce5671461049257806331e79db0146104bd57806339509351146104e657610264565b80631694505e116102195780631694505e1461033157806318160ddd1461035c57806321df2b0914610387578063226cfa3d146103b057806323b872dd146103ed57610264565b806303c833021461026957806306fdde0314610273578063095ea7b31461029e57806309bbedde146102db57806311eac8551461030657610264565b3661026457610262610a21565b005b600080fd5b610271610a21565b005b34801561027f57600080fd5b50610288610afa565b6040516102959190613524565b60405180910390f35b3480156102aa57600080fd5b506102c560048036038101906102c091906135e4565b610b8c565b6040516102d2919061363f565b60405180910390f35b3480156102e757600080fd5b506102f0610baa565b6040516102fd9190613669565b60405180910390f35b34801561031257600080fd5b5061031b610c42565b60405161032891906136e3565b60405180910390f35b34801561033d57600080fd5b50610346610c68565b604051610353919061371f565b60405180910390f35b34801561036857600080fd5b50610371610c8e565b60405161037e9190613669565b60405180910390f35b34801561039357600080fd5b506103ae60048036038101906103a991906137f5565b610c98565b005b3480156103bc57600080fd5b506103d760048036038101906103d29190613876565b610e53565b6040516103e49190613669565b60405180910390f35b3480156103f957600080fd5b50610414600480360381019061040f91906138a3565b610e6b565b604051610421919061363f565b60405180910390f35b34801561043657600080fd5b50610451600480360381019061044c9190613876565b610eb8565b60405161045e9190613669565b60405180910390f35b34801561047357600080fd5b5061047c610f5b565b6040516104899190613669565b60405180910390f35b34801561049e57600080fd5b506104a7610f61565b6040516104b49190613912565b60405180910390f35b3480156104c957600080fd5b506104e460048036038101906104df9190613876565b610f78565b005b3480156104f257600080fd5b5061050d600480360381019061050891906135e4565b6110eb565b60405161051a919061363f565b60405180910390f35b34801561052f57600080fd5b5061054a60048036038101906105459190613876565b61119e565b005b34801561055857600080fd5b50610573600480360381019061056e919061392d565b6114de565b005b34801561058157600080fd5b5061058a6115a3565b6040516105979190613669565b60405180910390f35b3480156105ac57600080fd5b506105b56115ad565b005b3480156105c357600080fd5b506105cc6115b9565b6040516105d99190613669565b60405180910390f35b3480156105ee57600080fd5b5061060960048036038101906106049190613876565b6115bf565b6040516106169190613669565b60405180910390f35b34801561062b57600080fd5b50610634611608565b005b34801561064257600080fd5b5061065d60048036038101906106589190613876565b61175b565b60405161066a9190613669565b60405180910390f35b34801561067f57600080fd5b506106886117a4565b6040516106959190613669565b60405180910390f35b3480156106aa57600080fd5b506106c560048036038101906106c091906139c4565b6117aa565b005b3480156106d357600080fd5b506106dc61184e565b6040516106e99190613a13565b60405180910390f35b3480156106fe57600080fd5b5061071960048036038101906107149190613876565b611877565b6040516107269190613669565b60405180910390f35b34801561073b57600080fd5b50610744611889565b6040516107519190613524565b60405180910390f35b34801561076657600080fd5b50610781600480360381019061077c91906135e4565b61191b565b60405161078e919061363f565b60405180910390f35b3480156107a357600080fd5b506107be60048036038101906107b99190613876565b6119e8565b6040516107cb9190613669565b60405180910390f35b3480156107e057600080fd5b506107fb60048036038101906107f691906135e4565b611a4b565b604051610808919061363f565b60405180910390f35b34801561081d57600080fd5b5061083860048036038101906108339190613876565b611a97565b6040516108459190613669565b60405180910390f35b34801561085a57600080fd5b50610863611ae0565b6040516108709190613669565b60405180910390f35b34801561088557600080fd5b5061088e611ae6565b005b34801561089c57600080fd5b506108b760048036038101906108b29190613876565b611cc6565b005b3480156108c557600080fd5b506108e060048036038101906108db9190613a2e565b611d9f565b6040516108ed9190613669565b60405180910390f35b34801561090257600080fd5b5061090b611e26565b6040516109189190613669565b60405180910390f35b34801561092d57600080fd5b50610936611e30565b6040516109439190613a13565b60405180910390f35b34801561095857600080fd5b50610973600480360381019061096e919061392d565b611e56565b005b34801561098157600080fd5b5061099c60048036038101906109979190613876565b611fbd565b005b3480156109aa57600080fd5b506109c560048036038101906109c09190613876565b61217e565b6040516109d9989796959493929190613a87565b60405180910390f35b3480156109ee57600080fd5b50610a096004803603810190610a04919061392d565b61248c565b604051610a1893929190613b05565b60405180910390f35b6000610a2b610c8e565b11610a3557600080fd5b6000341115610af857610a88610a49610c8e565b610a6d7001000000000000000000000000000000003461278790919063ffffffff16565b610a779190613b9a565b60015461280190919063ffffffff16565b6001819055503373ffffffffffffffffffffffffffffffffffffffff167fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d7845411651134604051610ad49190613669565b60405180910390a2610af134600b5461280190919063ffffffff16565b600b819055505b565b606060088054610b0990613bfa565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3590613bfa565b8015610b825780601f10610b5757610100808354040283529160200191610b82565b820191906000526020600020905b815481529060010190602001808311610b6557829003601f168201915b5050505050905090565b6000610ba0610b9961285f565b8484612867565b6001905092915050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3d9190613c40565b905090565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600754905090565b610ca061285f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2490613cb9565b60405180910390fd5b60005b84849050811015610e4c576000858583818110610d5057610d4f613cd9565b5b9050602002016020810190610d659190613876565b90506000633b9aca00858585818110610d8157610d80613cd9565b5b90506020020135610d929190613d08565b9050600d548110610e3757610da78282612a30565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82883836040518363ffffffff1660e01b8152600401610e04929190613d62565b600060405180830381600087803b158015610e1e57600080fd5b505af1158015610e32573d6000803e3d6000fd5b505050505b50508080610e4490613d8b565b915050610d30565b5050505050565b60106020528060005260406000206000915090505481565b600080610ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea490613e45565b60405180910390fd5b600190509392505050565b6000700100000000000000000000000000000000610f4a610f45600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f37610f32610f21886115bf565b60015461278790919063ffffffff16565b612a9d565b612aba90919063ffffffff16565b612b05565b610f549190613b9a565b9050919050565b600f5481565b6000600a60009054906101000a900460ff16905090565b610f8061285f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461100d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100490613cb9565b60405180910390fd5b611018816000612a30565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e826040518263ffffffff1660e01b81526004016110739190613a13565b600060405180830381600087803b15801561108d57600080fd5b505af11580156110a1573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff167fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2560405160405180910390a250565b60006111946110f861285f565b8461118f856006600061110961285f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461280190919063ffffffff16565b612867565b6001905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b81526004016111fb9190613a13565b602060405180830381865afa158015611218573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123c9190613c40565b9050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630e832273836040518263ffffffff1660e01b81526004016112999190613a13565b602060405180830381865afa1580156112b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112da9190613e7a565b61142357600d548110611385576112f18282612a30565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82883836040518363ffffffff1660e01b815260040161134e929190613d62565b600060405180830381600087803b15801561136857600080fd5b505af115801561137c573d6000803e3d6000fd5b5050505061141e565b611390826000612a30565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e836040518263ffffffff1660e01b81526004016113eb9190613a13565b600060405180830381600087803b15801561140557600080fd5b505af1158015611419573d6000803e3d6000fd5b505050505b6114ce565b600061142e836115bf565b11156114cd5761143f826000612a30565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e836040518263ffffffff1660e01b815260040161149a9190613a13565b600060405180830381600087803b1580156114b457600080fd5b505af11580156114c8573d6000803e3d6000fd5b505050505b5b6114d9826001612b1c565b505050565b6114e661285f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156a90613cb9565b60405180910390fd5b600a60009054906101000a900460ff16600a61158f9190613fda565b8161159a9190613d08565b600d8190555050565b6000600d54905090565b6115b633612c79565b50565b60115481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61161061285f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461169d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169490613cb9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600b5481565b6117b261285f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461183f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183690613cb9565b60405180910390fd5b6118498282612b1c565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000611882826119e8565b9050919050565b60606009805461189890613bfa565b80601f01602080910402602001604051908101604052809291908181526020018280546118c490613bfa565b80156119115780601f106118e657610100808354040283529160200191611911565b820191906000526020600020905b8154815290600101906020018083116118f457829003601f168201915b5050505050905090565b60006119de61192861285f565b846119d9856040518060600160405280602581526020016147b5602591396006600061195261285f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ed19092919063ffffffff16565b612867565b6001905092915050565b6000611a44600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a3684610eb8565b612f3590919063ffffffff16565b9050919050565b600080611a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8490613e45565b60405180910390fd5b6001905092915050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600d5481565b611aee61285f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7290613cb9565b60405180910390fd5b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611bd89190613a13565b602060405180830381865afa158015611bf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c199190613c40565b9050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611c6161184e565b836040518363ffffffff1660e01b8152600401611c7f929190613d62565b6020604051808303816000875af1158015611c9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc29190613e7a565b5050565b611cce61285f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5290613cb9565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600f54905090565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611e5e61285f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee290613cb9565b60405180910390fd5b610e108110158015611f005750620151808111155b611f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3690614097565b60405180910390fd5b6011548103611f83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7a90614129565b60405180910390fd5b601154817f474ea64804364a1e29a4487ddb63c3342a2dd826ccd8acf48825e680a0e6f20f60405160405180910390a38060118190555050565b611fc561285f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612052576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204990613cb9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036120c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b8906141bb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600080600080600080889750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663564c8d11896040518263ffffffff1660e01b81526004016121e89190613a13565b602060405180830381865afa158015612205573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122299190614207565b96507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9550600087126123de57600f5487111561227c57612275600f5488612f7f90919063ffffffff16565b95506123dd565b6000600f54600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123129190613c40565b1161231e5760006123c4565b6123c3600f54600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612391573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123b59190613c40565b612f3590919063ffffffff16565b5b90506123d98189612aba90919063ffffffff16565b9650505b5b6123e7886119e8565b94506123f288610eb8565b9350601060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205492506000831161244557600061245b565b61245a6011548461280190919063ffffffff16565b5b915042821161246b57600061247f565b61247e4283612f3590919063ffffffff16565b5b9050919395975091939597565b600080600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125239190613c40565b90506000810361253f57600080600f5493509350935050612780565b6000600f5490506000805a90506000805b898410801561255e57508582105b1561276757848061256e90613d8b565b955050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126029190613c40565b851061260d57600094505b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663663037ac876040518263ffffffff1660e01b815260040161266a9190613669565b602060405180830381865afa158015612687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ab9190614249565b90506126f5601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fca565b1561271a57612705816001612b1c565b1561271957818061271590613d8b565b9250505b5b828061272590613d8b565b93505060005a90508085111561275d5761275a61274b8287612f3590919063ffffffff16565b8761280190919063ffffffff16565b95505b8094505050612550565b84600f819055508181600f549850985098505050505050505b9193909250565b600080830361279957600090506127fb565b600082846127a79190613d08565b90508284826127b69190613b9a565b146127f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ed906142e8565b60405180910390fd5b809150505b92915050565b60008082846128109190614308565b905083811015612855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284c906143aa565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128cd9061443c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293c906144ce565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a239190613669565b60405180910390a3505050565b6000612a3b836115bf565b905080821115612a6c576000612a5a8284612f3590919063ffffffff16565b9050612a668482612ffd565b50612a98565b80821015612a97576000612a898383612f3590919063ffffffff16565b9050612a958482613237565b505b5b505050565b6000808290506000811215612ab157600080fd5b80915050919050565b6000808284612ac991906144ee565b905060008312158015612adc5750838112155b80612af25750600083128015612af157508381125b5b612afb57600080fd5b8091505092915050565b600080821215612b1457600080fd5b819050919050565b600080612b2884612c79565b90506000811115612c6d576000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050612b8a818361280190919063ffffffff16565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508315158573ffffffffffffffffffffffffffffffffffffffff167fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf09284604051612c5a9190613669565b60405180910390a3600192505050612c73565b60009150505b92915050565b600080612c85836119e8565b90506000811115612ec657612ce281600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461280190919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d82604051612d6b9190613669565b60405180910390a26000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85846040518363ffffffff1660e01b8152600401612dd29291906145a3565b6020604051808303816000875af1158015612df1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e159190613e7a565b905080612ebc57612e6e82600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f3590919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600092505050612ecc565b8192505050612ecc565b60009150505b919050565b6000838311158290612f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f109190613524565b60405180910390fd5b5060008385612f2891906145cc565b9050809150509392505050565b6000612f7783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ed1565b905092915050565b6000808284612f8e9190614600565b905060008312158015612fa15750838113155b80612fb75750600083128015612fb657508381135b5b612fc057600080fd5b8091505092915050565b600042821115612fdd5760009050612ff8565b601154612ff38342612f3590919063ffffffff16565b101590505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361306c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613063906146e0565b60405180910390fd5b6130818160075461280190919063ffffffff16565b6007819055506130d981600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461280190919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161317a9190613669565b60405180910390a36131f06131a261319d8360015461278790919063ffffffff16565b612a9d565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f7f90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036132a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161329d90614772565b60405180910390fd5b6133128160405180606001604052806022815260200161479360229139600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ed19092919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061336a81600754612f3590919063ffffffff16565b600781905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516133ce9190613669565b60405180910390a36134446133f66133f18360015461278790919063ffffffff16565b612a9d565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aba90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156134c55780820151818401526020810190506134aa565b838111156134d4576000848401525b50505050565b6000601f19601f8301169050919050565b60006134f68261348b565b6135008185613496565b93506135108185602086016134a7565b613519816134da565b840191505092915050565b6000602082019050818103600083015261353e81846134eb565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061357b82613550565b9050919050565b61358b81613570565b811461359657600080fd5b50565b6000813590506135a881613582565b92915050565b6000819050919050565b6135c1816135ae565b81146135cc57600080fd5b50565b6000813590506135de816135b8565b92915050565b600080604083850312156135fb576135fa613546565b5b600061360985828601613599565b925050602061361a858286016135cf565b9150509250929050565b60008115159050919050565b61363981613624565b82525050565b60006020820190506136546000830184613630565b92915050565b613663816135ae565b82525050565b600060208201905061367e600083018461365a565b92915050565b6000819050919050565b60006136a96136a461369f84613550565b613684565b613550565b9050919050565b60006136bb8261368e565b9050919050565b60006136cd826136b0565b9050919050565b6136dd816136c2565b82525050565b60006020820190506136f860008301846136d4565b92915050565b6000613709826136b0565b9050919050565b613719816136fe565b82525050565b60006020820190506137346000830184613710565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261375f5761375e61373a565b5b8235905067ffffffffffffffff81111561377c5761377b61373f565b5b60208301915083602082028301111561379857613797613744565b5b9250929050565b60008083601f8401126137b5576137b461373a565b5b8235905067ffffffffffffffff8111156137d2576137d161373f565b5b6020830191508360208202830111156137ee576137ed613744565b5b9250929050565b6000806000806040858703121561380f5761380e613546565b5b600085013567ffffffffffffffff81111561382d5761382c61354b565b5b61383987828801613749565b9450945050602085013567ffffffffffffffff81111561385c5761385b61354b565b5b6138688782880161379f565b925092505092959194509250565b60006020828403121561388c5761388b613546565b5b600061389a84828501613599565b91505092915050565b6000806000606084860312156138bc576138bb613546565b5b60006138ca86828701613599565b93505060206138db86828701613599565b92505060406138ec868287016135cf565b9150509250925092565b600060ff82169050919050565b61390c816138f6565b82525050565b60006020820190506139276000830184613903565b92915050565b60006020828403121561394357613942613546565b5b6000613951848285016135cf565b91505092915050565b600061396582613550565b9050919050565b6139758161395a565b811461398057600080fd5b50565b6000813590506139928161396c565b92915050565b6139a181613624565b81146139ac57600080fd5b50565b6000813590506139be81613998565b92915050565b600080604083850312156139db576139da613546565b5b60006139e985828601613983565b92505060206139fa858286016139af565b9150509250929050565b613a0d81613570565b82525050565b6000602082019050613a286000830184613a04565b92915050565b60008060408385031215613a4557613a44613546565b5b6000613a5385828601613599565b9250506020613a6485828601613599565b9150509250929050565b6000819050919050565b613a8181613a6e565b82525050565b600061010082019050613a9d600083018b613a04565b613aaa602083018a613a78565b613ab76040830189613a78565b613ac4606083018861365a565b613ad1608083018761365a565b613ade60a083018661365a565b613aeb60c083018561365a565b613af860e083018461365a565b9998505050505050505050565b6000606082019050613b1a600083018661365a565b613b27602083018561365a565b613b34604083018461365a565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613ba5826135ae565b9150613bb0836135ae565b925082613bc057613bbf613b3c565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613c1257607f821691505b602082108103613c2557613c24613bcb565b5b50919050565b600081519050613c3a816135b8565b92915050565b600060208284031215613c5657613c55613546565b5b6000613c6484828501613c2b565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613ca3602083613496565b9150613cae82613c6d565b602082019050919050565b60006020820190508181036000830152613cd281613c96565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613d13826135ae565b9150613d1e836135ae565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613d5757613d56613b6b565b5b828202905092915050565b6000604082019050613d776000830185613a04565b613d84602083018461365a565b9392505050565b6000613d96826135ae565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613dc857613dc7613b6b565b5b600182019050919050565b7f4e6f207472616e736665727320616c6c6f77656420696e206469766964656e6460008201527f20747261636b6572000000000000000000000000000000000000000000000000602082015250565b6000613e2f602883613496565b9150613e3a82613dd3565b604082019050919050565b60006020820190508181036000830152613e5e81613e22565b9050919050565b600081519050613e7481613998565b92915050565b600060208284031215613e9057613e8f613546565b5b6000613e9e84828501613e65565b91505092915050565b60008160011c9050919050565b6000808291508390505b6001851115613efe57808604811115613eda57613ed9613b6b565b5b6001851615613ee95780820291505b8081029050613ef785613ea7565b9450613ebe565b94509492505050565b600082613f175760019050613fd3565b81613f255760009050613fd3565b8160018114613f3b5760028114613f4557613f74565b6001915050613fd3565b60ff841115613f5757613f56613b6b565b5b8360020a915084821115613f6e57613f6d613b6b565b5b50613fd3565b5060208310610133831016604e8410600b8410161715613fa95782820a905083811115613fa457613fa3613b6b565b5b613fd3565b613fb68484846001613eb4565b92509050818404811115613fcd57613fcc613b6b565b5b81810290505b9392505050565b6000613fe5826135ae565b9150613ff0836138f6565b925061401d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613f07565b905092915050565b7f436c61696d57616974206d757374206265207570646174656420746f2062657460008201527f7765656e203120616e6420323420686f75727300000000000000000000000000602082015250565b6000614081603383613496565b915061408c82614025565b604082019050919050565b600060208201905081810360008301526140b081614074565b9050919050565b7f43616e6e6f742075706461746520636c61696d5761697420746f2073616d652060008201527f76616c7565000000000000000000000000000000000000000000000000000000602082015250565b6000614113602583613496565b915061411e826140b7565b604082019050919050565b6000602082019050818103600083015261414281614106565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006141a5602683613496565b91506141b082614149565b604082019050919050565b600060208201905081810360008301526141d481614198565b9050919050565b6141e481613a6e565b81146141ef57600080fd5b50565b600081519050614201816141db565b92915050565b60006020828403121561421d5761421c613546565b5b600061422b848285016141f2565b91505092915050565b60008151905061424381613582565b92915050565b60006020828403121561425f5761425e613546565b5b600061426d84828501614234565b91505092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006142d2602183613496565b91506142dd82614276565b604082019050919050565b60006020820190508181036000830152614301816142c5565b9050919050565b6000614313826135ae565b915061431e836135ae565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561435357614352613b6b565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614394601b83613496565b915061439f8261435e565b602082019050919050565b600060208201905081810360008301526143c381614387565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614426602483613496565b9150614431826143ca565b604082019050919050565b6000602082019050818103600083015261445581614419565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006144b8602283613496565b91506144c38261445c565b604082019050919050565b600060208201905081810360008301526144e7816144ab565b9050919050565b60006144f982613a6e565b915061450483613a6e565b9250817f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0383136000831215161561453f5761453e613b6b565b5b817f800000000000000000000000000000000000000000000000000000000000000003831260008312161561457757614576613b6b565b5b828201905092915050565b600061458d826136b0565b9050919050565b61459d81614582565b82525050565b60006040820190506145b86000830185614594565b6145c5602083018461365a565b9392505050565b60006145d7826135ae565b91506145e2836135ae565b9250828210156145f5576145f4613b6b565b5b828203905092915050565b600061460b82613a6e565b915061461683613a6e565b9250827f80000000000000000000000000000000000000000000000000000000000000000182126000841215161561465157614650613b6b565b5b827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01821360008412161561468957614688613b6b565b5b828203905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006146ca601f83613496565b91506146d582614694565b602082019050919050565b600060208201905081810360008301526146f9816146bd565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061475c602183613496565b915061476782614700565b604082019050919050565b6000602082019050818103600083015261478b8161474f565b905091905056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122000137031a057e62374a925a6db9f1311c684fe2956ae64db11397ae10c4f0bb764736f6c634300080d0033
Deployed Bytecode Sourcemap
36951:13846:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42746:21;:19;:21::i;:::-;36951:13846;;;;;43141:428;;;:::i;:::-;;38919:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39950:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45900:115;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38784:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38493:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39196:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50068:471;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38177:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39607:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44818:247;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38137:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39105:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42938:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40127:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40975:721;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45073:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45776:116;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43577:106;;;;;;;;;;;;;:::i;:::-;;38233:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39302:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17743:148;;;;;;;;;;;;;:::i;:::-;;49444:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37693:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49289:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17107:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44379:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39010:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40353:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44509:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39437:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44683:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37810:82;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50623:169;;;;;;;;;;;;;:::i;:::-;;42783:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39799:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45659:109;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38696:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45279:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18046:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46023:1270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;47998:1283;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;43141:428;43222:1;43206:13;:11;:13::i;:::-;:17;43198:26;;;;;;43253:1;43241:9;:13;43237:325;;;43299:105;43376:13;:11;:13::i;:::-;43347:26;37154:8;43348:9;43347:15;;:26;;;;:::i;:::-;:42;;;;:::i;:::-;43299:25;;:29;;:105;;;;:::i;:::-;43271:25;:133;;;;43445:10;43424:43;;;43457:9;43424:43;;;;;;:::i;:::-;;;;;;;;43510:40;43540:9;43510:25;;:29;;:40;;;;:::i;:::-;43482:25;:68;;;;43237:325;43141:428::o;38919:83::-;38956:13;38989:5;38982:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38919:83;:::o;39950:169::-;40033:4;40050:39;40059:12;:10;:12::i;:::-;40073:7;40082:6;40050:8;:39::i;:::-;40107:4;40100:11;;39950:169;;;;:::o;45900:115::-;45958:7;45985:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45978:29;;45900:115;:::o;38784:45::-;;;;;;;;;;;;;:::o;38493:106::-;;;;;;;;;;;;;:::o;39196:100::-;39249:7;39276:12;;39269:19;;39196:100;:::o;50068:471::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;50184:10:::1;50180:352;50208:10;;:17;;50200:5;:25;50180:352;;;50250:15;50268:10;;50279:5;50268:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;50250:35;;50300:14;50334:5;50317:7;;50325:5;50317:14;;;;;;;:::i;:::-;;;;;;;;:22;;;;:::i;:::-;50300:39;;50368:31;;50358:6;:41;50354:165;;50420:28;50432:7;50441:6;50420:11;:28::i;:::-;50467:15;;;;;;;;;;;:19;;;50487:7;50496:6;50467:36;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;50354:165;50235:297;;50227:7;;;;;:::i;:::-;;;;50180:352;;;;50068:471:::0;;;;:::o;38177:49::-;;;;;;;;;;;;;;;;;:::o;39607:184::-;39686:4;39711:5;39703:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;39779:4;39772:11;;39607:184;;;;;:::o;44818:247::-;44887:7;37154:8;44914:131;:115;44992:28;:36;45021:6;44992:36;;;;;;;;;;;;;;;;44914:63;:48;44944:17;44954:6;44944:9;:17::i;:::-;44914:25;;:29;;:48;;;;:::i;:::-;:61;:63::i;:::-;:77;;:115;;;;:::i;:::-;:129;:131::i;:::-;:143;;;;:::i;:::-;44907:150;;44818:247;;;:::o;38137:33::-;;;;:::o;39105:83::-;39146:5;39171:9;;;;;;;;;;;39164:16;;39105:83;:::o;42938:195::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43015:23:::1;43027:7;43036:1;43015:11;:23::i;:::-;43049:15;;;;;;;;;;;:22;;;43072:7;43049:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;43117:7;43096:29;;;;;;;;;;;;42938:195:::0;:::o;40127:218::-;40215:4;40232:83;40241:12;:10;:12::i;:::-;40255:7;40264:50;40303:10;40264:11;:25;40276:12;:10;:12::i;:::-;40264:25;;;;;;;;;;;;;;;:34;40290:7;40264:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;40232:8;:83::i;:::-;40333:4;40326:11;;40127:218;;;;:::o;40975:721::-;41037:15;41055;;;;;;;;;;;:25;;;41081:7;41055:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41037:52;;41104:15;;;;;;;;;;;:37;;;41142:7;41104:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41100:540;;41182:31;;41171:7;:42;41167:295;;41234:29;41246:7;41255;41234:11;:29::i;:::-;41282:15;;;;;;;;;;;:19;;;41302:7;41311;41282:37;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41167:295;;;41373:23;41385:7;41394:1;41373:11;:23::i;:::-;41415:15;;;;;;;;;;;:22;;;41438:7;41415:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41167:295;41100:540;;;41518:1;41497:18;41507:7;41497:9;:18::i;:::-;:22;41494:135;;;41540:23;41552:7;41561:1;41540:11;:23::i;:::-;41582:15;;;;;;;;;;;:22;;;41605:7;41582:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41494:135;41100:540;41650:38;41673:7;41683:4;41650:14;:38::i;:::-;;41026:670;40975:721;:::o;45073:198::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;45253:9:::1;;;;;;;;;;;45247:2;:15;;;;:::i;:::-;45217:26;:46;;;;:::i;:::-;45183:31;:80;;;;45073:198:::0;:::o;45776:116::-;45826:7;45853:31;;45846:38;;45776:116;:::o;43577:106::-;43631:44;43663:10;43631:23;:44::i;:::-;;43577:106::o;38233:31::-;;;;:::o;39302:127::-;39376:7;39403:9;:18;39413:7;39403:18;;;;;;;;;;;;;;;;39396:25;;39302:127;;;:::o;17743:148::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17850:1:::1;17813:40;;17834:6;::::0;::::1;;;;;;;;17813:40;;;;;;;;;;;;17881:1;17864:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;17743:148::o:0;49444:128::-;49512:7;49539:16;:25;49556:7;49539:25;;;;;;;;;;;;;;;;49532:32;;49444:128;;;:::o;37693:40::-;;;;:::o;49289:147::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;49394:34:::1;49409:7;49418:9;49394:14;:34::i;:::-;;49289:147:::0;;:::o;17107:79::-;17145:7;17172:6;;;;;;;;;;;17165:13;;17107:79;:::o;44379:122::-;44436:7;44463:30;44486:6;44463:22;:30::i;:::-;44456:37;;44379:122;;;:::o;39010:87::-;39049:13;39082:7;39075:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39010:87;:::o;40353:269::-;40446:4;40463:129;40472:12;:10;:12::i;:::-;40486:7;40495:96;40534:15;40495:96;;;;;;;;;;;;;;;;;:11;:25;40507:12;:10;:12::i;:::-;40495:25;;;;;;;;;;;;;;;:34;40521:7;40495:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;40463:8;:129::i;:::-;40610:4;40603:11;;40353:269;;;;:::o;44509:166::-;44578:7;44605:62;44640:18;:26;44659:6;44640:26;;;;;;;;;;;;;;;;44605:30;44628:6;44605:22;:30::i;:::-;:34;;:62;;;;:::i;:::-;44598:69;;44509:166;;;:::o;39437:162::-;39494:4;39519:5;39511:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;39587:4;39580:11;;39437:162;;;;:::o;44683:127::-;44749:7;44776:18;:26;44795:6;44776:26;;;;;;;;;;;;;;;;44769:33;;44683:127;;;:::o;37810:82::-;;;;:::o;50623:169::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;50677:19:::1;50699:9;;;;;;;;;;;:19;;;50727:4;50699:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50677:56;;50744:9;;;;;;;;;;;:18;;;50763:7;:5;:7::i;:::-;50772:11;50744:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;50666:126;50623:169::o:0;42783:147::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42898:12:::1;42861:15;;:51;;;;;;;;;;;;;;;;;;42783:147:::0;:::o;39799:143::-;39880:7;39907:11;:18;39919:5;39907:18;;;;;;;;;;;;;;;:27;39926:7;39907:27;;;;;;;;;;;;;;;;39900:34;;39799:143;;;;:::o;45659:109::-;45715:7;45742:18;;45735:25;;45659:109;:::o;38696:71::-;;;;;;;;;;;;;:::o;45279:372::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;45380:4:::1;45364:12;:20;;:45;;;;;45404:5;45388:12;:21;;45364:45;45356:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;45500:9;;45484:12;:25:::0;45476:75:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;45598:9;;45584:12;45567:41;;;;;;;;;;45631:12;45619:9;:24;;;;45279:372:::0;:::o;18046:244::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18155:1:::1;18135:22;;:8;:22;;::::0;18127:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;18245:8;18216:38;;18237:6;::::0;::::1;;;;;;;;18216:38;;;;;;;;;;;;18274:8;18265:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;18046:244:::0;:::o;46023:1270::-;46082:15;46099:12;46113:31;46155:29;46186:22;46210:21;46242;46265:38;46326:8;46316:18;;46353:15;;;;;;;;;;;:29;;;46383:7;46353:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46345:46;;46429:3;46402:30;;46456:1;46447:5;:10;46443:473;;46495:18;;46486:5;46478:35;46474:431;;;46561:37;46578:18;;46561:5;:9;;:37;;;;:::i;:::-;46534:64;;46474:431;;;46652:32;46712:18;;46687:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:43;:113;;46799:1;46687:113;;;46750:46;46777:18;;46750:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:26;;:46;;;;:::i;:::-;46687:113;46652:148;;46846:43;46863:24;46846:5;:9;;:43;;;;:::i;:::-;46819:70;;46633:272;46474:431;46443:473;46950:31;46973:7;46950:22;:31::i;:::-;46926:55;;47009:31;47032:7;47009:22;:31::i;:::-;46992:48;;47067:14;:23;47082:7;47067:23;;;;;;;;;;;;;;;;47051:39;;47133:1;47117:13;:17;:52;;47168:1;47117:52;;;47137:28;47155:9;;47137:13;:17;;:28;;;;:::i;:::-;47117:52;47101:68;;47229:15;47213:13;:31;:72;;47284:1;47213:72;;;47247:34;47265:15;47247:13;:17;;:34;;;;:::i;:::-;47213:72;47180:105;;46023:1270;;;;;;;;;:::o;47998:1283::-;48044:7;48053;48062;48082:28;48113:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48082:53;;48176:1;48152:20;:25;48148:91;;48202:1;48205;48208:18;;48194:33;;;;;;;;;48148:91;48249:27;48279:18;;48249:48;;48308:15;48338;48356:9;48338:27;;48376:18;48409:14;48438:727;48455:3;48445:7;:13;:50;;;;;48475:20;48462:10;:33;48445:50;48438:727;;;48512:21;;;;;:::i;:::-;;;;48575:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48552:19;:45;48548:109;;48640:1;48618:23;;48548:109;48671:15;48689;;;;;;;;;;;:29;;;48719:19;48689:50;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48671:68;;48758:37;48771:14;:23;48786:7;48771:23;;;;;;;;;;;;;;;;48758:12;:37::i;:::-;48754:172;;;48820:38;48843:7;48853:4;48820:14;:38::i;:::-;48816:95;;;48883:8;;;;;:::i;:::-;;;;48816:95;48754:172;48940:12;;;;;:::i;:::-;;;;48967:18;48988:9;48967:30;;49026:10;49016:7;:20;49012:107;;;49067:36;49079:23;49091:10;49079:7;:11;;:23;;;;:::i;:::-;49067:7;:11;;:36;;;;:::i;:::-;49057:46;;49012:107;49143:10;49133:20;;48497:668;;48438:727;;;49196:19;49175:18;:40;;;;49234:10;49246:6;49254:18;;49226:47;;;;;;;;;;;;47998:1283;;;;;;:::o;6381:471::-;6439:7;6689:1;6684;:6;6680:47;;6714:1;6707:8;;;;6680:47;6739:9;6755:1;6751;:5;;;;:::i;:::-;6739:17;;6784:1;6779;6775;:5;;;;:::i;:::-;:10;6767:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;6843:1;6836:8;;;6381:471;;;;;:::o;5027:181::-;5085:7;5105:9;5121:1;5117;:5;;;;:::i;:::-;5105:17;;5146:1;5141;:6;;5133:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;5199:1;5192:8;;;5027:181;;;;:::o;9599:98::-;9652:7;9679:10;9672:17;;9599:98;:::o;40630:337::-;40740:1;40723:19;;:5;:19;;;40715:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40821:1;40802:21;;:7;:21;;;40794:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40905:6;40875:11;:18;40887:5;40875:18;;;;;;;;;;;;;;;:27;40894:7;40875:27;;;;;;;;;;;;;;;:36;;;;40943:7;40927:32;;40936:5;40927:32;;;40952:6;40927:32;;;;;;:::i;:::-;;;;;;;;40630:337;;;:::o;47541:449::-;47619:22;47644:18;47654:7;47644:9;:18::i;:::-;47619:43;;47690:14;47677:10;:27;47673:310;;;47721:18;47742:30;47757:14;47742:10;:14;;:30;;;;:::i;:::-;47721:51;;47787:26;47793:7;47802:10;47787:5;:26::i;:::-;47706:119;47673:310;;;47848:14;47835:10;:27;47831:152;;;47879:18;47900:30;47919:10;47900:14;:18;;:30;;;;:::i;:::-;47879:51;;47945:26;47951:7;47960:10;47945:5;:26::i;:::-;47864:119;47831:152;47673:310;47608:382;47541:449;;:::o;4032:148::-;4088:6;4107:8;4125:1;4107:20;;4151:1;4146;:6;;4138:15;;;;;;4171:1;4164:8;;;4032:148;;;:::o;3548:176::-;3604:6;3623:8;3638:1;3634;:5;;;;:::i;:::-;3623:16;;3664:1;3659;:6;;:16;;;;;3674:1;3669;:6;;3659:16;3658:38;;;;3685:1;3681;:5;:14;;;;;3694:1;3690;:5;3681:14;3658:38;3650:47;;;;;;3715:1;3708:8;;;3548:176;;;;:::o;3870:127::-;3926:7;3959:1;3954;:6;;3946:15;;;;;;3987:1;3972:17;;3870:127;;;:::o;49578:482::-;49660:4;49677:14;49694:32;49718:7;49694:23;:32::i;:::-;49677:49;;49750:1;49741:6;:10;49737:293;;;49768:20;49791:16;:25;49808:7;49791:25;;;;;;;;;;;;;;;;49768:48;;49859:24;49870:12;49859:6;:10;;:24;;;;:::i;:::-;49831:16;:25;49848:7;49831:25;;;;;;;;;;;;;;;:52;;;;49924:15;49898:14;:23;49913:7;49898:23;;;;;;;;;;;;;;;:41;;;;49982:9;49959:33;;49965:7;49959:33;;;49974:6;49959:33;;;;;;:::i;:::-;;;;;;;;50014:4;50007:11;;;;;;49737:293;50047:5;50040:12;;;49578:482;;;;;:::o;43691:680::-;43764:7;43784:29;43816:28;43839:4;43816:22;:28::i;:::-;43784:60;;43883:1;43859:21;:25;43855:490;;;43928:51;43957:21;43928:18;:24;43947:4;43928:24;;;;;;;;;;;;;;;;:28;;:51;;;;:::i;:::-;43901:18;:24;43920:4;43901:24;;;;;;;;;;;;;;;:78;;;;44017:4;43999:46;;;44023:21;43999:46;;;;;;:::i;:::-;;;;;;;;44060:12;44075:9;;;;;;;;;;;:18;;;44094:4;44100:21;44075:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44060:62;;44142:7;44137:154;;44197:51;44226:21;44197:18;:24;44216:4;44197:24;;;;;;;;;;;;;;;;:28;;:51;;;;:::i;:::-;44170:18;:24;44189:4;44170:24;;;;;;;;;;;;;;;:78;;;;44274:1;44267:8;;;;;;44137:154;44312:21;44305:28;;;;;;43855:490;44362:1;44355:8;;;43691:680;;;;:::o;5930:192::-;6016:7;6049:1;6044;:6;;6052:12;6036:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6076:9;6092:1;6088;:5;;;;:::i;:::-;6076:17;;6113:1;6106:8;;;5930:192;;;;;:::o;5491:136::-;5549:7;5576:43;5580:1;5583;5576:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5569:50;;5491:136;;;;:::o;3364:176::-;3420:6;3439:8;3454:1;3450;:5;;;;:::i;:::-;3439:16;;3480:1;3475;:6;;:16;;;;;3490:1;3485;:6;;3475:16;3474:38;;;;3501:1;3497;:5;:14;;;;;3510:1;3506;:5;3497:14;3474:38;3466:47;;;;;;3531:1;3524:8;;;3364:176;;;;:::o;47301:232::-;47368:4;47405:15;47389:13;:31;47385:76;;;47444:5;47437:12;;;;47385:76;47516:9;;47478:34;47498:13;47478:15;:19;;:34;;;;:::i;:::-;:47;;47471:54;;47301:232;;;;:::o;41704:472::-;41807:1;41788:21;;:7;:21;;;41780:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;41871:24;41888:6;41871:12;;:16;;:24;;;;:::i;:::-;41856:12;:39;;;;41927:30;41950:6;41927:9;:18;41937:7;41927:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;41906:9;:18;41916:7;41906:18;;;;;;;;;;;;;;;:51;;;;41994:7;41973:37;;41990:1;41973:37;;;42003:6;41973:37;;;;;;:::i;:::-;;;;;;;;42061:107;42113:54;42114:37;42144:6;42114:25;;:29;;:37;;;;:::i;:::-;42113:52;:54::i;:::-;42061:28;:37;42090:7;42061:37;;;;;;;;;;;;;;;;:51;;:107;;;;:::i;:::-;42021:28;:37;42050:7;42021:37;;;;;;;;;;;;;;;:147;;;;41704:472;;:::o;42184:516::-;42287:1;42268:21;;:7;:21;;;42260:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42361:68;42384:6;42361:68;;;;;;;;;;;;;;;;;:9;:18;42371:7;42361:18;;;;;;;;;;;;;;;;:22;;:68;;;;;:::i;:::-;42340:9;:18;42350:7;42340:18;;;;;;;;;;;;;;;:89;;;;42455:24;42472:6;42455:12;;:16;;:24;;;;:::i;:::-;42440:12;:39;;;;42521:1;42495:37;;42504:7;42495:37;;;42525:6;42495:37;;;;;;:::i;:::-;;;;;;;;42585:107;42637:54;42638:37;42668:6;42638:25;;:29;;:37;;;;:::i;:::-;42637:52;:54::i;:::-;42585:28;:37;42614:7;42585:37;;;;;;;;;;;;;;;;:51;;:107;;;;:::i;:::-;42545:28;:37;42574:7;42545:37;;;;;;;;;;;;;;;:147;;;;42184:516;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1601:117;1710:1;1707;1700:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:118::-;3581:24;3599:5;3581:24;:::i;:::-;3576:3;3569:37;3494:118;;:::o;3618:222::-;3711:4;3749:2;3738:9;3734:18;3726:26;;3762:71;3830:1;3819:9;3815:17;3806:6;3762:71;:::i;:::-;3618:222;;;;:::o;3846:60::-;3874:3;3895:5;3888:12;;3846:60;;;:::o;3912:142::-;3962:9;3995:53;4013:34;4022:24;4040:5;4022:24;:::i;:::-;4013:34;:::i;:::-;3995:53;:::i;:::-;3982:66;;3912:142;;;:::o;4060:126::-;4110:9;4143:37;4174:5;4143:37;:::i;:::-;4130:50;;4060:126;;;:::o;4192:139::-;4255:9;4288:37;4319:5;4288:37;:::i;:::-;4275:50;;4192:139;;;:::o;4337:157::-;4437:50;4481:5;4437:50;:::i;:::-;4432:3;4425:63;4337:157;;:::o;4500:248::-;4606:4;4644:2;4633:9;4629:18;4621:26;;4657:84;4738:1;4727:9;4723:17;4714:6;4657:84;:::i;:::-;4500:248;;;;:::o;4754:152::-;4830:9;4863:37;4894:5;4863:37;:::i;:::-;4850:50;;4754:152;;;:::o;4912:183::-;5025:63;5082:5;5025:63;:::i;:::-;5020:3;5013:76;4912:183;;:::o;5101:274::-;5220:4;5258:2;5247:9;5243:18;5235:26;;5271:97;5365:1;5354:9;5350:17;5341:6;5271:97;:::i;:::-;5101:274;;;;:::o;5381:117::-;5490:1;5487;5480:12;5504:117;5613:1;5610;5603:12;5627:117;5736:1;5733;5726:12;5767:568;5840:8;5850:6;5900:3;5893:4;5885:6;5881:17;5877:27;5867:122;;5908:79;;:::i;:::-;5867:122;6021:6;6008:20;5998:30;;6051:18;6043:6;6040:30;6037:117;;;6073:79;;:::i;:::-;6037:117;6187:4;6179:6;6175:17;6163:29;;6241:3;6233:4;6225:6;6221:17;6211:8;6207:32;6204:41;6201:128;;;6248:79;;:::i;:::-;6201:128;5767:568;;;;;:::o;6358:::-;6431:8;6441:6;6491:3;6484:4;6476:6;6472:17;6468:27;6458:122;;6499:79;;:::i;:::-;6458:122;6612:6;6599:20;6589:30;;6642:18;6634:6;6631:30;6628:117;;;6664:79;;:::i;:::-;6628:117;6778:4;6770:6;6766:17;6754:29;;6832:3;6824:4;6816:6;6812:17;6802:8;6798:32;6795:41;6792:128;;;6839:79;;:::i;:::-;6792:128;6358:568;;;;;:::o;6932:934::-;7054:6;7062;7070;7078;7127:2;7115:9;7106:7;7102:23;7098:32;7095:119;;;7133:79;;:::i;:::-;7095:119;7281:1;7270:9;7266:17;7253:31;7311:18;7303:6;7300:30;7297:117;;;7333:79;;:::i;:::-;7297:117;7446:80;7518:7;7509:6;7498:9;7494:22;7446:80;:::i;:::-;7428:98;;;;7224:312;7603:2;7592:9;7588:18;7575:32;7634:18;7626:6;7623:30;7620:117;;;7656:79;;:::i;:::-;7620:117;7769:80;7841:7;7832:6;7821:9;7817:22;7769:80;:::i;:::-;7751:98;;;;7546:313;6932:934;;;;;;;:::o;7872:329::-;7931:6;7980:2;7968:9;7959:7;7955:23;7951:32;7948:119;;;7986:79;;:::i;:::-;7948:119;8106:1;8131:53;8176:7;8167:6;8156:9;8152:22;8131:53;:::i;:::-;8121:63;;8077:117;7872:329;;;;:::o;8207:619::-;8284:6;8292;8300;8349:2;8337:9;8328:7;8324:23;8320:32;8317:119;;;8355:79;;:::i;:::-;8317:119;8475:1;8500:53;8545:7;8536:6;8525:9;8521:22;8500:53;:::i;:::-;8490:63;;8446:117;8602:2;8628:53;8673:7;8664:6;8653:9;8649:22;8628:53;:::i;:::-;8618:63;;8573:118;8730:2;8756:53;8801:7;8792:6;8781:9;8777:22;8756:53;:::i;:::-;8746:63;;8701:118;8207:619;;;;;:::o;8832:86::-;8867:7;8907:4;8900:5;8896:16;8885:27;;8832:86;;;:::o;8924:112::-;9007:22;9023:5;9007:22;:::i;:::-;9002:3;8995:35;8924:112;;:::o;9042:214::-;9131:4;9169:2;9158:9;9154:18;9146:26;;9182:67;9246:1;9235:9;9231:17;9222:6;9182:67;:::i;:::-;9042:214;;;;:::o;9262:329::-;9321:6;9370:2;9358:9;9349:7;9345:23;9341:32;9338:119;;;9376:79;;:::i;:::-;9338:119;9496:1;9521:53;9566:7;9557:6;9546:9;9542:22;9521:53;:::i;:::-;9511:63;;9467:117;9262:329;;;;:::o;9597:104::-;9642:7;9671:24;9689:5;9671:24;:::i;:::-;9660:35;;9597:104;;;:::o;9707:138::-;9788:32;9814:5;9788:32;:::i;:::-;9781:5;9778:43;9768:71;;9835:1;9832;9825:12;9768:71;9707:138;:::o;9851:155::-;9905:5;9943:6;9930:20;9921:29;;9959:41;9994:5;9959:41;:::i;:::-;9851:155;;;;:::o;10012:116::-;10082:21;10097:5;10082:21;:::i;:::-;10075:5;10072:32;10062:60;;10118:1;10115;10108:12;10062:60;10012:116;:::o;10134:133::-;10177:5;10215:6;10202:20;10193:29;;10231:30;10255:5;10231:30;:::i;:::-;10134:133;;;;:::o;10273:484::-;10346:6;10354;10403:2;10391:9;10382:7;10378:23;10374:32;10371:119;;;10409:79;;:::i;:::-;10371:119;10529:1;10554:61;10607:7;10598:6;10587:9;10583:22;10554:61;:::i;:::-;10544:71;;10500:125;10664:2;10690:50;10732:7;10723:6;10712:9;10708:22;10690:50;:::i;:::-;10680:60;;10635:115;10273:484;;;;;:::o;10763:118::-;10850:24;10868:5;10850:24;:::i;:::-;10845:3;10838:37;10763:118;;:::o;10887:222::-;10980:4;11018:2;11007:9;11003:18;10995:26;;11031:71;11099:1;11088:9;11084:17;11075:6;11031:71;:::i;:::-;10887:222;;;;:::o;11115:474::-;11183:6;11191;11240:2;11228:9;11219:7;11215:23;11211:32;11208:119;;;11246:79;;:::i;:::-;11208:119;11366:1;11391:53;11436:7;11427:6;11416:9;11412:22;11391:53;:::i;:::-;11381:63;;11337:117;11493:2;11519:53;11564:7;11555:6;11544:9;11540:22;11519:53;:::i;:::-;11509:63;;11464:118;11115:474;;;;;:::o;11595:76::-;11631:7;11660:5;11649:16;;11595:76;;;:::o;11677:115::-;11762:23;11779:5;11762:23;:::i;:::-;11757:3;11750:36;11677:115;;:::o;11798:989::-;12083:4;12121:3;12110:9;12106:19;12098:27;;12135:71;12203:1;12192:9;12188:17;12179:6;12135:71;:::i;:::-;12216:70;12282:2;12271:9;12267:18;12258:6;12216:70;:::i;:::-;12296;12362:2;12351:9;12347:18;12338:6;12296:70;:::i;:::-;12376:72;12444:2;12433:9;12429:18;12420:6;12376:72;:::i;:::-;12458:73;12526:3;12515:9;12511:19;12502:6;12458:73;:::i;:::-;12541;12609:3;12598:9;12594:19;12585:6;12541:73;:::i;:::-;12624;12692:3;12681:9;12677:19;12668:6;12624:73;:::i;:::-;12707;12775:3;12764:9;12760:19;12751:6;12707:73;:::i;:::-;11798:989;;;;;;;;;;;:::o;12793:442::-;12942:4;12980:2;12969:9;12965:18;12957:26;;12993:71;13061:1;13050:9;13046:17;13037:6;12993:71;:::i;:::-;13074:72;13142:2;13131:9;13127:18;13118:6;13074:72;:::i;:::-;13156;13224:2;13213:9;13209:18;13200:6;13156:72;:::i;:::-;12793:442;;;;;;:::o;13241:180::-;13289:77;13286:1;13279:88;13386:4;13383:1;13376:15;13410:4;13407:1;13400:15;13427:180;13475:77;13472:1;13465:88;13572:4;13569:1;13562:15;13596:4;13593:1;13586:15;13613:185;13653:1;13670:20;13688:1;13670:20;:::i;:::-;13665:25;;13704:20;13722:1;13704:20;:::i;:::-;13699:25;;13743:1;13733:35;;13748:18;;:::i;:::-;13733:35;13790:1;13787;13783:9;13778:14;;13613:185;;;;:::o;13804:180::-;13852:77;13849:1;13842:88;13949:4;13946:1;13939:15;13973:4;13970:1;13963:15;13990:320;14034:6;14071:1;14065:4;14061:12;14051:22;;14118:1;14112:4;14108:12;14139:18;14129:81;;14195:4;14187:6;14183:17;14173:27;;14129:81;14257:2;14249:6;14246:14;14226:18;14223:38;14220:84;;14276:18;;:::i;:::-;14220:84;14041:269;13990:320;;;:::o;14316:143::-;14373:5;14404:6;14398:13;14389:22;;14420:33;14447:5;14420:33;:::i;:::-;14316:143;;;;:::o;14465:351::-;14535:6;14584:2;14572:9;14563:7;14559:23;14555:32;14552:119;;;14590:79;;:::i;:::-;14552:119;14710:1;14735:64;14791:7;14782:6;14771:9;14767:22;14735:64;:::i;:::-;14725:74;;14681:128;14465:351;;;;:::o;14822:182::-;14962:34;14958:1;14950:6;14946:14;14939:58;14822:182;:::o;15010:366::-;15152:3;15173:67;15237:2;15232:3;15173:67;:::i;:::-;15166:74;;15249:93;15338:3;15249:93;:::i;:::-;15367:2;15362:3;15358:12;15351:19;;15010:366;;;:::o;15382:419::-;15548:4;15586:2;15575:9;15571:18;15563:26;;15635:9;15629:4;15625:20;15621:1;15610:9;15606:17;15599:47;15663:131;15789:4;15663:131;:::i;:::-;15655:139;;15382:419;;;:::o;15807:180::-;15855:77;15852:1;15845:88;15952:4;15949:1;15942:15;15976:4;15973:1;15966:15;15993:348;16033:7;16056:20;16074:1;16056:20;:::i;:::-;16051:25;;16090:20;16108:1;16090:20;:::i;:::-;16085:25;;16278:1;16210:66;16206:74;16203:1;16200:81;16195:1;16188:9;16181:17;16177:105;16174:131;;;16285:18;;:::i;:::-;16174:131;16333:1;16330;16326:9;16315:20;;15993:348;;;;:::o;16347:332::-;16468:4;16506:2;16495:9;16491:18;16483:26;;16519:71;16587:1;16576:9;16572:17;16563:6;16519:71;:::i;:::-;16600:72;16668:2;16657:9;16653:18;16644:6;16600:72;:::i;:::-;16347:332;;;;;:::o;16685:233::-;16724:3;16747:24;16765:5;16747:24;:::i;:::-;16738:33;;16793:66;16786:5;16783:77;16780:103;;16863:18;;:::i;:::-;16780:103;16910:1;16903:5;16899:13;16892:20;;16685:233;;;:::o;16924:227::-;17064:34;17060:1;17052:6;17048:14;17041:58;17133:10;17128:2;17120:6;17116:15;17109:35;16924:227;:::o;17157:366::-;17299:3;17320:67;17384:2;17379:3;17320:67;:::i;:::-;17313:74;;17396:93;17485:3;17396:93;:::i;:::-;17514:2;17509:3;17505:12;17498:19;;17157:366;;;:::o;17529:419::-;17695:4;17733:2;17722:9;17718:18;17710:26;;17782:9;17776:4;17772:20;17768:1;17757:9;17753:17;17746:47;17810:131;17936:4;17810:131;:::i;:::-;17802:139;;17529:419;;;:::o;17954:137::-;18008:5;18039:6;18033:13;18024:22;;18055:30;18079:5;18055:30;:::i;:::-;17954:137;;;;:::o;18097:345::-;18164:6;18213:2;18201:9;18192:7;18188:23;18184:32;18181:119;;;18219:79;;:::i;:::-;18181:119;18339:1;18364:61;18417:7;18408:6;18397:9;18393:22;18364:61;:::i;:::-;18354:71;;18310:125;18097:345;;;;:::o;18448:102::-;18490:8;18537:5;18534:1;18530:13;18509:34;;18448:102;;;:::o;18556:848::-;18617:5;18624:4;18648:6;18639:15;;18672:5;18663:14;;18686:712;18707:1;18697:8;18694:15;18686:712;;;18802:4;18797:3;18793:14;18787:4;18784:24;18781:50;;;18811:18;;:::i;:::-;18781:50;18861:1;18851:8;18847:16;18844:451;;;19276:4;19269:5;19265:16;19256:25;;18844:451;19326:4;19320;19316:15;19308:23;;19356:32;19379:8;19356:32;:::i;:::-;19344:44;;18686:712;;;18556:848;;;;;;;:::o;19410:1073::-;19464:5;19655:8;19645:40;;19676:1;19667:10;;19678:5;;19645:40;19704:4;19694:36;;19721:1;19712:10;;19723:5;;19694:36;19790:4;19838:1;19833:27;;;;19874:1;19869:191;;;;19783:277;;19833:27;19851:1;19842:10;;19853:5;;;19869:191;19914:3;19904:8;19901:17;19898:43;;;19921:18;;:::i;:::-;19898:43;19970:8;19967:1;19963:16;19954:25;;20005:3;19998:5;19995:14;19992:40;;;20012:18;;:::i;:::-;19992:40;20045:5;;;19783:277;;20169:2;20159:8;20156:16;20150:3;20144:4;20141:13;20137:36;20119:2;20109:8;20106:16;20101:2;20095:4;20092:12;20088:35;20072:111;20069:246;;;20225:8;20219:4;20215:19;20206:28;;20260:3;20253:5;20250:14;20247:40;;;20267:18;;:::i;:::-;20247:40;20300:5;;20069:246;20340:42;20378:3;20368:8;20362:4;20359:1;20340:42;:::i;:::-;20325:57;;;;20414:4;20409:3;20405:14;20398:5;20395:25;20392:51;;;20423:18;;:::i;:::-;20392:51;20472:4;20465:5;20461:16;20452:25;;19410:1073;;;;;;:::o;20489:281::-;20547:5;20571:23;20589:4;20571:23;:::i;:::-;20563:31;;20615:25;20631:8;20615:25;:::i;:::-;20603:37;;20659:104;20696:66;20686:8;20680:4;20659:104;:::i;:::-;20650:113;;20489:281;;;;:::o;20776:238::-;20916:34;20912:1;20904:6;20900:14;20893:58;20985:21;20980:2;20972:6;20968:15;20961:46;20776:238;:::o;21020:366::-;21162:3;21183:67;21247:2;21242:3;21183:67;:::i;:::-;21176:74;;21259:93;21348:3;21259:93;:::i;:::-;21377:2;21372:3;21368:12;21361:19;;21020:366;;;:::o;21392:419::-;21558:4;21596:2;21585:9;21581:18;21573:26;;21645:9;21639:4;21635:20;21631:1;21620:9;21616:17;21609:47;21673:131;21799:4;21673:131;:::i;:::-;21665:139;;21392:419;;;:::o;21817:224::-;21957:34;21953:1;21945:6;21941:14;21934:58;22026:7;22021:2;22013:6;22009:15;22002:32;21817:224;:::o;22047:366::-;22189:3;22210:67;22274:2;22269:3;22210:67;:::i;:::-;22203:74;;22286:93;22375:3;22286:93;:::i;:::-;22404:2;22399:3;22395:12;22388:19;;22047:366;;;:::o;22419:419::-;22585:4;22623:2;22612:9;22608:18;22600:26;;22672:9;22666:4;22662:20;22658:1;22647:9;22643:17;22636:47;22700:131;22826:4;22700:131;:::i;:::-;22692:139;;22419:419;;;:::o;22844:225::-;22984:34;22980:1;22972:6;22968:14;22961:58;23053:8;23048:2;23040:6;23036:15;23029:33;22844:225;:::o;23075:366::-;23217:3;23238:67;23302:2;23297:3;23238:67;:::i;:::-;23231:74;;23314:93;23403:3;23314:93;:::i;:::-;23432:2;23427:3;23423:12;23416:19;;23075:366;;;:::o;23447:419::-;23613:4;23651:2;23640:9;23636:18;23628:26;;23700:9;23694:4;23690:20;23686:1;23675:9;23671:17;23664:47;23728:131;23854:4;23728:131;:::i;:::-;23720:139;;23447:419;;;:::o;23872:120::-;23944:23;23961:5;23944:23;:::i;:::-;23937:5;23934:34;23924:62;;23982:1;23979;23972:12;23924:62;23872:120;:::o;23998:141::-;24054:5;24085:6;24079:13;24070:22;;24101:32;24127:5;24101:32;:::i;:::-;23998:141;;;;:::o;24145:349::-;24214:6;24263:2;24251:9;24242:7;24238:23;24234:32;24231:119;;;24269:79;;:::i;:::-;24231:119;24389:1;24414:63;24469:7;24460:6;24449:9;24445:22;24414:63;:::i;:::-;24404:73;;24360:127;24145:349;;;;:::o;24500:143::-;24557:5;24588:6;24582:13;24573:22;;24604:33;24631:5;24604:33;:::i;:::-;24500:143;;;;:::o;24649:351::-;24719:6;24768:2;24756:9;24747:7;24743:23;24739:32;24736:119;;;24774:79;;:::i;:::-;24736:119;24894:1;24919:64;24975:7;24966:6;24955:9;24951:22;24919:64;:::i;:::-;24909:74;;24865:128;24649:351;;;;:::o;25006:220::-;25146:34;25142:1;25134:6;25130:14;25123:58;25215:3;25210:2;25202:6;25198:15;25191:28;25006:220;:::o;25232:366::-;25374:3;25395:67;25459:2;25454:3;25395:67;:::i;:::-;25388:74;;25471:93;25560:3;25471:93;:::i;:::-;25589:2;25584:3;25580:12;25573:19;;25232:366;;;:::o;25604:419::-;25770:4;25808:2;25797:9;25793:18;25785:26;;25857:9;25851:4;25847:20;25843:1;25832:9;25828:17;25821:47;25885:131;26011:4;25885:131;:::i;:::-;25877:139;;25604:419;;;:::o;26029:305::-;26069:3;26088:20;26106:1;26088:20;:::i;:::-;26083:25;;26122:20;26140:1;26122:20;:::i;:::-;26117:25;;26276:1;26208:66;26204:74;26201:1;26198:81;26195:107;;;26282:18;;:::i;:::-;26195:107;26326:1;26323;26319:9;26312:16;;26029:305;;;;:::o;26340:177::-;26480:29;26476:1;26468:6;26464:14;26457:53;26340:177;:::o;26523:366::-;26665:3;26686:67;26750:2;26745:3;26686:67;:::i;:::-;26679:74;;26762:93;26851:3;26762:93;:::i;:::-;26880:2;26875:3;26871:12;26864:19;;26523:366;;;:::o;26895:419::-;27061:4;27099:2;27088:9;27084:18;27076:26;;27148:9;27142:4;27138:20;27134:1;27123:9;27119:17;27112:47;27176:131;27302:4;27176:131;:::i;:::-;27168:139;;26895:419;;;:::o;27320:223::-;27460:34;27456:1;27448:6;27444:14;27437:58;27529:6;27524:2;27516:6;27512:15;27505:31;27320:223;:::o;27549:366::-;27691:3;27712:67;27776:2;27771:3;27712:67;:::i;:::-;27705:74;;27788:93;27877:3;27788:93;:::i;:::-;27906:2;27901:3;27897:12;27890:19;;27549:366;;;:::o;27921:419::-;28087:4;28125:2;28114:9;28110:18;28102:26;;28174:9;28168:4;28164:20;28160:1;28149:9;28145:17;28138:47;28202:131;28328:4;28202:131;:::i;:::-;28194:139;;27921:419;;;:::o;28346:221::-;28486:34;28482:1;28474:6;28470:14;28463:58;28555:4;28550:2;28542:6;28538:15;28531:29;28346:221;:::o;28573:366::-;28715:3;28736:67;28800:2;28795:3;28736:67;:::i;:::-;28729:74;;28812:93;28901:3;28812:93;:::i;:::-;28930:2;28925:3;28921:12;28914:19;;28573:366;;;:::o;28945:419::-;29111:4;29149:2;29138:9;29134:18;29126:26;;29198:9;29192:4;29188:20;29184:1;29173:9;29169:17;29162:47;29226:131;29352:4;29226:131;:::i;:::-;29218:139;;28945:419;;;:::o;29370:525::-;29409:3;29428:19;29445:1;29428:19;:::i;:::-;29423:24;;29461:19;29478:1;29461:19;:::i;:::-;29456:24;;29649:1;29581:66;29577:74;29574:1;29570:82;29565:1;29562;29558:9;29551:17;29547:106;29544:132;;;29656:18;;:::i;:::-;29544:132;29836:1;29768:66;29764:74;29761:1;29757:82;29753:1;29750;29746:9;29742:98;29739:124;;;29843:18;;:::i;:::-;29739:124;29887:1;29884;29880:9;29873:16;;29370:525;;;;:::o;29901:134::-;29959:9;29992:37;30023:5;29992:37;:::i;:::-;29979:50;;29901:134;;;:::o;30041:147::-;30136:45;30175:5;30136:45;:::i;:::-;30131:3;30124:58;30041:147;;:::o;30194:348::-;30323:4;30361:2;30350:9;30346:18;30338:26;;30374:79;30450:1;30439:9;30435:17;30426:6;30374:79;:::i;:::-;30463:72;30531:2;30520:9;30516:18;30507:6;30463:72;:::i;:::-;30194:348;;;;;:::o;30548:191::-;30588:4;30608:20;30626:1;30608:20;:::i;:::-;30603:25;;30642:20;30660:1;30642:20;:::i;:::-;30637:25;;30681:1;30678;30675:8;30672:34;;;30686:18;;:::i;:::-;30672:34;30731:1;30728;30724:9;30716:17;;30548:191;;;;:::o;30745:527::-;30784:4;30804:19;30821:1;30804:19;:::i;:::-;30799:24;;30837:19;30854:1;30837:19;:::i;:::-;30832:24;;31026:1;30958:66;30954:74;30951:1;30947:82;30942:1;30939;30935:9;30928:17;30924:106;30921:132;;;31033:18;;:::i;:::-;30921:132;31212:1;31144:66;31140:74;31137:1;31133:82;31129:1;31126;31122:9;31118:98;31115:124;;;31219:18;;:::i;:::-;31115:124;31264:1;31261;31257:9;31249:17;;30745:527;;;;:::o;31278:181::-;31418:33;31414:1;31406:6;31402:14;31395:57;31278:181;:::o;31465:366::-;31607:3;31628:67;31692:2;31687:3;31628:67;:::i;:::-;31621:74;;31704:93;31793:3;31704:93;:::i;:::-;31822:2;31817:3;31813:12;31806:19;;31465:366;;;:::o;31837:419::-;32003:4;32041:2;32030:9;32026:18;32018:26;;32090:9;32084:4;32080:20;32076:1;32065:9;32061:17;32054:47;32118:131;32244:4;32118:131;:::i;:::-;32110:139;;31837:419;;;:::o;32262:220::-;32402:34;32398:1;32390:6;32386:14;32379:58;32471:3;32466:2;32458:6;32454:15;32447:28;32262:220;:::o;32488:366::-;32630:3;32651:67;32715:2;32710:3;32651:67;:::i;:::-;32644:74;;32727:93;32816:3;32727:93;:::i;:::-;32845:2;32840:3;32836:12;32829:19;;32488:366;;;:::o;32860:419::-;33026:4;33064:2;33053:9;33049:18;33041:26;;33113:9;33107:4;33103:20;33099:1;33088:9;33084:17;33077:47;33141:131;33267:4;33141:131;:::i;:::-;33133:139;;32860:419;;;:::o
Swarm Source
ipfs://7e897a661b6ac92fad2bc562da17cca78723a348d9805f2baeeccd38b8ba7531
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.