Overview
ETH Balance
0.0368338 ETH
Eth Value
$113.60 (@ $3,084.23/ETH)More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 311 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
0x5a5dcd9d | 19830079 | 56 days ago | IN | 0 ETH | 0.00009194 | ||||
Transfer | 19055297 | 165 days ago | IN | 0.025 ETH | 0.00032279 | ||||
Withdraw NFT | 18868601 | 191 days ago | IN | 0 ETH | 0.00274015 | ||||
Swap NF Tfor FT | 18710633 | 213 days ago | IN | 0 ETH | 0.00603373 | ||||
Swap F Tfor NFT | 18580439 | 232 days ago | IN | 0.028 ETH | 0.00504298 | ||||
Stake NFT | 18554400 | 235 days ago | IN | 0 ETH | 0.00697693 | ||||
Swap NF Tfor FT | 18289613 | 272 days ago | IN | 0 ETH | 0.0012188 | ||||
Withdraw NFT | 18233263 | 280 days ago | IN | 0 ETH | 0.00149034 | ||||
Swap F Tfor NFT | 17870632 | 331 days ago | IN | 0.028 ETH | 0.00368077 | ||||
Withdraw NFT | 17732498 | 350 days ago | IN | 0 ETH | 0.00371521 | ||||
Stake NFT | 17656203 | 361 days ago | IN | 0 ETH | 0.00364819 | ||||
Set Collection A... | 17656180 | 361 days ago | IN | 0 ETH | 0.00065477 | ||||
Withdraw NFT | 17656142 | 361 days ago | IN | 0 ETH | 0.00140366 | ||||
Withdraw NFT | 17656136 | 361 days ago | IN | 0 ETH | 0.00178521 | ||||
Swap NF Tfor FT | 17590071 | 370 days ago | IN | 0 ETH | 0.0043482 | ||||
Stake NFT | 17549543 | 376 days ago | IN | 0 ETH | 0.00502453 | ||||
Withdraw NFT | 17484549 | 385 days ago | IN | 0 ETH | 0.00145837 | ||||
Swap F Tfor NFT | 17447333 | 390 days ago | IN | 0.04 ETH | 0.0023515 | ||||
Swap F Tfor NFT | 17446545 | 390 days ago | IN | 0.068 ETH | 0.00230811 | ||||
Swap F Tfor NFT | 17385429 | 399 days ago | IN | 0.052 ETH | 0.00473546 | ||||
Stake NFT | 17378444 | 400 days ago | IN | 0 ETH | 0.00896974 | ||||
Set Collection A... | 17378429 | 400 days ago | IN | 0 ETH | 0.00197447 | ||||
Stake NFT | 17378397 | 400 days ago | IN | 0 ETH | 0.00729256 | ||||
Stake NFT | 17378340 | 400 days ago | IN | 0 ETH | 0.00660602 | ||||
Stake NFT | 17378322 | 400 days ago | IN | 0 ETH | 0.00603414 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | Value | ||
---|---|---|---|---|---|---|
18710633 | 213 days ago | 0.001248 ETH | ||||
18580439 | 232 days ago | 0.028 ETH | ||||
18289613 | 272 days ago | 0.002304 ETH | ||||
18233263 | 280 days ago | 0.00336 ETH | ||||
17870632 | 331 days ago | 0.028 ETH | ||||
17590071 | 370 days ago | 0.00096 ETH | ||||
17447333 | 390 days ago | 0.04 ETH | ||||
17446545 | 390 days ago | 0.068 ETH | ||||
17385429 | 399 days ago | 0.052 ETH | ||||
17372256 | 401 days ago | 2.6804536 ETH | ||||
17128038 | 435 days ago | 0.00651 ETH | ||||
17127985 | 435 days ago | 0.003276 ETH | ||||
17127955 | 435 days ago | 0.00342 ETH | ||||
17115017 | 437 days ago | 0.0250926 ETH | ||||
16946899 | 461 days ago | 0.002628 ETH | ||||
16938616 | 462 days ago | 0.001 ETH | ||||
16911255 | 466 days ago | 0.002664 ETH | ||||
16905820 | 467 days ago | 0.0027 ETH | ||||
16866190 | 472 days ago | 0.00042 ETH | ||||
16866181 | 472 days ago | 0.0005 ETH | ||||
16754126 | 488 days ago | 0.013 ETH | ||||
16748754 | 489 days ago | 0.05 ETH | ||||
16708680 | 495 days ago | 0.002736 ETH | ||||
16708580 | 495 days ago | 0.00585 ETH | ||||
16676824 | 499 days ago | 0.042 ETH |
Loading...
Loading
Contract Name:
Router
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-01-25 */ // File: yomiswap-v2/lib/FixedPointMathLib.sol pragma solidity =0.8.17; library FixedPointMathLib { uint256 internal constant WAD = 1e18; function fmul( uint256 x, uint256 y, uint256 baseUnit ) internal pure returns (uint256 z) { assembly { // Store x * y in z for now. z := mul(x, y) // Equivalent to require(x == 0 || (x * y) / x == y) if iszero(or(iszero(x), eq(div(z, x), y))) { revert(0, 0) } // If baseUnit is zero this will return zero instead of reverting. z := div(z, baseUnit) } } function fdiv( uint256 x, uint256 y, uint256 baseUnit ) internal pure returns (uint256 z) { assembly { // Store x * baseUnit in z for now. z := mul(x, baseUnit) if or( // Revert if y is zero to ensure we don't divide by zero below. iszero(y), // Equivalent to require(x == 0 || (x * baseUnit) / x == baseUnit) iszero(or(iszero(x), eq(div(z, x), baseUnit))) ) { revert(0, 0) } // We ensure y is not zero above, so there is never division by zero here. z := div(z, y) } } function fpow( uint256 x, uint256 n, uint256 baseUnit ) internal pure returns (uint256 z) { assembly { switch x case 0 { switch n case 0 { z := baseUnit } default { z := 0 } } default { switch mod(n, 2) case 0 { z := baseUnit } default { z := x } let half := div(baseUnit, 2) for { n := div(n, 2) } n { n := div(n, 2) } { let xx := mul(x, x) if iszero(eq(div(xx, x), x)) { revert(0, 0) } let xxRound := add(xx, half) if lt(xxRound, xx) { revert(0, 0) } x := div(xxRound, baseUnit) if mod(n, 2) { let zx := mul(z, x) if and(iszero(iszero(x)), iszero(eq(div(zx, x), z))) { revert(0, 0) } let zxRound := add(zx, half) if lt(zxRound, zx) { revert(0, 0) } z := div(zxRound, baseUnit) } } } } } } // File: yomiswap-v2/interfaces/IPool.sol pragma solidity =0.8.17; interface IPool { //VARIANT function collection() external returns (address); function bondingCurve() external returns (address); function router() external returns (address); function paymentToken() external returns (address); function protocolFeeRatio() external returns (uint256); function buyEventNum() external returns (uint256); function sellEventNum() external returns (uint256); function stakeNFTprice() external returns (uint256); function stakeFTprice() external returns (uint256); function totalFTfee() external returns (uint256); function totalNFTfee() external returns (uint256); function isOtherStake() external returns (bool); function isPair() external returns (bool); struct UserInfo { uint256 initBuyNum; uint256 initSellNum; uint256 initSellAmount; uint256 totalNFTpoint; uint256 totalFTpoint; } struct PoolInfo { uint256 spotPrice; uint256 delta; uint256 spread; uint256 buyNum; uint256 sellNum; } function swapFTforNFT(uint256[] memory tokenIds, address user) external payable returns (uint256 protocolFee); function swapNFTforFT( uint256[] memory tokenIds, uint256 minExpectFee, address user ) external payable returns (uint256 protocolFee); function stakeNFT(uint256[] calldata tokenIds, address user) external; function withdrawNFT(uint256[] memory tokenIds, address user) external payable returns(uint256 totalFee); //@notice Only Single NonOtherStake function withdrawNFTpart(uint256[] calldata tokenIds, address user) external; //@notice Only All function withdrawFee(address user) external payable; //@notice reset Param function reset(address bondingCurve, uint256 newSpotPrice, uint256 newDelta, uint256 newSpread, address user) external; //@notice withdraw other FT function withdrawOtherFT(uint256 amount, address user) external; //@notice withdraw other NFT function withdrawOtherNFT(address collection, uint256 tokenId, address user)external; //GET //@notice Only All function getCalcBuyInfo(uint256 itemNum, uint256 spotPrice) external view returns (uint256); //@notice All function getCalcSellInfo(uint256 itemNum, uint256 spotPrice) external view returns (uint256); //@notice Only OtherStake function getUserStakeNFTfee(address user) external view returns (uint256 userFee); //@notice Only OtherStake function getUserStakeFTfee(address user) external view returns (uint256 userFee); //@notice Only Single NonOtherStake function getUserStakeNFTfee() external view returns (uint256 userFee); //@notice Only Single NonOtherStake function getUserStakeFTfee() external view returns (uint256 userFee); //@notice All function getPoolInfo() external view returns (PoolInfo memory); //@notice All function getAllHoldIds() external view returns (uint256[] memory); //@notice Only Pair NonOtherStake function getUserStakeFee() external view returns (uint256); //@notice Only Pair OtherStake function getUserStakeFee(address user) external view returns (uint256); //@notice Only OtherStake function getUserInfo(address user) external view returns (UserInfo memory); //@notice Only Non OtherStake function getUserInfo() external view returns (UserInfo memory); //SET //@notice All function setRouter(address newRouter) external; //@notice All function setProtocolFeeRatio(uint256 newProtocolFeeRatio) external; } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: yomiswap-v2/Router.sol pragma solidity =0.8.17; contract Router is Ownable { using FixedPointMathLib for uint256; //@param supporterFeeRatio: ratio of supporter uint256 public supporterFeeRatio; //@param isCollectionApprove: isApprove of Collection mapping(address => bool) private isCollectionApprove; //@param isBondingCurve: isApprove of BondingCurve mapping(address => bool) private isBondingCurveApprove; //@param isPaymentToken: isApprove of PaymentToken mapping(address => bool) private isPaymentTokenApprove; //@param isFactoryApprove: isApprove of Facotory mapping(address => bool) private isFactoryApprove; //@param isSupporterApprove: isApprove of Supporter mapping(address => bool) private isSupporterApprove; //@param totalProtocolFee: total protocol fee per paymentToken mapping(address => uint256) public totalFee; //@param totalProtocolFee: total protocol fee per paymentToken mapping(address => uint256) private totalProtocolFee; //@param supporterFee: per supporter and per paymentToken mapping(address => mapping(address => uint256)) private supporterFee; //STRUCT struct input { uint256[] tokenIds; } //@notice only factory address modifier onlyFactory() { require(isFactoryApprove[msg.sender] == true, "onlyFactory"); _; } //EVENT event StakeNFT( address indexed user, address indexed pool, uint256[] tokenIds ); event SwapNFTforFT( address indexed user, address indexed pool, uint256[] tokenIds, uint256 totalFee, address supporter ); event SwapFTforNFT( address indexed user, address indexed pool, uint256[] tokenIds, uint256 totalFee, address supporter ); event WithdrawNFT( address indexed user, address indexed pool, uint256[] tokenIds, uint256 userAmount ); event WithdrawNFTpart( address indexed user, address indexed pool, uint256[] tokenIds ); event WithdrawFee( address indexed user, address indexed pool, uint256 userFee ); event Received(address, uint256); event UpdateBondingCurve(address indexed bondingCurve, bool approve); event UpdateCollection(address indexed collection, bool approve); event UpdatePool(address indexed pool, bool approve); event UpdatePoolParam(address indexed pool); event UpdatePaymentToken(address indexed paymentToken, bool approve); event UpdateFactory(address indexed factory, bool approve); event UpdateSupporter(address indexed supporter, bool approve); //CONSTRCTO constructor(uint256 _supporterFeeRatio) { supporterFeeRatio = _supporterFeeRatio; } //MAIN function stakeNFT(address _pool, uint256[] calldata _tokenIds) external { IPool(_pool).stakeNFT(_tokenIds, msg.sender); emit StakeNFT(msg.sender, _pool, _tokenIds); } function batchStakeNFT( address[] calldata _poolList, input[] calldata InputArray ) external { for (uint256 i = 0; i < _poolList.length; ) { IPool(_poolList[i]).stakeNFT(InputArray[i].tokenIds, msg.sender); emit StakeNFT(msg.sender, _poolList[i], InputArray[i].tokenIds); unchecked { ++i; } } } //@notice swap NFT → FT function swapNFTforFT( address _pool, uint256[] calldata _tokenIds, uint256 _minExpectFee, address _supporter ) external { require(_tokenIds.length > 0, "Not 0"); IPool.PoolInfo memory _poolInfo = IPool(_pool).getPoolInfo(); address _paymentToken = IPool(_pool).paymentToken(); uint256 _totalFee = IPool(_pool).getCalcSellInfo( _tokenIds.length, _poolInfo.spotPrice ); uint256 _profitAmount = IPool(_pool).swapNFTforFT( _tokenIds, _minExpectFee, msg.sender ); _updateFee(_supporter, _paymentToken, _profitAmount); emit SwapNFTforFT(msg.sender, _pool, _tokenIds, _totalFee, _supporter); } //@notice batchSwapNFTforFT function batchSwapNFTforFT( address[] calldata _poolList, input[] calldata InputArray, uint256[] calldata _minExpects, address _supporter ) external payable { for (uint256 i = 0; i < _poolList.length; ) { require(InputArray[i].tokenIds.length > 0, "Not 0"); IPool.PoolInfo memory _poolInfo = IPool(_poolList[i]).getPoolInfo(); address _paymentToken = IPool(_poolList[i]).paymentToken(); uint256 _totalFee = IPool(_poolList[i]).getCalcSellInfo( InputArray[i].tokenIds.length, _poolInfo.spotPrice ); uint256 _profitAmount = IPool(_poolList[i]).swapNFTforFT( InputArray[i].tokenIds, _minExpects[i], msg.sender ); _updateFee(_supporter, _paymentToken, _profitAmount); emit SwapNFTforFT( msg.sender, _poolList[i], InputArray[i].tokenIds, _totalFee, _supporter ); unchecked { ++i; } } } //@notice swap FT → NFT function swapFTforNFT( address _pool, uint256[] calldata _tokenIds, address _supporter ) external payable { require(_tokenIds.length > 0, "Not 0"); IPool.PoolInfo memory _poolInfo = IPool(_pool).getPoolInfo(); address _paymentToken = IPool(_pool).paymentToken(); uint256 _totalFee = IPool(_pool).getCalcBuyInfo( _tokenIds.length, _poolInfo.spotPrice ); uint256 _profitAmount = IPool(_pool).swapFTforNFT{value: msg.value}( _tokenIds, msg.sender ); _updateFee(_supporter, _paymentToken, _profitAmount); emit SwapFTforNFT(msg.sender, _pool, _tokenIds, _totalFee, _supporter); } //@notice batchSwapFTforNFT function batchSwapFTforNFT( address[] calldata _poolList, input[] calldata InputArray, address _supporter ) external payable { uint256 _remainFee = msg.value; for (uint256 i = 0; i < _poolList.length; ) { require(InputArray[i].tokenIds.length > 0, "Not 0"); IPool.PoolInfo memory _poolInfo = IPool(_poolList[i]).getPoolInfo(); address _paymentToken = IPool(_poolList[i]).paymentToken(); uint256 _totalFee = IPool(_poolList[i]).getCalcBuyInfo( InputArray[i].tokenIds.length, _poolInfo.spotPrice ); uint256 _profitAmount; if (_paymentToken == address(0)) { require(_remainFee >= _totalFee, "not enogh value"); _remainFee -= _totalFee; _profitAmount = IPool(_poolList[i]).swapFTforNFT{ value: _totalFee }(InputArray[i].tokenIds, msg.sender); } else { _profitAmount = IPool(_poolList[i]).swapFTforNFT( InputArray[i].tokenIds, msg.sender ); } _updateFee(_supporter, _paymentToken, _profitAmount); emit SwapFTforNFT( msg.sender, _poolList[i], InputArray[i].tokenIds, _totalFee, _supporter ); unchecked { ++i; } } if (_remainFee > 0) { payable(msg.sender).transfer(_remainFee); } } //@notice withdraw NFT and Fee function withdrawNFT(address _pool, uint256[] calldata _tokenIds) external { uint256 _totalFee = IPool(_pool).withdrawNFT(_tokenIds, msg.sender); emit WithdrawNFT(msg.sender, _pool, _tokenIds, _totalFee); } //@notice withdraw part NFT function withdrawNFTpart(address _pool, uint256[] calldata _tokenIds) external { IPool(_pool).withdrawNFTpart(_tokenIds, msg.sender); emit WithdrawNFTpart(msg.sender, _pool, _tokenIds); } //@notice withdraw protocol fee function withdrawProtocolFee(address _paymentToken) external payable onlyOwner { uint256 _totalFee = totalProtocolFee[_paymentToken]; uint256 _totalBalance = totalFee[_paymentToken]; if (_paymentToken == address(0)) { //check require(_totalFee > 0 || address(this).balance > _totalBalance, "Not Fee"); //effect totalProtocolFee[_paymentToken] = 0; totalFee[_paymentToken] -= _totalFee; uint256 subProtocolFee = address(this).balance - _totalBalance; _totalFee += subProtocolFee; //intaraction payable(msg.sender).transfer(_totalFee); } else { //check require(_totalFee > 0 || IERC20(_paymentToken).balanceOf(address(this)) > totalFee[_paymentToken], "Not Fee"); //effect totalProtocolFee[_paymentToken] = 0; totalFee[_paymentToken] -= _totalFee; uint256 subProtocolFee = IERC20(_paymentToken).balanceOf(address(this)) - totalFee[_paymentToken]; _totalFee += subProtocolFee; //intaraction IERC20(_paymentToken).transfer(msg.sender, _totalFee); } } function withdrawFee(address _pool) external payable { IPool(_pool).withdrawFee(msg.sender); } //@notice withdraw support fee function withdrawSupportFee(address _paymentToken) external payable { uint256 _totalFee = supporterFee[msg.sender][_paymentToken]; //check require(_totalFee > 0, "Not Fee"); //effect supporterFee[msg.sender][_paymentToken] = 0; totalFee[_paymentToken] -= _totalFee; //intaraction if (_paymentToken == address(0)) { payable(msg.sender).transfer(_totalFee); } else { IERC20(_paymentToken).transfer(msg.sender, _totalFee); } } function reset( address _pool, address _bondingCurve, uint256 _newSpotPrice, uint256 _newDelta, uint256 _newSpread ) external { IPool(_pool).reset(_bondingCurve,_newSpotPrice,_newDelta,_newSpread, msg.sender); emit UpdatePoolParam(_pool); } function withdrawOtherFT(address _pool,uint256 _amount, address _user) external payable { IPool(_pool).withdrawOtherFT(_amount, _user); } //@notice withdraw FT function withdrawOtherNFT(address _pool, address _collection, uint256 _tokenId, address _user)external{ IPool(_pool).withdrawOtherNFT(_collection, _tokenId, _user); } //GET //@notice get approve of collection function getIsCollectionApprove(address _collection) external view returns (bool) { return isCollectionApprove[_collection]; } //@notice get approve of bonding curve function getIsBondingCurveApprove(address _bondingCurve) external view returns (bool) { return isBondingCurveApprove[_bondingCurve]; } //@notice get approve of bonding curve function getIsPaymentTokenApprove(address _paymentToken) external view returns (bool) { return isPaymentTokenApprove[_paymentToken]; } //@notice get approve of bonding curve function getIsFactoryApprove(address _factory) external view returns (bool) { return isFactoryApprove[_factory]; } //@notice get approve of bonding curve function getIsSupporterApprove(address _supporter) external view returns (bool) { return isSupporterApprove[_supporter]; } //@notice get fee of protocol function getTotalProtocolFee(address _paymentToken) external view returns(uint256){ uint256 _totalFee = totalProtocolFee[_paymentToken]; if (_paymentToken == address(0)) { uint256 subProtocolFee = address(this).balance - totalFee[_paymentToken]; _totalFee += subProtocolFee; } else { uint256 subProtocolFee = IERC20(_paymentToken).balanceOf(address(this)) - totalFee[_paymentToken]; _totalFee += subProtocolFee; } return _totalFee; } //@notice get fee of supporter function getSupporterFee(address _supporter, address _paymentToken)external view returns(uint256){ return supporterFee[_supporter][_paymentToken]; } //SET //@notice approve for bonding curve function setCollectionApprove(address _collection, bool _approve) external onlyOwner { isCollectionApprove[_collection] = _approve; emit UpdateCollection(_collection, _approve); } //@notice approve for bonding curve function setBondingCurveApprove(address _bondingCurve, bool _approve) external onlyOwner { isBondingCurveApprove[_bondingCurve] = _approve; emit UpdateBondingCurve(_bondingCurve, _approve); } //@notice approve for bonding curve function setPaymentTokenApprove(address _paymentToken, bool _approve) external onlyOwner { isPaymentTokenApprove[_paymentToken] = _approve; emit UpdatePaymentToken(_paymentToken, _approve); } //@notice set approve for factory function setFactoryApprove(address _factory, bool _approve) external onlyOwner { isFactoryApprove[_factory] = _approve; emit UpdateFactory(_factory, _approve); } //@notice set approve for supporter function setSupporterApprove(address _supporter, bool _approve) external onlyOwner { isSupporterApprove[_supporter] = _approve; emit UpdateSupporter(_supporter, _approve); } //@notice set protocolFeeRatio for pool function setSupporterFeeRatio( uint256 _newSupporterFeeRatio ) external onlyOwner { supporterFeeRatio = _newSupporterFeeRatio; } //@notice set protocolFeeRatio for pool function setPoolProtocolFeeRatio( address _pool, uint256 _newProtocolFeeRatio ) external onlyOwner { IPool(_pool).setProtocolFeeRatio(_newProtocolFeeRatio); } //@notice set protocolFeeRatio function setPoolRouter(address _pool, address _newRouter) external onlyOwner { IPool(_pool).setRouter(_newRouter); } //@notice set pool function setPool(address _pool, bool _approve) external onlyFactory { emit UpdatePool(_pool, _approve); } //INTERNAL //@notice calc update fee function _updateFee( address _supporter, address _paymentToken, uint256 _profitAmount ) internal { totalFee[_paymentToken] += _profitAmount; if (_supporter != address(0)) { uint256 _supporterFee = _profitAmount.fmul( supporterFeeRatio, FixedPointMathLib.WAD ); uint256 _protocolFee = _profitAmount - _supporterFee; totalProtocolFee[_paymentToken] += _protocolFee; supporterFee[_supporter][_paymentToken] += _supporterFee; } else if (_supporter == address(0)) { totalProtocolFee[_paymentToken] += _profitAmount; } } //@notice receive関数 fallback() external payable{} receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"_supporterFeeRatio","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"Received","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"StakeNFT","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"totalFee","type":"uint256"},{"indexed":false,"internalType":"address","name":"supporter","type":"address"}],"name":"SwapFTforNFT","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"totalFee","type":"uint256"},{"indexed":false,"internalType":"address","name":"supporter","type":"address"}],"name":"SwapNFTforFT","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"bondingCurve","type":"address"},{"indexed":false,"internalType":"bool","name":"approve","type":"bool"}],"name":"UpdateBondingCurve","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"collection","type":"address"},{"indexed":false,"internalType":"bool","name":"approve","type":"bool"}],"name":"UpdateCollection","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"indexed":false,"internalType":"bool","name":"approve","type":"bool"}],"name":"UpdateFactory","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"paymentToken","type":"address"},{"indexed":false,"internalType":"bool","name":"approve","type":"bool"}],"name":"UpdatePaymentToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"approve","type":"bool"}],"name":"UpdatePool","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"UpdatePoolParam","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"supporter","type":"address"},{"indexed":false,"internalType":"bool","name":"approve","type":"bool"}],"name":"UpdateSupporter","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"userFee","type":"uint256"}],"name":"WithdrawFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"userAmount","type":"uint256"}],"name":"WithdrawNFT","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"WithdrawNFTpart","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address[]","name":"_poolList","type":"address[]"},{"components":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"internalType":"struct Router.input[]","name":"InputArray","type":"tuple[]"}],"name":"batchStakeNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_poolList","type":"address[]"},{"components":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"internalType":"struct Router.input[]","name":"InputArray","type":"tuple[]"},{"internalType":"address","name":"_supporter","type":"address"}],"name":"batchSwapFTforNFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_poolList","type":"address[]"},{"components":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"internalType":"struct Router.input[]","name":"InputArray","type":"tuple[]"},{"internalType":"uint256[]","name":"_minExpects","type":"uint256[]"},{"internalType":"address","name":"_supporter","type":"address"}],"name":"batchSwapNFTforFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_bondingCurve","type":"address"}],"name":"getIsBondingCurveApprove","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_collection","type":"address"}],"name":"getIsCollectionApprove","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_factory","type":"address"}],"name":"getIsFactoryApprove","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_paymentToken","type":"address"}],"name":"getIsPaymentTokenApprove","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_supporter","type":"address"}],"name":"getIsSupporterApprove","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_supporter","type":"address"},{"internalType":"address","name":"_paymentToken","type":"address"}],"name":"getSupporterFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_paymentToken","type":"address"}],"name":"getTotalProtocolFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pool","type":"address"},{"internalType":"address","name":"_bondingCurve","type":"address"},{"internalType":"uint256","name":"_newSpotPrice","type":"uint256"},{"internalType":"uint256","name":"_newDelta","type":"uint256"},{"internalType":"uint256","name":"_newSpread","type":"uint256"}],"name":"reset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_bondingCurve","type":"address"},{"internalType":"bool","name":"_approve","type":"bool"}],"name":"setBondingCurveApprove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_collection","type":"address"},{"internalType":"bool","name":"_approve","type":"bool"}],"name":"setCollectionApprove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"bool","name":"_approve","type":"bool"}],"name":"setFactoryApprove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_paymentToken","type":"address"},{"internalType":"bool","name":"_approve","type":"bool"}],"name":"setPaymentTokenApprove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pool","type":"address"},{"internalType":"bool","name":"_approve","type":"bool"}],"name":"setPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pool","type":"address"},{"internalType":"uint256","name":"_newProtocolFeeRatio","type":"uint256"}],"name":"setPoolProtocolFeeRatio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pool","type":"address"},{"internalType":"address","name":"_newRouter","type":"address"}],"name":"setPoolRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_supporter","type":"address"},{"internalType":"bool","name":"_approve","type":"bool"}],"name":"setSupporterApprove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newSupporterFeeRatio","type":"uint256"}],"name":"setSupporterFeeRatio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pool","type":"address"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"stakeNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supporterFeeRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pool","type":"address"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"},{"internalType":"address","name":"_supporter","type":"address"}],"name":"swapFTforNFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_pool","type":"address"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"},{"internalType":"uint256","name":"_minExpectFee","type":"uint256"},{"internalType":"address","name":"_supporter","type":"address"}],"name":"swapNFTforFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pool","type":"address"}],"name":"withdrawFee","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_pool","type":"address"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"withdrawNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pool","type":"address"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"withdrawNFTpart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pool","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"withdrawOtherFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_pool","type":"address"},{"internalType":"address","name":"_collection","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"withdrawOtherNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_paymentToken","type":"address"}],"name":"withdrawProtocolFee","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_paymentToken","type":"address"}],"name":"withdrawSupportFee","outputs":[],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200463638038062004636833981810160405281019062000037919062000171565b620000576200004b6200006560201b60201c565b6200006d60201b60201c565b8060018190555050620001a3565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b6000819050919050565b6200014b8162000136565b81146200015757600080fd5b50565b6000815190506200016b8162000140565b92915050565b6000602082840312156200018a576200018962000131565b5b60006200019a848285016200015a565b91505092915050565b61448380620001b36000396000f3fe6080604052600436106102085760003560e01c80638da5cb5b11610118578063d86ee259116100a0578063f2fde38b1161006f578063f2fde38b1461070f578063f9bb21bf14610738578063fc5a0df514610761578063fc9d16cd1461079e578063fd7bb9b5146107c75761020f565b8063d86ee25914610671578063dd4b533f1461068d578063e1549300146106b6578063ec217ea6146106d25761020f565b80639c9206d2116100e75780639c9206d214610587578063b65bfbf0146105b0578063bc0a0bd0146105ed578063cab5c30e14610618578063ce9061fa146106345761020f565b80638da5cb5b146104e15780639175a5881461050c57806394a36eac146105355780639bdedea51461055e5761020f565b80633d9b66a81161019b5780636a64d3d21161016a5780636a64d3d2146103fe578063715018a61461043b5780637a4fda3d1461045257806386b99ec11461048f5780638d3b6eb3146104b85761020f565b80633d9b66a81461033f57806348f900551461037c5780635617811d146103a5578063668fb6dc146103e25761020f565b806320bec12c116101d757806320bec12c1461029b5780632e091d53146102c457806330d6d64d146102ed57806338e8a1d1146103165761020f565b80630f4c2192146102115780631824d4391461023a57806318892c5d146102635780631ac3ddeb1461027f5761020f565b3661020f57005b005b34801561021d57600080fd5b5061023860048036038101906102339190613485565b6107e3565b005b34801561024657600080fd5b50610261600480360381019061025c91906134c5565b61085a565b005b61027d60048036038101906102789190613616565b6108d1565b005b610299600480360381019061029491906136df565b610d4d565b005b3480156102a757600080fd5b506102c260048036038101906102bd9190613744565b610dbb565b005b3480156102d057600080fd5b506102eb60048036038101906102e69190613784565b610ea0565b005b3480156102f957600080fd5b50610314600480360381019061030f9190613805565b611048565b005b34801561032257600080fd5b5061033d60048036038101906103389190613744565b611123565b005b34801561034b57600080fd5b50610366600480360381019061036191906134c5565b6111d4565b6040516103739190613874565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e919061388f565b61125b565b005b3480156103b157600080fd5b506103cc60048036038101906103c791906136df565b6112d0565b6040516103d99190613874565b60405180910390f35b6103fc60048036038101906103f791906136df565b61148d565b005b34801561040a57600080fd5b50610425600480360381019061042091906136df565b6119a0565b6040516104329190613905565b60405180910390f35b34801561044757600080fd5b506104506119f6565b005b34801561045e57600080fd5b50610479600480360381019061047491906136df565b611a0a565b6040516104869190613874565b60405180910390f35b34801561049b57600080fd5b506104b660048036038101906104b19190613744565b611a22565b005b3480156104c457600080fd5b506104df60048036038101906104da9190613744565b611ad3565b005b3480156104ed57600080fd5b506104f6611b84565b604051610503919061392f565b60405180910390f35b34801561051857600080fd5b50610533600480360381019061052e9190613805565b611bad565b005b34801561054157600080fd5b5061055c6004803603810190610557919061394a565b611c88565b005b34801561056a57600080fd5b5061058560048036038101906105809190613805565b611d45565b005b34801561059357600080fd5b506105ae60048036038101906105a99190613744565b611e38565b005b3480156105bc57600080fd5b506105d760048036038101906105d291906136df565b611ee9565b6040516105e49190613905565b60405180910390f35b3480156105f957600080fd5b50610602611f3f565b60405161060f9190613874565b60405180910390f35b610632600480360381019061062d91906139c5565b611f45565b005b34801561064057600080fd5b5061065b600480360381019061065691906136df565b6121ff565b6040516106689190613905565b60405180910390f35b61068b60048036038101906106869190613a39565b612255565b005b34801561069957600080fd5b506106b460048036038101906106af9190613a8c565b6122c7565b005b6106d060048036038101906106cb91906136df565b612583565b005b3480156106de57600080fd5b506106f960048036038101906106f491906136df565b612823565b6040516107069190613905565b60405180910390f35b34801561071b57600080fd5b50610736600480360381019061073191906136df565b612879565b005b34801561074457600080fd5b5061075f600480360381019061075a9190613b14565b6128fc565b005b34801561076d57600080fd5b50610788600480360381019061078391906136df565b61290e565b6040516107959190613905565b60405180910390f35b3480156107aa57600080fd5b506107c560048036038101906107c09190613744565b612964565b005b6107e160048036038101906107dc9190613b41565b612a15565b005b6107eb613031565b8173ffffffffffffffffffffffffffffffffffffffff166341ede57e826040518263ffffffff1660e01b81526004016108249190613874565b600060405180830381600087803b15801561083e57600080fd5b505af1158015610852573d6000803e3d6000fd5b505050505050565b610862613031565b8173ffffffffffffffffffffffffffffffffffffffff1663c0d78655826040518263ffffffff1660e01b815260040161089b919061392f565b600060405180830381600087803b1580156108b557600080fd5b505af11580156108c9573d6000803e3d6000fd5b505050505050565b60005b87879050811015610d435760008686838181106108f4576108f3613bd6565b5b90506020028101906109069190613c14565b80600001906109159190613c3c565b905011610957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094e90613cfc565b60405180910390fd5b600088888381811061096c5761096b613bd6565b5b905060200201602081019061098191906136df565b73ffffffffffffffffffffffffffffffffffffffff166360246c886040518163ffffffff1660e01b815260040160a060405180830381865afa1580156109cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ef9190613e4e565b90506000898984818110610a0657610a05613bd6565b5b9050602002016020810190610a1b91906136df565b73ffffffffffffffffffffffffffffffffffffffff16633013ce296040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610a67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8b9190613e90565b905060008a8a85818110610aa257610aa1613bd6565b5b9050602002016020810190610ab791906136df565b73ffffffffffffffffffffffffffffffffffffffff166388e5cd1f8a8a87818110610ae557610ae4613bd6565b5b9050602002810190610af79190613c14565b8060000190610b069190613c3c565b905085600001516040518363ffffffff1660e01b8152600401610b2a929190613ebd565b602060405180830381865afa158015610b47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6b9190613ee6565b905060008b8b86818110610b8257610b81613bd6565b5b9050602002016020810190610b9791906136df565b73ffffffffffffffffffffffffffffffffffffffff1663244117b48b8b88818110610bc557610bc4613bd6565b5b9050602002810190610bd79190613c14565b8060000190610be69190613c3c565b8b8b8a818110610bf957610bf8613bd6565b5b90506020020135336040518563ffffffff1660e01b8152600401610c209493929190613f8e565b6020604051808303816000875af1158015610c3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c639190613ee6565b9050610c708684836130af565b8b8b86818110610c8357610c82613bd6565b5b9050602002016020810190610c9891906136df565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8f3673bd023cc34f252b9e7d0a0dd6496592b87006673a974d1d621b5a93e15e8c8c89818110610cf957610cf8613bd6565b5b9050602002810190610d0b9190613c14565b8060000190610d1a9190613c3c565b868b604051610d2c9493929190613f8e565b60405180910390a3846001019450505050506108d4565b5050505050505050565b8073ffffffffffffffffffffffffffffffffffffffff16631ac3ddeb336040518263ffffffff1660e01b8152600401610d86919061392f565b600060405180830381600087803b158015610da057600080fd5b505af1158015610db4573d6000803e3d6000fd5b5050505050565b60011515600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610e4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e459061401a565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff167f16f5dd05aa4fb9d233806a07de5cc48d6893f315e214cce8974b6e951b655c6b82604051610e949190613905565b60405180910390a25050565b60005b8484905081101561104157848482818110610ec157610ec0613bd6565b5b9050602002016020810190610ed691906136df565b73ffffffffffffffffffffffffffffffffffffffff16632f7e0b2e848484818110610f0457610f03613bd6565b5b9050602002810190610f169190613c14565b8060000190610f259190613c3c565b336040518463ffffffff1660e01b8152600401610f449392919061403a565b600060405180830381600087803b158015610f5e57600080fd5b505af1158015610f72573d6000803e3d6000fd5b50505050848482818110610f8957610f88613bd6565b5b9050602002016020810190610f9e91906136df565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f7c0a46ce3acb6a46fffede953868812e9045bc3e16fb727004e10272ddfad74e858585818110610fff57610ffe613bd6565b5b90506020028101906110119190613c14565b80600001906110209190613c3c565b60405161102e92919061406c565b60405180910390a3806001019050610ea3565b5050505050565b8273ffffffffffffffffffffffffffffffffffffffff1663f968f33b8383336040518463ffffffff1660e01b81526004016110859392919061403a565b600060405180830381600087803b15801561109f57600080fd5b505af11580156110b3573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167ff4a476d3c8307c48588449bd904be8e33979939dd8cddeca9a78f6d336311576848460405161111692919061406c565b60405180910390a3505050565b61112b613031565b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fc01b4a3b37bda477d1b60e1d10e03272f94fbe6d08b3c72f8a4a7e35bcd93b02826040516111c89190613905565b60405180910390a25050565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b8373ffffffffffffffffffffffffffffffffffffffff1663a09f32118484846040518463ffffffff1660e01b815260040161129893929190614090565b600060405180830381600087803b1580156112b257600080fd5b505af11580156112c6573d6000803e3d6000fd5b5050505050505050565b600080600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036113ac576000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544761139691906140f6565b905080826113a4919061412a565b915050611484565b6000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611427919061392f565b602060405180830381865afa158015611444573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114689190613ee6565b61147291906140f6565b90508082611480919061412a565b9150505b80915050919050565b611495613031565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036116a457600082118061155f57508047115b61159e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611595906141aa565b60405180910390fd5b6000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461163291906140f6565b925050819055506000814761164791906140f6565b90508083611655919061412a565b92503373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f1935050505015801561169d573d6000803e3d6000fd5b505061199b565b600082118061176a5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611727919061392f565b602060405180830381865afa158015611744573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117689190613ee6565b115b6117a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a0906141aa565b60405180910390fd5b6000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461183d91906140f6565b925050819055506000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016118bf919061392f565b602060405180830381865afa1580156118dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119009190613ee6565b61190a91906140f6565b90508083611918919061412a565b92508373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33856040518363ffffffff1660e01b81526004016119559291906141ca565b6020604051808303816000875af1158015611974573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119989190614208565b50505b505050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6119fe613031565b611a0860006132ed565b565b60076020528060005260406000206000915090505481565b611a2a613031565b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f11b4c2b6450da8949b70f94de747d396f0a4fcedf7ffefe7332d323dd210258a82604051611ac79190613905565b60405180910390a25050565b611adb613031565b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fa5863f03ddba3042b23731d7fba300e6f264d1c0cabf85630064d6ecbd01853b82604051611b789190613905565b60405180910390a25050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8273ffffffffffffffffffffffffffffffffffffffff16632f7e0b2e8383336040518463ffffffff1660e01b8152600401611bea9392919061403a565b600060405180830381600087803b158015611c0457600080fd5b505af1158015611c18573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f7c0a46ce3acb6a46fffede953868812e9045bc3e16fb727004e10272ddfad74e8484604051611c7b92919061406c565b60405180910390a3505050565b8473ffffffffffffffffffffffffffffffffffffffff1663f829e9fc85858585336040518663ffffffff1660e01b8152600401611cc9959493929190614235565b600060405180830381600087803b158015611ce357600080fd5b505af1158015611cf7573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167f02f0328fc2c71376910c0a5e2be622213d6eeb426118ef65ae5b3593864b668160405160405180910390a25050505050565b60008373ffffffffffffffffffffffffffffffffffffffff16632c7e49158484336040518463ffffffff1660e01b8152600401611d849392919061403a565b6020604051808303816000875af1158015611da3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc79190613ee6565b90508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fcd715c6f851d1dc11755804a0c2e5da8792da275e44c1ee713771d7479bce8fd858585604051611e2a93929190614288565b60405180910390a350505050565b611e40613031565b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f1c3c313576907bc91320c98e637bcadb2f200b2af1b9ba3036662819961ae0d482604051611edd9190613905565b60405180910390a25050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60015481565b60008383905011611f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8290613cfc565b60405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166360246c886040518163ffffffff1660e01b815260040160a060405180830381865afa158015611fd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ffc9190613e4e565b905060008573ffffffffffffffffffffffffffffffffffffffff16633013ce296040518163ffffffff1660e01b81526004016020604051808303816000875af115801561204d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120719190613e90565b905060008673ffffffffffffffffffffffffffffffffffffffff166365b962318787905085600001516040518363ffffffff1660e01b81526004016120b7929190613ebd565b602060405180830381865afa1580156120d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120f89190613ee6565b905060008773ffffffffffffffffffffffffffffffffffffffff16634c4cbac4348989336040518563ffffffff1660e01b815260040161213a9392919061403a565b60206040518083038185885af1158015612158573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061217d9190613ee6565b905061218a8584836130af565b8773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2611defd53a4a87419d2078554db30aeaddd9ddfdc5990da2bbdc8d589f5e4d68989868a6040516121ed9493929190613f8e565b60405180910390a35050505050505050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b8273ffffffffffffffffffffffffffffffffffffffff1663efb1765983836040518363ffffffff1660e01b81526004016122909291906142ba565b600060405180830381600087803b1580156122aa57600080fd5b505af11580156122be573d6000803e3d6000fd5b50505050505050565b6000848490501161230d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230490613cfc565b60405180910390fd5b60008573ffffffffffffffffffffffffffffffffffffffff166360246c886040518163ffffffff1660e01b815260040160a060405180830381865afa15801561235a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061237e9190613e4e565b905060008673ffffffffffffffffffffffffffffffffffffffff16633013ce296040518163ffffffff1660e01b81526004016020604051808303816000875af11580156123cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f39190613e90565b905060008773ffffffffffffffffffffffffffffffffffffffff166388e5cd1f8888905085600001516040518363ffffffff1660e01b8152600401612439929190613ebd565b602060405180830381865afa158015612456573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061247a9190613ee6565b905060008873ffffffffffffffffffffffffffffffffffffffff1663244117b4898989336040518563ffffffff1660e01b81526004016124bd9493929190613f8e565b6020604051808303816000875af11580156124dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125009190613ee6565b905061250d8584836130af565b8873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8f3673bd023cc34f252b9e7d0a0dd6496592b87006673a974d1d621b5a93e15e8a8a868a6040516125709493929190613f8e565b60405180910390a3505050505050505050565b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111612647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263e906141aa565b60405180910390fd5b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461271891906140f6565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361279f573373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612799573d6000803e3d6000fd5b5061281f565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016127da9291906141ca565b6020604051808303816000875af11580156127f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061281d9190614208565b505b5050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b612881613031565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036128f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e790614355565b60405180910390fd5b6128f9816132ed565b50565b612904613031565b8060018190555050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61296c613031565b80600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167ff1a7d235323609d0e57be8421b6b457060a5778dce9db39be3d530b141a3c70982604051612a099190613905565b60405180910390a25050565b600034905060005b86869050811015612fd7576000858583818110612a3d57612a3c613bd6565b5b9050602002810190612a4f9190613c14565b8060000190612a5e9190613c3c565b905011612aa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9790613cfc565b60405180910390fd5b6000878783818110612ab557612ab4613bd6565b5b9050602002016020810190612aca91906136df565b73ffffffffffffffffffffffffffffffffffffffff166360246c886040518163ffffffff1660e01b815260040160a060405180830381865afa158015612b14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b389190613e4e565b90506000888884818110612b4f57612b4e613bd6565b5b9050602002016020810190612b6491906136df565b73ffffffffffffffffffffffffffffffffffffffff16633013ce296040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612bb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bd49190613e90565b90506000898985818110612beb57612bea613bd6565b5b9050602002016020810190612c0091906136df565b73ffffffffffffffffffffffffffffffffffffffff166365b96231898987818110612c2e57612c2d613bd6565b5b9050602002810190612c409190613c14565b8060000190612c4f9190613c3c565b905085600001516040518363ffffffff1660e01b8152600401612c73929190613ebd565b602060405180830381865afa158015612c90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cb49190613ee6565b905060008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e1d5781861015612d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d25906143c1565b60405180910390fd5b8186612d3a91906140f6565b95508a8a86818110612d4f57612d4e613bd6565b5b9050602002016020810190612d6491906136df565b73ffffffffffffffffffffffffffffffffffffffff16634c4cbac4838b8b89818110612d9357612d92613bd6565b5b9050602002810190612da59190613c14565b8060000190612db49190613c3c565b336040518563ffffffff1660e01b8152600401612dd39392919061403a565b60206040518083038185885af1158015612df1573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e169190613ee6565b9050612ef9565b8a8a86818110612e3057612e2f613bd6565b5b9050602002016020810190612e4591906136df565b73ffffffffffffffffffffffffffffffffffffffff16634c4cbac48a8a88818110612e7357612e72613bd6565b5b9050602002810190612e859190613c14565b8060000190612e949190613c3c565b336040518463ffffffff1660e01b8152600401612eb39392919061403a565b6020604051808303816000875af1158015612ed2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ef69190613ee6565b90505b612f048784836130af565b8a8a86818110612f1757612f16613bd6565b5b9050602002016020810190612f2c91906136df565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2611defd53a4a87419d2078554db30aeaddd9ddfdc5990da2bbdc8d589f5e4d68b8b89818110612f8d57612f8c613bd6565b5b9050602002810190612f9f9190613c14565b8060000190612fae9190613c3c565b868c604051612fc09493929190613f8e565b60405180910390a384600101945050505050612a1d565b506000811115613029573373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613027573d6000803e3d6000fd5b505b505050505050565b6130396133b1565b73ffffffffffffffffffffffffffffffffffffffff16613057611b84565b73ffffffffffffffffffffffffffffffffffffffff16146130ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a49061442d565b60405180910390fd5b565b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130fe919061412a565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461325c57600061315a600154670de0b6b3a7640000846133b99092919063ffffffff16565b90506000818361316a91906140f6565b905080600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131bb919061412a565b9250508190555081600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461324e919061412a565b9250508190555050506132e8565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036132e75780600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132df919061412a565b925050819055505b5b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b6000828402905082848204148415176133d157600080fd5b81810490509392505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061341c826133f1565b9050919050565b61342c81613411565b811461343757600080fd5b50565b60008135905061344981613423565b92915050565b6000819050919050565b6134628161344f565b811461346d57600080fd5b50565b60008135905061347f81613459565b92915050565b6000806040838503121561349c5761349b6133e7565b5b60006134aa8582860161343a565b92505060206134bb85828601613470565b9150509250929050565b600080604083850312156134dc576134db6133e7565b5b60006134ea8582860161343a565b92505060206134fb8582860161343a565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f84011261352a57613529613505565b5b8235905067ffffffffffffffff8111156135475761354661350a565b5b6020830191508360208202830111156135635761356261350f565b5b9250929050565b60008083601f8401126135805761357f613505565b5b8235905067ffffffffffffffff81111561359d5761359c61350a565b5b6020830191508360208202830111156135b9576135b861350f565b5b9250929050565b60008083601f8401126135d6576135d5613505565b5b8235905067ffffffffffffffff8111156135f3576135f261350a565b5b60208301915083602082028301111561360f5761360e61350f565b5b9250929050565b60008060008060008060006080888a031215613635576136346133e7565b5b600088013567ffffffffffffffff811115613653576136526133ec565b5b61365f8a828b01613514565b9750975050602088013567ffffffffffffffff811115613682576136816133ec565b5b61368e8a828b0161356a565b9550955050604088013567ffffffffffffffff8111156136b1576136b06133ec565b5b6136bd8a828b016135c0565b935093505060606136d08a828b0161343a565b91505092959891949750929550565b6000602082840312156136f5576136f46133e7565b5b60006137038482850161343a565b91505092915050565b60008115159050919050565b6137218161370c565b811461372c57600080fd5b50565b60008135905061373e81613718565b92915050565b6000806040838503121561375b5761375a6133e7565b5b60006137698582860161343a565b925050602061377a8582860161372f565b9150509250929050565b6000806000806040858703121561379e5761379d6133e7565b5b600085013567ffffffffffffffff8111156137bc576137bb6133ec565b5b6137c887828801613514565b9450945050602085013567ffffffffffffffff8111156137eb576137ea6133ec565b5b6137f78782880161356a565b925092505092959194509250565b60008060006040848603121561381e5761381d6133e7565b5b600061382c8682870161343a565b935050602084013567ffffffffffffffff81111561384d5761384c6133ec565b5b613859868287016135c0565b92509250509250925092565b61386e8161344f565b82525050565b60006020820190506138896000830184613865565b92915050565b600080600080608085870312156138a9576138a86133e7565b5b60006138b78782880161343a565b94505060206138c88782880161343a565b93505060406138d987828801613470565b92505060606138ea8782880161343a565b91505092959194509250565b6138ff8161370c565b82525050565b600060208201905061391a60008301846138f6565b92915050565b61392981613411565b82525050565b60006020820190506139446000830184613920565b92915050565b600080600080600060a08688031215613966576139656133e7565b5b60006139748882890161343a565b95505060206139858882890161343a565b945050604061399688828901613470565b93505060606139a788828901613470565b92505060806139b888828901613470565b9150509295509295909350565b600080600080606085870312156139df576139de6133e7565b5b60006139ed8782880161343a565b945050602085013567ffffffffffffffff811115613a0e57613a0d6133ec565b5b613a1a878288016135c0565b93509350506040613a2d8782880161343a565b91505092959194509250565b600080600060608486031215613a5257613a516133e7565b5b6000613a608682870161343a565b9350506020613a7186828701613470565b9250506040613a828682870161343a565b9150509250925092565b600080600080600060808688031215613aa857613aa76133e7565b5b6000613ab68882890161343a565b955050602086013567ffffffffffffffff811115613ad757613ad66133ec565b5b613ae3888289016135c0565b94509450506040613af688828901613470565b9250506060613b078882890161343a565b9150509295509295909350565b600060208284031215613b2a57613b296133e7565b5b6000613b3884828501613470565b91505092915050565b600080600080600060608688031215613b5d57613b5c6133e7565b5b600086013567ffffffffffffffff811115613b7b57613b7a6133ec565b5b613b8788828901613514565b9550955050602086013567ffffffffffffffff811115613baa57613ba96133ec565b5b613bb68882890161356a565b93509350506040613bc98882890161343a565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b600082356001602003833603038112613c3057613c2f613c05565b5b80830191505092915050565b60008083356001602003843603038112613c5957613c58613c05565b5b80840192508235915067ffffffffffffffff821115613c7b57613c7a613c0a565b5b602083019250602082023603831315613c9757613c96613c0f565b5b509250929050565b600082825260208201905092915050565b7f4e6f742030000000000000000000000000000000000000000000000000000000600082015250565b6000613ce6600583613c9f565b9150613cf182613cb0565b602082019050919050565b60006020820190508181036000830152613d1581613cd9565b9050919050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613d6a82613d21565b810181811067ffffffffffffffff82111715613d8957613d88613d32565b5b80604052505050565b6000613d9c6133dd565b9050613da88282613d61565b919050565b600081519050613dbc81613459565b92915050565b600060a08284031215613dd857613dd7613d1c565b5b613de260a0613d92565b90506000613df284828501613dad565b6000830152506020613e0684828501613dad565b6020830152506040613e1a84828501613dad565b6040830152506060613e2e84828501613dad565b6060830152506080613e4284828501613dad565b60808301525092915050565b600060a08284031215613e6457613e636133e7565b5b6000613e7284828501613dc2565b91505092915050565b600081519050613e8a81613423565b92915050565b600060208284031215613ea657613ea56133e7565b5b6000613eb484828501613e7b565b91505092915050565b6000604082019050613ed26000830185613865565b613edf6020830184613865565b9392505050565b600060208284031215613efc57613efb6133e7565b5b6000613f0a84828501613dad565b91505092915050565b600082825260208201905092915050565b600080fd5b82818337505050565b6000613f3e8385613f13565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115613f7157613f70613f24565b5b602083029250613f82838584613f29565b82840190509392505050565b60006060820190508181036000830152613fa9818688613f32565b9050613fb86020830185613865565b613fc56040830184613920565b95945050505050565b7f6f6e6c79466163746f7279000000000000000000000000000000000000000000600082015250565b6000614004600b83613c9f565b915061400f82613fce565b602082019050919050565b6000602082019050818103600083015261403381613ff7565b9050919050565b60006040820190508181036000830152614055818587613f32565b90506140646020830184613920565b949350505050565b60006020820190508181036000830152614087818486613f32565b90509392505050565b60006060820190506140a56000830186613920565b6140b26020830185613865565b6140bf6040830184613920565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006141018261344f565b915061410c8361344f565b9250828203905081811115614124576141236140c7565b5b92915050565b60006141358261344f565b91506141408361344f565b9250828201905080821115614158576141576140c7565b5b92915050565b7f4e6f742046656500000000000000000000000000000000000000000000000000600082015250565b6000614194600783613c9f565b915061419f8261415e565b602082019050919050565b600060208201905081810360008301526141c381614187565b9050919050565b60006040820190506141df6000830185613920565b6141ec6020830184613865565b9392505050565b60008151905061420281613718565b92915050565b60006020828403121561421e5761421d6133e7565b5b600061422c848285016141f3565b91505092915050565b600060a08201905061424a6000830188613920565b6142576020830187613865565b6142646040830186613865565b6142716060830185613865565b61427e6080830184613920565b9695505050505050565b600060408201905081810360008301526142a3818587613f32565b90506142b26020830184613865565b949350505050565b60006040820190506142cf6000830185613865565b6142dc6020830184613920565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061433f602683613c9f565b915061434a826142e3565b604082019050919050565b6000602082019050818103600083015261436e81614332565b9050919050565b7f6e6f7420656e6f67682076616c75650000000000000000000000000000000000600082015250565b60006143ab600f83613c9f565b91506143b682614375565b602082019050919050565b600060208201905081810360008301526143da8161439e565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614417602083613c9f565b9150614422826143e1565b602082019050919050565b600060208201905081810360008301526144468161440a565b905091905056fea2646970667358221220dda5a4ce2536514f0903596cd3704c0b999a32c2aec1a9e9ff0944a488c65cc664736f6c634300081100330000000000000000000000000000000000000000000000000429d069189e0000
Deployed Bytecode
0x6080604052600436106102085760003560e01c80638da5cb5b11610118578063d86ee259116100a0578063f2fde38b1161006f578063f2fde38b1461070f578063f9bb21bf14610738578063fc5a0df514610761578063fc9d16cd1461079e578063fd7bb9b5146107c75761020f565b8063d86ee25914610671578063dd4b533f1461068d578063e1549300146106b6578063ec217ea6146106d25761020f565b80639c9206d2116100e75780639c9206d214610587578063b65bfbf0146105b0578063bc0a0bd0146105ed578063cab5c30e14610618578063ce9061fa146106345761020f565b80638da5cb5b146104e15780639175a5881461050c57806394a36eac146105355780639bdedea51461055e5761020f565b80633d9b66a81161019b5780636a64d3d21161016a5780636a64d3d2146103fe578063715018a61461043b5780637a4fda3d1461045257806386b99ec11461048f5780638d3b6eb3146104b85761020f565b80633d9b66a81461033f57806348f900551461037c5780635617811d146103a5578063668fb6dc146103e25761020f565b806320bec12c116101d757806320bec12c1461029b5780632e091d53146102c457806330d6d64d146102ed57806338e8a1d1146103165761020f565b80630f4c2192146102115780631824d4391461023a57806318892c5d146102635780631ac3ddeb1461027f5761020f565b3661020f57005b005b34801561021d57600080fd5b5061023860048036038101906102339190613485565b6107e3565b005b34801561024657600080fd5b50610261600480360381019061025c91906134c5565b61085a565b005b61027d60048036038101906102789190613616565b6108d1565b005b610299600480360381019061029491906136df565b610d4d565b005b3480156102a757600080fd5b506102c260048036038101906102bd9190613744565b610dbb565b005b3480156102d057600080fd5b506102eb60048036038101906102e69190613784565b610ea0565b005b3480156102f957600080fd5b50610314600480360381019061030f9190613805565b611048565b005b34801561032257600080fd5b5061033d60048036038101906103389190613744565b611123565b005b34801561034b57600080fd5b50610366600480360381019061036191906134c5565b6111d4565b6040516103739190613874565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e919061388f565b61125b565b005b3480156103b157600080fd5b506103cc60048036038101906103c791906136df565b6112d0565b6040516103d99190613874565b60405180910390f35b6103fc60048036038101906103f791906136df565b61148d565b005b34801561040a57600080fd5b50610425600480360381019061042091906136df565b6119a0565b6040516104329190613905565b60405180910390f35b34801561044757600080fd5b506104506119f6565b005b34801561045e57600080fd5b50610479600480360381019061047491906136df565b611a0a565b6040516104869190613874565b60405180910390f35b34801561049b57600080fd5b506104b660048036038101906104b19190613744565b611a22565b005b3480156104c457600080fd5b506104df60048036038101906104da9190613744565b611ad3565b005b3480156104ed57600080fd5b506104f6611b84565b604051610503919061392f565b60405180910390f35b34801561051857600080fd5b50610533600480360381019061052e9190613805565b611bad565b005b34801561054157600080fd5b5061055c6004803603810190610557919061394a565b611c88565b005b34801561056a57600080fd5b5061058560048036038101906105809190613805565b611d45565b005b34801561059357600080fd5b506105ae60048036038101906105a99190613744565b611e38565b005b3480156105bc57600080fd5b506105d760048036038101906105d291906136df565b611ee9565b6040516105e49190613905565b60405180910390f35b3480156105f957600080fd5b50610602611f3f565b60405161060f9190613874565b60405180910390f35b610632600480360381019061062d91906139c5565b611f45565b005b34801561064057600080fd5b5061065b600480360381019061065691906136df565b6121ff565b6040516106689190613905565b60405180910390f35b61068b60048036038101906106869190613a39565b612255565b005b34801561069957600080fd5b506106b460048036038101906106af9190613a8c565b6122c7565b005b6106d060048036038101906106cb91906136df565b612583565b005b3480156106de57600080fd5b506106f960048036038101906106f491906136df565b612823565b6040516107069190613905565b60405180910390f35b34801561071b57600080fd5b50610736600480360381019061073191906136df565b612879565b005b34801561074457600080fd5b5061075f600480360381019061075a9190613b14565b6128fc565b005b34801561076d57600080fd5b50610788600480360381019061078391906136df565b61290e565b6040516107959190613905565b60405180910390f35b3480156107aa57600080fd5b506107c560048036038101906107c09190613744565b612964565b005b6107e160048036038101906107dc9190613b41565b612a15565b005b6107eb613031565b8173ffffffffffffffffffffffffffffffffffffffff166341ede57e826040518263ffffffff1660e01b81526004016108249190613874565b600060405180830381600087803b15801561083e57600080fd5b505af1158015610852573d6000803e3d6000fd5b505050505050565b610862613031565b8173ffffffffffffffffffffffffffffffffffffffff1663c0d78655826040518263ffffffff1660e01b815260040161089b919061392f565b600060405180830381600087803b1580156108b557600080fd5b505af11580156108c9573d6000803e3d6000fd5b505050505050565b60005b87879050811015610d435760008686838181106108f4576108f3613bd6565b5b90506020028101906109069190613c14565b80600001906109159190613c3c565b905011610957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094e90613cfc565b60405180910390fd5b600088888381811061096c5761096b613bd6565b5b905060200201602081019061098191906136df565b73ffffffffffffffffffffffffffffffffffffffff166360246c886040518163ffffffff1660e01b815260040160a060405180830381865afa1580156109cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ef9190613e4e565b90506000898984818110610a0657610a05613bd6565b5b9050602002016020810190610a1b91906136df565b73ffffffffffffffffffffffffffffffffffffffff16633013ce296040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610a67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8b9190613e90565b905060008a8a85818110610aa257610aa1613bd6565b5b9050602002016020810190610ab791906136df565b73ffffffffffffffffffffffffffffffffffffffff166388e5cd1f8a8a87818110610ae557610ae4613bd6565b5b9050602002810190610af79190613c14565b8060000190610b069190613c3c565b905085600001516040518363ffffffff1660e01b8152600401610b2a929190613ebd565b602060405180830381865afa158015610b47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6b9190613ee6565b905060008b8b86818110610b8257610b81613bd6565b5b9050602002016020810190610b9791906136df565b73ffffffffffffffffffffffffffffffffffffffff1663244117b48b8b88818110610bc557610bc4613bd6565b5b9050602002810190610bd79190613c14565b8060000190610be69190613c3c565b8b8b8a818110610bf957610bf8613bd6565b5b90506020020135336040518563ffffffff1660e01b8152600401610c209493929190613f8e565b6020604051808303816000875af1158015610c3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c639190613ee6565b9050610c708684836130af565b8b8b86818110610c8357610c82613bd6565b5b9050602002016020810190610c9891906136df565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8f3673bd023cc34f252b9e7d0a0dd6496592b87006673a974d1d621b5a93e15e8c8c89818110610cf957610cf8613bd6565b5b9050602002810190610d0b9190613c14565b8060000190610d1a9190613c3c565b868b604051610d2c9493929190613f8e565b60405180910390a3846001019450505050506108d4565b5050505050505050565b8073ffffffffffffffffffffffffffffffffffffffff16631ac3ddeb336040518263ffffffff1660e01b8152600401610d86919061392f565b600060405180830381600087803b158015610da057600080fd5b505af1158015610db4573d6000803e3d6000fd5b5050505050565b60011515600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610e4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e459061401a565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff167f16f5dd05aa4fb9d233806a07de5cc48d6893f315e214cce8974b6e951b655c6b82604051610e949190613905565b60405180910390a25050565b60005b8484905081101561104157848482818110610ec157610ec0613bd6565b5b9050602002016020810190610ed691906136df565b73ffffffffffffffffffffffffffffffffffffffff16632f7e0b2e848484818110610f0457610f03613bd6565b5b9050602002810190610f169190613c14565b8060000190610f259190613c3c565b336040518463ffffffff1660e01b8152600401610f449392919061403a565b600060405180830381600087803b158015610f5e57600080fd5b505af1158015610f72573d6000803e3d6000fd5b50505050848482818110610f8957610f88613bd6565b5b9050602002016020810190610f9e91906136df565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f7c0a46ce3acb6a46fffede953868812e9045bc3e16fb727004e10272ddfad74e858585818110610fff57610ffe613bd6565b5b90506020028101906110119190613c14565b80600001906110209190613c3c565b60405161102e92919061406c565b60405180910390a3806001019050610ea3565b5050505050565b8273ffffffffffffffffffffffffffffffffffffffff1663f968f33b8383336040518463ffffffff1660e01b81526004016110859392919061403a565b600060405180830381600087803b15801561109f57600080fd5b505af11580156110b3573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167ff4a476d3c8307c48588449bd904be8e33979939dd8cddeca9a78f6d336311576848460405161111692919061406c565b60405180910390a3505050565b61112b613031565b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fc01b4a3b37bda477d1b60e1d10e03272f94fbe6d08b3c72f8a4a7e35bcd93b02826040516111c89190613905565b60405180910390a25050565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b8373ffffffffffffffffffffffffffffffffffffffff1663a09f32118484846040518463ffffffff1660e01b815260040161129893929190614090565b600060405180830381600087803b1580156112b257600080fd5b505af11580156112c6573d6000803e3d6000fd5b5050505050505050565b600080600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036113ac576000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544761139691906140f6565b905080826113a4919061412a565b915050611484565b6000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611427919061392f565b602060405180830381865afa158015611444573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114689190613ee6565b61147291906140f6565b90508082611480919061412a565b9150505b80915050919050565b611495613031565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036116a457600082118061155f57508047115b61159e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611595906141aa565b60405180910390fd5b6000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461163291906140f6565b925050819055506000814761164791906140f6565b90508083611655919061412a565b92503373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f1935050505015801561169d573d6000803e3d6000fd5b505061199b565b600082118061176a5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611727919061392f565b602060405180830381865afa158015611744573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117689190613ee6565b115b6117a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a0906141aa565b60405180910390fd5b6000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461183d91906140f6565b925050819055506000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016118bf919061392f565b602060405180830381865afa1580156118dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119009190613ee6565b61190a91906140f6565b90508083611918919061412a565b92508373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33856040518363ffffffff1660e01b81526004016119559291906141ca565b6020604051808303816000875af1158015611974573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119989190614208565b50505b505050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6119fe613031565b611a0860006132ed565b565b60076020528060005260406000206000915090505481565b611a2a613031565b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f11b4c2b6450da8949b70f94de747d396f0a4fcedf7ffefe7332d323dd210258a82604051611ac79190613905565b60405180910390a25050565b611adb613031565b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fa5863f03ddba3042b23731d7fba300e6f264d1c0cabf85630064d6ecbd01853b82604051611b789190613905565b60405180910390a25050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8273ffffffffffffffffffffffffffffffffffffffff16632f7e0b2e8383336040518463ffffffff1660e01b8152600401611bea9392919061403a565b600060405180830381600087803b158015611c0457600080fd5b505af1158015611c18573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f7c0a46ce3acb6a46fffede953868812e9045bc3e16fb727004e10272ddfad74e8484604051611c7b92919061406c565b60405180910390a3505050565b8473ffffffffffffffffffffffffffffffffffffffff1663f829e9fc85858585336040518663ffffffff1660e01b8152600401611cc9959493929190614235565b600060405180830381600087803b158015611ce357600080fd5b505af1158015611cf7573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167f02f0328fc2c71376910c0a5e2be622213d6eeb426118ef65ae5b3593864b668160405160405180910390a25050505050565b60008373ffffffffffffffffffffffffffffffffffffffff16632c7e49158484336040518463ffffffff1660e01b8152600401611d849392919061403a565b6020604051808303816000875af1158015611da3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc79190613ee6565b90508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fcd715c6f851d1dc11755804a0c2e5da8792da275e44c1ee713771d7479bce8fd858585604051611e2a93929190614288565b60405180910390a350505050565b611e40613031565b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f1c3c313576907bc91320c98e637bcadb2f200b2af1b9ba3036662819961ae0d482604051611edd9190613905565b60405180910390a25050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60015481565b60008383905011611f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8290613cfc565b60405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166360246c886040518163ffffffff1660e01b815260040160a060405180830381865afa158015611fd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ffc9190613e4e565b905060008573ffffffffffffffffffffffffffffffffffffffff16633013ce296040518163ffffffff1660e01b81526004016020604051808303816000875af115801561204d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120719190613e90565b905060008673ffffffffffffffffffffffffffffffffffffffff166365b962318787905085600001516040518363ffffffff1660e01b81526004016120b7929190613ebd565b602060405180830381865afa1580156120d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120f89190613ee6565b905060008773ffffffffffffffffffffffffffffffffffffffff16634c4cbac4348989336040518563ffffffff1660e01b815260040161213a9392919061403a565b60206040518083038185885af1158015612158573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061217d9190613ee6565b905061218a8584836130af565b8773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2611defd53a4a87419d2078554db30aeaddd9ddfdc5990da2bbdc8d589f5e4d68989868a6040516121ed9493929190613f8e565b60405180910390a35050505050505050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b8273ffffffffffffffffffffffffffffffffffffffff1663efb1765983836040518363ffffffff1660e01b81526004016122909291906142ba565b600060405180830381600087803b1580156122aa57600080fd5b505af11580156122be573d6000803e3d6000fd5b50505050505050565b6000848490501161230d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230490613cfc565b60405180910390fd5b60008573ffffffffffffffffffffffffffffffffffffffff166360246c886040518163ffffffff1660e01b815260040160a060405180830381865afa15801561235a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061237e9190613e4e565b905060008673ffffffffffffffffffffffffffffffffffffffff16633013ce296040518163ffffffff1660e01b81526004016020604051808303816000875af11580156123cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f39190613e90565b905060008773ffffffffffffffffffffffffffffffffffffffff166388e5cd1f8888905085600001516040518363ffffffff1660e01b8152600401612439929190613ebd565b602060405180830381865afa158015612456573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061247a9190613ee6565b905060008873ffffffffffffffffffffffffffffffffffffffff1663244117b4898989336040518563ffffffff1660e01b81526004016124bd9493929190613f8e565b6020604051808303816000875af11580156124dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125009190613ee6565b905061250d8584836130af565b8873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8f3673bd023cc34f252b9e7d0a0dd6496592b87006673a974d1d621b5a93e15e8a8a868a6040516125709493929190613f8e565b60405180910390a3505050505050505050565b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111612647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263e906141aa565b60405180910390fd5b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461271891906140f6565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361279f573373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612799573d6000803e3d6000fd5b5061281f565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016127da9291906141ca565b6020604051808303816000875af11580156127f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061281d9190614208565b505b5050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b612881613031565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036128f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e790614355565b60405180910390fd5b6128f9816132ed565b50565b612904613031565b8060018190555050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61296c613031565b80600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167ff1a7d235323609d0e57be8421b6b457060a5778dce9db39be3d530b141a3c70982604051612a099190613905565b60405180910390a25050565b600034905060005b86869050811015612fd7576000858583818110612a3d57612a3c613bd6565b5b9050602002810190612a4f9190613c14565b8060000190612a5e9190613c3c565b905011612aa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9790613cfc565b60405180910390fd5b6000878783818110612ab557612ab4613bd6565b5b9050602002016020810190612aca91906136df565b73ffffffffffffffffffffffffffffffffffffffff166360246c886040518163ffffffff1660e01b815260040160a060405180830381865afa158015612b14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b389190613e4e565b90506000888884818110612b4f57612b4e613bd6565b5b9050602002016020810190612b6491906136df565b73ffffffffffffffffffffffffffffffffffffffff16633013ce296040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612bb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bd49190613e90565b90506000898985818110612beb57612bea613bd6565b5b9050602002016020810190612c0091906136df565b73ffffffffffffffffffffffffffffffffffffffff166365b96231898987818110612c2e57612c2d613bd6565b5b9050602002810190612c409190613c14565b8060000190612c4f9190613c3c565b905085600001516040518363ffffffff1660e01b8152600401612c73929190613ebd565b602060405180830381865afa158015612c90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cb49190613ee6565b905060008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e1d5781861015612d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d25906143c1565b60405180910390fd5b8186612d3a91906140f6565b95508a8a86818110612d4f57612d4e613bd6565b5b9050602002016020810190612d6491906136df565b73ffffffffffffffffffffffffffffffffffffffff16634c4cbac4838b8b89818110612d9357612d92613bd6565b5b9050602002810190612da59190613c14565b8060000190612db49190613c3c565b336040518563ffffffff1660e01b8152600401612dd39392919061403a565b60206040518083038185885af1158015612df1573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e169190613ee6565b9050612ef9565b8a8a86818110612e3057612e2f613bd6565b5b9050602002016020810190612e4591906136df565b73ffffffffffffffffffffffffffffffffffffffff16634c4cbac48a8a88818110612e7357612e72613bd6565b5b9050602002810190612e859190613c14565b8060000190612e949190613c3c565b336040518463ffffffff1660e01b8152600401612eb39392919061403a565b6020604051808303816000875af1158015612ed2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ef69190613ee6565b90505b612f048784836130af565b8a8a86818110612f1757612f16613bd6565b5b9050602002016020810190612f2c91906136df565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2611defd53a4a87419d2078554db30aeaddd9ddfdc5990da2bbdc8d589f5e4d68b8b89818110612f8d57612f8c613bd6565b5b9050602002810190612f9f9190613c14565b8060000190612fae9190613c3c565b868c604051612fc09493929190613f8e565b60405180910390a384600101945050505050612a1d565b506000811115613029573373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613027573d6000803e3d6000fd5b505b505050505050565b6130396133b1565b73ffffffffffffffffffffffffffffffffffffffff16613057611b84565b73ffffffffffffffffffffffffffffffffffffffff16146130ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a49061442d565b60405180910390fd5b565b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130fe919061412a565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461325c57600061315a600154670de0b6b3a7640000846133b99092919063ffffffff16565b90506000818361316a91906140f6565b905080600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131bb919061412a565b9250508190555081600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461324e919061412a565b9250508190555050506132e8565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036132e75780600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132df919061412a565b925050819055505b5b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b6000828402905082848204148415176133d157600080fd5b81810490509392505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061341c826133f1565b9050919050565b61342c81613411565b811461343757600080fd5b50565b60008135905061344981613423565b92915050565b6000819050919050565b6134628161344f565b811461346d57600080fd5b50565b60008135905061347f81613459565b92915050565b6000806040838503121561349c5761349b6133e7565b5b60006134aa8582860161343a565b92505060206134bb85828601613470565b9150509250929050565b600080604083850312156134dc576134db6133e7565b5b60006134ea8582860161343a565b92505060206134fb8582860161343a565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f84011261352a57613529613505565b5b8235905067ffffffffffffffff8111156135475761354661350a565b5b6020830191508360208202830111156135635761356261350f565b5b9250929050565b60008083601f8401126135805761357f613505565b5b8235905067ffffffffffffffff81111561359d5761359c61350a565b5b6020830191508360208202830111156135b9576135b861350f565b5b9250929050565b60008083601f8401126135d6576135d5613505565b5b8235905067ffffffffffffffff8111156135f3576135f261350a565b5b60208301915083602082028301111561360f5761360e61350f565b5b9250929050565b60008060008060008060006080888a031215613635576136346133e7565b5b600088013567ffffffffffffffff811115613653576136526133ec565b5b61365f8a828b01613514565b9750975050602088013567ffffffffffffffff811115613682576136816133ec565b5b61368e8a828b0161356a565b9550955050604088013567ffffffffffffffff8111156136b1576136b06133ec565b5b6136bd8a828b016135c0565b935093505060606136d08a828b0161343a565b91505092959891949750929550565b6000602082840312156136f5576136f46133e7565b5b60006137038482850161343a565b91505092915050565b60008115159050919050565b6137218161370c565b811461372c57600080fd5b50565b60008135905061373e81613718565b92915050565b6000806040838503121561375b5761375a6133e7565b5b60006137698582860161343a565b925050602061377a8582860161372f565b9150509250929050565b6000806000806040858703121561379e5761379d6133e7565b5b600085013567ffffffffffffffff8111156137bc576137bb6133ec565b5b6137c887828801613514565b9450945050602085013567ffffffffffffffff8111156137eb576137ea6133ec565b5b6137f78782880161356a565b925092505092959194509250565b60008060006040848603121561381e5761381d6133e7565b5b600061382c8682870161343a565b935050602084013567ffffffffffffffff81111561384d5761384c6133ec565b5b613859868287016135c0565b92509250509250925092565b61386e8161344f565b82525050565b60006020820190506138896000830184613865565b92915050565b600080600080608085870312156138a9576138a86133e7565b5b60006138b78782880161343a565b94505060206138c88782880161343a565b93505060406138d987828801613470565b92505060606138ea8782880161343a565b91505092959194509250565b6138ff8161370c565b82525050565b600060208201905061391a60008301846138f6565b92915050565b61392981613411565b82525050565b60006020820190506139446000830184613920565b92915050565b600080600080600060a08688031215613966576139656133e7565b5b60006139748882890161343a565b95505060206139858882890161343a565b945050604061399688828901613470565b93505060606139a788828901613470565b92505060806139b888828901613470565b9150509295509295909350565b600080600080606085870312156139df576139de6133e7565b5b60006139ed8782880161343a565b945050602085013567ffffffffffffffff811115613a0e57613a0d6133ec565b5b613a1a878288016135c0565b93509350506040613a2d8782880161343a565b91505092959194509250565b600080600060608486031215613a5257613a516133e7565b5b6000613a608682870161343a565b9350506020613a7186828701613470565b9250506040613a828682870161343a565b9150509250925092565b600080600080600060808688031215613aa857613aa76133e7565b5b6000613ab68882890161343a565b955050602086013567ffffffffffffffff811115613ad757613ad66133ec565b5b613ae3888289016135c0565b94509450506040613af688828901613470565b9250506060613b078882890161343a565b9150509295509295909350565b600060208284031215613b2a57613b296133e7565b5b6000613b3884828501613470565b91505092915050565b600080600080600060608688031215613b5d57613b5c6133e7565b5b600086013567ffffffffffffffff811115613b7b57613b7a6133ec565b5b613b8788828901613514565b9550955050602086013567ffffffffffffffff811115613baa57613ba96133ec565b5b613bb68882890161356a565b93509350506040613bc98882890161343a565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b600082356001602003833603038112613c3057613c2f613c05565b5b80830191505092915050565b60008083356001602003843603038112613c5957613c58613c05565b5b80840192508235915067ffffffffffffffff821115613c7b57613c7a613c0a565b5b602083019250602082023603831315613c9757613c96613c0f565b5b509250929050565b600082825260208201905092915050565b7f4e6f742030000000000000000000000000000000000000000000000000000000600082015250565b6000613ce6600583613c9f565b9150613cf182613cb0565b602082019050919050565b60006020820190508181036000830152613d1581613cd9565b9050919050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613d6a82613d21565b810181811067ffffffffffffffff82111715613d8957613d88613d32565b5b80604052505050565b6000613d9c6133dd565b9050613da88282613d61565b919050565b600081519050613dbc81613459565b92915050565b600060a08284031215613dd857613dd7613d1c565b5b613de260a0613d92565b90506000613df284828501613dad565b6000830152506020613e0684828501613dad565b6020830152506040613e1a84828501613dad565b6040830152506060613e2e84828501613dad565b6060830152506080613e4284828501613dad565b60808301525092915050565b600060a08284031215613e6457613e636133e7565b5b6000613e7284828501613dc2565b91505092915050565b600081519050613e8a81613423565b92915050565b600060208284031215613ea657613ea56133e7565b5b6000613eb484828501613e7b565b91505092915050565b6000604082019050613ed26000830185613865565b613edf6020830184613865565b9392505050565b600060208284031215613efc57613efb6133e7565b5b6000613f0a84828501613dad565b91505092915050565b600082825260208201905092915050565b600080fd5b82818337505050565b6000613f3e8385613f13565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115613f7157613f70613f24565b5b602083029250613f82838584613f29565b82840190509392505050565b60006060820190508181036000830152613fa9818688613f32565b9050613fb86020830185613865565b613fc56040830184613920565b95945050505050565b7f6f6e6c79466163746f7279000000000000000000000000000000000000000000600082015250565b6000614004600b83613c9f565b915061400f82613fce565b602082019050919050565b6000602082019050818103600083015261403381613ff7565b9050919050565b60006040820190508181036000830152614055818587613f32565b90506140646020830184613920565b949350505050565b60006020820190508181036000830152614087818486613f32565b90509392505050565b60006060820190506140a56000830186613920565b6140b26020830185613865565b6140bf6040830184613920565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006141018261344f565b915061410c8361344f565b9250828203905081811115614124576141236140c7565b5b92915050565b60006141358261344f565b91506141408361344f565b9250828201905080821115614158576141576140c7565b5b92915050565b7f4e6f742046656500000000000000000000000000000000000000000000000000600082015250565b6000614194600783613c9f565b915061419f8261415e565b602082019050919050565b600060208201905081810360008301526141c381614187565b9050919050565b60006040820190506141df6000830185613920565b6141ec6020830184613865565b9392505050565b60008151905061420281613718565b92915050565b60006020828403121561421e5761421d6133e7565b5b600061422c848285016141f3565b91505092915050565b600060a08201905061424a6000830188613920565b6142576020830187613865565b6142646040830186613865565b6142716060830185613865565b61427e6080830184613920565b9695505050505050565b600060408201905081810360008301526142a3818587613f32565b90506142b26020830184613865565b949350505050565b60006040820190506142cf6000830185613865565b6142dc6020830184613920565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061433f602683613c9f565b915061434a826142e3565b604082019050919050565b6000602082019050818103600083015261436e81614332565b9050919050565b7f6e6f7420656e6f67682076616c75650000000000000000000000000000000000600082015250565b60006143ab600f83613c9f565b91506143b682614375565b602082019050919050565b600060208201905081810360008301526143da8161439e565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614417602083613c9f565b9150614422826143e1565b602082019050919050565b600060208201905081810360008301526144468161440a565b905091905056fea2646970667358221220dda5a4ce2536514f0903596cd3704c0b999a32c2aec1a9e9ff0944a488c65cc664736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000429d069189e0000
-----Decoded View---------------
Arg [0] : _supporterFeeRatio (uint256): 300000000000000000
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000429d069189e0000
Deployed Bytecode Sourcemap
13587:16240:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28426:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28665:153;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17950:1193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23482:106;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28850:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16680:409;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21941:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27945:219;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26625:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24699:178;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26048:533;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22192:1282;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25837:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12697:103;;;;;;;;;;;;;:::i;:::-;;14411:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27405:237;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12049:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16483:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24192:315;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21671:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27689:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25161:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13715:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19182:746;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25393:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24515:149;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17128:781;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23632:552;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25625:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12955:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28217:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24937:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26845:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19969:1658;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28426:195;11935:13;:11;:13::i;:::-;28565:5:::1;28559:32;;;28592:20;28559:54;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;28426:195:::0;;:::o;28665:153::-;11935:13;:11;:13::i;:::-;28782:5:::1;28776:22;;;28799:10;28776:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;28665:153:::0;;:::o;17950:1193::-;18164:9;18159:977;18183:9;;:16;;18179:1;:20;18159:977;;;18258:1;18226:10;;18237:1;18226:13;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;:22;;;;;;;;:::i;:::-;:29;;:33;18218:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;18284:31;18324:9;;18334:1;18324:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;18318:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18284:67;;18366:21;18396:9;;18406:1;18396:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;18390:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18366:58;;18439:17;18465:9;;18475:1;18465:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;18459:35;;;18513:10;;18524:1;18513:13;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;:22;;;;;;;;:::i;:::-;:29;;18561:9;:19;;;18459:136;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18439:156;;18612:21;18642:9;;18652:1;18642:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;18636:32;;;18687:10;;18698:1;18687:13;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;:22;;;;;;;;:::i;:::-;18728:11;;18740:1;18728:14;;;;;;;:::i;:::-;;;;;;;;18761:10;18636:150;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18612:174;;18803:52;18814:10;18826:13;18841;18803:10;:52::i;:::-;18937:9;;18947:1;18937:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;18877:185;;18908:10;18877:185;;;18968:10;;18979:1;18968:13;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;:22;;;;;;;;:::i;:::-;19009:9;19037:10;18877:185;;;;;;;;;:::i;:::-;;;;;;;;19106:3;;;;;18203:933;;;;18159:977;;;;17950:1193;;;;;;;:::o;23482:106::-;23550:5;23544:24;;;23569:10;23544:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23482:106;:::o;28850:119::-;14914:4;14882:36;;:16;:28;14899:10;14882:28;;;;;;;;;;;;;;;;;;;;;;;;;:36;;;14874:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;28945:5:::1;28934:27;;;28952:8;28934:27;;;;;;:::i;:::-;;;;;;;;28850:119:::0;;:::o;16680:409::-;16812:9;16807:275;16831:9;;:16;;16827:1;:20;16807:275;;;16872:9;;16882:1;16872:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;16866:28;;;16895:10;;16906:1;16895:13;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;:22;;;;;;;;:::i;:::-;16919:10;16866:64;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16971:9;;16981:1;16971:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;16950:58;;16959:10;16950:58;;;16985:10;;16996:1;16985:13;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;:22;;;;;;;;:::i;:::-;16950:58;;;;;;;:::i;:::-;;;;;;;;17052:3;;;;;16807:275;;;;16680:409;;;;:::o;21941:206::-;22035:5;22029:28;;;22058:9;;22069:10;22029:51;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22122:5;22094:45;;22110:10;22094:45;;;22129:9;;22094:45;;;;;;;:::i;:::-;;;;;;;;21941:206;;;:::o;27945:219::-;11935:13;:11;:13::i;:::-;28095:8:::1;28062:18;:30;28081:10;28062:30;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;28135:10;28119:37;;;28147:8;28119:37;;;;;;:::i;:::-;;;;;;;;27945:219:::0;;:::o;26625:160::-;26714:7;26738:12;:24;26751:10;26738:24;;;;;;;;;;;;;;;:39;26763:13;26738:39;;;;;;;;;;;;;;;;26731:46;;26625:160;;;;:::o;24699:178::-;24816:5;24810:29;;;24840:11;24853:8;24863:5;24810:59;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24699:178;;;;:::o;26048:533::-;26122:7;26139:17;26159:16;:31;26176:13;26159:31;;;;;;;;;;;;;;;;26139:51;;26230:1;26205:27;;:13;:27;;;26201:346;;26249:22;26298:8;:23;26307:13;26298:23;;;;;;;;;;;;;;;;26274:21;:47;;;;:::i;:::-;26249:72;;26349:14;26336:27;;;;;:::i;:::-;;;26234:141;26201:346;;;26396:22;26470:8;:23;26479:13;26470:23;;;;;;;;;;;;;;;;26428:13;26421:31;;;26461:4;26421:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:72;;;;:::i;:::-;26396:97;;26521:14;26508:27;;;;;:::i;:::-;;;26381:166;26201:346;26564:9;26557:16;;;26048:533;;;:::o;22192:1282::-;11935:13;:11;:13::i;:::-;22314:17:::1;22334:16;:31;22351:13;22334:31;;;;;;;;;;;;;;;;22314:51;;22376:21;22400:8;:23;22409:13;22400:23;;;;;;;;;;;;;;;;22376:47;;22463:1;22438:27;;:13;:27;;::::0;22434:1033:::1;;22523:1;22511:9;:13;:54;;;;22552:13;22528:21;:37;22511:54;22503:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22650:1;22616:16;:31;22633:13;22616:31;;;;;;;;;;;;;;;:35;;;;22693:9;22666:8;:23;22675:13;22666:23;;;;;;;;;;;;;;;;:36;;;;;;;:::i;:::-;;;;;;;;22717:22;22766:13;22742:21;:37;;;;:::i;:::-;22717:62;;22807:14;22794:27;;;;;:::i;:::-;;;22885:10;22877:28;;:39;22906:9;22877:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;22467:461;22434:1033;;;22990:1;22978:9;:13;:89;;;;23044:8;:23;23053:13;23044:23;;;;;;;;;;;;;;;;23002:13;22995:31;;;23035:4;22995:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:72;22978:89;22970:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;23152:1;23118:16;:31;23135:13;23118:31;;;;;;;;;;;;;;;:35;;;;23195:9;23168:8;:23;23177:13;23168:23;;;;;;;;;;;;;;;;:36;;;;;;;:::i;:::-;;;;;;;;23219:22;23293:8;:23;23302:13;23293:23;;;;;;;;;;;;;;;;23251:13;23244:31;;;23284:4;23244:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:72;;;;:::i;:::-;23219:97;;23344:14;23331:27;;;;;:::i;:::-;;;23409:13;23402:30;;;23433:10;23445:9;23402:53;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22934:533;22434:1033;22303:1171;;22192:1282:::0;:::o;25837:168::-;25938:4;25967:18;:30;25986:10;25967:30;;;;;;;;;;;;;;;;;;;;;;;;;25960:37;;25837:168;;;:::o;12697:103::-;11935:13;:11;:13::i;:::-;12762:30:::1;12789:1;12762:18;:30::i;:::-;12697:103::o:0;14411:43::-;;;;;;;;;;;;;;;;;:::o;27405:237::-;11935:13;:11;:13::i;:::-;27567:8:::1;27528:21;:36;27550:13;27528:36;;;;;;;;;;;;;;;;:47;;;;;;;;;;;;;;;;;;27610:13;27591:43;;;27625:8;27591:43;;;;;;:::i;:::-;;;;;;;;27405:237:::0;;:::o;27119:::-;11935:13;:11;:13::i;:::-;27281:8:::1;27242:21;:36;27264:13;27242:36;;;;;;;;;;;;;;;;:47;;;;;;;;;;;;;;;;;;27324:13;27305:43;;;27339:8;27305:43;;;;;;:::i;:::-;;;;;;;;27119:237:::0;;:::o;12049:87::-;12095:7;12122:6;;;;;;;;;;;12115:13;;12049:87;:::o;16483:189::-;16572:5;16566:21;;;16588:9;;16599:10;16566:44;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16647:5;16626:38;;16635:10;16626:38;;;16654:9;;16626:38;;;;;;;:::i;:::-;;;;;;;;16483:189;;;:::o;24192:315::-;24387:5;24381:18;;;24400:13;24414;24428:9;24438:10;24450;24381:80;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24493:5;24477:22;;;;;;;;;;;;24192:315;;;;;:::o;21671:229::-;21757:17;21783:5;21777:24;;;21802:9;;21813:10;21777:47;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21757:67;;21864:5;21840:52;;21852:10;21840:52;;;21871:9;;21882;21840:52;;;;;;;;:::i;:::-;;;;;;;;21746:154;21671:229;;;:::o;27689:207::-;11935:13;:11;:13::i;:::-;27831:8:::1;27802:16;:26;27819:8;27802:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;27869:8;27855:33;;;27879:8;27855:33;;;;;;:::i;:::-;;;;;;;;27689:207:::0;;:::o;25161:180::-;25268:4;25297:21;:36;25319:13;25297:36;;;;;;;;;;;;;;;;;;;;;;;;;25290:43;;25161:180;;;:::o;13715:32::-;;;;:::o;19182:746::-;19358:1;19339:9;;:16;;:20;19331:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;19380:31;19420:5;19414:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19380:60;;19451:21;19481:5;19475:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19451:51;;19513:17;19539:5;19533:27;;;19575:9;;:16;;19606:9;:19;;;19533:103;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19513:123;;19649:21;19679:5;19673:25;;;19706:9;19731;;19755:10;19673:103;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19649:127;;19787:52;19798:10;19810:13;19825;19787:10;:52::i;:::-;19880:5;19855:65;;19868:10;19855:65;;;19887:9;;19898;19909:10;19855:65;;;;;;;;;:::i;:::-;;;;;;;;19320:608;;;;19182:746;;;;:::o;25393:180::-;25500:4;25529:21;:36;25551:13;25529:36;;;;;;;;;;;;;;;;;;;;;;;;;25522:43;;25393:180;;;:::o;24515:149::-;24618:5;24612:28;;;24641:7;24650:5;24612:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24515:149;;;:::o;17128:781::-;17328:1;17309:9;;:16;;:20;17301:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;17350:31;17390:5;17384:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17350:60;;17421:21;17451:5;17445:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17421:51;;17483:17;17509:5;17503:28;;;17546:9;;:16;;17577:9;:19;;;17503:104;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17483:124;;17620:21;17650:5;17644:25;;;17684:9;;17708:13;17736:10;17644:113;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17620:137;;17768:52;17779:10;17791:13;17806;17768:10;:52::i;:::-;17861:5;17836:65;;17849:10;17836:65;;;17868:9;;17879;17890:10;17836:65;;;;;;;;;:::i;:::-;;;;;;;;17290:619;;;;17128:781;;;;;:::o;23632:552::-;23711:17;23731:12;:24;23744:10;23731:24;;;;;;;;;;;;;;;:39;23756:13;23731:39;;;;;;;;;;;;;;;;23711:59;;23820:1;23808:9;:13;23800:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;23906:1;23864:12;:24;23877:10;23864:24;;;;;;;;;;;;;;;:39;23889:13;23864:39;;;;;;;;;;;;;;;:43;;;;23945:9;23918:8;:23;23927:13;23918:23;;;;;;;;;;;;;;;;:36;;;;;;;:::i;:::-;;;;;;;;24021:1;23996:27;;:13;:27;;;23992:185;;24048:10;24040:28;;:39;24069:9;24040:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23992:185;;;24119:13;24112:30;;;24143:10;24155:9;24112:53;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23992:185;23700:484;23632:552;:::o;25625:160::-;25722:4;25751:16;:26;25768:8;25751:26;;;;;;;;;;;;;;;;;;;;;;;;;25744:33;;25625:160;;;:::o;12955:201::-;11935:13;:11;:13::i;:::-;13064:1:::1;13044:22;;:8;:22;;::::0;13036:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;13120:28;13139:8;13120:18;:28::i;:::-;12955:201:::0;:::o;28217:156::-;11935:13;:11;:13::i;:::-;28344:21:::1;28324:17;:41;;;;28217:156:::0;:::o;24937:172::-;25040:4;25069:19;:32;25089:11;25069:32;;;;;;;;;;;;;;;;;;;;;;;;;25062:39;;24937:172;;;:::o;26845:225::-;11935:13;:11;:13::i;:::-;26999:8:::1;26964:19;:32;26984:11;26964:32;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;27040:11;27023:39;;;27053:8;27023:39;;;;;;:::i;:::-;;;;;;;;26845:225:::0;;:::o;19969:1658::-;20137:18;20158:9;20137:30;;20183:9;20178:1345;20202:9;;:16;;20198:1;:20;20178:1345;;;20277:1;20245:10;;20256:1;20245:13;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;:22;;;;;;;;:::i;:::-;:29;;:33;20237:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;20303:31;20343:9;;20353:1;20343:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;20337:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20303:67;;20385:21;20415:9;;20425:1;20415:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;20409:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20385:58;;20458:17;20484:9;;20494:1;20484:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;20478:34;;;20531:10;;20542:1;20531:13;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;:22;;;;;;;;:::i;:::-;:29;;20579:9;:19;;;20478:135;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20458:155;;20630:21;20695:1;20670:27;;:13;:27;;;20666:510;;20740:9;20726:10;:23;;20718:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;20802:9;20788:23;;;;;:::i;:::-;;;20854:9;;20864:1;20854:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;20848:32;;;20910:9;20939:10;;20950:1;20939:13;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;:22;;;;;;;;:::i;:::-;20963:10;20848:126;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20832:142;;20666:510;;;21037:9;;21047:1;21037:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;21031:32;;;21086:10;;21097:1;21086:13;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;:22;;;;;;;;:::i;:::-;21131:10;21031:129;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21015:145;;20666:510;21192:52;21203:10;21215:13;21230;21192:10;:52::i;:::-;21324:9;;21334:1;21324:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;21264:185;;21295:10;21264:185;;;21355:10;;21366:1;21355:13;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;:22;;;;;;;;:::i;:::-;21396:9;21424:10;21264:185;;;;;;;;;:::i;:::-;;;;;;;;21493:3;;;;;20222:1301;;;;20178:1345;;;;21550:1;21537:10;:14;21533:87;;;21576:10;21568:28;;:40;21597:10;21568:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21533:87;20126:1501;19969:1658;;;;;:::o;12214:132::-;12289:12;:10;:12::i;:::-;12278:23;;:7;:5;:7::i;:::-;:23;;;12270:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12214:132::o;29024:699::-;29191:13;29164:8;:23;29173:13;29164:23;;;;;;;;;;;;;;;;:40;;;;;;;:::i;:::-;;;;;;;;29241:1;29219:24;;:10;:24;;;29215:501;;29260:21;29284:109;29321:17;;145:4;29284:13;:18;;:109;;;;;:::i;:::-;29260:133;;29408:20;29447:13;29431;:29;;;;:::i;:::-;29408:52;;29510:12;29475:16;:31;29492:13;29475:31;;;;;;;;;;;;;;;;:47;;;;;;;:::i;:::-;;;;;;;;29580:13;29537:12;:24;29550:10;29537:24;;;;;;;;;;;;;;;:39;29562:13;29537:39;;;;;;;;;;;;;;;;:56;;;;;;;:::i;:::-;;;;;;;;29245:360;;29215:501;;;29637:1;29615:24;;:10;:24;;;29611:105;;29691:13;29656:16;:31;29673:13;29656:31;;;;;;;;;;;;;;;;:48;;;;;;;:::i;:::-;;;;;;;;29611:105;29215:501;29024:699;;;:::o;13316:191::-;13390:16;13409:6;;;;;;;;;;;13390:25;;13435:8;13426:6;;:17;;;;;;;;;;;;;;;;;;13490:8;13459:40;;13480:8;13459:40;;;;;;;;;;;;13379:128;13316:191;:::o;10600:98::-;10653:7;10680:10;10673:17;;10600:98;:::o;158:519::-;269:9;369:1;366;362:9;357:14;;491:1;487;484;480:9;477:16;473:1;466:9;463:31;453:89;;525:1;522;515:12;453:89;650:8;647:1;643:16;638:21;;158:519;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310: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:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:::-;1745:6;1753;1802:2;1790:9;1781:7;1777:23;1773:32;1770:119;;;1808:79;;:::i;:::-;1770:119;1928:1;1953:53;1998:7;1989:6;1978:9;1974:22;1953:53;:::i;:::-;1943:63;;1899:117;2055:2;2081:53;2126:7;2117:6;2106:9;2102:22;2081:53;:::i;:::-;2071:63;;2026:118;1677:474;;;;;:::o;2157:117::-;2266:1;2263;2256:12;2280:117;2389:1;2386;2379:12;2403:117;2512:1;2509;2502:12;2543:568;2616:8;2626:6;2676:3;2669:4;2661:6;2657:17;2653:27;2643:122;;2684:79;;:::i;:::-;2643:122;2797:6;2784:20;2774:30;;2827:18;2819:6;2816:30;2813:117;;;2849:79;;:::i;:::-;2813:117;2963:4;2955:6;2951:17;2939:29;;3017:3;3009:4;3001:6;2997:17;2987:8;2983:32;2980:41;2977:128;;;3024:79;;:::i;:::-;2977:128;2543:568;;;;;:::o;3146:592::-;3243:8;3253:6;3303:3;3296:4;3288:6;3284:17;3280:27;3270:122;;3311:79;;:::i;:::-;3270:122;3424:6;3411:20;3401:30;;3454:18;3446:6;3443:30;3440:117;;;3476:79;;:::i;:::-;3440:117;3590:4;3582:6;3578:17;3566:29;;3644:3;3636:4;3628:6;3624:17;3614:8;3610:32;3607:41;3604:128;;;3651:79;;:::i;:::-;3604:128;3146:592;;;;;:::o;3761:568::-;3834:8;3844:6;3894:3;3887:4;3879:6;3875:17;3871:27;3861:122;;3902:79;;:::i;:::-;3861:122;4015:6;4002:20;3992:30;;4045:18;4037:6;4034:30;4031:117;;;4067:79;;:::i;:::-;4031:117;4181:4;4173:6;4169:17;4157:29;;4235:3;4227:4;4219:6;4215:17;4205:8;4201:32;4198:41;4195:128;;;4242:79;;:::i;:::-;4195:128;3761:568;;;;;:::o;4335:1503::-;4526:6;4534;4542;4550;4558;4566;4574;4623:3;4611:9;4602:7;4598:23;4594:33;4591:120;;;4630:79;;:::i;:::-;4591:120;4778:1;4767:9;4763:17;4750:31;4808:18;4800:6;4797:30;4794:117;;;4830:79;;:::i;:::-;4794:117;4943:80;5015:7;5006:6;4995:9;4991:22;4943:80;:::i;:::-;4925:98;;;;4721:312;5100:2;5089:9;5085:18;5072:32;5131:18;5123:6;5120:30;5117:117;;;5153:79;;:::i;:::-;5117:117;5266:104;5362:7;5353:6;5342:9;5338:22;5266:104;:::i;:::-;5248:122;;;;5043:337;5447:2;5436:9;5432:18;5419:32;5478:18;5470:6;5467:30;5464:117;;;5500:79;;:::i;:::-;5464:117;5613:80;5685:7;5676:6;5665:9;5661:22;5613:80;:::i;:::-;5595:98;;;;5390:313;5742:2;5768:53;5813:7;5804:6;5793:9;5789:22;5768:53;:::i;:::-;5758:63;;5713:118;4335:1503;;;;;;;;;;:::o;5844:329::-;5903:6;5952:2;5940:9;5931:7;5927:23;5923:32;5920:119;;;5958:79;;:::i;:::-;5920:119;6078:1;6103:53;6148:7;6139:6;6128:9;6124:22;6103:53;:::i;:::-;6093:63;;6049:117;5844:329;;;;:::o;6179:90::-;6213:7;6256:5;6249:13;6242:21;6231:32;;6179:90;;;:::o;6275:116::-;6345:21;6360:5;6345:21;:::i;:::-;6338:5;6335:32;6325:60;;6381:1;6378;6371:12;6325:60;6275:116;:::o;6397:133::-;6440:5;6478:6;6465:20;6456:29;;6494:30;6518:5;6494:30;:::i;:::-;6397:133;;;;:::o;6536:468::-;6601:6;6609;6658:2;6646:9;6637:7;6633:23;6629:32;6626:119;;;6664:79;;:::i;:::-;6626:119;6784:1;6809:53;6854:7;6845:6;6834:9;6830:22;6809:53;:::i;:::-;6799:63;;6755:117;6911:2;6937:50;6979:7;6970:6;6959:9;6955:22;6937:50;:::i;:::-;6927:60;;6882:115;6536:468;;;;;:::o;7010:982::-;7156:6;7164;7172;7180;7229:2;7217:9;7208:7;7204:23;7200:32;7197:119;;;7235:79;;:::i;:::-;7197:119;7383:1;7372:9;7368:17;7355:31;7413:18;7405:6;7402:30;7399:117;;;7435:79;;:::i;:::-;7399:117;7548:80;7620:7;7611:6;7600:9;7596:22;7548:80;:::i;:::-;7530:98;;;;7326:312;7705:2;7694:9;7690:18;7677:32;7736:18;7728:6;7725:30;7722:117;;;7758:79;;:::i;:::-;7722:117;7871:104;7967:7;7958:6;7947:9;7943:22;7871:104;:::i;:::-;7853:122;;;;7648:337;7010:982;;;;;;;:::o;7998:704::-;8093:6;8101;8109;8158:2;8146:9;8137:7;8133:23;8129:32;8126:119;;;8164:79;;:::i;:::-;8126:119;8284:1;8309:53;8354:7;8345:6;8334:9;8330:22;8309:53;:::i;:::-;8299:63;;8255:117;8439:2;8428:9;8424:18;8411:32;8470:18;8462:6;8459:30;8456:117;;;8492:79;;:::i;:::-;8456:117;8605:80;8677:7;8668:6;8657:9;8653:22;8605:80;:::i;:::-;8587:98;;;;8382:313;7998:704;;;;;:::o;8708:118::-;8795:24;8813:5;8795:24;:::i;:::-;8790:3;8783:37;8708:118;;:::o;8832:222::-;8925:4;8963:2;8952:9;8948:18;8940:26;;8976:71;9044:1;9033:9;9029:17;9020:6;8976:71;:::i;:::-;8832:222;;;;:::o;9060:765::-;9146:6;9154;9162;9170;9219:3;9207:9;9198:7;9194:23;9190:33;9187:120;;;9226:79;;:::i;:::-;9187:120;9346:1;9371:53;9416:7;9407:6;9396:9;9392:22;9371:53;:::i;:::-;9361:63;;9317:117;9473:2;9499:53;9544:7;9535:6;9524:9;9520:22;9499:53;:::i;:::-;9489:63;;9444:118;9601:2;9627:53;9672:7;9663:6;9652:9;9648:22;9627:53;:::i;:::-;9617:63;;9572:118;9729:2;9755:53;9800:7;9791:6;9780:9;9776:22;9755:53;:::i;:::-;9745:63;;9700:118;9060:765;;;;;;;:::o;9831:109::-;9912:21;9927:5;9912:21;:::i;:::-;9907:3;9900:34;9831:109;;:::o;9946:210::-;10033:4;10071:2;10060:9;10056:18;10048:26;;10084:65;10146:1;10135:9;10131:17;10122:6;10084:65;:::i;:::-;9946:210;;;;:::o;10162:118::-;10249:24;10267:5;10249:24;:::i;:::-;10244:3;10237:37;10162:118;;:::o;10286:222::-;10379:4;10417:2;10406:9;10402:18;10394:26;;10430:71;10498:1;10487:9;10483:17;10474:6;10430:71;:::i;:::-;10286:222;;;;:::o;10514:911::-;10609:6;10617;10625;10633;10641;10690:3;10678:9;10669:7;10665:23;10661:33;10658:120;;;10697:79;;:::i;:::-;10658:120;10817:1;10842:53;10887:7;10878:6;10867:9;10863:22;10842:53;:::i;:::-;10832:63;;10788:117;10944:2;10970:53;11015:7;11006:6;10995:9;10991:22;10970:53;:::i;:::-;10960:63;;10915:118;11072:2;11098:53;11143:7;11134:6;11123:9;11119:22;11098:53;:::i;:::-;11088:63;;11043:118;11200:2;11226:53;11271:7;11262:6;11251:9;11247:22;11226:53;:::i;:::-;11216:63;;11171:118;11328:3;11355:53;11400:7;11391:6;11380:9;11376:22;11355:53;:::i;:::-;11345:63;;11299:119;10514:911;;;;;;;;:::o;11431:849::-;11535:6;11543;11551;11559;11608:2;11596:9;11587:7;11583:23;11579:32;11576:119;;;11614:79;;:::i;:::-;11576:119;11734:1;11759:53;11804:7;11795:6;11784:9;11780:22;11759:53;:::i;:::-;11749:63;;11705:117;11889:2;11878:9;11874:18;11861:32;11920:18;11912:6;11909:30;11906:117;;;11942:79;;:::i;:::-;11906:117;12055:80;12127:7;12118:6;12107:9;12103:22;12055:80;:::i;:::-;12037:98;;;;11832:313;12184:2;12210:53;12255:7;12246:6;12235:9;12231:22;12210:53;:::i;:::-;12200:63;;12155:118;11431:849;;;;;;;:::o;12286:619::-;12363:6;12371;12379;12428:2;12416:9;12407:7;12403:23;12399:32;12396:119;;;12434:79;;:::i;:::-;12396:119;12554:1;12579:53;12624:7;12615:6;12604:9;12600:22;12579:53;:::i;:::-;12569:63;;12525:117;12681:2;12707:53;12752:7;12743:6;12732:9;12728:22;12707:53;:::i;:::-;12697:63;;12652:118;12809:2;12835:53;12880:7;12871:6;12860:9;12856:22;12835:53;:::i;:::-;12825:63;;12780:118;12286:619;;;;;:::o;12911:995::-;13024:6;13032;13040;13048;13056;13105:3;13093:9;13084:7;13080:23;13076:33;13073:120;;;13112:79;;:::i;:::-;13073:120;13232:1;13257:53;13302:7;13293:6;13282:9;13278:22;13257:53;:::i;:::-;13247:63;;13203:117;13387:2;13376:9;13372:18;13359:32;13418:18;13410:6;13407:30;13404:117;;;13440:79;;:::i;:::-;13404:117;13553:80;13625:7;13616:6;13605:9;13601:22;13553:80;:::i;:::-;13535:98;;;;13330:313;13682:2;13708:53;13753:7;13744:6;13733:9;13729:22;13708:53;:::i;:::-;13698:63;;13653:118;13810:2;13836:53;13881:7;13872:6;13861:9;13857:22;13836:53;:::i;:::-;13826:63;;13781:118;12911:995;;;;;;;;:::o;13912:329::-;13971:6;14020:2;14008:9;13999:7;13995:23;13991:32;13988:119;;;14026:79;;:::i;:::-;13988:119;14146:1;14171:53;14216:7;14207:6;14196:9;14192:22;14171:53;:::i;:::-;14161:63;;14117:117;13912:329;;;;:::o;14247:1127::-;14402:6;14410;14418;14426;14434;14483:2;14471:9;14462:7;14458:23;14454:32;14451:119;;;14489:79;;:::i;:::-;14451:119;14637:1;14626:9;14622:17;14609:31;14667:18;14659:6;14656:30;14653:117;;;14689:79;;:::i;:::-;14653:117;14802:80;14874:7;14865:6;14854:9;14850:22;14802:80;:::i;:::-;14784:98;;;;14580:312;14959:2;14948:9;14944:18;14931:32;14990:18;14982:6;14979:30;14976:117;;;15012:79;;:::i;:::-;14976:117;15125:104;15221:7;15212:6;15201:9;15197:22;15125:104;:::i;:::-;15107:122;;;;14902:337;15278:2;15304:53;15349:7;15340:6;15329:9;15325:22;15304:53;:::i;:::-;15294:63;;15249:118;14247:1127;;;;;;;;:::o;15380:180::-;15428:77;15425:1;15418:88;15525:4;15522:1;15515:15;15549:4;15546:1;15539:15;15566:117;15675:1;15672;15665:12;15689:117;15798:1;15795;15788:12;15812:117;15921:1;15918;15911:12;15935:390;16025:4;16079:11;16066:25;16179:1;16173:4;16169:12;16158:8;16142:14;16138:29;16134:48;16114:18;16110:73;16100:168;;16187:79;;:::i;:::-;16100:168;16299:18;16289:8;16285:33;16277:41;;16030:295;15935:390;;;;:::o;16331:740::-;16424:4;16430:6;16486:11;16473:25;16586:1;16580:4;16576:12;16565:8;16549:14;16545:29;16541:48;16521:18;16517:73;16507:168;;16594:79;;:::i;:::-;16507:168;16706:18;16696:8;16692:33;16684:41;;16758:4;16745:18;16735:28;;16786:18;16778:6;16775:30;16772:117;;;16808:79;;:::i;:::-;16772:117;16916:2;16910:4;16906:13;16898:21;;16973:4;16965:6;16961:17;16945:14;16941:38;16935:4;16931:49;16928:136;;;16983:79;;:::i;:::-;16928:136;16437:634;16331:740;;;;;:::o;17077:169::-;17161:11;17195:6;17190:3;17183:19;17235:4;17230:3;17226:14;17211:29;;17077:169;;;;:::o;17252:155::-;17392:7;17388:1;17380:6;17376:14;17369:31;17252:155;:::o;17413:365::-;17555:3;17576:66;17640:1;17635:3;17576:66;:::i;:::-;17569:73;;17651:93;17740:3;17651:93;:::i;:::-;17769:2;17764:3;17760:12;17753:19;;17413:365;;;:::o;17784:419::-;17950:4;17988:2;17977:9;17973:18;17965:26;;18037:9;18031:4;18027:20;18023:1;18012:9;18008:17;18001:47;18065:131;18191:4;18065:131;:::i;:::-;18057:139;;17784:419;;;:::o;18209:117::-;18318:1;18315;18308:12;18332:102;18373:6;18424:2;18420:7;18415:2;18408:5;18404:14;18400:28;18390:38;;18332:102;;;:::o;18440:180::-;18488:77;18485:1;18478:88;18585:4;18582:1;18575:15;18609:4;18606:1;18599:15;18626:281;18709:27;18731:4;18709:27;:::i;:::-;18701:6;18697:40;18839:6;18827:10;18824:22;18803:18;18791:10;18788:34;18785:62;18782:88;;;18850:18;;:::i;:::-;18782:88;18890:10;18886:2;18879:22;18669:238;18626:281;;:::o;18913:129::-;18947:6;18974:20;;:::i;:::-;18964:30;;19003:33;19031:4;19023:6;19003:33;:::i;:::-;18913:129;;;:::o;19171:143::-;19228:5;19259:6;19253:13;19244:22;;19275:33;19302:5;19275:33;:::i;:::-;19171:143;;;;:::o;19349:1137::-;19434:5;19478:4;19466:9;19461:3;19457:19;19453:30;19450:117;;;19486:79;;:::i;:::-;19450:117;19585:21;19601:4;19585:21;:::i;:::-;19576:30;;19670:1;19710:60;19766:3;19757:6;19746:9;19742:22;19710:60;:::i;:::-;19703:4;19696:5;19692:16;19685:86;19616:166;19842:2;19883:60;19939:3;19930:6;19919:9;19915:22;19883:60;:::i;:::-;19876:4;19869:5;19865:16;19858:86;19792:163;20016:2;20057:60;20113:3;20104:6;20093:9;20089:22;20057:60;:::i;:::-;20050:4;20043:5;20039:16;20032:86;19965:164;20190:2;20231:60;20287:3;20278:6;20267:9;20263:22;20231:60;:::i;:::-;20224:4;20217:5;20213:16;20206:86;20139:164;20365:3;20407:60;20463:3;20454:6;20443:9;20439:22;20407:60;:::i;:::-;20400:4;20393:5;20389:16;20382:86;20313:166;19349:1137;;;;:::o;20492:402::-;20587:6;20636:3;20624:9;20615:7;20611:23;20607:33;20604:120;;;20643:79;;:::i;:::-;20604:120;20763:1;20788:89;20869:7;20860:6;20849:9;20845:22;20788:89;:::i;:::-;20778:99;;20734:153;20492:402;;;;:::o;20900:143::-;20957:5;20988:6;20982:13;20973:22;;21004:33;21031:5;21004:33;:::i;:::-;20900:143;;;;:::o;21049:351::-;21119:6;21168:2;21156:9;21147:7;21143:23;21139:32;21136:119;;;21174:79;;:::i;:::-;21136:119;21294:1;21319:64;21375:7;21366:6;21355:9;21351:22;21319:64;:::i;:::-;21309:74;;21265:128;21049:351;;;;:::o;21406:332::-;21527:4;21565:2;21554:9;21550:18;21542:26;;21578:71;21646:1;21635:9;21631:17;21622:6;21578:71;:::i;:::-;21659:72;21727:2;21716:9;21712:18;21703:6;21659:72;:::i;:::-;21406:332;;;;;:::o;21744:351::-;21814:6;21863:2;21851:9;21842:7;21838:23;21834:32;21831:119;;;21869:79;;:::i;:::-;21831:119;21989:1;22014:64;22070:7;22061:6;22050:9;22046:22;22014:64;:::i;:::-;22004:74;;21960:128;21744:351;;;;:::o;22101:184::-;22200:11;22234:6;22229:3;22222:19;22274:4;22269:3;22265:14;22250:29;;22101:184;;;;:::o;22291:117::-;22400:1;22397;22390:12;22414:98;22498:6;22493:3;22488;22475:30;22414:98;;;:::o;22548:537::-;22676:3;22697:86;22776:6;22771:3;22697:86;:::i;:::-;22690:93;;22807:66;22799:6;22796:78;22793:165;;;22877:79;;:::i;:::-;22793:165;22989:4;22981:6;22977:17;22967:27;;23004:43;23040:6;23035:3;23028:5;23004:43;:::i;:::-;23072:6;23067:3;23063:16;23056:23;;22548:537;;;;;:::o;23091:613::-;23300:4;23338:2;23327:9;23323:18;23315:26;;23387:9;23381:4;23377:20;23373:1;23362:9;23358:17;23351:47;23415:118;23528:4;23519:6;23511;23415:118;:::i;:::-;23407:126;;23543:72;23611:2;23600:9;23596:18;23587:6;23543:72;:::i;:::-;23625;23693:2;23682:9;23678:18;23669:6;23625:72;:::i;:::-;23091:613;;;;;;;:::o;23710:161::-;23850:13;23846:1;23838:6;23834:14;23827:37;23710:161;:::o;23877:366::-;24019:3;24040:67;24104:2;24099:3;24040:67;:::i;:::-;24033:74;;24116:93;24205:3;24116:93;:::i;:::-;24234:2;24229:3;24225:12;24218:19;;23877:366;;;:::o;24249:419::-;24415:4;24453:2;24442:9;24438:18;24430:26;;24502:9;24496:4;24492:20;24488:1;24477:9;24473:17;24466:47;24530:131;24656:4;24530:131;:::i;:::-;24522:139;;24249:419;;;:::o;24674:503::-;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:118;25083:4;25074:6;25066;24970:118;:::i;:::-;24962:126;;25098:72;25166:2;25155:9;25151:18;25142:6;25098:72;:::i;:::-;24674:503;;;;;;:::o;25183:393::-;25336:4;25374:2;25363:9;25359:18;25351:26;;25423:9;25417:4;25413:20;25409:1;25398:9;25394:17;25387:47;25451:118;25564:4;25555:6;25547;25451:118;:::i;:::-;25443:126;;25183:393;;;;;:::o;25582:442::-;25731:4;25769:2;25758:9;25754:18;25746:26;;25782:71;25850:1;25839:9;25835:17;25826:6;25782:71;:::i;:::-;25863:72;25931:2;25920:9;25916:18;25907:6;25863:72;:::i;:::-;25945;26013:2;26002:9;25998:18;25989:6;25945:72;:::i;:::-;25582:442;;;;;;:::o;26030:180::-;26078:77;26075:1;26068:88;26175:4;26172:1;26165:15;26199:4;26196:1;26189:15;26216:194;26256:4;26276:20;26294:1;26276:20;:::i;:::-;26271:25;;26310:20;26328:1;26310:20;:::i;:::-;26305:25;;26354:1;26351;26347:9;26339:17;;26378:1;26372:4;26369:11;26366:37;;;26383:18;;:::i;:::-;26366:37;26216:194;;;;:::o;26416:191::-;26456:3;26475:20;26493:1;26475:20;:::i;:::-;26470:25;;26509:20;26527:1;26509:20;:::i;:::-;26504:25;;26552:1;26549;26545:9;26538:16;;26573:3;26570:1;26567:10;26564:36;;;26580:18;;:::i;:::-;26564:36;26416:191;;;;:::o;26613:157::-;26753:9;26749:1;26741:6;26737:14;26730:33;26613:157;:::o;26776:365::-;26918:3;26939:66;27003:1;26998:3;26939:66;:::i;:::-;26932:73;;27014:93;27103:3;27014:93;:::i;:::-;27132:2;27127:3;27123:12;27116:19;;26776:365;;;:::o;27147:419::-;27313:4;27351:2;27340:9;27336:18;27328:26;;27400:9;27394:4;27390:20;27386:1;27375:9;27371:17;27364:47;27428:131;27554:4;27428:131;:::i;:::-;27420:139;;27147:419;;;:::o;27572:332::-;27693:4;27731:2;27720:9;27716:18;27708:26;;27744:71;27812:1;27801:9;27797:17;27788:6;27744:71;:::i;:::-;27825:72;27893:2;27882:9;27878:18;27869:6;27825:72;:::i;:::-;27572:332;;;;;:::o;27910:137::-;27964:5;27995:6;27989:13;27980:22;;28011:30;28035:5;28011:30;:::i;:::-;27910:137;;;;:::o;28053:345::-;28120:6;28169:2;28157:9;28148:7;28144:23;28140:32;28137:119;;;28175:79;;:::i;:::-;28137:119;28295:1;28320:61;28373:7;28364:6;28353:9;28349:22;28320:61;:::i;:::-;28310:71;;28266:125;28053:345;;;;:::o;28404:664::-;28609:4;28647:3;28636:9;28632:19;28624:27;;28661:71;28729:1;28718:9;28714:17;28705:6;28661:71;:::i;:::-;28742:72;28810:2;28799:9;28795:18;28786:6;28742:72;:::i;:::-;28824;28892:2;28881:9;28877:18;28868:6;28824:72;:::i;:::-;28906;28974:2;28963:9;28959:18;28950:6;28906:72;:::i;:::-;28988:73;29056:3;29045:9;29041:19;29032:6;28988:73;:::i;:::-;28404:664;;;;;;;;:::o;29074:503::-;29255:4;29293:2;29282:9;29278:18;29270:26;;29342:9;29336:4;29332:20;29328:1;29317:9;29313:17;29306:47;29370:118;29483:4;29474:6;29466;29370:118;:::i;:::-;29362:126;;29498:72;29566:2;29555:9;29551:18;29542:6;29498:72;:::i;:::-;29074:503;;;;;;:::o;29583:332::-;29704:4;29742:2;29731:9;29727:18;29719:26;;29755:71;29823:1;29812:9;29808:17;29799:6;29755:71;:::i;:::-;29836:72;29904:2;29893:9;29889:18;29880:6;29836:72;:::i;:::-;29583:332;;;;;:::o;29921:225::-;30061:34;30057:1;30049:6;30045:14;30038:58;30130:8;30125:2;30117:6;30113:15;30106:33;29921:225;:::o;30152:366::-;30294:3;30315:67;30379:2;30374:3;30315:67;:::i;:::-;30308:74;;30391:93;30480:3;30391:93;:::i;:::-;30509:2;30504:3;30500:12;30493:19;;30152:366;;;:::o;30524:419::-;30690:4;30728:2;30717:9;30713:18;30705:26;;30777:9;30771:4;30767:20;30763:1;30752:9;30748:17;30741:47;30805:131;30931:4;30805:131;:::i;:::-;30797:139;;30524:419;;;:::o;30949:165::-;31089:17;31085:1;31077:6;31073:14;31066:41;30949:165;:::o;31120:366::-;31262:3;31283:67;31347:2;31342:3;31283:67;:::i;:::-;31276:74;;31359:93;31448:3;31359:93;:::i;:::-;31477:2;31472:3;31468:12;31461:19;;31120:366;;;:::o;31492:419::-;31658:4;31696:2;31685:9;31681:18;31673:26;;31745:9;31739:4;31735:20;31731:1;31720:9;31716:17;31709:47;31773:131;31899:4;31773:131;:::i;:::-;31765:139;;31492:419;;;:::o;31917:182::-;32057:34;32053:1;32045:6;32041:14;32034:58;31917:182;:::o;32105:366::-;32247:3;32268:67;32332:2;32327:3;32268:67;:::i;:::-;32261:74;;32344:93;32433:3;32344:93;:::i;:::-;32462:2;32457:3;32453:12;32446:19;;32105:366;;;:::o;32477:419::-;32643:4;32681:2;32670:9;32666:18;32658:26;;32730:9;32724:4;32720:20;32716:1;32705:9;32701:17;32694:47;32758:131;32884:4;32758:131;:::i;:::-;32750:139;;32477:419;;;:::o
Swarm Source
ipfs://dda5a4ce2536514f0903596cd3704c0b999a32c2aec1a9e9ff0944a488c65cc6
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $3,084.23 | 0.0368 | $113.6 |
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.