Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 47 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Distribute | 16700508 | 514 days ago | IN | 0 ETH | 0.0063636 | ||||
ERC20 | 16700504 | 514 days ago | IN | 0 ETH | 0.00424322 | ||||
ERC20 | 16687613 | 516 days ago | IN | 0 ETH | 0.00969565 | ||||
ERC20 | 16635001 | 523 days ago | IN | 0 ETH | 0.0172593 | ||||
ERC20 | 16585395 | 530 days ago | IN | 0 ETH | 0.01230298 | ||||
ERC20 | 16565659 | 533 days ago | IN | 0 ETH | 0.00557534 | ||||
ERC20 | 16549728 | 535 days ago | IN | 0 ETH | 0.01051275 | ||||
ERC20 | 16500637 | 542 days ago | IN | 0 ETH | 0.00669209 | ||||
ERC20 | 16452717 | 549 days ago | IN | 0 ETH | 0.00598509 | ||||
ERC20 | 16444155 | 550 days ago | IN | 0 ETH | 0.00445541 | ||||
ERC20 | 16400874 | 556 days ago | IN | 0 ETH | 0.00864885 | ||||
ERC20 | 16341542 | 564 days ago | IN | 0 ETH | 0.00701538 | ||||
ERC20 | 16305791 | 569 days ago | IN | 0 ETH | 0.00598277 | ||||
ERC20 | 16219002 | 581 days ago | IN | 0 ETH | 0.00639871 | ||||
Distribute | 16204753 | 583 days ago | IN | 0 ETH | 0.00184003 | ||||
Distribute | 16155468 | 590 days ago | IN | 0 ETH | 0.00349913 | ||||
ERC20 | 16155464 | 590 days ago | IN | 0 ETH | 0.00232737 | ||||
ERC20 | 16142767 | 592 days ago | IN | 0 ETH | 0.00502577 | ||||
ERC20 | 16134158 | 593 days ago | IN | 0 ETH | 0.0051758 | ||||
ERC20 | 16119717 | 595 days ago | IN | 0 ETH | 0.00879568 | ||||
ERC20 | 16106987 | 597 days ago | IN | 0 ETH | 0.00432038 | ||||
ERC20 | 16078745 | 601 days ago | IN | 0 ETH | 0.00321102 | ||||
Toggle Active Do... | 16078736 | 601 days ago | IN | 0 ETH | 0.00040708 | ||||
Toggle Donation ... | 16078730 | 601 days ago | IN | 0 ETH | 0.0004986 | ||||
ERC20 | 16069070 | 602 days ago | IN | 0 ETH | 0.01398701 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
16700508 | 514 days ago | 0.09846729 ETH | ||||
16700508 | 514 days ago | 0.04220026 ETH | ||||
16700508 | 514 days ago | 0.42200267 ETH | ||||
16700504 | 514 days ago | 0.13917544 ETH | ||||
16699773 | 514 days ago | 0.06366214 ETH | ||||
16699498 | 514 days ago | 0.07995392 ETH | ||||
16696530 | 515 days ago | 0.00894421 ETH | ||||
16696241 | 515 days ago | 0.04696474 ETH | ||||
16693598 | 515 days ago | 0.01260902 ETH | ||||
16692485 | 515 days ago | 0.00879782 ETH | ||||
16691494 | 515 days ago | 0.00907213 ETH | ||||
16690946 | 516 days ago | 0.01380892 ETH | ||||
16690946 | 516 days ago | 0.04641389 ETH | ||||
16690086 | 516 days ago | 0.06364568 ETH | ||||
16687884 | 516 days ago | 0.06962227 ETH | ||||
16687613 | 516 days ago | 0.3683237 ETH | ||||
16687613 | 516 days ago | 0.15785301 ETH | ||||
16687613 | 516 days ago | 1.57853016 ETH | ||||
16687613 | 516 days ago | 0.49483172 ETH | ||||
16687096 | 516 days ago | 0.03520285 ETH | ||||
16686716 | 516 days ago | 0.11564305 ETH | ||||
16686639 | 516 days ago | 0.11874857 ETH | ||||
16686545 | 516 days ago | 0.12348664 ETH | ||||
16686518 | 516 days ago | 0.12145909 ETH | ||||
16684623 | 516 days ago | 0.0066353 ETH |
Loading...
Loading
Contract Name:
SplitterV2
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-11-07 */ // File: UniRouterData.sol pragma solidity >=0.8.7 <0.9.0; interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast ); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router02 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } interface IWETH { function deposit() external payable; function transfer(address to, uint value) external returns (bool); function withdraw(uint) external; } // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (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() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // 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: SpiltterV2.sol pragma solidity >=0.8.10 < 0.9; contract SplitterV2 is ReentrancyGuard{ using SafeMath for uint256; using SafeMath for uint16; event UserChanged(address indexed newUser, uint256 indexed location); event Success(bool success, address user); event AdminUpdated(address indexed admin, bool indexed truth); event DonationEdited(address indexed nonProfit, bool truth); struct Profile{ address user; uint16 split; uint16 donationSplit; uint16 rebaseSplit; uint16 adjustedSplit; } struct PairedToken{ address token; uint creator; uint position; } mapping(address => PairedToken) public tokenPaired; address[] public pairedTokens; uint16 rebaseSplit; uint256 index; mapping(address => bool) admin; Profile[] public userData; address public immutable primaryToken; address public defaultDonation; uint16 public donationSplit; bool public donationActive; uint16 public constant totalPoints = 1000; IUniswapV2Router02 public immutable uniswapV2Router; constructor(){ IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); uniswapV2Router = _uniswapV2Router; primaryToken = 0x64Df3aAB3b21cC275bB76c4A581Cf8B726478ee0; userData.push(Profile(0x1784662D0Af586f42F0E822D5c675a9766DDF7Ed,750,0,0,750)); admin[0x1784662D0Af586f42F0E822D5c675a9766DDF7Ed] = true; userData.push(Profile(0xfDDd11361a8De23106b8699e638155885c6DaF6a, 75,0,0,75)); userData.push(Profile(0x7e6BC386A3fF7D4fd4BF78D96f7316263855521b, 75,0,0,75)); admin[0x7e6BC386A3fF7D4fd4BF78D96f7316263855521b]=true; addToken(0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599,475); //WBTC addToken(0x6B175474E89094C44Da98b954EedeAC495271d0F,475); //DAI addToken(0x7D1AfA7B718fb893dB30A3aBc0Cfc608AaCfeBB0,475); //Matic rebaseSplit =100; } /** * @dev function to change address of user to another addres * @param newUser address to change to * @param userLocation location to change */ function changeUser(address newUser, uint256 userLocation)external{ require(userLocation < userData.length, "Location out of bounds"); require(msg.sender == userData[userLocation].user, "Not Approved"); if(admin[msg.sender]){ admin[userData[userLocation].user] = false; admin[newUser] = true; } userData[userLocation].user = newUser; } /** * @dev used for admin only functions */ modifier isAdmin(){ require(admin[msg.sender], "Error: No entry"); _; } /** * @dev function to add and remove admin addresses * @param newAdmin address to toggle * @param truth true or false for isadmin */ function toggleAdmin(address newAdmin, bool truth)external isAdmin{ require(msg.sender != newAdmin, "Can not toggle self"); admin[newAdmin] = truth; emit AdminUpdated(newAdmin, truth); } /** * @dev function to add new token for rebase * @param token to add to rebase * @param userLocation caller user */ function addPairedToken(address token, uint userLocation) external{ Profile storage user = userData[userLocation]; require(user.user == msg.sender, "Not User"); require(20 <= user.adjustedSplit, "User does not have enough to Split"); require(canAdd(token), "Cannot add token"); user.adjustedSplit -=20; user.rebaseSplit +=20; rebaseSplit +=20; addToken(token, userLocation); } /** * @dev function to check if a token can be added * @param token to check */ function canAdd(address token)public view returns(bool){ bool truth = token != primaryToken; // not PrimaryToken truth = truth && token != address(0); //not null truth = truth && tokenPaired[token].token == address(0); //not added truth = (truth && token != uniswapV2Router.WETH()); // not weth truth = (truth && address(0) != IUniswapV2Factory(uniswapV2Router.factory()).getPair(token, primaryToken)); //LP created truth = (truth && address(0) != IUniswapV2Factory(uniswapV2Router.factory()).getPair(token, uniswapV2Router.WETH())); //token has eth LP return truth; } /** * @dev function to add token to rebase system * @param token to add to the rebase system * @param location to of creator */ function addToken(address token, uint location)internal { PairedToken storage t = tokenPaired[token]; t.token = token; t.creator = location; t.position = pairedTokens.length; pairedTokens.push(token); } /** * @dev funciton to remove a token from the rebase system * @param token the token to remove */ function removeToken(address token) external { PairedToken storage t1 = tokenPaired[token]; require(t1.token != address(0), "Token Does not exist"); require(pairedTokens[t1.position] == token, "Not token location"); Profile storage user = userData[t1.creator]; require(user.user == msg.sender, "Not approved"); PairedToken storage t2 = tokenPaired[pairedTokens[pairedTokens.length-1]]; pairedTokens[t1.position] = t2.token; t2.position = t1.position; pairedTokens.pop(); t1.token = address(0); user.adjustedSplit +=20; if(user.rebaseSplit <=20){user.rebaseSplit =0;} else{user.rebaseSplit -=20;} rebaseSplit -=20; } /** * @dev function to call distribute with default nonProfit address if active */ function distribute()external{ require(admin[msg.sender] || msg.sender == userData[1].user, "Not Approved"); _distribute(defaultDonation); } /** * @dev function for users to give points to donation Address * @param userLocation the callers array index * @param trueAddToDonationFalseRemove bool to determine add or removal of points to nonProfit * @param points the amount of points to add or remove */ function toggleDonationSplit(uint userLocation, bool trueAddToDonationFalseRemove, uint16 points)external { require(userLocation < userData.length, "User Out of Bounders"); require(points > 0, "Need an actual number"); Profile storage user = userData[userLocation]; require(user.user == msg.sender, "Not User"); if(trueAddToDonationFalseRemove){ if(user.adjustedSplit <= points){points = user.adjustedSplit;} user.adjustedSplit -= points; user.donationSplit += points; donationSplit += points; }else{ if(user.donationSplit <= points){points = user.donationSplit;} user.donationSplit -= points; user.adjustedSplit += points; if(donationSplit<=points){donationSplit = 0;} else{donationSplit -= points;} } } /** * @dev funciton to toggle donation address and activity * @param nonProfit address to set as default * @param truth is donation active or false */ function toggleActiveDonation(address nonProfit, bool truth)external isAdmin{ require(nonProfit != address(0) || !truth, "Must be real address"); defaultDonation = nonProfit; donationActive = truth; emit DonationEdited(nonProfit, truth); } /** * @dev funciton to distribute eth to addresses and rebase * @param donation address of nonProfit */ function _distribute(address donation) internal{ uint256 denom =totalPoints; if(!donationActive && donationSplit >0){ denom -= donationSplit; //If donations not active then it'll try to balance the %s while removing the donation split } uint256 baseEth = address(this).balance/denom; bool success; uint256 amount; for(uint256 i =0; i < userData.length; i++){ if(userData[i].adjustedSplit > 0){ amount = baseEth * userData[i].adjustedSplit; (success, ) = address(userData[i].user).call{value: amount}(""); emit Success(success, userData[i].user); } } if(donationSplit > 0 && donationActive){ amount = baseEth * donationSplit; (success, ) = address(donation).call{value: amount}(""); emit Success(success, donation); } rebase(); } /** * @dev function to rebase LPs */ function rebase()internal{ if(index >= pairedTokens.length){//if finished with the indexes move to the eth LP and rebase it IWETH(uniswapV2Router.WETH()).deposit{value: address(this).balance}(); _erc20Rebase(uniswapV2Router.WETH()); index = index % pairedTokens.length; }else{ address to = IUniswapV2Factory(uniswapV2Router.factory()).getPair(pairedTokens[index], primaryToken); address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = pairedTokens[index]; uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: address(this).balance}(0, path, to, block.timestamp); IUniswapV2Pair(to).sync(); index++; } } /** * @dev funciton to rebase or sale erc20 tokens * @param token erc20 address to sell or rebase */ function ERC20(address token) external{ require(admin[msg.sender] || msg.sender == userData[1].user, "Not Approved"); require(IERC20(token).balanceOf(address(this)) > 1, "No tokens to transfer"); if(IUniswapV2Factory(uniswapV2Router.factory()).getPair(token, uniswapV2Router.WETH()) != address(0)){ address[] memory path = new address[](2); path[0] = token; path[1] = uniswapV2Router.WETH(); IERC20(token).approve(address(uniswapV2Router), type(uint256).max); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( IERC20(token).balanceOf(address(this)), 0, // accept any amount of ETH path, address(this), block.timestamp ); if(1 ether < address(this).balance){ _distribute(defaultDonation); } } } /** * @dev function to rebase into token and primaryToken LP * @param token token to rebase with primaryToken */ function _erc20Rebase(address token) internal{ address to = IUniswapV2Factory(uniswapV2Router.factory()).getPair(token, primaryToken); IERC20(token).transfer(to, IERC20(token).balanceOf(address(this))); IUniswapV2Pair(to).sync(); } /** * @dev function to send points to another user. * @param callerLocation the senders spot in the array * @param points the amount of points to give reciever * @param sendToRebase mark as true if points go to rebase split */ function givePointsToAnother(uint callerLocation, uint16 points, uint16 receiverLocation, bool sendToRebase) external{ require(callerLocation < userData.length, "Caller Out of Bounders"); Profile storage user = userData[callerLocation]; require(user.user == msg.sender, "Not User"); require(user.adjustedSplit >= points, "Not enough Points"); require(sendToRebase || receiverLocation < userData.length, "reciever out of bounds"); user.split -= points; user.adjustedSplit -= points; if(sendToRebase){ rebaseSplit +=points; }else{ userData[receiverLocation].split += points; userData[receiverLocation].adjustedSplit += points; } } /** * @dev function to return points/positions of different elements for distribution. */ function viewPoints()external view returns(uint16 marketingPoints, uint16 devPoints, uint16 donationPoints, uint16 rebasePoints, uint16 divideBy){ marketingPoints = userData[0].adjustedSplit; devPoints += userData[1].adjustedSplit; devPoints += userData[2].adjustedSplit; rebasePoints = rebaseSplit; divideBy = totalPoints; donationPoints = donationSplit; if(!donationActive && donationSplit > 0){ donationPoints =0; divideBy -= donationSplit; } } receive() external payable {} function nextToRebase()external view returns(address token){ if(index < pairedTokens.length){ token = pairedTokens[index]; }else{ token = uniswapV2Router.WETH(); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"admin","type":"address"},{"indexed":true,"internalType":"bool","name":"truth","type":"bool"}],"name":"AdminUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"nonProfit","type":"address"},{"indexed":false,"internalType":"bool","name":"truth","type":"bool"}],"name":"DonationEdited","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"success","type":"bool"},{"indexed":false,"internalType":"address","name":"user","type":"address"}],"name":"Success","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newUser","type":"address"},{"indexed":true,"internalType":"uint256","name":"location","type":"uint256"}],"name":"UserChanged","type":"event"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"ERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"userLocation","type":"uint256"}],"name":"addPairedToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"canAdd","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newUser","type":"address"},{"internalType":"uint256","name":"userLocation","type":"uint256"}],"name":"changeUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"defaultDonation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distribute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"donationActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"donationSplit","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"callerLocation","type":"uint256"},{"internalType":"uint16","name":"points","type":"uint16"},{"internalType":"uint16","name":"receiverLocation","type":"uint16"},{"internalType":"bool","name":"sendToRebase","type":"bool"}],"name":"givePointsToAnother","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"nextToRebase","outputs":[{"internalType":"address","name":"token","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pairedTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"primaryToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"removeToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"nonProfit","type":"address"},{"internalType":"bool","name":"truth","type":"bool"}],"name":"toggleActiveDonation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"},{"internalType":"bool","name":"truth","type":"bool"}],"name":"toggleAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"userLocation","type":"uint256"},{"internalType":"bool","name":"trueAddToDonationFalseRemove","type":"bool"},{"internalType":"uint16","name":"points","type":"uint16"}],"name":"toggleDonationSplit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenPaired","outputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"creator","type":"uint256"},{"internalType":"uint256","name":"position","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPoints","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"userData","outputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint16","name":"split","type":"uint16"},{"internalType":"uint16","name":"donationSplit","type":"uint16"},{"internalType":"uint16","name":"rebaseSplit","type":"uint16"},{"internalType":"uint16","name":"adjustedSplit","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewPoints","outputs":[{"internalType":"uint16","name":"marketingPoints","type":"uint16"},{"internalType":"uint16","name":"devPoints","type":"uint16"},{"internalType":"uint16","name":"donationPoints","type":"uint16"},{"internalType":"uint16","name":"rebasePoints","type":"uint16"},{"internalType":"uint16","name":"divideBy","type":"uint16"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040523480156200001157600080fd5b5060016000819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250507364df3aab3b21cc275bb76c4a581cf8b726478ee073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060066040518060a00160405280731784662d0af586f42f0e822d5c675a9766ddf7ed73ffffffffffffffffffffffffffffffffffffffff1681526020016102ee61ffff168152602001600061ffff168152602001600061ffff1681526020016102ee61ffff168152509080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548161ffff021916908361ffff16021790555060408201518160000160166101000a81548161ffff021916908361ffff16021790555060608201518160000160186101000a81548161ffff021916908361ffff160217905550608082015181600001601a6101000a81548161ffff021916908361ffff1602179055505050600160056000731784662d0af586f42f0e822d5c675a9766ddf7ed73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060066040518060a0016040528073fddd11361a8de23106b8699e638155885c6daf6a73ffffffffffffffffffffffffffffffffffffffff168152602001604b61ffff168152602001600061ffff168152602001600061ffff168152602001604b61ffff168152509080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548161ffff021916908361ffff16021790555060408201518160000160166101000a81548161ffff021916908361ffff16021790555060608201518160000160186101000a81548161ffff021916908361ffff160217905550608082015181600001601a6101000a81548161ffff021916908361ffff160217905550505060066040518060a00160405280737e6bc386a3ff7d4fd4bf78d96f7316263855521b73ffffffffffffffffffffffffffffffffffffffff168152602001604b61ffff168152602001600061ffff168152602001600061ffff168152602001604b61ffff168152509080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548161ffff021916908361ffff16021790555060408201518160000160166101000a81548161ffff021916908361ffff16021790555060608201518160000160186101000a81548161ffff021916908361ffff160217905550608082015181600001601a6101000a81548161ffff021916908361ffff1602179055505050600160056000737e6bc386a3ff7d4fd4bf78d96f7316263855521b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620005d4732260fac5e5542a773aa44fbcfedf7c193bc2c5996101db6200064960201b60201c565b620005fc736b175474e89094c44da98b954eedeac495271d0f6101db6200064960201b60201c565b62000624737d1afa7b718fb893db30a3abc0cfc608aacfebb06101db6200064960201b60201c565b6064600360006101000a81548161ffff021916908361ffff160217905550506200074e565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050828160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081816001018190555060028054905081600201819055506002839080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b60805160a051614864620008006000396000818161053b015281816106950152818161075e015281816108c30152818161096e01528181610af001528181610fd8015281816110830152818161122801528181611321015281816113c401528181612e2e01528181612f2001528181612fd40152818161318e015281816132fa015261340c0152600081816105620152818161080901528181611fd2015281816130bf01526134b701526148646000f3fe60806040526004361061012e5760003560e01c80635fa7b584116100ab5780639b1f10451161006f5780639b1f1045146104035780639fa120d21461042c578063a3c4f5d21461045b578063c49fe43c14610486578063e4fc6b6d146104af578063fb0b645f146104c657610135565b80635fa7b584146103305780636e854c32146103595780638316d4331461038457806391ac094c146103ad578063958c8a2c146103d857610135565b806330d535dc116100f257806330d535dc146102355780634498b93714610276578063567142be146102b357806358a85bc6146102de578063594803281461030757610135565b806314c51afb1461013a5780631694505e14610179578063289420c1146101a45780632b8e5a3f146101e15780632ca635041461020c57610135565b3661013557005b600080fd5b34801561014657600080fd5b50610161600480360381019061015c91906136f5565b6104ef565b6040516101709392919061374a565b60405180910390f35b34801561018557600080fd5b5061018e610539565b60405161019b91906137e0565b60405180910390f35b3480156101b057600080fd5b506101cb60048036038101906101c691906136f5565b61055d565b6040516101d89190613816565b60405180910390f35b3480156101ed57600080fd5b506101f6610a95565b6040516102039190613831565b60405180910390f35b34801561021857600080fd5b50610233600480360381019061022e9190613878565b610b83565b005b34801561024157600080fd5b5061025c600480360381019061025791906138e4565b610d1f565b60405161026d95949392919061392e565b60405180910390f35b34801561028257600080fd5b5061029d600480360381019061029891906138e4565b610db9565b6040516102aa9190613831565b60405180910390f35b3480156102bf57600080fd5b506102c8610df8565b6040516102d59190613981565b60405180910390f35b3480156102ea57600080fd5b50610305600480360381019061030091906136f5565b610dfe565b005b34801561031357600080fd5b5061032e6004803603810190610329919061399c565b611510565b005b34801561033c57600080fd5b50610357600480360381019061035291906136f5565b6117ae565b005b34801561036557600080fd5b5061036e611c98565b60405161037b9190613816565b60405180910390f35b34801561039057600080fd5b506103ab60048036038101906103a69190613a08565b611cab565b005b3480156103b957600080fd5b506103c2611fd0565b6040516103cf9190613831565b60405180910390f35b3480156103e457600080fd5b506103ed611ff4565b6040516103fa9190613831565b60405180910390f35b34801561040f57600080fd5b5061042a60048036038101906104259190613878565b61201a565b005b34801561043857600080fd5b506104416121cc565b604051610452959493929190613a6f565b60405180910390f35b34801561046757600080fd5b5061047061230e565b60405161047d9190613981565b60405180910390f35b34801561049257600080fd5b506104ad60048036038101906104a89190613ac2565b612322565b005b3480156104bb57600080fd5b506104c4612685565b005b3480156104d257600080fd5b506104ed60048036038101906104e8919061399c565b6127b6565b005b60016020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154905083565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141590508080156105ec5750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b90508080156106895750600073ffffffffffffffffffffffffffffffffffffffff16600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b905080801561075257507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107229190613b2a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b90508080156108b757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107eb9190613b2a565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905847f00000000000000000000000000000000000000000000000000000000000000006040518363ffffffff1660e01b8152600401610845929190613b57565b602060405180830381865afa158015610862573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108869190613b2a565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff1614155b9050808015610a8a57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561092c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109509190613b2a565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905847f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fb9190613b2a565b6040518363ffffffff1660e01b8152600401610a18929190613b57565b602060405180830381865afa158015610a35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a599190613b2a565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff1614155b905080915050919050565b60006002805490506004541015610aee57600260045481548110610abc57610abb613b80565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050610b80565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7d9190613b2a565b90505b90565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0690613c0c565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610c7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7590613c78565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167f235bc17e7930760029e9f4d860a2a8089976de5b381cf8380fc11c1d88a1113360405160405180910390a35050565b60068181548110610d2f57600080fd5b906000526020600020016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060000160149054906101000a900461ffff16908060000160169054906101000a900461ffff16908060000160189054906101000a900461ffff169080600001601a9054906101000a900461ffff16905085565b60028181548110610dc957600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6103e881565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680610ec357506006600181548110610e6657610e65613b80565b5b9060005260206000200160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610f02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef990613ce4565b60405180910390fd5b60018173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610f3d9190613831565b602060405180830381865afa158015610f5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7e9190613d19565b11610fbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb590613d92565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611041573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110659190613b2a565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111109190613b2a565b6040518363ffffffff1660e01b815260040161112d929190613b57565b602060405180830381865afa15801561114a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116e9190613b2a565b73ffffffffffffffffffffffffffffffffffffffff161461150d576000600267ffffffffffffffff8111156111a6576111a5613db2565b5b6040519080825280602002602001820160405280156111d45781602001602082028036833780820191505090505b50905081816000815181106111ec576111eb613b80565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611291573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b59190613b2a565b816001815181106112c9576112c8613b80565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508173ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b815260040161137e929190613de1565b6020604051808303816000875af115801561139d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c19190613e1f565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016114379190613831565b602060405180830381865afa158015611454573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114789190613d19565b60008430426040518663ffffffff1660e01b815260040161149d959493929190613f45565b600060405180830381600087803b1580156114b757600080fd5b505af11580156114cb573d6000803e3d6000fd5b5050505047670de0b6b3a7640000101561150b5761150a600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166129cd565b5b505b50565b6006805490508110611557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154e90613feb565b60405180910390fd5b6006818154811061156b5761156a613b80565b5b9060005260206000200160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611606576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fd90613ce4565b60405180910390fd5b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561174a576000600560006006848154811061167257611671613b80565b5b9060005260206000200160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b816006828154811061175f5761175e613b80565b5b9060005260206000200160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187c90614057565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1660028260020154815481106118b4576118b3613b80565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611935576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192c906140c3565b60405180910390fd5b6000600682600101548154811061194f5761194e613b80565b5b9060005260206000200190503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e49061412f565b60405180910390fd5b60006001600060026001600280549050611a07919061417e565b81548110611a1857611a17613b80565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166002846002015481548110611abc57611abb613b80565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550826002015481600201819055506002805480611b2357611b226141b2565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905560008360000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601482600001601a8282829054906101000a900461ffff16611bbe91906141e1565b92506101000a81548161ffff021916908361ffff16021790555060148260000160189054906101000a900461ffff1661ffff1611611c1b5760008260000160186101000a81548161ffff021916908361ffff160217905550611c58565b60148260000160188282829054906101000a900461ffff16611c3d9190614219565b92506101000a81548161ffff021916908361ffff1602179055505b6014600360008282829054906101000a900461ffff16611c789190614219565b92506101000a81548161ffff021916908361ffff16021790555050505050565b600760169054906101000a900460ff1681565b6006805490508410611cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce990614299565b60405180910390fd5b600060068581548110611d0857611d07613b80565b5b9060005260206000200190503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611da6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9d90614305565b60405180910390fd5b8361ffff1681600001601a9054906101000a900461ffff1661ffff161015611e03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfa90614371565b60405180910390fd5b8180611e1757506006805490508361ffff16105b611e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4d906143dd565b60405180910390fd5b838160000160148282829054906101000a900461ffff16611e779190614219565b92506101000a81548161ffff021916908361ffff1602179055508381600001601a8282829054906101000a900461ffff16611eb29190614219565b92506101000a81548161ffff021916908361ffff1602179055508115611f105783600360008282829054906101000a900461ffff16611ef191906141e1565b92506101000a81548161ffff021916908361ffff160217905550611fc9565b8360068461ffff1681548110611f2957611f28613b80565b5b9060005260206000200160000160148282829054906101000a900461ffff16611f5291906141e1565b92506101000a81548161ffff021916908361ffff1602179055508360068461ffff1681548110611f8557611f84613b80565b5b90600052602060002001600001601a8282829054906101000a900461ffff16611fae91906141e1565b92506101000a81548161ffff021916908361ffff1602179055505b5050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166120a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209d90613c0c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415806120e0575080155b61211f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211690614449565b60405180910390fd5b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760166101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f55a60f83ab22579cf63022cfbde52177977fa58a11efc503a267a3d229fb2dda826040516121c09190613816565b60405180910390a25050565b600080600080600060066000815481106121e9576121e8613b80565b5b90600052602060002001600001601a9054906101000a900461ffff169450600660018154811061221c5761221b613b80565b5b90600052602060002001600001601a9054906101000a900461ffff168461224391906141e1565b9350600660028154811061225a57612259613b80565b5b90600052602060002001600001601a9054906101000a900461ffff168461228191906141e1565b9350600360009054906101000a900461ffff1691506103e89050600760149054906101000a900461ffff169250600760169054906101000a900460ff161580156122df57506000600760149054906101000a900461ffff1661ffff16115b156123075760009250600760149054906101000a900461ffff16816123049190614219565b90505b9091929394565b600760149054906101000a900461ffff1681565b6006805490508310612369576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612360906144b5565b60405180910390fd5b60008161ffff16116123b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a790614521565b60405180910390fd5b6000600684815481106123c6576123c5613b80565b5b9060005260206000200190503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245b90614305565b60405180910390fd5b8215612555578161ffff1681600001601a9054906101000a900461ffff1661ffff16116124a15780600001601a9054906101000a900461ffff1691505b8181600001601a8282829054906101000a900461ffff166124c29190614219565b92506101000a81548161ffff021916908361ffff160217905550818160000160168282829054906101000a900461ffff166124fd91906141e1565b92506101000a81548161ffff021916908361ffff16021790555081600760148282829054906101000a900461ffff1661253691906141e1565b92506101000a81548161ffff021916908361ffff16021790555061267f565b8161ffff168160000160169054906101000a900461ffff1661ffff161161258c578060000160169054906101000a900461ffff1691505b818160000160168282829054906101000a900461ffff166125ad9190614219565b92506101000a81548161ffff021916908361ffff1602179055508181600001601a8282829054906101000a900461ffff166125e891906141e1565b92506101000a81548161ffff021916908361ffff1602179055508161ffff16600760149054906101000a900461ffff1661ffff1611612644576000600760146101000a81548161ffff021916908361ffff16021790555061267e565b81600760148282829054906101000a900461ffff166126639190614219565b92506101000a81548161ffff021916908361ffff1602179055505b5b50505050565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061274a575060066001815481106126ed576126ec613b80565b5b9060005260206000200160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612789576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278090613ce4565b60405180910390fd5b6127b4600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166129cd565b565b6000600682815481106127cc576127cb613b80565b5b9060005260206000200190503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461286a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286190614305565b60405180910390fd5b80600001601a9054906101000a900461ffff1661ffff16601411156128c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128bb906145b3565b60405180910390fd5b6128cd8361055d565b61290c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129039061461f565b60405180910390fd5b601481600001601a8282829054906101000a900461ffff1661292e9190614219565b92506101000a81548161ffff021916908361ffff16021790555060148160000160188282829054906101000a900461ffff1661296a91906141e1565b92506101000a81548161ffff021916908361ffff1602179055506014600360008282829054906101000a900461ffff166129a491906141e1565b92506101000a81548161ffff021916908361ffff1602179055506129c88383612d19565b505050565b60006103e861ffff169050600760169054906101000a900460ff16158015612a0957506000600760149054906101000a900461ffff1661ffff16115b15612a3157600760149054906101000a900461ffff1661ffff1681612a2e919061417e565b90505b60008147612a3f919061466e565b905060008060005b600680549050811015612c0c57600060068281548110612a6a57612a69613b80565b5b90600052602060002001600001601a9054906101000a900461ffff1661ffff161115612bf95760068181548110612aa457612aa3613b80565b5b90600052602060002001600001601a9054906101000a900461ffff1661ffff1684612acf919061469f565b915060068181548110612ae557612ae4613b80565b5b9060005260206000200160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051612b369061472a565b60006040518083038185875af1925050503d8060008114612b73576040519150601f19603f3d011682016040523d82523d6000602084013e612b78565b606091505b5050809350507fd61ed07f627a389ae7aac921770c8265a8a6f16009e151f08868b44f9f866e558360068381548110612bb457612bb3613b80565b5b9060005260206000200160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051612bf092919061473f565b60405180910390a15b8080612c0490614768565b915050612a47565b506000600760149054906101000a900461ffff1661ffff16118015612c3d5750600760169054906101000a900460ff165b15612d0a57600760149054906101000a900461ffff1661ffff1683612c62919061469f565b90508473ffffffffffffffffffffffffffffffffffffffff1681604051612c889061472a565b60006040518083038185875af1925050503d8060008114612cc5576040519150601f19603f3d011682016040523d82523d6000602084013e612cca565b606091505b5050809250507fd61ed07f627a389ae7aac921770c8265a8a6f16009e151f08868b44f9f866e558286604051612d0192919061473f565b60405180910390a15b612d12612e1e565b5050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050828160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081816001018190555060028054905081600201819055506002839080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b60028054905060045410612fd0577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ebb9190613b2a565b73ffffffffffffffffffffffffffffffffffffffff1663d0e30db0476040518263ffffffff1660e01b81526004016000604051808303818588803b158015612f0257600080fd5b505af1158015612f16573d6000803e3d6000fd5b5050505050612fb27f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fad9190613b2a565b613408565b600280549050600454612fc591906147b1565b600481905550613406565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561303d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130619190613b2a565b73ffffffffffffffffffffffffffffffffffffffff1663e6a4390560026004548154811061309257613091613b80565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167f00000000000000000000000000000000000000000000000000000000000000006040518363ffffffff1660e01b81526004016130fb929190613b57565b602060405180830381865afa158015613118573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061313c9190613b2a565b90506000600267ffffffffffffffff81111561315b5761315a613db2565b5b6040519080825280602002602001820160405280156131895781602001602082028036833780820191505090505b5090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061321b9190613b2a565b8160008151811061322f5761322e613b80565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060026004548154811061327f5761327e613b80565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106132be576132bd613b80565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b6f9de954760008486426040518663ffffffff1660e01b815260040161335994939291906147e2565b6000604051808303818588803b15801561337257600080fd5b505af1158015613386573d6000803e3d6000fd5b50505050508173ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156133d357600080fd5b505af11580156133e7573d6000803e3d6000fd5b50505050600460008154809291906133fe90614768565b919050555050505b565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613475573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134999190613b2a565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905837f00000000000000000000000000000000000000000000000000000000000000006040518363ffffffff1660e01b81526004016134f3929190613b57565b602060405180830381865afa158015613510573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135349190613b2a565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb828473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161358c9190613831565b602060405180830381865afa1580156135a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135cd9190613d19565b6040518363ffffffff1660e01b81526004016135ea929190613de1565b6020604051808303816000875af1158015613609573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061362d9190613e1f565b508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561367657600080fd5b505af115801561368a573d6000803e3d6000fd5b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006136c282613697565b9050919050565b6136d2816136b7565b81146136dd57600080fd5b50565b6000813590506136ef816136c9565b92915050565b60006020828403121561370b5761370a613692565b5b6000613719848285016136e0565b91505092915050565b61372b816136b7565b82525050565b6000819050919050565b61374481613731565b82525050565b600060608201905061375f6000830186613722565b61376c602083018561373b565b613779604083018461373b565b949350505050565b6000819050919050565b60006137a66137a161379c84613697565b613781565b613697565b9050919050565b60006137b88261378b565b9050919050565b60006137ca826137ad565b9050919050565b6137da816137bf565b82525050565b60006020820190506137f560008301846137d1565b92915050565b60008115159050919050565b613810816137fb565b82525050565b600060208201905061382b6000830184613807565b92915050565b60006020820190506138466000830184613722565b92915050565b613855816137fb565b811461386057600080fd5b50565b6000813590506138728161384c565b92915050565b6000806040838503121561388f5761388e613692565b5b600061389d858286016136e0565b92505060206138ae85828601613863565b9150509250929050565b6138c181613731565b81146138cc57600080fd5b50565b6000813590506138de816138b8565b92915050565b6000602082840312156138fa576138f9613692565b5b6000613908848285016138cf565b91505092915050565b600061ffff82169050919050565b61392881613911565b82525050565b600060a0820190506139436000830188613722565b613950602083018761391f565b61395d604083018661391f565b61396a606083018561391f565b613977608083018461391f565b9695505050505050565b6000602082019050613996600083018461391f565b92915050565b600080604083850312156139b3576139b2613692565b5b60006139c1858286016136e0565b92505060206139d2858286016138cf565b9150509250929050565b6139e581613911565b81146139f057600080fd5b50565b600081359050613a02816139dc565b92915050565b60008060008060808587031215613a2257613a21613692565b5b6000613a30878288016138cf565b9450506020613a41878288016139f3565b9350506040613a52878288016139f3565b9250506060613a6387828801613863565b91505092959194509250565b600060a082019050613a84600083018861391f565b613a91602083018761391f565b613a9e604083018661391f565b613aab606083018561391f565b613ab8608083018461391f565b9695505050505050565b600080600060608486031215613adb57613ada613692565b5b6000613ae9868287016138cf565b9350506020613afa86828701613863565b9250506040613b0b868287016139f3565b9150509250925092565b600081519050613b24816136c9565b92915050565b600060208284031215613b4057613b3f613692565b5b6000613b4e84828501613b15565b91505092915050565b6000604082019050613b6c6000830185613722565b613b796020830184613722565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082825260208201905092915050565b7f4572726f723a204e6f20656e7472790000000000000000000000000000000000600082015250565b6000613bf6600f83613baf565b9150613c0182613bc0565b602082019050919050565b60006020820190508181036000830152613c2581613be9565b9050919050565b7f43616e206e6f7420746f67676c652073656c6600000000000000000000000000600082015250565b6000613c62601383613baf565b9150613c6d82613c2c565b602082019050919050565b60006020820190508181036000830152613c9181613c55565b9050919050565b7f4e6f7420417070726f7665640000000000000000000000000000000000000000600082015250565b6000613cce600c83613baf565b9150613cd982613c98565b602082019050919050565b60006020820190508181036000830152613cfd81613cc1565b9050919050565b600081519050613d13816138b8565b92915050565b600060208284031215613d2f57613d2e613692565b5b6000613d3d84828501613d04565b91505092915050565b7f4e6f20746f6b656e7320746f207472616e736665720000000000000000000000600082015250565b6000613d7c601583613baf565b9150613d8782613d46565b602082019050919050565b60006020820190508181036000830152613dab81613d6f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000604082019050613df66000830185613722565b613e03602083018461373b565b9392505050565b600081519050613e198161384c565b92915050565b600060208284031215613e3557613e34613692565b5b6000613e4384828501613e0a565b91505092915050565b6000819050919050565b6000613e71613e6c613e6784613e4c565b613781565b613731565b9050919050565b613e8181613e56565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613ebc816136b7565b82525050565b6000613ece8383613eb3565b60208301905092915050565b6000602082019050919050565b6000613ef282613e87565b613efc8185613e92565b9350613f0783613ea3565b8060005b83811015613f38578151613f1f8882613ec2565b9750613f2a83613eda565b925050600181019050613f0b565b5085935050505092915050565b600060a082019050613f5a600083018861373b565b613f676020830187613e78565b8181036040830152613f798186613ee7565b9050613f886060830185613722565b613f95608083018461373b565b9695505050505050565b7f4c6f636174696f6e206f7574206f6620626f756e647300000000000000000000600082015250565b6000613fd5601683613baf565b9150613fe082613f9f565b602082019050919050565b6000602082019050818103600083015261400481613fc8565b9050919050565b7f546f6b656e20446f6573206e6f74206578697374000000000000000000000000600082015250565b6000614041601483613baf565b915061404c8261400b565b602082019050919050565b6000602082019050818103600083015261407081614034565b9050919050565b7f4e6f7420746f6b656e206c6f636174696f6e0000000000000000000000000000600082015250565b60006140ad601283613baf565b91506140b882614077565b602082019050919050565b600060208201905081810360008301526140dc816140a0565b9050919050565b7f4e6f7420617070726f7665640000000000000000000000000000000000000000600082015250565b6000614119600c83613baf565b9150614124826140e3565b602082019050919050565b600060208201905081810360008301526141488161410c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061418982613731565b915061419483613731565b9250828210156141a7576141a661414f565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60006141ec82613911565b91506141f783613911565b92508261ffff0382111561420e5761420d61414f565b5b828201905092915050565b600061422482613911565b915061422f83613911565b9250828210156142425761424161414f565b5b828203905092915050565b7f43616c6c6572204f7574206f6620426f756e6465727300000000000000000000600082015250565b6000614283601683613baf565b915061428e8261424d565b602082019050919050565b600060208201905081810360008301526142b281614276565b9050919050565b7f4e6f742055736572000000000000000000000000000000000000000000000000600082015250565b60006142ef600883613baf565b91506142fa826142b9565b602082019050919050565b6000602082019050818103600083015261431e816142e2565b9050919050565b7f4e6f7420656e6f75676820506f696e7473000000000000000000000000000000600082015250565b600061435b601183613baf565b915061436682614325565b602082019050919050565b6000602082019050818103600083015261438a8161434e565b9050919050565b7f7265636965766572206f7574206f6620626f756e647300000000000000000000600082015250565b60006143c7601683613baf565b91506143d282614391565b602082019050919050565b600060208201905081810360008301526143f6816143ba565b9050919050565b7f4d757374206265207265616c2061646472657373000000000000000000000000600082015250565b6000614433601483613baf565b915061443e826143fd565b602082019050919050565b6000602082019050818103600083015261446281614426565b9050919050565b7f55736572204f7574206f6620426f756e64657273000000000000000000000000600082015250565b600061449f601483613baf565b91506144aa82614469565b602082019050919050565b600060208201905081810360008301526144ce81614492565b9050919050565b7f4e65656420616e2061637475616c206e756d6265720000000000000000000000600082015250565b600061450b601583613baf565b9150614516826144d5565b602082019050919050565b6000602082019050818103600083015261453a816144fe565b9050919050565b7f5573657220646f6573206e6f74206861766520656e6f75676820746f2053706c60008201527f6974000000000000000000000000000000000000000000000000000000000000602082015250565b600061459d602283613baf565b91506145a882614541565b604082019050919050565b600060208201905081810360008301526145cc81614590565b9050919050565b7f43616e6e6f742061646420746f6b656e00000000000000000000000000000000600082015250565b6000614609601083613baf565b9150614614826145d3565b602082019050919050565b60006020820190508181036000830152614638816145fc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061467982613731565b915061468483613731565b9250826146945761469361463f565b5b828204905092915050565b60006146aa82613731565b91506146b583613731565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146ee576146ed61414f565b5b828202905092915050565b600081905092915050565b50565b60006147146000836146f9565b915061471f82614704565b600082019050919050565b600061473582614707565b9150819050919050565b60006040820190506147546000830185613807565b6147616020830184613722565b9392505050565b600061477382613731565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156147a6576147a561414f565b5b600182019050919050565b60006147bc82613731565b91506147c783613731565b9250826147d7576147d661463f565b5b828206905092915050565b60006080820190506147f76000830187613e78565b81810360208301526148098186613ee7565b90506148186040830185613722565b614825606083018461373b565b9594505050505056fea264697066735822122068576ec29bee13cec485a0e869b8f5372f4c92347ea47bbcce7ce6daa1606b0a64736f6c634300080a0033
Deployed Bytecode
0x60806040526004361061012e5760003560e01c80635fa7b584116100ab5780639b1f10451161006f5780639b1f1045146104035780639fa120d21461042c578063a3c4f5d21461045b578063c49fe43c14610486578063e4fc6b6d146104af578063fb0b645f146104c657610135565b80635fa7b584146103305780636e854c32146103595780638316d4331461038457806391ac094c146103ad578063958c8a2c146103d857610135565b806330d535dc116100f257806330d535dc146102355780634498b93714610276578063567142be146102b357806358a85bc6146102de578063594803281461030757610135565b806314c51afb1461013a5780631694505e14610179578063289420c1146101a45780632b8e5a3f146101e15780632ca635041461020c57610135565b3661013557005b600080fd5b34801561014657600080fd5b50610161600480360381019061015c91906136f5565b6104ef565b6040516101709392919061374a565b60405180910390f35b34801561018557600080fd5b5061018e610539565b60405161019b91906137e0565b60405180910390f35b3480156101b057600080fd5b506101cb60048036038101906101c691906136f5565b61055d565b6040516101d89190613816565b60405180910390f35b3480156101ed57600080fd5b506101f6610a95565b6040516102039190613831565b60405180910390f35b34801561021857600080fd5b50610233600480360381019061022e9190613878565b610b83565b005b34801561024157600080fd5b5061025c600480360381019061025791906138e4565b610d1f565b60405161026d95949392919061392e565b60405180910390f35b34801561028257600080fd5b5061029d600480360381019061029891906138e4565b610db9565b6040516102aa9190613831565b60405180910390f35b3480156102bf57600080fd5b506102c8610df8565b6040516102d59190613981565b60405180910390f35b3480156102ea57600080fd5b50610305600480360381019061030091906136f5565b610dfe565b005b34801561031357600080fd5b5061032e6004803603810190610329919061399c565b611510565b005b34801561033c57600080fd5b50610357600480360381019061035291906136f5565b6117ae565b005b34801561036557600080fd5b5061036e611c98565b60405161037b9190613816565b60405180910390f35b34801561039057600080fd5b506103ab60048036038101906103a69190613a08565b611cab565b005b3480156103b957600080fd5b506103c2611fd0565b6040516103cf9190613831565b60405180910390f35b3480156103e457600080fd5b506103ed611ff4565b6040516103fa9190613831565b60405180910390f35b34801561040f57600080fd5b5061042a60048036038101906104259190613878565b61201a565b005b34801561043857600080fd5b506104416121cc565b604051610452959493929190613a6f565b60405180910390f35b34801561046757600080fd5b5061047061230e565b60405161047d9190613981565b60405180910390f35b34801561049257600080fd5b506104ad60048036038101906104a89190613ac2565b612322565b005b3480156104bb57600080fd5b506104c4612685565b005b3480156104d257600080fd5b506104ed60048036038101906104e8919061399c565b6127b6565b005b60016020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154905083565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000807f00000000000000000000000064df3aab3b21cc275bb76c4a581cf8b726478ee073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141590508080156105ec5750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b90508080156106895750600073ffffffffffffffffffffffffffffffffffffffff16600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b905080801561075257507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107229190613b2a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b90508080156108b757507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107eb9190613b2a565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905847f00000000000000000000000064df3aab3b21cc275bb76c4a581cf8b726478ee06040518363ffffffff1660e01b8152600401610845929190613b57565b602060405180830381865afa158015610862573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108869190613b2a565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff1614155b9050808015610a8a57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561092c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109509190613b2a565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905847f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fb9190613b2a565b6040518363ffffffff1660e01b8152600401610a18929190613b57565b602060405180830381865afa158015610a35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a599190613b2a565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff1614155b905080915050919050565b60006002805490506004541015610aee57600260045481548110610abc57610abb613b80565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050610b80565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7d9190613b2a565b90505b90565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0690613c0c565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610c7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7590613c78565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167f235bc17e7930760029e9f4d860a2a8089976de5b381cf8380fc11c1d88a1113360405160405180910390a35050565b60068181548110610d2f57600080fd5b906000526020600020016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060000160149054906101000a900461ffff16908060000160169054906101000a900461ffff16908060000160189054906101000a900461ffff169080600001601a9054906101000a900461ffff16905085565b60028181548110610dc957600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6103e881565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680610ec357506006600181548110610e6657610e65613b80565b5b9060005260206000200160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610f02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef990613ce4565b60405180910390fd5b60018173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610f3d9190613831565b602060405180830381865afa158015610f5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7e9190613d19565b11610fbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb590613d92565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff167f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611041573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110659190613b2a565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905837f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111109190613b2a565b6040518363ffffffff1660e01b815260040161112d929190613b57565b602060405180830381865afa15801561114a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116e9190613b2a565b73ffffffffffffffffffffffffffffffffffffffff161461150d576000600267ffffffffffffffff8111156111a6576111a5613db2565b5b6040519080825280602002602001820160405280156111d45781602001602082028036833780820191505090505b50905081816000815181106111ec576111eb613b80565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611291573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b59190613b2a565b816001815181106112c9576112c8613b80565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508173ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b815260040161137e929190613de1565b6020604051808303816000875af115801561139d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c19190613e1f565b507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016114379190613831565b602060405180830381865afa158015611454573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114789190613d19565b60008430426040518663ffffffff1660e01b815260040161149d959493929190613f45565b600060405180830381600087803b1580156114b757600080fd5b505af11580156114cb573d6000803e3d6000fd5b5050505047670de0b6b3a7640000101561150b5761150a600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166129cd565b5b505b50565b6006805490508110611557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154e90613feb565b60405180910390fd5b6006818154811061156b5761156a613b80565b5b9060005260206000200160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611606576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fd90613ce4565b60405180910390fd5b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561174a576000600560006006848154811061167257611671613b80565b5b9060005260206000200160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b816006828154811061175f5761175e613b80565b5b9060005260206000200160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187c90614057565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1660028260020154815481106118b4576118b3613b80565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611935576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192c906140c3565b60405180910390fd5b6000600682600101548154811061194f5761194e613b80565b5b9060005260206000200190503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e49061412f565b60405180910390fd5b60006001600060026001600280549050611a07919061417e565b81548110611a1857611a17613b80565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166002846002015481548110611abc57611abb613b80565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550826002015481600201819055506002805480611b2357611b226141b2565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905560008360000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601482600001601a8282829054906101000a900461ffff16611bbe91906141e1565b92506101000a81548161ffff021916908361ffff16021790555060148260000160189054906101000a900461ffff1661ffff1611611c1b5760008260000160186101000a81548161ffff021916908361ffff160217905550611c58565b60148260000160188282829054906101000a900461ffff16611c3d9190614219565b92506101000a81548161ffff021916908361ffff1602179055505b6014600360008282829054906101000a900461ffff16611c789190614219565b92506101000a81548161ffff021916908361ffff16021790555050505050565b600760169054906101000a900460ff1681565b6006805490508410611cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce990614299565b60405180910390fd5b600060068581548110611d0857611d07613b80565b5b9060005260206000200190503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611da6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9d90614305565b60405180910390fd5b8361ffff1681600001601a9054906101000a900461ffff1661ffff161015611e03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfa90614371565b60405180910390fd5b8180611e1757506006805490508361ffff16105b611e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4d906143dd565b60405180910390fd5b838160000160148282829054906101000a900461ffff16611e779190614219565b92506101000a81548161ffff021916908361ffff1602179055508381600001601a8282829054906101000a900461ffff16611eb29190614219565b92506101000a81548161ffff021916908361ffff1602179055508115611f105783600360008282829054906101000a900461ffff16611ef191906141e1565b92506101000a81548161ffff021916908361ffff160217905550611fc9565b8360068461ffff1681548110611f2957611f28613b80565b5b9060005260206000200160000160148282829054906101000a900461ffff16611f5291906141e1565b92506101000a81548161ffff021916908361ffff1602179055508360068461ffff1681548110611f8557611f84613b80565b5b90600052602060002001600001601a8282829054906101000a900461ffff16611fae91906141e1565b92506101000a81548161ffff021916908361ffff1602179055505b5050505050565b7f00000000000000000000000064df3aab3b21cc275bb76c4a581cf8b726478ee081565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166120a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209d90613c0c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415806120e0575080155b61211f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211690614449565b60405180910390fd5b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760166101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f55a60f83ab22579cf63022cfbde52177977fa58a11efc503a267a3d229fb2dda826040516121c09190613816565b60405180910390a25050565b600080600080600060066000815481106121e9576121e8613b80565b5b90600052602060002001600001601a9054906101000a900461ffff169450600660018154811061221c5761221b613b80565b5b90600052602060002001600001601a9054906101000a900461ffff168461224391906141e1565b9350600660028154811061225a57612259613b80565b5b90600052602060002001600001601a9054906101000a900461ffff168461228191906141e1565b9350600360009054906101000a900461ffff1691506103e89050600760149054906101000a900461ffff169250600760169054906101000a900460ff161580156122df57506000600760149054906101000a900461ffff1661ffff16115b156123075760009250600760149054906101000a900461ffff16816123049190614219565b90505b9091929394565b600760149054906101000a900461ffff1681565b6006805490508310612369576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612360906144b5565b60405180910390fd5b60008161ffff16116123b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a790614521565b60405180910390fd5b6000600684815481106123c6576123c5613b80565b5b9060005260206000200190503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245b90614305565b60405180910390fd5b8215612555578161ffff1681600001601a9054906101000a900461ffff1661ffff16116124a15780600001601a9054906101000a900461ffff1691505b8181600001601a8282829054906101000a900461ffff166124c29190614219565b92506101000a81548161ffff021916908361ffff160217905550818160000160168282829054906101000a900461ffff166124fd91906141e1565b92506101000a81548161ffff021916908361ffff16021790555081600760148282829054906101000a900461ffff1661253691906141e1565b92506101000a81548161ffff021916908361ffff16021790555061267f565b8161ffff168160000160169054906101000a900461ffff1661ffff161161258c578060000160169054906101000a900461ffff1691505b818160000160168282829054906101000a900461ffff166125ad9190614219565b92506101000a81548161ffff021916908361ffff1602179055508181600001601a8282829054906101000a900461ffff166125e891906141e1565b92506101000a81548161ffff021916908361ffff1602179055508161ffff16600760149054906101000a900461ffff1661ffff1611612644576000600760146101000a81548161ffff021916908361ffff16021790555061267e565b81600760148282829054906101000a900461ffff166126639190614219565b92506101000a81548161ffff021916908361ffff1602179055505b5b50505050565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061274a575060066001815481106126ed576126ec613b80565b5b9060005260206000200160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612789576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278090613ce4565b60405180910390fd5b6127b4600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166129cd565b565b6000600682815481106127cc576127cb613b80565b5b9060005260206000200190503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461286a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286190614305565b60405180910390fd5b80600001601a9054906101000a900461ffff1661ffff16601411156128c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128bb906145b3565b60405180910390fd5b6128cd8361055d565b61290c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129039061461f565b60405180910390fd5b601481600001601a8282829054906101000a900461ffff1661292e9190614219565b92506101000a81548161ffff021916908361ffff16021790555060148160000160188282829054906101000a900461ffff1661296a91906141e1565b92506101000a81548161ffff021916908361ffff1602179055506014600360008282829054906101000a900461ffff166129a491906141e1565b92506101000a81548161ffff021916908361ffff1602179055506129c88383612d19565b505050565b60006103e861ffff169050600760169054906101000a900460ff16158015612a0957506000600760149054906101000a900461ffff1661ffff16115b15612a3157600760149054906101000a900461ffff1661ffff1681612a2e919061417e565b90505b60008147612a3f919061466e565b905060008060005b600680549050811015612c0c57600060068281548110612a6a57612a69613b80565b5b90600052602060002001600001601a9054906101000a900461ffff1661ffff161115612bf95760068181548110612aa457612aa3613b80565b5b90600052602060002001600001601a9054906101000a900461ffff1661ffff1684612acf919061469f565b915060068181548110612ae557612ae4613b80565b5b9060005260206000200160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051612b369061472a565b60006040518083038185875af1925050503d8060008114612b73576040519150601f19603f3d011682016040523d82523d6000602084013e612b78565b606091505b5050809350507fd61ed07f627a389ae7aac921770c8265a8a6f16009e151f08868b44f9f866e558360068381548110612bb457612bb3613b80565b5b9060005260206000200160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051612bf092919061473f565b60405180910390a15b8080612c0490614768565b915050612a47565b506000600760149054906101000a900461ffff1661ffff16118015612c3d5750600760169054906101000a900460ff165b15612d0a57600760149054906101000a900461ffff1661ffff1683612c62919061469f565b90508473ffffffffffffffffffffffffffffffffffffffff1681604051612c889061472a565b60006040518083038185875af1925050503d8060008114612cc5576040519150601f19603f3d011682016040523d82523d6000602084013e612cca565b606091505b5050809250507fd61ed07f627a389ae7aac921770c8265a8a6f16009e151f08868b44f9f866e558286604051612d0192919061473f565b60405180910390a15b612d12612e1e565b5050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050828160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081816001018190555060028054905081600201819055506002839080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b60028054905060045410612fd0577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ebb9190613b2a565b73ffffffffffffffffffffffffffffffffffffffff1663d0e30db0476040518263ffffffff1660e01b81526004016000604051808303818588803b158015612f0257600080fd5b505af1158015612f16573d6000803e3d6000fd5b5050505050612fb27f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fad9190613b2a565b613408565b600280549050600454612fc591906147b1565b600481905550613406565b60007f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561303d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130619190613b2a565b73ffffffffffffffffffffffffffffffffffffffff1663e6a4390560026004548154811061309257613091613b80565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167f00000000000000000000000064df3aab3b21cc275bb76c4a581cf8b726478ee06040518363ffffffff1660e01b81526004016130fb929190613b57565b602060405180830381865afa158015613118573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061313c9190613b2a565b90506000600267ffffffffffffffff81111561315b5761315a613db2565b5b6040519080825280602002602001820160405280156131895781602001602082028036833780820191505090505b5090507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061321b9190613b2a565b8160008151811061322f5761322e613b80565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060026004548154811061327f5761327e613b80565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106132be576132bd613b80565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663b6f9de954760008486426040518663ffffffff1660e01b815260040161335994939291906147e2565b6000604051808303818588803b15801561337257600080fd5b505af1158015613386573d6000803e3d6000fd5b50505050508173ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156133d357600080fd5b505af11580156133e7573d6000803e3d6000fd5b50505050600460008154809291906133fe90614768565b919050555050505b565b60007f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613475573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134999190613b2a565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905837f00000000000000000000000064df3aab3b21cc275bb76c4a581cf8b726478ee06040518363ffffffff1660e01b81526004016134f3929190613b57565b602060405180830381865afa158015613510573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135349190613b2a565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb828473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161358c9190613831565b602060405180830381865afa1580156135a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135cd9190613d19565b6040518363ffffffff1660e01b81526004016135ea929190613de1565b6020604051808303816000875af1158015613609573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061362d9190613e1f565b508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561367657600080fd5b505af115801561368a573d6000803e3d6000fd5b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006136c282613697565b9050919050565b6136d2816136b7565b81146136dd57600080fd5b50565b6000813590506136ef816136c9565b92915050565b60006020828403121561370b5761370a613692565b5b6000613719848285016136e0565b91505092915050565b61372b816136b7565b82525050565b6000819050919050565b61374481613731565b82525050565b600060608201905061375f6000830186613722565b61376c602083018561373b565b613779604083018461373b565b949350505050565b6000819050919050565b60006137a66137a161379c84613697565b613781565b613697565b9050919050565b60006137b88261378b565b9050919050565b60006137ca826137ad565b9050919050565b6137da816137bf565b82525050565b60006020820190506137f560008301846137d1565b92915050565b60008115159050919050565b613810816137fb565b82525050565b600060208201905061382b6000830184613807565b92915050565b60006020820190506138466000830184613722565b92915050565b613855816137fb565b811461386057600080fd5b50565b6000813590506138728161384c565b92915050565b6000806040838503121561388f5761388e613692565b5b600061389d858286016136e0565b92505060206138ae85828601613863565b9150509250929050565b6138c181613731565b81146138cc57600080fd5b50565b6000813590506138de816138b8565b92915050565b6000602082840312156138fa576138f9613692565b5b6000613908848285016138cf565b91505092915050565b600061ffff82169050919050565b61392881613911565b82525050565b600060a0820190506139436000830188613722565b613950602083018761391f565b61395d604083018661391f565b61396a606083018561391f565b613977608083018461391f565b9695505050505050565b6000602082019050613996600083018461391f565b92915050565b600080604083850312156139b3576139b2613692565b5b60006139c1858286016136e0565b92505060206139d2858286016138cf565b9150509250929050565b6139e581613911565b81146139f057600080fd5b50565b600081359050613a02816139dc565b92915050565b60008060008060808587031215613a2257613a21613692565b5b6000613a30878288016138cf565b9450506020613a41878288016139f3565b9350506040613a52878288016139f3565b9250506060613a6387828801613863565b91505092959194509250565b600060a082019050613a84600083018861391f565b613a91602083018761391f565b613a9e604083018661391f565b613aab606083018561391f565b613ab8608083018461391f565b9695505050505050565b600080600060608486031215613adb57613ada613692565b5b6000613ae9868287016138cf565b9350506020613afa86828701613863565b9250506040613b0b868287016139f3565b9150509250925092565b600081519050613b24816136c9565b92915050565b600060208284031215613b4057613b3f613692565b5b6000613b4e84828501613b15565b91505092915050565b6000604082019050613b6c6000830185613722565b613b796020830184613722565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082825260208201905092915050565b7f4572726f723a204e6f20656e7472790000000000000000000000000000000000600082015250565b6000613bf6600f83613baf565b9150613c0182613bc0565b602082019050919050565b60006020820190508181036000830152613c2581613be9565b9050919050565b7f43616e206e6f7420746f67676c652073656c6600000000000000000000000000600082015250565b6000613c62601383613baf565b9150613c6d82613c2c565b602082019050919050565b60006020820190508181036000830152613c9181613c55565b9050919050565b7f4e6f7420417070726f7665640000000000000000000000000000000000000000600082015250565b6000613cce600c83613baf565b9150613cd982613c98565b602082019050919050565b60006020820190508181036000830152613cfd81613cc1565b9050919050565b600081519050613d13816138b8565b92915050565b600060208284031215613d2f57613d2e613692565b5b6000613d3d84828501613d04565b91505092915050565b7f4e6f20746f6b656e7320746f207472616e736665720000000000000000000000600082015250565b6000613d7c601583613baf565b9150613d8782613d46565b602082019050919050565b60006020820190508181036000830152613dab81613d6f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000604082019050613df66000830185613722565b613e03602083018461373b565b9392505050565b600081519050613e198161384c565b92915050565b600060208284031215613e3557613e34613692565b5b6000613e4384828501613e0a565b91505092915050565b6000819050919050565b6000613e71613e6c613e6784613e4c565b613781565b613731565b9050919050565b613e8181613e56565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613ebc816136b7565b82525050565b6000613ece8383613eb3565b60208301905092915050565b6000602082019050919050565b6000613ef282613e87565b613efc8185613e92565b9350613f0783613ea3565b8060005b83811015613f38578151613f1f8882613ec2565b9750613f2a83613eda565b925050600181019050613f0b565b5085935050505092915050565b600060a082019050613f5a600083018861373b565b613f676020830187613e78565b8181036040830152613f798186613ee7565b9050613f886060830185613722565b613f95608083018461373b565b9695505050505050565b7f4c6f636174696f6e206f7574206f6620626f756e647300000000000000000000600082015250565b6000613fd5601683613baf565b9150613fe082613f9f565b602082019050919050565b6000602082019050818103600083015261400481613fc8565b9050919050565b7f546f6b656e20446f6573206e6f74206578697374000000000000000000000000600082015250565b6000614041601483613baf565b915061404c8261400b565b602082019050919050565b6000602082019050818103600083015261407081614034565b9050919050565b7f4e6f7420746f6b656e206c6f636174696f6e0000000000000000000000000000600082015250565b60006140ad601283613baf565b91506140b882614077565b602082019050919050565b600060208201905081810360008301526140dc816140a0565b9050919050565b7f4e6f7420617070726f7665640000000000000000000000000000000000000000600082015250565b6000614119600c83613baf565b9150614124826140e3565b602082019050919050565b600060208201905081810360008301526141488161410c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061418982613731565b915061419483613731565b9250828210156141a7576141a661414f565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60006141ec82613911565b91506141f783613911565b92508261ffff0382111561420e5761420d61414f565b5b828201905092915050565b600061422482613911565b915061422f83613911565b9250828210156142425761424161414f565b5b828203905092915050565b7f43616c6c6572204f7574206f6620426f756e6465727300000000000000000000600082015250565b6000614283601683613baf565b915061428e8261424d565b602082019050919050565b600060208201905081810360008301526142b281614276565b9050919050565b7f4e6f742055736572000000000000000000000000000000000000000000000000600082015250565b60006142ef600883613baf565b91506142fa826142b9565b602082019050919050565b6000602082019050818103600083015261431e816142e2565b9050919050565b7f4e6f7420656e6f75676820506f696e7473000000000000000000000000000000600082015250565b600061435b601183613baf565b915061436682614325565b602082019050919050565b6000602082019050818103600083015261438a8161434e565b9050919050565b7f7265636965766572206f7574206f6620626f756e647300000000000000000000600082015250565b60006143c7601683613baf565b91506143d282614391565b602082019050919050565b600060208201905081810360008301526143f6816143ba565b9050919050565b7f4d757374206265207265616c2061646472657373000000000000000000000000600082015250565b6000614433601483613baf565b915061443e826143fd565b602082019050919050565b6000602082019050818103600083015261446281614426565b9050919050565b7f55736572204f7574206f6620426f756e64657273000000000000000000000000600082015250565b600061449f601483613baf565b91506144aa82614469565b602082019050919050565b600060208201905081810360008301526144ce81614492565b9050919050565b7f4e65656420616e2061637475616c206e756d6265720000000000000000000000600082015250565b600061450b601583613baf565b9150614516826144d5565b602082019050919050565b6000602082019050818103600083015261453a816144fe565b9050919050565b7f5573657220646f6573206e6f74206861766520656e6f75676820746f2053706c60008201527f6974000000000000000000000000000000000000000000000000000000000000602082015250565b600061459d602283613baf565b91506145a882614541565b604082019050919050565b600060208201905081810360008301526145cc81614590565b9050919050565b7f43616e6e6f742061646420746f6b656e00000000000000000000000000000000600082015250565b6000614609601083613baf565b9150614614826145d3565b602082019050919050565b60006020820190508181036000830152614638816145fc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061467982613731565b915061468483613731565b9250826146945761469361463f565b5b828204905092915050565b60006146aa82613731565b91506146b583613731565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146ee576146ed61414f565b5b828202905092915050565b600081905092915050565b50565b60006147146000836146f9565b915061471f82614704565b600082019050919050565b600061473582614707565b9150819050919050565b60006040820190506147546000830185613807565b6147616020830184613722565b9392505050565b600061477382613731565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156147a6576147a561414f565b5b600182019050919050565b60006147bc82613731565b91506147c783613731565b9250826147d7576147d661463f565b5b828206905092915050565b60006080820190506147f76000830187613e78565b81810360208301526148098186613ee7565b90506148186040830185613722565b614825606083018461373b565b9594505050505056fea264697066735822122068576ec29bee13cec485a0e869b8f5372f4c92347ea47bbcce7ce6daa1606b0a64736f6c634300080a0033
Deployed Bytecode Sourcemap
18251:13185:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18896:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;19313:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22122:638;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31208:225;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21190:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19075:25;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;18953:29;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19259:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28094:969;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20449:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23305:758;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19224:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29738:762;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19109:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19153:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25712:280;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30613:552;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;19190:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24637:889;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24169:163;;;;;;;;;;;;;:::i;:::-;;21560:453;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18896:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19313:51::-;;;:::o;22122:638::-;22172:4;22188:10;22210:12;22201:21;;:5;:21;;;;22188:34;;22261:5;:28;;;;;22287:1;22270:19;;:5;:19;;;;22261:28;22253:36;;22319:5;:47;;;;;22364:1;22328:38;;:11;:18;22340:5;22328:18;;;;;;;;;;;;;;;:24;;;;;;;;;;;;:38;;;22319:47;22311:55;;22398:5;:40;;;;;22416:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22407:31;;:5;:31;;;;22398:40;22389:50;;22471:5;:96;;;;;22512:15;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22494:52;;;22547:5;22554:12;22494:73;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22480:87;;22488:1;22480:87;;;;22471:96;22462:106;;22601:5;:106;;;;;22642:15;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22624:52;;;22677:5;22684:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22624:83;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22610:97;;22618:1;22610:97;;;;22601:106;22592:116;;22745:5;22738:12;;;22122:638;;;:::o;31208:225::-;31253:13;31291:12;:19;;;;31283:5;;:27;31280:146;;;31334:12;31347:5;;31334:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31326:27;;31280:146;;;31392:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31384:30;;31280:146;31208:225;:::o;21190:218::-;20964:5;:17;20970:10;20964:17;;;;;;;;;;;;;;;;;;;;;;;;;20956:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;21289:8:::1;21275:22;;:10;:22;;;;21267:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;21350:5;21332;:15;21338:8;21332:15;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;21394:5;21371:29;;21384:8;21371:29;;;;;;;;;;;;21190:218:::0;;:::o;19075:25::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18953:29::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19259:41::-;19296:4;19259:41;:::o;28094:969::-;28151:5;:17;28157:10;28151:17;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;28186:8;28195:1;28186:11;;;;;;;;:::i;:::-;;;;;;;;;:16;;;;;;;;;;;;28172:30;;:10;:30;;;28151:51;28143:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28279:1;28245:5;28238:23;;;28270:4;28238:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:42;28230:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28415:1;28320:97;;28338:15;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28320:52;;;28373:5;28380:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28320:83;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:97;;;28317:736;;28433:21;28471:1;28457:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28433:40;;28498:5;28488:4;28493:1;28488:7;;;;;;;;:::i;:::-;;;;;;;:15;;;;;;;;;;;28528;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28518:4;28523:1;28518:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28572:5;28565:21;;;28595:15;28613:17;28565:66;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28646:15;:66;;;28738:5;28731:23;;;28763:4;28731:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28788:1;28836:4;28867;28891:15;28646:275;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28949:21;28939:7;:31;28936:98;;;28990:28;29002:15;;;;;;;;;;;28990:11;:28::i;:::-;28936:98;28418:635;28317:736;28094:969;:::o;20449:411::-;20549:8;:15;;;;20534:12;:30;20526:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;20624:8;20633:12;20624:22;;;;;;;;:::i;:::-;;;;;;;;;:27;;;;;;;;;;;;20610:41;;:10;:41;;;20602:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;20682:5;:17;20688:10;20682:17;;;;;;;;;;;;;;;;;;;;;;;;;20679:126;;;20752:5;20715;:34;20721:8;20730:12;20721:22;;;;;;;;:::i;:::-;;;;;;;;;:27;;;;;;;;;;;;20715:34;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;20789:4;20772:5;:14;20778:7;20772:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;20679:126;20845:7;20815:8;20824:12;20815:22;;;;;;;;:::i;:::-;;;;;;;;;:27;;;:37;;;;;;;;;;;;;;;;;;20449:411;;:::o;23305:758::-;23361:22;23386:11;:18;23398:5;23386:18;;;;;;;;;;;;;;;23361:43;;23443:1;23423:22;;:2;:8;;;;;;;;;;;;:22;;;;23415:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;23518:5;23489:34;;:12;23502:2;:11;;;23489:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:34;;;23481:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;23557:20;23580:8;23589:2;:10;;;23580:20;;;;;;;;:::i;:::-;;;;;;;;;23557:43;;23632:10;23619:23;;:4;:9;;;;;;;;;;;;:23;;;23611:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;23680:22;23705:11;:48;23717:12;23750:1;23730:12;:19;;;;:21;;;;:::i;:::-;23717:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23705:48;;;;;;;;;;;;;;;23680:73;;23792:2;:8;;;;;;;;;;;;23764:12;23777:2;:11;;;23764:25;;;;;;;;:::i;:::-;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;23825:2;:11;;;23811:2;:11;;:25;;;;23847:12;:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;23895:1;23876:2;:8;;;:21;;;;;;;;;;;;;;;;;;23931:2;23910:4;:18;;;:23;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23966:2;23947:4;:16;;;;;;;;;;;;:21;;;23944:85;;23988:1;23970:4;:16;;;:19;;;;;;;;;;;;;;;;;;23944:85;;;24025:2;24006:4;:16;;;:21;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23944:85;24053:2;24039:11;;:16;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23350:713;;;23305:758;:::o;19224:26::-;;;;;;;;;;;;;:::o;29738:762::-;29891:8;:15;;;;29874:14;:32;29866:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29944:20;29967:8;29976:14;29967:24;;;;;;;;:::i;:::-;;;;;;;;;29944:47;;30023:10;30010:23;;:4;:9;;;;;;;;;;;;:23;;;30002:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;30087:6;30065:28;;:4;:18;;;;;;;;;;;;:28;;;;30057:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30134:12;:50;;;;30169:8;:15;;;;30150:16;:34;;;30134:50;30126:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30236:6;30222:4;:10;;;:20;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30275:6;30253:4;:18;;;:28;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30295:12;30292:201;;;30337:6;30323:11;;:20;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30292:201;;;30410:6;30374:8;30383:16;30374:26;;;;;;;;;;:::i;:::-;;;;;;;;;:32;;;:42;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30475:6;30431:8;30440:16;30431:26;;;;;;;;;;:::i;:::-;;;;;;;;;:40;;;:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30292:201;29855:645;29738:762;;;;:::o;19109:37::-;;;:::o;19153:30::-;;;;;;;;;;;;;:::o;25712:280::-;20964:5;:17;20970:10;20964:17;;;;;;;;;;;;;;;;;;;;;;;;;20956:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;25828:1:::1;25807:23;;:9;:23;;;;:33;;;;25835:5;25834:6;25807:33;25799:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;25894:9;25876:15;;:27;;;;;;;;;;;;;;;;;;25931:5;25914:14;;:22;;;;;;;;;;;;;;;;;;25967:9;25952:32;;;25978:5;25952:32;;;;;;:::i;:::-;;;;;;;;25712:280:::0;;:::o;30613:552::-;30656:22;30680:16;30698:21;30721:19;30742:15;30789:8;30798:1;30789:11;;;;;;;;:::i;:::-;;;;;;;;;:25;;;;;;;;;;;;30771:43;;30838:8;30847:1;30838:11;;;;;;;;:::i;:::-;;;;;;;;;:25;;;;;;;;;;;;30825:38;;;;;:::i;:::-;;;30887:8;30896:1;30887:11;;;;;;;;:::i;:::-;;;;;;;;;:25;;;;;;;;;;;;30874:38;;;;;:::i;:::-;;;30938:11;;;;;;;;;;;30923:26;;19296:4;30960:22;;31010:13;;;;;;;;;;;30993:30;;31038:14;;;;;;;;;;;31037:15;:36;;;;;31072:1;31056:13;;;;;;;;;;;:17;;;31037:36;31034:124;;;31105:1;31089:17;;31133:13;;;;;;;;;;;31121:25;;;;;:::i;:::-;;;31034:124;30613:552;;;;;:::o;19190:27::-;;;;;;;;;;;;;:::o;24637:889::-;24777:8;:15;;;;24762:12;:30;24754:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;24845:1;24836:6;:10;;;24828:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;24883:20;24906:8;24915:12;24906:22;;;;;;;;:::i;:::-;;;;;;;;;24883:45;;24960:10;24947:23;;:4;:9;;;;;;;;;;;;:23;;;24939:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;24997:28;24994:525;;;25066:6;25044:28;;:4;:18;;;;;;;;;;;;:28;;;25041:62;;25083:4;:18;;;;;;;;;;;;25074:27;;25041:62;25139:6;25117:4;:18;;;:28;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25182:6;25160:4;:18;;;:28;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25220:6;25203:13;;:23;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;24994:525;;;25282:6;25260:28;;:4;:18;;;;;;;;;;;;:28;;;25257:62;;25299:4;:18;;;;;;;;;;;;25290:27;;25257:62;25355:6;25333:4;:18;;;:28;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25398:6;25376:4;:18;;;:28;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25437:6;25422:21;;:13;;;;;;;;;;;:21;;;25419:89;;25461:1;25445:13;;:17;;;;;;;;;;;;;;;;;;25419:89;;;25500:6;25483:13;;:23;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25419:89;24994:525;24743:783;24637:889;;;:::o;24169:163::-;24217:5;:17;24223:10;24217:17;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;24252:8;24261:1;24252:11;;;;;;;;:::i;:::-;;;;;;;;;:16;;;;;;;;;;;;24238:30;;:10;:30;;;24217:51;24209:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;24296:28;24308:15;;;;;;;;;;;24296:11;:28::i;:::-;24169:163::o;21560:453::-;21637:20;21660:8;21669:12;21660:22;;;;;;;;:::i;:::-;;;;;;;;;21637:45;;21714:10;21701:23;;:4;:9;;;;;;;;;;;;:23;;;21693:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;21762:4;:18;;;;;;;;;;;;21756:24;;:2;:24;;21748:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;21838:13;21845:5;21838:6;:13::i;:::-;21830:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;21904:2;21883:4;:18;;;:23;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21936:2;21917:4;:16;;;:21;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21963:2;21949:11;;:16;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21976:29;21985:5;21992:12;21976:8;:29::i;:::-;21626:387;21560:453;;:::o;26125:964::-;26183:13;19296:4;26183:26;;;;26224:14;;;;;;;;;;;26223:15;:35;;;;;26257:1;26242:13;;;;;;;;;;;:16;;;26223:35;26220:181;;;26283:13;;;;;;;;;;;26274:22;;;;;;;:::i;:::-;;;26220:181;26411:15;26451:5;26429:21;:27;;;;:::i;:::-;26411:45;;26468:12;26491:14;26520:9;26516:321;26538:8;:15;;;;26534:1;:19;26516:321;;;26605:1;26577:8;26586:1;26577:11;;;;;;;;:::i;:::-;;;;;;;;;:25;;;;;;;;;;;;:29;;;26574:252;;;26645:8;26654:1;26645:11;;;;;;;;:::i;:::-;;;;;;;;;:25;;;;;;;;;;;;26635:35;;:7;:35;;;;:::i;:::-;26626:44;;26711:8;26720:1;26711:11;;;;;;;;:::i;:::-;;;;;;;;;:16;;;;;;;;;;;;26703:30;;26741:6;26703:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26689:63;;;;;26776:34;26784:7;26793:8;26802:1;26793:11;;;;;;;;:::i;:::-;;;;;;;;;:16;;;;;;;;;;;;26776:34;;;;;;;:::i;:::-;;;;;;;;26574:252;26555:3;;;;;:::i;:::-;;;;26516:321;;;;26866:1;26850:13;;;;;;;;;;;:17;;;:35;;;;;26871:14;;;;;;;;;;;26850:35;26847:216;;;26920:13;;;;;;;;;;;26910:23;;:7;:23;;;;:::i;:::-;26901:32;;26970:8;26962:22;;26992:6;26962:41;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26948:55;;;;;27023:26;27031:7;27040:8;27023:26;;;;;;;:::i;:::-;;;;;;;;26847:216;27073:8;:6;:8::i;:::-;26172:917;;;;26125:964;:::o;22923:254::-;22990:21;23014:11;:18;23026:5;23014:18;;;;;;;;;;;;;;;22990:42;;23053:5;23043:1;:7;;;:15;;;;;;;;;;;;;;;;;;23081:8;23069:1;:9;;:20;;;;23113:12;:19;;;;23100:1;:10;;:32;;;;23143:12;23161:5;23143:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22979:198;22923:254;;:::o;27149:815::-;27197:12;:19;;;;27188:5;;:28;27185:772;;27301:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27295:37;;;27340:21;27295:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27379:36;27392:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27379:12;:36::i;:::-;27446:12;:19;;;;27438:5;;:27;;;;:::i;:::-;27430:5;:35;;;;27185:772;;;27496:10;27527:15;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27509:52;;;27562:12;27575:5;;27562:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27583:12;27509:87;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27496:100;;27611:21;27649:1;27635:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27611:40;;27676:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27666:4;27671:1;27666:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27723:12;27736:5;;27723:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27713:4;27718:1;27713:7;;;;;;;;:::i;:::-;;;;;;;:29;;;;;;;;;;;27757:15;:66;;;27831:21;27854:1;27857:4;27863:2;27867:15;27757:126;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27913:2;27898:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27938:5;;:7;;;;;;;;;:::i;:::-;;;;;;27481:476;;27185:772;27149:815::o;29207:263::-;29263:10;29294:15;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29276:52;;;29329:5;29336:12;29276:73;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29263:86;;29367:5;29360:22;;;29383:2;29394:5;29387:23;;;29419:4;29387:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29360:66;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29452:2;29437:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29252:218;29207:263;:::o;88:117:1:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:118::-;1263:24;1281:5;1263:24;:::i;:::-;1258:3;1251:37;1176:118;;:::o;1300:77::-;1337:7;1366:5;1355:16;;1300:77;;;:::o;1383:118::-;1470:24;1488:5;1470:24;:::i;:::-;1465:3;1458:37;1383:118;;:::o;1507:442::-;1656:4;1694:2;1683:9;1679:18;1671:26;;1707:71;1775:1;1764:9;1760:17;1751:6;1707:71;:::i;:::-;1788:72;1856:2;1845:9;1841:18;1832:6;1788:72;:::i;:::-;1870;1938:2;1927:9;1923:18;1914:6;1870:72;:::i;:::-;1507:442;;;;;;:::o;1955:60::-;1983:3;2004:5;1997:12;;1955:60;;;:::o;2021:142::-;2071:9;2104:53;2122:34;2131:24;2149:5;2131:24;:::i;:::-;2122:34;:::i;:::-;2104:53;:::i;:::-;2091:66;;2021:142;;;:::o;2169:126::-;2219:9;2252:37;2283:5;2252:37;:::i;:::-;2239:50;;2169:126;;;:::o;2301:152::-;2377:9;2410:37;2441:5;2410:37;:::i;:::-;2397:50;;2301:152;;;:::o;2459:183::-;2572:63;2629:5;2572:63;:::i;:::-;2567:3;2560:76;2459:183;;:::o;2648:274::-;2767:4;2805:2;2794:9;2790:18;2782:26;;2818:97;2912:1;2901:9;2897:17;2888:6;2818:97;:::i;:::-;2648:274;;;;:::o;2928:90::-;2962:7;3005:5;2998:13;2991:21;2980:32;;2928:90;;;:::o;3024:109::-;3105:21;3120:5;3105:21;:::i;:::-;3100:3;3093:34;3024:109;;:::o;3139:210::-;3226:4;3264:2;3253:9;3249:18;3241:26;;3277:65;3339:1;3328:9;3324:17;3315:6;3277:65;:::i;:::-;3139:210;;;;:::o;3355:222::-;3448:4;3486:2;3475:9;3471:18;3463:26;;3499:71;3567:1;3556:9;3552:17;3543:6;3499:71;:::i;:::-;3355:222;;;;:::o;3583:116::-;3653:21;3668:5;3653:21;:::i;:::-;3646:5;3643:32;3633:60;;3689:1;3686;3679:12;3633:60;3583:116;:::o;3705:133::-;3748:5;3786:6;3773:20;3764:29;;3802:30;3826:5;3802:30;:::i;:::-;3705:133;;;;:::o;3844:468::-;3909:6;3917;3966:2;3954:9;3945:7;3941:23;3937:32;3934:119;;;3972:79;;:::i;:::-;3934:119;4092:1;4117:53;4162:7;4153:6;4142:9;4138:22;4117:53;:::i;:::-;4107:63;;4063:117;4219:2;4245:50;4287:7;4278:6;4267:9;4263:22;4245:50;:::i;:::-;4235:60;;4190:115;3844:468;;;;;:::o;4318:122::-;4391:24;4409:5;4391:24;:::i;:::-;4384:5;4381:35;4371:63;;4430:1;4427;4420:12;4371:63;4318:122;:::o;4446:139::-;4492:5;4530:6;4517:20;4508:29;;4546:33;4573:5;4546:33;:::i;:::-;4446:139;;;;:::o;4591:329::-;4650:6;4699:2;4687:9;4678:7;4674:23;4670:32;4667:119;;;4705:79;;:::i;:::-;4667:119;4825:1;4850:53;4895:7;4886:6;4875:9;4871:22;4850:53;:::i;:::-;4840:63;;4796:117;4591:329;;;;:::o;4926:89::-;4962:7;5002:6;4995:5;4991:18;4980:29;;4926:89;;;:::o;5021:115::-;5106:23;5123:5;5106:23;:::i;:::-;5101:3;5094:36;5021:115;;:::o;5142:648::-;5339:4;5377:3;5366:9;5362:19;5354:27;;5391:71;5459:1;5448:9;5444:17;5435:6;5391:71;:::i;:::-;5472:70;5538:2;5527:9;5523:18;5514:6;5472:70;:::i;:::-;5552;5618:2;5607:9;5603:18;5594:6;5552:70;:::i;:::-;5632;5698:2;5687:9;5683:18;5674:6;5632:70;:::i;:::-;5712:71;5778:3;5767:9;5763:19;5754:6;5712:71;:::i;:::-;5142:648;;;;;;;;:::o;5796:218::-;5887:4;5925:2;5914:9;5910:18;5902:26;;5938:69;6004:1;5993:9;5989:17;5980:6;5938:69;:::i;:::-;5796:218;;;;:::o;6020:474::-;6088:6;6096;6145:2;6133:9;6124:7;6120:23;6116:32;6113:119;;;6151:79;;:::i;:::-;6113:119;6271:1;6296:53;6341:7;6332:6;6321:9;6317:22;6296:53;:::i;:::-;6286:63;;6242:117;6398:2;6424:53;6469:7;6460:6;6449:9;6445:22;6424:53;:::i;:::-;6414:63;;6369:118;6020:474;;;;;:::o;6500:120::-;6572:23;6589:5;6572:23;:::i;:::-;6565:5;6562:34;6552:62;;6610:1;6607;6600:12;6552:62;6500:120;:::o;6626:137::-;6671:5;6709:6;6696:20;6687:29;;6725:32;6751:5;6725:32;:::i;:::-;6626:137;;;;:::o;6769:755::-;6850:6;6858;6866;6874;6923:3;6911:9;6902:7;6898:23;6894:33;6891:120;;;6930:79;;:::i;:::-;6891:120;7050:1;7075:53;7120:7;7111:6;7100:9;7096:22;7075:53;:::i;:::-;7065:63;;7021:117;7177:2;7203:52;7247:7;7238:6;7227:9;7223:22;7203:52;:::i;:::-;7193:62;;7148:117;7304:2;7330:52;7374:7;7365:6;7354:9;7350:22;7330:52;:::i;:::-;7320:62;;7275:117;7431:2;7457:50;7499:7;7490:6;7479:9;7475:22;7457:50;:::i;:::-;7447:60;;7402:115;6769:755;;;;;;;:::o;7530:644::-;7725:4;7763:3;7752:9;7748:19;7740:27;;7777:69;7843:1;7832:9;7828:17;7819:6;7777:69;:::i;:::-;7856:70;7922:2;7911:9;7907:18;7898:6;7856:70;:::i;:::-;7936;8002:2;7991:9;7987:18;7978:6;7936:70;:::i;:::-;8016;8082:2;8071:9;8067:18;8058:6;8016:70;:::i;:::-;8096:71;8162:3;8151:9;8147:19;8138:6;8096:71;:::i;:::-;7530:644;;;;;;;;:::o;8180:611::-;8253:6;8261;8269;8318:2;8306:9;8297:7;8293:23;8289:32;8286:119;;;8324:79;;:::i;:::-;8286:119;8444:1;8469:53;8514:7;8505:6;8494:9;8490:22;8469:53;:::i;:::-;8459:63;;8415:117;8571:2;8597:50;8639:7;8630:6;8619:9;8615:22;8597:50;:::i;:::-;8587:60;;8542:115;8696:2;8722:52;8766:7;8757:6;8746:9;8742:22;8722:52;:::i;:::-;8712:62;;8667:117;8180:611;;;;;:::o;8797:143::-;8854:5;8885:6;8879:13;8870:22;;8901:33;8928:5;8901:33;:::i;:::-;8797:143;;;;:::o;8946:351::-;9016:6;9065:2;9053:9;9044:7;9040:23;9036:32;9033:119;;;9071:79;;:::i;:::-;9033:119;9191:1;9216:64;9272:7;9263:6;9252:9;9248:22;9216:64;:::i;:::-;9206:74;;9162:128;8946:351;;;;:::o;9303:332::-;9424:4;9462:2;9451:9;9447:18;9439:26;;9475:71;9543:1;9532:9;9528:17;9519:6;9475:71;:::i;:::-;9556:72;9624:2;9613:9;9609:18;9600:6;9556:72;:::i;:::-;9303:332;;;;;:::o;9641:180::-;9689:77;9686:1;9679:88;9786:4;9783:1;9776:15;9810:4;9807:1;9800:15;9827:169;9911:11;9945:6;9940:3;9933:19;9985:4;9980:3;9976:14;9961:29;;9827:169;;;;:::o;10002:165::-;10142:17;10138:1;10130:6;10126:14;10119:41;10002:165;:::o;10173:366::-;10315:3;10336:67;10400:2;10395:3;10336:67;:::i;:::-;10329:74;;10412:93;10501:3;10412:93;:::i;:::-;10530:2;10525:3;10521:12;10514:19;;10173:366;;;:::o;10545:419::-;10711:4;10749:2;10738:9;10734:18;10726:26;;10798:9;10792:4;10788:20;10784:1;10773:9;10769:17;10762:47;10826:131;10952:4;10826:131;:::i;:::-;10818:139;;10545:419;;;:::o;10970:169::-;11110:21;11106:1;11098:6;11094:14;11087:45;10970:169;:::o;11145:366::-;11287:3;11308:67;11372:2;11367:3;11308:67;:::i;:::-;11301:74;;11384:93;11473:3;11384:93;:::i;:::-;11502:2;11497:3;11493:12;11486:19;;11145:366;;;:::o;11517:419::-;11683:4;11721:2;11710:9;11706:18;11698:26;;11770:9;11764:4;11760:20;11756:1;11745:9;11741:17;11734:47;11798:131;11924:4;11798:131;:::i;:::-;11790:139;;11517:419;;;:::o;11942:162::-;12082:14;12078:1;12070:6;12066:14;12059:38;11942:162;:::o;12110:366::-;12252:3;12273:67;12337:2;12332:3;12273:67;:::i;:::-;12266:74;;12349:93;12438:3;12349:93;:::i;:::-;12467:2;12462:3;12458:12;12451:19;;12110:366;;;:::o;12482:419::-;12648:4;12686:2;12675:9;12671:18;12663:26;;12735:9;12729:4;12725:20;12721:1;12710:9;12706:17;12699:47;12763:131;12889:4;12763:131;:::i;:::-;12755:139;;12482:419;;;:::o;12907:143::-;12964:5;12995:6;12989:13;12980:22;;13011:33;13038:5;13011:33;:::i;:::-;12907:143;;;;:::o;13056:351::-;13126:6;13175:2;13163:9;13154:7;13150:23;13146:32;13143:119;;;13181:79;;:::i;:::-;13143:119;13301:1;13326:64;13382:7;13373:6;13362:9;13358:22;13326:64;:::i;:::-;13316:74;;13272:128;13056:351;;;;:::o;13413:171::-;13553:23;13549:1;13541:6;13537:14;13530:47;13413:171;:::o;13590:366::-;13732:3;13753:67;13817:2;13812:3;13753:67;:::i;:::-;13746:74;;13829:93;13918:3;13829:93;:::i;:::-;13947:2;13942:3;13938:12;13931:19;;13590:366;;;:::o;13962:419::-;14128:4;14166:2;14155:9;14151:18;14143:26;;14215:9;14209:4;14205:20;14201:1;14190:9;14186:17;14179:47;14243:131;14369:4;14243:131;:::i;:::-;14235:139;;13962:419;;;:::o;14387:180::-;14435:77;14432:1;14425:88;14532:4;14529:1;14522:15;14556:4;14553:1;14546:15;14573:332;14694:4;14732:2;14721:9;14717:18;14709:26;;14745:71;14813:1;14802:9;14798:17;14789:6;14745:71;:::i;:::-;14826:72;14894:2;14883:9;14879:18;14870:6;14826:72;:::i;:::-;14573:332;;;;;:::o;14911:137::-;14965:5;14996:6;14990:13;14981:22;;15012:30;15036:5;15012:30;:::i;:::-;14911:137;;;;:::o;15054:345::-;15121:6;15170:2;15158:9;15149:7;15145:23;15141:32;15138:119;;;15176:79;;:::i;:::-;15138:119;15296:1;15321:61;15374:7;15365:6;15354:9;15350:22;15321:61;:::i;:::-;15311:71;;15267:125;15054:345;;;;:::o;15405:85::-;15450:7;15479:5;15468:16;;15405:85;;;:::o;15496:158::-;15554:9;15587:61;15605:42;15614:32;15640:5;15614:32;:::i;:::-;15605:42;:::i;:::-;15587:61;:::i;:::-;15574:74;;15496:158;;;:::o;15660:147::-;15755:45;15794:5;15755:45;:::i;:::-;15750:3;15743:58;15660:147;;:::o;15813:114::-;15880:6;15914:5;15908:12;15898:22;;15813:114;;;:::o;15933:184::-;16032:11;16066:6;16061:3;16054:19;16106:4;16101:3;16097:14;16082:29;;15933:184;;;;:::o;16123:132::-;16190:4;16213:3;16205:11;;16243:4;16238:3;16234:14;16226:22;;16123:132;;;:::o;16261:108::-;16338:24;16356:5;16338:24;:::i;:::-;16333:3;16326:37;16261:108;;:::o;16375:179::-;16444:10;16465:46;16507:3;16499:6;16465:46;:::i;:::-;16543:4;16538:3;16534:14;16520:28;;16375:179;;;;:::o;16560:113::-;16630:4;16662;16657:3;16653:14;16645:22;;16560:113;;;:::o;16709:732::-;16828:3;16857:54;16905:5;16857:54;:::i;:::-;16927:86;17006:6;17001:3;16927:86;:::i;:::-;16920:93;;17037:56;17087:5;17037:56;:::i;:::-;17116:7;17147:1;17132:284;17157:6;17154:1;17151:13;17132:284;;;17233:6;17227:13;17260:63;17319:3;17304:13;17260:63;:::i;:::-;17253:70;;17346:60;17399:6;17346:60;:::i;:::-;17336:70;;17192:224;17179:1;17176;17172:9;17167:14;;17132:284;;;17136:14;17432:3;17425:10;;16833:608;;;16709:732;;;;:::o;17447:831::-;17710:4;17748:3;17737:9;17733:19;17725:27;;17762:71;17830:1;17819:9;17815:17;17806:6;17762:71;:::i;:::-;17843:80;17919:2;17908:9;17904:18;17895:6;17843:80;:::i;:::-;17970:9;17964:4;17960:20;17955:2;17944:9;17940:18;17933:48;17998:108;18101:4;18092:6;17998:108;:::i;:::-;17990:116;;18116:72;18184:2;18173:9;18169:18;18160:6;18116:72;:::i;:::-;18198:73;18266:3;18255:9;18251:19;18242:6;18198:73;:::i;:::-;17447:831;;;;;;;;:::o;18284:172::-;18424:24;18420:1;18412:6;18408:14;18401:48;18284:172;:::o;18462:366::-;18604:3;18625:67;18689:2;18684:3;18625:67;:::i;:::-;18618:74;;18701:93;18790:3;18701:93;:::i;:::-;18819:2;18814:3;18810:12;18803:19;;18462:366;;;:::o;18834:419::-;19000:4;19038:2;19027:9;19023:18;19015:26;;19087:9;19081:4;19077:20;19073:1;19062:9;19058:17;19051:47;19115:131;19241:4;19115:131;:::i;:::-;19107:139;;18834:419;;;:::o;19259:170::-;19399:22;19395:1;19387:6;19383:14;19376:46;19259:170;:::o;19435:366::-;19577:3;19598:67;19662:2;19657:3;19598:67;:::i;:::-;19591:74;;19674:93;19763:3;19674:93;:::i;:::-;19792:2;19787:3;19783:12;19776:19;;19435:366;;;:::o;19807:419::-;19973:4;20011:2;20000:9;19996:18;19988:26;;20060:9;20054:4;20050:20;20046:1;20035:9;20031:17;20024:47;20088:131;20214:4;20088:131;:::i;:::-;20080:139;;19807:419;;;:::o;20232:168::-;20372:20;20368:1;20360:6;20356:14;20349:44;20232:168;:::o;20406:366::-;20548:3;20569:67;20633:2;20628:3;20569:67;:::i;:::-;20562:74;;20645:93;20734:3;20645:93;:::i;:::-;20763:2;20758:3;20754:12;20747:19;;20406:366;;;:::o;20778:419::-;20944:4;20982:2;20971:9;20967:18;20959:26;;21031:9;21025:4;21021:20;21017:1;21006:9;21002:17;20995:47;21059:131;21185:4;21059:131;:::i;:::-;21051:139;;20778:419;;;:::o;21203:162::-;21343:14;21339:1;21331:6;21327:14;21320:38;21203:162;:::o;21371:366::-;21513:3;21534:67;21598:2;21593:3;21534:67;:::i;:::-;21527:74;;21610:93;21699:3;21610:93;:::i;:::-;21728:2;21723:3;21719:12;21712:19;;21371:366;;;:::o;21743:419::-;21909:4;21947:2;21936:9;21932:18;21924:26;;21996:9;21990:4;21986:20;21982:1;21971:9;21967:17;21960:47;22024:131;22150:4;22024:131;:::i;:::-;22016:139;;21743:419;;;:::o;22168:180::-;22216:77;22213:1;22206:88;22313:4;22310:1;22303:15;22337:4;22334:1;22327:15;22354:191;22394:4;22414:20;22432:1;22414:20;:::i;:::-;22409:25;;22448:20;22466:1;22448:20;:::i;:::-;22443:25;;22487:1;22484;22481:8;22478:34;;;22492:18;;:::i;:::-;22478:34;22537:1;22534;22530:9;22522:17;;22354:191;;;;:::o;22551:180::-;22599:77;22596:1;22589:88;22696:4;22693:1;22686:15;22720:4;22717:1;22710:15;22737:242;22776:3;22795:19;22812:1;22795:19;:::i;:::-;22790:24;;22828:19;22845:1;22828:19;:::i;:::-;22823:24;;22921:1;22913:6;22909:14;22906:1;22903:21;22900:47;;;22927:18;;:::i;:::-;22900:47;22971:1;22968;22964:9;22957:16;;22737:242;;;;:::o;22985:188::-;23024:4;23044:19;23061:1;23044:19;:::i;:::-;23039:24;;23077:19;23094:1;23077:19;:::i;:::-;23072:24;;23115:1;23112;23109:8;23106:34;;;23120:18;;:::i;:::-;23106:34;23165:1;23162;23158:9;23150:17;;22985:188;;;;:::o;23179:172::-;23319:24;23315:1;23307:6;23303:14;23296:48;23179:172;:::o;23357:366::-;23499:3;23520:67;23584:2;23579:3;23520:67;:::i;:::-;23513:74;;23596:93;23685:3;23596:93;:::i;:::-;23714:2;23709:3;23705:12;23698:19;;23357:366;;;:::o;23729:419::-;23895:4;23933:2;23922:9;23918:18;23910:26;;23982:9;23976:4;23972:20;23968:1;23957:9;23953:17;23946:47;24010:131;24136:4;24010:131;:::i;:::-;24002:139;;23729:419;;;:::o;24154:158::-;24294:10;24290:1;24282:6;24278:14;24271:34;24154:158;:::o;24318:365::-;24460:3;24481:66;24545:1;24540:3;24481:66;:::i;:::-;24474:73;;24556:93;24645:3;24556:93;:::i;:::-;24674:2;24669:3;24665:12;24658:19;;24318:365;;;:::o;24689:419::-;24855:4;24893:2;24882:9;24878:18;24870:26;;24942:9;24936:4;24932:20;24928:1;24917:9;24913:17;24906:47;24970:131;25096:4;24970:131;:::i;:::-;24962:139;;24689:419;;;:::o;25114:167::-;25254:19;25250:1;25242:6;25238:14;25231:43;25114:167;:::o;25287:366::-;25429:3;25450:67;25514:2;25509:3;25450:67;:::i;:::-;25443:74;;25526:93;25615:3;25526:93;:::i;:::-;25644:2;25639:3;25635:12;25628:19;;25287:366;;;:::o;25659:419::-;25825:4;25863:2;25852:9;25848:18;25840:26;;25912:9;25906:4;25902:20;25898:1;25887:9;25883:17;25876:47;25940:131;26066:4;25940:131;:::i;:::-;25932:139;;25659:419;;;:::o;26084:172::-;26224:24;26220:1;26212:6;26208:14;26201:48;26084:172;:::o;26262:366::-;26404:3;26425:67;26489:2;26484:3;26425:67;:::i;:::-;26418:74;;26501:93;26590:3;26501:93;:::i;:::-;26619:2;26614:3;26610:12;26603:19;;26262:366;;;:::o;26634:419::-;26800:4;26838:2;26827:9;26823:18;26815:26;;26887:9;26881:4;26877:20;26873:1;26862:9;26858:17;26851:47;26915:131;27041:4;26915:131;:::i;:::-;26907:139;;26634:419;;;:::o;27059:170::-;27199:22;27195:1;27187:6;27183:14;27176:46;27059:170;:::o;27235:366::-;27377:3;27398:67;27462:2;27457:3;27398:67;:::i;:::-;27391:74;;27474:93;27563:3;27474:93;:::i;:::-;27592:2;27587:3;27583:12;27576:19;;27235:366;;;:::o;27607:419::-;27773:4;27811:2;27800:9;27796:18;27788:26;;27860:9;27854:4;27850:20;27846:1;27835:9;27831:17;27824:47;27888:131;28014:4;27888:131;:::i;:::-;27880:139;;27607:419;;;:::o;28032:170::-;28172:22;28168:1;28160:6;28156:14;28149:46;28032:170;:::o;28208:366::-;28350:3;28371:67;28435:2;28430:3;28371:67;:::i;:::-;28364:74;;28447:93;28536:3;28447:93;:::i;:::-;28565:2;28560:3;28556:12;28549:19;;28208:366;;;:::o;28580:419::-;28746:4;28784:2;28773:9;28769:18;28761:26;;28833:9;28827:4;28823:20;28819:1;28808:9;28804:17;28797:47;28861:131;28987:4;28861:131;:::i;:::-;28853:139;;28580:419;;;:::o;29005:171::-;29145:23;29141:1;29133:6;29129:14;29122:47;29005:171;:::o;29182:366::-;29324:3;29345:67;29409:2;29404:3;29345:67;:::i;:::-;29338:74;;29421:93;29510:3;29421:93;:::i;:::-;29539:2;29534:3;29530:12;29523:19;;29182:366;;;:::o;29554:419::-;29720:4;29758:2;29747:9;29743:18;29735:26;;29807:9;29801:4;29797:20;29793:1;29782:9;29778:17;29771:47;29835:131;29961:4;29835:131;:::i;:::-;29827:139;;29554:419;;;:::o;29979:221::-;30119:34;30115:1;30107:6;30103:14;30096:58;30188:4;30183:2;30175:6;30171:15;30164:29;29979:221;:::o;30206:366::-;30348:3;30369:67;30433:2;30428:3;30369:67;:::i;:::-;30362:74;;30445:93;30534:3;30445:93;:::i;:::-;30563:2;30558:3;30554:12;30547:19;;30206:366;;;:::o;30578:419::-;30744:4;30782:2;30771:9;30767:18;30759:26;;30831:9;30825:4;30821:20;30817:1;30806:9;30802:17;30795:47;30859:131;30985:4;30859:131;:::i;:::-;30851:139;;30578:419;;;:::o;31003:166::-;31143:18;31139:1;31131:6;31127:14;31120:42;31003:166;:::o;31175:366::-;31317:3;31338:67;31402:2;31397:3;31338:67;:::i;:::-;31331:74;;31414:93;31503:3;31414:93;:::i;:::-;31532:2;31527:3;31523:12;31516:19;;31175:366;;;:::o;31547:419::-;31713:4;31751:2;31740:9;31736:18;31728:26;;31800:9;31794:4;31790:20;31786:1;31775:9;31771:17;31764:47;31828:131;31954:4;31828:131;:::i;:::-;31820:139;;31547:419;;;:::o;31972:180::-;32020:77;32017:1;32010:88;32117:4;32114:1;32107:15;32141:4;32138:1;32131:15;32158:185;32198:1;32215:20;32233:1;32215:20;:::i;:::-;32210:25;;32249:20;32267:1;32249:20;:::i;:::-;32244:25;;32288:1;32278:35;;32293:18;;:::i;:::-;32278:35;32335:1;32332;32328:9;32323:14;;32158:185;;;;:::o;32349:348::-;32389:7;32412:20;32430:1;32412:20;:::i;:::-;32407:25;;32446:20;32464:1;32446:20;:::i;:::-;32441:25;;32634:1;32566:66;32562:74;32559:1;32556:81;32551:1;32544:9;32537:17;32533:105;32530:131;;;32641:18;;:::i;:::-;32530:131;32689:1;32686;32682:9;32671:20;;32349:348;;;;:::o;32703:147::-;32804:11;32841:3;32826:18;;32703:147;;;;:::o;32856:114::-;;:::o;32976:398::-;33135:3;33156:83;33237:1;33232:3;33156:83;:::i;:::-;33149:90;;33248:93;33337:3;33248:93;:::i;:::-;33366:1;33361:3;33357:11;33350:18;;32976:398;;;:::o;33380:379::-;33564:3;33586:147;33729:3;33586:147;:::i;:::-;33579:154;;33750:3;33743:10;;33380:379;;;:::o;33765:320::-;33880:4;33918:2;33907:9;33903:18;33895:26;;33931:65;33993:1;33982:9;33978:17;33969:6;33931:65;:::i;:::-;34006:72;34074:2;34063:9;34059:18;34050:6;34006:72;:::i;:::-;33765:320;;;;;:::o;34091:233::-;34130:3;34153:24;34171:5;34153:24;:::i;:::-;34144:33;;34199:66;34192:5;34189:77;34186:103;;;34269:18;;:::i;:::-;34186:103;34316:1;34309:5;34305:13;34298:20;;34091:233;;;:::o;34330:176::-;34362:1;34379:20;34397:1;34379:20;:::i;:::-;34374:25;;34413:20;34431:1;34413:20;:::i;:::-;34408:25;;34452:1;34442:35;;34457:18;;:::i;:::-;34442:35;34498:1;34495;34491:9;34486:14;;34330:176;;;;:::o;34512:720::-;34747:4;34785:3;34774:9;34770:19;34762:27;;34799:79;34875:1;34864:9;34860:17;34851:6;34799:79;:::i;:::-;34925:9;34919:4;34915:20;34910:2;34899:9;34895:18;34888:48;34953:108;35056:4;35047:6;34953:108;:::i;:::-;34945:116;;35071:72;35139:2;35128:9;35124:18;35115:6;35071:72;:::i;:::-;35153;35221:2;35210:9;35206:18;35197:6;35153:72;:::i;:::-;34512:720;;;;;;;:::o
Swarm Source
ipfs://68576ec29bee13cec485a0e869b8f5372f4c92347ea47bbcce7ce6daa1606b0a
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.