Overview
ETH Balance
1.946134286995448848 ETH
Eth Value
$4,910.80 (@ $2,523.36/ETH)Token Holdings
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 11,300 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Round Up Cows | 20637930 | 45 mins ago | IN | 0 ETH | 0.00004137 | ||||
Ship Milk | 20637925 | 46 mins ago | IN | 0 ETH | 0.00006808 | ||||
Round Up Cows | 20636597 | 5 hrs ago | IN | 0 ETH | 0.00011169 | ||||
Unsta Qe | 20636368 | 6 hrs ago | IN | 0 ETH | 0.0003417 | ||||
Ship Milk | 20636071 | 7 hrs ago | IN | 0 ETH | 0.00016786 | ||||
Round Up Cows | 20635821 | 7 hrs ago | IN | 0 ETH | 0.00008461 | ||||
Ship Milk | 20635818 | 7 hrs ago | IN | 0 ETH | 0.00022471 | ||||
Transfer | 20635713 | 8 hrs ago | IN | 2 ETH | 0.00005931 | ||||
Round Up Cows | 20635490 | 8 hrs ago | IN | 0 ETH | 0.00011861 | ||||
Round Up Cows | 20635273 | 9 hrs ago | IN | 0 ETH | 0.00022793 | ||||
Round Up Cows | 20635155 | 10 hrs ago | IN | 0 ETH | 0.00016665 | ||||
Qompound Lin Q | 20635049 | 10 hrs ago | IN | 0 ETH | 0.00180932 | ||||
Ship Milk | 20632287 | 19 hrs ago | IN | 0 ETH | 0.0001112 | ||||
Round Up Cows | 20631364 | 22 hrs ago | IN | 0 ETH | 0.00004375 | ||||
Qompound Lin Q | 20631359 | 22 hrs ago | IN | 0 ETH | 0.00040338 | ||||
Unsta Qe | 20630631 | 25 hrs ago | IN | 0 ETH | 0.00039961 | ||||
Unsta Qe | 20629424 | 29 hrs ago | IN | 0 ETH | 0.00066574 | ||||
Round Up Cows | 20625704 | 41 hrs ago | IN | 0 ETH | 0.00004974 | ||||
Ship Lin Qers Mi... | 20625699 | 41 hrs ago | IN | 0 ETH | 0.0000991 | ||||
Ship Milk | 20625697 | 41 hrs ago | IN | 0 ETH | 0.00018761 | ||||
Unsta Qe | 20625415 | 42 hrs ago | IN | 0 ETH | 0.0003121 | ||||
Unsta Qe | 20623246 | 2 days ago | IN | 0 ETH | 0.00042665 | ||||
Unsta Qe | 20623190 | 2 days ago | IN | 0 ETH | 0.00051082 | ||||
Round Up Cows | 20621699 | 2 days ago | IN | 0 ETH | 0.0000379 | ||||
Ship Lin Qers Mi... | 20621696 | 2 days ago | IN | 0 ETH | 0.00008368 |
Advanced mode: Intended for advanced users or developers and will display all Internal Transactions including zero value transfers. Name tag integration is not available in advanced view.
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | ||||
---|---|---|---|---|---|---|---|
20637925 | 46 mins ago | 0.00250806 ETH | |||||
20636368 | 6 hrs ago | 0 ETH | |||||
20636368 | 6 hrs ago | 0 ETH | |||||
20636368 | 6 hrs ago | 0 ETH | |||||
20636368 | 6 hrs ago | 0.00868804 ETH | |||||
20636071 | 7 hrs ago | 0.0378806 ETH | |||||
20635818 | 7 hrs ago | 0.02437016 ETH | |||||
20635049 | 10 hrs ago | 0 ETH | |||||
20635049 | 10 hrs ago | 0 ETH | |||||
20635049 | 10 hrs ago | 0.02013811 ETH | |||||
20635049 | 10 hrs ago | 0 ETH | |||||
20635049 | 10 hrs ago | 0 ETH | |||||
20635049 | 10 hrs ago | 0 ETH | |||||
20635049 | 10 hrs ago | 0 ETH | |||||
20632287 | 19 hrs ago | 0.00787129 ETH | |||||
20631359 | 22 hrs ago | 0 ETH | |||||
20631359 | 22 hrs ago | 0 ETH | |||||
20631359 | 22 hrs ago | 0.00527104 ETH | |||||
20631359 | 22 hrs ago | 0 ETH | |||||
20631359 | 22 hrs ago | 0 ETH | |||||
20631359 | 22 hrs ago | 0 ETH | |||||
20631359 | 22 hrs ago | 0 ETH | |||||
20630631 | 25 hrs ago | 0 ETH | |||||
20630631 | 25 hrs ago | 0 ETH | |||||
20630631 | 25 hrs ago | 0 ETH |
Loading...
Loading
Contract Name:
MilQFarm
Compiler Version
v0.8.21+commit.d9974bed
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-09-27 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract 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() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { 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 { _transferOwnership(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"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount ) external returns (bool); } // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: LinqStaQing.sol //If you are here to forQ the code for this Qontract, good lucQ figuring out how to keep track of your MilQ //With Love, LinQ & Aevum DeFi - Creating a New Paradigm in DeFi. pragma solidity ^0.8.0; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } interface iLinq{ function claim() external; } contract MilQFarm is Ownable, ReentrancyGuard { IERC20 private linQ; IERC20 private milQ; IERC20 private glinQ; iLinq public ILINQ; IUniswapV2Router02 private uniswapRouter; constructor(address _linqAddress, address _milQAddress, address _glinQAddress, address _oddysParlour, address _uniswapRouterAddress) { linQ = IERC20(_linqAddress); ILINQ = iLinq(_linqAddress); milQ = IERC20(_milQAddress); glinQ = IERC20(_glinQAddress); oddysParlour = _oddysParlour; uniswapRouter = IUniswapV2Router02(_uniswapRouterAddress); } bool private staQingPaused = true; address public oddysParlour; address private swapLinq = 0x3e34eabF5858a126cb583107E643080cEE20cA64; uint256 public daisys = 0; uint256 public bessies = 0; uint256 public linQers = 0; uint256 public milQers = 0; uint256 public vitaliksMilkShipped = 0; uint256 public vitaliksMilkQompounded = 0; uint256 private daisysToOddysParlour = 15; uint256 private bessiesToOddysParlour = 15; uint256 public daisysMilkProduced = 0; uint256 public bessiesMilkProduced = 0; uint256 public daisysRentalTime; uint256 public bessiesRentalTime; uint256 public roundUpDaisysTime; uint256 public roundUpBessiesTime; uint256 public totalVitaliksMilkShipments = 0; uint256 public MilqShipments = 0; uint256 private minLinQ = 10000000000000000000; uint256 private minMilQ = 1000000000000000000; uint256 public totalMilQClaimed = 0; uint256 private highClaimThreshold = 5000000000000000000; event highClaim(address User, uint256 Amount); function sethighClaimThreshold(uint256 weiAmount) public onlyOwner { highClaimThreshold = weiAmount; } uint256 private lowBalanceThreshold = 10000000000000000000; event lowBalance(uint256 time, uint256 balance); function setLowBalanceThreshold(uint256 weiAmount) public onlyOwner { lowBalanceThreshold = weiAmount; } event rewardChange(uint256 index ,uint256 newBessies, uint256 newDaisys); event Qompound(address user, uint256 _ethAmount, uint256 boughtAmount); event newStaQe(address user, uint256 linq, uint256 milq); struct LinQerParlour { uint256 daisys; uint256 rentedDaisysSince; uint256 rentedDaisysTill; uint256 vitaliksMilkShipped; uint256 lastShippedVitaliksMilk; uint256 vitaliksMilkClaimable; uint256 QompoundedMilk; uint256 daisysOwnedSince; uint256 daisysOwnedTill; bool hasDaisys; bool ownsDaisys; bool owedMilk; uint256 shipmentsRecieved; } struct LpClaim { uint256 lastClaimed; uint256 totalClaimed; } struct MilQerParlour { uint256 bessies; uint256 rentedBessiesSince; uint256 rentedBessiesTill; uint256 milQClaimed; uint256 vitaliksMilkShipped; uint256 lastShippedVitaliksMilk; uint256 vitaliksMilkClaimable; uint256 bessiesOwnedSince; uint256 bessiesOwnedTill; bool hasBessies; bool ownsBessies; bool owedMilk; uint256 shipmentsRecieved; } struct MilQShipment { uint256 blockTimestamp; uint256 MilQShipped; uint256 totallinQStaked; uint256 rewardPerlinQ; } struct VitaliksMilkShipment { uint256 timestamp; uint256 daisysOutput; uint256 bessiesOutput; } mapping(address => LpClaim) public LpClaims; mapping(address => LinQerParlour) public LinQerParlours; mapping(address => MilQerParlour) public MilQerParlours; mapping(uint256 => MilQShipment) public MilQShipments; mapping(uint256 => VitaliksMilkShipment) public VitaliksMilkShipments; function rushOddyFee(uint256 _daisysToOddysParlour, uint256 _bessiesToOddysParlour) public onlyOwner{ require(_daisysToOddysParlour + _bessiesToOddysParlour <= 60); daisysToOddysParlour = _daisysToOddysParlour; bessiesToOddysParlour = _bessiesToOddysParlour; } function zeroFees() public onlyOwner { daisysToOddysParlour = 0; bessiesToOddysParlour = 0; } function setOddysParlour(address _oddysParlour) public onlyOwner { oddysParlour = _oddysParlour; } function setGlinQAddress(IERC20 _glinQ) public onlyOwner { glinQ = _glinQ; } function prepShipment(uint256 _daisysOutput, uint256 _bessiesOutput) public onlyOwner { totalVitaliksMilkShipments ++; uint256 index = totalVitaliksMilkShipments; VitaliksMilkShipments[index] = VitaliksMilkShipment(block.timestamp, _daisysOutput, _bessiesOutput); emit rewardChange(index, _daisysOutput, _bessiesOutput); } function getprepShipment(uint256 index) public view returns (uint256, uint256, uint256) { require(index < totalVitaliksMilkShipments); VitaliksMilkShipment memory shipment = VitaliksMilkShipments[index]; return (shipment.timestamp, shipment.daisysOutput, shipment.bessiesOutput); } function pauseStaQing(bool _state) public onlyOwner { staQingPaused = _state; } function removeVitaliksMilk(uint256 amount) external onlyOwner { require(address(this).balance >= amount); payable(oddysParlour).transfer(amount); } function withdrawERC20(address _ERC20, uint256 _Amt) external onlyOwner { IERC20(_ERC20).transfer(msg.sender, _Amt); } function changeDaisysRentalTime(uint256 _daisysRentalTime) external onlyOwner { daisysRentalTime = _daisysRentalTime; } function changeBessiesRentalTime(uint256 _bessiesRentalTime) external onlyOwner { bessiesRentalTime = _bessiesRentalTime; } function changeRoundUpDaisysTime(uint256 _roundUpDaisysTime) external onlyOwner { roundUpDaisysTime = _roundUpDaisysTime; } function changeRoundUpBessiesTime(uint256 _roundUpBessiesTime) external onlyOwner { roundUpBessiesTime = _roundUpBessiesTime; } function changeMinLinQ(uint256 _minLinQ) external onlyOwner { minLinQ = _minLinQ; } function changeMinMilQ(uint256 _minMilQ) external onlyOwner { minMilQ = _minMilQ; } function staQe(uint256 _amountLinQ, uint256 _amountMilQ, uint256 _token) external { require(!staQingPaused); require(_token == 0 || _token == 1); if (LinQerParlours[msg.sender].hasDaisys == true || MilQerParlours[msg.sender].hasBessies == true ) { howMuchMilkV3(); } if (_token == 0) { require(_amountLinQ >= minLinQ); if (LinQerParlours[msg.sender].hasDaisys == true) { uint256 milQToClaim = checkEstMilQRewards(msg.sender); if (milQToClaim > 0) { shipLinQersMilQ(); } getMoreDaisys(_amountLinQ); } if (LinQerParlours[msg.sender].hasDaisys == false){ firstStaQeLinQ(_amountLinQ); } } if (_token == 1) { require(_amountMilQ >= minMilQ); if (MilQerParlours[msg.sender].hasBessies == true){ getMoreBessies(_amountMilQ); } if (MilQerParlours[msg.sender].hasBessies == false){ firstStaQeMilQ(_amountMilQ); } } emit newStaQe(msg.sender,_amountLinQ, _amountMilQ); } function getMoreDaisys(uint256 amountLinQ) internal { linQ.approve(address(this), amountLinQ); linQ.transferFrom(msg.sender, address(this), amountLinQ); if (LinQerParlours[msg.sender].ownsDaisys == true) { glinQ.transfer(msg.sender, amountLinQ); } LinQerParlours[msg.sender].daisys += amountLinQ; daisys += amountLinQ; } function getMoreBessies(uint256 amountMilQ) internal { milQ.approve(address(this), amountMilQ); milQ.transferFrom(msg.sender, address(this), amountMilQ); MilQerParlours[msg.sender].bessies += amountMilQ; bessies += amountMilQ; } function firstStaQeLinQ(uint256 amountLinQ) internal { linQ.approve(address(this), amountLinQ); linQ.transferFrom(msg.sender, address(this), amountLinQ); LinQerParlours[msg.sender].daisys += amountLinQ; LinQerParlours[msg.sender].rentedDaisysSince = block.timestamp; LinQerParlours[msg.sender].rentedDaisysTill = block.timestamp + daisysRentalTime; LinQerParlours[msg.sender].daisysOwnedSince = 0; LinQerParlours[msg.sender].daisysOwnedTill = 32503680000; LinQerParlours[msg.sender].hasDaisys = true; LinQerParlours[msg.sender].ownsDaisys = false; LinQerParlours[msg.sender].vitaliksMilkShipped = 0; LinQerParlours[msg.sender].QompoundedMilk = 0; LinQerParlours[msg.sender].lastShippedVitaliksMilk = block.timestamp; LinQerParlours[msg.sender].shipmentsRecieved = totalVitaliksMilkShipments; LinQerParlours[msg.sender].vitaliksMilkClaimable = 0; LinQerParlours[msg.sender].owedMilk = true; LpClaims[msg.sender].lastClaimed = totalMilQClaimed; LpClaims[msg.sender].totalClaimed = 0; daisys += amountLinQ; linQers ++; } function firstStaQeMilQ(uint256 amountMilQ) internal { milQ.approve(address(this), amountMilQ); milQ.transferFrom(msg.sender, address(this), amountMilQ); MilQerParlours[msg.sender].bessies += amountMilQ; MilQerParlours[msg.sender].rentedBessiesSince = block.timestamp; MilQerParlours[msg.sender].rentedBessiesTill = block.timestamp + bessiesRentalTime; MilQerParlours[msg.sender].hasBessies = true; MilQerParlours[msg.sender].bessiesOwnedSince = 0; MilQerParlours[msg.sender].bessiesOwnedTill = 32503680000; MilQerParlours[msg.sender].ownsBessies = false; MilQerParlours[msg.sender].vitaliksMilkShipped = 0; MilQerParlours[msg.sender].lastShippedVitaliksMilk = block.timestamp; MilQerParlours[msg.sender].shipmentsRecieved = totalVitaliksMilkShipments; MilQerParlours[msg.sender].milQClaimed = 0; MilQerParlours[msg.sender].vitaliksMilkClaimable = 0; MilQerParlours[msg.sender].owedMilk = true; bessies += amountMilQ; milQers ++; } function ownCows(uint256 _cow) external { require(!staQingPaused); require( _cow == 0 || _cow == 1); if (_cow == 0) { require(LinQerParlours[msg.sender].ownsDaisys == false); require(LinQerParlours[msg.sender].hasDaisys == true); require(LinQerParlours[msg.sender].rentedDaisysTill < block.timestamp); require(glinQ.transfer(msg.sender, LinQerParlours[msg.sender].daisys)); LinQerParlours[msg.sender].ownsDaisys = true; LinQerParlours[msg.sender].daisysOwnedSince = LinQerParlours[msg.sender].rentedDaisysTill; LinQerParlours[msg.sender].owedMilk = true; } if (_cow == 1) { require(MilQerParlours[msg.sender].ownsBessies == false); require(MilQerParlours[msg.sender].hasBessies == true); require(MilQerParlours[msg.sender].rentedBessiesTill < block.timestamp); MilQerParlours[msg.sender].ownsBessies = true; MilQerParlours[msg.sender].bessiesOwnedSince = MilQerParlours[msg.sender].rentedBessiesTill; MilQerParlours[msg.sender].owedMilk = true; } } function roundUpCows(uint256 _cow) external { require(!staQingPaused); require(_cow == 0 && LinQerParlours[msg.sender].ownsDaisys == true || _cow == 1 && MilQerParlours[msg.sender].ownsBessies == true); if (_cow == 0) { uint256 newTimestamp = block.timestamp + roundUpDaisysTime; //make this time variable LinQerParlours[msg.sender].daisysOwnedTill = newTimestamp; } if (_cow == 1) { uint256 newTimestamp = block.timestamp + roundUpBessiesTime; MilQerParlours[msg.sender].bessiesOwnedTill = newTimestamp; } } function unstaQe(uint256 _amtLinQ, uint256 _amtMilQ, uint256 _token) external { require(!staQingPaused); require(_token == 0 || _token == 1); uint256 totalMilk = viewHowMuchMilk(msg.sender); if (totalMilk > 0) { shipMilk(); } if (_token == 0) { require(_amtLinQ > 0); require(LinQerParlours[msg.sender].daisys >= _amtLinQ); require(LinQerParlours[msg.sender].hasDaisys == true); unstaQeLinQ(_amtLinQ); } if (_token == 1) { require(_amtMilQ > 0); require(MilQerParlours[msg.sender].bessies >= _amtMilQ); require(MilQerParlours[msg.sender].hasBessies == true); unstaQeMilQ(_amtMilQ); } } function unstaQeLinQ(uint256 amtLinQ) internal { if (LinQerParlours[msg.sender].ownsDaisys == true) { glinQ.approve(address(this), amtLinQ); glinQ.transferFrom(msg.sender, address(this), amtLinQ); } uint256 amtToClaim = checkEstMilQRewards(msg.sender); if (amtToClaim > 0) { shipLinQersMilQ(); } uint256 transferLinQ; uint256 dToOddysParlour; if (LinQerParlours[msg.sender].daisysOwnedTill < block.timestamp && LinQerParlours[msg.sender].ownsDaisys == true){ linQ.transfer(msg.sender, amtLinQ); LinQerParlours[msg.sender].daisys -= amtLinQ; } if (LinQerParlours[msg.sender].rentedDaisysTill < block.timestamp && LinQerParlours[msg.sender].ownsDaisys == false){ linQ.transfer(msg.sender, amtLinQ); LinQerParlours[msg.sender].daisys -= amtLinQ; } if (LinQerParlours[msg.sender].daisysOwnedTill > block.timestamp && LinQerParlours[msg.sender].ownsDaisys == true){ dToOddysParlour = (amtLinQ * daisysToOddysParlour / 100); transferLinQ = (amtLinQ - dToOddysParlour); linQ.transfer(msg.sender, transferLinQ); linQ.transfer(oddysParlour, dToOddysParlour); LinQerParlours[msg.sender].daisys -= amtLinQ; } if (LinQerParlours[msg.sender].rentedDaisysTill > block.timestamp && LinQerParlours[msg.sender].ownsDaisys == false){ dToOddysParlour = (amtLinQ * daisysToOddysParlour / 100); transferLinQ = (amtLinQ - dToOddysParlour); linQ.transfer(msg.sender, transferLinQ); linQ.transfer(oddysParlour, dToOddysParlour); LinQerParlours[msg.sender].daisys -= amtLinQ; } if (LinQerParlours[msg.sender].daisys < minLinQ) { LinQerParlours[msg.sender].daisys = 0; LinQerParlours[msg.sender].rentedDaisysSince = 0; LinQerParlours[msg.sender].rentedDaisysTill = 0; LinQerParlours[msg.sender].vitaliksMilkShipped = 0; LinQerParlours[msg.sender].lastShippedVitaliksMilk = 0; LinQerParlours[msg.sender].vitaliksMilkClaimable = 0; LinQerParlours[msg.sender].QompoundedMilk = 0; LinQerParlours[msg.sender].daisysOwnedSince = 0; LinQerParlours[msg.sender].daisysOwnedTill = 0; LinQerParlours[msg.sender].hasDaisys = false; LinQerParlours[msg.sender].ownsDaisys = false; LinQerParlours[msg.sender].owedMilk = false; LinQerParlours[msg.sender].shipmentsRecieved = 0; linQers --; } } function unstaQeMilQ(uint256 amtMilQ) internal { uint256 transferMilQ; uint256 bToOddysParlour; if (MilQerParlours[msg.sender].bessiesOwnedTill <= block.timestamp && MilQerParlours[msg.sender].ownsBessies == true){ transferMilQ = amtMilQ; milQ.transfer(msg.sender, transferMilQ); MilQerParlours[msg.sender].bessies -= amtMilQ; } if (MilQerParlours[msg.sender].rentedBessiesTill <= block.timestamp && MilQerParlours[msg.sender].ownsBessies == false){ transferMilQ = amtMilQ; milQ.transfer(msg.sender, transferMilQ); MilQerParlours[msg.sender].bessies -= amtMilQ; } if (MilQerParlours[msg.sender].bessiesOwnedTill > block.timestamp && MilQerParlours[msg.sender].ownsBessies == true){ bToOddysParlour = (amtMilQ * bessiesToOddysParlour / 100); transferMilQ = (amtMilQ - bToOddysParlour); milQ.transfer(msg.sender, transferMilQ); milQ.transfer(oddysParlour, bToOddysParlour); MilQerParlours[msg.sender].bessies -= amtMilQ; } if (MilQerParlours[msg.sender].rentedBessiesTill > block.timestamp && MilQerParlours[msg.sender].ownsBessies == false){ bToOddysParlour = (amtMilQ * bessiesToOddysParlour / 100); transferMilQ = (amtMilQ - bToOddysParlour); milQ.transfer(msg.sender, transferMilQ); milQ.transfer(oddysParlour, bToOddysParlour); MilQerParlours[msg.sender].bessies -= amtMilQ; } if (MilQerParlours[msg.sender].bessies < minMilQ) { MilQerParlours[msg.sender].bessies = 0; MilQerParlours[msg.sender].rentedBessiesSince = 0; MilQerParlours[msg.sender].rentedBessiesTill = 0; MilQerParlours[msg.sender].milQClaimed = 0; MilQerParlours[msg.sender].vitaliksMilkShipped = 0; MilQerParlours[msg.sender].lastShippedVitaliksMilk = 0; MilQerParlours[msg.sender].vitaliksMilkClaimable = 0; MilQerParlours[msg.sender].bessiesOwnedSince = 0; MilQerParlours[msg.sender].bessiesOwnedTill = 0; MilQerParlours[msg.sender].hasBessies = false; MilQerParlours[msg.sender].ownsBessies = false; MilQerParlours[msg.sender].owedMilk = false; MilQerParlours[msg.sender].shipmentsRecieved = 0; milQers --; } } function howMuchMilkV3() internal { uint256 milkFromDaisys = 0; uint256 milkFromBessies = 0; if (LinQerParlours[msg.sender].ownsDaisys == true && LinQerParlours[msg.sender].daisysOwnedTill > block.timestamp) { if (LinQerParlours[msg.sender].shipmentsRecieved != totalVitaliksMilkShipments) { for (uint256 i = LinQerParlours[msg.sender].shipmentsRecieved; i < totalVitaliksMilkShipments; i++) { milkFromDaisys += (LinQerParlours[msg.sender].daisys / 1000000000000000000) * VitaliksMilkShipments[i].daisysOutput * (VitaliksMilkShipments[i+1].timestamp - LinQerParlours[msg.sender].lastShippedVitaliksMilk); LinQerParlours[msg.sender].lastShippedVitaliksMilk = VitaliksMilkShipments[i+1].timestamp; LinQerParlours[msg.sender].shipmentsRecieved ++; } } if (LinQerParlours[msg.sender].shipmentsRecieved == totalVitaliksMilkShipments){ milkFromDaisys += (LinQerParlours[msg.sender].daisys / 1000000000000000000) * VitaliksMilkShipments[totalVitaliksMilkShipments].daisysOutput * (block.timestamp - LinQerParlours[msg.sender].lastShippedVitaliksMilk); LinQerParlours[msg.sender].lastShippedVitaliksMilk = block.timestamp; } } if (LinQerParlours[msg.sender].ownsDaisys == false && LinQerParlours[msg.sender].hasDaisys == true && LinQerParlours[msg.sender].rentedDaisysTill > block.timestamp) { if (LinQerParlours[msg.sender].shipmentsRecieved != totalVitaliksMilkShipments) { for (uint256 i = LinQerParlours[msg.sender].shipmentsRecieved; i < totalVitaliksMilkShipments; i++) { milkFromDaisys += (LinQerParlours[msg.sender].daisys / 1000000000000000000) * VitaliksMilkShipments[i].daisysOutput * (VitaliksMilkShipments[i+1].timestamp - LinQerParlours[msg.sender].lastShippedVitaliksMilk); LinQerParlours[msg.sender].lastShippedVitaliksMilk = VitaliksMilkShipments[i+1].timestamp; LinQerParlours[msg.sender].shipmentsRecieved ++; } } if (LinQerParlours[msg.sender].shipmentsRecieved == totalVitaliksMilkShipments){ milkFromDaisys += (LinQerParlours[msg.sender].daisys / 1000000000000000000) * VitaliksMilkShipments[totalVitaliksMilkShipments].daisysOutput * (block.timestamp - LinQerParlours[msg.sender].lastShippedVitaliksMilk); LinQerParlours[msg.sender].lastShippedVitaliksMilk = block.timestamp; } } if (LinQerParlours[msg.sender].ownsDaisys == true && LinQerParlours[msg.sender].daisysOwnedTill <= block.timestamp && LinQerParlours[msg.sender].owedMilk == true) { if(LinQerParlours[msg.sender].shipmentsRecieved < totalVitaliksMilkShipments) { for (uint256 i = LinQerParlours[msg.sender].shipmentsRecieved; i < totalVitaliksMilkShipments; i++) { if (LinQerParlours[msg.sender].daisysOwnedTill > VitaliksMilkShipments[i+1].timestamp) { milkFromDaisys += (LinQerParlours[msg.sender].daisys / 1000000000000000000) * VitaliksMilkShipments[i].daisysOutput * (VitaliksMilkShipments[i+1].timestamp - LinQerParlours[msg.sender].lastShippedVitaliksMilk); LinQerParlours[msg.sender].lastShippedVitaliksMilk = VitaliksMilkShipments[i+1].timestamp; LinQerParlours[msg.sender].shipmentsRecieved ++; } if (LinQerParlours[msg.sender].daisysOwnedTill <= VitaliksMilkShipments[i+1].timestamp) { uint256 time = LinQerParlours[msg.sender].daisysOwnedTill - LinQerParlours[msg.sender].lastShippedVitaliksMilk; milkFromDaisys += (LinQerParlours[msg.sender].daisys / 1000000000000000000) * VitaliksMilkShipments[i].daisysOutput * time; LinQerParlours[msg.sender].lastShippedVitaliksMilk = LinQerParlours[msg.sender].daisysOwnedTill; LinQerParlours[msg.sender].owedMilk = false; break; } } } if (LinQerParlours[msg.sender].shipmentsRecieved == totalVitaliksMilkShipments){ milkFromDaisys += (LinQerParlours[msg.sender].daisys / 1000000000000000000) * VitaliksMilkShipments[totalVitaliksMilkShipments].daisysOutput * (LinQerParlours[msg.sender].daisysOwnedTill - LinQerParlours[msg.sender].lastShippedVitaliksMilk); LinQerParlours[msg.sender].lastShippedVitaliksMilk = LinQerParlours[msg.sender].daisysOwnedTill; LinQerParlours[msg.sender].owedMilk = false; } } if (LinQerParlours[msg.sender].ownsDaisys == false && LinQerParlours[msg.sender].hasDaisys == true && LinQerParlours[msg.sender].rentedDaisysTill <= block.timestamp && LinQerParlours[msg.sender].owedMilk == true) { if(LinQerParlours[msg.sender].shipmentsRecieved < totalVitaliksMilkShipments){ for (uint256 i = LinQerParlours[msg.sender].shipmentsRecieved; i < totalVitaliksMilkShipments; i++) { if (LinQerParlours[msg.sender].rentedDaisysTill > VitaliksMilkShipments[i+1].timestamp) { milkFromDaisys += (LinQerParlours[msg.sender].daisys / 1000000000000000000) * VitaliksMilkShipments[i].daisysOutput * (VitaliksMilkShipments[i+1].timestamp - LinQerParlours[msg.sender].lastShippedVitaliksMilk); LinQerParlours[msg.sender].lastShippedVitaliksMilk = VitaliksMilkShipments[i+1].timestamp; LinQerParlours[msg.sender].shipmentsRecieved ++; } if (LinQerParlours[msg.sender].rentedDaisysTill <= VitaliksMilkShipments[i+1].timestamp && LinQerParlours[msg.sender].owedMilk == true){ uint256 time = LinQerParlours[msg.sender].rentedDaisysTill - LinQerParlours[msg.sender].lastShippedVitaliksMilk; milkFromDaisys += (LinQerParlours[msg.sender].daisys / 1000000000000000000) * VitaliksMilkShipments[i].daisysOutput * time; LinQerParlours[msg.sender].lastShippedVitaliksMilk = LinQerParlours[msg.sender].rentedDaisysTill; LinQerParlours[msg.sender].owedMilk = false; break; } } } if (LinQerParlours[msg.sender].shipmentsRecieved == totalVitaliksMilkShipments){ milkFromDaisys += (LinQerParlours[msg.sender].daisys / 1000000000000000000) * VitaliksMilkShipments[totalVitaliksMilkShipments].daisysOutput * (LinQerParlours[msg.sender].rentedDaisysTill - LinQerParlours[msg.sender].lastShippedVitaliksMilk); LinQerParlours[msg.sender].lastShippedVitaliksMilk = LinQerParlours[msg.sender].rentedDaisysTill; LinQerParlours[msg.sender].owedMilk = false; } } if (MilQerParlours[msg.sender].ownsBessies == true && MilQerParlours[msg.sender].bessiesOwnedTill > block.timestamp) { if (MilQerParlours[msg.sender].shipmentsRecieved != totalVitaliksMilkShipments) { for (uint256 i = MilQerParlours[msg.sender].shipmentsRecieved; i < totalVitaliksMilkShipments; i++) { milkFromBessies += (MilQerParlours[msg.sender].bessies / 1000000000000000000) * VitaliksMilkShipments[i].bessiesOutput * (VitaliksMilkShipments[i+1].timestamp - MilQerParlours[msg.sender].lastShippedVitaliksMilk); MilQerParlours[msg.sender].lastShippedVitaliksMilk = VitaliksMilkShipments[i+1].timestamp; MilQerParlours[msg.sender].shipmentsRecieved ++; } } if (MilQerParlours[msg.sender].shipmentsRecieved == totalVitaliksMilkShipments) { milkFromBessies += (MilQerParlours[msg.sender].bessies / 1000000000000000000) * VitaliksMilkShipments[totalVitaliksMilkShipments].bessiesOutput * (block.timestamp - MilQerParlours[msg.sender].lastShippedVitaliksMilk); MilQerParlours[msg.sender].lastShippedVitaliksMilk = block.timestamp; } } if (MilQerParlours[msg.sender].ownsBessies == false && MilQerParlours[msg.sender].hasBessies == true && MilQerParlours[msg.sender].rentedBessiesTill > block.timestamp && MilQerParlours[msg.sender].owedMilk == true) { if (MilQerParlours[msg.sender].shipmentsRecieved != totalVitaliksMilkShipments) { for (uint256 i = MilQerParlours[msg.sender].shipmentsRecieved; i < totalVitaliksMilkShipments; i++) { milkFromBessies += (MilQerParlours[msg.sender].bessies / 1000000000000000000) * VitaliksMilkShipments[i].bessiesOutput * (VitaliksMilkShipments[i+1].timestamp - MilQerParlours[msg.sender].lastShippedVitaliksMilk); MilQerParlours[msg.sender].lastShippedVitaliksMilk = VitaliksMilkShipments[i+1].timestamp; MilQerParlours[msg.sender].shipmentsRecieved ++; } } if (MilQerParlours[msg.sender].shipmentsRecieved == totalVitaliksMilkShipments){ milkFromBessies += (MilQerParlours[msg.sender].bessies / 1000000000000000000) * VitaliksMilkShipments[totalVitaliksMilkShipments].bessiesOutput * (block.timestamp - MilQerParlours[msg.sender].lastShippedVitaliksMilk); MilQerParlours[msg.sender].lastShippedVitaliksMilk = block.timestamp; } } if (MilQerParlours[msg.sender].ownsBessies == true && MilQerParlours[msg.sender].bessiesOwnedTill <= block.timestamp && MilQerParlours[msg.sender].owedMilk == true) { if (MilQerParlours[msg.sender].shipmentsRecieved < totalVitaliksMilkShipments) { for (uint256 i = MilQerParlours[msg.sender].shipmentsRecieved; i < totalVitaliksMilkShipments; i++) { if (MilQerParlours[msg.sender].bessiesOwnedTill > VitaliksMilkShipments[i+1].timestamp) { milkFromBessies += (MilQerParlours[msg.sender].bessies / 1000000000000000000) * VitaliksMilkShipments[i].bessiesOutput * (VitaliksMilkShipments[i+1].timestamp - MilQerParlours[msg.sender].lastShippedVitaliksMilk); MilQerParlours[msg.sender].lastShippedVitaliksMilk = VitaliksMilkShipments[i+1].timestamp; MilQerParlours[msg.sender].shipmentsRecieved ++; } if (MilQerParlours[msg.sender].bessiesOwnedTill <= VitaliksMilkShipments[i+1].timestamp){ uint256 time = MilQerParlours[msg.sender].bessiesOwnedTill - MilQerParlours[msg.sender].lastShippedVitaliksMilk; milkFromBessies += (MilQerParlours[msg.sender].bessies / 1000000000000000000) * VitaliksMilkShipments[i].bessiesOutput * time; MilQerParlours[msg.sender].lastShippedVitaliksMilk = MilQerParlours[msg.sender].bessiesOwnedTill; MilQerParlours[msg.sender].owedMilk = false; break; } } } if (MilQerParlours[msg.sender].shipmentsRecieved == totalVitaliksMilkShipments){ milkFromBessies += (MilQerParlours[msg.sender].bessies / 1000000000000000000) * VitaliksMilkShipments[totalVitaliksMilkShipments].bessiesOutput * (MilQerParlours[msg.sender].bessiesOwnedTill - MilQerParlours[msg.sender].lastShippedVitaliksMilk); MilQerParlours[msg.sender].lastShippedVitaliksMilk = MilQerParlours[msg.sender].bessiesOwnedTill; MilQerParlours[msg.sender].owedMilk = false; } } if (MilQerParlours[msg.sender].ownsBessies == false && MilQerParlours[msg.sender].hasBessies == true && MilQerParlours[msg.sender].rentedBessiesTill <= block.timestamp && MilQerParlours[msg.sender].owedMilk == true) { if(MilQerParlours[msg.sender].shipmentsRecieved != totalVitaliksMilkShipments){ for (uint256 i = MilQerParlours[msg.sender].shipmentsRecieved; i < totalVitaliksMilkShipments; i++) { if (MilQerParlours[msg.sender].rentedBessiesTill > VitaliksMilkShipments[i+1].timestamp) { milkFromBessies += (MilQerParlours[msg.sender].bessies / 1000000000000000000) * VitaliksMilkShipments[i].bessiesOutput * (VitaliksMilkShipments[i+1].timestamp - MilQerParlours[msg.sender].lastShippedVitaliksMilk); MilQerParlours[msg.sender].lastShippedVitaliksMilk = VitaliksMilkShipments[i+1].timestamp; MilQerParlours[msg.sender].shipmentsRecieved ++; } if (MilQerParlours[msg.sender].rentedBessiesTill <= VitaliksMilkShipments[i+1].timestamp){ uint256 time = MilQerParlours[msg.sender].rentedBessiesTill - MilQerParlours[msg.sender].lastShippedVitaliksMilk; milkFromBessies += (MilQerParlours[msg.sender].bessies / 1000000000000000000) * VitaliksMilkShipments[i].bessiesOutput * time; MilQerParlours[msg.sender].lastShippedVitaliksMilk = MilQerParlours[msg.sender].rentedBessiesTill; MilQerParlours[msg.sender].owedMilk = false; break; } } } if (MilQerParlours[msg.sender].shipmentsRecieved == totalVitaliksMilkShipments){ milkFromBessies += (MilQerParlours[msg.sender].bessies / 1000000000000000000) * VitaliksMilkShipments[totalVitaliksMilkShipments].bessiesOutput * (MilQerParlours[msg.sender].rentedBessiesTill - MilQerParlours[msg.sender].lastShippedVitaliksMilk); MilQerParlours[msg.sender].lastShippedVitaliksMilk = MilQerParlours[msg.sender].rentedBessiesTill; MilQerParlours[msg.sender].owedMilk = false; } } LinQerParlours[msg.sender].vitaliksMilkClaimable += milkFromDaisys; MilQerParlours[msg.sender].vitaliksMilkClaimable += milkFromBessies; daisysMilkProduced += milkFromDaisys; bessiesMilkProduced += milkFromBessies; } function viewHowMuchMilk(address user) public view returns (uint256 Total) { uint256 daisysShipped = LinQerParlours[user].shipmentsRecieved; uint256 daisysTimeShipped = LinQerParlours[user].lastShippedVitaliksMilk; uint256 bessiesShipped = MilQerParlours[user].shipmentsRecieved; uint256 bessiesTimeShipped = MilQerParlours[user].lastShippedVitaliksMilk; uint256 milkFromDaisys = 0; uint256 milkFromBessies = 0; if (LinQerParlours[user].ownsDaisys == true && LinQerParlours[user].daisysOwnedTill > block.timestamp) { if (daisysShipped != totalVitaliksMilkShipments) { for (uint256 i = daisysShipped; i < totalVitaliksMilkShipments; i++) { milkFromDaisys += (LinQerParlours[user].daisys / 1000000000000000000) * VitaliksMilkShipments[i].daisysOutput * (VitaliksMilkShipments[i+1].timestamp - daisysTimeShipped); daisysTimeShipped = VitaliksMilkShipments[i+1].timestamp; daisysShipped ++; } } if (daisysShipped == totalVitaliksMilkShipments){ milkFromDaisys += (LinQerParlours[user].daisys / 1000000000000000000) * VitaliksMilkShipments[totalVitaliksMilkShipments].daisysOutput * (block.timestamp - daisysTimeShipped); } } if (LinQerParlours[user].ownsDaisys == false && LinQerParlours[user].hasDaisys == true && LinQerParlours[user].rentedDaisysTill > block.timestamp) { if (daisysShipped != totalVitaliksMilkShipments) { for (uint256 i = daisysShipped; i < totalVitaliksMilkShipments; i++) { milkFromDaisys += (LinQerParlours[user].daisys / 1000000000000000000) * VitaliksMilkShipments[i].daisysOutput * (VitaliksMilkShipments[i+1].timestamp - daisysTimeShipped); daisysTimeShipped = VitaliksMilkShipments[i+1].timestamp; daisysShipped ++; } } if (daisysShipped == totalVitaliksMilkShipments){ milkFromDaisys += (LinQerParlours[user].daisys / 1000000000000000000) * VitaliksMilkShipments[totalVitaliksMilkShipments].daisysOutput * (block.timestamp - daisysTimeShipped); } } if (LinQerParlours[user].ownsDaisys == true && LinQerParlours[user].daisysOwnedTill <= block.timestamp && LinQerParlours[user].owedMilk == true) { if(daisysShipped < totalVitaliksMilkShipments) { for (uint256 i = daisysShipped; i < totalVitaliksMilkShipments; i++) { if (LinQerParlours[user].daisysOwnedTill > VitaliksMilkShipments[i+1].timestamp) { milkFromDaisys += (LinQerParlours[user].daisys / 1000000000000000000) * VitaliksMilkShipments[i].daisysOutput * (VitaliksMilkShipments[i+1].timestamp - daisysTimeShipped); daisysTimeShipped = VitaliksMilkShipments[i+1].timestamp; daisysShipped ++; } if (LinQerParlours[user].daisysOwnedTill <= VitaliksMilkShipments[i+1].timestamp) { uint256 time = LinQerParlours[user].daisysOwnedTill - daisysTimeShipped; milkFromDaisys += (LinQerParlours[user].daisys / 1000000000000000000) * VitaliksMilkShipments[i].daisysOutput * time; break; } } } if (daisysShipped == totalVitaliksMilkShipments){ milkFromDaisys += (LinQerParlours[user].daisys / 1000000000000000000) * VitaliksMilkShipments[totalVitaliksMilkShipments].daisysOutput * (LinQerParlours[user].daisysOwnedTill - daisysTimeShipped); } } if (LinQerParlours[user].ownsDaisys == false && LinQerParlours[user].hasDaisys == true && LinQerParlours[user].rentedDaisysTill <= block.timestamp && LinQerParlours[user].owedMilk == true) { if(daisysShipped < totalVitaliksMilkShipments){ for (uint256 i = daisysShipped; i < totalVitaliksMilkShipments; i++) { if (LinQerParlours[user].rentedDaisysTill > VitaliksMilkShipments[i+1].timestamp) { milkFromDaisys += (LinQerParlours[user].daisys / 1000000000000000000) * VitaliksMilkShipments[i].daisysOutput * (VitaliksMilkShipments[i+1].timestamp - daisysTimeShipped); daisysTimeShipped = VitaliksMilkShipments[i+1].timestamp; daisysShipped ++; } if (LinQerParlours[user].rentedDaisysTill <= VitaliksMilkShipments[i+1].timestamp && LinQerParlours[user].owedMilk == true){ uint256 time = LinQerParlours[user].rentedDaisysTill - daisysTimeShipped; milkFromDaisys += (LinQerParlours[user].daisys / 1000000000000000000) * VitaliksMilkShipments[i].daisysOutput * time; break; } } } if (daisysShipped == totalVitaliksMilkShipments){ milkFromDaisys += (LinQerParlours[user].daisys / 1000000000000000000) * VitaliksMilkShipments[totalVitaliksMilkShipments].daisysOutput * (LinQerParlours[user].rentedDaisysTill - daisysTimeShipped); } } if (MilQerParlours[user].ownsBessies == true && MilQerParlours[user].bessiesOwnedTill > block.timestamp) { if (bessiesShipped != totalVitaliksMilkShipments) { for (uint256 i = bessiesShipped; i < totalVitaliksMilkShipments; i++) { milkFromBessies += (MilQerParlours[user].bessies / 1000000000000000000) * VitaliksMilkShipments[i].bessiesOutput * (VitaliksMilkShipments[i+1].timestamp - bessiesTimeShipped); bessiesTimeShipped = VitaliksMilkShipments[i+1].timestamp; bessiesShipped ++; } } if (bessiesShipped == totalVitaliksMilkShipments) { milkFromBessies += (MilQerParlours[user].bessies / 1000000000000000000) * VitaliksMilkShipments[totalVitaliksMilkShipments].bessiesOutput * (block.timestamp - bessiesTimeShipped); } } if (MilQerParlours[user].ownsBessies == false && MilQerParlours[user].hasBessies == true && MilQerParlours[user].rentedBessiesTill > block.timestamp && MilQerParlours[user].owedMilk == true) { if (bessiesShipped != totalVitaliksMilkShipments) { for (uint256 i = bessiesShipped; i < totalVitaliksMilkShipments; i++) { milkFromBessies += (MilQerParlours[user].bessies / 1000000000000000000) * VitaliksMilkShipments[i].bessiesOutput * (VitaliksMilkShipments[i+1].timestamp - bessiesTimeShipped); bessiesTimeShipped = VitaliksMilkShipments[i+1].timestamp; bessiesShipped ++; } } if (bessiesShipped == totalVitaliksMilkShipments){ milkFromBessies += (MilQerParlours[user].bessies / 1000000000000000000) * VitaliksMilkShipments[totalVitaliksMilkShipments].bessiesOutput * (block.timestamp - bessiesTimeShipped); } } if (MilQerParlours[user].ownsBessies == true && MilQerParlours[user].bessiesOwnedTill <= block.timestamp) { if (bessiesShipped != totalVitaliksMilkShipments) { for (uint256 i = bessiesShipped; i < totalVitaliksMilkShipments; i++) { if (MilQerParlours[user].bessiesOwnedTill > VitaliksMilkShipments[i+1].timestamp) { milkFromBessies += (MilQerParlours[user].bessies / 1000000000000000000) * VitaliksMilkShipments[i].bessiesOutput * (VitaliksMilkShipments[i+1].timestamp - bessiesTimeShipped); bessiesTimeShipped = VitaliksMilkShipments[i+1].timestamp; bessiesShipped ++; } if (MilQerParlours[user].bessiesOwnedTill <= VitaliksMilkShipments[i+1].timestamp && MilQerParlours[user].owedMilk == true){ uint256 time = MilQerParlours[user].bessiesOwnedTill - bessiesTimeShipped; milkFromBessies += (MilQerParlours[user].bessies / 1000000000000000000) * VitaliksMilkShipments[i].bessiesOutput * time; break; } } } if (bessiesShipped == totalVitaliksMilkShipments){ milkFromBessies += (MilQerParlours[user].bessies / 1000000000000000000) * VitaliksMilkShipments[totalVitaliksMilkShipments].bessiesOutput * (MilQerParlours[user].bessiesOwnedTill - bessiesTimeShipped); } } if (MilQerParlours[user].ownsBessies == false && MilQerParlours[user].hasBessies == true && MilQerParlours[user].rentedBessiesTill <= block.timestamp) { if(bessiesShipped != totalVitaliksMilkShipments){ for (uint256 i = bessiesShipped; i < totalVitaliksMilkShipments; i++) { if (MilQerParlours[user].rentedBessiesTill > VitaliksMilkShipments[i+1].timestamp) { milkFromBessies += (MilQerParlours[user].bessies / 1000000000000000000) * VitaliksMilkShipments[i].bessiesOutput * (VitaliksMilkShipments[i+1].timestamp - bessiesTimeShipped); bessiesTimeShipped = VitaliksMilkShipments[i+1].timestamp; bessiesShipped ++; } if (MilQerParlours[user].rentedBessiesTill <= VitaliksMilkShipments[i+1].timestamp && MilQerParlours[user].owedMilk == true){ uint256 time = MilQerParlours[user].rentedBessiesTill - bessiesTimeShipped; milkFromBessies += (MilQerParlours[user].bessies / 1000000000000000000) * VitaliksMilkShipments[i].bessiesOutput * time; break; } } } if (bessiesShipped == totalVitaliksMilkShipments){ milkFromBessies += (MilQerParlours[user].bessies / 1000000000000000000) * VitaliksMilkShipments[totalVitaliksMilkShipments].bessiesOutput * (MilQerParlours[user].rentedBessiesTill - bessiesTimeShipped); } } Total = milkFromDaisys + milkFromBessies; return (Total); } function QompoundLinQ(uint256 slippage) external { if (LinQerParlours[msg.sender].hasDaisys == true){ shipLinQersMilQ(); } howMuchMilkV3(); uint256 linqAmt = LinQerParlours[msg.sender].vitaliksMilkClaimable; uint256 milqAmt = MilQerParlours[msg.sender].vitaliksMilkClaimable; uint256 _ethAmount = linqAmt + milqAmt; address[] memory path = new address[](2); path[0] = uniswapRouter.WETH(); path[1] = swapLinq; uint256[] memory amountsOut = uniswapRouter.getAmountsOut(_ethAmount, path); uint256 minLinQAmount = amountsOut[1]; uint256 beforeBalance = IERC20(linQ).balanceOf(address(this)); uint256 amountSlip = (minLinQAmount * slippage) / 100; uint256 amountAfterSlip = minLinQAmount - amountSlip; uniswapRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: _ethAmount}( amountAfterSlip, path, address(this), block.timestamp ); uint256 afterBalance = IERC20(linQ).balanceOf(address(this)); uint256 boughtAmount = afterBalance - beforeBalance; if (LinQerParlours[msg.sender].ownsDaisys == true) { glinQ.transfer(msg.sender, boughtAmount); } if (LinQerParlours[msg.sender].hasDaisys == true) { LinQerParlours[msg.sender].daisys += boughtAmount; LinQerParlours[msg.sender].QompoundedMilk += _ethAmount; LinQerParlours[msg.sender].vitaliksMilkClaimable = 0; MilQerParlours[msg.sender].vitaliksMilkClaimable = 0; } if (LinQerParlours[msg.sender].hasDaisys == false) { LinQerParlours[msg.sender].daisys += boughtAmount; LinQerParlours[msg.sender].rentedDaisysSince = block.timestamp; LinQerParlours[msg.sender].rentedDaisysTill = block.timestamp + daisysRentalTime; LinQerParlours[msg.sender].daisysOwnedSince = 0; LinQerParlours[msg.sender].daisysOwnedTill = 32503680000; LinQerParlours[msg.sender].hasDaisys = true; LinQerParlours[msg.sender].ownsDaisys = false; LinQerParlours[msg.sender].vitaliksMilkShipped = 0; LinQerParlours[msg.sender].QompoundedMilk = 0; LinQerParlours[msg.sender].lastShippedVitaliksMilk = block.timestamp; LinQerParlours[msg.sender].shipmentsRecieved = totalVitaliksMilkShipments; LinQerParlours[msg.sender].vitaliksMilkClaimable = 0; LinQerParlours[msg.sender].owedMilk = true; LpClaims[msg.sender].lastClaimed = totalMilQClaimed; LpClaims[msg.sender].totalClaimed = 0; MilQerParlours[msg.sender].vitaliksMilkClaimable = 0; daisys += boughtAmount; linQers ++; } daisys += boughtAmount; vitaliksMilkQompounded += _ethAmount; emit Qompound(msg.sender, _ethAmount, boughtAmount); } function shipMilk() public { howMuchMilkV3(); uint256 linq = LinQerParlours[msg.sender].vitaliksMilkClaimable; uint256 lp = MilQerParlours[msg.sender].vitaliksMilkClaimable; uint256 amount = linq + lp; require(address(this).balance >= amount); payable(msg.sender).transfer(amount); LinQerParlours[msg.sender].vitaliksMilkShipped += linq; MilQerParlours[msg.sender].vitaliksMilkShipped += lp; LinQerParlours[msg.sender].vitaliksMilkClaimable = 0; MilQerParlours[msg.sender].vitaliksMilkClaimable = 0; vitaliksMilkShipped += amount; if (amount > highClaimThreshold){ emit highClaim(msg.sender,amount); } if(address(this).balance < lowBalanceThreshold){ emit lowBalance(block.timestamp,address(this).balance); } } function shipFarmMilQ() external onlyOwner { uint256 beforeBalance = IERC20(milQ).balanceOf(address(this)); ILINQ.claim(); uint256 afterBalance = IERC20(milQ).balanceOf(address(this)); uint256 claimed = afterBalance - beforeBalance; uint256 PerLinQ = (claimed * 10**18) / daisys; uint256 index = MilqShipments; MilQShipments[index] = MilQShipment(block.timestamp, claimed, daisys,PerLinQ); MilqShipments++; totalMilQClaimed += claimed; } function shipLinQersMilQ() public { uint256 CurrrentDis = totalMilQClaimed - LpClaims[msg.sender].lastClaimed; uint256 tokensStaked = LinQerParlours[msg.sender].daisys; uint256 divDaisys = daisys / 10**18; uint256 percentOwned = ((tokensStaked * 100) / divDaisys); uint256 userDistro = CurrrentDis * (percentOwned / 100); uint256 userDistroAmount = userDistro / 10**18; milQ.transfer(msg.sender, userDistroAmount); MilQerParlours[msg.sender].milQClaimed += userDistroAmount; LpClaims[msg.sender].lastClaimed = totalMilQClaimed; LpClaims[msg.sender].totalClaimed += userDistroAmount; } function checkEstMilQRewards(address user) public view returns (uint256){ uint256 CurrrentDis = totalMilQClaimed - LpClaims[user].lastClaimed; uint256 tokensStaked = LinQerParlours[user].daisys; uint256 divDaisys = daisys / 10**18; uint256 percentOwned = ((tokensStaked * 100) / divDaisys); uint256 userDistro = CurrrentDis * (percentOwned / 100); uint256 userDistroAmount = userDistro / 10**18; return userDistroAmount; } receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_linqAddress","type":"address"},{"internalType":"address","name":"_milQAddress","type":"address"},{"internalType":"address","name":"_glinQAddress","type":"address"},{"internalType":"address","name":"_oddysParlour","type":"address"},{"internalType":"address","name":"_uniswapRouterAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"_ethAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"boughtAmount","type":"uint256"}],"name":"Qompound","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"User","type":"address"},{"indexed":false,"internalType":"uint256","name":"Amount","type":"uint256"}],"name":"highClaim","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balance","type":"uint256"}],"name":"lowBalance","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"linq","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"milq","type":"uint256"}],"name":"newStaQe","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBessies","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newDaisys","type":"uint256"}],"name":"rewardChange","type":"event"},{"inputs":[],"name":"ILINQ","outputs":[{"internalType":"contract iLinq","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"LinQerParlours","outputs":[{"internalType":"uint256","name":"daisys","type":"uint256"},{"internalType":"uint256","name":"rentedDaisysSince","type":"uint256"},{"internalType":"uint256","name":"rentedDaisysTill","type":"uint256"},{"internalType":"uint256","name":"vitaliksMilkShipped","type":"uint256"},{"internalType":"uint256","name":"lastShippedVitaliksMilk","type":"uint256"},{"internalType":"uint256","name":"vitaliksMilkClaimable","type":"uint256"},{"internalType":"uint256","name":"QompoundedMilk","type":"uint256"},{"internalType":"uint256","name":"daisysOwnedSince","type":"uint256"},{"internalType":"uint256","name":"daisysOwnedTill","type":"uint256"},{"internalType":"bool","name":"hasDaisys","type":"bool"},{"internalType":"bool","name":"ownsDaisys","type":"bool"},{"internalType":"bool","name":"owedMilk","type":"bool"},{"internalType":"uint256","name":"shipmentsRecieved","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"LpClaims","outputs":[{"internalType":"uint256","name":"lastClaimed","type":"uint256"},{"internalType":"uint256","name":"totalClaimed","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"MilQShipments","outputs":[{"internalType":"uint256","name":"blockTimestamp","type":"uint256"},{"internalType":"uint256","name":"MilQShipped","type":"uint256"},{"internalType":"uint256","name":"totallinQStaked","type":"uint256"},{"internalType":"uint256","name":"rewardPerlinQ","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"MilQerParlours","outputs":[{"internalType":"uint256","name":"bessies","type":"uint256"},{"internalType":"uint256","name":"rentedBessiesSince","type":"uint256"},{"internalType":"uint256","name":"rentedBessiesTill","type":"uint256"},{"internalType":"uint256","name":"milQClaimed","type":"uint256"},{"internalType":"uint256","name":"vitaliksMilkShipped","type":"uint256"},{"internalType":"uint256","name":"lastShippedVitaliksMilk","type":"uint256"},{"internalType":"uint256","name":"vitaliksMilkClaimable","type":"uint256"},{"internalType":"uint256","name":"bessiesOwnedSince","type":"uint256"},{"internalType":"uint256","name":"bessiesOwnedTill","type":"uint256"},{"internalType":"bool","name":"hasBessies","type":"bool"},{"internalType":"bool","name":"ownsBessies","type":"bool"},{"internalType":"bool","name":"owedMilk","type":"bool"},{"internalType":"uint256","name":"shipmentsRecieved","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MilqShipments","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"slippage","type":"uint256"}],"name":"QompoundLinQ","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"VitaliksMilkShipments","outputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"daisysOutput","type":"uint256"},{"internalType":"uint256","name":"bessiesOutput","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bessies","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bessiesMilkProduced","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bessiesRentalTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_bessiesRentalTime","type":"uint256"}],"name":"changeBessiesRentalTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_daisysRentalTime","type":"uint256"}],"name":"changeDaisysRentalTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minLinQ","type":"uint256"}],"name":"changeMinLinQ","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minMilQ","type":"uint256"}],"name":"changeMinMilQ","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_roundUpBessiesTime","type":"uint256"}],"name":"changeRoundUpBessiesTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_roundUpDaisysTime","type":"uint256"}],"name":"changeRoundUpDaisysTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"checkEstMilQRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"daisys","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"daisysMilkProduced","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"daisysRentalTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getprepShipment","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"linQers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"milQers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oddysParlour","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cow","type":"uint256"}],"name":"ownCows","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pauseStaQing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_daisysOutput","type":"uint256"},{"internalType":"uint256","name":"_bessiesOutput","type":"uint256"}],"name":"prepShipment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"removeVitaliksMilk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"roundUpBessiesTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cow","type":"uint256"}],"name":"roundUpCows","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"roundUpDaisysTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_daisysToOddysParlour","type":"uint256"},{"internalType":"uint256","name":"_bessiesToOddysParlour","type":"uint256"}],"name":"rushOddyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_glinQ","type":"address"}],"name":"setGlinQAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"setLowBalanceThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_oddysParlour","type":"address"}],"name":"setOddysParlour","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"sethighClaimThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shipFarmMilQ","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shipLinQersMilQ","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shipMilk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountLinQ","type":"uint256"},{"internalType":"uint256","name":"_amountMilQ","type":"uint256"},{"internalType":"uint256","name":"_token","type":"uint256"}],"name":"staQe","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalMilQClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalVitaliksMilkShipments","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amtLinQ","type":"uint256"},{"internalType":"uint256","name":"_amtMilQ","type":"uint256"},{"internalType":"uint256","name":"_token","type":"uint256"}],"name":"unstaQe","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"viewHowMuchMilk","outputs":[{"internalType":"uint256","name":"Total","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vitaliksMilkQompounded","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vitaliksMilkShipped","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_ERC20","type":"address"},{"internalType":"uint256","name":"_Amt","type":"uint256"}],"name":"withdrawERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"zeroFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526006805460ff60a01b1916600160a01b179055600880546001600160a01b031916733e34eabf5858a126cb583107e643080cee20ca641790555f6009819055600a819055600b819055600c819055600d819055600e819055600f8080556010556011819055601281905560178190556018819055678ac7230489e800006019819055670de0b6b3a7640000601a55601b91909155674563918244f40000601c55601d55348015620000b3575f80fd5b506040516200610038038062006100833981016040819052620000d691620001c1565b620000e13362000156565b60018055600280546001600160a01b039687166001600160a01b031991821681179092556005805482169092179091556003805495871695821695909517909455600480549386169385169390931790925560078054918516918416919091179055600680549190931691161790556200022d565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114620001bc575f80fd5b919050565b5f805f805f60a08688031215620001d6575f80fd5b620001e186620001a5565b9450620001f160208701620001a5565b93506200020160408701620001a5565b92506200021160608701620001a5565b91506200022160808701620001a5565b90509295509295909350565b615ec5806200023b5f395ff3fe6080604052600436106102f6575f3560e01c80639a85d6b111610189578063cc8261c2116100d8578063df48d83b11610092578063ea41a76f1161006d578063ea41a76f146109a5578063f2fde38b14610a2e578063fb53abb814610a4d578063fbe7c08514610a6c575f80fd5b8063df48d83b1461092d578063e0f0985b1461094c578063e114b8ff1461096b575f80fd5b8063cc8261c214610851578063cd15153614610866578063ce24ab451461087a578063d01fe5fe1461088f578063d8d043cd146108ae578063dec794891461090e575f80fd5b8063a72b68c711610143578063c4389a031161011e578063c4389a0314610718578063c5ac67171461072d578063c8d0a0621461081d578063c8e4b0981461083c575f80fd5b8063a72b68c7146106aa578063aa7f085b146106e4578063b0a56c14146106f9575f80fd5b80639a85d6b1146105f05780639c6b99041461060f578063a0eba21a1461062e578063a1db97821461064d578063a20f54541461066c578063a4f5b9f21461068b575f80fd5b806350460cd0116102455780637a5800e9116101ff5780637efd68bb116101da5780637efd68bb146105775780637fa6170f1461058c5780638da5cb5b146105a15780639763715a146105d1575f80fd5b80637a5800e91461052f5780637aa70e3f1461054e5780637e9ef07914610562575f80fd5b806350460cd01461049f57806355bc473c146104b457806365af674d146104c8578063682b08d2146104e7578063715018a614610506578063760e24c71461051a575f80fd5b8063286912cb116102b05780634053119c1161028b5780634053119c146103fb5780634437d10d1461041a578063477d440d1461046157806349ff996414610480575f80fd5b8063286912cb146103a857806338150720146103c75780633b903632146103e6575f80fd5b80630191833b1461030157806305321ea414610329578063115784c41461034a57806311f3f90a1461035f5780631fc865221461037457806320b9e6c614610389575f80fd5b366102fd57005b5f80fd5b34801561030c575f80fd5b5061031660095481565b6040519081526020015b60405180910390f35b348015610334575f80fd5b50610348610343366004615b0f565b610a80565b005b348015610355575f80fd5b50610316600b5481565b34801561036a575f80fd5b5061031660135481565b34801561037f575f80fd5b50610316600c5481565b348015610394575f80fd5b506103486103a3366004615b0f565b610acf565b3480156103b3575f80fd5b506103486103c2366004615b0f565b610cb5565b3480156103d2575f80fd5b506103486103e1366004615b26565b610cc2565b3480156103f1575f80fd5b50610316601b5481565b348015610406575f80fd5b50610316610415366004615b63565b610dba565b348015610425575f80fd5b5061044c610434366004615b63565b601e6020525f90815260409020805460019091015482565b60408051928352602083019190915201610320565b34801561046c575f80fd5b5061034861047b366004615b0f565b612144565b34801561048b575f80fd5b5061034861049a366004615b0f565b612151565b3480156104aa575f80fd5b5061031660175481565b3480156104bf575f80fd5b5061034861215e565b3480156104d3575f80fd5b506103486104e2366004615b63565b6122b8565b3480156104f2575f80fd5b50610348610501366004615b63565b6122e2565b348015610511575f80fd5b5061034861230c565b348015610525575f80fd5b5061031660155481565b34801561053a575f80fd5b50610348610549366004615b0f565b61231f565b348015610559575f80fd5b506103486123ee565b34801561056d575f80fd5b5061031660125481565b348015610582575f80fd5b5061031660165481565b348015610597575f80fd5b50610316600e5481565b3480156105ac575f80fd5b505f546001600160a01b03165b6040516001600160a01b039091168152602001610320565b3480156105dc575f80fd5b506103486105eb366004615b0f565b612401565b3480156105fb575f80fd5b5061034861060a366004615b0f565b61240e565b34801561061a575f80fd5b50610348610629366004615b26565b61241b565b348015610639575f80fd5b50610348610648366004615b0f565b6125b3565b348015610658575f80fd5b50610348610667366004615b85565b6125c0565b348015610677575f80fd5b50610348610686366004615bbc565b61263b565b348015610696575f80fd5b506007546105b9906001600160a01b031681565b3480156106b5575f80fd5b506106c96106c4366004615b0f565b612661565b60408051938452602084019290925290820152606001610320565b3480156106ef575f80fd5b50610316600a5481565b348015610704575f80fd5b506005546105b9906001600160a01b031681565b348015610723575f80fd5b5061031660145481565b348015610738575f80fd5b506107b5610747366004615b63565b602080525f9081526040902080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a909a015498999798969795969495939492939192909160ff808216926101008304821692620100009004909116908d565b604080519d8e5260208e019c909c529a8c019990995260608b019790975260808a019590955260a089019390935260c088019190915260e08701526101008601521515610120850152151561014084015215156101608301526101808201526101a001610320565b348015610828575f80fd5b50610348610837366004615b0f565b6126ae565b348015610847575f80fd5b5061031660185481565b34801561085c575f80fd5b5061031660115481565b348015610871575f80fd5b506103486126bb565b348015610885575f80fd5b50610316600d5481565b34801561089a575f80fd5b506103166108a9366004615b63565b61282d565b3480156108b9575f80fd5b506108ee6108c8366004615b0f565b60216020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610320565b348015610919575f80fd5b50610348610928366004615b0f565b6128cb565b348015610938575f80fd5b50610348610947366004615bd7565b6128d8565b348015610957575f80fd5b50610348610966366004615b0f565b61296c565b348015610976575f80fd5b506106c9610985366004615b0f565b60226020525f908152604090208054600182015460029092015490919083565b3480156109b0575f80fd5b506107b56109bf366004615b63565b601f6020525f9081526040902080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a909a015498999798969795969495939492939192909160ff808216926101008304821692620100009004909116908d565b348015610a39575f80fd5b50610348610a48366004615b63565b612f6c565b348015610a58575f80fd5b50610348610a67366004615bd7565b612fe7565b348015610a77575f80fd5b50610348613010565b610a88613205565b80471015610a94575f80fd5b6007546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015610acb573d5f803e3d5ffd5b5050565b600654600160a01b900460ff1615610ae5575f80fd5b801580610af25750806001145b610afa575f80fd5b805f03610c1b57335f908152601f6020526040902060090154610100900460ff1615610b24575f80fd5b335f908152601f602052604090206009015460ff161515600114610b46575f80fd5b335f908152601f60205260409020600201544211610b62575f80fd5b60048054335f818152601f60205260409081902054905163a9059cbb60e01b81526001600160a01b039093169363a9059cbb93610ba193929101615bf7565b6020604051808303815f875af1158015610bbd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610be19190615c10565b610be9575f80fd5b335f908152601f60205260409020600981018054600283015460079093019290925562ffff0019909116620101001790555b80600103610cb257335f908152602080526040902060090154610100900460ff1615610c45575f80fd5b335f90815260208052604090206009015460ff161515600114610c66575f80fd5b335f9081526020805260409020600201544211610c81575f80fd5b335f9081526020805260409020600981018054600283015460079093019290925562ffff0019909116620101001790555b50565b610cbd613205565b601655565b600654600160a01b900460ff1615610cd8575f80fd5b801580610ce55750806001145b610ced575f80fd5b5f610cf733610dba565b90508015610d0757610d076126bb565b815f03610d5e575f8411610d19575f80fd5b335f908152601f6020526040902054841115610d33575f80fd5b335f908152601f602052604090206009015460ff161515600114610d55575f80fd5b610d5e8461325e565b81600103610db4575f8311610d71575f80fd5b335f908152602080526040902054831115610d8a575f80fd5b335f90815260208052604090206009015460ff161515600114610dab575f80fd5b610db4836138a4565b50505050565b6001600160a01b0381165f908152601f60208181526040808420600a8082015460048301548580529387209182015460059092015495909452600990910154929391929091908590819060ff6101009091041615156001148015610e3757506001600160a01b0388165f908152601f602052604090206008015442105b15610f8b576017548614610f1857855b601754811015610f16578560225f610e60846001615c3f565b81526020019081526020015f205f0154610e7a9190615c58565b5f828152602260209081526040808320600101546001600160a01b038e168452601f90925290912054610eb690670de0b6b3a764000090615c6b565b610ec09190615c8a565b610eca9190615c8a565b610ed49084615c3f565b925060225f610ee4836001615c3f565b815260208101919091526040015f2054955086610f0081615ca1565b9750508080610f0e90615ca1565b915050610e47565b505b6017548603610f8b57610f2b8542615c58565b6017545f908152602260209081526040808320600101546001600160a01b038d168452601f90925290912054610f6a90670de0b6b3a764000090615c6b565b610f749190615c8a565b610f7e9190615c8a565b610f889083615c3f565b91505b6001600160a01b0388165f908152601f6020526040902060090154610100900460ff16158015610fda57506001600160a01b0388165f908152601f602052604090206009015460ff1615156001145b8015610fff57506001600160a01b0388165f908152601f602052604090206002015442105b156111535760175486146110e057855b6017548110156110de578560225f611028846001615c3f565b81526020019081526020015f205f01546110429190615c58565b5f828152602260209081526040808320600101546001600160a01b038e168452601f9092529091205461107e90670de0b6b3a764000090615c6b565b6110889190615c8a565b6110929190615c8a565b61109c9084615c3f565b925060225f6110ac836001615c3f565b815260208101919091526040015f20549550866110c881615ca1565b97505080806110d690615ca1565b91505061100f565b505b6017548603611153576110f38542615c58565b6017545f908152602260209081526040808320600101546001600160a01b038d168452601f9092529091205461113290670de0b6b3a764000090615c6b565b61113c9190615c8a565b6111469190615c8a565b6111509083615c3f565b91505b6001600160a01b0388165f908152601f602052604090206009015460ff61010090910416151560011480156111a257506001600160a01b0388165f908152601f60205260409020600801544210155b80156111d357506001600160a01b0388165f908152601f602052604090206009015462010000900460ff1615156001145b1561144e576017548610156113bf57855b6017548110156113bd5760225f6111fc836001615c3f565b815260208082019290925260409081015f908120546001600160a01b038d168252601f909352206008015411156112e0578560225f61123c846001615c3f565b81526020019081526020015f205f01546112569190615c58565b5f828152602260209081526040808320600101546001600160a01b038e168452601f9092529091205461129290670de0b6b3a764000090615c6b565b61129c9190615c8a565b6112a69190615c8a565b6112b09084615c3f565b925060225f6112c0836001615c3f565b815260208101919091526040015f20549550866112dc81615ca1565b9750505b60225f6112ee836001615c3f565b815260208082019290925260409081015f908120546001600160a01b038d168252601f9093522060080154116113ab576001600160a01b0389165f908152601f6020526040812060080154611344908890615c58565b5f838152602260209081526040808320600101546001600160a01b038f168452601f90925290912054919250829161138590670de0b6b3a764000090615c6b565b61138f9190615c8a565b6113999190615c8a565b6113a39085615c3f565b9350506113bd565b806113b581615ca1565b9150506111e4565b505b601754860361144e576001600160a01b0388165f908152601f60205260409020600801546113ee908690615c58565b6017545f908152602260209081526040808320600101546001600160a01b038d168452601f9092529091205461142d90670de0b6b3a764000090615c6b565b6114379190615c8a565b6114419190615c8a565b61144b9083615c3f565b91505b6001600160a01b0388165f908152601f6020526040902060090154610100900460ff1615801561149d57506001600160a01b0388165f908152601f602052604090206009015460ff1615156001145b80156114c357506001600160a01b0388165f908152601f60205260409020600201544210155b80156114f457506001600160a01b0388165f908152601f602052604090206009015462010000900460ff1615156001145b156117a25760175486101561171357855b6017548110156117115760225f61151d836001615c3f565b815260208082019290925260409081015f908120546001600160a01b038d168252601f90935220600201541115611601578560225f61155d846001615c3f565b81526020019081526020015f205f01546115779190615c58565b5f828152602260209081526040808320600101546001600160a01b038e168452601f909252909120546115b390670de0b6b3a764000090615c6b565b6115bd9190615c8a565b6115c79190615c8a565b6115d19084615c3f565b925060225f6115e1836001615c3f565b815260208101919091526040015f20549550866115fd81615ca1565b9750505b60225f61160f836001615c3f565b815260208082019290925260409081015f908120546001600160a01b038d168252601f90935220600201541180159061166d57506001600160a01b0389165f908152601f602052604090206009015462010000900460ff1615156001145b156116ff576001600160a01b0389165f908152601f6020526040812060020154611698908890615c58565b5f838152602260209081526040808320600101546001600160a01b038f168452601f9092529091205491925082916116d990670de0b6b3a764000090615c6b565b6116e39190615c8a565b6116ed9190615c8a565b6116f79085615c3f565b935050611711565b8061170981615ca1565b915050611505565b505b60175486036117a2576001600160a01b0388165f908152601f6020526040902060020154611742908690615c58565b6017545f908152602260209081526040808320600101546001600160a01b038d168452601f9092529091205461178190670de0b6b3a764000090615c6b565b61178b9190615c8a565b6117959190615c8a565b61179f9083615c3f565b91505b6001600160a01b0388165f90815260208052604090206009015460ff61010090910416151560011480156117ee57506001600160a01b0388165f90815260208052604090206008015442105b1561193e5760175484146118cd57835b6017548110156118cb578360225f611817846001615c3f565b81526020019081526020015f205f01546118319190615c58565b5f828152602260209081526040808320600201546001600160a01b038e1684529180529091205461186b90670de0b6b3a764000090615c6b565b6118759190615c8a565b61187f9190615c8a565b6118899083615c3f565b915060225f611899836001615c3f565b815260208101919091526040015f20549350846118b581615ca1565b95505080806118c390615ca1565b9150506117fe565b505b601754840361193e576118e08342615c58565b6017545f908152602260209081526040808320600201546001600160a01b038d1684529180529091205461191d90670de0b6b3a764000090615c6b565b6119279190615c8a565b6119319190615c8a565b61193b9082615c3f565b90505b6001600160a01b0388165f908152602080526040902060090154610100900460ff1615801561198b57506001600160a01b0388165f90815260208052604090206009015460ff1615156001145b80156119af57506001600160a01b0388165f90815260208052604090206002015442105b80156119df57506001600160a01b0388165f90815260208052604090206009015462010000900460ff1615156001145b15611b2f576017548414611abe57835b601754811015611abc578360225f611a08846001615c3f565b81526020019081526020015f205f0154611a229190615c58565b5f828152602260209081526040808320600201546001600160a01b038e16845291805290912054611a5c90670de0b6b3a764000090615c6b565b611a669190615c8a565b611a709190615c8a565b611a7a9083615c3f565b915060225f611a8a836001615c3f565b815260208101919091526040015f2054935084611aa681615ca1565b9550508080611ab490615ca1565b9150506119ef565b505b6017548403611b2f57611ad18342615c58565b6017545f908152602260209081526040808320600201546001600160a01b038d16845291805290912054611b0e90670de0b6b3a764000090615c6b565b611b189190615c8a565b611b229190615c8a565b611b2c9082615c3f565b90505b6001600160a01b0388165f90815260208052604090206009015460ff6101009091041615156001148015611b7c57506001600160a01b0388165f9081526020805260409020600801544210155b15611e1c576017548414611d9057835b601754811015611d8e5760225f611ba4836001615c3f565b815260208082019290925260409081015f908120546001600160a01b038d16825292805220600801541115611c84578360225f611be2846001615c3f565b81526020019081526020015f205f0154611bfc9190615c58565b5f828152602260209081526040808320600201546001600160a01b038e16845291805290912054611c3690670de0b6b3a764000090615c6b565b611c409190615c8a565b611c4a9190615c8a565b611c549083615c3f565b915060225f611c64836001615c3f565b815260208101919091526040015f2054935084611c8081615ca1565b9550505b60225f611c92836001615c3f565b815260208082019290925260409081015f908120546001600160a01b038d168252928052206008015411801590611ced57506001600160a01b0389165f90815260208052604090206009015462010000900460ff1615156001145b15611d7c576001600160a01b0389165f908152602080526040812060080154611d17908690615c58565b5f838152602260209081526040808320600201546001600160a01b038f168452918052909120549192508291611d5690670de0b6b3a764000090615c6b565b611d609190615c8a565b611d6a9190615c8a565b611d749084615c3f565b925050611d8e565b80611d8681615ca1565b915050611b8c565b505b6017548403611e1c576001600160a01b0388165f908152602080526040902060080154611dbe908490615c58565b6017545f908152602260209081526040808320600201546001600160a01b038d16845291805290912054611dfb90670de0b6b3a764000090615c6b565b611e059190615c8a565b611e0f9190615c8a565b611e199082615c3f565b90505b6001600160a01b0388165f908152602080526040902060090154610100900460ff16158015611e6957506001600160a01b0388165f90815260208052604090206009015460ff1615156001145b8015611e8e57506001600160a01b0388165f9081526020805260409020600201544210155b1561212e5760175484146120a257835b6017548110156120a05760225f611eb6836001615c3f565b815260208082019290925260409081015f908120546001600160a01b038d16825292805220600201541115611f96578360225f611ef4846001615c3f565b81526020019081526020015f205f0154611f0e9190615c58565b5f828152602260209081526040808320600201546001600160a01b038e16845291805290912054611f4890670de0b6b3a764000090615c6b565b611f529190615c8a565b611f5c9190615c8a565b611f669083615c3f565b915060225f611f76836001615c3f565b815260208101919091526040015f2054935084611f9281615ca1565b9550505b60225f611fa4836001615c3f565b815260208082019290925260409081015f908120546001600160a01b038d168252928052206002015411801590611fff57506001600160a01b0389165f90815260208052604090206009015462010000900460ff1615156001145b1561208e576001600160a01b0389165f908152602080526040812060020154612029908690615c58565b5f838152602260209081526040808320600201546001600160a01b038f16845291805290912054919250829161206890670de0b6b3a764000090615c6b565b6120729190615c8a565b61207c9190615c8a565b6120869084615c3f565b9250506120a0565b8061209881615ca1565b915050611e9e565b505b601754840361212e576001600160a01b0388165f9081526020805260409020600201546120d0908490615c58565b6017545f908152602260209081526040808320600201546001600160a01b038d1684529180529091205461210d90670de0b6b3a764000090615c6b565b6121179190615c8a565b6121219190615c8a565b61212b9082615c3f565b90505b6121388183615c3f565b98975050505050505050565b61214c613205565b601455565b612159613205565b601355565b335f908152601e6020526040812054601b5461217a9190615c58565b335f908152601f6020526040812054600954929350916121a390670de0b6b3a764000090615c6b565b90505f816121b2846064615c8a565b6121bc9190615c6b565b90505f6121ca606483615c6b565b6121d49086615c8a565b90505f6121e9670de0b6b3a764000083615c6b565b60035460405163a9059cbb60e01b81529192506001600160a01b03169063a9059cbb9061221c9033908590600401615bf7565b6020604051808303815f875af1158015612238573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061225c9190615c10565b50335f9081526020805260408120600301805483929061227d908490615c3f565b9091555050601b54335f908152601e60205260408120918255600190910180548392906122ab908490615c3f565b9091555050505050505050565b6122c0613205565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6122ea613205565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b612314613205565b61231d5f613dbf565b565b600654600160a01b900460ff1615612335575f80fd5b8015801561235f5750335f908152601f602052604090206009015460ff6101009091041615156001145b8061239057508060011480156123905750335f90815260208052604090206009015460ff6101009091041615156001145b612398575f80fd5b805f036123c2575f601554426123ae9190615c3f565b335f908152601f6020526040902060080155505b80600103610cb2575f601654426123d99190615c3f565b335f9081526020805260409020600801555050565b6123f6613205565b5f600f819055601055565b612409613205565b601555565b612416613205565b601a55565b600654600160a01b900460ff1615612431575f80fd5b80158061243e5750806001145b612446575f80fd5b335f908152601f602052604090206009015460ff161515600114806124805750335f90815260208052604090206009015460ff1615156001145b1561248d5761248d613e0e565b805f0361250b576019548310156124a2575f80fd5b335f908152601f602052604090206009015460ff1615156001036124e5575f6124ca3361282d565b905080156124da576124da61215e565b6124e38461549b565b505b335f908152601f602052604081206009015460ff161515900361250b5761250b83615657565b8060010361256c57601a54821015612521575f80fd5b335f90815260208052604090206009015460ff1615156001036125475761254782615834565b335f90815260208052604081206009015460ff161515900361256c5761256c82615951565b60408051338152602081018590529081018390527fe41aca6803ab96b2eebcb4810bd12878f9891213ac7855733805bc095b83d058906060015b60405180910390a1505050565b6125bb613205565b601d55565b6125c8613205565b60405163a9059cbb60e01b81526001600160a01b0383169063a9059cbb906125f69033908590600401615bf7565b6020604051808303815f875af1158015612612573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126369190615c10565b505050565b612643613205565b60068054911515600160a01b0260ff60a01b19909216919091179055565b5f805f6017548410612671575f80fd5b5050505f81815260226020908152604091829020825160608101845281548082526001830154938201849052600290920154930183905293909250565b6126b6613205565b601c55565b6126c3613e0e565b335f908152601f602090815260408083206005015491805282206006015490916126ed8284615c3f565b9050804710156126fb575f80fd5b604051339082156108fc029083905f818181858888f19350505050158015612725573d5f803e3d5ffd5b50335f908152601f602052604081206003018054859290612747908490615c3f565b9091555050335f9081526020805260408120600401805484929061276c908490615c3f565b9091555050335f908152601f602090815260408083206005018390559080528120600601819055600d80548392906127a5908490615c3f565b9091555050601c548111156127ee577f09bbc196c5b25ae4a2ce7cb573a0e91cf0f091d6c125f5db36489b8625d81ca533826040516127e5929190615bf7565b60405180910390a15b601d5447101561263657604080514281524760208201527fbe01094ad628b24be59bba55486a9265da2fd85b3526dafae7ad71c4bd1c9ded91016125a6565b6001600160a01b0381165f908152601e6020526040812054601b54829161285391615c58565b6001600160a01b0384165f908152601f60205260408120546009549293509161288590670de0b6b3a764000090615c6b565b90505f81612894846064615c8a565b61289e9190615c6b565b90505f6128ac606483615c6b565b6128b69086615c8a565b90505f612138670de0b6b3a764000083615c6b565b6128d3613205565b601955565b6128e0613205565b60178054905f6128ef83615ca1565b9091555050601754604080516060808201835242825260208083018781528385018781525f8781526022845286902094518555905160018501555160029093019290925582518481529182018690529181018490527f5ead928997a87f087dff9f1b3a30924221910665d62d27862eed256ab4abf15591016125a6565b335f908152601f602052604090206009015460ff1615156001036129925761299261215e565b61299a613e0e565b335f908152601f602090815260408083206005015491805282206006015490916129c48284615c3f565b6040805160028082526060820183529293505f9290916020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612a30573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a549190615ccd565b815f81518110612a6657612a66615ce8565b6001600160a01b039283166020918202929092010152600854825191169082906001908110612a9757612a97615ce8565b6001600160a01b03928316602091820292909201015260065460405163d06ca61f60e01b81525f92919091169063d06ca61f90612ada9086908690600401615d3e565b5f60405180830381865afa158015612af4573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612b1b9190810190615d5e565b90505f81600181518110612b3157612b31615ce8565b60209081029190910101516002546040516370a0823160e01b81523060048201529192505f916001600160a01b03909116906370a0823190602401602060405180830381865afa158015612b87573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bab9190615e0b565b90505f6064612bba8a85615c8a565b612bc49190615c6b565b90505f612bd18285615c58565b60065460405163b6f9de9560e01b81529192506001600160a01b03169063b6f9de95908990612c0a9085908b9030904290600401615e22565b5f604051808303818588803b158015612c21575f80fd5b505af1158015612c33573d5f803e3d5ffd5b50506002546040516370a0823160e01b81523060048201525f94506001600160a01b0390911692506370a082319150602401602060405180830381865afa158015612c80573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ca49190615e0b565b90505f612cb18583615c58565b335f908152601f6020526040902060090154909150610100900460ff161515600103612d4a576004805460405163a9059cbb60e01b81526001600160a01b039091169163a9059cbb91612d08913391869101615bf7565b6020604051808303815f875af1158015612d24573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d489190615c10565b505b335f908152601f602052604090206009015460ff161515600103612dd257335f908152601f602052604081208054839290612d86908490615c3f565b9091555050335f908152601f6020526040812060060180548b9290612dac908490615c3f565b9091555050335f908152601f602090815260408083206005018390559080528120600601555b335f908152601f602052604081206009015460ff1615159003612eef57335f908152601f602052604081208054839290612e0d908490615c3f565b9091555050335f908152601f60205260409020426001909101819055601354612e3591615c3f565b335f908152601f602090815260408083206002810194909455600784018390556407915ecc00600885015560098085018054600161ffff198216811783556003880187905560068089018890554260048a0155601754600a8a0155600590980187905562ffffff199091166201000117909155601b54601e8552838620908155018490559180528220909201819055815483929190612ed5908490615c3f565b9091555050600b8054905f612ee983615ca1565b91905055505b8060095f828254612f009190615c3f565b9250508190555088600e5f828254612f189190615c3f565b909155505060408051338152602081018b90529081018290527f7a9b8ad43aacbbf8905aa3cb89f0f20ca67e967741923008984db7686d3af59b9060600160405180910390a1505050505050505050505050565b612f74613205565b6001600160a01b038116612fde5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b610cb281613dbf565b612fef613205565b603c612ffb8284615c3f565b1115613005575f80fd5b600f91909155601055565b613018613205565b6003546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa15801561305e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130829190615e0b565b905060055f9054906101000a90046001600160a01b03166001600160a01b0316634e71d92d6040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156130d0575f80fd5b505af11580156130e2573d5f803e3d5ffd5b50506003546040516370a0823160e01b81523060048201525f93506001600160a01b0390911691506370a0823190602401602060405180830381865afa15801561312e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131529190615e0b565b90505f61315f8383615c58565b90505f60095482670de0b6b3a76400006131799190615c8a565b6131839190615c6b565b60188054604080516080810182524281526020808201888152600954838501908152606084018881525f8781526021909452948320935184559051600184015551600283015591516003909101558254939450909291906131e383615ca1565b919050555082601b5f8282546131f99190615c3f565b90915550505050505050565b5f546001600160a01b0316331461231d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401612fd5565b335f908152601f6020526040902060090154610100900460ff161515600103613368576004805460405163095ea7b360e01b81526001600160a01b039091169163095ea7b3916132b2913091869101615bf7565b6020604051808303815f875af11580156132ce573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132f29190615c10565b50600480546040516323b872dd60e01b81526001600160a01b03909116916323b872dd916133269133913091879101615e56565b6020604051808303815f875af1158015613342573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133669190615c10565b505b5f6133723361282d565b905080156133825761338261215e565b335f908152601f60205260408120600801548190421180156133c05750335f908152601f602052604090206009015460ff6101009091041615156001145b1561345c5760025460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906133f79033908890600401615bf7565b6020604051808303815f875af1158015613413573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134379190615c10565b50335f908152601f602052604081208054869290613456908490615c58565b90915550505b335f908152601f6020526040902060020154421180156134935750335f908152601f6020526040902060090154610100900460ff16155b1561352f5760025460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906134ca9033908890600401615bf7565b6020604051808303815f875af11580156134e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061350a9190615c10565b50335f908152601f602052604081208054869290613529908490615c58565b90915550505b335f908152601f60205260409020600801544210801561356b5750335f908152601f602052604090206009015460ff6101009091041615156001145b156136a5576064600f54856135809190615c8a565b61358a9190615c6b565b90506135968185615c58565b60025460405163a9059cbb60e01b81529193506001600160a01b03169063a9059cbb906135c99033908690600401615bf7565b6020604051808303815f875af11580156135e5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136099190615c10565b5060025460075460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb92613640929116908590600401615bf7565b6020604051808303815f875af115801561365c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136809190615c10565b50335f908152601f60205260408120805486929061369f908490615c58565b90915550505b335f908152601f6020526040902060020154421080156136dc5750335f908152601f6020526040902060090154610100900460ff16155b15613816576064600f54856136f19190615c8a565b6136fb9190615c6b565b90506137078185615c58565b60025460405163a9059cbb60e01b81529193506001600160a01b03169063a9059cbb9061373a9033908690600401615bf7565b6020604051808303815f875af1158015613756573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061377a9190615c10565b5060025460075460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb926137b1929116908590600401615bf7565b6020604051808303815f875af11580156137cd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137f19190615c10565b50335f908152601f602052604081208054869290613810908490615c58565b90915550505b601954335f908152601f60205260409020541015610db457335f908152601f60205260408120818155600181018290556002810182905560038101829055600481018290556005810182905560068101829055600781018290556008810182905560098101805462ffffff19169055600a01819055600b80549161389983615e7a565b919050555050505050565b335f908152602080526040812060080154819042108015906138e15750335f90815260208052604090206009015460ff6101009091041615156001145b1561397f5760035460405163a9059cbb60e01b81528493506001600160a01b039091169063a9059cbb9061391b9033908690600401615bf7565b6020604051808303815f875af1158015613937573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061395b9190615c10565b50335f90815260208052604081208054859290613979908490615c58565b90915550505b335f90815260208052604090206002015442108015906139b55750335f908152602080526040902060090154610100900460ff16155b15613a535760035460405163a9059cbb60e01b81528493506001600160a01b039091169063a9059cbb906139ef9033908690600401615bf7565b6020604051808303815f875af1158015613a0b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a2f9190615c10565b50335f90815260208052604081208054859290613a4d908490615c58565b90915550505b335f90815260208052604090206008015442108015613a8d5750335f90815260208052604090206009015460ff6101009091041615156001145b15613bc657606460105484613aa29190615c8a565b613aac9190615c6b565b9050613ab88184615c58565b60035460405163a9059cbb60e01b81529193506001600160a01b03169063a9059cbb90613aeb9033908690600401615bf7565b6020604051808303815f875af1158015613b07573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b2b9190615c10565b5060035460075460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb92613b62929116908590600401615bf7565b6020604051808303815f875af1158015613b7e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613ba29190615c10565b50335f90815260208052604081208054859290613bc0908490615c58565b90915550505b335f90815260208052604090206002015442108015613bfb5750335f908152602080526040902060090154610100900460ff16155b15613d3457606460105484613c109190615c8a565b613c1a9190615c6b565b9050613c268184615c58565b60035460405163a9059cbb60e01b81529193506001600160a01b03169063a9059cbb90613c599033908690600401615bf7565b6020604051808303815f875af1158015613c75573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613c999190615c10565b5060035460075460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb92613cd0929116908590600401615bf7565b6020604051808303815f875af1158015613cec573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d109190615c10565b50335f90815260208052604081208054859290613d2e908490615c58565b90915550505b601a54335f908152602080526040902054101561263657335f9081526020805260408120818155600181018290556002810182905560038101829055600481018290556005810182905560068101829055600781018290556008810182905560098101805462ffffff19169055600a01819055600c805491613db583615e7a565b9190505550505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b335f908152601f6020526040812060090154819060ff6101009091041615156001148015613e4c5750335f908152601f602052604090206008015442105b1561401957601754335f908152601f60205260409020600a015414613f7757335f908152601f60205260409020600a01545b601754811015613f7557335f908152601f602052604081206004015490602290613ea9846001615c3f565b81526020019081526020015f205f0154613ec39190615c58565b5f82815260226020908152604080832060010154338452601f90925290912054613ef690670de0b6b3a764000090615c6b565b613f009190615c8a565b613f0a9190615c8a565b613f149084615c3f565b925060225f613f24836001615c3f565b815260208082019290925260409081015f90812054338252601f9093529081206004810192909255600a909101805491613f5d83615ca1565b91905055508080613f6d90615ca1565b915050613e7e565b505b601754335f908152601f60205260409020600a01540361401957335f908152601f6020526040902060040154613fad9042615c58565b6017545f90815260226020908152604080832060010154338452601f90925290912054613fe390670de0b6b3a764000090615c6b565b613fed9190615c8a565b613ff79190615c8a565b6140019083615c3f565b335f908152601f602052604090204260049091015591505b335f908152601f6020526040902060090154610100900460ff161580156140565750335f908152601f602052604090206009015460ff1615156001145b80156140725750335f908152601f602052604090206002015442105b1561423f57601754335f908152601f60205260409020600a01541461419d57335f908152601f60205260409020600a01545b60175481101561419b57335f908152601f6020526040812060040154906022906140cf846001615c3f565b81526020019081526020015f205f01546140e99190615c58565b5f82815260226020908152604080832060010154338452601f9092529091205461411c90670de0b6b3a764000090615c6b565b6141269190615c8a565b6141309190615c8a565b61413a9084615c3f565b925060225f61414a836001615c3f565b815260208082019290925260409081015f90812054338252601f9093529081206004810192909255600a90910180549161418383615ca1565b9190505550808061419390615ca1565b9150506140a4565b505b601754335f908152601f60205260409020600a01540361423f57335f908152601f60205260409020600401546141d39042615c58565b6017545f90815260226020908152604080832060010154338452601f9092529091205461420990670de0b6b3a764000090615c6b565b6142139190615c8a565b61421d9190615c8a565b6142279083615c3f565b335f908152601f602052604090204260049091015591505b335f908152601f602052604090206009015460ff610100909104161515600114801561427c5750335f908152601f60205260409020600801544210155b80156142a45750335f908152601f602052604090206009015462010000900460ff1615156001145b1561459b57601754335f908152601f60205260409020600a015410156144e257335f908152601f60205260409020600a01545b6017548110156144e05760225f6142ef836001615c3f565b815260208082019290925260409081015f90812054338252601f909352206008015411156143f257335f908152601f602052604081206004015490602290614338846001615c3f565b81526020019081526020015f205f01546143529190615c58565b5f82815260226020908152604080832060010154338452601f9092529091205461438590670de0b6b3a764000090615c6b565b61438f9190615c8a565b6143999190615c8a565b6143a39084615c3f565b925060225f6143b3836001615c3f565b815260208082019290925260409081015f90812054338252601f9093529081206004810192909255600a9091018054916143ec83615ca1565b91905055505b60225f614400836001615c3f565b815260208082019290925260409081015f90812054338252601f9093522060080154116144ce57335f908152601f60205260408120600481015460089091015461444a9190615c58565b5f83815260226020908152604080832060010154338452601f90925290912054919250829161448290670de0b6b3a764000090615c6b565b61448c9190615c8a565b6144969190615c8a565b6144a09085615c3f565b335f908152601f6020526040902060088101546004820155600901805462ff00001916905593506144e09050565b806144d881615ca1565b9150506142d7565b505b601754335f908152601f60205260409020600a01540361459b57335f908152601f60205260409020600481015460089091015461451f9190615c58565b6017545f90815260226020908152604080832060010154338452601f9092529091205461455590670de0b6b3a764000090615c6b565b61455f9190615c8a565b6145699190615c8a565b6145739083615c3f565b335f908152601f6020526040902060088101546004820155600901805462ff00001916905591505b335f908152601f6020526040902060090154610100900460ff161580156145d85750335f908152601f602052604090206009015460ff1615156001145b80156145f55750335f908152601f60205260409020600201544210155b801561461d5750335f908152601f602052604090206009015462010000900460ff1615156001145b1561493e57601754335f908152601f60205260409020600a0154101561488557335f908152601f60205260409020600a01545b6017548110156148835760225f614668836001615c3f565b815260208082019290925260409081015f90812054338252601f9093522060020154111561476b57335f908152601f6020526040812060040154906022906146b1846001615c3f565b81526020019081526020015f205f01546146cb9190615c58565b5f82815260226020908152604080832060010154338452601f909252909120546146fe90670de0b6b3a764000090615c6b565b6147089190615c8a565b6147129190615c8a565b61471c9084615c3f565b925060225f61472c836001615c3f565b815260208082019290925260409081015f90812054338252601f9093529081206004810192909255600a90910180549161476583615ca1565b91905055505b60225f614779836001615c3f565b815260208082019290925260409081015f90812054338252601f9093522060020154118015906147c55750335f908152601f602052604090206009015462010000900460ff1615156001145b1561487157335f908152601f6020526040812060048101546002909101546147ed9190615c58565b5f83815260226020908152604080832060010154338452601f90925290912054919250829161482590670de0b6b3a764000090615c6b565b61482f9190615c8a565b6148399190615c8a565b6148439085615c3f565b335f908152601f6020526040902060028101546004820155600901805462ff00001916905593506148839050565b8061487b81615ca1565b915050614650565b505b601754335f908152601f60205260409020600a01540361493e57335f908152601f6020526040902060048101546002909101546148c29190615c58565b6017545f90815260226020908152604080832060010154338452601f909252909120546148f890670de0b6b3a764000090615c6b565b6149029190615c8a565b61490c9190615c8a565b6149169083615c3f565b335f908152601f6020526040902060028101546004820155600901805462ff00001916905591505b335f90815260208052604090206009015460ff61010090910416151560011480156149785750335f90815260208052604090206008015442105b15614b3957601754335f9081526020805260409020600a015414614a9c57335f9081526020805260409020600a01545b601754811015614a9a57335f908152602080526040812060050154906022906149d2846001615c3f565b81526020019081526020015f205f01546149ec9190615c58565b5f8281526022602090815260408083206002015433845291805290912054614a1d90670de0b6b3a764000090615c6b565b614a279190615c8a565b614a319190615c8a565b614a3b9083615c3f565b915060225f614a4b836001615c3f565b815260208082019290925260409081015f908120543382529280529081206005810192909255600a909101805491614a8283615ca1565b91905055508080614a9290615ca1565b9150506149a8565b505b601754335f9081526020805260409020600a015403614b3957335f908152602080526040902060050154614ad09042615c58565b6017545f9081526022602090815260408083206002015433845291805290912054614b0490670de0b6b3a764000090615c6b565b614b0e9190615c8a565b614b189190615c8a565b614b229082615c3f565b335f90815260208052604090204260059091015590505b335f908152602080526040902060090154610100900460ff16158015614b745750335f90815260208052604090206009015460ff1615156001145b8015614b8f5750335f90815260208052604090206002015442105b8015614bb65750335f90815260208052604090206009015462010000900460ff1615156001145b15614d7757601754335f9081526020805260409020600a015414614cda57335f9081526020805260409020600a01545b601754811015614cd857335f90815260208052604081206005015490602290614c10846001615c3f565b81526020019081526020015f205f0154614c2a9190615c58565b5f8281526022602090815260408083206002015433845291805290912054614c5b90670de0b6b3a764000090615c6b565b614c659190615c8a565b614c6f9190615c8a565b614c799083615c3f565b915060225f614c89836001615c3f565b815260208082019290925260409081015f908120543382529280529081206005810192909255600a909101805491614cc083615ca1565b91905055508080614cd090615ca1565b915050614be6565b505b601754335f9081526020805260409020600a015403614d7757335f908152602080526040902060050154614d0e9042615c58565b6017545f9081526022602090815260408083206002015433845291805290912054614d4290670de0b6b3a764000090615c6b565b614d4c9190615c8a565b614d569190615c8a565b614d609082615c3f565b335f90815260208052604090204260059091015590505b335f90815260208052604090206009015460ff6101009091041615156001148015614db25750335f9081526020805260409020600801544210155b8015614dd95750335f90815260208052604090206009015462010000900460ff1615156001145b156150bc57601754335f9081526020805260409020600a0154101561500857335f9081526020805260409020600a01545b6017548110156150065760225f614e22836001615c3f565b815260208082019290925260409081015f9081205433825292805220600801541115614f1e57335f90815260208052604081206005015490602290614e68846001615c3f565b81526020019081526020015f205f0154614e829190615c58565b5f8281526022602090815260408083206002015433845291805290912054614eb390670de0b6b3a764000090615c6b565b614ebd9190615c8a565b614ec79190615c8a565b614ed19083615c3f565b915060225f614ee1836001615c3f565b815260208082019290925260409081015f908120543382529280529081206005810192909255600a909101805491614f1883615ca1565b91905055505b60225f614f2c836001615c3f565b815260208082019290925260409081015f90812054338252928052206008015411614ff457335f90815260208052604081206005810154600890910154614f739190615c58565b5f83815260226020908152604080832060020154338452918052909120549192508291614fa990670de0b6b3a764000090615c6b565b614fb39190615c8a565b614fbd9190615c8a565b614fc79084615c3f565b335f908152602080526040902060088101546005820155600901805462ff00001916905592506150069050565b80614ffe81615ca1565b915050614e0a565b505b601754335f9081526020805260409020600a0154036150bc57335f908152602080526040902060058101546008909101546150439190615c58565b6017545f908152602260209081526040808320600201543384529180529091205461507790670de0b6b3a764000090615c6b565b6150819190615c8a565b61508b9190615c8a565b6150959082615c3f565b335f908152602080526040902060088101546005820155600901805462ff00001916905590505b335f908152602080526040902060090154610100900460ff161580156150f75750335f90815260208052604090206009015460ff1615156001145b80156151135750335f9081526020805260409020600201544210155b801561513a5750335f90815260208052604090206009015462010000900460ff1615156001145b1561541c57601754335f9081526020805260409020600a01541461536857335f9081526020805260409020600a01545b6017548110156153665760225f615182836001615c3f565b815260208082019290925260409081015f908120543382529280522060020154111561527e57335f908152602080526040812060050154906022906151c8846001615c3f565b81526020019081526020015f205f01546151e29190615c58565b5f828152602260209081526040808320600201543384529180529091205461521390670de0b6b3a764000090615c6b565b61521d9190615c8a565b6152279190615c8a565b6152319083615c3f565b915060225f615241836001615c3f565b815260208082019290925260409081015f908120543382529280529081206005810192909255600a90910180549161527883615ca1565b91905055505b60225f61528c836001615c3f565b815260208082019290925260409081015f9081205433825292805220600201541161535457335f908152602080526040812060058101546002909101546152d39190615c58565b5f8381526022602090815260408083206002015433845291805290912054919250829161530990670de0b6b3a764000090615c6b565b6153139190615c8a565b61531d9190615c8a565b6153279084615c3f565b335f908152602080526040902060028101546005820155600901805462ff00001916905592506153669050565b8061535e81615ca1565b91505061516a565b505b601754335f9081526020805260409020600a01540361541c57335f908152602080526040902060058101546002909101546153a39190615c58565b6017545f90815260226020908152604080832060020154338452918052909120546153d790670de0b6b3a764000090615c6b565b6153e19190615c8a565b6153eb9190615c8a565b6153f59082615c3f565b335f908152602080526040902060028101546005820155600901805462ff00001916905590505b335f908152601f60205260408120600501805484929061543d908490615c3f565b9091555050335f90815260208052604081206006018054839290615462908490615c3f565b925050819055508160115f82825461547a9190615c3f565b925050819055508060125f8282546154929190615c3f565b90915550505050565b60025460405163095ea7b360e01b81526001600160a01b039091169063095ea7b3906154cd9030908590600401615bf7565b6020604051808303815f875af11580156154e9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061550d9190615c10565b506002546040516323b872dd60e01b81526001600160a01b03909116906323b872dd9061554290339030908690600401615e56565b6020604051808303815f875af115801561555e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906155829190615c10565b50335f908152601f6020526040902060090154610100900460ff161515600103615619576004805460405163a9059cbb60e01b81526001600160a01b039091169163a9059cbb916155d7913391869101615bf7565b6020604051808303815f875af11580156155f3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906156179190615c10565b505b335f908152601f602052604081208054839290615637908490615c3f565b925050819055508060095f82825461564f9190615c3f565b909155505050565b60025460405163095ea7b360e01b81526001600160a01b039091169063095ea7b3906156899030908590600401615bf7565b6020604051808303815f875af11580156156a5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906156c99190615c10565b506002546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906156fe90339030908690600401615e56565b6020604051808303815f875af115801561571a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061573e9190615c10565b50335f908152601f60205260408120805483929061575d908490615c3f565b9091555050335f908152601f6020526040902042600190910181905560135461578591615c3f565b335f908152601f602090815260408083206002810194909455600784018390556407915ecc00600885015560098085018054600161ffff198216811783556003880187905560068801879055426004890155601754600a890155600590970186905562ffffff191662010001179055601b54601e9093529083209182559201819055815483929190615818908490615c3f565b9091555050600b8054905f61582c83615ca1565b919050555050565b60035460405163095ea7b360e01b81526001600160a01b039091169063095ea7b3906158669030908590600401615bf7565b6020604051808303815f875af1158015615882573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906158a69190615c10565b506003546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906158db90339030908690600401615e56565b6020604051808303815f875af11580156158f7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061591b9190615c10565b50335f90815260208052604081208054839290615939908490615c3f565b9250508190555080600a5f82825461564f9190615c3f565b60035460405163095ea7b360e01b81526001600160a01b039091169063095ea7b3906159839030908590600401615bf7565b6020604051808303815f875af115801561599f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906159c39190615c10565b506003546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906159f890339030908690600401615e56565b6020604051808303815f875af1158015615a14573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190615a389190615c10565b50335f90815260208052604081208054839290615a56908490615c3f565b9091555050335f9081526020805260409020426001909101819055601454615a7d91615c3f565b335f90815260208052604081206002810192909255600982018054600784018390556407915ecc00600885015561ffff198116600117825560048401839055426005850155601754600a8086019190915560038501849055600690940183905562ffffff191662010001179055815483929190615afb908490615c3f565b9091555050600c8054905f61582c83615ca1565b5f60208284031215615b1f575f80fd5b5035919050565b5f805f60608486031215615b38575f80fd5b505081359360208301359350604090920135919050565b6001600160a01b0381168114610cb2575f80fd5b5f60208284031215615b73575f80fd5b8135615b7e81615b4f565b9392505050565b5f8060408385031215615b96575f80fd5b8235615ba181615b4f565b946020939093013593505050565b8015158114610cb2575f80fd5b5f60208284031215615bcc575f80fd5b8135615b7e81615baf565b5f8060408385031215615be8575f80fd5b50508035926020909101359150565b6001600160a01b03929092168252602082015260400190565b5f60208284031215615c20575f80fd5b8151615b7e81615baf565b634e487b7160e01b5f52601160045260245ffd5b80820180821115615c5257615c52615c2b565b92915050565b81810381811115615c5257615c52615c2b565b5f82615c8557634e487b7160e01b5f52601260045260245ffd5b500490565b8082028115828204841417615c5257615c52615c2b565b5f60018201615cb257615cb2615c2b565b5060010190565b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215615cdd575f80fd5b8151615b7e81615b4f565b634e487b7160e01b5f52603260045260245ffd5b5f8151808452602080850194508084015f5b83811015615d335781516001600160a01b031687529582019590820190600101615d0e565b509495945050505050565b828152604060208201525f615d566040830184615cfc565b949350505050565b5f6020808385031215615d6f575f80fd5b825167ffffffffffffffff80821115615d86575f80fd5b818501915085601f830112615d99575f80fd5b815181811115615dab57615dab615cb9565b8060051b604051601f19603f83011681018181108582111715615dd057615dd0615cb9565b604052918252848201925083810185019188831115615ded575f80fd5b938501935b8285101561213857845184529385019392850192615df2565b5f60208284031215615e1b575f80fd5b5051919050565b848152608060208201525f615e3a6080830186615cfc565b6001600160a01b03949094166040830152506060015292915050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b5f81615e8857615e88615c2b565b505f19019056fea2646970667358221220678c793e895ba5efb0b8ca4e677ba519b9bc809799f55faf5456f71f6670ac2264736f6c634300081500330000000000000000000000003e34eabf5858a126cb583107e643080cee20ca64000000000000000000000000a8a837e2bf0c37fef5c495951a0dfc33aaead57a000000000000000000000000e973ea957ff5462b1076f5f61ef2df7a4b2f13d800000000000000000000000009eefea02aa2e7914fb87f09eed1f9e3e363dbdd0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Deployed Bytecode
0x6080604052600436106102f6575f3560e01c80639a85d6b111610189578063cc8261c2116100d8578063df48d83b11610092578063ea41a76f1161006d578063ea41a76f146109a5578063f2fde38b14610a2e578063fb53abb814610a4d578063fbe7c08514610a6c575f80fd5b8063df48d83b1461092d578063e0f0985b1461094c578063e114b8ff1461096b575f80fd5b8063cc8261c214610851578063cd15153614610866578063ce24ab451461087a578063d01fe5fe1461088f578063d8d043cd146108ae578063dec794891461090e575f80fd5b8063a72b68c711610143578063c4389a031161011e578063c4389a0314610718578063c5ac67171461072d578063c8d0a0621461081d578063c8e4b0981461083c575f80fd5b8063a72b68c7146106aa578063aa7f085b146106e4578063b0a56c14146106f9575f80fd5b80639a85d6b1146105f05780639c6b99041461060f578063a0eba21a1461062e578063a1db97821461064d578063a20f54541461066c578063a4f5b9f21461068b575f80fd5b806350460cd0116102455780637a5800e9116101ff5780637efd68bb116101da5780637efd68bb146105775780637fa6170f1461058c5780638da5cb5b146105a15780639763715a146105d1575f80fd5b80637a5800e91461052f5780637aa70e3f1461054e5780637e9ef07914610562575f80fd5b806350460cd01461049f57806355bc473c146104b457806365af674d146104c8578063682b08d2146104e7578063715018a614610506578063760e24c71461051a575f80fd5b8063286912cb116102b05780634053119c1161028b5780634053119c146103fb5780634437d10d1461041a578063477d440d1461046157806349ff996414610480575f80fd5b8063286912cb146103a857806338150720146103c75780633b903632146103e6575f80fd5b80630191833b1461030157806305321ea414610329578063115784c41461034a57806311f3f90a1461035f5780631fc865221461037457806320b9e6c614610389575f80fd5b366102fd57005b5f80fd5b34801561030c575f80fd5b5061031660095481565b6040519081526020015b60405180910390f35b348015610334575f80fd5b50610348610343366004615b0f565b610a80565b005b348015610355575f80fd5b50610316600b5481565b34801561036a575f80fd5b5061031660135481565b34801561037f575f80fd5b50610316600c5481565b348015610394575f80fd5b506103486103a3366004615b0f565b610acf565b3480156103b3575f80fd5b506103486103c2366004615b0f565b610cb5565b3480156103d2575f80fd5b506103486103e1366004615b26565b610cc2565b3480156103f1575f80fd5b50610316601b5481565b348015610406575f80fd5b50610316610415366004615b63565b610dba565b348015610425575f80fd5b5061044c610434366004615b63565b601e6020525f90815260409020805460019091015482565b60408051928352602083019190915201610320565b34801561046c575f80fd5b5061034861047b366004615b0f565b612144565b34801561048b575f80fd5b5061034861049a366004615b0f565b612151565b3480156104aa575f80fd5b5061031660175481565b3480156104bf575f80fd5b5061034861215e565b3480156104d3575f80fd5b506103486104e2366004615b63565b6122b8565b3480156104f2575f80fd5b50610348610501366004615b63565b6122e2565b348015610511575f80fd5b5061034861230c565b348015610525575f80fd5b5061031660155481565b34801561053a575f80fd5b50610348610549366004615b0f565b61231f565b348015610559575f80fd5b506103486123ee565b34801561056d575f80fd5b5061031660125481565b348015610582575f80fd5b5061031660165481565b348015610597575f80fd5b50610316600e5481565b3480156105ac575f80fd5b505f546001600160a01b03165b6040516001600160a01b039091168152602001610320565b3480156105dc575f80fd5b506103486105eb366004615b0f565b612401565b3480156105fb575f80fd5b5061034861060a366004615b0f565b61240e565b34801561061a575f80fd5b50610348610629366004615b26565b61241b565b348015610639575f80fd5b50610348610648366004615b0f565b6125b3565b348015610658575f80fd5b50610348610667366004615b85565b6125c0565b348015610677575f80fd5b50610348610686366004615bbc565b61263b565b348015610696575f80fd5b506007546105b9906001600160a01b031681565b3480156106b5575f80fd5b506106c96106c4366004615b0f565b612661565b60408051938452602084019290925290820152606001610320565b3480156106ef575f80fd5b50610316600a5481565b348015610704575f80fd5b506005546105b9906001600160a01b031681565b348015610723575f80fd5b5061031660145481565b348015610738575f80fd5b506107b5610747366004615b63565b602080525f9081526040902080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a909a015498999798969795969495939492939192909160ff808216926101008304821692620100009004909116908d565b604080519d8e5260208e019c909c529a8c019990995260608b019790975260808a019590955260a089019390935260c088019190915260e08701526101008601521515610120850152151561014084015215156101608301526101808201526101a001610320565b348015610828575f80fd5b50610348610837366004615b0f565b6126ae565b348015610847575f80fd5b5061031660185481565b34801561085c575f80fd5b5061031660115481565b348015610871575f80fd5b506103486126bb565b348015610885575f80fd5b50610316600d5481565b34801561089a575f80fd5b506103166108a9366004615b63565b61282d565b3480156108b9575f80fd5b506108ee6108c8366004615b0f565b60216020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610320565b348015610919575f80fd5b50610348610928366004615b0f565b6128cb565b348015610938575f80fd5b50610348610947366004615bd7565b6128d8565b348015610957575f80fd5b50610348610966366004615b0f565b61296c565b348015610976575f80fd5b506106c9610985366004615b0f565b60226020525f908152604090208054600182015460029092015490919083565b3480156109b0575f80fd5b506107b56109bf366004615b63565b601f6020525f9081526040902080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a909a015498999798969795969495939492939192909160ff808216926101008304821692620100009004909116908d565b348015610a39575f80fd5b50610348610a48366004615b63565b612f6c565b348015610a58575f80fd5b50610348610a67366004615bd7565b612fe7565b348015610a77575f80fd5b50610348613010565b610a88613205565b80471015610a94575f80fd5b6007546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015610acb573d5f803e3d5ffd5b5050565b600654600160a01b900460ff1615610ae5575f80fd5b801580610af25750806001145b610afa575f80fd5b805f03610c1b57335f908152601f6020526040902060090154610100900460ff1615610b24575f80fd5b335f908152601f602052604090206009015460ff161515600114610b46575f80fd5b335f908152601f60205260409020600201544211610b62575f80fd5b60048054335f818152601f60205260409081902054905163a9059cbb60e01b81526001600160a01b039093169363a9059cbb93610ba193929101615bf7565b6020604051808303815f875af1158015610bbd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610be19190615c10565b610be9575f80fd5b335f908152601f60205260409020600981018054600283015460079093019290925562ffff0019909116620101001790555b80600103610cb257335f908152602080526040902060090154610100900460ff1615610c45575f80fd5b335f90815260208052604090206009015460ff161515600114610c66575f80fd5b335f9081526020805260409020600201544211610c81575f80fd5b335f9081526020805260409020600981018054600283015460079093019290925562ffff0019909116620101001790555b50565b610cbd613205565b601655565b600654600160a01b900460ff1615610cd8575f80fd5b801580610ce55750806001145b610ced575f80fd5b5f610cf733610dba565b90508015610d0757610d076126bb565b815f03610d5e575f8411610d19575f80fd5b335f908152601f6020526040902054841115610d33575f80fd5b335f908152601f602052604090206009015460ff161515600114610d55575f80fd5b610d5e8461325e565b81600103610db4575f8311610d71575f80fd5b335f908152602080526040902054831115610d8a575f80fd5b335f90815260208052604090206009015460ff161515600114610dab575f80fd5b610db4836138a4565b50505050565b6001600160a01b0381165f908152601f60208181526040808420600a8082015460048301548580529387209182015460059092015495909452600990910154929391929091908590819060ff6101009091041615156001148015610e3757506001600160a01b0388165f908152601f602052604090206008015442105b15610f8b576017548614610f1857855b601754811015610f16578560225f610e60846001615c3f565b81526020019081526020015f205f0154610e7a9190615c58565b5f828152602260209081526040808320600101546001600160a01b038e168452601f90925290912054610eb690670de0b6b3a764000090615c6b565b610ec09190615c8a565b610eca9190615c8a565b610ed49084615c3f565b925060225f610ee4836001615c3f565b815260208101919091526040015f2054955086610f0081615ca1565b9750508080610f0e90615ca1565b915050610e47565b505b6017548603610f8b57610f2b8542615c58565b6017545f908152602260209081526040808320600101546001600160a01b038d168452601f90925290912054610f6a90670de0b6b3a764000090615c6b565b610f749190615c8a565b610f7e9190615c8a565b610f889083615c3f565b91505b6001600160a01b0388165f908152601f6020526040902060090154610100900460ff16158015610fda57506001600160a01b0388165f908152601f602052604090206009015460ff1615156001145b8015610fff57506001600160a01b0388165f908152601f602052604090206002015442105b156111535760175486146110e057855b6017548110156110de578560225f611028846001615c3f565b81526020019081526020015f205f01546110429190615c58565b5f828152602260209081526040808320600101546001600160a01b038e168452601f9092529091205461107e90670de0b6b3a764000090615c6b565b6110889190615c8a565b6110929190615c8a565b61109c9084615c3f565b925060225f6110ac836001615c3f565b815260208101919091526040015f20549550866110c881615ca1565b97505080806110d690615ca1565b91505061100f565b505b6017548603611153576110f38542615c58565b6017545f908152602260209081526040808320600101546001600160a01b038d168452601f9092529091205461113290670de0b6b3a764000090615c6b565b61113c9190615c8a565b6111469190615c8a565b6111509083615c3f565b91505b6001600160a01b0388165f908152601f602052604090206009015460ff61010090910416151560011480156111a257506001600160a01b0388165f908152601f60205260409020600801544210155b80156111d357506001600160a01b0388165f908152601f602052604090206009015462010000900460ff1615156001145b1561144e576017548610156113bf57855b6017548110156113bd5760225f6111fc836001615c3f565b815260208082019290925260409081015f908120546001600160a01b038d168252601f909352206008015411156112e0578560225f61123c846001615c3f565b81526020019081526020015f205f01546112569190615c58565b5f828152602260209081526040808320600101546001600160a01b038e168452601f9092529091205461129290670de0b6b3a764000090615c6b565b61129c9190615c8a565b6112a69190615c8a565b6112b09084615c3f565b925060225f6112c0836001615c3f565b815260208101919091526040015f20549550866112dc81615ca1565b9750505b60225f6112ee836001615c3f565b815260208082019290925260409081015f908120546001600160a01b038d168252601f9093522060080154116113ab576001600160a01b0389165f908152601f6020526040812060080154611344908890615c58565b5f838152602260209081526040808320600101546001600160a01b038f168452601f90925290912054919250829161138590670de0b6b3a764000090615c6b565b61138f9190615c8a565b6113999190615c8a565b6113a39085615c3f565b9350506113bd565b806113b581615ca1565b9150506111e4565b505b601754860361144e576001600160a01b0388165f908152601f60205260409020600801546113ee908690615c58565b6017545f908152602260209081526040808320600101546001600160a01b038d168452601f9092529091205461142d90670de0b6b3a764000090615c6b565b6114379190615c8a565b6114419190615c8a565b61144b9083615c3f565b91505b6001600160a01b0388165f908152601f6020526040902060090154610100900460ff1615801561149d57506001600160a01b0388165f908152601f602052604090206009015460ff1615156001145b80156114c357506001600160a01b0388165f908152601f60205260409020600201544210155b80156114f457506001600160a01b0388165f908152601f602052604090206009015462010000900460ff1615156001145b156117a25760175486101561171357855b6017548110156117115760225f61151d836001615c3f565b815260208082019290925260409081015f908120546001600160a01b038d168252601f90935220600201541115611601578560225f61155d846001615c3f565b81526020019081526020015f205f01546115779190615c58565b5f828152602260209081526040808320600101546001600160a01b038e168452601f909252909120546115b390670de0b6b3a764000090615c6b565b6115bd9190615c8a565b6115c79190615c8a565b6115d19084615c3f565b925060225f6115e1836001615c3f565b815260208101919091526040015f20549550866115fd81615ca1565b9750505b60225f61160f836001615c3f565b815260208082019290925260409081015f908120546001600160a01b038d168252601f90935220600201541180159061166d57506001600160a01b0389165f908152601f602052604090206009015462010000900460ff1615156001145b156116ff576001600160a01b0389165f908152601f6020526040812060020154611698908890615c58565b5f838152602260209081526040808320600101546001600160a01b038f168452601f9092529091205491925082916116d990670de0b6b3a764000090615c6b565b6116e39190615c8a565b6116ed9190615c8a565b6116f79085615c3f565b935050611711565b8061170981615ca1565b915050611505565b505b60175486036117a2576001600160a01b0388165f908152601f6020526040902060020154611742908690615c58565b6017545f908152602260209081526040808320600101546001600160a01b038d168452601f9092529091205461178190670de0b6b3a764000090615c6b565b61178b9190615c8a565b6117959190615c8a565b61179f9083615c3f565b91505b6001600160a01b0388165f90815260208052604090206009015460ff61010090910416151560011480156117ee57506001600160a01b0388165f90815260208052604090206008015442105b1561193e5760175484146118cd57835b6017548110156118cb578360225f611817846001615c3f565b81526020019081526020015f205f01546118319190615c58565b5f828152602260209081526040808320600201546001600160a01b038e1684529180529091205461186b90670de0b6b3a764000090615c6b565b6118759190615c8a565b61187f9190615c8a565b6118899083615c3f565b915060225f611899836001615c3f565b815260208101919091526040015f20549350846118b581615ca1565b95505080806118c390615ca1565b9150506117fe565b505b601754840361193e576118e08342615c58565b6017545f908152602260209081526040808320600201546001600160a01b038d1684529180529091205461191d90670de0b6b3a764000090615c6b565b6119279190615c8a565b6119319190615c8a565b61193b9082615c3f565b90505b6001600160a01b0388165f908152602080526040902060090154610100900460ff1615801561198b57506001600160a01b0388165f90815260208052604090206009015460ff1615156001145b80156119af57506001600160a01b0388165f90815260208052604090206002015442105b80156119df57506001600160a01b0388165f90815260208052604090206009015462010000900460ff1615156001145b15611b2f576017548414611abe57835b601754811015611abc578360225f611a08846001615c3f565b81526020019081526020015f205f0154611a229190615c58565b5f828152602260209081526040808320600201546001600160a01b038e16845291805290912054611a5c90670de0b6b3a764000090615c6b565b611a669190615c8a565b611a709190615c8a565b611a7a9083615c3f565b915060225f611a8a836001615c3f565b815260208101919091526040015f2054935084611aa681615ca1565b9550508080611ab490615ca1565b9150506119ef565b505b6017548403611b2f57611ad18342615c58565b6017545f908152602260209081526040808320600201546001600160a01b038d16845291805290912054611b0e90670de0b6b3a764000090615c6b565b611b189190615c8a565b611b229190615c8a565b611b2c9082615c3f565b90505b6001600160a01b0388165f90815260208052604090206009015460ff6101009091041615156001148015611b7c57506001600160a01b0388165f9081526020805260409020600801544210155b15611e1c576017548414611d9057835b601754811015611d8e5760225f611ba4836001615c3f565b815260208082019290925260409081015f908120546001600160a01b038d16825292805220600801541115611c84578360225f611be2846001615c3f565b81526020019081526020015f205f0154611bfc9190615c58565b5f828152602260209081526040808320600201546001600160a01b038e16845291805290912054611c3690670de0b6b3a764000090615c6b565b611c409190615c8a565b611c4a9190615c8a565b611c549083615c3f565b915060225f611c64836001615c3f565b815260208101919091526040015f2054935084611c8081615ca1565b9550505b60225f611c92836001615c3f565b815260208082019290925260409081015f908120546001600160a01b038d168252928052206008015411801590611ced57506001600160a01b0389165f90815260208052604090206009015462010000900460ff1615156001145b15611d7c576001600160a01b0389165f908152602080526040812060080154611d17908690615c58565b5f838152602260209081526040808320600201546001600160a01b038f168452918052909120549192508291611d5690670de0b6b3a764000090615c6b565b611d609190615c8a565b611d6a9190615c8a565b611d749084615c3f565b925050611d8e565b80611d8681615ca1565b915050611b8c565b505b6017548403611e1c576001600160a01b0388165f908152602080526040902060080154611dbe908490615c58565b6017545f908152602260209081526040808320600201546001600160a01b038d16845291805290912054611dfb90670de0b6b3a764000090615c6b565b611e059190615c8a565b611e0f9190615c8a565b611e199082615c3f565b90505b6001600160a01b0388165f908152602080526040902060090154610100900460ff16158015611e6957506001600160a01b0388165f90815260208052604090206009015460ff1615156001145b8015611e8e57506001600160a01b0388165f9081526020805260409020600201544210155b1561212e5760175484146120a257835b6017548110156120a05760225f611eb6836001615c3f565b815260208082019290925260409081015f908120546001600160a01b038d16825292805220600201541115611f96578360225f611ef4846001615c3f565b81526020019081526020015f205f0154611f0e9190615c58565b5f828152602260209081526040808320600201546001600160a01b038e16845291805290912054611f4890670de0b6b3a764000090615c6b565b611f529190615c8a565b611f5c9190615c8a565b611f669083615c3f565b915060225f611f76836001615c3f565b815260208101919091526040015f2054935084611f9281615ca1565b9550505b60225f611fa4836001615c3f565b815260208082019290925260409081015f908120546001600160a01b038d168252928052206002015411801590611fff57506001600160a01b0389165f90815260208052604090206009015462010000900460ff1615156001145b1561208e576001600160a01b0389165f908152602080526040812060020154612029908690615c58565b5f838152602260209081526040808320600201546001600160a01b038f16845291805290912054919250829161206890670de0b6b3a764000090615c6b565b6120729190615c8a565b61207c9190615c8a565b6120869084615c3f565b9250506120a0565b8061209881615ca1565b915050611e9e565b505b601754840361212e576001600160a01b0388165f9081526020805260409020600201546120d0908490615c58565b6017545f908152602260209081526040808320600201546001600160a01b038d1684529180529091205461210d90670de0b6b3a764000090615c6b565b6121179190615c8a565b6121219190615c8a565b61212b9082615c3f565b90505b6121388183615c3f565b98975050505050505050565b61214c613205565b601455565b612159613205565b601355565b335f908152601e6020526040812054601b5461217a9190615c58565b335f908152601f6020526040812054600954929350916121a390670de0b6b3a764000090615c6b565b90505f816121b2846064615c8a565b6121bc9190615c6b565b90505f6121ca606483615c6b565b6121d49086615c8a565b90505f6121e9670de0b6b3a764000083615c6b565b60035460405163a9059cbb60e01b81529192506001600160a01b03169063a9059cbb9061221c9033908590600401615bf7565b6020604051808303815f875af1158015612238573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061225c9190615c10565b50335f9081526020805260408120600301805483929061227d908490615c3f565b9091555050601b54335f908152601e60205260408120918255600190910180548392906122ab908490615c3f565b9091555050505050505050565b6122c0613205565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6122ea613205565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b612314613205565b61231d5f613dbf565b565b600654600160a01b900460ff1615612335575f80fd5b8015801561235f5750335f908152601f602052604090206009015460ff6101009091041615156001145b8061239057508060011480156123905750335f90815260208052604090206009015460ff6101009091041615156001145b612398575f80fd5b805f036123c2575f601554426123ae9190615c3f565b335f908152601f6020526040902060080155505b80600103610cb2575f601654426123d99190615c3f565b335f9081526020805260409020600801555050565b6123f6613205565b5f600f819055601055565b612409613205565b601555565b612416613205565b601a55565b600654600160a01b900460ff1615612431575f80fd5b80158061243e5750806001145b612446575f80fd5b335f908152601f602052604090206009015460ff161515600114806124805750335f90815260208052604090206009015460ff1615156001145b1561248d5761248d613e0e565b805f0361250b576019548310156124a2575f80fd5b335f908152601f602052604090206009015460ff1615156001036124e5575f6124ca3361282d565b905080156124da576124da61215e565b6124e38461549b565b505b335f908152601f602052604081206009015460ff161515900361250b5761250b83615657565b8060010361256c57601a54821015612521575f80fd5b335f90815260208052604090206009015460ff1615156001036125475761254782615834565b335f90815260208052604081206009015460ff161515900361256c5761256c82615951565b60408051338152602081018590529081018390527fe41aca6803ab96b2eebcb4810bd12878f9891213ac7855733805bc095b83d058906060015b60405180910390a1505050565b6125bb613205565b601d55565b6125c8613205565b60405163a9059cbb60e01b81526001600160a01b0383169063a9059cbb906125f69033908590600401615bf7565b6020604051808303815f875af1158015612612573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126369190615c10565b505050565b612643613205565b60068054911515600160a01b0260ff60a01b19909216919091179055565b5f805f6017548410612671575f80fd5b5050505f81815260226020908152604091829020825160608101845281548082526001830154938201849052600290920154930183905293909250565b6126b6613205565b601c55565b6126c3613e0e565b335f908152601f602090815260408083206005015491805282206006015490916126ed8284615c3f565b9050804710156126fb575f80fd5b604051339082156108fc029083905f818181858888f19350505050158015612725573d5f803e3d5ffd5b50335f908152601f602052604081206003018054859290612747908490615c3f565b9091555050335f9081526020805260408120600401805484929061276c908490615c3f565b9091555050335f908152601f602090815260408083206005018390559080528120600601819055600d80548392906127a5908490615c3f565b9091555050601c548111156127ee577f09bbc196c5b25ae4a2ce7cb573a0e91cf0f091d6c125f5db36489b8625d81ca533826040516127e5929190615bf7565b60405180910390a15b601d5447101561263657604080514281524760208201527fbe01094ad628b24be59bba55486a9265da2fd85b3526dafae7ad71c4bd1c9ded91016125a6565b6001600160a01b0381165f908152601e6020526040812054601b54829161285391615c58565b6001600160a01b0384165f908152601f60205260408120546009549293509161288590670de0b6b3a764000090615c6b565b90505f81612894846064615c8a565b61289e9190615c6b565b90505f6128ac606483615c6b565b6128b69086615c8a565b90505f612138670de0b6b3a764000083615c6b565b6128d3613205565b601955565b6128e0613205565b60178054905f6128ef83615ca1565b9091555050601754604080516060808201835242825260208083018781528385018781525f8781526022845286902094518555905160018501555160029093019290925582518481529182018690529181018490527f5ead928997a87f087dff9f1b3a30924221910665d62d27862eed256ab4abf15591016125a6565b335f908152601f602052604090206009015460ff1615156001036129925761299261215e565b61299a613e0e565b335f908152601f602090815260408083206005015491805282206006015490916129c48284615c3f565b6040805160028082526060820183529293505f9290916020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612a30573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a549190615ccd565b815f81518110612a6657612a66615ce8565b6001600160a01b039283166020918202929092010152600854825191169082906001908110612a9757612a97615ce8565b6001600160a01b03928316602091820292909201015260065460405163d06ca61f60e01b81525f92919091169063d06ca61f90612ada9086908690600401615d3e565b5f60405180830381865afa158015612af4573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612b1b9190810190615d5e565b90505f81600181518110612b3157612b31615ce8565b60209081029190910101516002546040516370a0823160e01b81523060048201529192505f916001600160a01b03909116906370a0823190602401602060405180830381865afa158015612b87573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bab9190615e0b565b90505f6064612bba8a85615c8a565b612bc49190615c6b565b90505f612bd18285615c58565b60065460405163b6f9de9560e01b81529192506001600160a01b03169063b6f9de95908990612c0a9085908b9030904290600401615e22565b5f604051808303818588803b158015612c21575f80fd5b505af1158015612c33573d5f803e3d5ffd5b50506002546040516370a0823160e01b81523060048201525f94506001600160a01b0390911692506370a082319150602401602060405180830381865afa158015612c80573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ca49190615e0b565b90505f612cb18583615c58565b335f908152601f6020526040902060090154909150610100900460ff161515600103612d4a576004805460405163a9059cbb60e01b81526001600160a01b039091169163a9059cbb91612d08913391869101615bf7565b6020604051808303815f875af1158015612d24573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d489190615c10565b505b335f908152601f602052604090206009015460ff161515600103612dd257335f908152601f602052604081208054839290612d86908490615c3f565b9091555050335f908152601f6020526040812060060180548b9290612dac908490615c3f565b9091555050335f908152601f602090815260408083206005018390559080528120600601555b335f908152601f602052604081206009015460ff1615159003612eef57335f908152601f602052604081208054839290612e0d908490615c3f565b9091555050335f908152601f60205260409020426001909101819055601354612e3591615c3f565b335f908152601f602090815260408083206002810194909455600784018390556407915ecc00600885015560098085018054600161ffff198216811783556003880187905560068089018890554260048a0155601754600a8a0155600590980187905562ffffff199091166201000117909155601b54601e8552838620908155018490559180528220909201819055815483929190612ed5908490615c3f565b9091555050600b8054905f612ee983615ca1565b91905055505b8060095f828254612f009190615c3f565b9250508190555088600e5f828254612f189190615c3f565b909155505060408051338152602081018b90529081018290527f7a9b8ad43aacbbf8905aa3cb89f0f20ca67e967741923008984db7686d3af59b9060600160405180910390a1505050505050505050505050565b612f74613205565b6001600160a01b038116612fde5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b610cb281613dbf565b612fef613205565b603c612ffb8284615c3f565b1115613005575f80fd5b600f91909155601055565b613018613205565b6003546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa15801561305e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130829190615e0b565b905060055f9054906101000a90046001600160a01b03166001600160a01b0316634e71d92d6040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156130d0575f80fd5b505af11580156130e2573d5f803e3d5ffd5b50506003546040516370a0823160e01b81523060048201525f93506001600160a01b0390911691506370a0823190602401602060405180830381865afa15801561312e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131529190615e0b565b90505f61315f8383615c58565b90505f60095482670de0b6b3a76400006131799190615c8a565b6131839190615c6b565b60188054604080516080810182524281526020808201888152600954838501908152606084018881525f8781526021909452948320935184559051600184015551600283015591516003909101558254939450909291906131e383615ca1565b919050555082601b5f8282546131f99190615c3f565b90915550505050505050565b5f546001600160a01b0316331461231d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401612fd5565b335f908152601f6020526040902060090154610100900460ff161515600103613368576004805460405163095ea7b360e01b81526001600160a01b039091169163095ea7b3916132b2913091869101615bf7565b6020604051808303815f875af11580156132ce573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132f29190615c10565b50600480546040516323b872dd60e01b81526001600160a01b03909116916323b872dd916133269133913091879101615e56565b6020604051808303815f875af1158015613342573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133669190615c10565b505b5f6133723361282d565b905080156133825761338261215e565b335f908152601f60205260408120600801548190421180156133c05750335f908152601f602052604090206009015460ff6101009091041615156001145b1561345c5760025460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906133f79033908890600401615bf7565b6020604051808303815f875af1158015613413573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134379190615c10565b50335f908152601f602052604081208054869290613456908490615c58565b90915550505b335f908152601f6020526040902060020154421180156134935750335f908152601f6020526040902060090154610100900460ff16155b1561352f5760025460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906134ca9033908890600401615bf7565b6020604051808303815f875af11580156134e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061350a9190615c10565b50335f908152601f602052604081208054869290613529908490615c58565b90915550505b335f908152601f60205260409020600801544210801561356b5750335f908152601f602052604090206009015460ff6101009091041615156001145b156136a5576064600f54856135809190615c8a565b61358a9190615c6b565b90506135968185615c58565b60025460405163a9059cbb60e01b81529193506001600160a01b03169063a9059cbb906135c99033908690600401615bf7565b6020604051808303815f875af11580156135e5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136099190615c10565b5060025460075460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb92613640929116908590600401615bf7565b6020604051808303815f875af115801561365c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136809190615c10565b50335f908152601f60205260408120805486929061369f908490615c58565b90915550505b335f908152601f6020526040902060020154421080156136dc5750335f908152601f6020526040902060090154610100900460ff16155b15613816576064600f54856136f19190615c8a565b6136fb9190615c6b565b90506137078185615c58565b60025460405163a9059cbb60e01b81529193506001600160a01b03169063a9059cbb9061373a9033908690600401615bf7565b6020604051808303815f875af1158015613756573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061377a9190615c10565b5060025460075460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb926137b1929116908590600401615bf7565b6020604051808303815f875af11580156137cd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137f19190615c10565b50335f908152601f602052604081208054869290613810908490615c58565b90915550505b601954335f908152601f60205260409020541015610db457335f908152601f60205260408120818155600181018290556002810182905560038101829055600481018290556005810182905560068101829055600781018290556008810182905560098101805462ffffff19169055600a01819055600b80549161389983615e7a565b919050555050505050565b335f908152602080526040812060080154819042108015906138e15750335f90815260208052604090206009015460ff6101009091041615156001145b1561397f5760035460405163a9059cbb60e01b81528493506001600160a01b039091169063a9059cbb9061391b9033908690600401615bf7565b6020604051808303815f875af1158015613937573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061395b9190615c10565b50335f90815260208052604081208054859290613979908490615c58565b90915550505b335f90815260208052604090206002015442108015906139b55750335f908152602080526040902060090154610100900460ff16155b15613a535760035460405163a9059cbb60e01b81528493506001600160a01b039091169063a9059cbb906139ef9033908690600401615bf7565b6020604051808303815f875af1158015613a0b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a2f9190615c10565b50335f90815260208052604081208054859290613a4d908490615c58565b90915550505b335f90815260208052604090206008015442108015613a8d5750335f90815260208052604090206009015460ff6101009091041615156001145b15613bc657606460105484613aa29190615c8a565b613aac9190615c6b565b9050613ab88184615c58565b60035460405163a9059cbb60e01b81529193506001600160a01b03169063a9059cbb90613aeb9033908690600401615bf7565b6020604051808303815f875af1158015613b07573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b2b9190615c10565b5060035460075460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb92613b62929116908590600401615bf7565b6020604051808303815f875af1158015613b7e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613ba29190615c10565b50335f90815260208052604081208054859290613bc0908490615c58565b90915550505b335f90815260208052604090206002015442108015613bfb5750335f908152602080526040902060090154610100900460ff16155b15613d3457606460105484613c109190615c8a565b613c1a9190615c6b565b9050613c268184615c58565b60035460405163a9059cbb60e01b81529193506001600160a01b03169063a9059cbb90613c599033908690600401615bf7565b6020604051808303815f875af1158015613c75573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613c999190615c10565b5060035460075460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb92613cd0929116908590600401615bf7565b6020604051808303815f875af1158015613cec573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d109190615c10565b50335f90815260208052604081208054859290613d2e908490615c58565b90915550505b601a54335f908152602080526040902054101561263657335f9081526020805260408120818155600181018290556002810182905560038101829055600481018290556005810182905560068101829055600781018290556008810182905560098101805462ffffff19169055600a01819055600c805491613db583615e7a565b9190505550505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b335f908152601f6020526040812060090154819060ff6101009091041615156001148015613e4c5750335f908152601f602052604090206008015442105b1561401957601754335f908152601f60205260409020600a015414613f7757335f908152601f60205260409020600a01545b601754811015613f7557335f908152601f602052604081206004015490602290613ea9846001615c3f565b81526020019081526020015f205f0154613ec39190615c58565b5f82815260226020908152604080832060010154338452601f90925290912054613ef690670de0b6b3a764000090615c6b565b613f009190615c8a565b613f0a9190615c8a565b613f149084615c3f565b925060225f613f24836001615c3f565b815260208082019290925260409081015f90812054338252601f9093529081206004810192909255600a909101805491613f5d83615ca1565b91905055508080613f6d90615ca1565b915050613e7e565b505b601754335f908152601f60205260409020600a01540361401957335f908152601f6020526040902060040154613fad9042615c58565b6017545f90815260226020908152604080832060010154338452601f90925290912054613fe390670de0b6b3a764000090615c6b565b613fed9190615c8a565b613ff79190615c8a565b6140019083615c3f565b335f908152601f602052604090204260049091015591505b335f908152601f6020526040902060090154610100900460ff161580156140565750335f908152601f602052604090206009015460ff1615156001145b80156140725750335f908152601f602052604090206002015442105b1561423f57601754335f908152601f60205260409020600a01541461419d57335f908152601f60205260409020600a01545b60175481101561419b57335f908152601f6020526040812060040154906022906140cf846001615c3f565b81526020019081526020015f205f01546140e99190615c58565b5f82815260226020908152604080832060010154338452601f9092529091205461411c90670de0b6b3a764000090615c6b565b6141269190615c8a565b6141309190615c8a565b61413a9084615c3f565b925060225f61414a836001615c3f565b815260208082019290925260409081015f90812054338252601f9093529081206004810192909255600a90910180549161418383615ca1565b9190505550808061419390615ca1565b9150506140a4565b505b601754335f908152601f60205260409020600a01540361423f57335f908152601f60205260409020600401546141d39042615c58565b6017545f90815260226020908152604080832060010154338452601f9092529091205461420990670de0b6b3a764000090615c6b565b6142139190615c8a565b61421d9190615c8a565b6142279083615c3f565b335f908152601f602052604090204260049091015591505b335f908152601f602052604090206009015460ff610100909104161515600114801561427c5750335f908152601f60205260409020600801544210155b80156142a45750335f908152601f602052604090206009015462010000900460ff1615156001145b1561459b57601754335f908152601f60205260409020600a015410156144e257335f908152601f60205260409020600a01545b6017548110156144e05760225f6142ef836001615c3f565b815260208082019290925260409081015f90812054338252601f909352206008015411156143f257335f908152601f602052604081206004015490602290614338846001615c3f565b81526020019081526020015f205f01546143529190615c58565b5f82815260226020908152604080832060010154338452601f9092529091205461438590670de0b6b3a764000090615c6b565b61438f9190615c8a565b6143999190615c8a565b6143a39084615c3f565b925060225f6143b3836001615c3f565b815260208082019290925260409081015f90812054338252601f9093529081206004810192909255600a9091018054916143ec83615ca1565b91905055505b60225f614400836001615c3f565b815260208082019290925260409081015f90812054338252601f9093522060080154116144ce57335f908152601f60205260408120600481015460089091015461444a9190615c58565b5f83815260226020908152604080832060010154338452601f90925290912054919250829161448290670de0b6b3a764000090615c6b565b61448c9190615c8a565b6144969190615c8a565b6144a09085615c3f565b335f908152601f6020526040902060088101546004820155600901805462ff00001916905593506144e09050565b806144d881615ca1565b9150506142d7565b505b601754335f908152601f60205260409020600a01540361459b57335f908152601f60205260409020600481015460089091015461451f9190615c58565b6017545f90815260226020908152604080832060010154338452601f9092529091205461455590670de0b6b3a764000090615c6b565b61455f9190615c8a565b6145699190615c8a565b6145739083615c3f565b335f908152601f6020526040902060088101546004820155600901805462ff00001916905591505b335f908152601f6020526040902060090154610100900460ff161580156145d85750335f908152601f602052604090206009015460ff1615156001145b80156145f55750335f908152601f60205260409020600201544210155b801561461d5750335f908152601f602052604090206009015462010000900460ff1615156001145b1561493e57601754335f908152601f60205260409020600a0154101561488557335f908152601f60205260409020600a01545b6017548110156148835760225f614668836001615c3f565b815260208082019290925260409081015f90812054338252601f9093522060020154111561476b57335f908152601f6020526040812060040154906022906146b1846001615c3f565b81526020019081526020015f205f01546146cb9190615c58565b5f82815260226020908152604080832060010154338452601f909252909120546146fe90670de0b6b3a764000090615c6b565b6147089190615c8a565b6147129190615c8a565b61471c9084615c3f565b925060225f61472c836001615c3f565b815260208082019290925260409081015f90812054338252601f9093529081206004810192909255600a90910180549161476583615ca1565b91905055505b60225f614779836001615c3f565b815260208082019290925260409081015f90812054338252601f9093522060020154118015906147c55750335f908152601f602052604090206009015462010000900460ff1615156001145b1561487157335f908152601f6020526040812060048101546002909101546147ed9190615c58565b5f83815260226020908152604080832060010154338452601f90925290912054919250829161482590670de0b6b3a764000090615c6b565b61482f9190615c8a565b6148399190615c8a565b6148439085615c3f565b335f908152601f6020526040902060028101546004820155600901805462ff00001916905593506148839050565b8061487b81615ca1565b915050614650565b505b601754335f908152601f60205260409020600a01540361493e57335f908152601f6020526040902060048101546002909101546148c29190615c58565b6017545f90815260226020908152604080832060010154338452601f909252909120546148f890670de0b6b3a764000090615c6b565b6149029190615c8a565b61490c9190615c8a565b6149169083615c3f565b335f908152601f6020526040902060028101546004820155600901805462ff00001916905591505b335f90815260208052604090206009015460ff61010090910416151560011480156149785750335f90815260208052604090206008015442105b15614b3957601754335f9081526020805260409020600a015414614a9c57335f9081526020805260409020600a01545b601754811015614a9a57335f908152602080526040812060050154906022906149d2846001615c3f565b81526020019081526020015f205f01546149ec9190615c58565b5f8281526022602090815260408083206002015433845291805290912054614a1d90670de0b6b3a764000090615c6b565b614a279190615c8a565b614a319190615c8a565b614a3b9083615c3f565b915060225f614a4b836001615c3f565b815260208082019290925260409081015f908120543382529280529081206005810192909255600a909101805491614a8283615ca1565b91905055508080614a9290615ca1565b9150506149a8565b505b601754335f9081526020805260409020600a015403614b3957335f908152602080526040902060050154614ad09042615c58565b6017545f9081526022602090815260408083206002015433845291805290912054614b0490670de0b6b3a764000090615c6b565b614b0e9190615c8a565b614b189190615c8a565b614b229082615c3f565b335f90815260208052604090204260059091015590505b335f908152602080526040902060090154610100900460ff16158015614b745750335f90815260208052604090206009015460ff1615156001145b8015614b8f5750335f90815260208052604090206002015442105b8015614bb65750335f90815260208052604090206009015462010000900460ff1615156001145b15614d7757601754335f9081526020805260409020600a015414614cda57335f9081526020805260409020600a01545b601754811015614cd857335f90815260208052604081206005015490602290614c10846001615c3f565b81526020019081526020015f205f0154614c2a9190615c58565b5f8281526022602090815260408083206002015433845291805290912054614c5b90670de0b6b3a764000090615c6b565b614c659190615c8a565b614c6f9190615c8a565b614c799083615c3f565b915060225f614c89836001615c3f565b815260208082019290925260409081015f908120543382529280529081206005810192909255600a909101805491614cc083615ca1565b91905055508080614cd090615ca1565b915050614be6565b505b601754335f9081526020805260409020600a015403614d7757335f908152602080526040902060050154614d0e9042615c58565b6017545f9081526022602090815260408083206002015433845291805290912054614d4290670de0b6b3a764000090615c6b565b614d4c9190615c8a565b614d569190615c8a565b614d609082615c3f565b335f90815260208052604090204260059091015590505b335f90815260208052604090206009015460ff6101009091041615156001148015614db25750335f9081526020805260409020600801544210155b8015614dd95750335f90815260208052604090206009015462010000900460ff1615156001145b156150bc57601754335f9081526020805260409020600a0154101561500857335f9081526020805260409020600a01545b6017548110156150065760225f614e22836001615c3f565b815260208082019290925260409081015f9081205433825292805220600801541115614f1e57335f90815260208052604081206005015490602290614e68846001615c3f565b81526020019081526020015f205f0154614e829190615c58565b5f8281526022602090815260408083206002015433845291805290912054614eb390670de0b6b3a764000090615c6b565b614ebd9190615c8a565b614ec79190615c8a565b614ed19083615c3f565b915060225f614ee1836001615c3f565b815260208082019290925260409081015f908120543382529280529081206005810192909255600a909101805491614f1883615ca1565b91905055505b60225f614f2c836001615c3f565b815260208082019290925260409081015f90812054338252928052206008015411614ff457335f90815260208052604081206005810154600890910154614f739190615c58565b5f83815260226020908152604080832060020154338452918052909120549192508291614fa990670de0b6b3a764000090615c6b565b614fb39190615c8a565b614fbd9190615c8a565b614fc79084615c3f565b335f908152602080526040902060088101546005820155600901805462ff00001916905592506150069050565b80614ffe81615ca1565b915050614e0a565b505b601754335f9081526020805260409020600a0154036150bc57335f908152602080526040902060058101546008909101546150439190615c58565b6017545f908152602260209081526040808320600201543384529180529091205461507790670de0b6b3a764000090615c6b565b6150819190615c8a565b61508b9190615c8a565b6150959082615c3f565b335f908152602080526040902060088101546005820155600901805462ff00001916905590505b335f908152602080526040902060090154610100900460ff161580156150f75750335f90815260208052604090206009015460ff1615156001145b80156151135750335f9081526020805260409020600201544210155b801561513a5750335f90815260208052604090206009015462010000900460ff1615156001145b1561541c57601754335f9081526020805260409020600a01541461536857335f9081526020805260409020600a01545b6017548110156153665760225f615182836001615c3f565b815260208082019290925260409081015f908120543382529280522060020154111561527e57335f908152602080526040812060050154906022906151c8846001615c3f565b81526020019081526020015f205f01546151e29190615c58565b5f828152602260209081526040808320600201543384529180529091205461521390670de0b6b3a764000090615c6b565b61521d9190615c8a565b6152279190615c8a565b6152319083615c3f565b915060225f615241836001615c3f565b815260208082019290925260409081015f908120543382529280529081206005810192909255600a90910180549161527883615ca1565b91905055505b60225f61528c836001615c3f565b815260208082019290925260409081015f9081205433825292805220600201541161535457335f908152602080526040812060058101546002909101546152d39190615c58565b5f8381526022602090815260408083206002015433845291805290912054919250829161530990670de0b6b3a764000090615c6b565b6153139190615c8a565b61531d9190615c8a565b6153279084615c3f565b335f908152602080526040902060028101546005820155600901805462ff00001916905592506153669050565b8061535e81615ca1565b91505061516a565b505b601754335f9081526020805260409020600a01540361541c57335f908152602080526040902060058101546002909101546153a39190615c58565b6017545f90815260226020908152604080832060020154338452918052909120546153d790670de0b6b3a764000090615c6b565b6153e19190615c8a565b6153eb9190615c8a565b6153f59082615c3f565b335f908152602080526040902060028101546005820155600901805462ff00001916905590505b335f908152601f60205260408120600501805484929061543d908490615c3f565b9091555050335f90815260208052604081206006018054839290615462908490615c3f565b925050819055508160115f82825461547a9190615c3f565b925050819055508060125f8282546154929190615c3f565b90915550505050565b60025460405163095ea7b360e01b81526001600160a01b039091169063095ea7b3906154cd9030908590600401615bf7565b6020604051808303815f875af11580156154e9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061550d9190615c10565b506002546040516323b872dd60e01b81526001600160a01b03909116906323b872dd9061554290339030908690600401615e56565b6020604051808303815f875af115801561555e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906155829190615c10565b50335f908152601f6020526040902060090154610100900460ff161515600103615619576004805460405163a9059cbb60e01b81526001600160a01b039091169163a9059cbb916155d7913391869101615bf7565b6020604051808303815f875af11580156155f3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906156179190615c10565b505b335f908152601f602052604081208054839290615637908490615c3f565b925050819055508060095f82825461564f9190615c3f565b909155505050565b60025460405163095ea7b360e01b81526001600160a01b039091169063095ea7b3906156899030908590600401615bf7565b6020604051808303815f875af11580156156a5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906156c99190615c10565b506002546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906156fe90339030908690600401615e56565b6020604051808303815f875af115801561571a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061573e9190615c10565b50335f908152601f60205260408120805483929061575d908490615c3f565b9091555050335f908152601f6020526040902042600190910181905560135461578591615c3f565b335f908152601f602090815260408083206002810194909455600784018390556407915ecc00600885015560098085018054600161ffff198216811783556003880187905560068801879055426004890155601754600a890155600590970186905562ffffff191662010001179055601b54601e9093529083209182559201819055815483929190615818908490615c3f565b9091555050600b8054905f61582c83615ca1565b919050555050565b60035460405163095ea7b360e01b81526001600160a01b039091169063095ea7b3906158669030908590600401615bf7565b6020604051808303815f875af1158015615882573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906158a69190615c10565b506003546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906158db90339030908690600401615e56565b6020604051808303815f875af11580156158f7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061591b9190615c10565b50335f90815260208052604081208054839290615939908490615c3f565b9250508190555080600a5f82825461564f9190615c3f565b60035460405163095ea7b360e01b81526001600160a01b039091169063095ea7b3906159839030908590600401615bf7565b6020604051808303815f875af115801561599f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906159c39190615c10565b506003546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906159f890339030908690600401615e56565b6020604051808303815f875af1158015615a14573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190615a389190615c10565b50335f90815260208052604081208054839290615a56908490615c3f565b9091555050335f9081526020805260409020426001909101819055601454615a7d91615c3f565b335f90815260208052604081206002810192909255600982018054600784018390556407915ecc00600885015561ffff198116600117825560048401839055426005850155601754600a8086019190915560038501849055600690940183905562ffffff191662010001179055815483929190615afb908490615c3f565b9091555050600c8054905f61582c83615ca1565b5f60208284031215615b1f575f80fd5b5035919050565b5f805f60608486031215615b38575f80fd5b505081359360208301359350604090920135919050565b6001600160a01b0381168114610cb2575f80fd5b5f60208284031215615b73575f80fd5b8135615b7e81615b4f565b9392505050565b5f8060408385031215615b96575f80fd5b8235615ba181615b4f565b946020939093013593505050565b8015158114610cb2575f80fd5b5f60208284031215615bcc575f80fd5b8135615b7e81615baf565b5f8060408385031215615be8575f80fd5b50508035926020909101359150565b6001600160a01b03929092168252602082015260400190565b5f60208284031215615c20575f80fd5b8151615b7e81615baf565b634e487b7160e01b5f52601160045260245ffd5b80820180821115615c5257615c52615c2b565b92915050565b81810381811115615c5257615c52615c2b565b5f82615c8557634e487b7160e01b5f52601260045260245ffd5b500490565b8082028115828204841417615c5257615c52615c2b565b5f60018201615cb257615cb2615c2b565b5060010190565b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215615cdd575f80fd5b8151615b7e81615b4f565b634e487b7160e01b5f52603260045260245ffd5b5f8151808452602080850194508084015f5b83811015615d335781516001600160a01b031687529582019590820190600101615d0e565b509495945050505050565b828152604060208201525f615d566040830184615cfc565b949350505050565b5f6020808385031215615d6f575f80fd5b825167ffffffffffffffff80821115615d86575f80fd5b818501915085601f830112615d99575f80fd5b815181811115615dab57615dab615cb9565b8060051b604051601f19603f83011681018181108582111715615dd057615dd0615cb9565b604052918252848201925083810185019188831115615ded575f80fd5b938501935b8285101561213857845184529385019392850192615df2565b5f60208284031215615e1b575f80fd5b5051919050565b848152608060208201525f615e3a6080830186615cfc565b6001600160a01b03949094166040830152506060015292915050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b5f81615e8857615e88615c2b565b505f19019056fea2646970667358221220678c793e895ba5efb0b8ca4e677ba519b9bc809799f55faf5456f71f6670ac2264736f6c63430008150033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000003e34eabf5858a126cb583107e643080cee20ca64000000000000000000000000a8a837e2bf0c37fef5c495951a0dfc33aaead57a000000000000000000000000e973ea957ff5462b1076f5f61ef2df7a4b2f13d800000000000000000000000009eefea02aa2e7914fb87f09eed1f9e3e363dbdd0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
-----Decoded View---------------
Arg [0] : _linqAddress (address): 0x3e34eabF5858a126cb583107E643080cEE20cA64
Arg [1] : _milQAddress (address): 0xA8A837E2bf0c37fEf5C495951a0DFc33aaEAD57A
Arg [2] : _glinQAddress (address): 0xe973Ea957fF5462B1076f5f61EF2df7A4B2f13d8
Arg [3] : _oddysParlour (address): 0x09eeFea02Aa2E7914fb87F09eEd1f9E3E363dbDD
Arg [4] : _uniswapRouterAddress (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000003e34eabf5858a126cb583107e643080cee20ca64
Arg [1] : 000000000000000000000000a8a837e2bf0c37fef5c495951a0dfc33aaead57a
Arg [2] : 000000000000000000000000e973ea957ff5462b1076f5f61ef2df7a4b2f13d8
Arg [3] : 00000000000000000000000009eefea02aa2e7914fb87f09eed1f9e3e363dbdd
Arg [4] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Deployed Bytecode Sourcemap
14606:50143:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15393:25;;;;;;;;;;;;;;;;;;;160::1;;;148:2;133:18;15393:25:0;;;;;;;;20039:171;;;;;;;;;;-1:-1:-1;20039:171:0;;;;;:::i;:::-;;:::i;:::-;;15463:26;;;;;;;;;;;;;;;;15824:31;;;;;;;;;;;;;;;;15498:26;;;;;;;;;;;;;;;;25467:1184;;;;;;;;;;-1:-1:-1;25467:1184:0;;;;;:::i;:::-;;:::i;20789:141::-;;;;;;;;;;-1:-1:-1;20789:141:0;;;;;:::i;:::-;;:::i;27327:820::-;;;;;;;;;;-1:-1:-1;27327:820:0;;;;;:::i;:::-;;:::i;16192:35::-;;;;;;;;;;;;;;;;48272:10607;;;;;;;;;;-1:-1:-1;48272:10607:0;;;;;:::i;:::-;;:::i;18281:43::-;;;;;;;;;;-1:-1:-1;18281:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;1264:25:1;;;1320:2;1305:18;;1298:34;;;;1237:18;18281:43:0;1090:248:1;20499:137:0;;;;;;;;;;-1:-1:-1;20499:137:0;;;;;:::i;:::-;;:::i;20358:133::-;;;;;;;;;;-1:-1:-1;20358:133:0;;;;;:::i;:::-;;:::i;15988:45::-;;;;;;;;;;;;;;;;63493:699;;;;;;;;;;;;;:::i;19145:90::-;;;;;;;;;;-1:-1:-1;19145:90:0;;;;;:::i;:::-;;:::i;19025:112::-;;;;;;;;;;-1:-1:-1;19025:112:0;;;;;:::i;:::-;;:::i;2809:103::-;;;;;;;;;;;;;:::i;15905:32::-;;;;;;;;;;;;;;;;26659:660;;;;;;;;;;-1:-1:-1;26659:660:0;;;;;:::i;:::-;;:::i;18901:116::-;;;;;;;;;;;;;:::i;15777:38::-;;;;;;;;;;;;;;;;15946:33;;;;;;;;;;;;;;;;15580:41;;;;;;;;;;;;;;;;2161:87;;;;;;;;;;-1:-1:-1;2207:7:0;2234:6;-1:-1:-1;;;;;2234:6:0;2161:87;;;-1:-1:-1;;;;;1773:32:1;;;1755:51;;1743:2;1728:18;2161:87:0;1609:203:1;20644:137:0;;;;;;;;;;-1:-1:-1;20644:137:0;;;;;:::i;:::-;;:::i;21043:97::-;;;;;;;;;;-1:-1:-1;21043:97:0;;;;;:::i;:::-;;:::i;21148:1304::-;;;;;;;;;;-1:-1:-1;21148:1304:0;;;;;:::i;:::-;;:::i;16602:118::-;;;;;;;;;;-1:-1:-1;16602:118:0;;;;;:::i;:::-;;:::i;20218:132::-;;;;;;;;;;-1:-1:-1;20218:132:0;;;;;:::i;:::-;;:::i;19938:93::-;;;;;;;;;;-1:-1:-1;19938:93:0;;;;;:::i;:::-;;:::i;15276:27::-;;;;;;;;;;-1:-1:-1;15276:27:0;;;;-1:-1:-1;;;;;15276:27:0;;;19617:313;;;;;;;;;;-1:-1:-1;19617:313:0;;;;;:::i;:::-;;:::i;:::-;;;;2708:25:1;;;2764:2;2749:18;;2742:34;;;;2792:18;;;2785:34;2696:2;2681:18;19617:313:0;2506:319:1;15428:26:0;;;;;;;;;;;;;;;;14740:18;;;;;;;;;;-1:-1:-1;14740:18:0;;;;-1:-1:-1;;;;;14740:18:0;;;15864:32;;;;;;;;;;;;;;;;18393:55;;;;;;;;;;-1:-1:-1;18393:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3519:25:1;;;3575:2;3560:18;;3553:34;;;;3603:18;;;3596:34;;;;3661:2;3646:18;;3639:34;;;;3704:3;3689:19;;3682:35;;;;3748:3;3733:19;;3726:35;;;;3792:3;3777:19;;3770:35;;;;3836:3;3821:19;;3814:35;3880:3;3865:19;;3858:35;3937:14;3930:22;3924:3;3909:19;;3902:51;3997:15;3990:23;3984:3;3969:19;;3962:52;4058:15;4051:23;4045:3;4030:19;;4023:52;4106:3;4091:19;;4084:36;3506:3;3491:19;18393:55:0;3051:1075:1;16355:116:0;;;;;;;;;;-1:-1:-1;16355:116:0;;;;;:::i;:::-;;:::i;16042:32::-;;;;;;;;;;;;;;;;15731:37;;;;;;;;;;;;;;;;62027:907;;;;;;;;;;;;;:::i;15533:38::-;;;;;;;;;;;;;;;;64204:505;;;;;;;;;;-1:-1:-1;64204:505:0;;;;;:::i;:::-;;:::i;18455:53::-;;;;;;;;;;-1:-1:-1;18455:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4362:25:1;;;4418:2;4403:18;;4396:34;;;;4446:18;;;4439:34;4504:2;4489:18;;4482:34;4349:3;4334:19;18455:53:0;4131:391:1;20938:97:0;;;;;;;;;;-1:-1:-1;20938:97:0;;;;;:::i;:::-;;:::i;19246:363::-;;;;;;;;;;-1:-1:-1;19246:363:0;;;;;:::i;:::-;;:::i;58887:3124::-;;;;;;;;;;-1:-1:-1;58887:3124:0;;;;;:::i;:::-;;:::i;18515:69::-;;;;;;;;;;-1:-1:-1;18515:69:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;18331:55;;;;;;;;;;-1:-1:-1;18331:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3067:201;;;;;;;;;;-1:-1:-1;3067:201:0;;;;;:::i;:::-;;:::i;18593:300::-;;;;;;;;;;-1:-1:-1;18593:300:0;;;;;:::i;:::-;;:::i;62942:543::-;;;;;;;;;;;;;:::i;20039:171::-;2047:13;:11;:13::i;:::-;20146:6:::1;20121:21;:31;;20113:40;;;::::0;::::1;;20172:12;::::0;20164:38:::1;::::0;-1:-1:-1;;;;;20172:12:0;;::::1;::::0;20164:38;::::1;;;::::0;20195:6;;20172:12:::1;20164:38:::0;20172:12;20164:38;20195:6;20172:12;20164:38;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;20039:171:::0;:::o;25467:1184::-;25527:13;;-1:-1:-1;;;25527:13:0;;;;25526:14;25518:23;;;;;;25561:9;;;:22;;;25574:4;25582:1;25574:9;25561:22;25552:32;;;;;;25601:4;25609:1;25601:9;25597:555;;25650:10;25635:26;;;;:14;:26;;;;;:37;;;;;;;;:46;25627:55;;;;;;25720:10;25705:26;;;;:14;:26;;;;;:36;;;;;:44;;:36;:44;25697:53;;;;;;25788:10;25773:26;;;;:14;:26;;;;;:43;;;25819:15;-1:-1:-1;25765:70:0;;;;;;25858:5;;;25873:10;25858:5;25885:26;;;:14;:26;;;;;;;:33;25858:61;;-1:-1:-1;;;25858:61:0;;-1:-1:-1;;;;;25858:5:0;;;;:14;;:61;;25873:10;25885:33;25858:61;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25850:70;;;;;;25950:10;25935:26;;;;:14;:26;;;;;:37;;;:44;;26040:43;;;;25994;;;;:89;;;;-1:-1:-1;;26098:42:0;;;;;;;25597:555;26172:4;26180:1;26172:9;26168:476;;26221:10;26206:26;;;;:14;:26;;;;;:38;;;;;;;;:47;26198:56;;;;;;26292:10;26277:26;;;;:14;:26;;;;;:37;;;;;:45;;:37;:45;26269:54;;;;;;26361:10;26346:26;;;;:14;:26;;;;;:44;;;26393:15;-1:-1:-1;26338:71:0;;;;;;26439:10;26424:26;;;;:14;:26;;;;;:38;;;:45;;26531:44;;;;26484;;;;:91;;;;-1:-1:-1;;26590:42:0;;;;;;;26168:476;25467:1184;:::o;20789:141::-;2047:13;:11;:13::i;:::-;20882:18:::1;:40:::0;20789:141::o;27327:820::-;27426:13;;-1:-1:-1;;;27426:13:0;;;;27425:14;27417:23;;;;;;27460:11;;;:26;;;27475:6;27485:1;27475:11;27460:26;27452:35;;;;;;27499:17;27519:27;27535:10;27519:15;:27::i;:::-;27499:47;-1:-1:-1;27565:13:0;;27561:60;;27598:10;:8;:10::i;:::-;27639:6;27649:1;27639:11;27635:242;;27687:1;27676:8;:12;27668:21;;;;;;27728:10;27713:26;;;;:14;:26;;;;;:33;:45;-1:-1:-1;27713:45:0;27705:54;;;;;;27797:10;27782:26;;;;:14;:26;;;;;:36;;;;;:44;;:36;:44;27774:53;;;;;;27843:21;27855:8;27843:11;:21::i;:::-;27895:6;27905:1;27895:11;27891:244;;27943:1;27932:8;:12;27924:21;;;;;;27984:10;27969:26;;;;:14;:26;;;;;:34;:46;-1:-1:-1;27969:46:0;27961:55;;;;;;28054:10;28039:26;;;;:14;:26;;;;;:37;;;;;:45;;:37;:45;28031:54;;;;;;28101:21;28113:8;28101:11;:21::i;:::-;27405:742;27327:820;;;:::o;48272:10607::-;-1:-1:-1;;;;;48382:20:0;;48332:13;48382:20;;;:14;:20;;;;;;;;:38;;;;;48459:44;;;;48539:20;;;;;;:38;;;;48617:44;;;;;48753:20;;;;:31;;;;;48382:38;;48459:44;;48539:38;;48617:44;48332:13;;;;48753:31;;;;;;:39;;:31;:39;:97;;;;-1:-1:-1;;;;;;48796:20:0;;;;;;:14;:20;;;;;:36;;;48835:15;-1:-1:-1;48753:97:0;48749:897;;;48888:26;;48871:13;:43;48867:483;;48952:13;48935:400;48971:26;;48967:1;:30;48935:400;;;49179:17;49140:21;:26;49162:3;:1;49164;49162:3;:::i;:::-;49140:26;;;;;;;;;;;:36;;;:56;;;;:::i;:::-;49099:24;;;;:21;:24;;;;;;;;:37;;;-1:-1:-1;;;;;49046:20:0;;;;:14;:20;;;;;;:27;:49;;49076:19;;49046:49;:::i;:::-;49045:91;;;;:::i;:::-;:152;;;;:::i;:::-;49027:170;;;;:::i;:::-;;-1:-1:-1;49240:21:0;:26;49262:3;:1;49264;49262:3;:::i;:::-;49240:26;;;;;;;;;;;-1:-1:-1;49240:26:0;:36;;-1:-1:-1;49299:16:0;;;;:::i;:::-;;;;48999:3;;;;;:::i;:::-;;;;48935:400;;;;48867:483;49399:26;;49382:13;:43;49378:257;;49583:35;49601:17;49583:15;:35;:::i;:::-;49539:26;;49517:49;;;;:21;:49;;;;;;;;:62;;;-1:-1:-1;;;;;49464:20:0;;;;:14;:20;;;;;;:27;:49;;49494:19;;49464:49;:::i;:::-;49463:116;;;;:::i;:::-;:156;;;;:::i;:::-;49445:174;;;;:::i;:::-;;;49378:257;-1:-1:-1;;;;;49662:20:0;;;;;;:14;:20;;;;;:31;;;;;;;;:40;;;:82;;-1:-1:-1;;;;;;49706:20:0;;;;;;:14;:20;;;;;:30;;;;;:38;;:30;:38;49662:82;:141;;;;-1:-1:-1;;;;;;49748:20:0;;;;;;:14;:20;;;;;:37;;;49788:15;-1:-1:-1;49662:141:0;49658:941;;;49841:26;;49824:13;:43;49820:483;;49905:13;49888:400;49924:26;;49920:1;:30;49888:400;;;50132:17;50093:21;:26;50115:3;:1;50117;50115:3;:::i;:::-;50093:26;;;;;;;;;;;:36;;;:56;;;;:::i;:::-;50052:24;;;;:21;:24;;;;;;;;:37;;;-1:-1:-1;;;;;49999:20:0;;;;:14;:20;;;;;;:27;:49;;50029:19;;49999:49;:::i;:::-;49998:91;;;;:::i;:::-;:152;;;;:::i;:::-;49980:170;;;;:::i;:::-;;-1:-1:-1;50193:21:0;:26;50215:3;:1;50217;50215:3;:::i;:::-;50193:26;;;;;;;;;;;-1:-1:-1;50193:26:0;:36;;-1:-1:-1;50252:16:0;;;;:::i;:::-;;;;49952:3;;;;;:::i;:::-;;;;49888:400;;;;49820:483;50352:26;;50335:13;:43;50331:257;;50536:35;50554:17;50536:15;:35;:::i;:::-;50492:26;;50470:49;;;;:21;:49;;;;;;;;:62;;;-1:-1:-1;;;;;50417:20:0;;;;:14;:20;;;;;;:27;:49;;50447:19;;50417:49;:::i;:::-;50416:116;;;;:::i;:::-;:156;;;;:::i;:::-;50398:174;;;;:::i;:::-;;;50331:257;-1:-1:-1;;;;;50615:20:0;;;;;;:14;:20;;;;;:31;;;;;;;;;:39;;:31;:39;:98;;;;-1:-1:-1;;;;;;50658:20:0;;;;;;:14;:20;;;;;:36;;;50698:15;-1:-1:-1;50658:55:0;50615:98;:139;;;;-1:-1:-1;;;;;;50717:20:0;;;;;;:14;:20;;;;;:29;;;;;;;;:37;;50750:4;50717:37;50615:139;50611:1510;;;50790:26;;50774:13;:42;50771:1044;;;50855:13;50838:962;50874:26;;50870:1;:30;50838:962;;;50975:21;:26;50997:3;:1;50999;50997:3;:::i;:::-;50975:26;;;;;;;;;;;;;;-1:-1:-1;50975:26:0;;;:36;-1:-1:-1;;;;;50936:20:0;;;;:14;:20;;;;:36;;;:75;50932:428;;;51192:17;51153:21;:26;51175:3;:1;51177;51175:3;:::i;:::-;51153:26;;;;;;;;;;;:36;;;:56;;;;:::i;:::-;51112:24;;;;:21;:24;;;;;;;;:37;;;-1:-1:-1;;;;;51059:20:0;;;;:14;:20;;;;;;:27;:49;;51089:19;;51059:49;:::i;:::-;51058:91;;;;:::i;:::-;:152;;;;:::i;:::-;51040:170;;;;:::i;:::-;;-1:-1:-1;51257:21:0;:26;51279:3;:1;51281;51279:3;:::i;:::-;51257:26;;;;;;;;;;;-1:-1:-1;51257:26:0;:36;;-1:-1:-1;51320:16:0;;;;:::i;:::-;;;;50932:428;51440:21;:26;51462:3;:1;51464;51462:3;:::i;:::-;51440:26;;;;;;;;;;;;;;-1:-1:-1;51440:26:0;;;:36;-1:-1:-1;;;;;51400:20:0;;;;:14;:20;;;;:36;;;:76;51396:382;;-1:-1:-1;;;;;51520:20:0;;51505:12;51520:20;;;:14;:20;;;;;:36;;;:56;;51559:17;;51520:56;:::i;:::-;51675:24;;;;:21;:24;;;;;;;;:37;;;-1:-1:-1;;;;;51622:20:0;;;;:14;:20;;;;;;:27;51505:71;;-1:-1:-1;51505:71:0;;51622:49;;51652:19;;51622:49;:::i;:::-;51621:91;;;;:::i;:::-;:98;;;;:::i;:::-;51603:116;;;;:::i;:::-;;;51746:5;;;51396:382;50902:3;;;;:::i;:::-;;;;50838:962;;;;50771:1044;51852:26;;51835:13;:43;51831:278;;-1:-1:-1;;;;;52036:20:0;;;;;;:14;:20;;;;;:36;;;:56;;52075:17;;52036:56;:::i;:::-;51992:26;;51970:49;;;;:21;:49;;;;;;;;:62;;;-1:-1:-1;;;;;51917:20:0;;;;:14;:20;;;;;;:27;:49;;51947:19;;51917:49;:::i;:::-;51916:116;;;;:::i;:::-;:177;;;;:::i;:::-;51898:195;;;;:::i;:::-;;;51831:278;-1:-1:-1;;;;;52137:20:0;;;;;;:14;:20;;;;;:31;;;;;;;;:40;;;:82;;-1:-1:-1;;;;;;52181:20:0;;;;;;:14;:20;;;;;:30;;;;;:38;;:30;:38;52137:82;:142;;;;-1:-1:-1;;;;;;52223:20:0;;;;;;:14;:20;;;;;:37;;;52264:15;-1:-1:-1;52223:56:0;52137:142;:183;;;;-1:-1:-1;;;;;;52283:20:0;;;;;;:14;:20;;;;;:29;;;;;;;;:37;;52316:4;52283:37;52137:183;52133:1599;;;52356:26;;52340:13;:42;52337:1082;;;52419:13;52402:1000;52438:26;;52434:1;:30;52402:1000;;;52538:21;:26;52560:3;:1;52562;52560:3;:::i;:::-;52538:26;;;;;;;;;;;;;;-1:-1:-1;52538:26:0;;;:36;-1:-1:-1;;;;;52498:20:0;;;;:14;:20;;;;:37;;;:76;52494:429;;;52755:17;52716:21;:26;52738:3;:1;52740;52738:3;:::i;:::-;52716:26;;;;;;;;;;;:36;;;:56;;;;:::i;:::-;52675:24;;;;:21;:24;;;;;;;;:37;;;-1:-1:-1;;;;;52622:20:0;;;;:14;:20;;;;;;:27;:49;;52652:19;;52622:49;:::i;:::-;52621:91;;;;:::i;:::-;:152;;;;:::i;:::-;52603:170;;;;:::i;:::-;;-1:-1:-1;52820:21:0;:26;52842:3;:1;52844;52842:3;:::i;:::-;52820:26;;;;;;;;;;;-1:-1:-1;52820:26:0;:36;;-1:-1:-1;52883:16:0;;;;:::i;:::-;;;;52494:429;53001:21;:26;53023:3;:1;53025;53023:3;:::i;:::-;53001:26;;;;;;;;;;;;;;-1:-1:-1;53001:26:0;;;:36;-1:-1:-1;;;;;52960:20:0;;;;:14;:20;;;;:37;;;:77;;;;:118;;-1:-1:-1;;;;;;53041:20:0;;;;;;:14;:20;;;;;:29;;;;;;;;:37;;53074:4;53041:37;52960:118;52956:424;;;-1:-1:-1;;;;;53121:20:0;;53106:12;53121:20;;;:14;:20;;;;;:37;;;:57;;53161:17;;53121:57;:::i;:::-;53277:24;;;;:21;:24;;;;;;;;:37;;;-1:-1:-1;;;;;53224:20:0;;;;:14;:20;;;;;;:27;53106:72;;-1:-1:-1;53106:72:0;;53224:49;;53254:19;;53224:49;:::i;:::-;53223:91;;;;:::i;:::-;:98;;;;:::i;:::-;53205:116;;;;:::i;:::-;;;53348:5;;;52956:424;52466:3;;;;:::i;:::-;;;;52402:1000;;;;52337:1082;53456:26;;53439:13;:43;53435:279;;-1:-1:-1;;;;;53640:20:0;;;;;;:14;:20;;;;;:37;;;:57;;53680:17;;53640:57;:::i;:::-;53596:26;;53574:49;;;;:21;:49;;;;;;;;:62;;;-1:-1:-1;;;;;53521:20:0;;;;:14;:20;;;;;;:27;:49;;53551:19;;53521:49;:::i;:::-;53520:116;;;;:::i;:::-;:178;;;;:::i;:::-;53502:196;;;;:::i;:::-;;;53435:279;-1:-1:-1;;;;;53748:20:0;;;;;;:14;:20;;;;;:32;;;;;;;;;:40;;:32;:40;:99;;;;-1:-1:-1;;;;;;53792:20:0;;;;;;:14;:20;;;;;:37;;;53832:15;-1:-1:-1;53748:99:0;53744:901;;;53886:26;;53868:14;:44;53864:491;;53950:14;53933:407;53970:26;;53966:1;:30;53933:407;;;54181:18;54142:21;:26;54164:3;:1;54166;54164:3;:::i;:::-;54142:26;;;;;;;;;;;:36;;;:57;;;;:::i;:::-;54100:24;;;;:21;:24;;;;;;;;:38;;;-1:-1:-1;;;;;54046:20:0;;;;;;;;;;:28;:50;;54077:19;;54046:50;:::i;:::-;54045:93;;;;:::i;:::-;:155;;;;:::i;:::-;54026:174;;;;:::i;:::-;;-1:-1:-1;54244:21:0;:26;54266:3;:1;54268;54266:3;:::i;:::-;54244:26;;;;;;;;;;;-1:-1:-1;54244:26:0;:36;;-1:-1:-1;54303:17:0;;;;:::i;:::-;;;;53998:3;;;;;:::i;:::-;;;;53933:407;;;;53864:491;54393:26;;54375:14;:44;54371:263;;54581:36;54599:18;54581:15;:36;:::i;:::-;54536:26;;54514:49;;;;:21;:49;;;;;;;;:63;;;-1:-1:-1;;;;;54460:20:0;;;;;;;;;;:28;:50;;54491:19;;54460:50;:::i;:::-;54459:118;;;;:::i;:::-;:159;;;;:::i;:::-;54440:178;;;;:::i;:::-;;;54371:263;-1:-1:-1;;;;;54661:20:0;;;;;;:14;:20;;;;;:32;;;;;;;;:41;;;:84;;-1:-1:-1;;;;;;54706:20:0;;;;;;:14;:20;;;;;:31;;;;;:39;;:31;:39;54661:84;:144;;;;-1:-1:-1;;;;;;54749:20:0;;;;;;:14;:20;;;;;:38;;;54790:15;-1:-1:-1;54661:144:0;:185;;;;-1:-1:-1;;;;;;54809:20:0;;;;;;:14;:20;;;;;:29;;;;;;;;:37;;54842:4;54809:37;54661:185;54657:988;;;54885:26;;54867:14;:44;54863:491;;54949:14;54932:407;54969:26;;54965:1;:30;54932:407;;;55180:18;55141:21;:26;55163:3;:1;55165;55163:3;:::i;:::-;55141:26;;;;;;;;;;;:36;;;:57;;;;:::i;:::-;55099:24;;;;:21;:24;;;;;;;;:38;;;-1:-1:-1;;;;;55045:20:0;;;;;;;;;;:28;:50;;55076:19;;55045:50;:::i;:::-;55044:93;;;;:::i;:::-;:155;;;;:::i;:::-;55025:174;;;;:::i;:::-;;-1:-1:-1;55243:21:0;:26;55265:3;:1;55267;55265:3;:::i;:::-;55243:26;;;;;;;;;;;-1:-1:-1;55243:26:0;:36;;-1:-1:-1;55302:17:0;;;;:::i;:::-;;;;54997:3;;;;;:::i;:::-;;;;54932:407;;;;54863:491;55392:26;;55374:14;:44;55370:262;;55579:36;55597:18;55579:15;:36;:::i;:::-;55534:26;;55512:49;;;;:21;:49;;;;;;;;:63;;;-1:-1:-1;;;;;55458:20:0;;;;;;;;;;:28;:50;;55489:19;;55458:50;:::i;:::-;55457:118;;;;:::i;:::-;:159;;;;:::i;:::-;55438:178;;;;:::i;:::-;;;55370:262;-1:-1:-1;;;;;55661:20:0;;;;;;:14;:20;;;;;:32;;;;;;;;;:40;;:32;:40;:100;;;;-1:-1:-1;;;;;;55705:20:0;;;;;;:14;:20;;;;;:37;;;55746:15;-1:-1:-1;55705:56:0;55661:100;55657:1535;;;55801:26;;55783:14;:44;55779:1098;;55865:14;55848:1014;55885:26;;55881:1;:30;55848:1014;;;55985:21;:26;56007:3;:1;56009;56007:3;:::i;:::-;55985:26;;;;;;;;;;;;;;-1:-1:-1;55985:26:0;;;:36;-1:-1:-1;;;;;55945:20:0;;;;;;;;:37;;;:76;55941:435;;;56205:18;56166:21;:26;56188:3;:1;56190;56188:3;:::i;:::-;56166:26;;;;;;;;;;;:36;;;:57;;;;:::i;:::-;56124:24;;;;:21;:24;;;;;;;;:38;;;-1:-1:-1;;;;;56070:20:0;;;;;;;;;;:28;:50;;56101:19;;56070:50;:::i;:::-;56069:93;;;;:::i;:::-;:155;;;;:::i;:::-;56050:174;;;;:::i;:::-;;-1:-1:-1;56272:21:0;:26;56294:3;:1;56296;56294:3;:::i;:::-;56272:26;;;;;;;;;;;-1:-1:-1;56272:26:0;:36;;-1:-1:-1;56335:17:0;;;;:::i;:::-;;;;55941:435;56457:21;:26;56479:3;:1;56481;56479:3;:::i;:::-;56457:26;;;;;;;;;;;;;;-1:-1:-1;56457:26:0;;;:36;-1:-1:-1;;;;;56416:20:0;;;;;;;;:37;;;:77;;;;:118;;-1:-1:-1;;;;;;56497:20:0;;;;;;:14;:20;;;;;:29;;;;;;;;:37;;56530:4;56497:37;56416:118;56412:428;;;-1:-1:-1;;;;;56577:20:0;;56562:12;56577:20;;;:14;:20;;;;;:37;;;:58;;56617:18;;56577:58;:::i;:::-;56736:24;;;;:21;:24;;;;;;;;:38;;;-1:-1:-1;;;;;56682:20:0;;;;;;;;;;:28;56562:73;;-1:-1:-1;56562:73:0;;56682:50;;56713:19;;56682:50;:::i;:::-;56681:93;;;;:::i;:::-;:100;;;;:::i;:::-;56662:119;;;;:::i;:::-;;;56808:5;;;56412:428;55913:3;;;;:::i;:::-;;;;55848:1014;;;;55779:1098;56915:26;;56897:14;:44;56893:284;;-1:-1:-1;;;;;57102:20:0;;;;;;:14;:20;;;;;:37;;;:58;;57142:18;;57102:58;:::i;:::-;57057:26;;57035:49;;;;:21;:49;;;;;;;;:63;;;-1:-1:-1;;;;;56981:20:0;;;;;;;;;;:28;:50;;57012:19;;56981:50;:::i;:::-;56980:118;;;;:::i;:::-;:181;;;;:::i;:::-;56961:200;;;;:::i;:::-;;;56893:284;-1:-1:-1;;;;;57208:20:0;;;;;;:14;:20;;;;;:32;;;;;;;;:41;;;:84;;-1:-1:-1;;;;;;57253:20:0;;;;;;:14;:20;;;;;:31;;;;;:39;;:31;:39;57208:84;:145;;;;-1:-1:-1;;;;;;57296:20:0;;;;;;:14;:20;;;;;:38;;;57338:15;-1:-1:-1;57296:57:0;57208:145;57204:1582;;;57391:26;;57373:14;:44;57370:1097;;57454:14;57437:1013;57474:26;;57470:1;:30;57437:1013;;;57575:21;:26;57597:3;:1;57599;57597:3;:::i;:::-;57575:26;;;;;;;;;;;;;;-1:-1:-1;57575:26:0;;;:36;-1:-1:-1;;;;;57534:20:0;;;;;;;;:38;;;:77;57530:436;;;57795:18;57756:21;:26;57778:3;:1;57780;57778:3;:::i;:::-;57756:26;;;;;;;;;;;:36;;;:57;;;;:::i;:::-;57714:24;;;;:21;:24;;;;;;;;:38;;;-1:-1:-1;;;;;57660:20:0;;;;;;;;;;:28;:50;;57691:19;;57660:50;:::i;:::-;57659:93;;;;:::i;:::-;:155;;;;:::i;:::-;57640:174;;;;:::i;:::-;;-1:-1:-1;57862:21:0;:26;57884:3;:1;57886;57884:3;:::i;:::-;57862:26;;;;;;;;;;;-1:-1:-1;57862:26:0;:36;;-1:-1:-1;57925:17:0;;;;:::i;:::-;;;;57530:436;58044:21;:26;58066:3;:1;58068;58066:3;:::i;:::-;58044:26;;;;;;;;;;;;;;-1:-1:-1;58044:26:0;;;:36;-1:-1:-1;;;;;58002:20:0;;;;;;;;:38;;;:78;;;;:119;;-1:-1:-1;;;;;;58084:20:0;;;;;;:14;:20;;;;;:29;;;;;;;;:37;;58117:4;58084:37;58002:119;57998:430;;;-1:-1:-1;;;;;58164:20:0;;58149:12;58164:20;;;:14;:20;;;;;:38;;;:59;;58205:18;;58164:59;:::i;:::-;58324:24;;;;:21;:24;;;;;;;;:38;;;-1:-1:-1;;;;;58270:20:0;;;;;;;;;;:28;58149:74;;-1:-1:-1;58149:74:0;;58270:50;;58301:19;;58270:50;:::i;:::-;58269:93;;;;:::i;:::-;:100;;;;:::i;:::-;58250:119;;;;:::i;:::-;;;58396:5;;;57998:430;57502:3;;;;:::i;:::-;;;;57437:1013;;;;57370:1097;58505:26;;58487:14;:44;58483:285;;-1:-1:-1;;;;;58692:20:0;;;;;;:14;:20;;;;;:38;;;:59;;58733:18;;58692:59;:::i;:::-;58647:26;;58625:49;;;;:21;:49;;;;;;;;:63;;;-1:-1:-1;;;;;58571:20:0;;;;;;;;;;:28;:50;;58602:19;;58571:50;:::i;:::-;58570:118;;;;:::i;:::-;:182;;;;:::i;:::-;58551:201;;;;:::i;:::-;;;58483:285;58806:32;58823:15;58806:14;:32;:::i;:::-;58798:40;48272:10607;-1:-1:-1;;;;;;;;48272:10607:0:o;20499:137::-;2047:13;:11;:13::i;:::-;20590:17:::1;:38:::0;20499:137::o;20358:133::-;2047:13;:11;:13::i;:::-;20447:16:::1;:36:::0;20358:133::o;63493:699::-;63590:10;63540:19;63581:20;;;:8;:20;;;;;:32;63562:16;;:51;;63581:32;63562:51;:::i;:::-;63664:10;63626:20;63649:26;;;:14;:26;;;;;:33;63716:6;;63540:73;;-1:-1:-1;63649:33:0;63716:15;;63725:6;;63716:15;:::i;:::-;63696:35;-1:-1:-1;63743:20:0;63696:35;63768:18;:12;63783:3;63768:18;:::i;:::-;63767:32;;;;:::i;:::-;63743:57;-1:-1:-1;63812:18:0;63848;63863:3;63743:57;63848:18;:::i;:::-;63833:34;;:11;:34;:::i;:::-;63812:55;-1:-1:-1;63879:24:0;63906:19;63919:6;63812:55;63906:19;:::i;:::-;63937:4;;:43;;-1:-1:-1;;;63937:43:0;;63879:46;;-1:-1:-1;;;;;;63937:4:0;;:13;;:43;;63951:10;;63879:46;;63937:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;64011:10:0;63996:26;;;;:14;:26;;;;;:38;;:58;;64038:16;;63996:26;:58;;64038:16;;63996:58;:::i;:::-;;;;-1:-1:-1;;64100:16:0;;64074:10;64065:20;;;;:8;:20;;;;;:51;;;64129:33;;;;:53;;64166:16;;64065:20;64129:53;;64166:16;;64129:53;:::i;:::-;;;;-1:-1:-1;;;;;;;;63493:699:0:o;19145:90::-;2047:13;:11;:13::i;:::-;19213:5:::1;:14:::0;;-1:-1:-1;;;;;;19213:14:0::1;-1:-1:-1::0;;;;;19213:14:0;;;::::1;::::0;;;::::1;::::0;;19145:90::o;19025:112::-;2047:13;:11;:13::i;:::-;19101:12:::1;:28:::0;;-1:-1:-1;;;;;;19101:28:0::1;-1:-1:-1::0;;;;;19101:28:0;;;::::1;::::0;;;::::1;::::0;;19025:112::o;2809:103::-;2047:13;:11;:13::i;:::-;2874:30:::1;2901:1;2874:18;:30::i;:::-;2809:103::o:0;26659:660::-;26723:13;;-1:-1:-1;;;26723:13:0;;;;26722:14;26714:23;;;;;;26756:9;;:58;;;;-1:-1:-1;26784:10:0;26769:26;;;;:14;:26;;;;;:37;;;;;;;;;:45;;:37;:45;26756:58;:121;;;;26818:4;26826:1;26818:9;:59;;;;-1:-1:-1;26846:10:0;26831:26;;;;:14;:26;;;;;:38;;;;;;;;;:46;;:38;:46;26818:59;26748:130;;;;;;26899:4;26907:1;26899:9;26895:214;;26929:20;26970:17;;26952:15;:35;;;;:::i;:::-;27051:10;27036:26;;;;:14;:26;;;;;:42;;:57;-1:-1:-1;26895:214:0;27129:4;27137:1;27129:9;27125:187;;27159:20;27200:18;;27182:15;:36;;;;:::i;:::-;27253:10;27238:26;;;;:14;:26;;;;;:43;;:58;-1:-1:-1;26659:660:0;:::o;18901:116::-;2047:13;:11;:13::i;:::-;18972:1:::1;18949:20;:24:::0;;;18984:21:::1;:25:::0;18901:116::o;20644:137::-;2047:13;:11;:13::i;:::-;20735:17:::1;:38:::0;20644:137::o;21043:97::-;2047:13;:11;:13::i;:::-;21114:7:::1;:18:::0;21043:97::o;21148:1304::-;21250:13;;-1:-1:-1;;;21250:13:0;;;;21249:14;21241:23;;;;;;21283:11;;;:26;;;21298:6;21308:1;21298:11;21283:26;21275:35;;;;;;21342:10;21327:26;;;;:14;:26;;;;;:36;;;;;:44;;:36;:44;;:93;;-1:-1:-1;21390:10:0;21375:26;;;;:14;:26;;;;;:37;;;;;:45;;:37;:45;21327:93;21323:142;;;21438:15;:13;:15::i;:::-;21481:6;21491:1;21481:11;21477:563;;21532:7;;21517:11;:22;;21509:31;;;;;;21588:10;21573:26;;;;:14;:26;;;;;:36;;;;;:44;;:36;:44;21569:318;;21638:19;21660:31;21680:10;21660:19;:31::i;:::-;21638:53;-1:-1:-1;21732:15:0;;21728:81;;21772:17;:15;:17::i;:::-;21845:26;21859:11;21845:13;:26::i;:::-;21619:268;21569:318;21930:10;21915:26;;;;:14;:26;;;;;:36;;;;;:45;;;;21911:112;;21980:27;21995:11;21980:14;:27::i;:::-;22056:6;22066:1;22056:11;22052:332;;22108:7;;22093:11;:22;;22085:31;;;;;;22150:10;22135:26;;;;:14;:26;;;;;:37;;;;;:45;;:37;:45;22131:112;;22200:27;22215:11;22200:14;:27::i;:::-;22279:10;22264:26;;;;:14;:26;;;;;:37;;;;;:46;;;;22260:113;;22330:27;22345:11;22330:14;:27::i;:::-;22399:45;;;22408:10;6441:51:1;;6523:2;6508:18;;6501:34;;;6551:18;;;6544:34;;;22399:45:0;;6429:2:1;6414:18;22399:45:0;;;;;;;;21148:1304;;;:::o;16602:118::-;2047:13;:11;:13::i;:::-;16681:19:::1;:31:::0;16602:118::o;20218:132::-;2047:13;:11;:13::i;:::-;20301:41:::1;::::0;-1:-1:-1;;;20301:41:0;;-1:-1:-1;;;;;20301:23:0;::::1;::::0;::::1;::::0;:41:::1;::::0;20325:10:::1;::::0;20337:4;;20301:41:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20218:132:::0;;:::o;19938:93::-;2047:13;:11;:13::i;:::-;20001::::1;:22:::0;;;::::1;;-1:-1:-1::0;;;20001:22:0::1;-1:-1:-1::0;;;;20001:22:0;;::::1;::::0;;;::::1;::::0;;19938:93::o;19617:313::-;19678:7;19687;19696;19732:26;;19724:5;:34;19716:43;;;;;;-1:-1:-1;;;19770:36:0;19809:28;;;:21;:28;;;;;;;;;19770:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19617:313;;;;:::o;16355:116::-;2047:13;:11;:13::i;:::-;16433:18:::1;:30:::0;16355:116::o;62027:907::-;62080:15;:13;:15::i;:::-;62138:10;62108:12;62123:26;;;:14;:26;;;;;;;;:48;;;62195:26;;;;;:48;;;62123;;62271:9;62195:48;62123;62271:9;:::i;:::-;62254:26;;62326:6;62301:21;:31;;62293:40;;;;;;62346:36;;62354:10;;62346:36;;;;;62375:6;;62346:36;;;;62375:6;62354:10;62346:36;;;;;;;;;;;;;;;;;;;;-1:-1:-1;62410:10:0;62395:26;;;;:14;:26;;;;;:46;;:54;;62445:4;;62395:26;:54;;62445:4;;62395:54;:::i;:::-;;;;-1:-1:-1;;62475:10:0;62460:26;;;;:14;:26;;;;;:46;;:52;;62510:2;;62460:26;:52;;62510:2;;62460:52;:::i;:::-;;;;-1:-1:-1;;62538:10:0;62574:1;62523:26;;;:14;:26;;;;;;;;:48;;:52;;;62586:26;;;;;:48;;:52;;;62649:19;:29;;62672:6;;62574:1;62649:29;;62672:6;;62649:29;:::i;:::-;;;;-1:-1:-1;;62704:18:0;;62695:27;;62691:92;;;62743:28;62753:10;62764:6;62743:28;;;;;;;:::i;:::-;;;;;;;;62691:92;62822:19;;62798:21;:43;62795:128;;;62862:49;;;62873:15;1264:25:1;;62889:21:0;1320:2:1;1305:18;;1298:34;62862:49:0;;1237:18:1;62862:49:0;1090:248:1;64204:505:0;-1:-1:-1;;;;;64330:14:0;;64268:7;64330:14;;;:8;:14;;;;;:26;64311:16;;64268:7;;64311:45;;;:::i;:::-;-1:-1:-1;;;;;64392:20:0;;64369;64392;;;:14;:20;;;;;:27;64452:6;;64289:67;;-1:-1:-1;64392:27:0;64452:15;;64461:6;;64452:15;:::i;:::-;64432:35;-1:-1:-1;64479:20:0;64432:35;64504:18;:12;64519:3;64504:18;:::i;:::-;64503:32;;;;:::i;:::-;64479:57;-1:-1:-1;64548:18:0;64584;64599:3;64479:57;64584:18;:::i;:::-;64569:34;;:11;:34;:::i;:::-;64548:55;-1:-1:-1;64615:24:0;64642:19;64655:6;64548:55;64642:19;:::i;20938:97::-;2047:13;:11;:13::i;:::-;21009:7:::1;:18:::0;20938:97::o;19246:363::-;2047:13;:11;:13::i;:::-;19343:26:::1;:29:::0;;;:26:::1;:29;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;19399:26:0::1;::::0;19467:68:::1;::::0;;::::1;::::0;;::::1;::::0;;19488:15:::1;19467:68:::0;;::::1;::::0;;::::1;::::0;;;;;;;;;-1:-1:-1;19436:28:0;;;:21:::1;:28:::0;;;;;:99;;;;;;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;19551:50;;2708:25:1;;;2749:18;;;2742:34;;;2792:18;;;2785:34;;;19551:50:0::1;::::0;2681:18:1;19551:50:0::1;2506:319:1::0;58887:3124:0;58968:10;58953:26;;;;:14;:26;;;;;:36;;;;;:44;;:36;:44;58949:93;;59013:17;:15;:17::i;:::-;59054:15;:13;:15::i;:::-;59119:10;59086:15;59104:26;;;:14;:26;;;;;;;;:48;;;59182:26;;;;;:48;;;59104;;59263:17;59182:48;59104;59263:17;:::i;:::-;59320:16;;;59334:1;59320:16;;;;;;;;59242:38;;-1:-1:-1;59296:21:0;;59320:16;;;;;;;;;;-1:-1:-1;;59359:13:0;;:20;;;-1:-1:-1;;;59359:20:0;;;;59296:40;;-1:-1:-1;;;;;;59359:13:0;;;;:18;;-1:-1:-1;59359:20:0;;;;;;;;;;;;;;:13;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;59349:4;59354:1;59349:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;59349:30:0;;;:7;;;;;;;;;:30;59402:8;;59392:7;;59402:8;;;59392:4;;59402:8;;59392:7;;;;;;:::i;:::-;-1:-1:-1;;;;;59392:18:0;;;:7;;;;;;;;;:18;59457:13;;:45;;-1:-1:-1;;;59457:45:0;;59427:27;;59457:13;;;;;:27;;:45;;59485:10;;59497:4;;59457:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;59457:45:0;;;;;;;;;;;;:::i;:::-;59427:75;;59515:21;59539:10;59550:1;59539:13;;;;;;;;:::i;:::-;;;;;;;;;;;59609:4;;59602:37;;-1:-1:-1;;;59602:37:0;;59633:4;59602:37;;;1755:51:1;59539:13:0;;-1:-1:-1;59578:21:0;;-1:-1:-1;;;;;59609:4:0;;;;59602:22;;1728:18:1;;59602:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;59578:61;-1:-1:-1;59652:18:0;59702:3;59674:24;59690:8;59674:13;:24;:::i;:::-;59673:32;;;;:::i;:::-;59652:53;-1:-1:-1;59718:23:0;59744:26;59652:53;59744:13;:26;:::i;:::-;59795:13;;:211;;-1:-1:-1;;;59795:211:0;;59718:52;;-1:-1:-1;;;;;;59795:13:0;;:64;;59867:10;;59795:211;;59718:52;;59927:4;;59956;;59978:15;;59795:211;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;60053:4:0;;60046:37;;-1:-1:-1;;;60046:37:0;;60077:4;60046:37;;;1755:51:1;60023:20:0;;-1:-1:-1;;;;;;60053:4:0;;;;-1:-1:-1;60046:22:0;;-1:-1:-1;1728:18:1;;60046:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;60023:60;-1:-1:-1;60100:20:0;60123:28;60138:13;60023:60;60123:28;:::i;:::-;60183:10;60168:26;;;;:14;:26;;;;;:37;;;60100:51;;-1:-1:-1;60168:37:0;;;;;:45;;:37;:45;60164:118;;60230:5;;;:40;;-1:-1:-1;;;60230:40:0;;-1:-1:-1;;;;;60230:5:0;;;;:14;;:40;;60245:10;;60257:12;;60230:40;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;60164:118;60313:10;60298:26;;;;:14;:26;;;;;:36;;;;;:44;;:36;:44;60294:336;;60375:10;60360:26;;;;:14;:26;;;;;:49;;60397:12;;60360:26;:49;;60397:12;;60360:49;:::i;:::-;;;;-1:-1:-1;;60441:10:0;60426:26;;;;:14;:26;;;;;:41;;:55;;60471:10;;60426:26;:55;;60471:10;;60426:55;:::i;:::-;;;;-1:-1:-1;;60513:10:0;60549:1;60498:26;;;:14;:26;;;;;;;;:48;;:52;;;60566:26;;;;;:48;;:52;60294:336;60661:10;60646:26;;;;:14;:26;;;;;:36;;;;;:45;;;;60642:1218;;60723:10;60708:26;;;;:14;:26;;;;;:49;;60745:12;;60708:26;:49;;60745:12;;60708:49;:::i;:::-;;;;-1:-1:-1;;60787:10:0;60772:26;;;;:14;:26;;;;;60819:15;60772:44;;;;:62;;;60913:16;;60895:34;;;:::i;:::-;60864:10;60849:26;;;;:14;:26;;;;;;;;:43;;;:80;;;;60945:43;;;:47;;;61052:11;61007:42;;;:56;61078:36;;;;:43;;61117:4;-1:-1:-1;;61136:45:0;;;;;;61196:46;;;:50;;;-1:-1:-1;61261:41:0;;;:45;;;61374:15;-1:-1:-1;61321:50:0;;:68;61451:26;;61404:44;;;:73;-1:-1:-1;61492:48:0;;;:52;;;-1:-1:-1;;61559:42:0;;;;;;;;61651:16;;61616:8;:20;;;;;:51;;;61682:33;:37;;;61734:26;;;;;:48;;;:52;;;61801:22;;61811:12;;61078:36;60849:26;61801:22;;61811:12;;61801:22;:::i;:::-;;;;-1:-1:-1;;61838:7:0;:10;;;:7;:10;;;:::i;:::-;;;;;;60642:1218;61882:12;61872:6;;:22;;;;;;;:::i;:::-;;;;;;;;61931:10;61905:22;;:36;;;;;;;:::i;:::-;;;;-1:-1:-1;;61957:46:0;;;61966:10;6441:51:1;;6523:2;6508:18;;6501:34;;;6551:18;;;6544:34;;;61957:46:0;;6429:2:1;6414:18;61957:46:0;;;;;;;58936:3075;;;;;;;;;;;58887:3124;:::o;3067:201::-;2047:13;:11;:13::i;:::-;-1:-1:-1;;;;;3156:22:0;::::1;3148:73;;;::::0;-1:-1:-1;;;3148:73:0;;9920:2:1;3148:73:0::1;::::0;::::1;9902:21:1::0;9959:2;9939:18;;;9932:30;9998:34;9978:18;;;9971:62;-1:-1:-1;;;10049:18:1;;;10042:36;10095:19;;3148:73:0::1;;;;;;;;;3232:28;3251:8;3232:18;:28::i;18593:300::-:0;2047:13;:11;:13::i;:::-;18762:2:::1;18712:46;18736:22:::0;18712:21;:46:::1;:::i;:::-;:52;;18704:61;;;::::0;::::1;;18784:20;:44:::0;;;;18839:21:::1;:46:::0;18593:300::o;62942:543::-;2047:13;:11;:13::i;:::-;63029:4:::1;::::0;63022:37:::1;::::0;-1:-1:-1;;;63022:37:0;;63053:4:::1;63022:37;::::0;::::1;1755:51:1::0;62998:21:0::1;::::0;-1:-1:-1;;;;;63029:4:0::1;::::0;63022:22:::1;::::0;1728:18:1;;63022:37:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;62998:61;;63073:5;;;;;;;;;-1:-1:-1::0;;;;;63073:5:0::1;-1:-1:-1::0;;;;;63073:11:0::1;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;63129:4:0::1;::::0;63122:37:::1;::::0;-1:-1:-1;;;63122:37:0;;63153:4:::1;63122:37;::::0;::::1;1755:51:1::0;63099:20:0::1;::::0;-1:-1:-1;;;;;;63129:4:0;;::::1;::::0;-1:-1:-1;63122:22:0::1;::::0;1728:18:1;;63122:37:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;63099:60:::0;-1:-1:-1;63172:15:0::1;63190:28;63205:13:::0;63099:60;63190:28:::1;:::i;:::-;63172:46;;63232:15;63271:6;;63251:7;63261:6;63251:16;;;;:::i;:::-;63250:27;;;;:::i;:::-;63306:13;::::0;;63355:54:::1;::::0;;::::1;::::0;::::1;::::0;;63368:15:::1;63355:54:::0;;::::1;::::0;;::::1;::::0;;;63394:6:::1;::::0;63355:54;;;;;;;;;;;;63290:13:::1;63332:20:::0;;;:13:::1;:20:::0;;;;;;:77;;;;;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;63422:15;;63232:45;;-1:-1:-1;63306:13:0;;63422:15;63306:13;63422:15:::1;::::0;::::1;:::i;:::-;;;;;;63470:7;63450:16;;:27;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;62942:543:0:o;2326:132::-;2207:7;2234:6;-1:-1:-1;;;;;2234:6:0;794:10;2390:23;2382:68;;;;-1:-1:-1;;;2382:68:0;;10327:2:1;2382:68:0;;;10309:21:1;;;10346:18;;;10339:30;10405:34;10385:18;;;10378:62;10457:18;;2382:68:0;10125:356:1;28155:2920:0;28240:10;28225:26;;;;:14;:26;;;;;:37;;;;;;;;:45;;:37;:45;28221:184;;28287:5;;;:37;;-1:-1:-1;;;28287:37:0;;-1:-1:-1;;;;;28287:5:0;;;;:13;;:37;;28309:4;;28316:7;;28287:37;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;28339:5:0;;;:54;;-1:-1:-1;;;28339:54:0;;-1:-1:-1;;;;;28339:5:0;;;;:18;;:54;;28358:10;;28378:4;;28385:7;;28339:54;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28221:184;28417:18;28438:31;28458:10;28438:19;:31::i;:::-;28417:52;-1:-1:-1;28494:14:0;;28490:64;;28525:17;:15;:17::i;:::-;28656:10;28566:20;28641:26;;;:14;:26;;;;;:42;;;28566:20;;28686:15;-1:-1:-1;28641:109:0;;;;-1:-1:-1;28720:10:0;28705:26;;;;:14;:26;;;;;:37;;;;;;;;;:45;;:37;:45;28641:109;28637:247;;;28770:4;;:34;;-1:-1:-1;;;28770:34:0;;-1:-1:-1;;;;;28770:4:0;;;;:13;;:34;;28784:10;;28796:7;;28770:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;28838:10:0;28823:26;;;;:14;:26;;;;;:44;;28860:7;;28823:26;:44;;28860:7;;28823:44;:::i;:::-;;;;-1:-1:-1;;28637:247:0;28919:10;28904:26;;;;:14;:26;;;;;:43;;;28950:15;-1:-1:-1;28904:111:0;;;;-1:-1:-1;28984:10:0;28969:26;;;;:14;:26;;;;;:37;;;;;;;;:46;28904:111;28900:249;;;29035:4;;:34;;-1:-1:-1;;;29035:34:0;;-1:-1:-1;;;;;29035:4:0;;;;:13;;:34;;29049:10;;29061:7;;29035:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;29103:10:0;29088:26;;;;:14;:26;;;;;:44;;29125:7;;29088:26;:44;;29125:7;;29088:44;:::i;:::-;;;;-1:-1:-1;;28900:249:0;29184:10;29169:26;;;;:14;:26;;;;;:42;;;29214:15;-1:-1:-1;29169:109:0;;;;-1:-1:-1;29248:10:0;29233:26;;;;:14;:26;;;;;:37;;;;;;;;;:45;;:37;:45;29169:109;29165:460;;;29350:3;29327:20;;29317:7;:30;;;;:::i;:::-;:36;;;;:::i;:::-;29298:56;-1:-1:-1;29389:25:0;29298:56;29389:7;:25;:::i;:::-;29434:4;;:39;;-1:-1:-1;;;29434:39:0;;29373:42;;-1:-1:-1;;;;;;29434:4:0;;:13;;:39;;29448:10;;29373:42;;29434:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;29492:4:0;;29506:12;;29492:44;;-1:-1:-1;;;29492:44:0;;-1:-1:-1;;;;;29492:4:0;;;;:13;;:44;;29506:12;;;29520:15;;29492:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;29570:10:0;29555:26;;;;:14;:26;;;;;:44;;29592:7;;29555:26;:44;;29592:7;;29555:44;:::i;:::-;;;;-1:-1:-1;;29165:460:0;29660:10;29645:26;;;;:14;:26;;;;;:43;;;29691:15;-1:-1:-1;29645:111:0;;;;-1:-1:-1;29725:10:0;29710:26;;;;:14;:26;;;;;:37;;;;;;;;:46;29645:111;29641:454;;;29828:3;29805:20;;29795:7;:30;;;;:::i;:::-;:36;;;;:::i;:::-;29776:56;-1:-1:-1;29867:25:0;29776:56;29867:7;:25;:::i;:::-;29912:4;;:39;;-1:-1:-1;;;29912:39:0;;29851:42;;-1:-1:-1;;;;;;29912:4:0;;:13;;:39;;29926:10;;29851:42;;29912:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;29970:4:0;;29984:12;;29970:44;;-1:-1:-1;;;29970:44:0;;-1:-1:-1;;;;;29970:4:0;;;;:13;;:44;;29984:12;;;29998:15;;29970:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;30048:10:0;30033:26;;;;:14;:26;;;;;:44;;30070:7;;30033:26;:44;;30070:7;;30033:44;:::i;:::-;;;;-1:-1:-1;;29641:454:0;30154:7;;30133:10;30118:26;;;;:14;:26;;;;;:33;:43;30114:947;;;30197:10;30218:1;30182:26;;;:14;:26;;;;;:37;;;30238:44;;;:48;;;30305:43;;;:47;;;30371:46;;;:50;;;30440;;;:54;;;30513:48;;;:52;;;30584:41;;;:45;;;30648:43;;;:47;;;30714:42;;;:46;;;30779:36;;;:44;;-1:-1:-1;;30906:43:0;;;30968:44;;:48;;;31035:7;:10;;;;;;:::i;:::-;;;;;;28202:2873;;;28155:2920;:::o;31083:2656::-;31231:10;31141:20;31216:26;;;:14;:26;;;;;:43;;;31141:20;;31263:15;-1:-1:-1;31216:62:0;;;:112;;-1:-1:-1;31297:10:0;31282:26;;;;:14;:26;;;;;:38;;;;;;;;;:46;;:38;:46;31216:112;31212:296;;;31389:4;;:39;;-1:-1:-1;;;31389:39:0;;31363:7;;-1:-1:-1;;;;;;31389:4:0;;;;:13;;:39;;31403:10;;31363:7;;31389:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;31462:10:0;31447:26;;;;:14;:26;;;;;:45;;31485:7;;31447:26;:45;;31485:7;;31447:45;:::i;:::-;;;;-1:-1:-1;;31212:296:0;31543:10;31528:26;;;;:14;:26;;;;;:44;;;31576:15;-1:-1:-1;31528:63:0;;;:114;;-1:-1:-1;31610:10:0;31595:26;;;;:14;:26;;;;;:38;;;;;;;;:47;31528:114;31524:298;;;31703:4;;:39;;-1:-1:-1;;;31703:39:0;;31677:7;;-1:-1:-1;;;;;;31703:4:0;;;;:13;;:39;;31717:10;;31677:7;;31703:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;31776:10:0;31761:26;;;;:14;:26;;;;;:45;;31799:7;;31761:26;:45;;31799:7;;31761:45;:::i;:::-;;;;-1:-1:-1;;31524:298:0;31857:10;31842:26;;;;:14;:26;;;;;:43;;;31888:15;-1:-1:-1;31842:111:0;;;;-1:-1:-1;31922:10:0;31907:26;;;;:14;:26;;;;;:38;;;;;;;;;:46;;:38;:46;31842:111;31838:454;;;32026:3;32002:21;;31992:7;:31;;;;:::i;:::-;:37;;;;:::i;:::-;31973:57;-1:-1:-1;32065:25:0;31973:57;32065:7;:25;:::i;:::-;32110:4;;:39;;-1:-1:-1;;;32110:39:0;;32049:42;;-1:-1:-1;;;;;;32110:4:0;;:13;;:39;;32124:10;;32049:42;;32110:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;32168:4:0;;32182:12;;32168:44;;-1:-1:-1;;;32168:44:0;;-1:-1:-1;;;;;32168:4:0;;;;:13;;:44;;32182:12;;;32196:15;;32168:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;32246:10:0;32231:26;;;;:14;:26;;;;;:45;;32269:7;;32231:26;:45;;32269:7;;32231:45;:::i;:::-;;;;-1:-1:-1;;31838:454:0;32327:10;32312:26;;;;:14;:26;;;;;:44;;;32359:15;-1:-1:-1;32312:113:0;;;;-1:-1:-1;32393:10:0;32378:26;;;;:14;:26;;;;;:38;;;;;;;;:47;32312:113;32308:456;;;32498:3;32474:21;;32464:7;:31;;;;:::i;:::-;:37;;;;:::i;:::-;32445:57;-1:-1:-1;32537:25:0;32445:57;32537:7;:25;:::i;:::-;32582:4;;:39;;-1:-1:-1;;;32582:39:0;;32521:42;;-1:-1:-1;;;;;;32582:4:0;;:13;;:39;;32596:10;;32521:42;;32582:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;32640:4:0;;32654:12;;32640:44;;-1:-1:-1;;;32640:44:0;;-1:-1:-1;;;;;32640:4:0;;;;:13;;:44;;32654:12;;;32668:15;;32640:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;32718:10:0;32703:26;;;;:14;:26;;;;;:45;;32741:7;;32703:26;:45;;32741:7;;32703:45;:::i;:::-;;;;-1:-1:-1;;32308:456:0;32821:7;;32799:10;32784:26;;;;:14;:26;;;;;:34;:44;32780:952;;;32864:10;32886:1;32849:26;;;:14;:26;;;;;:38;;;32906:45;;;:49;;;32974:44;;;:48;;;33041:38;;;:42;;;33102:46;;;:50;;;33171;;;:54;;;33244:48;;;:52;;;33315:44;;;:48;;;33382:43;;;:47;;;33448:37;;;:45;;-1:-1:-1;;33577:43:0;;;33639:44;;:48;;;33706:7;:10;;;;;;:::i;:::-;;;;;;31130:2609;;31083:2656;:::o;3428:191::-;3502:16;3521:6;;-1:-1:-1;;;;;3538:17:0;;;-1:-1:-1;;;;;;3538:17:0;;;;;;3571:40;;3521:6;;;;;;;3571:40;;3502:16;3571:40;3491:128;3428:191;:::o;33747:14517::-;33886:10;33792:22;33871:26;;;:14;:26;;;;;:37;;;33792:22;;33871:37;;;;;;:45;;:37;:45;:109;;;;-1:-1:-1;33935:10:0;33920:26;;;;:14;:26;;;;;:42;;;33965:15;-1:-1:-1;33871:109:0;33867:1231;;;34049:26;;34016:10;34001:26;;;;:14;:26;;;;;:44;;;:74;33997:648;;34128:10;34101:9;34113:26;;;:14;:26;;;;;:44;;;34096:534;34163:26;;34159:1;:30;34096:534;;;34392:10;34377:26;;;;:14;:26;;;;;:50;;;;34338:21;;34360:3;:1;34362;34360:3;:::i;:::-;34338:26;;;;;;;;;;;:36;;;:89;;;;:::i;:::-;34297:24;;;;:21;:24;;;;;;;;:37;;;34253:10;34238:26;;:14;:26;;;;;;:33;:55;;34274:19;;34238:55;:::i;:::-;34237:97;;;;:::i;:::-;:191;;;;:::i;:::-;34219:209;;;;:::i;:::-;;-1:-1:-1;34504:21:0;:26;34526:3;:1;34528;34526:3;:::i;:::-;34504:26;;;;;;;;;;;;;;-1:-1:-1;34504:26:0;;;:36;34466:10;34451:26;;:14;:26;;;;;;:50;;;:89;;;;34563:44;;;;:47;;;;;;:::i;:::-;;;;;;34191:3;;;;;:::i;:::-;;;;34096:534;;;;33997:648;34725:26;;34692:10;34677:26;;;;:14;:26;;;;;:44;;;:74;34673:414;;34948:10;34933:26;;;;:14;:26;;;;;:50;;;34915:68;;:15;:68;:::i;:::-;34871:26;;34849:49;;;;:21;:49;;;;;;;;:62;;;34805:10;34790:26;;:14;:26;;;;;;:33;:55;;34826:19;;34790:55;:::i;:::-;34789:122;;;;:::i;:::-;:195;;;;:::i;:::-;34771:213;;;;:::i;:::-;35018:10;35003:26;;;;:14;:26;;;;;35056:15;35003:50;;;;:68;34771:213;-1:-1:-1;34673:414:0;35129:10;35114:26;;;;:14;:26;;;;;:37;;;;;;;;:46;;;:94;;-1:-1:-1;35179:10:0;35164:26;;;;:14;:26;;;;;:36;;;;;:44;;:36;:44;35114:94;:159;;;;-1:-1:-1;35227:10:0;35212:26;;;;:14;:26;;;;;:43;;;35258:15;-1:-1:-1;35114:159:0;35110:1281;;;35342:26;;35309:10;35294:26;;;;:14;:26;;;;;:44;;;:74;35290:648;;35421:10;35394:9;35406:26;;;:14;:26;;;;;:44;;;35389:534;35456:26;;35452:1;:30;35389:534;;;35685:10;35670:26;;;;:14;:26;;;;;:50;;;;35631:21;;35653:3;:1;35655;35653:3;:::i;:::-;35631:26;;;;;;;;;;;:36;;;:89;;;;:::i;:::-;35590:24;;;;:21;:24;;;;;;;;:37;;;35546:10;35531:26;;:14;:26;;;;;;:33;:55;;35567:19;;35531:55;:::i;:::-;35530:97;;;;:::i;:::-;:191;;;;:::i;:::-;35512:209;;;;:::i;:::-;;-1:-1:-1;35797:21:0;:26;35819:3;:1;35821;35819:3;:::i;:::-;35797:26;;;;;;;;;;;;;;-1:-1:-1;35797:26:0;;;:36;35759:10;35744:26;;:14;:26;;;;;;:50;;;:89;;;;35856:44;;;;:47;;;;;;:::i;:::-;;;;;;35484:3;;;;;:::i;:::-;;;;35389:534;;;;35290:648;36018:26;;35985:10;35970:26;;;;:14;:26;;;;;:44;;;:74;35966:414;;36241:10;36226:26;;;;:14;:26;;;;;:50;;;36208:68;;:15;:68;:::i;:::-;36164:26;;36142:49;;;;:21;:49;;;;;;;;:62;;;36098:10;36083:26;;:14;:26;;;;;;:33;:55;;36119:19;;36083:55;:::i;:::-;36082:122;;;;:::i;:::-;:195;;;;:::i;:::-;36064:213;;;;:::i;:::-;36311:10;36296:26;;;;:14;:26;;;;;36349:15;36296:50;;;;:68;36064:213;-1:-1:-1;35966:414:0;36422:10;36407:26;;;;:14;:26;;;;;:37;;;;;;;;;:45;;:37;:45;:110;;;;-1:-1:-1;36471:10:0;36456:26;;;;:14;:26;;;;;:42;;;36502:15;-1:-1:-1;36456:61:0;36407:110;:157;;;;-1:-1:-1;36536:10:0;36521:26;;;;:14;:26;;;;;:35;;;;;;;;:43;;36560:4;36521:43;36407:157;36403:2194;;;36631:26;;36599:10;36584:26;;;;:14;:26;;;;;:44;;;:73;36581:1458;;;36711:10;36684:9;36696:26;;;:14;:26;;;;;:44;;;36679:1345;36746:26;;36742:1;:30;36679:1345;;;36853:21;:26;36875:3;:1;36877;36875:3;:::i;:::-;36853:26;;;;;;;;;;;;;;-1:-1:-1;36853:26:0;;;:36;36823:10;36808:26;;:14;:26;;;;:42;;;:81;36804:537;;;37091:10;37076:26;;;;:14;:26;;;;;:50;;;;37037:21;;37059:3;:1;37061;37059:3;:::i;:::-;37037:26;;;;;;;;;;;:36;;;:89;;;;:::i;:::-;36996:24;;;;:21;:24;;;;;;;;:37;;;36952:10;36937:26;;:14;:26;;;;;;:33;:55;;36973:19;;36937:55;:::i;:::-;36936:97;;;;:::i;:::-;:191;;;;:::i;:::-;36918:209;;;;:::i;:::-;;-1:-1:-1;37207:21:0;:26;37229:3;:1;37231;37229:3;:::i;:::-;37207:26;;;;;;;;;;;;;;-1:-1:-1;37207:26:0;;;:36;37169:10;37154:26;;:14;:26;;;;;;:50;;;:89;;;;37270:44;;;;:47;;;;;;:::i;:::-;;;;;;36804:537;37427:21;:26;37449:3;:1;37451;37449:3;:::i;:::-;37427:26;;;;;;;;;;;;;;-1:-1:-1;37427:26:0;;;:36;37396:10;37381:26;;:14;:26;;;;:42;;;:82;37377:625;;37567:10;37492:12;37552:26;;;:14;:26;;;;;:50;;;;37507:42;;;;;:95;;37552:50;37507:95;:::i;:::-;37707:24;;;;:21;:24;;;;;;;;:37;;;37663:10;37648:26;;:14;:26;;;;;;:33;37492:110;;-1:-1:-1;37492:110:0;;37648:55;;37684:19;;37648:55;:::i;:::-;37647:97;;;;:::i;:::-;:104;;;;:::i;:::-;37629:122;;;;:::i;:::-;37846:10;37831:26;;;;:14;:26;;;;;:42;;;;37778:50;;;:95;37900:35;;:43;;-1:-1:-1;;37900:43:0;;;37629:122;-1:-1:-1;37970:5:0;;-1:-1:-1;37970:5:0;37377:625;36774:3;;;;:::i;:::-;;;;36679:1345;;;;36581:1458;38107:26;;38074:10;38059:26;;;;:14;:26;;;;;:44;;;:74;38055:530;;38357:10;38342:26;;;;:14;:26;;;;;:50;;;;38297:42;;;;;:95;;38342:50;38297:95;:::i;:::-;38253:26;;38231:49;;;;:21;:49;;;;;;;;:62;;;38187:10;38172:26;;:14;:26;;;;;;:33;:55;;38208:19;;38172:55;:::i;:::-;38171:122;;;;:::i;:::-;:222;;;;:::i;:::-;38153:240;;;;:::i;:::-;38480:10;38465:26;;;;:14;:26;;;;;:42;;;;38412:50;;;:95;38526:35;;:43;;-1:-1:-1;;38526:43:0;;;38153:240;-1:-1:-1;38055:530:0;38628:10;38613:26;;;;:14;:26;;;;;:37;;;;;;;;:46;;;:94;;-1:-1:-1;38678:10:0;38663:26;;;;:14;:26;;;;;:36;;;;;:44;;:36;:44;38613:94;:160;;;;-1:-1:-1;38726:10:0;38711:26;;;;:14;:26;;;;;:43;;;38758:15;-1:-1:-1;38711:62:0;38613:160;:207;;;;-1:-1:-1;38792:10:0;38777:26;;;;:14;:26;;;;;:35;;;;;;;;:43;;38816:4;38777:43;38613:207;38609:2297;;;38887:26;;38855:10;38840:26;;;;:14;:26;;;;;:44;;;:73;38837:1503;;;38965:10;38938:9;38950:26;;;:14;:26;;;;;:44;;;38933:1390;39000:26;;38996:1;:30;38933:1390;;;39106:21;:26;39128:3;:1;39130;39128:3;:::i;:::-;39106:26;;;;;;;;;;;;;;-1:-1:-1;39106:26:0;;;:36;39075:10;39060:26;;:14;:26;;;;:43;;;:82;39056:538;;;39344:10;39329:26;;;;:14;:26;;;;;:50;;;;39290:21;;39312:3;:1;39314;39312:3;:::i;:::-;39290:26;;;;;;;;;;;:36;;;:89;;;;:::i;:::-;39249:24;;;;:21;:24;;;;;;;;:37;;;39205:10;39190:26;;:14;:26;;;;;;:33;:55;;39226:19;;39190:55;:::i;:::-;39189:97;;;;:::i;:::-;:191;;;;:::i;:::-;39171:209;;;;:::i;:::-;;-1:-1:-1;39460:21:0;:26;39482:3;:1;39484;39482:3;:::i;:::-;39460:26;;;;;;;;;;;;;;-1:-1:-1;39460:26:0;;;:36;39422:10;39407:26;;:14;:26;;;;;;:50;;;:89;;;;39523:44;;;;:47;;;;;;:::i;:::-;;;;;;39056:538;39678:21;:26;39700:3;:1;39702;39700:3;:::i;:::-;39678:26;;;;;;;;;;;;;;-1:-1:-1;39678:26:0;;;:36;39646:10;39631:26;;:14;:26;;;;:43;;;:83;;;;:130;;-1:-1:-1;39733:10:0;39718:26;;;;:14;:26;;;;;:35;;;;;;;;:43;;39757:4;39718:43;39631:130;39627:674;;;39865:10;39789:12;39850:26;;;:14;:26;;;;;:50;;;;39804:43;;;;;:96;;39850:50;39804:96;:::i;:::-;40005:24;;;;:21;:24;;;;;;;;:37;;;39961:10;39946:26;;:14;:26;;;;;;:33;39789:111;;-1:-1:-1;39789:111:0;;39946:55;;39982:19;;39946:55;:::i;:::-;39945:97;;;;:::i;:::-;:104;;;;:::i;:::-;39927:122;;;;:::i;:::-;40144:10;40129:26;;;;:14;:26;;;;;:43;;;;40076:50;;;:96;40199:35;;:43;;-1:-1:-1;;40199:43:0;;;39927:122;-1:-1:-1;40269:5:0;;-1:-1:-1;40269:5:0;39627:674;39028:3;;;;:::i;:::-;;;;38933:1390;;;;38837:1503;40408:26;;40375:10;40360:26;;;;:14;:26;;;;;:44;;;:74;40356:532;;40659:10;40644:26;;;;:14;:26;;;;;:50;;;;40598:43;;;;;:96;;40644:50;40598:96;:::i;:::-;40554:26;;40532:49;;;;:21;:49;;;;;;;;:62;;;40488:10;40473:26;;:14;:26;;;;;;:33;:55;;40509:19;;40473:55;:::i;:::-;40472:122;;;;:::i;:::-;:223;;;;:::i;:::-;40454:241;;;;:::i;:::-;40782:10;40767:26;;;;:14;:26;;;;;:43;;;;40714:50;;;:96;40829:35;;:43;;-1:-1:-1;;40829:43:0;;;40454:241;-1:-1:-1;40356:532:0;40937:10;40922:26;;;;:14;:26;;;;;:38;;;;;;;;;:46;;:38;:46;:111;;;;-1:-1:-1;40987:10:0;40972:26;;;;:14;:26;;;;;:43;;;41018:15;-1:-1:-1;40922:111:0;40918:1228;;;41102:26;;41069:10;41054:26;;;;:14;:26;;;;;:44;;;:74;41050:651;;41181:10;41154:9;41166:26;;;:14;:26;;;;;:44;;;41149:537;41216:26;;41212:1;:30;41149:537;;;41448:10;41433:26;;;;:14;:26;;;;;:50;;;;41394:21;;41416:3;:1;41418;41416:3;:::i;:::-;41394:26;;;;;;;;;;;:36;;;:89;;;;:::i;:::-;41352:24;;;;:21;:24;;;;;;;;:38;;;41307:10;41292:26;;;;;;;;:34;:56;;41329:19;;41292:56;:::i;:::-;41291:99;;;;:::i;:::-;:193;;;;:::i;:::-;41272:212;;;;:::i;:::-;;-1:-1:-1;41560:21:0;:26;41582:3;:1;41584;41582:3;:::i;:::-;41560:26;;;;;;;;;;;;;;-1:-1:-1;41560:26:0;;;:36;41522:10;41507:26;;;;;;;;:50;;;:89;;;;41619:44;;;;:47;;;;;;:::i;:::-;;;;;;41244:3;;;;;:::i;:::-;;;;41149:537;;;;41050:651;41769:26;;41736:10;41721:26;;;;:14;:26;;;;;:44;;;:74;41717:418;;41996:10;41981:26;;;;:14;:26;;;;;:50;;;41963:68;;:15;:68;:::i;:::-;41918:26;;41896:49;;;;:21;:49;;;;;;;;:63;;;41851:10;41836:26;;;;;;;;:34;:56;;41873:19;;41836:56;:::i;:::-;41835:124;;;;:::i;:::-;:197;;;;:::i;:::-;41816:216;;;;:::i;:::-;42066:10;42051:26;;;;:14;:26;;;;;42104:15;42051:50;;;;:68;41816:216;-1:-1:-1;41717:418:0;42177:10;42162:26;;;;:14;:26;;;;;:38;;;;;;;;:47;;;:96;;-1:-1:-1;42228:10:0;42213:26;;;;:14;:26;;;;;:37;;;;;:45;;:37;:45;42162:96;:162;;;;-1:-1:-1;42277:10:0;42262:26;;;;:14;:26;;;;;:44;;;42309:15;-1:-1:-1;42162:162:0;:209;;;;-1:-1:-1;42343:10:0;42328:26;;;;:14;:26;;;;;:35;;;;;;;;:43;;42367:4;42328:43;42162:209;42158:1325;;;42440:26;;42407:10;42392:26;;;;:14;:26;;;;;:44;;;:74;42388:651;;42519:10;42492:9;42504:26;;;:14;:26;;;;;:44;;;42487:537;42554:26;;42550:1;:30;42487:537;;;42786:10;42771:26;;;;:14;:26;;;;;:50;;;;42732:21;;42754:3;:1;42756;42754:3;:::i;:::-;42732:26;;;;;;;;;;;:36;;;:89;;;;:::i;:::-;42690:24;;;;:21;:24;;;;;;;;:38;;;42645:10;42630:26;;;;;;;;:34;:56;;42667:19;;42630:56;:::i;:::-;42629:99;;;;:::i;:::-;:193;;;;:::i;:::-;42610:212;;;;:::i;:::-;;-1:-1:-1;42898:21:0;:26;42920:3;:1;42922;42920:3;:::i;:::-;42898:26;;;;;;;;;;;;;;-1:-1:-1;42898:26:0;;;:36;42860:10;42845:26;;;;;;;;:50;;;:89;;;;42957:44;;;;:47;;;;;;:::i;:::-;;;;;;42582:3;;;;;:::i;:::-;;;;42487:537;;;;42388:651;43107:26;;43074:10;43059:26;;;;:14;:26;;;;;:44;;;:74;43055:417;;43333:10;43318:26;;;;:14;:26;;;;;:50;;;43300:68;;:15;:68;:::i;:::-;43255:26;;43233:49;;;;:21;:49;;;;;;;;:63;;;43188:10;43173:26;;;;;;;;:34;:56;;43210:19;;43173:56;:::i;:::-;43172:124;;;;:::i;:::-;:197;;;;:::i;:::-;43153:216;;;;:::i;:::-;43403:10;43388:26;;;;:14;:26;;;;;43441:15;43388:50;;;;:68;43153:216;-1:-1:-1;43055:417:0;43522:10;43507:26;;;;:14;:26;;;;;:38;;;;;;;;;:46;;:38;:46;:112;;;;-1:-1:-1;43572:10:0;43557:26;;;;:14;:26;;;;;:43;;;43604:15;-1:-1:-1;43557:62:0;43507:112;:159;;;;-1:-1:-1;43638:10:0;43623:26;;;;:14;:26;;;;;:35;;;;;;;;:43;;43662:4;43623:43;43507:159;43503:2212;;;43735:26;;43703:10;43688:26;;;;:14;:26;;;;;:44;;;:73;43684:1465;;;43814:10;43787:9;43799:26;;;:14;:26;;;;;:44;;;43782:1352;43849:26;;43845:1;:30;43782:1352;;;43955:21;:26;43977:3;:1;43979;43977:3;:::i;:::-;43955:26;;;;;;;;;;;;;;-1:-1:-1;43955:26:0;;;:36;43924:10;43909:26;;;;;;:43;;;:82;43905:541;;;44196:10;44181:26;;;;:14;:26;;;;;:50;;;;44142:21;;44164:3;:1;44166;44164:3;:::i;:::-;44142:26;;;;;;;;;;;:36;;;:89;;;;:::i;:::-;44100:24;;;;:21;:24;;;;;;;;:38;;;44055:10;44040:26;;;;;;;;:34;:56;;44077:19;;44040:56;:::i;:::-;44039:99;;;;:::i;:::-;:193;;;;:::i;:::-;44020:212;;;;:::i;:::-;;-1:-1:-1;44312:21:0;:26;44334:3;:1;44336;44334:3;:::i;:::-;44312:26;;;;;;;;;;;;;;-1:-1:-1;44312:26:0;;;:36;44274:10;44259:26;;;;;;;;:50;;;:89;;;;44375:44;;;;:47;;;;;;:::i;:::-;;;;;;43905:541;44533:21;:26;44555:3;:1;44557;44555:3;:::i;:::-;44533:26;;;;;;;;;;;;;;-1:-1:-1;44533:26:0;;;:36;44501:10;44486:26;;;;;;:43;;;:83;44482:630;;44673:10;44597:12;44658:26;;;:14;:26;;;;;:50;;;;44612:43;;;;;:96;;44658:50;44612:96;:::i;:::-;44815:24;;;;:21;:24;;;;;;;;:38;;;44770:10;44755:26;;;;;;;;:34;44597:111;;-1:-1:-1;44597:111:0;;44755:56;;44792:19;;44755:56;:::i;:::-;44754:99;;;;:::i;:::-;:106;;;;:::i;:::-;44735:125;;;;:::i;:::-;44955:10;44940:26;;;;:14;:26;;;;;:43;;;;44887:50;;;:96;45010:35;;:43;;-1:-1:-1;;45010:43:0;;;44735:125;-1:-1:-1;45080:5:0;;-1:-1:-1;45080:5:0;44482:630;43877:3;;;;:::i;:::-;;;;43782:1352;;;;43684:1465;45217:26;;45184:10;45169:26;;;;:14;:26;;;;;:44;;;:74;45165:535;;45471:10;45456:26;;;;:14;:26;;;;;:50;;;;45410:43;;;;;:96;;45456:50;45410:96;:::i;:::-;45365:26;;45343:49;;;;:21;:49;;;;;;;;:63;;;45298:10;45283:26;;;;;;;;:34;:56;;45320:19;;45283:56;:::i;:::-;45282:124;;;;:::i;:::-;:225;;;;:::i;:::-;45263:244;;;;:::i;:::-;45594:10;45579:26;;;;:14;:26;;;;;:43;;;;45526:50;;;:96;45641:35;;:43;;-1:-1:-1;;45641:43:0;;;45263:244;-1:-1:-1;45165:535:0;45748:10;45733:26;;;;:14;:26;;;;;:38;;;;;;;;:47;;;:96;;-1:-1:-1;45799:10:0;45784:26;;;;:14;:26;;;;;:37;;;;;:45;;:37;:45;45733:96;:163;;;;-1:-1:-1;45848:10:0;45833:26;;;;:14;:26;;;;;:44;;;45881:15;-1:-1:-1;45833:63:0;45733:163;:211;;;;-1:-1:-1;45916:10:0;45901:26;;;;:14;:26;;;;;:35;;;;;;;;:43;;45940:4;45901:43;45733:211;45729:2269;;;46012:26;;45979:10;45964:26;;;;:14;:26;;;;;:44;;;:74;45961:1466;;46090:10;46063:9;46075:26;;;:14;:26;;;;;:44;;;46058:1352;46125:26;;46121:1;:30;46058:1352;;;46232:21;:26;46254:3;:1;46256;46254:3;:::i;:::-;46232:26;;;;;;;;;;;;;;-1:-1:-1;46232:26:0;;;:36;46200:10;46185:26;;;;;;:44;;;:83;46181:542;;;46473:10;46458:26;;;;:14;:26;;;;;:50;;;;46419:21;;46441:3;:1;46443;46441:3;:::i;:::-;46419:26;;;;;;;;;;;:36;;;:89;;;;:::i;:::-;46377:24;;;;:21;:24;;;;;;;;:38;;;46332:10;46317:26;;;;;;;;:34;:56;;46354:19;;46317:56;:::i;:::-;46316:99;;;;:::i;:::-;:193;;;;:::i;:::-;46297:212;;;;:::i;:::-;;-1:-1:-1;46589:21:0;:26;46611:3;:1;46613;46611:3;:::i;:::-;46589:26;;;;;;;;;;;;;;-1:-1:-1;46589:26:0;;;:36;46551:10;46536:26;;;;;;;;:50;;;:89;;;;46652:44;;;;:47;;;;;;:::i;:::-;;;;;;46181:542;46807:21;:26;46829:3;:1;46831;46829:3;:::i;:::-;46807:26;;;;;;;;;;;;;;-1:-1:-1;46807:26:0;;;:36;46774:10;46759:26;;;;;;:44;;;:84;46755:633;;46948:10;46871:12;46933:26;;;:14;:26;;;;;:50;;;;46886:44;;;;;:97;;46933:50;46886:97;:::i;:::-;47090:24;;;;:21;:24;;;;;;;;:38;;;47045:10;47030:26;;;;;;;;:34;46871:112;;-1:-1:-1;46871:112:0;;47030:56;;47067:19;;47030:56;:::i;:::-;47029:99;;;;:::i;:::-;:106;;;;:::i;:::-;47010:125;;;;:::i;:::-;47230:10;47215:26;;;;:14;:26;;;;;:44;;;;47162:50;;;:97;47286:35;;:43;;-1:-1:-1;;47286:43:0;;;47010:125;-1:-1:-1;47356:5:0;;-1:-1:-1;47356:5:0;46755:633;46153:3;;;;:::i;:::-;;;;46058:1352;;;;45961:1466;47495:26;;47462:10;47447:26;;;;:14;:26;;;;;:44;;;:74;47443:537;;47750:10;47735:26;;;;:14;:26;;;;;:50;;;;47688:44;;;;;:97;;47735:50;47688:97;:::i;:::-;47643:26;;47621:49;;;;:21;:49;;;;;;;;:63;;;47576:10;47561:26;;;;;;;;:34;:56;;47598:19;;47561:56;:::i;:::-;47560:124;;;;:::i;:::-;:226;;;;:::i;:::-;47541:245;;;;:::i;:::-;47873:10;47858:26;;;;:14;:26;;;;;:44;;;;47805:50;;;:97;47921:35;;:43;;-1:-1:-1;;47921:43:0;;;47541:245;-1:-1:-1;47443:537:0;48025:10;48010:26;;;;:14;:26;;;;;:48;;:66;;48062:14;;48010:26;:66;;48062:14;;48010:66;:::i;:::-;;;;-1:-1:-1;;48102:10:0;48087:26;;;;:14;:26;;;;;:48;;:67;;48139:15;;48087:26;:67;;48139:15;;48087:67;:::i;:::-;;;;;;;;48187:14;48165:18;;:36;;;;;;;:::i;:::-;;;;;;;;48235:15;48212:19;;:38;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;33747:14517:0:o;22460:416::-;22533:4;;:39;;-1:-1:-1;;;22533:39:0;;-1:-1:-1;;;;;22533:4:0;;;;:12;;:39;;22554:4;;22561:10;;22533:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;22583:4:0;;:56;;-1:-1:-1;;;22583:56:0;;-1:-1:-1;;;;;22583:4:0;;;;:17;;:56;;22601:10;;22621:4;;22628:10;;22583:56;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;22679:10:0;22664:26;;;;:14;:26;;;;;:37;;;;;;;;:45;;:37;:45;22660:116;;22726:5;;;:38;;-1:-1:-1;;;22726:38:0;;-1:-1:-1;;;;;22726:5:0;;;;:14;;:38;;22741:10;;22753;;22726:38;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22660:116;22804:10;22789:26;;;;:14;:26;;;;;:47;;22826:10;;22789:26;:47;;22826:10;;22789:47;:::i;:::-;;;;;;;;22857:10;22847:6;;:20;;;;;;;:::i;:::-;;;;-1:-1:-1;;;22460:416:0:o;23168:1194::-;23232:4;;:39;;-1:-1:-1;;;23232:39:0;;-1:-1:-1;;;;;23232:4:0;;;;:12;;:39;;23253:4;;23260:10;;23232:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;23282:4:0;;:56;;-1:-1:-1;;;23282:56:0;;-1:-1:-1;;;;;23282:4:0;;;;:17;;:56;;23300:10;;23320:4;;23327:10;;23282:56;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;23364:10:0;23349:26;;;;:14;:26;;;;;:47;;23386:10;;23349:26;:47;;23386:10;;23349:47;:::i;:::-;;;;-1:-1:-1;;23422:10:0;23407:26;;;;:14;:26;;;;;23454:15;23407:44;;;;:62;;;23544:16;;23526:34;;;:::i;:::-;23495:10;23480:26;;;;:14;:26;;;;;;;;:43;;;:80;;;;23572:43;;;:47;;;23675:11;23630:42;;;:56;23697:36;;;;:43;;23736:4;-1:-1:-1;;23751:45:0;;;;;;23807:46;;;:50;;;-1:-1:-1;23868:41:0;;:45;;;23977:15;-1:-1:-1;23924:50:0;;:68;24050:26;;24003:44;;;:73;-1:-1:-1;24087:48:0;;;:52;;;-1:-1:-1;;24150:42:0;;;;;24238:16;;24203:8;:20;;;;;;:51;;;24265:33;;:37;;;24313:20;;24323:10;;23697:36;23480:26;24313:20;;24323:10;;24313:20;:::i;:::-;;;;-1:-1:-1;;24344:7:0;:10;;;:7;:10;;;:::i;:::-;;;;;;23168:1194;:::o;22884:273::-;22948:4;;:39;;-1:-1:-1;;;22948:39:0;;-1:-1:-1;;;;;22948:4:0;;;;:12;;:39;;22969:4;;22976:10;;22948:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;22998:4:0;;:56;;-1:-1:-1;;;22998:56:0;;-1:-1:-1;;;;;22998:4:0;;;;:17;;:56;;23016:10;;23036:4;;23043:10;;22998:56;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;23080:10:0;23065:26;;;;:14;:26;;;;;:48;;23103:10;;23065:26;:48;;23103:10;;23065:48;:::i;:::-;;;;;;;;23135:10;23124:7;;:21;;;;;;;:::i;24370:1089::-;24434:4;;:39;;-1:-1:-1;;;24434:39:0;;-1:-1:-1;;;;;24434:4:0;;;;:12;;:39;;24455:4;;24462:10;;24434:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;24484:4:0;;:56;;-1:-1:-1;;;24484:56:0;;-1:-1:-1;;;;;24484:4:0;;;;:17;;:56;;24502:10;;24522:4;;24529:10;;24484:56;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;24566:10:0;24551:26;;;;:14;:26;;;;;:48;;24589:10;;24551:26;:48;;24589:10;;24551:48;:::i;:::-;;;;-1:-1:-1;;24625:10:0;24610:26;;;;:14;:26;;;;;24658:15;24610:45;;;;:63;;;24749:17;;24731:35;;;:::i;:::-;24699:10;24684:26;;;;:14;:26;;;;;:44;;;:82;;;;24777:37;;;:44;;24832;;;:48;;;24937:11;24891:43;;;:57;-1:-1:-1;;24959:46:0;;-1:-1:-1;24959:46:0;;;25016;;;:50;;;25130:15;-1:-1:-1;25077:50:0;;:68;25203:26;;25156:44;;;;:73;;;;-1:-1:-1;25240:38:0;;:42;;;-1:-1:-1;25293:48:0;;;:52;;;-1:-1:-1;;25356:42:0;;;;;25409:21;;25420:10;;25156:44;24684:26;25409:21;;25420:10;;25409:21;:::i;:::-;;;;-1:-1:-1;;25441:7:0;:10;;;:7;:10;;;:::i;196:180:1:-;255:6;308:2;296:9;287:7;283:23;279:32;276:52;;;324:1;321;314:12;276:52;-1:-1:-1;347:23:1;;196:180;-1:-1:-1;196:180:1:o;381:316::-;458:6;466;474;527:2;515:9;506:7;502:23;498:32;495:52;;;543:1;540;533:12;495:52;-1:-1:-1;;566:23:1;;;636:2;621:18;;608:32;;-1:-1:-1;687:2:1;672:18;;;659:32;;381:316;-1:-1:-1;381:316:1:o;702:131::-;-1:-1:-1;;;;;777:31:1;;767:42;;757:70;;823:1;820;813:12;838:247;897:6;950:2;938:9;929:7;925:23;921:32;918:52;;;966:1;963;956:12;918:52;1005:9;992:23;1024:31;1049:5;1024:31;:::i;:::-;1074:5;838:247;-1:-1:-1;;;838:247:1:o;1817:315::-;1885:6;1893;1946:2;1934:9;1925:7;1921:23;1917:32;1914:52;;;1962:1;1959;1952:12;1914:52;2001:9;1988:23;2020:31;2045:5;2020:31;:::i;:::-;2070:5;2122:2;2107:18;;;;2094:32;;-1:-1:-1;;;1817:315:1:o;2137:118::-;2223:5;2216:13;2209:21;2202:5;2199:32;2189:60;;2245:1;2242;2235:12;2260:241;2316:6;2369:2;2357:9;2348:7;2344:23;2340:32;2337:52;;;2385:1;2382;2375:12;2337:52;2424:9;2411:23;2443:28;2465:5;2443:28;:::i;4527:248::-;4595:6;4603;4656:2;4644:9;4635:7;4631:23;4627:32;4624:52;;;4672:1;4669;4662:12;4624:52;-1:-1:-1;;4695:23:1;;;4765:2;4750:18;;;4737:32;;-1:-1:-1;4527:248:1:o;4780:274::-;-1:-1:-1;;;;;4972:32:1;;;;4954:51;;5036:2;5021:18;;5014:34;4942:2;4927:18;;4780:274::o;5059:245::-;5126:6;5179:2;5167:9;5158:7;5154:23;5150:32;5147:52;;;5195:1;5192;5185:12;5147:52;5227:9;5221:16;5246:28;5268:5;5246:28;:::i;5309:127::-;5370:10;5365:3;5361:20;5358:1;5351:31;5401:4;5398:1;5391:15;5425:4;5422:1;5415:15;5441:125;5506:9;;;5527:10;;;5524:36;;;5540:18;;:::i;:::-;5441:125;;;;:::o;5571:128::-;5638:9;;;5659:11;;;5656:37;;;5673:18;;:::i;5704:217::-;5744:1;5770;5760:132;;5814:10;5809:3;5805:20;5802:1;5795:31;5849:4;5846:1;5839:15;5877:4;5874:1;5867:15;5760:132;-1:-1:-1;5906:9:1;;5704:217::o;5926:168::-;5999:9;;;6030;;6047:15;;;6041:22;;6027:37;6017:71;;6068:18;;:::i;6099:135::-;6138:3;6159:17;;;6156:43;;6179:18;;:::i;:::-;-1:-1:-1;6226:1:1;6215:13;;6099:135::o;6589:127::-;6650:10;6645:3;6641:20;6638:1;6631:31;6681:4;6678:1;6671:15;6705:4;6702:1;6695:15;6721:251;6791:6;6844:2;6832:9;6823:7;6819:23;6815:32;6812:52;;;6860:1;6857;6850:12;6812:52;6892:9;6886:16;6911:31;6936:5;6911:31;:::i;6977:127::-;7038:10;7033:3;7029:20;7026:1;7019:31;7069:4;7066:1;7059:15;7093:4;7090:1;7083:15;7109:461;7162:3;7200:5;7194:12;7227:6;7222:3;7215:19;7253:4;7282:2;7277:3;7273:12;7266:19;;7319:2;7312:5;7308:14;7340:1;7350:195;7364:6;7361:1;7358:13;7350:195;;;7429:13;;-1:-1:-1;;;;;7425:39:1;7413:52;;7485:12;;;;7520:15;;;;7461:1;7379:9;7350:195;;;-1:-1:-1;7561:3:1;;7109:461;-1:-1:-1;;;;;7109:461:1:o;7575:332::-;7782:6;7771:9;7764:25;7825:2;7820;7809:9;7805:18;7798:30;7745:4;7845:56;7897:2;7886:9;7882:18;7874:6;7845:56;:::i;:::-;7837:64;7575:332;-1:-1:-1;;;;7575:332:1:o;7912:1105::-;8007:6;8038:2;8081;8069:9;8060:7;8056:23;8052:32;8049:52;;;8097:1;8094;8087:12;8049:52;8130:9;8124:16;8159:18;8200:2;8192:6;8189:14;8186:34;;;8216:1;8213;8206:12;8186:34;8254:6;8243:9;8239:22;8229:32;;8299:7;8292:4;8288:2;8284:13;8280:27;8270:55;;8321:1;8318;8311:12;8270:55;8350:2;8344:9;8372:2;8368;8365:10;8362:36;;;8378:18;;:::i;:::-;8424:2;8421:1;8417:10;8456:2;8450:9;8519:2;8515:7;8510:2;8506;8502:11;8498:25;8490:6;8486:38;8574:6;8562:10;8559:22;8554:2;8542:10;8539:18;8536:46;8533:72;;;8585:18;;:::i;:::-;8621:2;8614:22;8671:18;;;8705:15;;;;-1:-1:-1;8747:11:1;;;8743:20;;;8775:19;;;8772:39;;;8807:1;8804;8797:12;8772:39;8831:11;;;;8851:135;8867:6;8862:3;8859:15;8851:135;;;8933:10;;8921:23;;8884:12;;;;8964;;;;8851:135;;9022:184;9092:6;9145:2;9133:9;9124:7;9120:23;9116:32;9113:52;;;9161:1;9158;9151:12;9113:52;-1:-1:-1;9184:16:1;;9022:184;-1:-1:-1;9022:184:1:o;9211:502::-;9474:6;9463:9;9456:25;9517:3;9512:2;9501:9;9497:18;9490:31;9437:4;9538:57;9590:3;9579:9;9575:19;9567:6;9538:57;:::i;:::-;-1:-1:-1;;;;;9631:32:1;;;;9626:2;9611:18;;9604:60;-1:-1:-1;9695:2:1;9680:18;9673:34;9530:65;9211:502;-1:-1:-1;;9211:502:1:o;10486:375::-;-1:-1:-1;;;;;10744:15:1;;;10726:34;;10796:15;;;;10791:2;10776:18;;10769:43;10843:2;10828:18;;10821:34;;;;10676:2;10661:18;;10486:375::o;10866:136::-;10905:3;10933:5;10923:39;;10942:18;;:::i;:::-;-1:-1:-1;;;10978:18:1;;10866:136::o
Swarm Source
ipfs://678c793e895ba5efb0b8ca4e677ba519b9bc809799f55faf5456f71f6670ac22
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.