Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
1 wei
Eth Value
Less Than $0.01 (@ $2,415.98/ETH)More Info
Private Name Tags
ContractCreator
TokenTracker
Loading...
Loading
Contract Name:
Pool
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity ^0.5.0; import "./Token.sol"; import "./1inch.sol"; contract Pool is ERC20 { using SafeMath for uint; address public constant EXCHANGE_CONTRACT = 0x50FDA034C0Ce7a8f7EFDAebDA7Aa7cA21CC1267e; address public constant ETH_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; address public constant WETH_ADDRESS = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; address public TMTTokenAddress; uint[] public holders; address[] public tokens; uint[] public weights; uint totalWeight; //----------------------------- uint[] buf; address[] newTokens; uint[] newWeights; uint newTotalWeight; //----------------------------- mapping(address => uint) public tokenBalances; bool public active = true; mapping(address => bool) public systemAddresses; modifier systemOnly { require(systemAddresses[msg.sender], "system only"); _; } modifier isActive() { require (active); _; } event Withdrawn(address indexed from, uint value); event WithdrawnToken(address indexed from, address indexed token, uint amount); function addSystemAddress(address newSystemAddress) public systemOnly { systemAddresses[newSystemAddress] = true; } constructor(string memory name, string memory symbol, address _TMTTokenAddress, address[] memory _tokens, uint[] memory _weights) public ERC20(name, symbol) { require (_tokens.length == _weights.length, "invalid config length"); systemAddresses[msg.sender] = true; TMTTokenAddress = _TMTTokenAddress; uint _totalWeight; for(uint i = 0; i < _tokens.length; i++) { tokens.push(_tokens[i]); weights.push(_weights[i]); _totalWeight += _weights[i]; } totalWeight = _totalWeight; } function poolIn(address[] memory _tokens, uint[] memory _values) public payable isActive() { // require(IERC20(TMTTokenAddress).balanceOf(msg.sender) > 0, "TMTToken balance must be greater then 0"); address[] memory returnedTokens; uint[] memory returnedAmounts; uint ethValue; if(_tokens.length == 0) { require (msg.value > 0.001 ether, "0.001 ether min pool in"); ethValue = msg.value; (returnedTokens, returnedAmounts) = swap(ETH_ADDRESS, ethValue, tokens, weights, totalWeight); } else if(_tokens.length == 1) { ethValue = calculateTokensForEther(_tokens, _values); assert(ethValue > 0.001 ether); (returnedTokens, returnedAmounts) = swap(_tokens[0], _values[0], tokens, weights, totalWeight); } else { ethValue = sellTokensForEther(_tokens, _values); assert(ethValue > 0.001 ether); (returnedTokens, returnedAmounts) = swap(ETH_ADDRESS, ethValue, tokens, weights, totalWeight); } for (uint i = 0; i < returnedTokens.length; i++) { tokenBalances[returnedTokens[i]] += returnedAmounts[i]; } _mint(msg.sender, ethValue); } function withdraw() public { uint _balance = balanceOf(msg.sender); uint localWeight = _balance.mul(1 ether).div(totalSupply()); require(localWeight > 0, "no balance in this pool"); _burn(msg.sender, _balance); for (uint i = 0; i < tokens.length; i++) { uint withdrawBalance = tokenBalances[tokens[i]].mul(localWeight).div(1 ether); tokenBalances[tokens[i]] = tokenBalances[tokens[i]].sub(withdrawBalance); IERC20(tokens[i]).transfer(msg.sender, withdrawBalance); emit WithdrawnToken(msg.sender, tokens[i], withdrawBalance); } emit Withdrawn(msg.sender, _balance); } function updatePool(address[] memory _tokens, uint[] memory _weights) public systemOnly { require(_tokens.length == _weights.length, "invalid config length"); uint _newTotalWeight; for(uint i = 0; i < _tokens.length; i++) { require (_tokens[i] != ETH_ADDRESS && _tokens[i] != WETH_ADDRESS); _newTotalWeight += _weights[i]; } newTokens = _tokens; newWeights = _weights; newTotalWeight = _newTotalWeight; rebalance(); } function setPoolStatus(bool _active) public systemOnly { active = _active; } function calculateTokensForEther(address[] memory _tokens, uint[] memory _amounts) public view returns(uint) { uint _amount; uint _totalAmount; uint[] memory _distribution; for(uint i = 0; i < _tokens.length; i++) { (_amount, _distribution) = IOneSplit(EXCHANGE_CONTRACT).getExpectedReturn(IERC20(_tokens[i]), IERC20(WETH_ADDRESS), _amounts[i], 2, 0); _totalAmount += _amount; } return _totalAmount; } /* * @dev sell array of tokens for ether */ function sellTokensForEther(address[] memory _tokens, uint[] memory _amounts) internal returns(uint) { uint _amount; uint _totalAmount; uint[] memory _distribution; for(uint i = 0; i < _tokens.length; i++) { if (_amounts[i] == 0) { continue; } if (_tokens[i] == WETH_ADDRESS) { _totalAmount += _amounts[i]; continue; } IERC20(_tokens[i]).approve(EXCHANGE_CONTRACT, _amounts[i]); (_amount, _distribution) = IOneSplit(EXCHANGE_CONTRACT).getExpectedReturn(IERC20(_tokens[i]), IERC20(WETH_ADDRESS), _amounts[i], 2, 0); if (_amount == 0) { continue; } IOneSplit(EXCHANGE_CONTRACT).swap(IERC20(_tokens[i]), IERC20(WETH_ADDRESS), _amounts[i], _amount, _distribution, 0); _totalAmount += _amount; } return _totalAmount; } function rebalance() internal { uint[] memory buf2; buf = buf2; for (uint i = 0; i < tokens.length; i++) { buf.push(tokenBalances[tokens[i]]); tokenBalances[tokens[i]] = 0; } uint ethValue = sellTokensForEther(tokens, buf); tokens = newTokens; weights = newWeights; totalWeight = newTotalWeight; if (ethValue == 0) { return; } buf = buf2; swap2(WETH_ADDRESS, ethValue); for(uint i = 0; i < tokens.length; i++) { tokenBalances[tokens[i]] = buf[i]; } } function swap(address _token, uint _value, address[] memory _tokens, uint[] memory _weights, uint _totalWeight) internal returns(address[] memory, uint[] memory) { uint _tokenPart; uint _amount; uint[] memory _distribution; for(uint i = 0; i < _tokens.length; i++) { _tokenPart = _value.mul(_weights[i]).div(_totalWeight); (_amount, _distribution) = IOneSplit(EXCHANGE_CONTRACT).getExpectedReturn(IERC20(_token), IERC20(_tokens[i]), _tokenPart, 2, 0); if (_token == ETH_ADDRESS) { IOneSplit(EXCHANGE_CONTRACT).swap.value(_tokenPart)(IERC20(_token), IERC20(_tokens[i]), _tokenPart, _amount, _distribution, 0); } else { IERC20(_tokens[i]).approve(EXCHANGE_CONTRACT, _tokenPart); IOneSplit(EXCHANGE_CONTRACT).swap(IERC20(_token), IERC20(_tokens[i]), _tokenPart, _amount, _distribution, 0); } _weights[i] = _amount; } return (_tokens, _weights); } function swap2(address _token, uint _value) internal { uint _tokenPart; uint _amount; uint[] memory _distribution; IERC20(_token).approve(EXCHANGE_CONTRACT, _value); for(uint i = 0; i < newTokens.length; i++) { _tokenPart = _value.mul(newWeights[i]).div(newTotalWeight); if(_tokenPart == 0) { buf.push(0); continue; } (_amount, _distribution) = IOneSplit(EXCHANGE_CONTRACT).getExpectedReturn(IERC20(_token), IERC20(newTokens[i]), _tokenPart, 5, 0); IOneSplit(EXCHANGE_CONTRACT).swap(IERC20(_token), IERC20(newTokens[i]), _tokenPart, _amount, _distribution, 0); buf.push(_amount); } } function calculateAmountsViaWeights(uint _ethAmount) public view returns(uint[] memory res) { for(uint i = 1; i <= tokens.length; i++) { res[i] = _ethAmount.mul(weights[i]).div(totalWeight); } } }
pragma solidity ^0.5.0; import "./Token.sol"; contract IOneSplitConsts { // flags = FLAG_DISABLE_UNISWAP + FLAG_DISABLE_BANCOR + ... uint256 internal constant FLAG_DISABLE_UNISWAP = 0x01; uint256 internal constant DEPRECATED_FLAG_DISABLE_KYBER = 0x02; // Deprecated uint256 internal constant FLAG_DISABLE_BANCOR = 0x04; uint256 internal constant FLAG_DISABLE_OASIS = 0x08; uint256 internal constant FLAG_DISABLE_COMPOUND = 0x10; uint256 internal constant FLAG_DISABLE_FULCRUM = 0x20; uint256 internal constant FLAG_DISABLE_CHAI = 0x40; uint256 internal constant FLAG_DISABLE_AAVE = 0x80; uint256 internal constant FLAG_DISABLE_SMART_TOKEN = 0x100; uint256 internal constant DEPRECATED_FLAG_ENABLE_MULTI_PATH_ETH = 0x200; // Deprecated, Turned off by default uint256 internal constant FLAG_DISABLE_BDAI = 0x400; uint256 internal constant FLAG_DISABLE_IEARN = 0x800; uint256 internal constant FLAG_DISABLE_CURVE_COMPOUND = 0x1000; uint256 internal constant FLAG_DISABLE_CURVE_USDT = 0x2000; uint256 internal constant FLAG_DISABLE_CURVE_Y = 0x4000; uint256 internal constant FLAG_DISABLE_CURVE_BINANCE = 0x8000; uint256 internal constant DEPRECATED_FLAG_ENABLE_MULTI_PATH_DAI = 0x10000; // Deprecated, Turned off by default uint256 internal constant DEPRECATED_FLAG_ENABLE_MULTI_PATH_USDC = 0x20000; // Deprecated, Turned off by default uint256 internal constant FLAG_DISABLE_CURVE_SYNTHETIX = 0x40000; uint256 internal constant FLAG_DISABLE_WETH = 0x80000; uint256 internal constant FLAG_DISABLE_UNISWAP_COMPOUND = 0x100000; // Works only when one of assets is ETH or FLAG_ENABLE_MULTI_PATH_ETH uint256 internal constant FLAG_DISABLE_UNISWAP_CHAI = 0x200000; // Works only when ETH<>DAI or FLAG_ENABLE_MULTI_PATH_ETH uint256 internal constant FLAG_DISABLE_UNISWAP_AAVE = 0x400000; // Works only when one of assets is ETH or FLAG_ENABLE_MULTI_PATH_ETH uint256 internal constant FLAG_DISABLE_IDLE = 0x800000; uint256 internal constant FLAG_DISABLE_MOONISWAP = 0x1000000; uint256 internal constant FLAG_DISABLE_UNISWAP_V2 = 0x2000000; uint256 internal constant FLAG_DISABLE_UNISWAP_V2_ETH = 0x4000000; uint256 internal constant FLAG_DISABLE_UNISWAP_V2_DAI = 0x8000000; uint256 internal constant FLAG_DISABLE_UNISWAP_V2_USDC = 0x10000000; uint256 internal constant FLAG_DISABLE_ALL_SPLIT_SOURCES = 0x20000000; uint256 internal constant FLAG_DISABLE_ALL_WRAP_SOURCES = 0x40000000; uint256 internal constant FLAG_DISABLE_CURVE_PAX = 0x80000000; uint256 internal constant FLAG_DISABLE_CURVE_RENBTC = 0x100000000; uint256 internal constant FLAG_DISABLE_CURVE_TBTC = 0x200000000; uint256 internal constant DEPRECATED_FLAG_ENABLE_MULTI_PATH_USDT = 0x400000000; // Deprecated, Turned off by default uint256 internal constant DEPRECATED_FLAG_ENABLE_MULTI_PATH_WBTC = 0x800000000; // Deprecated, Turned off by default uint256 internal constant DEPRECATED_FLAG_ENABLE_MULTI_PATH_TBTC = 0x1000000000; // Deprecated, Turned off by default uint256 internal constant DEPRECATED_FLAG_ENABLE_MULTI_PATH_RENBTC = 0x2000000000; // Deprecated, Turned off by default uint256 internal constant FLAG_DISABLE_DFORCE_SWAP = 0x4000000000; uint256 internal constant FLAG_DISABLE_SHELL = 0x8000000000; uint256 internal constant FLAG_ENABLE_CHI_BURN = 0x10000000000; uint256 internal constant FLAG_DISABLE_MSTABLE_MUSD = 0x20000000000; uint256 internal constant FLAG_DISABLE_CURVE_SBTC = 0x40000000000; uint256 internal constant FLAG_DISABLE_DMM = 0x80000000000; uint256 internal constant FLAG_DISABLE_UNISWAP_ALL = 0x100000000000; uint256 internal constant FLAG_DISABLE_CURVE_ALL = 0x200000000000; uint256 internal constant FLAG_DISABLE_UNISWAP_V2_ALL = 0x400000000000; uint256 internal constant FLAG_DISABLE_SPLIT_RECALCULATION = 0x800000000000; uint256 internal constant FLAG_DISABLE_BALANCER_ALL = 0x1000000000000; uint256 internal constant FLAG_DISABLE_BALANCER_1 = 0x2000000000000; uint256 internal constant FLAG_DISABLE_BALANCER_2 = 0x4000000000000; uint256 internal constant FLAG_DISABLE_BALANCER_3 = 0x8000000000000; uint256 internal constant DEPRECATED_FLAG_ENABLE_KYBER_UNISWAP_RESERVE = 0x10000000000000; // Deprecated, Turned off by default uint256 internal constant DEPRECATED_FLAG_ENABLE_KYBER_OASIS_RESERVE = 0x20000000000000; // Deprecated, Turned off by default uint256 internal constant DEPRECATED_FLAG_ENABLE_KYBER_BANCOR_RESERVE = 0x40000000000000; // Deprecated, Turned off by default uint256 internal constant FLAG_ENABLE_REFERRAL_GAS_SPONSORSHIP = 0x80000000000000; // Turned off by default uint256 internal constant DEPRECATED_FLAG_ENABLE_MULTI_PATH_COMP = 0x100000000000000; // Deprecated, Turned off by default uint256 internal constant FLAG_DISABLE_KYBER_ALL = 0x200000000000000; uint256 internal constant FLAG_DISABLE_KYBER_1 = 0x400000000000000; uint256 internal constant FLAG_DISABLE_KYBER_2 = 0x800000000000000; uint256 internal constant FLAG_DISABLE_KYBER_3 = 0x1000000000000000; uint256 internal constant FLAG_DISABLE_KYBER_4 = 0x2000000000000000; uint256 internal constant FLAG_ENABLE_CHI_BURN_BY_ORIGIN = 0x4000000000000000; } contract IOneSplit is IOneSplitConsts { function getExpectedReturn( IERC20 fromToken, IERC20 destToken, uint256 amount, uint256 parts, uint256 flags // See constants in IOneSplit.sol ) public view returns( uint256 returnAmount, uint256[] memory distribution ); function getExpectedReturnWithGas( IERC20 fromToken, IERC20 destToken, uint256 amount, uint256 parts, uint256 flags, // See constants in IOneSplit.sol uint256 destTokenEthPriceTimesGasPrice ) public view returns( uint256 returnAmount, uint256 estimateGasAmount, uint256[] memory distribution ); function swap( IERC20 fromToken, IERC20 destToken, uint256 amount, uint256 minReturn, uint256[] memory distribution, uint256 flags ) public payable returns(uint256 returnAmount); } contract IOneSplitMulti is IOneSplit { function getExpectedReturnWithGasMulti( IERC20[] memory tokens, uint256 amount, uint256[] memory parts, uint256[] memory flags, uint256[] memory destTokenEthPriceTimesGasPrices ) public view returns( uint256[] memory returnAmounts, uint256 estimateGasAmount, uint256[] memory distribution ); function swapMulti( IERC20[] memory tokens, uint256 amount, uint256 minReturn, uint256[] memory distribution, uint256[] memory flags ) public payable returns(uint256 returnAmount); }
pragma solidity ^0.5.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 GSN 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. */ contract Context { function _msgSender() internal view returns (address payable) { return msg.sender; } function _msgData() internal view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.5.0; import "./Context.sol"; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call.value(amount)(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call.value(weiValue)(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20 { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for {name} and {symbol}, initializes {decimals} with * a default value of 18. * * To select a different value for {decimals}, use {_setupDecimals}. * * All three of these values are immutable: they can only be set once during * construction. */ constructor (string memory name, string memory symbol) public { _name = name; _symbol = symbol; _decimals = 18; } /** * @dev Returns the name of the token. */ function name() public view returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is * called. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view returns (uint8) { return _decimals; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}; * * Requirements: * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements * * - `to` cannot be the zero address. */ function _mint(address account, uint256 amount) internal { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve(address owner, address spender, uint256 amount) internal { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Sets {decimals} to a value other than the default one of 18. * * WARNING: This function should only be called from the constructor. Most * applications that interact with token contracts will not expect * {decimals} to ever change, and may work incorrectly if it does. */ function _setupDecimals(uint8 decimals_) internal { _decimals = decimals_; } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal { } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"address","name":"_TMTTokenAddress","type":"address"},{"internalType":"address[]","name":"_tokens","type":"address[]"},{"internalType":"uint256[]","name":"_weights","type":"uint256[]"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Withdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawnToken","type":"event"},{"constant":true,"inputs":[],"name":"ETH_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"EXCHANGE_CONTRACT","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TMTTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"WETH_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"active","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newSystemAddress","type":"address"}],"name":"addSystemAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_ethAmount","type":"uint256"}],"name":"calculateAmountsViaWeights","outputs":[{"internalType":"uint256[]","name":"res","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"calculateTokensForEther","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"holders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"},{"internalType":"uint256[]","name":"_values","type":"uint256[]"}],"name":"poolIn","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"bool","name":"_active","type":"bool"}],"name":"setPoolStatus","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"systemAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokens","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"},{"internalType":"uint256[]","name":"_weights","type":"uint256[]"}],"name":"updatePool","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"weights","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526001600f60006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b5060405162004f5138038062004f51833981810160405260a08110156200005257600080fd5b81019080805160405193929190846401000000008211156200007357600080fd5b838201915060208201858111156200008a57600080fd5b8251866001820283011164010000000082111715620000a857600080fd5b8083526020830192505050908051906020019080838360005b83811015620000de578082015181840152602081019050620000c1565b50505050905090810190601f1680156200010c5780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200013057600080fd5b838201915060208201858111156200014757600080fd5b82518660018202830111640100000000821117156200016557600080fd5b8083526020830192505050908051906020019080838360005b838110156200019b5780820151818401526020810190506200017e565b50505050905090810190601f168015620001c95780820380516001836020036101000a031916815260200191505b506040526020018051906020019092919080516040519392919084640100000000821115620001f757600080fd5b838201915060208201858111156200020e57600080fd5b82518660208202830111640100000000821117156200022c57600080fd5b8083526020830192505050908051906020019060200280838360005b838110156200026557808201518184015260208101905062000248565b50505050905001604052602001805160405193929190846401000000008211156200028f57600080fd5b83820191506020820185811115620002a657600080fd5b8251866020820283011164010000000082111715620002c457600080fd5b8083526020830192505050908051906020019060200280838360005b83811015620002fd578082015181840152602081019050620002e0565b50505050905001604052505050848481600390805190602001906200032492919062000574565b5080600490805190602001906200033d92919062000574565b506012600560006101000a81548160ff021916908360ff16021790555050508051825114620003d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f696e76616c696420636f6e666967206c656e677468000000000000000000000081525060200191505060405180910390fd5b6001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555082600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600080600090505b8351811015620005605760078482815181106200048e57fe5b602002602001015190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505060088382815181106200050857fe5b602002602001015190806001815401808255809150509060018203906000526020600020016000909192909190915055508281815181106200054657fe5b602002602001015182019150808060010191505062000475565b508060098190555050505050505062000623565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620005b757805160ff1916838001178555620005e8565b82800160010185558215620005e8579182015b82811115620005e7578251825591602001919060010190620005ca565b5b509050620005f79190620005fb565b5090565b6200062091905b808211156200061c57600081600090555060010162000602565b5090565b90565b61491e80620006336000396000f3fe6080604052600436106101b75760003560e01c80634f0d5d16116100ec578063a457c2d71161008a578063aec0f0f111610064578063aec0f0f114610dbe578063b5f163ff14610e15578063dd62ed3e14610e64578063e65052ad14610ee9576101b7565b8063a457c2d714610c81578063a734f06e14610cf4578063a9059cbb14610d4b576101b7565b80636c63d6de116100c65780636c63d6de146109dc57806370a0823114610a3357806395d89b4114610a985780639e0001a114610b28576101b7565b80634f0d5d161461078f5780634f64b2be146108fc578063523fba7f14610977576101b7565b806323da74b811610159578063313ce56711610133578063313ce5671461058857806339509351146105b95780633ccfd60b1461062c5780633e55a6a214610643576101b7565b806323da74b8146104405780632a11ced0146104a95780632dca266c146104f8576101b7565b806306fdde031161019557806306fdde031461027f578063095ea7b31461030f57806318160ddd1461038257806323b872dd146103ad576101b7565b806302fb0c5e146101bc578063040141e5146101eb57806305217c1514610242575b600080fd5b3480156101c857600080fd5b506101d1610f3a565b604051808215151515815260200191505060405180910390f35b3480156101f757600080fd5b50610200610f4d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561024e57600080fd5b5061027d6004803603602081101561026557600080fd5b81019080803515159060200190929190505050610f65565b005b34801561028b57600080fd5b50610294611041565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102d45780820151818401526020810190506102b9565b50505050905090810190601f1680156103015780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561031b57600080fd5b506103686004803603604081101561033257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110e3565b604051808215151515815260200191505060405180910390f35b34801561038e57600080fd5b50610397611101565b6040518082815260200191505060405180910390f35b3480156103b957600080fd5b50610426600480360360608110156103d057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061110b565b604051808215151515815260200191505060405180910390f35b34801561044c57600080fd5b5061048f6004803603602081101561046357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111e4565b604051808215151515815260200191505060405180910390f35b3480156104b557600080fd5b506104e2600480360360208110156104cc57600080fd5b8101908080359060200190929190505050611204565b6040518082815260200191505060405180910390f35b34801561050457600080fd5b506105316004803603602081101561051b57600080fd5b8101908080359060200190929190505050611225565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610574578082015181840152602081019050610559565b505050509050019250505060405180910390f35b34801561059457600080fd5b5061059d6112a3565b604051808260ff1660ff16815260200191505060405180910390f35b3480156105c557600080fd5b50610612600480360360408110156105dc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506112ba565b604051808215151515815260200191505060405180910390f35b34801561063857600080fd5b5061064161136d565b005b61078d6004803603604081101561065957600080fd5b810190808035906020019064010000000081111561067657600080fd5b82018360208201111561068857600080fd5b803590602001918460208302840111640100000000831117156106aa57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561070a57600080fd5b82018360208201111561071c57600080fd5b8035906020019184602083028401116401000000008311171561073e57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506117e6565b005b34801561079b57600080fd5b506108e6600480360360408110156107b257600080fd5b81019080803590602001906401000000008111156107cf57600080fd5b8201836020820111156107e157600080fd5b8035906020019184602083028401116401000000008311171561080357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561086357600080fd5b82018360208201111561087557600080fd5b8035906020019184602083028401116401000000008311171561089757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611c92565b6040518082815260200191505060405180910390f35b34801561090857600080fd5b506109356004803603602081101561091f57600080fd5b8101908080359060200190929190505050611ec7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561098357600080fd5b506109c66004803603602081101561099a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f03565b6040518082815260200191505060405180910390f35b3480156109e857600080fd5b506109f1611f1b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a3f57600080fd5b50610a8260048036036020811015610a5657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f41565b6040518082815260200191505060405180910390f35b348015610aa457600080fd5b50610aad611f89565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610aed578082015181840152602081019050610ad2565b50505050905090810190601f168015610b1a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610b3457600080fd5b50610c7f60048036036040811015610b4b57600080fd5b8101908080359060200190640100000000811115610b6857600080fd5b820183602082011115610b7a57600080fd5b80359060200191846020830284011164010000000083111715610b9c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610bfc57600080fd5b820183602082011115610c0e57600080fd5b80359060200191846020830284011164010000000083111715610c3057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929050505061202b565b005b348015610c8d57600080fd5b50610cda60048036036040811015610ca457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612299565b604051808215151515815260200191505060405180910390f35b348015610d0057600080fd5b50610d09612366565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610d5757600080fd5b50610da460048036036040811015610d6e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061237e565b604051808215151515815260200191505060405180910390f35b348015610dca57600080fd5b50610dd361239c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610e2157600080fd5b50610e4e60048036036020811015610e3857600080fd5b81019080803590602001909291905050506123b4565b6040518082815260200191505060405180910390f35b348015610e7057600080fd5b50610ed360048036036040811015610e8757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123d5565b6040518082815260200191505060405180910390f35b348015610ef557600080fd5b50610f3860048036036020811015610f0c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061245c565b005b600f60009054906101000a900460ff1681565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611024576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f73797374656d206f6e6c7900000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b606060038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110d95780601f106110ae576101008083540402835291602001916110d9565b820191906000526020600020905b8154815290600101906020018083116110bc57829003601f168201915b5050505050905090565b60006110f76110f0612576565b848461257e565b6001905092915050565b6000600254905090565b6000611118848484612775565b6111d984611124612576565b6111d48560405180606001604052806028815260200161483360289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061118a612576565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a369092919063ffffffff16565b61257e565b600190509392505050565b60106020528060005260406000206000915054906101000a900460ff1681565b6006818154811061121157fe5b906000526020600020016000915090505481565b60606000600190505b600780549050811161129d5761127860095461126a6008848154811061125057fe5b906000526020600020015486612af690919063ffffffff16565b612b7c90919063ffffffff16565b82828151811061128457fe5b602002602001018181525050808060010191505061122e565b50919050565b6000600560009054906101000a900460ff16905090565b60006113636112c7612576565b8461135e85600160006112d8612576565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bc690919063ffffffff16565b61257e565b6001905092915050565b600061137833611f41565b905060006113b0611387611101565b6113a2670de0b6b3a764000085612af690919063ffffffff16565b612b7c90919063ffffffff16565b905060008111611428576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f6e6f2062616c616e636520696e207468697320706f6f6c00000000000000000081525060200191505060405180910390fd5b6114323383612c4e565b60008090505b6007805490508110156117935760006114ea670de0b6b3a76400006114dc85600e60006007888154811061146857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612af690919063ffffffff16565b612b7c90919063ffffffff16565b905061157581600e60006007868154811061150157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e1290919063ffffffff16565b600e60006007858154811061158657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600782815481106115fc57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156116ad57600080fd5b505af11580156116c1573d6000803e3d6000fd5b505050506040513d60208110156116d757600080fd5b810190808051906020019092919050505050600782815481106116f657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f11dd463c4f2edd676b85f050130c7ab2f5832f52becb5444b09a92404aa1498a836040518082815260200191505060405180910390a3508080600101915050611438565b503373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5836040518082815260200191505060405180910390a25050565b600f60009054906101000a900460ff166117ff57600080fd5b606080600080855114156119925766038d7ea4c680003411611889576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f302e303031206574686572206d696e20706f6f6c20696e00000000000000000081525060200191505060405180910390fd5b34905061198573eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee82600780548060200260200160405190810160405280929190818152602001828054801561192757602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116118dd575b5050505050600880548060200260200160405190810160405280929190818152602001828054801561197857602002820191906000526020600020905b815481526020019060010190808311611964575b5050505050600954612e5c565b8093508194505050611bf1565b600185511415611ad2576119a68585611c92565b905066038d7ea4c6800081116119b857fe5b611ac5856000815181106119c857fe5b6020026020010151856000815181106119dd57fe5b60200260200101516007805480602002602001604051908101604052809291908181526020018280548015611a6757602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611a1d575b50505050506008805480602002602001604051908101604052809291908181526020018280548015611ab857602002820191906000526020600020905b815481526020019060010190808311611aa4575b5050505050600954612e5c565b8093508194505050611bf0565b611adc85856134e9565b905066038d7ea4c680008111611aee57fe5b611be773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee826007805480602002602001604051908101604052809291908181526020018280548015611b8957602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611b3f575b50505050506008805480602002602001604051908101604052809291908181526020018280548015611bda57602002820191906000526020600020905b815481526020019060010190808311611bc6575b5050505050600954612e5c565b80935081945050505b5b60008090505b8351811015611c8057828181518110611c0c57fe5b6020026020010151600e6000868481518110611c2457fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508080600101915050611bf7565b50611c8b3382613a62565b5050505050565b6000806000606060008090505b8651811015611eba577350fda034c0ce7a8f7efdaebda7aa7ca21cc1267e73ffffffffffffffffffffffffffffffffffffffff1663085e2c5b888381518110611ce457fe5b602002602001015173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2898581518110611d0d57fe5b6020026020010151600260006040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018281526020019550505050505060006040518083038186803b158015611dc157600080fd5b505afa158015611dd5573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506040811015611dff57600080fd5b810190808051906020019092919080516040519392919084640100000000821115611e2957600080fd5b83820191506020820185811115611e3f57600080fd5b8251866020820283011164010000000082111715611e5c57600080fd5b8083526020830192505050908051906020019060200280838360005b83811015611e93578082015181840152602081019050611e78565b50505050905001604052505050809350819550505083830192508080600101915050611c9f565b5081935050505092915050565b60078181548110611ed457fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e6020528060005260406000206000915090505481565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b606060048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120215780601f10611ff657610100808354040283529160200191612021565b820191906000526020600020905b81548152906001019060200180831161200457829003601f168201915b5050505050905090565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166120ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f73797374656d206f6e6c7900000000000000000000000000000000000000000081525060200191505060405180910390fd5b8051825114612161576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f696e76616c696420636f6e666967206c656e677468000000000000000000000081525060200191505060405180910390fd5b600080600090505b83518110156122565773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168482815181106121a957fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614158015612228575073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1684828151811061220757fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b61223157600080fd5b82818151811061223d57fe5b6020026020010151820191508080600101915050612169565b5082600b908051906020019061226d9291906145a1565b5081600c908051906020019061228492919061462b565b5080600d81905550612294613c29565b505050565b600061235c6122a6612576565b84612357856040518060600160405280602581526020016148c560259139600160006122d0612576565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a369092919063ffffffff16565b61257e565b6001905092915050565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b600061239261238b612576565b8484612775565b6001905092915050565b7350fda034c0ce7a8f7efdaebda7aa7ca21cc1267e81565b600881815481106123c157fe5b906000526020600020016000915090505481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661251b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f73797374656d206f6e6c7900000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612604576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806148a16024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561268a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806147ca6022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061487c6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612881576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806147856023913960400191505060405180910390fd5b61288c838383613f91565b6128f7816040518060600160405280602681526020016147ec602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a369092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061298a816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bc690919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290612ae3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612aa8578082015181840152602081019050612a8d565b50505050905090810190601f168015612ad55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080831415612b095760009050612b76565b6000828402905082848281612b1a57fe5b0414612b71576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806148126021913960400191505060405180910390fd5b809150505b92915050565b6000612bbe83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613f96565b905092915050565b600080828401905083811015612c44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cd4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061485b6021913960400191505060405180910390fd5b612ce082600083613f91565b612d4b816040518060600160405280602281526020016147a8602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a369092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612da281600254612e1290919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000612e5483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612a36565b905092915050565b606080600080606060008090505b88518110156134d557612eab87612e9d8a8481518110612e8657fe5b60200260200101518d612af690919063ffffffff16565b612b7c90919063ffffffff16565b93507350fda034c0ce7a8f7efdaebda7aa7ca21cc1267e73ffffffffffffffffffffffffffffffffffffffff1663085e2c5b8c8b8481518110612eea57fe5b602002602001015187600260006040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018281526020019550505050505060006040518083038186803b158015612f9f57600080fd5b505afa158015612fb3573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506040811015612fdd57600080fd5b81019080805190602001909291908051604051939291908464010000000082111561300757600080fd5b8382019150602082018581111561301d57600080fd5b825186602082028301116401000000008211171561303a57600080fd5b8083526020830192505050908051906020019060200280838360005b83811015613071578082015181840152602081019050613056565b50505050905001604052505050809350819450505073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141561324c577350fda034c0ce7a8f7efdaebda7aa7ca21cc1267e73ffffffffffffffffffffffffffffffffffffffff1663e2a7515e858d8c858151811061310c57fe5b602002602001015188888860006040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200185815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b838110156131e15780820151818401526020810190506131c6565b505050509050019750505050505050506020604051808303818588803b15801561320a57600080fd5b505af115801561321e573d6000803e3d6000fd5b50505050506040513d602081101561323557600080fd5b8101908080519060200190929190505050506134af565b88818151811061325857fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1663095ea7b37350fda034c0ce7a8f7efdaebda7aa7ca21cc1267e866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156132fa57600080fd5b505af115801561330e573d6000803e3d6000fd5b505050506040513d602081101561332457600080fd5b8101908080519060200190929190505050507350fda034c0ce7a8f7efdaebda7aa7ca21cc1267e73ffffffffffffffffffffffffffffffffffffffff1663e2a7515e8c8b848151811061337357fe5b602002602001015187878760006040518763ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200185815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b8381101561344857808201518184015260208101905061342d565b50505050905001975050505050505050602060405180830381600087803b15801561347257600080fd5b505af1158015613486573d6000803e3d6000fd5b505050506040513d602081101561349c57600080fd5b8101908080519060200190929190505050505b828882815181106134bc57fe5b6020026020010181815250508080600101915050612e6a565b508787945094505050509550959350505050565b6000806000606060008090505b8651811015613a5557600086828151811061350d57fe5b6020026020010151141561352057613a48565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1687828151811061355757fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614156135985785818151811061358757fe5b602002602001015183019250613a48565b8681815181106135a457fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1663095ea7b37350fda034c0ce7a8f7efdaebda7aa7ca21cc1267e8884815181106135e857fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561365957600080fd5b505af115801561366d573d6000803e3d6000fd5b505050506040513d602081101561368357600080fd5b8101908080519060200190929190505050507350fda034c0ce7a8f7efdaebda7aa7ca21cc1267e73ffffffffffffffffffffffffffffffffffffffff1663085e2c5b8883815181106136d157fe5b602002602001015173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28985815181106136fa57fe5b6020026020010151600260006040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018281526020019550505050505060006040518083038186803b1580156137ae57600080fd5b505afa1580156137c2573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060408110156137ec57600080fd5b81019080805190602001909291908051604051939291908464010000000082111561381657600080fd5b8382019150602082018581111561382c57600080fd5b825186602082028301116401000000008211171561384957600080fd5b8083526020830192505050908051906020019060200280838360005b83811015613880578082015181840152602081019050613865565b50505050905001604052505050809350819550505060008414156138a357613a48565b7350fda034c0ce7a8f7efdaebda7aa7ca21cc1267e73ffffffffffffffffffffffffffffffffffffffff1663e2a7515e8883815181106138df57fe5b602002602001015173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc289858151811061390857fe5b6020026020010151888760006040518763ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200185815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b838110156139dc5780820151818401526020810190506139c1565b50505050905001975050505050505050602060405180830381600087803b158015613a0657600080fd5b505af1158015613a1a573d6000803e3d6000fd5b505050506040513d6020811015613a3057600080fd5b81019080805190602001909291905050505083830192505b80806001019150506134f6565b5081935050505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613b05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b613b1160008383613f91565b613b2681600254612bc690919063ffffffff16565b600281905550613b7d816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bc690919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b606080600a9080519060200190613c4192919061462b565b5060008090505b600780549050811015613d8057600a600e600060078481548110613c6857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490806001815401808255809150509060018203906000526020600020016000909192909190915055506000600e600060078481548110613d0a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080600101915050613c48565b506000613e636007805480602002602001604051908101604052809291908181526020018280548015613e0857602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311613dbe575b5050505050600a805480602002602001604051908101604052809291908181526020018280548015613e5957602002820191906000526020600020905b815481526020019060010190808311613e45575b50505050506134e9565b9050600b6007908054613e77929190614678565b50600c6008908054613e8a9291906146ca565b50600d546009819055506000811415613ea4575050613f8f565b81600a9080519060200190613eba92919061462b565b50613ed973c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28261405c565b60008090505b600780549050811015613f8b57600a8181548110613ef957fe5b9060005260206000200154600e600060078481548110613f1557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080600101915050613edf565b5050505b565b505050565b60008083118290614042576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614007578082015181840152602081019050613fec565b50505050905090810190601f1680156140345780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161404e57fe5b049050809150509392505050565b60008060608473ffffffffffffffffffffffffffffffffffffffff1663095ea7b37350fda034c0ce7a8f7efdaebda7aa7ca21cc1267e866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156140fc57600080fd5b505af1158015614110573d6000803e3d6000fd5b505050506040513d602081101561412657600080fd5b81019080805190602001909291905050505060008090505b600b8054905081101561459957614189600d5461417b600c848154811061416157fe5b906000526020600020015488612af690919063ffffffff16565b612b7c90919063ffffffff16565b935060008414156141c657600a6000908060018154018082558091505090600182039060005260206000200160009091929091909150555061458c565b7350fda034c0ce7a8f7efdaebda7aa7ca21cc1267e73ffffffffffffffffffffffffffffffffffffffff1663085e2c5b87600b848154811061420457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1687600560006040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018281526020019550505050505060006040518083038186803b1580156142dc57600080fd5b505afa1580156142f0573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250604081101561431a57600080fd5b81019080805190602001909291908051604051939291908464010000000082111561434457600080fd5b8382019150602082018581111561435a57600080fd5b825186602082028301116401000000008211171561437757600080fd5b8083526020830192505050908051906020019060200280838360005b838110156143ae578082015181840152602081019050614393565b5050505090500160405250505080935081945050507350fda034c0ce7a8f7efdaebda7aa7ca21cc1267e73ffffffffffffffffffffffffffffffffffffffff1663e2a7515e87600b848154811061440157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1687878760006040518763ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200185815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b838110156144f95780820151818401526020810190506144de565b50505050905001975050505050505050602060405180830381600087803b15801561452357600080fd5b505af1158015614537573d6000803e3d6000fd5b505050506040513d602081101561454d57600080fd5b810190808051906020019092919050505050600a8390806001815401808255809150509060018203906000526020600020016000909192909190915055505b808060010191505061413e565b505050505050565b82805482825590600052602060002090810192821561461a579160200282015b828111156146195782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906145c1565b5b509050614627919061471c565b5090565b828054828255906000526020600020908101928215614667579160200282015b8281111561466657825182559160200191906001019061464b565b5b509050614674919061475f565b5090565b8280548282559060005260206000209081019282156146b95760005260206000209182015b828111156146b857825482559160010191906001019061469d565b5b5090506146c6919061471c565b5090565b82805482825590600052602060002090810192821561470b5760005260206000209182015b8281111561470a5782548255916001019190600101906146ef565b5b509050614718919061475f565b5090565b61475c91905b8082111561475857600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600101614722565b5090565b90565b61478191905b8082111561477d576000816000905550600101614765565b5090565b9056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa265627a7a723158203f440a93eb2a4ff62408aac08ea3bf563d526e6488bc7c3941639b5eeceed61964736f6c6343000511003200000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000004a87834e526d4c4c4ce8cbbb3a0999a3603d71a8000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000007544d54506f6f6c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007544d54506f6f6c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f984000000000000000000000000ba100000625a3754423978a60c9317c58a424e3d000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002
Deployed Bytecode
0x6080604052600436106101b75760003560e01c80634f0d5d16116100ec578063a457c2d71161008a578063aec0f0f111610064578063aec0f0f114610dbe578063b5f163ff14610e15578063dd62ed3e14610e64578063e65052ad14610ee9576101b7565b8063a457c2d714610c81578063a734f06e14610cf4578063a9059cbb14610d4b576101b7565b80636c63d6de116100c65780636c63d6de146109dc57806370a0823114610a3357806395d89b4114610a985780639e0001a114610b28576101b7565b80634f0d5d161461078f5780634f64b2be146108fc578063523fba7f14610977576101b7565b806323da74b811610159578063313ce56711610133578063313ce5671461058857806339509351146105b95780633ccfd60b1461062c5780633e55a6a214610643576101b7565b806323da74b8146104405780632a11ced0146104a95780632dca266c146104f8576101b7565b806306fdde031161019557806306fdde031461027f578063095ea7b31461030f57806318160ddd1461038257806323b872dd146103ad576101b7565b806302fb0c5e146101bc578063040141e5146101eb57806305217c1514610242575b600080fd5b3480156101c857600080fd5b506101d1610f3a565b604051808215151515815260200191505060405180910390f35b3480156101f757600080fd5b50610200610f4d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561024e57600080fd5b5061027d6004803603602081101561026557600080fd5b81019080803515159060200190929190505050610f65565b005b34801561028b57600080fd5b50610294611041565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102d45780820151818401526020810190506102b9565b50505050905090810190601f1680156103015780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561031b57600080fd5b506103686004803603604081101561033257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110e3565b604051808215151515815260200191505060405180910390f35b34801561038e57600080fd5b50610397611101565b6040518082815260200191505060405180910390f35b3480156103b957600080fd5b50610426600480360360608110156103d057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061110b565b604051808215151515815260200191505060405180910390f35b34801561044c57600080fd5b5061048f6004803603602081101561046357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111e4565b604051808215151515815260200191505060405180910390f35b3480156104b557600080fd5b506104e2600480360360208110156104cc57600080fd5b8101908080359060200190929190505050611204565b6040518082815260200191505060405180910390f35b34801561050457600080fd5b506105316004803603602081101561051b57600080fd5b8101908080359060200190929190505050611225565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610574578082015181840152602081019050610559565b505050509050019250505060405180910390f35b34801561059457600080fd5b5061059d6112a3565b604051808260ff1660ff16815260200191505060405180910390f35b3480156105c557600080fd5b50610612600480360360408110156105dc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506112ba565b604051808215151515815260200191505060405180910390f35b34801561063857600080fd5b5061064161136d565b005b61078d6004803603604081101561065957600080fd5b810190808035906020019064010000000081111561067657600080fd5b82018360208201111561068857600080fd5b803590602001918460208302840111640100000000831117156106aa57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561070a57600080fd5b82018360208201111561071c57600080fd5b8035906020019184602083028401116401000000008311171561073e57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506117e6565b005b34801561079b57600080fd5b506108e6600480360360408110156107b257600080fd5b81019080803590602001906401000000008111156107cf57600080fd5b8201836020820111156107e157600080fd5b8035906020019184602083028401116401000000008311171561080357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561086357600080fd5b82018360208201111561087557600080fd5b8035906020019184602083028401116401000000008311171561089757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611c92565b6040518082815260200191505060405180910390f35b34801561090857600080fd5b506109356004803603602081101561091f57600080fd5b8101908080359060200190929190505050611ec7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561098357600080fd5b506109c66004803603602081101561099a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f03565b6040518082815260200191505060405180910390f35b3480156109e857600080fd5b506109f1611f1b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a3f57600080fd5b50610a8260048036036020811015610a5657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f41565b6040518082815260200191505060405180910390f35b348015610aa457600080fd5b50610aad611f89565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610aed578082015181840152602081019050610ad2565b50505050905090810190601f168015610b1a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610b3457600080fd5b50610c7f60048036036040811015610b4b57600080fd5b8101908080359060200190640100000000811115610b6857600080fd5b820183602082011115610b7a57600080fd5b80359060200191846020830284011164010000000083111715610b9c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610bfc57600080fd5b820183602082011115610c0e57600080fd5b80359060200191846020830284011164010000000083111715610c3057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929050505061202b565b005b348015610c8d57600080fd5b50610cda60048036036040811015610ca457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612299565b604051808215151515815260200191505060405180910390f35b348015610d0057600080fd5b50610d09612366565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610d5757600080fd5b50610da460048036036040811015610d6e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061237e565b604051808215151515815260200191505060405180910390f35b348015610dca57600080fd5b50610dd361239c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610e2157600080fd5b50610e4e60048036036020811015610e3857600080fd5b81019080803590602001909291905050506123b4565b6040518082815260200191505060405180910390f35b348015610e7057600080fd5b50610ed360048036036040811015610e8757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123d5565b6040518082815260200191505060405180910390f35b348015610ef557600080fd5b50610f3860048036036020811015610f0c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061245c565b005b600f60009054906101000a900460ff1681565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611024576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f73797374656d206f6e6c7900000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b606060038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110d95780601f106110ae576101008083540402835291602001916110d9565b820191906000526020600020905b8154815290600101906020018083116110bc57829003601f168201915b5050505050905090565b60006110f76110f0612576565b848461257e565b6001905092915050565b6000600254905090565b6000611118848484612775565b6111d984611124612576565b6111d48560405180606001604052806028815260200161483360289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061118a612576565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a369092919063ffffffff16565b61257e565b600190509392505050565b60106020528060005260406000206000915054906101000a900460ff1681565b6006818154811061121157fe5b906000526020600020016000915090505481565b60606000600190505b600780549050811161129d5761127860095461126a6008848154811061125057fe5b906000526020600020015486612af690919063ffffffff16565b612b7c90919063ffffffff16565b82828151811061128457fe5b602002602001018181525050808060010191505061122e565b50919050565b6000600560009054906101000a900460ff16905090565b60006113636112c7612576565b8461135e85600160006112d8612576565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bc690919063ffffffff16565b61257e565b6001905092915050565b600061137833611f41565b905060006113b0611387611101565b6113a2670de0b6b3a764000085612af690919063ffffffff16565b612b7c90919063ffffffff16565b905060008111611428576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f6e6f2062616c616e636520696e207468697320706f6f6c00000000000000000081525060200191505060405180910390fd5b6114323383612c4e565b60008090505b6007805490508110156117935760006114ea670de0b6b3a76400006114dc85600e60006007888154811061146857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612af690919063ffffffff16565b612b7c90919063ffffffff16565b905061157581600e60006007868154811061150157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e1290919063ffffffff16565b600e60006007858154811061158657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600782815481106115fc57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156116ad57600080fd5b505af11580156116c1573d6000803e3d6000fd5b505050506040513d60208110156116d757600080fd5b810190808051906020019092919050505050600782815481106116f657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f11dd463c4f2edd676b85f050130c7ab2f5832f52becb5444b09a92404aa1498a836040518082815260200191505060405180910390a3508080600101915050611438565b503373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5836040518082815260200191505060405180910390a25050565b600f60009054906101000a900460ff166117ff57600080fd5b606080600080855114156119925766038d7ea4c680003411611889576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f302e303031206574686572206d696e20706f6f6c20696e00000000000000000081525060200191505060405180910390fd5b34905061198573eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee82600780548060200260200160405190810160405280929190818152602001828054801561192757602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116118dd575b5050505050600880548060200260200160405190810160405280929190818152602001828054801561197857602002820191906000526020600020905b815481526020019060010190808311611964575b5050505050600954612e5c565b8093508194505050611bf1565b600185511415611ad2576119a68585611c92565b905066038d7ea4c6800081116119b857fe5b611ac5856000815181106119c857fe5b6020026020010151856000815181106119dd57fe5b60200260200101516007805480602002602001604051908101604052809291908181526020018280548015611a6757602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611a1d575b50505050506008805480602002602001604051908101604052809291908181526020018280548015611ab857602002820191906000526020600020905b815481526020019060010190808311611aa4575b5050505050600954612e5c565b8093508194505050611bf0565b611adc85856134e9565b905066038d7ea4c680008111611aee57fe5b611be773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee826007805480602002602001604051908101604052809291908181526020018280548015611b8957602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611b3f575b50505050506008805480602002602001604051908101604052809291908181526020018280548015611bda57602002820191906000526020600020905b815481526020019060010190808311611bc6575b5050505050600954612e5c565b80935081945050505b5b60008090505b8351811015611c8057828181518110611c0c57fe5b6020026020010151600e6000868481518110611c2457fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508080600101915050611bf7565b50611c8b3382613a62565b5050505050565b6000806000606060008090505b8651811015611eba577350fda034c0ce7a8f7efdaebda7aa7ca21cc1267e73ffffffffffffffffffffffffffffffffffffffff1663085e2c5b888381518110611ce457fe5b602002602001015173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2898581518110611d0d57fe5b6020026020010151600260006040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018281526020019550505050505060006040518083038186803b158015611dc157600080fd5b505afa158015611dd5573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506040811015611dff57600080fd5b810190808051906020019092919080516040519392919084640100000000821115611e2957600080fd5b83820191506020820185811115611e3f57600080fd5b8251866020820283011164010000000082111715611e5c57600080fd5b8083526020830192505050908051906020019060200280838360005b83811015611e93578082015181840152602081019050611e78565b50505050905001604052505050809350819550505083830192508080600101915050611c9f565b5081935050505092915050565b60078181548110611ed457fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e6020528060005260406000206000915090505481565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b606060048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120215780601f10611ff657610100808354040283529160200191612021565b820191906000526020600020905b81548152906001019060200180831161200457829003601f168201915b5050505050905090565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166120ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f73797374656d206f6e6c7900000000000000000000000000000000000000000081525060200191505060405180910390fd5b8051825114612161576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f696e76616c696420636f6e666967206c656e677468000000000000000000000081525060200191505060405180910390fd5b600080600090505b83518110156122565773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168482815181106121a957fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614158015612228575073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1684828151811061220757fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b61223157600080fd5b82818151811061223d57fe5b6020026020010151820191508080600101915050612169565b5082600b908051906020019061226d9291906145a1565b5081600c908051906020019061228492919061462b565b5080600d81905550612294613c29565b505050565b600061235c6122a6612576565b84612357856040518060600160405280602581526020016148c560259139600160006122d0612576565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a369092919063ffffffff16565b61257e565b6001905092915050565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b600061239261238b612576565b8484612775565b6001905092915050565b7350fda034c0ce7a8f7efdaebda7aa7ca21cc1267e81565b600881815481106123c157fe5b906000526020600020016000915090505481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661251b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f73797374656d206f6e6c7900000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612604576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806148a16024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561268a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806147ca6022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061487c6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612881576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806147856023913960400191505060405180910390fd5b61288c838383613f91565b6128f7816040518060600160405280602681526020016147ec602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a369092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061298a816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bc690919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290612ae3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612aa8578082015181840152602081019050612a8d565b50505050905090810190601f168015612ad55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080831415612b095760009050612b76565b6000828402905082848281612b1a57fe5b0414612b71576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806148126021913960400191505060405180910390fd5b809150505b92915050565b6000612bbe83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613f96565b905092915050565b600080828401905083811015612c44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cd4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061485b6021913960400191505060405180910390fd5b612ce082600083613f91565b612d4b816040518060600160405280602281526020016147a8602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a369092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612da281600254612e1290919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000612e5483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612a36565b905092915050565b606080600080606060008090505b88518110156134d557612eab87612e9d8a8481518110612e8657fe5b60200260200101518d612af690919063ffffffff16565b612b7c90919063ffffffff16565b93507350fda034c0ce7a8f7efdaebda7aa7ca21cc1267e73ffffffffffffffffffffffffffffffffffffffff1663085e2c5b8c8b8481518110612eea57fe5b602002602001015187600260006040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018281526020019550505050505060006040518083038186803b158015612f9f57600080fd5b505afa158015612fb3573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506040811015612fdd57600080fd5b81019080805190602001909291908051604051939291908464010000000082111561300757600080fd5b8382019150602082018581111561301d57600080fd5b825186602082028301116401000000008211171561303a57600080fd5b8083526020830192505050908051906020019060200280838360005b83811015613071578082015181840152602081019050613056565b50505050905001604052505050809350819450505073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141561324c577350fda034c0ce7a8f7efdaebda7aa7ca21cc1267e73ffffffffffffffffffffffffffffffffffffffff1663e2a7515e858d8c858151811061310c57fe5b602002602001015188888860006040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200185815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b838110156131e15780820151818401526020810190506131c6565b505050509050019750505050505050506020604051808303818588803b15801561320a57600080fd5b505af115801561321e573d6000803e3d6000fd5b50505050506040513d602081101561323557600080fd5b8101908080519060200190929190505050506134af565b88818151811061325857fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1663095ea7b37350fda034c0ce7a8f7efdaebda7aa7ca21cc1267e866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156132fa57600080fd5b505af115801561330e573d6000803e3d6000fd5b505050506040513d602081101561332457600080fd5b8101908080519060200190929190505050507350fda034c0ce7a8f7efdaebda7aa7ca21cc1267e73ffffffffffffffffffffffffffffffffffffffff1663e2a7515e8c8b848151811061337357fe5b602002602001015187878760006040518763ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200185815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b8381101561344857808201518184015260208101905061342d565b50505050905001975050505050505050602060405180830381600087803b15801561347257600080fd5b505af1158015613486573d6000803e3d6000fd5b505050506040513d602081101561349c57600080fd5b8101908080519060200190929190505050505b828882815181106134bc57fe5b6020026020010181815250508080600101915050612e6a565b508787945094505050509550959350505050565b6000806000606060008090505b8651811015613a5557600086828151811061350d57fe5b6020026020010151141561352057613a48565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1687828151811061355757fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614156135985785818151811061358757fe5b602002602001015183019250613a48565b8681815181106135a457fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1663095ea7b37350fda034c0ce7a8f7efdaebda7aa7ca21cc1267e8884815181106135e857fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561365957600080fd5b505af115801561366d573d6000803e3d6000fd5b505050506040513d602081101561368357600080fd5b8101908080519060200190929190505050507350fda034c0ce7a8f7efdaebda7aa7ca21cc1267e73ffffffffffffffffffffffffffffffffffffffff1663085e2c5b8883815181106136d157fe5b602002602001015173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28985815181106136fa57fe5b6020026020010151600260006040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018281526020019550505050505060006040518083038186803b1580156137ae57600080fd5b505afa1580156137c2573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060408110156137ec57600080fd5b81019080805190602001909291908051604051939291908464010000000082111561381657600080fd5b8382019150602082018581111561382c57600080fd5b825186602082028301116401000000008211171561384957600080fd5b8083526020830192505050908051906020019060200280838360005b83811015613880578082015181840152602081019050613865565b50505050905001604052505050809350819550505060008414156138a357613a48565b7350fda034c0ce7a8f7efdaebda7aa7ca21cc1267e73ffffffffffffffffffffffffffffffffffffffff1663e2a7515e8883815181106138df57fe5b602002602001015173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc289858151811061390857fe5b6020026020010151888760006040518763ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200185815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b838110156139dc5780820151818401526020810190506139c1565b50505050905001975050505050505050602060405180830381600087803b158015613a0657600080fd5b505af1158015613a1a573d6000803e3d6000fd5b505050506040513d6020811015613a3057600080fd5b81019080805190602001909291905050505083830192505b80806001019150506134f6565b5081935050505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613b05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b613b1160008383613f91565b613b2681600254612bc690919063ffffffff16565b600281905550613b7d816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bc690919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b606080600a9080519060200190613c4192919061462b565b5060008090505b600780549050811015613d8057600a600e600060078481548110613c6857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490806001815401808255809150509060018203906000526020600020016000909192909190915055506000600e600060078481548110613d0a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080600101915050613c48565b506000613e636007805480602002602001604051908101604052809291908181526020018280548015613e0857602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311613dbe575b5050505050600a805480602002602001604051908101604052809291908181526020018280548015613e5957602002820191906000526020600020905b815481526020019060010190808311613e45575b50505050506134e9565b9050600b6007908054613e77929190614678565b50600c6008908054613e8a9291906146ca565b50600d546009819055506000811415613ea4575050613f8f565b81600a9080519060200190613eba92919061462b565b50613ed973c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28261405c565b60008090505b600780549050811015613f8b57600a8181548110613ef957fe5b9060005260206000200154600e600060078481548110613f1557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080600101915050613edf565b5050505b565b505050565b60008083118290614042576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614007578082015181840152602081019050613fec565b50505050905090810190601f1680156140345780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161404e57fe5b049050809150509392505050565b60008060608473ffffffffffffffffffffffffffffffffffffffff1663095ea7b37350fda034c0ce7a8f7efdaebda7aa7ca21cc1267e866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156140fc57600080fd5b505af1158015614110573d6000803e3d6000fd5b505050506040513d602081101561412657600080fd5b81019080805190602001909291905050505060008090505b600b8054905081101561459957614189600d5461417b600c848154811061416157fe5b906000526020600020015488612af690919063ffffffff16565b612b7c90919063ffffffff16565b935060008414156141c657600a6000908060018154018082558091505090600182039060005260206000200160009091929091909150555061458c565b7350fda034c0ce7a8f7efdaebda7aa7ca21cc1267e73ffffffffffffffffffffffffffffffffffffffff1663085e2c5b87600b848154811061420457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1687600560006040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018281526020019550505050505060006040518083038186803b1580156142dc57600080fd5b505afa1580156142f0573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250604081101561431a57600080fd5b81019080805190602001909291908051604051939291908464010000000082111561434457600080fd5b8382019150602082018581111561435a57600080fd5b825186602082028301116401000000008211171561437757600080fd5b8083526020830192505050908051906020019060200280838360005b838110156143ae578082015181840152602081019050614393565b5050505090500160405250505080935081945050507350fda034c0ce7a8f7efdaebda7aa7ca21cc1267e73ffffffffffffffffffffffffffffffffffffffff1663e2a7515e87600b848154811061440157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1687878760006040518763ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200185815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b838110156144f95780820151818401526020810190506144de565b50505050905001975050505050505050602060405180830381600087803b15801561452357600080fd5b505af1158015614537573d6000803e3d6000fd5b505050506040513d602081101561454d57600080fd5b810190808051906020019092919050505050600a8390806001815401808255809150509060018203906000526020600020016000909192909190915055505b808060010191505061413e565b505050505050565b82805482825590600052602060002090810192821561461a579160200282015b828111156146195782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906145c1565b5b509050614627919061471c565b5090565b828054828255906000526020600020908101928215614667579160200282015b8281111561466657825182559160200191906001019061464b565b5b509050614674919061475f565b5090565b8280548282559060005260206000209081019282156146b95760005260206000209182015b828111156146b857825482559160010191906001019061469d565b5b5090506146c6919061471c565b5090565b82805482825590600052602060002090810192821561470b5760005260206000209182015b8281111561470a5782548255916001019190600101906146ef565b5b509050614718919061475f565b5090565b61475c91905b8082111561475857600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600101614722565b5090565b90565b61478191905b8082111561477d576000816000905550600101614765565b5090565b9056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa265627a7a723158203f440a93eb2a4ff62408aac08ea3bf563d526e6488bc7c3941639b5eeceed61964736f6c63430005110032
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000004a87834e526d4c4c4ce8cbbb3a0999a3603d71a8000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000007544d54506f6f6c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007544d54506f6f6c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f984000000000000000000000000ba100000625a3754423978a60c9317c58a424e3d000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002
-----Decoded View---------------
Arg [0] : name (string): TMTPool
Arg [1] : symbol (string): TMTPool
Arg [2] : _TMTTokenAddress (address): 0x4A87834e526D4C4c4CE8cbBB3A0999A3603d71a8
Arg [3] : _tokens (address[]): 0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984,0xba100000625a3754423978a60c9317c58a424e3D
Arg [4] : _weights (uint256[]): 1,2
-----Encoded View---------------
15 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000004a87834e526d4c4c4ce8cbbb3a0999a3603d71a8
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [6] : 544d54506f6f6c00000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [8] : 544d54506f6f6c00000000000000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [10] : 0000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f984
Arg [11] : 000000000000000000000000ba100000625a3754423978a60c9317c58a424e3d
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [14] : 0000000000000000000000000000000000000000000000000000000000000002
Deployed Bytecode Sourcemap
108:7795:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;777:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;777:25:2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;347:81;;8:9:-1;5:2;;;30:1;27;20:12;5:2;347:81:2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4033;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4033:81:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4033:81:2;;;;;;;;;;;;;;;;;;;:::i;:::-;;16151:83:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16151:83:3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;16151:83:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18205:152;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18205:152:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18205:152:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;17226:91;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17226:91:3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18831:304;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18831:304:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18831:304:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;810:47:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;810:47:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;810:47:2;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;470:21;;8:9:-1;5:2;;;30:1;27;20:12;5:2;470:21:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;470:21:2;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7694:206;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7694:206:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7694:206:2;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;7694:206:2;;;;;;;;;;;;;;;;;17078:83:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17078:83:3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;19544:210;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19544:210:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19544:210:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2935:615:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2935:615:2;;;:::i;:::-;;1817:1113;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1817:1113:2;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;1817:1113:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1817:1113:2;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;1817:1113:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;1817:1113:2;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;1817:1113:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1817:1113:2;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;1817:1113:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;1817:1113:2;;;;;;;;;;;;;;;:::i;:::-;;4119:431;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4119:431:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4119:431:2;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;4119:431:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;4119:431:2;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;4119:431:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;4119:431:2;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;4119:431:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;4119:431:2;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;4119:431:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;4119:431:2;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;497:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;497:23:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;497:23:2;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;726:45;;8:9:-1;5:2;;;30:1;27;20:12;5:2;726:45:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;726:45:2;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;434:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;434:30:2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;17380:110:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17380:110:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17380:110:3;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16353:87;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16353:87:3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;16353:87:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3555:473:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3555:473:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3555:473:2;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;3555:473:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;3555:473:2;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;3555:473:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;3555:473:2;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;3555:473:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;3555:473:2;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;3555:473:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;3555:473:2;;;;;;;;;;;;;;;:::i;:::-;;20257:261:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20257:261:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20257:261:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;263:80:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;263:80:2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;17703:158:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17703:158:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17703:158:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;173:86:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;173:86:2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;525:21;;8:9:-1;5:2;;;30:1;27;20:12;5:2;525:21:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;525:21:2;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17924:134:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17924:134:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17924:134:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1161:123:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1161:123:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1161:123:2;;;;;;;;;;;;;;;;;;;:::i;:::-;;777:25;;;;;;;;;;;;;:::o;347:81::-;386:42;347:81;:::o;4033:::-;900:15;:27;916:10;900:27;;;;;;;;;;;;;;;;;;;;;;;;;892:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4102:7;4093:6;;:16;;;;;;;;;;;;;;;;;;4033:81;:::o;16151:83:3:-;16188:13;16221:5;16214:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16151:83;:::o;18205:152::-;18271:4;18288:39;18297:12;:10;:12::i;:::-;18311:7;18320:6;18288:8;:39::i;:::-;18345:4;18338:11;;18205:152;;;;:::o;17226:91::-;17270:7;17297:12;;17290:19;;17226:91;:::o;18831:304::-;18920:4;18937:36;18947:6;18955:9;18966:6;18937:9;:36::i;:::-;18984:121;18993:6;19001:12;:10;:12::i;:::-;19015:89;19053:6;19015:89;;;;;;;;;;;;;;;;;:11;:19;19027:6;19015:19;;;;;;;;;;;;;;;:33;19035:12;:10;:12::i;:::-;19015:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;18984:8;:121::i;:::-;19123:4;19116:11;;18831:304;;;;;:::o;810:47:2:-;;;;;;;;;;;;;;;;;;;;;;:::o;470:21::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7694:206::-;7767:17;7795:6;7804:1;7795:10;;7791:105;7812:6;:13;;;;7807:1;:18;7791:105;;7847:43;7878:11;;7847:26;7862:7;7870:1;7862:10;;;;;;;;;;;;;;;;7847;:14;;:26;;;;:::i;:::-;:30;;:43;;;;:::i;:::-;7838:3;7842:1;7838:6;;;;;;;;;;;;;:52;;;;;7827:3;;;;;;;7791:105;;;;7694:206;;;:::o;17078:83:3:-;17119:5;17144:9;;;;;;;;;;;17137:16;;17078:83;:::o;19544:210::-;19624:4;19641:83;19650:12;:10;:12::i;:::-;19664:7;19673:50;19712:10;19673:11;:25;19685:12;:10;:12::i;:::-;19673:25;;;;;;;;;;;;;;;:34;19699:7;19673:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;19641:8;:83::i;:::-;19742:4;19735:11;;19544:210;;;;:::o;2935:615:2:-;2967:13;2983:21;2993:10;2983:9;:21::i;:::-;2967:37;;3009:16;3028:40;3054:13;:11;:13::i;:::-;3028:21;3041:7;3028:8;:12;;:21;;;;:::i;:::-;:25;;:40;;;;:::i;:::-;3009:59;;3095:1;3081:11;:15;3073:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3131:27;3137:10;3149:8;3131:5;:27::i;:::-;3170:6;3179:1;3170:10;;3165:336;3186:6;:13;;;;3182:1;:17;3165:336;;;3212:20;3235:54;3281:7;3235:41;3264:11;3235:13;:24;3249:6;3256:1;3249:9;;;;;;;;;;;;;;;;;;;;;;;;;3235:24;;;;;;;;;;;;;;;;:28;;:41;;;;:::i;:::-;:45;;:54;;;;:::i;:::-;3212:77;;3322:45;3351:15;3322:13;:24;3336:6;3343:1;3336:9;;;;;;;;;;;;;;;;;;;;;;;;;3322:24;;;;;;;;;;;;;;;;:28;;:45;;;;:::i;:::-;3295:13;:24;3309:6;3316:1;3309:9;;;;;;;;;;;;;;;;;;;;;;;;;3295:24;;;;;;;;;;;;;;;:72;;;;3380:6;3387:1;3380:9;;;;;;;;;;;;;;;;;;;;;;;;;3373:26;;;3400:10;3412:15;3373:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3373:55:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3373:55:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3373:55:2;;;;;;;;;;;;;;;;;3468:6;3475:1;3468:9;;;;;;;;;;;;;;;;;;;;;;;;;3441:54;;3456:10;3441:54;;;3479:15;3441:54;;;;;;;;;;;;;;;;;;3165:336;3201:3;;;;;;;3165:336;;;;3524:10;3514:31;;;3536:8;3514:31;;;;;;;;;;;;;;;;;;2935:615;;:::o;1817:1113::-;997:6;;;;;;;;;;;988:16;;;;;;2022:31;2058:29;2092:13;2135:1;2117:7;:14;:19;2114:657;;;2165:11;2153:9;:23;2144:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2221:9;2210:20;;2274:57;301:42;2292:8;2302:6;2274:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2310:7;2274:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2319:11;;2274:4;:57::i;:::-;2238:93;;;;;;;;2114:657;;;2364:1;2346:7;:14;:19;2343:428;;;2384:41;2408:7;2417;2384:23;:41::i;:::-;2373:52;;2449:11;2438:8;:22;2431:30;;;;2505:58;2510:7;2518:1;2510:10;;;;;;;;;;;;;;2522:7;2530:1;2522:10;;;;;;;;;;;;;;2534:6;2505:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2542:7;2505:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2551:11;;2505:4;:58::i;:::-;2469:94;;;;;;;;2343:428;;;2592:36;2611:7;2620;2592:18;:36::i;:::-;2581:47;;2652:11;2641:8;:22;2634:30;;;;2708:57;301:42;2726:8;2736:6;2708:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2744:7;2708:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2753:11;;2708:4;:57::i;:::-;2672:93;;;;;;;;2343:428;2114:657;2782:6;2791:1;2782:10;;2777:115;2798:14;:21;2794:1;:25;2777:115;;;2868:15;2884:1;2868:18;;;;;;;;;;;;;;2832:13;:32;2846:14;2861:1;2846:17;;;;;;;;;;;;;;2832:32;;;;;;;;;;;;;;;;:54;;;;;;;;;;;2821:3;;;;;;;2777:115;;;;2898:27;2904:10;2916:8;2898:5;:27::i;:::-;1010:1;;;1817:1113;;:::o;4119:431::-;4222:4;4233:12;4250:17;4272:27;4308:6;4317:1;4308:10;;4304:216;4324:7;:14;4320:1;:18;4304:216;;;217:42;4378:46;;;4432:7;4440:1;4432:10;;;;;;;;;;;;;;386:42;4467:8;4476:1;4467:11;;;;;;;;;;;;;;4480:1;4483;4378:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4378:107:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4378:107:2;;;;;;39:16:-1;36:1;17:17;2:54;4378:107:2;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13:2;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4378:107:2;;;;;;;;;;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;385:12;380:3;373:25;421:4;416:3;412:14;405:21;;0:433;;4378:107:2;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;4378:107:2;;;;;;;;;;;4351:134;;;;;;;;4507:7;4491:23;;;;4340:3;;;;;;;4304:216;;;;4533:12;4526:19;;;;;4119:431;;;;:::o;497:23::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;726:45::-;;;;;;;;;;;;;;;;;:::o;434:30::-;;;;;;;;;;;;;:::o;17380:110:3:-;17437:7;17464:9;:18;17474:7;17464:18;;;;;;;;;;;;;;;;17457:25;;17380:110;;;:::o;16353:87::-;16392:13;16425:7;16418:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16353:87;:::o;3555:473:2:-;900:15;:27;916:10;900:27;;;;;;;;;;;;;;;;;;;;;;;;;892:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3681:8;:15;3663:7;:14;:33;3655:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3731:20;3762:6;3771:1;3762:10;;3758:157;3778:7;:14;3774:1;:18;3758:157;;;301:42;3814:25;;:7;3822:1;3814:10;;;;;;;;;;;;;;:25;;;;:55;;;;;386:42;3843:26;;:7;3851:1;3843:10;;;;;;;;;;;;;;:26;;;;3814:55;3805:65;;;;;;3898:8;3907:1;3898:11;;;;;;;;;;;;;;3879:30;;;;3794:3;;;;;;;3758:157;;;;3935:7;3923:9;:19;;;;;;;;;;;;:::i;:::-;;3960:8;3947:10;:21;;;;;;;;;;;;:::i;:::-;;3990:15;3973:14;:32;;;;4012:11;:9;:11::i;:::-;951:1;3555:473;;:::o;20257:261:3:-;20342:4;20359:129;20368:12;:10;:12::i;:::-;20382:7;20391:96;20430:15;20391:96;;;;;;;;;;;;;;;;;:11;:25;20403:12;:10;:12::i;:::-;20391:25;;;;;;;;;;;;;;;:34;20417:7;20391:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;20359:8;:129::i;:::-;20506:4;20499:11;;20257:261;;;;:::o;263:80:2:-;301:42;263:80;:::o;17703:158:3:-;17772:4;17789:42;17799:12;:10;:12::i;:::-;17813:9;17824:6;17789:9;:42::i;:::-;17849:4;17842:11;;17703:158;;;;:::o;173:86:2:-;217:42;173:86;:::o;525:21::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;17924:134:3:-;17996:7;18023:11;:18;18035:5;18023:18;;;;;;;;;;;;;;;:27;18042:7;18023:27;;;;;;;;;;;;;;;;18016:34;;17924:134;;;;:::o;1161:123:2:-;900:15;:27;916:10;900:27;;;;;;;;;;;;;;;;;;;;;;;;;892:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1275:4;1239:15;:33;1255:16;1239:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;1161:123;:::o;561:98:1:-;606:15;641:10;634:17;;561:98;:::o;23370:338:3:-;23481:1;23464:19;;:5;:19;;;;23456:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23562:1;23543:21;;:7;:21;;;;23535:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23646:6;23616:11;:18;23628:5;23616:18;;;;;;;;;;;;;;;:27;23635:7;23616:27;;;;;;;;;;;;;;;:36;;;;23684:7;23668:32;;23677:5;23668:32;;;23693:6;23668:32;;;;;;;;;;;;;;;;;;23370:338;;;:::o;21008:531::-;21124:1;21106:20;;:6;:20;;;;21098:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21208:1;21187:23;;:9;:23;;;;21179:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21263:47;21284:6;21292:9;21303:6;21263:20;:47::i;:::-;21343:71;21365:6;21343:71;;;;;;;;;;;;;;;;;:9;:17;21353:6;21343:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;21323:9;:17;21333:6;21323:17;;;;;;;;;;;;;;;:91;;;;21448:32;21473:6;21448:9;:20;21458:9;21448:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;21425:9;:20;21435:9;21425:20;;;;;;;;;;;;;;;:55;;;;21513:9;21496:35;;21505:6;21496:35;;;21524:6;21496:35;;;;;;;;;;;;;;;;;;21008:531;;;:::o;1832:192::-;1918:7;1951:1;1946;:6;;1954:12;1938:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1938:29:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1978:9;1994:1;1990;:5;1978:17;;2015:1;2008:8;;;1832:192;;;;;:::o;2283:471::-;2341:7;2591:1;2586;:6;2582:47;;;2616:1;2609:8;;;;2582:47;2641:9;2657:1;2653;:5;2641:17;;2686:1;2681;2677;:5;;;;;;:10;2669:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2745:1;2738:8;;;2283:471;;;;;:::o;3230:132::-;3288:7;3315:39;3319:1;3322;3315:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;3308:46;;3230:132;;;;:::o;929:181::-;987:7;1007:9;1023:1;1019;:5;1007:17;;1048:1;1043;:6;;1035:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1101:1;1094:8;;;929:181;;;;:::o;22522:410::-;22617:1;22598:21;;:7;:21;;;;22590:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22670:49;22691:7;22708:1;22712:6;22670:20;:49::i;:::-;22753:68;22776:6;22753:68;;;;;;;;;;;;;;;;;:9;:18;22763:7;22753:18;;;;;;;;;;;;;;;;:22;;:68;;;;;:::i;:::-;22732:9;:18;22742:7;22732:18;;;;;;;;;;;;;;;:89;;;;22847:24;22864:6;22847:12;;:16;;:24;;;;:::i;:::-;22832:12;:39;;;;22913:1;22887:37;;22896:7;22887:37;;;22917:6;22887:37;;;;;;;;;;;;;;;;;;22522:410;;:::o;1393:136::-;1451:7;1478:43;1482:1;1485;1478:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1471:50;;1393:136;;;;:::o;6029:928:2:-;6158:16;6176:13;6196:15;6216:12;6233:27;6279:6;6288:1;6279:10;;6275:643;6295:7;:14;6291:1;:18;6275:643;;;6335:41;6363:12;6335:23;6346:8;6355:1;6346:11;;;;;;;;;;;;;;6335:6;:10;;:23;;;;:::i;:::-;:27;;:41;;;;:::i;:::-;6322:54;;217:42;6411:46;;;6465:6;6481:7;6489:1;6481:10;;;;;;;;;;;;;;6494;6506:1;6509;6411:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6411:100:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6411:100:2;;;;;;39:16:-1;36:1;17:17;2:54;6411:100:2;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13:2;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6411:100:2;;;;;;;;;;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;385:12;380:3;373:25;421:4;416:3;412:14;405:21;;0:433;;6411:100:2;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;6411:100:2;;;;;;;;;;;6384:127;;;;;;;;301:42;6523:21;;:6;:21;;;6519:362;;;217:42;6553:33;;;6593:10;6612:6;6628:7;6636:1;6628:10;;;;;;;;;;;;;;6641;6653:7;6662:13;6677:1;6553:126;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;6553:126:2;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6553:126:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6553:126:2;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6553:126:2;;;;;;;;;;;;;;;;;6519:362;;;6709:7;6717:1;6709:10;;;;;;;;;;;;;;6702:26;;;217:42;6748:10;6702:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6702:57:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6702:57:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6702:57:2;;;;;;;;;;;;;;;;;217:42;6766:33;;;6807:6;6823:7;6831:1;6823:10;;;;;;;;;;;;;;6836;6848:7;6857:13;6872:1;6766:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;6766:108:2;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6766:108:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6766:108:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6766:108:2;;;;;;;;;;;;;;;;;6519:362;6905:7;6891:8;6900:1;6891:11;;;;;;;;;;;;;:21;;;;;6311:3;;;;;;;6275:643;;;;6934:7;6943:8;6926:26;;;;;;;6029:928;;;;;;;;:::o;4608:863::-;4703:4;4714:12;4731:17;4753:27;4789:6;4798:1;4789:10;;4785:656;4805:7;:14;4801:1;:18;4785:656;;;4854:1;4839:8;4848:1;4839:11;;;;;;;;;;;;;;:16;4835:53;;;4870:8;;4835:53;386:42;4908:26;;:7;4916:1;4908:10;;;;;;;;;;;;;;:26;;;4904:103;;;4965:8;4974:1;4965:11;;;;;;;;;;;;;;4949:27;;;;4989:8;;4904:103;5022:7;5030:1;5022:10;;;;;;;;;;;;;;5015:26;;;217:42;5061:8;5070:1;5061:11;;;;;;;;;;;;;;5015:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5015:58:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5015:58:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5015:58:2;;;;;;;;;;;;;;;;;217:42;5114:46;;;5168:7;5176:1;5168:10;;;;;;;;;;;;;;386:42;5203:8;5212:1;5203:11;;;;;;;;;;;;;;5216:1;5219;5114:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5114:107:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5114:107:2;;;;;;39:16:-1;36:1;17:17;2:54;5114:107:2;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13:2;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5114:107:2;;;;;;;;;;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;385:12;380:3;373:25;421:4;416:3;412:14;405:21;;0:433;;5114:107:2;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;5114:107:2;;;;;;;;;;;5087:134;;;;;;;;5242:1;5231:7;:12;5227:49;;;5258:8;;5227:49;217:42;5289:33;;;5330:7;5338:1;5330:10;;;;;;;;;;;;;;386:42;5365:8;5374:1;5365:11;;;;;;;;;;;;;;5378:7;5387:13;5402:1;5289:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;5289:115:2;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5289:115:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5289:115:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5289:115:2;;;;;;;;;;;;;;;;;5428:7;5412:23;;;;4785:656;4821:3;;;;;;;4785:656;;;;5454:12;5447:19;;;;;4608:863;;;;:::o;21820:370:3:-;21915:1;21896:21;;:7;:21;;;;21888:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21966:49;21995:1;21999:7;22008:6;21966:20;:49::i;:::-;22043:24;22060:6;22043:12;;:16;;:24;;;;:::i;:::-;22028:12;:39;;;;22099:30;22122:6;22099:9;:18;22109:7;22099:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;22078:9;:18;22088:7;22078:18;;;;;;;;;;;;;;;:51;;;;22166:7;22145:37;;22162:1;22145:37;;;22175:6;22145:37;;;;;;;;;;;;;;;;;;21820:370;;:::o;5476:548:2:-;5518:18;5547:4;5541:3;:10;;;;;;;;;;;;:::i;:::-;;5563:6;5572:1;5563:10;;5558:121;5579:6;:13;;;;5575:1;:17;5558:121;;;5605:3;5614:13;:24;5628:6;5635:1;5628:9;;;;;;;;;;;;;;;;;;;;;;;;;5614:24;;;;;;;;;;;;;;;;5605:34;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;5605:34:2;;;;;;;;;;;;;;;;;;;;;;5672:1;5645:13;:24;5659:6;5666:1;5659:9;;;;;;;;;;;;;;;;;;;;;;;;;5645:24;;;;;;;;;;;;;;;:28;;;;5594:3;;;;;;;5558:121;;;;5691:13;5707:31;5726:6;5707:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5734:3;5707:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:18;:31::i;:::-;5691:47;;5758:9;5749:6;:18;;;;;;;;:::i;:::-;;5782:10;5772:7;:20;;;;;;;;:::i;:::-;;5811:14;;5797:11;:28;;;;5850:1;5838:8;:13;5834:40;;;5862:7;;;;5834:40;5888:4;5882:3;:10;;;;;;;;;;;;:::i;:::-;;5897:29;386:42;5917:8;5897:5;:29::i;:::-;5939:6;5948:1;5939:10;;5935:85;5955:6;:13;;;;5951:1;:17;5935:85;;;6008:3;6012:1;6008:6;;;;;;;;;;;;;;;;5981:13;:24;5995:6;6002:1;5995:9;;;;;;;;;;;;;;;;;;;;;;;;;5981:24;;;;;;;;;;;;;;;:33;;;;5970:3;;;;;;;5935:85;;;;5476:548;;;:::o;24733:84:3:-;;;;:::o;3858:278::-;3944:7;3976:1;3972;:5;3979:12;3964:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;3964:28:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4003:9;4019:1;4015;:5;;;;;;4003:17;;4127:1;4120:8;;;3858:278;;;;;:::o;6963:726:2:-;7021:15;7041:12;7062:27;7105:6;7098:22;;;217:42;7140:6;7098:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7098:49:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7098:49:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7098:49:2;;;;;;;;;;;;;;;;;7160:6;7169:1;7160:10;;7156:529;7176:9;:16;;;;7172:1;:20;7156:529;;;7232:45;7262:14;;7232:25;7243:10;7254:1;7243:13;;;;;;;;;;;;;;;;7232:6;:10;;:25;;;;:::i;:::-;:29;;:45;;;;:::i;:::-;7219:58;;7305:1;7291:10;:15;7288:66;;;7318:3;7327:1;7318:11;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;7318:11:2;;;;;;;;;;;;;;;;;;;;;;7339:8;;7288:66;217:42;7391:46;;;7445:6;7461:9;7471:1;7461:12;;;;;;;;;;;;;;;;;;;;;;;;;7476:10;7488:1;7491;7391:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7391:102:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7391:102:2;;;;;;39:16:-1;36:1;17:17;2:54;7391:102:2;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13:2;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7391:102:2;;;;;;;;;;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;385:12;380:3;373:25;421:4;416:3;412:14;405:21;;0:433;;7391:102:2;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;7391:102:2;;;;;;;;;;;7364:129;;;;;;;;217:42;7509:33;;;7550:6;7566:9;7576:1;7566:12;;;;;;;;;;;;;;;;;;;;;;;;;7581:10;7593:7;7602:13;7617:1;7509:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;7509:110:2;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7509:110:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7509:110:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7509:110:2;;;;;;;;;;;;;;;;;7634:3;7643:7;7634:17;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;7634:17:2;;;;;;;;;;;;;;;;;;;;;;7156:529;7194:3;;;;;;;7156:529;;;;6963:726;;;;;:::o;108:7795::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
bzzr://3f440a93eb2a4ff62408aac08ea3bf563d526e6488bc7c3941639b5eeceed619
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $2,415.31 | 0.000000000000000001 | <$0.000001 |
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.