Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
2,546.024431933182227597 uSD
Holders
45
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.098607712860013014 uSDValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
StableCoin
Compiler Version
v0.7.0+commit.9e61f92b
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity ^0.7.0; import "./ERC20.sol"; import "./IStableCoin.sol"; contract StableCoin is ERC20, IStableCoin { address private constant UNISWAP_V2_ROUTER = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; address private _doubleProxy; address[] private _allowedPairs; uint256[] private _rebalanceRewardMultiplier; uint256[] private _timeWindows; uint256[] private _mintables; uint256 private _lastRedeemBlock; constructor( string memory name, string memory symbol, address doubleProxy, address[] memory allowedPairs, uint256[] memory rebalanceRewardMultiplier, uint256[] memory timeWindows, uint256[] memory mintables ) { if (doubleProxy == address(0)) { return; } init( name, symbol, doubleProxy, allowedPairs, rebalanceRewardMultiplier, timeWindows, mintables ); } function init( string memory name, string memory symbol, address doubleProxy, address[] memory allowedPairs, uint256[] memory rebalanceRewardMultiplier, uint256[] memory timeWindows, uint256[] memory mintables ) public override { super.init(name, symbol); _doubleProxy = doubleProxy; _allowedPairs = allowedPairs; assert(rebalanceRewardMultiplier.length == 2); _rebalanceRewardMultiplier = rebalanceRewardMultiplier; assert(timeWindows.length == mintables.length); _timeWindows = timeWindows; _mintables = mintables; } function tierData() public override view returns (uint256[] memory, uint256[] memory) { return (_timeWindows, _mintables); } function availableToMint() public override view returns (uint256) { uint256 mintable = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff; if(_timeWindows.length > 0 && block.number < _timeWindows[_timeWindows.length - 1]) { for (uint256 i = 0; i < _timeWindows.length; i++) { if (block.number < _timeWindows[i]) { mintable = _mintables[i]; break; } } } uint256 minted = totalSupply(); return minted >= mintable ? 0 : mintable - minted; } function doubleProxy() public override view returns (address) { return _doubleProxy; } function setDoubleProxy(address newDoubleProxy) public override _byCommunity { _doubleProxy = newDoubleProxy; } function allowedPairs() public override view returns (address[] memory) { return _allowedPairs; } function setAllowedPairs(address[] memory newAllowedPairs) public override _byCommunity { _allowedPairs = newAllowedPairs; } function rebalanceRewardMultiplier() public override view returns (uint256[] memory) { return _rebalanceRewardMultiplier; } function differences() public override view returns (uint256 credit, uint256 debt) { uint256 totalSupply = totalSupply(); uint256 effectiveAmount = 0; for (uint256 i = 0; i < _allowedPairs.length; i++) { (uint256 amount0, uint256 amount1) = _getPairAmount(i); effectiveAmount += (amount0 + amount1); } credit = effectiveAmount > totalSupply ? effectiveAmount - totalSupply : 0; debt = totalSupply > effectiveAmount ? totalSupply - effectiveAmount : 0; } function calculateRebalanceByDebtReward(uint256 burnt) public override view returns (uint256 reward) { if(burnt == 0) { return 0; } address[] memory path = new address[](2); path[0] = address(this); path[1] = IMVDProxy(IDoubleProxy(_doubleProxy).proxy()).getToken(); reward = IUniswapV2Router(UNISWAP_V2_ROUTER).getAmountsOut( burnt, path )[1]; reward = (reward * _rebalanceRewardMultiplier[0]) / _rebalanceRewardMultiplier[1]; } function fromTokenToStable(address tokenAddress, uint256 amount) public override view returns (uint256) { StableCoin token = StableCoin(tokenAddress); uint256 remainingDecimals = decimals() - token.decimals(); uint256 result = amount == 0 ? token.balanceOf(address(this)) : amount; if (remainingDecimals == 0) { return result; } return result * 10**remainingDecimals; } function mint( uint256 pairIndex, uint256 amount0, uint256 amount1, uint256 amount0Min, uint256 amount1Min ) public override _forAllowedPair(pairIndex) returns (uint256 minted) { require( IStateHolder( IMVDProxy(IDoubleProxy(_doubleProxy).proxy()) .getStateHolderAddress() ) .getBool( _toStateHolderKey( "stablecoin.authorized", _toString(address(this)) ) ), "Unauthorized action!" ); (address token0, address token1, ) = _getPairData(pairIndex); _transferTokensAndCheckAllowance(token0, amount0); _transferTokensAndCheckAllowance(token1, amount1); (uint256 firstAmount, uint256 secondAmount, ) = _createPoolToken( token0, token1, amount0, amount1, amount0Min, amount1Min ); minted = fromTokenToStable(token0, firstAmount) + fromTokenToStable(token1, secondAmount); require(minted <= availableToMint(), "Minting amount is greater than availability"); _mint(msg.sender, minted); } function burn( uint256 pairIndex, uint256 pairAmount, uint256 amount0, uint256 amount1 ) public override _forAllowedPair(pairIndex) returns (uint256 removed0, uint256 removed1) { (address token0, address token1, address pairAddress) = _getPairData(pairIndex); _checkAllowance(pairAddress, pairAmount); (removed0, removed1) = IUniswapV2Router(UNISWAP_V2_ROUTER) .removeLiquidity( token0, token1, pairAmount, amount0, amount1, msg.sender, block.timestamp + 1000 ); _burn( msg.sender, fromTokenToStable(token0, removed0) + fromTokenToStable(token1, removed1) ); } function rebalanceByCredit( uint256 pairIndex, uint256 pairAmount, uint256 amount0, uint256 amount1 ) public override _forAllowedPair(pairIndex) returns (uint256 redeemed) { require( block.number >= _lastRedeemBlock + IStateHolder( IMVDProxy(IDoubleProxy(_doubleProxy).proxy()) .getStateHolderAddress() ) .getUint256("stablecoin.rebalancebycredit.block.interval"), "Unauthorized action!" ); _lastRedeemBlock = block.number; (uint256 credit, ) = differences(); (address token0, address token1, address pairAddress) = _getPairData(pairIndex); _checkAllowance(pairAddress, pairAmount); (uint256 removed0, uint256 removed1) = IUniswapV2Router( UNISWAP_V2_ROUTER ) .removeLiquidity( token0, token1, pairAmount, amount0, amount1, IMVDProxy(IDoubleProxy(_doubleProxy).proxy()).getMVDWalletAddress(), block.timestamp + 1000 ); redeemed = fromTokenToStable(token0, removed0) + fromTokenToStable(token1, removed1); require(redeemed <= credit, "Cannot redeem given pair amount"); } function rebalanceByDebt(uint256 amount) public override returns(uint256 reward) { require(amount > 0, "You must insert a positive value"); (, uint256 debt) = differences(); require(amount <= debt, "Cannot Burn this amount"); _burn(msg.sender, amount); IMVDProxy(IDoubleProxy(_doubleProxy).proxy()).submit( "mintNewVotingTokensForStableCoin", abi.encode( address(0), 0, reward = calculateRebalanceByDebtReward(amount), msg.sender ) ); } modifier _byCommunity() { require( IMVDFunctionalitiesManager( IMVDProxy(IDoubleProxy(_doubleProxy).proxy()) .getMVDFunctionalitiesManagerAddress() ) .isAuthorizedFunctionality(msg.sender), "Unauthorized Action!" ); _; } modifier _forAllowedPair(uint256 pairIndex) { require( pairIndex >= 0 && pairIndex < _allowedPairs.length, "Unknown pair!" ); _; } function _getPairData(uint256 pairIndex) private view returns ( address token0, address token1, address pairAddress ) { IUniswapV2Pair pair = IUniswapV2Pair( pairAddress = _allowedPairs[pairIndex] ); token0 = pair.token0(); token1 = pair.token1(); } function _transferTokensAndCheckAllowance( address tokenAddress, uint256 value ) private { IERC20(tokenAddress).transferFrom(msg.sender, address(this), value); _checkAllowance(tokenAddress, value); } function _checkAllowance(address tokenAddress, uint256 value) private { IERC20 token = IERC20(tokenAddress); if (token.allowance(address(this), UNISWAP_V2_ROUTER) <= value) { token.approve( UNISWAP_V2_ROUTER, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ); } } function _createPoolToken( address firstToken, address secondToken, uint256 originalFirstAmount, uint256 originalSecondAmount, uint256 firstAmountMin, uint256 secondAmountMin ) private returns ( uint256 firstAmount, uint256 secondAmount, uint256 poolAmount ) { (firstAmount, secondAmount, poolAmount) = IUniswapV2Router( UNISWAP_V2_ROUTER ) .addLiquidity( firstToken, secondToken, originalFirstAmount, originalSecondAmount, firstAmountMin, secondAmountMin, address(this), block.timestamp + 1000 ); if (firstAmount < originalFirstAmount) { IERC20(firstToken).transfer( msg.sender, originalFirstAmount - firstAmount ); } if (secondAmount < originalSecondAmount) { IERC20(secondToken).transfer( msg.sender, originalSecondAmount - secondAmount ); } } function _getPairAmount(uint256 i) private view returns (uint256 amount0, uint256 amount1) { (address token0, address token1, address pairAddress) = _getPairData(i); IUniswapV2Pair pair = IUniswapV2Pair(pairAddress); uint256 pairAmount = pair.balanceOf(address(this)); uint256 pairTotalSupply = pair.totalSupply(); (amount0, amount1, ) = pair.getReserves(); amount0 = fromTokenToStable( token0, (pairAmount * amount0) / pairTotalSupply ); amount1 = fromTokenToStable( token1, (pairAmount * amount1) / pairTotalSupply ); } function _toStateHolderKey(string memory a, string memory b) private pure returns (string memory) { return _toLowerCase(string(abi.encodePacked(a, "_", b))); } function _toString(address _addr) private pure returns (string memory) { bytes32 value = bytes32(uint256(_addr)); bytes memory alphabet = "0123456789abcdef"; bytes memory str = new bytes(42); str[0] = "0"; str[1] = "x"; for (uint256 i = 0; i < 20; i++) { str[2 + i * 2] = alphabet[uint256(uint8(value[i + 12] >> 4))]; str[3 + i * 2] = alphabet[uint256(uint8(value[i + 12] & 0x0f))]; } return string(str); } function _toLowerCase(string memory str) private pure returns (string memory) { bytes memory bStr = bytes(str); for (uint256 i = 0; i < bStr.length; i++) { bStr[i] = bStr[i] >= 0x41 && bStr[i] <= 0x5A ? bytes1(uint8(bStr[i]) + 0x20) : bStr[i]; } return string(bStr); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.7.0; /** * @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); } } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.7.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. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.7.0; import "./Context.sol"; import "./IERC20.sol"; import "./SafeMath.sol"; import "./Address.sol"; import "./IStableCoin.sol"; /** * @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}. */ abstract 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. */ function init(string memory name, string memory symbol) internal { require( keccak256(bytes(_symbol)) == keccak256(""), "Init already Called!" ); _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 override view returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public override 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 virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public virtual override 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 virtual override 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 virtual override 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 virtual 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 virtual 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 virtual { 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 virtual { 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 virtual { 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 is 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 virtual { 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 virtual {} }
// SPDX-License-Identifier: MIT pragma solidity ^0.7.0; /** * @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); }
// SPDX-License-Identifier: MIT pragma solidity ^0.7.0; interface IStableCoin { function init( string calldata name, string calldata symbol, address doubleProxy, address[] calldata allowedPairs, uint256[] calldata rebalanceRewardMultiplier, uint256[] calldata timeWindows, uint256[] calldata mintables ) external; function tierData() external view returns(uint256[] memory, uint256[] memory); function availableToMint() external view returns(uint256); function doubleProxy() external view returns (address); function setDoubleProxy(address newDoubleProxy) external; function allowedPairs() external view returns (address[] memory); function setAllowedPairs(address[] calldata newAllowedPairs) external; function rebalanceRewardMultiplier() external view returns (uint256[] memory); function differences() external view returns (uint256, uint256); function calculateRebalanceByDebtReward(uint256 burnt) external view returns (uint256); function fromTokenToStable(address tokenAddress, uint256 amount) external view returns (uint256); function mint( uint256 pairIndex, uint256 amount0, uint256 amount1, uint256 amount0Min, uint256 amount1Min ) external returns (uint256); function burn( uint256 pairIndex, uint256 pairAmount, uint256 amount0, uint256 amount1 ) external returns (uint256, uint256); function rebalanceByCredit( uint256 pairIndex, uint256 pairAmount, uint256 amount0, uint256 amount1 ) external returns (uint256); function rebalanceByDebt(uint256 amount) external returns(uint256); } interface IDoubleProxy { function proxy() external view returns (address); } interface IMVDProxy { function getToken() external view returns (address); function getMVDFunctionalitiesManagerAddress() external view returns (address); function getMVDWalletAddress() external view returns (address); function getStateHolderAddress() external view returns (address); function submit(string calldata codeName, bytes calldata data) external payable returns (bytes memory returnData); } interface IMVDFunctionalitiesManager { function isAuthorizedFunctionality(address functionality) external view returns (bool); } interface IStateHolder { function getBool(string calldata varName) external view returns (bool); function getUint256(string calldata varName) external view returns (uint256); } interface IUniswapV2Router { function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); } interface IUniswapV2Pair { function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function token0() external view returns (address); function token1() external view returns (address); function balanceOf(address account) external view returns (uint256); function getReserves() external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast ); }
// SPDX-License-Identifier: MIT pragma solidity ^0.7.0; /** * @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; } }
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":"doubleProxy","type":"address"},{"internalType":"address[]","name":"allowedPairs","type":"address[]"},{"internalType":"uint256[]","name":"rebalanceRewardMultiplier","type":"uint256[]"},{"internalType":"uint256[]","name":"timeWindows","type":"uint256[]"},{"internalType":"uint256[]","name":"mintables","type":"uint256[]"}],"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"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowedPairs","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"availableToMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pairIndex","type":"uint256"},{"internalType":"uint256","name":"pairAmount","type":"uint256"},{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"}],"name":"burn","outputs":[{"internalType":"uint256","name":"removed0","type":"uint256"},{"internalType":"uint256","name":"removed1","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"burnt","type":"uint256"}],"name":"calculateRebalanceByDebtReward","outputs":[{"internalType":"uint256","name":"reward","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"differences","outputs":[{"internalType":"uint256","name":"credit","type":"uint256"},{"internalType":"uint256","name":"debt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"doubleProxy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"fromTokenToStable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"address","name":"doubleProxy","type":"address"},{"internalType":"address[]","name":"allowedPairs","type":"address[]"},{"internalType":"uint256[]","name":"rebalanceRewardMultiplier","type":"uint256[]"},{"internalType":"uint256[]","name":"timeWindows","type":"uint256[]"},{"internalType":"uint256[]","name":"mintables","type":"uint256[]"}],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pairIndex","type":"uint256"},{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"},{"internalType":"uint256","name":"amount0Min","type":"uint256"},{"internalType":"uint256","name":"amount1Min","type":"uint256"}],"name":"mint","outputs":[{"internalType":"uint256","name":"minted","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pairIndex","type":"uint256"},{"internalType":"uint256","name":"pairAmount","type":"uint256"},{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"}],"name":"rebalanceByCredit","outputs":[{"internalType":"uint256","name":"redeemed","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rebalanceByDebt","outputs":[{"internalType":"uint256","name":"reward","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rebalanceRewardMultiplier","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"newAllowedPairs","type":"address[]"}],"name":"setAllowedPairs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDoubleProxy","type":"address"}],"name":"setDoubleProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tierData","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"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"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162003e7f38038062003e7f833981810160405260e08110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b9083019060208201858111156200006e57600080fd5b82516401000000008111828201881017156200008957600080fd5b82525081516020918201929091019080838360005b83811015620000b85781810151838201526020016200009e565b50505050905090810190601f168015620000e65780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200010a57600080fd5b9083019060208201858111156200012057600080fd5b82516401000000008111828201881017156200013b57600080fd5b82525081516020918201929091019080838360005b838110156200016a57818101518382015260200162000150565b50505050905090810190601f168015620001985780820380516001836020036101000a031916815260200191505b50604081815260208301519201805192949193919284640100000000821115620001c157600080fd5b908301906020820185811115620001d757600080fd5b8251866020820283011164010000000082111715620001f557600080fd5b82525081516020918201928201910280838360005b83811015620002245781810151838201526020016200020a565b50505050905001604052602001805160405193929190846401000000008211156200024e57600080fd5b9083019060208201858111156200026457600080fd5b82518660208202830111640100000000821117156200028257600080fd5b82525081516020918201928201910280838360005b83811015620002b157818101518382015260200162000297565b5050505090500160405260200180516040519392919084640100000000821115620002db57600080fd5b908301906020820185811115620002f157600080fd5b82518660208202830111640100000000821117156200030f57600080fd5b82525081516020918201928201910280838360005b838110156200033e57818101518382015260200162000324565b50505050905001604052602001805160405193929190846401000000008211156200036857600080fd5b9083019060208201858111156200037e57600080fd5b82518660208202830111640100000000821117156200039c57600080fd5b82525081516020918201928201910280838360005b83811015620003cb578181015183820152602001620003b1565b5050505091909101604052505050506001600160a01b038516620003ef5762000400565b62000400878787878787876200040d565b505050505050506200073c565b620004248787620004bd60201b620024061760201c565b60058054610100600160a81b0319166101006001600160a01b03881602179055835162000459906006906020870190620005dc565b5082516002146200046657fe5b82516200047b90600790602086019062000646565b5080518251146200048857fe5b81516200049d90600890602085019062000646565b508051620004b390600990602084019062000646565b5050505050505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470600460405180828054600181600116156101000203166002900480156200053f5780601f106200051c5761010080835404028352918201916200053f565b820191906000526020600020905b8154815290600101906020018083116200052a575b50509150506040518091039020146200059f576040805162461bcd60e51b815260206004820152601460248201527f496e697420616c72656164792043616c6c656421000000000000000000000000604482015290519081900360640190fd5b8151620005b490600390602085019062000692565b508051620005ca90600490602084019062000692565b50506005805460ff1916601217905550565b82805482825590600052602060002090810192821562000634579160200282015b828111156200063457825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190620005fd565b506200064292915062000704565b5090565b82805482825590600052602060002090810192821562000684579160200282015b828111156200068457825182559160200191906001019062000667565b506200064292915062000725565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620006d557805160ff191683800117855562000684565b828001600101855582156200068457918201828111156200068457825182559160200191906001019062000667565b5b80821115620006425780546001600160a01b031916815560010162000705565b5b8082111562000642576000815560010162000726565b613733806200074c6000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c806374601c3c116100de578063ae3dfa2811610097578063cbd99d0311610071578063cbd99d03146108de578063d5d9e01d14610904578063dd62ed3e146109a5578063f9cd4d3e146109d35761018e565b8063ae3dfa281461055d578063afa9a8a114610592578063bbc7eea8146108d65761018e565b806374601c3c146104a95780638df2c58a146104b157806395d89b41146104e0578063a457c2d7146104e8578063a9059cbb14610514578063ac2a89c8146105405761018e565b80633227497e1161014b57806352a64eb41161012557806352a64eb414610369578063544275f71461038a5780635de3326c146103e257806370a08231146104835761018e565b80633227497e146102ea57806339509351146103195780634eb9b592146103455761018e565b806306fdde0314610193578063095ea7b3146102105780630ec076771461025057806318160ddd1461028e57806323b872dd14610296578063313ce567146102cc575b600080fd5b61019b6109f0565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101d55781810151838201526020016101bd565b50505050905090810190601f1680156102025780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61023c6004803603604081101561022657600080fd5b506001600160a01b038135169060200135610a86565b604080519115158252519081900360200190f35b61027c6004803603604081101561026657600080fd5b506001600160a01b038135169060200135610aa4565b60408051918252519081900360200190f35b61027c610bc2565b61023c600480360360608110156102ac57600080fd5b506001600160a01b03813581169160208101359091169060400135610bc8565b6102d4610c4f565b6040805160ff9092168252519081900360200190f35b61027c6004803603608081101561030057600080fd5b5080359060208101359060408101359060600135610c58565b61023c6004803603604081101561032f57600080fd5b506001600160a01b0381351690602001356110c9565b61034d611117565b604080516001600160a01b039092168252519081900360200190f35b61037161112b565b6040805192835260208301919091528051918290030190f35b610392611193565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103ce5781810151838201526020016103b6565b505050509050019250505060405180910390f35b6103ea6111ea565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561042e578181015183820152602001610416565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561046d578181015183820152602001610455565b5050505090500194505050505060405180910390f35b61027c6004803603602081101561049957600080fd5b50356001600160a01b031661129d565b61027c6112bc565b610371600480360360808110156104c757600080fd5b508035906020810135906040810135906060013561136f565b61019b6114bf565b61023c600480360360408110156104fe57600080fd5b506001600160a01b038135169060200135611520565b61023c6004803603604081101561052a57600080fd5b506001600160a01b038135169060200135611588565b61027c6004803603602081101561055657600080fd5b503561159c565b61027c600480360360a081101561057357600080fd5b50803590602081013590604081013590606081013590608001356118bc565b6108d4600480360360e08110156105a857600080fd5b810190602081018135600160201b8111156105c257600080fd5b8201836020820111156105d457600080fd5b803590602001918460018302840111600160201b831117156105f557600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561064757600080fd5b82018360208201111561065957600080fd5b803590602001918460018302840111600160201b8311171561067a57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092956001600160a01b03853516959094909350604081019250602001359050600160201b8111156106dd57600080fd5b8201836020820111156106ef57600080fd5b803590602001918460208302840111600160201b8311171561071057600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561075f57600080fd5b82018360208201111561077157600080fd5b803590602001918460208302840111600160201b8311171561079257600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156107e157600080fd5b8201836020820111156107f357600080fd5b803590602001918460208302840111600160201b8311171561081457600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561086357600080fd5b82018360208201111561087557600080fd5b803590602001918460208302840111600160201b8311171561089657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611bf7945050505050565b005b610392611c90565b6108d4600480360360208110156108f457600080fd5b50356001600160a01b0316611cf1565b6108d46004803603602081101561091a57600080fd5b810190602081018135600160201b81111561093457600080fd5b82018360208201111561094657600080fd5b803590602001918460208302840111600160201b8311171561096757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611ebd945050505050565b61027c600480360360408110156109bb57600080fd5b506001600160a01b0381358116916020013516612078565b61027c600480360360208110156109e957600080fd5b50356120a3565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610a7c5780601f10610a5157610100808354040283529160200191610a7c565b820191906000526020600020905b815481529060010190602001808311610a5f57829003601f168201915b5050505050905090565b6000610a9a610a93612513565b8484612517565b5060015b92915050565b6000808390506000816001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610ae557600080fd5b505afa158015610af9573d6000803e3d6000fd5b505050506040513d6020811015610b0f57600080fd5b5051610b19610c4f565b0360ff169050600084600014610b2f5784610ba2565b604080516370a0823160e01b815230600482015290516001600160a01b038516916370a08231916024808301926020929190829003018186803b158015610b7557600080fd5b505afa158015610b89573d6000803e3d6000fd5b505050506040513d6020811015610b9f57600080fd5b50515b905081610bb3579250610a9e915050565b600a9190910a02949350505050565b60025490565b6000610bd5848484612603565b610c4584610be1612513565b610c40856040518060600160405280602881526020016135f1602891396001600160a01b038a16600090815260016020526040812090610c1f612513565b6001600160a01b03168152602081019190915260400160002054919061275e565b612517565b5060019392505050565b60055460ff1690565b6000846006548110610ca1576040805162461bcd60e51b815260206004820152600d60248201526c556e6b6e6f776e20706169722160981b604482015290519081900360640190fd5b600560019054906101000a90046001600160a01b03166001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b158015610cef57600080fd5b505afa158015610d03573d6000803e3d6000fd5b505050506040513d6020811015610d1957600080fd5b50516040805163ba83c16f60e01b815290516001600160a01b039092169163ba83c16f91600480820192602092909190829003018186803b158015610d5d57600080fd5b505afa158015610d71573d6000803e3d6000fd5b505050506040513d6020811015610d8757600080fd5b5051604051630bb687e360e01b8152602060048201908152602b602483018190526001600160a01b0390931692630bb687e392829160449091019061363a823960400191505060206040518083038186803b158015610de557600080fd5b505afa158015610df9573d6000803e3d6000fd5b505050506040513d6020811015610e0f57600080fd5b5051600a5401431015610e60576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420616374696f6e2160601b604482015290519081900360640190fd5b43600a556000610e6e61112b565b5090506000806000610e7f8a6127f5565b925092509250610e8f818a6128ff565b600080737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663baa2abde86868e8e8e600560019054906101000a90046001600160a01b03166001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b158015610f0857600080fd5b505afa158015610f1c573d6000803e3d6000fd5b505050506040513d6020811015610f3257600080fd5b5051604080516331c6903d60e01b815290516001600160a01b03909216916331c6903d91600480820192602092909190829003018186803b158015610f7657600080fd5b505afa158015610f8a573d6000803e3d6000fd5b505050506040513d6020811015610fa057600080fd5b5051604080516001600160e01b031960e08a901b1681526001600160a01b03978816600482015295871660248701526044860194909452606485019290925260848401529290921660a48201526103e8420160c4820152815160e480830193928290030181600087803b15801561101657600080fd5b505af115801561102a573d6000803e3d6000fd5b505050506040513d604081101561104057600080fd5b50805160209091015190925090506110588482610aa4565b6110628684610aa4565b019750858811156110ba576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742072656465656d20676976656e207061697220616d6f756e7400604482015290519081900360640190fd5b50505050505050949350505050565b6000610a9a6110d6612513565b84610c4085600160006110e7612513565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490612a2a565b60055461010090046001600160a01b031690565b6000806000611138610bc2565b90506000805b6006548110156111645760008061115483612a8b565b019390930192505060010161113e565b50818111611173576000611177565b8181035b935080821161118757600061118b565b8082035b925050509091565b60606007805480602002602001604051908101604052809291908181526020018280548015610a7c57602002820191906000526020600020905b8154815260200190600101908083116111cd575050505050905090565b606080600860098180548060200260200160405190810160405280929190818152602001828054801561123c57602002820191906000526020600020905b815481526020019060010190808311611228575b505050505091508080548060200260200160405190810160405280929190818152602001828054801561128e57602002820191906000526020600020905b81548152602001906001019080831161127a575b50505050509050915091509091565b6001600160a01b0381166000908152602081905260409020545b919050565b60085460009060001990158015906112ef57506008805460001981019081106112e157fe5b906000526020600020015443105b156113495760005b600854811015611347576008818154811061130e57fe5b906000526020600020015443101561133f576009818154811061132d57fe5b90600052602060002001549150611347565b6001016112f7565b505b6000611353610bc2565b90508181101561136557808203611368565b60005b9250505090565b6000808560065481106113b9576040805162461bcd60e51b815260206004820152600d60248201526c556e6b6e6f776e20706169722160981b604482015290519081900360640190fd5b60008060006113c78a6127f5565b9250925092506113d7818a6128ff565b60408051635d5155ef60e11b81526001600160a01b03858116600483015284166024820152604481018b9052606481018a9052608481018990523360a48201526103e8420160c48201528151737a250d5630b4cf539739df2c5dacb4c659f2488d9263baa2abde9260e480820193918290030181600087803b15801561145c57600080fd5b505af1158015611470573d6000803e3d6000fd5b505050506040513d604081101561148657600080fd5b50805160209091015190965094506114b2336114a28488610aa4565b6114ac868a610aa4565b01612c55565b5050505094509492505050565b60048054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610a7c5780601f10610a5157610100808354040283529160200191610a7c565b6000610a9a61152d612513565b84610c40856040518060600160405280602581526020016136d96025913960016000611557612513565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919061275e565b6000610a9a611595612513565b8484612603565b6000816115ab575060006112b7565b604080516002808252606080830184529260208301908036833701905050905030816000815181106115d957fe5b60200260200101906001600160a01b031690816001600160a01b031681525050600560019054906101000a90046001600160a01b03166001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b15801561164757600080fd5b505afa15801561165b573d6000803e3d6000fd5b505050506040513d602081101561167157600080fd5b5051604080516321df0da760e01b815290516001600160a01b03909216916321df0da791600480820192602092909190829003018186803b1580156116b557600080fd5b505afa1580156116c9573d6000803e3d6000fd5b505050506040513d60208110156116df57600080fd5b50518151829060019081106116f057fe5b6001600160a01b039092166020928302919091018201526040805163d06ca61f60e01b81526004810186815260248201928352845160448301528451737a250d5630b4cf539739df2c5dacb4c659f2488d9463d06ca61f9489948894939192606490910191858201910280838360005b83811015611778578181015183820152602001611760565b50505050905001935050505060006040518083038186803b15801561179c57600080fd5b505afa1580156117b0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156117d957600080fd5b8101908080516040519392919084600160201b8211156117f857600080fd5b90830190602082018581111561180d57600080fd5b82518660208202830111600160201b8211171561182957600080fd5b82525081516020918201928201910280838360005b8381101561185657818101518382015260200161183e565b5050505090500160405250505060018151811061186f57fe5b60200260200101519150600760018154811061188757fe5b906000526020600020015460076000815481106118a057fe5b90600052602060002001548302816118b457fe5b049392505050565b6000856006548110611905576040805162461bcd60e51b815260206004820152600d60248201526c556e6b6e6f776e20706169722160981b604482015290519081900360640190fd5b600560019054906101000a90046001600160a01b03166001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b15801561195357600080fd5b505afa158015611967573d6000803e3d6000fd5b505050506040513d602081101561197d57600080fd5b50516040805163ba83c16f60e01b815290516001600160a01b039092169163ba83c16f91600480820192602092909190829003018186803b1580156119c157600080fd5b505afa1580156119d5573d6000803e3d6000fd5b505050506040513d60208110156119eb57600080fd5b50516040805180820190915260158152741cdd18589b1958dbda5b8b985d5d1a1bdc9a5e9959605a1b60208201526001600160a01b0390911690639535ce1290611a3d90611a3830612d51565b612ecd565b6040518263ffffffff1660e01b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a89578181015183820152602001611a71565b50505050905090810190601f168015611ab65780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015611ad357600080fd5b505afa158015611ae7573d6000803e3d6000fd5b505050506040513d6020811015611afd57600080fd5b5051611b47576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420616374696f6e2160601b604482015290519081900360640190fd5b600080611b53896127f5565b5091509150611b628289612f99565b611b6c8188612f99565b600080611b7d84848c8c8c8c613025565b5091509150611b8c8382610aa4565b611b968584610aa4565b019550611ba16112bc565b861115611bdf5760405162461bcd60e51b815260040180806020018281038252602b8152602001806136ae602b913960400191505060405180910390fd5b611be93387613212565b505050505095945050505050565b611c018787612406565b60058054610100600160a81b0319166101006001600160a01b038816021790558351611c34906006906020870190613416565b508251600214611c4057fe5b8251611c5390600790602086019061347b565b508051825114611c5f57fe5b8151611c7290600890602085019061347b565b508051611c8690600990602084019061347b565b5050505050505050565b60606006805480602002602001604051908101604052809291908181526020018280548015610a7c57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611cca575050505050905090565b600560019054906101000a90046001600160a01b03166001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b158015611d3f57600080fd5b505afa158015611d53573d6000803e3d6000fd5b505050506040513d6020811015611d6957600080fd5b505160408051633380ac3560e11b815290516001600160a01b0390921691636701586a91600480820192602092909190829003018186803b158015611dad57600080fd5b505afa158015611dc1573d6000803e3d6000fd5b505050506040513d6020811015611dd757600080fd5b5051604080516318c8e99960e11b815233600482015290516001600160a01b0390921691633191d33291602480820192602092909190829003018186803b158015611e2157600080fd5b505afa158015611e35573d6000803e3d6000fd5b505050506040513d6020811015611e4b57600080fd5b5051611e95576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420416374696f6e2160601b604482015290519081900360640190fd5b600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600560019054906101000a90046001600160a01b03166001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b158015611f0b57600080fd5b505afa158015611f1f573d6000803e3d6000fd5b505050506040513d6020811015611f3557600080fd5b505160408051633380ac3560e11b815290516001600160a01b0390921691636701586a91600480820192602092909190829003018186803b158015611f7957600080fd5b505afa158015611f8d573d6000803e3d6000fd5b505050506040513d6020811015611fa357600080fd5b5051604080516318c8e99960e11b815233600482015290516001600160a01b0390921691633191d33291602480820192602092909190829003018186803b158015611fed57600080fd5b505afa158015612001573d6000803e3d6000fd5b505050506040513d602081101561201757600080fd5b5051612061576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420416374696f6e2160601b604482015290519081900360640190fd5b8051612074906006906020840190613416565b5050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60008082116120f9576040805162461bcd60e51b815260206004820181905260248201527f596f75206d75737420696e73657274206120706f7369746976652076616c7565604482015290519081900360640190fd5b600061210361112b565b9150508083111561215b576040805162461bcd60e51b815260206004820152601760248201527f43616e6e6f74204275726e207468697320616d6f756e74000000000000000000604482015290519081900360640190fd5b6121653384612c55565b600560019054906101000a90046001600160a01b03166001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b1580156121b357600080fd5b505afa1580156121c7573d6000803e3d6000fd5b505050506040513d60208110156121dd57600080fd5b50516001600160a01b0316639e813f1f6000806121f98761159c565b9550853360405160200180856001600160a01b03168152602001848152602001838152602001826001600160a01b031681526020019450505050506040516020818303038152906040526040518263ffffffff1660e01b8152600401808060200180602001838103835260208152602001807f6d696e744e6577566f74696e67546f6b656e73466f72537461626c65436f696e815250602001838103825284818151815260200191508051906020019080838360005b838110156122c75781810151838201526020016122af565b50505050905090810190601f1680156122f45780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b15801561231457600080fd5b505af1158015612328573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561235157600080fd5b8101908080516040519392919084600160201b82111561237057600080fd5b90830190602082018581111561238557600080fd5b8251600160201b81118282018810171561239e57600080fd5b82525081516020918201929091019080838360005b838110156123cb5781810151838201526020016123b3565b50505050905090810190601f1680156123f85780820380516001836020036101000a031916815260200191505b506040525050505050919050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470600460405180828054600181600116156101000203166002900480156124845780601f10612462576101008083540402835291820191612484565b820191906000526020600020905b815481529060010190602001808311612470575b50509150506040518091039020146124da576040805162461bcd60e51b8152602060048201526014602482015273496e697420616c72656164792043616c6c65642160601b604482015290519081900360640190fd5b81516124ed9060039060208501906134c2565b5080516125019060049060208401906134c2565b50506005805460ff1916601217905550565b3390565b6001600160a01b03831661255c5760405162461bcd60e51b815260040180806020018281038252602481526020018061368a6024913960400191505060405180910390fd5b6001600160a01b0382166125a15760405162461bcd60e51b81526004018080602001828103825260228152602001806135a96022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166126485760405162461bcd60e51b81526004018080602001828103825260258152602001806136656025913960400191505060405180910390fd5b6001600160a01b03821661268d5760405162461bcd60e51b81526004018080602001828103825260238152602001806135646023913960400191505060405180910390fd5b612698838383612a25565b6126d5816040518060600160405280602681526020016135cb602691396001600160a01b038616600090815260208190526040902054919061275e565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546127049082612a2a565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600081848411156127ed5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156127b257818101518382015260200161279a565b50505050905090810190601f1680156127df5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000806000806006858154811061280857fe5b6000918252602091829020015460408051630dfe168160e01b815290516001600160a01b0390921694508493508392630dfe168192600480840193829003018186803b15801561285757600080fd5b505afa15801561286b573d6000803e3d6000fd5b505050506040513d602081101561288157600080fd5b50516040805163d21220a760e01b815290519195506001600160a01b0383169163d21220a791600480820192602092909190829003018186803b1580156128c757600080fd5b505afa1580156128db573d6000803e3d6000fd5b505050506040513d60208110156128f157600080fd5b505193959394509092915050565b60408051636eb1769f60e11b8152306004820152737a250d5630b4cf539739df2c5dacb4c659f2488d60248201529051839183916001600160a01b0384169163dd62ed3e916044808301926020929190829003018186803b15801561296357600080fd5b505afa158015612977573d6000803e3d6000fd5b505050506040513d602081101561298d57600080fd5b505111612a25576040805163095ea7b360e01b8152737a250d5630b4cf539739df2c5dacb4c659f2488d6004820152600019602482015290516001600160a01b0383169163095ea7b39160448083019260209291908290030181600087803b1580156129f857600080fd5b505af1158015612a0c573d6000803e3d6000fd5b505050506040513d6020811015612a2257600080fd5b50505b505050565b600082820183811015612a84576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6000806000806000612a9c866127f5565b92509250925060008190506000816001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015612af657600080fd5b505afa158015612b0a573d6000803e3d6000fd5b505050506040513d6020811015612b2057600080fd5b5051604080516318160ddd60e01b815290519192506000916001600160a01b038516916318160ddd916004808301926020929190829003018186803b158015612b6857600080fd5b505afa158015612b7c573d6000803e3d6000fd5b505050506040513d6020811015612b9257600080fd5b505160408051630240bc6b60e21b815290519192506001600160a01b03851691630902f1ac91600480820192606092909190829003018186803b158015612bd857600080fd5b505afa158015612bec573d6000803e3d6000fd5b505050506040513d6060811015612c0257600080fd5b5080516020909101516dffffffffffffffffffffffffffff9182169950169650612c378682848b0281612c3157fe5b04610aa4565b9750612c48858289850281612c3157fe5b9650505050505050915091565b6001600160a01b038216612c9a5760405162461bcd60e51b81526004018080602001828103825260218152602001806136196021913960400191505060405180910390fd5b612ca682600083612a25565b612ce381604051806060016040528060228152602001613587602291396001600160a01b038516600090815260208190526040902054919061275e565b6001600160a01b038316600090815260208190526040902055600254612d099082613302565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b604080518082018252601081526f181899199a1a9b1b9c1cb0b131b232b360811b60208201528151602a80825260608281019094526001600160a01b03851692918491602082018180368337019050509050600360fc1b81600081518110612db557fe5b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612dde57fe5b60200101906001600160f81b031916908160001a90535060005b6014811015612ec4578260048583600c0160208110612e1357fe5b1a60f81b6001600160f81b031916901c60f81c60ff1681518110612e3357fe5b602001015160f81c60f81b828260020260020181518110612e5057fe5b60200101906001600160f81b031916908160001a905350828482600c0160208110612e7757fe5b825191901a600f16908110612e8857fe5b602001015160f81c60f81b828260020260030181518110612ea557fe5b60200101906001600160f81b031916908160001a905350600101612df8565b50949350505050565b6060612a8483836040516020018083805190602001908083835b60208310612f065780518252601f199092019160209182019101612ee7565b6001836020036101000a03801982511681845116808217855250505050505090500180605f60f81b81525060010182805190602001908083835b60208310612f5f5780518252601f199092019160209182019101612f40565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052613344565b604080516323b872dd60e01b81523360048201523060248201526044810183905290516001600160a01b038416916323b872dd9160648083019260209291908290030181600087803b158015612fee57600080fd5b505af1158015613002573d6000803e3d6000fd5b505050506040513d602081101561301857600080fd5b50612074905082826128ff565b6040805162e8e33760e81b81526001600160a01b0388811660048301528716602482015260448101869052606481018590526084810184905260a481018390523060c48201526103e8420160e4820152905160009182918291737a250d5630b4cf539739df2c5dacb4c659f2488d9163e8e33700916101048082019260609290919082900301818787803b1580156130bc57600080fd5b505af11580156130d0573d6000803e3d6000fd5b505050506040513d60608110156130e657600080fd5b5080516020820151604090920151909450909250905086831015613181576040805163a9059cbb60e01b8152336004820152848903602482015290516001600160a01b038b169163a9059cbb9160448083019260209291908290030181600087803b15801561315457600080fd5b505af1158015613168573d6000803e3d6000fd5b505050506040513d602081101561317e57600080fd5b50505b85821015613206576040805163a9059cbb60e01b8152336004820152838803602482015290516001600160a01b038a169163a9059cbb9160448083019260209291908290030181600087803b1580156131d957600080fd5b505af11580156131ed573d6000803e3d6000fd5b505050506040513d602081101561320357600080fd5b50505b96509650969350505050565b6001600160a01b03821661326d576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b61327960008383612a25565b6002546132869082612a2a565b6002556001600160a01b0382166000908152602081905260409020546132ac9082612a2a565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6000612a8483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061275e565b60608160005b815181101561340f57604160f81b82828151811061336457fe5b01602001516001600160f81b0319161080159061339f5750605a60f81b82828151811061338d57fe5b01602001516001600160f81b03191611155b6133c3578181815181106133af57fe5b01602001516001600160f81b0319166133e4565b8181815181106133cf57fe5b602001015160f81c60f81b60f81c60200160f81b5b8282815181106133f057fe5b60200101906001600160f81b031916908160001a90535060010161334a565b5092915050565b82805482825590600052602060002090810192821561346b579160200282015b8281111561346b57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613436565b5061347792915061352f565b5090565b8280548282559060005260206000209081019282156134b6579160200282015b828111156134b657825182559160200191906001019061349b565b5061347792915061354e565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061350357805160ff19168380011785556134b6565b828001600101855582156134b657918201828111156134b657825182559160200191906001019061349b565b5b808211156134775780546001600160a01b0319168155600101613530565b5b80821115613477576000815560010161354f56fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f2061646472657373737461626c65636f696e2e726562616c616e636562796372656469742e626c6f636b2e696e74657276616c45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734d696e74696e6720616d6f756e742069732067726561746572207468616e20617661696c6162696c69747945524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a6edf43710700896a164d0275b0640fc162239f48904b6e5d9766aaf7678e2b164736f6c6343000700003300000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000a8ce548324181cd96e51db9bb71d993c4c226c9e000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000002e0000000000000000000000000000000000000000000000000000000000000034000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000014756e697377617020537461746520446f6c6c617200000000000000000000000000000000000000000000000000000000000000000000000000000000000000037553440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b0000000000000000000000003139ffc91b99aa94da8a2dc13f1fc36f9bdc98ee0000000000000000000000007cd0378010711cb72a6ca35f09d5da2094061d9c000000000000000000000000fc5211986172260fb6579eb06220b14f4389011f000000000000000000000000ae461ca67b15dc8dc81ce7615e0320da1a9ab8d5000000000000000000000000b20bd5d04be54f870d5c0d3ca85d82b34b836405000000000000000000000000bdfa9ebff5369bc10ff75b4a2fbfce8d5caf10240000000000000000000000003041cbd36888becc7bbcbc0045e3b1f144466f5f000000000000000000000000f1f27db872b7f6e8b873c97f785fe4f9a6c92161000000000000000000000000524847c615639e76fe7d0fe0b16be8c4eac9cf3c000000000000000000000000615cc08df9084e3fac80fe19045a55612185b6a4000000000000000000000000a0abda1f980e03d7eadb78aed8fc1f2dd0fe83dd0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000001900000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000a6f5e90000000000000000000000000000000000000000000000000000000000aa03290000000000000000000000000000000000000000000000000000000000ad10690000000000000000000000000000000000000000000000000000000000b01da90000000000000000000000000000000000000000000000000000000000b32ae900000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000069e10de76676d080000000000000000000000000000000000000000000000001a784379d99db420000000000000000000000000000000000000000000000000422ca8b0a00a425000000000000000000000000000000000000000000000000084595161401484a000000000000000000000000000000000000000000000000108b2a2c28029094000000
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061018e5760003560e01c806374601c3c116100de578063ae3dfa2811610097578063cbd99d0311610071578063cbd99d03146108de578063d5d9e01d14610904578063dd62ed3e146109a5578063f9cd4d3e146109d35761018e565b8063ae3dfa281461055d578063afa9a8a114610592578063bbc7eea8146108d65761018e565b806374601c3c146104a95780638df2c58a146104b157806395d89b41146104e0578063a457c2d7146104e8578063a9059cbb14610514578063ac2a89c8146105405761018e565b80633227497e1161014b57806352a64eb41161012557806352a64eb414610369578063544275f71461038a5780635de3326c146103e257806370a08231146104835761018e565b80633227497e146102ea57806339509351146103195780634eb9b592146103455761018e565b806306fdde0314610193578063095ea7b3146102105780630ec076771461025057806318160ddd1461028e57806323b872dd14610296578063313ce567146102cc575b600080fd5b61019b6109f0565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101d55781810151838201526020016101bd565b50505050905090810190601f1680156102025780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61023c6004803603604081101561022657600080fd5b506001600160a01b038135169060200135610a86565b604080519115158252519081900360200190f35b61027c6004803603604081101561026657600080fd5b506001600160a01b038135169060200135610aa4565b60408051918252519081900360200190f35b61027c610bc2565b61023c600480360360608110156102ac57600080fd5b506001600160a01b03813581169160208101359091169060400135610bc8565b6102d4610c4f565b6040805160ff9092168252519081900360200190f35b61027c6004803603608081101561030057600080fd5b5080359060208101359060408101359060600135610c58565b61023c6004803603604081101561032f57600080fd5b506001600160a01b0381351690602001356110c9565b61034d611117565b604080516001600160a01b039092168252519081900360200190f35b61037161112b565b6040805192835260208301919091528051918290030190f35b610392611193565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103ce5781810151838201526020016103b6565b505050509050019250505060405180910390f35b6103ea6111ea565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561042e578181015183820152602001610416565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561046d578181015183820152602001610455565b5050505090500194505050505060405180910390f35b61027c6004803603602081101561049957600080fd5b50356001600160a01b031661129d565b61027c6112bc565b610371600480360360808110156104c757600080fd5b508035906020810135906040810135906060013561136f565b61019b6114bf565b61023c600480360360408110156104fe57600080fd5b506001600160a01b038135169060200135611520565b61023c6004803603604081101561052a57600080fd5b506001600160a01b038135169060200135611588565b61027c6004803603602081101561055657600080fd5b503561159c565b61027c600480360360a081101561057357600080fd5b50803590602081013590604081013590606081013590608001356118bc565b6108d4600480360360e08110156105a857600080fd5b810190602081018135600160201b8111156105c257600080fd5b8201836020820111156105d457600080fd5b803590602001918460018302840111600160201b831117156105f557600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561064757600080fd5b82018360208201111561065957600080fd5b803590602001918460018302840111600160201b8311171561067a57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092956001600160a01b03853516959094909350604081019250602001359050600160201b8111156106dd57600080fd5b8201836020820111156106ef57600080fd5b803590602001918460208302840111600160201b8311171561071057600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561075f57600080fd5b82018360208201111561077157600080fd5b803590602001918460208302840111600160201b8311171561079257600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156107e157600080fd5b8201836020820111156107f357600080fd5b803590602001918460208302840111600160201b8311171561081457600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561086357600080fd5b82018360208201111561087557600080fd5b803590602001918460208302840111600160201b8311171561089657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611bf7945050505050565b005b610392611c90565b6108d4600480360360208110156108f457600080fd5b50356001600160a01b0316611cf1565b6108d46004803603602081101561091a57600080fd5b810190602081018135600160201b81111561093457600080fd5b82018360208201111561094657600080fd5b803590602001918460208302840111600160201b8311171561096757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611ebd945050505050565b61027c600480360360408110156109bb57600080fd5b506001600160a01b0381358116916020013516612078565b61027c600480360360208110156109e957600080fd5b50356120a3565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610a7c5780601f10610a5157610100808354040283529160200191610a7c565b820191906000526020600020905b815481529060010190602001808311610a5f57829003601f168201915b5050505050905090565b6000610a9a610a93612513565b8484612517565b5060015b92915050565b6000808390506000816001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610ae557600080fd5b505afa158015610af9573d6000803e3d6000fd5b505050506040513d6020811015610b0f57600080fd5b5051610b19610c4f565b0360ff169050600084600014610b2f5784610ba2565b604080516370a0823160e01b815230600482015290516001600160a01b038516916370a08231916024808301926020929190829003018186803b158015610b7557600080fd5b505afa158015610b89573d6000803e3d6000fd5b505050506040513d6020811015610b9f57600080fd5b50515b905081610bb3579250610a9e915050565b600a9190910a02949350505050565b60025490565b6000610bd5848484612603565b610c4584610be1612513565b610c40856040518060600160405280602881526020016135f1602891396001600160a01b038a16600090815260016020526040812090610c1f612513565b6001600160a01b03168152602081019190915260400160002054919061275e565b612517565b5060019392505050565b60055460ff1690565b6000846006548110610ca1576040805162461bcd60e51b815260206004820152600d60248201526c556e6b6e6f776e20706169722160981b604482015290519081900360640190fd5b600560019054906101000a90046001600160a01b03166001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b158015610cef57600080fd5b505afa158015610d03573d6000803e3d6000fd5b505050506040513d6020811015610d1957600080fd5b50516040805163ba83c16f60e01b815290516001600160a01b039092169163ba83c16f91600480820192602092909190829003018186803b158015610d5d57600080fd5b505afa158015610d71573d6000803e3d6000fd5b505050506040513d6020811015610d8757600080fd5b5051604051630bb687e360e01b8152602060048201908152602b602483018190526001600160a01b0390931692630bb687e392829160449091019061363a823960400191505060206040518083038186803b158015610de557600080fd5b505afa158015610df9573d6000803e3d6000fd5b505050506040513d6020811015610e0f57600080fd5b5051600a5401431015610e60576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420616374696f6e2160601b604482015290519081900360640190fd5b43600a556000610e6e61112b565b5090506000806000610e7f8a6127f5565b925092509250610e8f818a6128ff565b600080737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663baa2abde86868e8e8e600560019054906101000a90046001600160a01b03166001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b158015610f0857600080fd5b505afa158015610f1c573d6000803e3d6000fd5b505050506040513d6020811015610f3257600080fd5b5051604080516331c6903d60e01b815290516001600160a01b03909216916331c6903d91600480820192602092909190829003018186803b158015610f7657600080fd5b505afa158015610f8a573d6000803e3d6000fd5b505050506040513d6020811015610fa057600080fd5b5051604080516001600160e01b031960e08a901b1681526001600160a01b03978816600482015295871660248701526044860194909452606485019290925260848401529290921660a48201526103e8420160c4820152815160e480830193928290030181600087803b15801561101657600080fd5b505af115801561102a573d6000803e3d6000fd5b505050506040513d604081101561104057600080fd5b50805160209091015190925090506110588482610aa4565b6110628684610aa4565b019750858811156110ba576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742072656465656d20676976656e207061697220616d6f756e7400604482015290519081900360640190fd5b50505050505050949350505050565b6000610a9a6110d6612513565b84610c4085600160006110e7612513565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490612a2a565b60055461010090046001600160a01b031690565b6000806000611138610bc2565b90506000805b6006548110156111645760008061115483612a8b565b019390930192505060010161113e565b50818111611173576000611177565b8181035b935080821161118757600061118b565b8082035b925050509091565b60606007805480602002602001604051908101604052809291908181526020018280548015610a7c57602002820191906000526020600020905b8154815260200190600101908083116111cd575050505050905090565b606080600860098180548060200260200160405190810160405280929190818152602001828054801561123c57602002820191906000526020600020905b815481526020019060010190808311611228575b505050505091508080548060200260200160405190810160405280929190818152602001828054801561128e57602002820191906000526020600020905b81548152602001906001019080831161127a575b50505050509050915091509091565b6001600160a01b0381166000908152602081905260409020545b919050565b60085460009060001990158015906112ef57506008805460001981019081106112e157fe5b906000526020600020015443105b156113495760005b600854811015611347576008818154811061130e57fe5b906000526020600020015443101561133f576009818154811061132d57fe5b90600052602060002001549150611347565b6001016112f7565b505b6000611353610bc2565b90508181101561136557808203611368565b60005b9250505090565b6000808560065481106113b9576040805162461bcd60e51b815260206004820152600d60248201526c556e6b6e6f776e20706169722160981b604482015290519081900360640190fd5b60008060006113c78a6127f5565b9250925092506113d7818a6128ff565b60408051635d5155ef60e11b81526001600160a01b03858116600483015284166024820152604481018b9052606481018a9052608481018990523360a48201526103e8420160c48201528151737a250d5630b4cf539739df2c5dacb4c659f2488d9263baa2abde9260e480820193918290030181600087803b15801561145c57600080fd5b505af1158015611470573d6000803e3d6000fd5b505050506040513d604081101561148657600080fd5b50805160209091015190965094506114b2336114a28488610aa4565b6114ac868a610aa4565b01612c55565b5050505094509492505050565b60048054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610a7c5780601f10610a5157610100808354040283529160200191610a7c565b6000610a9a61152d612513565b84610c40856040518060600160405280602581526020016136d96025913960016000611557612513565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919061275e565b6000610a9a611595612513565b8484612603565b6000816115ab575060006112b7565b604080516002808252606080830184529260208301908036833701905050905030816000815181106115d957fe5b60200260200101906001600160a01b031690816001600160a01b031681525050600560019054906101000a90046001600160a01b03166001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b15801561164757600080fd5b505afa15801561165b573d6000803e3d6000fd5b505050506040513d602081101561167157600080fd5b5051604080516321df0da760e01b815290516001600160a01b03909216916321df0da791600480820192602092909190829003018186803b1580156116b557600080fd5b505afa1580156116c9573d6000803e3d6000fd5b505050506040513d60208110156116df57600080fd5b50518151829060019081106116f057fe5b6001600160a01b039092166020928302919091018201526040805163d06ca61f60e01b81526004810186815260248201928352845160448301528451737a250d5630b4cf539739df2c5dacb4c659f2488d9463d06ca61f9489948894939192606490910191858201910280838360005b83811015611778578181015183820152602001611760565b50505050905001935050505060006040518083038186803b15801561179c57600080fd5b505afa1580156117b0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156117d957600080fd5b8101908080516040519392919084600160201b8211156117f857600080fd5b90830190602082018581111561180d57600080fd5b82518660208202830111600160201b8211171561182957600080fd5b82525081516020918201928201910280838360005b8381101561185657818101518382015260200161183e565b5050505090500160405250505060018151811061186f57fe5b60200260200101519150600760018154811061188757fe5b906000526020600020015460076000815481106118a057fe5b90600052602060002001548302816118b457fe5b049392505050565b6000856006548110611905576040805162461bcd60e51b815260206004820152600d60248201526c556e6b6e6f776e20706169722160981b604482015290519081900360640190fd5b600560019054906101000a90046001600160a01b03166001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b15801561195357600080fd5b505afa158015611967573d6000803e3d6000fd5b505050506040513d602081101561197d57600080fd5b50516040805163ba83c16f60e01b815290516001600160a01b039092169163ba83c16f91600480820192602092909190829003018186803b1580156119c157600080fd5b505afa1580156119d5573d6000803e3d6000fd5b505050506040513d60208110156119eb57600080fd5b50516040805180820190915260158152741cdd18589b1958dbda5b8b985d5d1a1bdc9a5e9959605a1b60208201526001600160a01b0390911690639535ce1290611a3d90611a3830612d51565b612ecd565b6040518263ffffffff1660e01b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a89578181015183820152602001611a71565b50505050905090810190601f168015611ab65780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015611ad357600080fd5b505afa158015611ae7573d6000803e3d6000fd5b505050506040513d6020811015611afd57600080fd5b5051611b47576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420616374696f6e2160601b604482015290519081900360640190fd5b600080611b53896127f5565b5091509150611b628289612f99565b611b6c8188612f99565b600080611b7d84848c8c8c8c613025565b5091509150611b8c8382610aa4565b611b968584610aa4565b019550611ba16112bc565b861115611bdf5760405162461bcd60e51b815260040180806020018281038252602b8152602001806136ae602b913960400191505060405180910390fd5b611be93387613212565b505050505095945050505050565b611c018787612406565b60058054610100600160a81b0319166101006001600160a01b038816021790558351611c34906006906020870190613416565b508251600214611c4057fe5b8251611c5390600790602086019061347b565b508051825114611c5f57fe5b8151611c7290600890602085019061347b565b508051611c8690600990602084019061347b565b5050505050505050565b60606006805480602002602001604051908101604052809291908181526020018280548015610a7c57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611cca575050505050905090565b600560019054906101000a90046001600160a01b03166001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b158015611d3f57600080fd5b505afa158015611d53573d6000803e3d6000fd5b505050506040513d6020811015611d6957600080fd5b505160408051633380ac3560e11b815290516001600160a01b0390921691636701586a91600480820192602092909190829003018186803b158015611dad57600080fd5b505afa158015611dc1573d6000803e3d6000fd5b505050506040513d6020811015611dd757600080fd5b5051604080516318c8e99960e11b815233600482015290516001600160a01b0390921691633191d33291602480820192602092909190829003018186803b158015611e2157600080fd5b505afa158015611e35573d6000803e3d6000fd5b505050506040513d6020811015611e4b57600080fd5b5051611e95576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420416374696f6e2160601b604482015290519081900360640190fd5b600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600560019054906101000a90046001600160a01b03166001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b158015611f0b57600080fd5b505afa158015611f1f573d6000803e3d6000fd5b505050506040513d6020811015611f3557600080fd5b505160408051633380ac3560e11b815290516001600160a01b0390921691636701586a91600480820192602092909190829003018186803b158015611f7957600080fd5b505afa158015611f8d573d6000803e3d6000fd5b505050506040513d6020811015611fa357600080fd5b5051604080516318c8e99960e11b815233600482015290516001600160a01b0390921691633191d33291602480820192602092909190829003018186803b158015611fed57600080fd5b505afa158015612001573d6000803e3d6000fd5b505050506040513d602081101561201757600080fd5b5051612061576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420416374696f6e2160601b604482015290519081900360640190fd5b8051612074906006906020840190613416565b5050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60008082116120f9576040805162461bcd60e51b815260206004820181905260248201527f596f75206d75737420696e73657274206120706f7369746976652076616c7565604482015290519081900360640190fd5b600061210361112b565b9150508083111561215b576040805162461bcd60e51b815260206004820152601760248201527f43616e6e6f74204275726e207468697320616d6f756e74000000000000000000604482015290519081900360640190fd5b6121653384612c55565b600560019054906101000a90046001600160a01b03166001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b1580156121b357600080fd5b505afa1580156121c7573d6000803e3d6000fd5b505050506040513d60208110156121dd57600080fd5b50516001600160a01b0316639e813f1f6000806121f98761159c565b9550853360405160200180856001600160a01b03168152602001848152602001838152602001826001600160a01b031681526020019450505050506040516020818303038152906040526040518263ffffffff1660e01b8152600401808060200180602001838103835260208152602001807f6d696e744e6577566f74696e67546f6b656e73466f72537461626c65436f696e815250602001838103825284818151815260200191508051906020019080838360005b838110156122c75781810151838201526020016122af565b50505050905090810190601f1680156122f45780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b15801561231457600080fd5b505af1158015612328573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561235157600080fd5b8101908080516040519392919084600160201b82111561237057600080fd5b90830190602082018581111561238557600080fd5b8251600160201b81118282018810171561239e57600080fd5b82525081516020918201929091019080838360005b838110156123cb5781810151838201526020016123b3565b50505050905090810190601f1680156123f85780820380516001836020036101000a031916815260200191505b506040525050505050919050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470600460405180828054600181600116156101000203166002900480156124845780601f10612462576101008083540402835291820191612484565b820191906000526020600020905b815481529060010190602001808311612470575b50509150506040518091039020146124da576040805162461bcd60e51b8152602060048201526014602482015273496e697420616c72656164792043616c6c65642160601b604482015290519081900360640190fd5b81516124ed9060039060208501906134c2565b5080516125019060049060208401906134c2565b50506005805460ff1916601217905550565b3390565b6001600160a01b03831661255c5760405162461bcd60e51b815260040180806020018281038252602481526020018061368a6024913960400191505060405180910390fd5b6001600160a01b0382166125a15760405162461bcd60e51b81526004018080602001828103825260228152602001806135a96022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166126485760405162461bcd60e51b81526004018080602001828103825260258152602001806136656025913960400191505060405180910390fd5b6001600160a01b03821661268d5760405162461bcd60e51b81526004018080602001828103825260238152602001806135646023913960400191505060405180910390fd5b612698838383612a25565b6126d5816040518060600160405280602681526020016135cb602691396001600160a01b038616600090815260208190526040902054919061275e565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546127049082612a2a565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600081848411156127ed5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156127b257818101518382015260200161279a565b50505050905090810190601f1680156127df5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000806000806006858154811061280857fe5b6000918252602091829020015460408051630dfe168160e01b815290516001600160a01b0390921694508493508392630dfe168192600480840193829003018186803b15801561285757600080fd5b505afa15801561286b573d6000803e3d6000fd5b505050506040513d602081101561288157600080fd5b50516040805163d21220a760e01b815290519195506001600160a01b0383169163d21220a791600480820192602092909190829003018186803b1580156128c757600080fd5b505afa1580156128db573d6000803e3d6000fd5b505050506040513d60208110156128f157600080fd5b505193959394509092915050565b60408051636eb1769f60e11b8152306004820152737a250d5630b4cf539739df2c5dacb4c659f2488d60248201529051839183916001600160a01b0384169163dd62ed3e916044808301926020929190829003018186803b15801561296357600080fd5b505afa158015612977573d6000803e3d6000fd5b505050506040513d602081101561298d57600080fd5b505111612a25576040805163095ea7b360e01b8152737a250d5630b4cf539739df2c5dacb4c659f2488d6004820152600019602482015290516001600160a01b0383169163095ea7b39160448083019260209291908290030181600087803b1580156129f857600080fd5b505af1158015612a0c573d6000803e3d6000fd5b505050506040513d6020811015612a2257600080fd5b50505b505050565b600082820183811015612a84576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6000806000806000612a9c866127f5565b92509250925060008190506000816001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015612af657600080fd5b505afa158015612b0a573d6000803e3d6000fd5b505050506040513d6020811015612b2057600080fd5b5051604080516318160ddd60e01b815290519192506000916001600160a01b038516916318160ddd916004808301926020929190829003018186803b158015612b6857600080fd5b505afa158015612b7c573d6000803e3d6000fd5b505050506040513d6020811015612b9257600080fd5b505160408051630240bc6b60e21b815290519192506001600160a01b03851691630902f1ac91600480820192606092909190829003018186803b158015612bd857600080fd5b505afa158015612bec573d6000803e3d6000fd5b505050506040513d6060811015612c0257600080fd5b5080516020909101516dffffffffffffffffffffffffffff9182169950169650612c378682848b0281612c3157fe5b04610aa4565b9750612c48858289850281612c3157fe5b9650505050505050915091565b6001600160a01b038216612c9a5760405162461bcd60e51b81526004018080602001828103825260218152602001806136196021913960400191505060405180910390fd5b612ca682600083612a25565b612ce381604051806060016040528060228152602001613587602291396001600160a01b038516600090815260208190526040902054919061275e565b6001600160a01b038316600090815260208190526040902055600254612d099082613302565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b604080518082018252601081526f181899199a1a9b1b9c1cb0b131b232b360811b60208201528151602a80825260608281019094526001600160a01b03851692918491602082018180368337019050509050600360fc1b81600081518110612db557fe5b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612dde57fe5b60200101906001600160f81b031916908160001a90535060005b6014811015612ec4578260048583600c0160208110612e1357fe5b1a60f81b6001600160f81b031916901c60f81c60ff1681518110612e3357fe5b602001015160f81c60f81b828260020260020181518110612e5057fe5b60200101906001600160f81b031916908160001a905350828482600c0160208110612e7757fe5b825191901a600f16908110612e8857fe5b602001015160f81c60f81b828260020260030181518110612ea557fe5b60200101906001600160f81b031916908160001a905350600101612df8565b50949350505050565b6060612a8483836040516020018083805190602001908083835b60208310612f065780518252601f199092019160209182019101612ee7565b6001836020036101000a03801982511681845116808217855250505050505090500180605f60f81b81525060010182805190602001908083835b60208310612f5f5780518252601f199092019160209182019101612f40565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052613344565b604080516323b872dd60e01b81523360048201523060248201526044810183905290516001600160a01b038416916323b872dd9160648083019260209291908290030181600087803b158015612fee57600080fd5b505af1158015613002573d6000803e3d6000fd5b505050506040513d602081101561301857600080fd5b50612074905082826128ff565b6040805162e8e33760e81b81526001600160a01b0388811660048301528716602482015260448101869052606481018590526084810184905260a481018390523060c48201526103e8420160e4820152905160009182918291737a250d5630b4cf539739df2c5dacb4c659f2488d9163e8e33700916101048082019260609290919082900301818787803b1580156130bc57600080fd5b505af11580156130d0573d6000803e3d6000fd5b505050506040513d60608110156130e657600080fd5b5080516020820151604090920151909450909250905086831015613181576040805163a9059cbb60e01b8152336004820152848903602482015290516001600160a01b038b169163a9059cbb9160448083019260209291908290030181600087803b15801561315457600080fd5b505af1158015613168573d6000803e3d6000fd5b505050506040513d602081101561317e57600080fd5b50505b85821015613206576040805163a9059cbb60e01b8152336004820152838803602482015290516001600160a01b038a169163a9059cbb9160448083019260209291908290030181600087803b1580156131d957600080fd5b505af11580156131ed573d6000803e3d6000fd5b505050506040513d602081101561320357600080fd5b50505b96509650969350505050565b6001600160a01b03821661326d576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b61327960008383612a25565b6002546132869082612a2a565b6002556001600160a01b0382166000908152602081905260409020546132ac9082612a2a565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6000612a8483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061275e565b60608160005b815181101561340f57604160f81b82828151811061336457fe5b01602001516001600160f81b0319161080159061339f5750605a60f81b82828151811061338d57fe5b01602001516001600160f81b03191611155b6133c3578181815181106133af57fe5b01602001516001600160f81b0319166133e4565b8181815181106133cf57fe5b602001015160f81c60f81b60f81c60200160f81b5b8282815181106133f057fe5b60200101906001600160f81b031916908160001a90535060010161334a565b5092915050565b82805482825590600052602060002090810192821561346b579160200282015b8281111561346b57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613436565b5061347792915061352f565b5090565b8280548282559060005260206000209081019282156134b6579160200282015b828111156134b657825182559160200191906001019061349b565b5061347792915061354e565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061350357805160ff19168380011785556134b6565b828001600101855582156134b657918201828111156134b657825182559160200191906001019061349b565b5b808211156134775780546001600160a01b0319168155600101613530565b5b80821115613477576000815560010161354f56fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f2061646472657373737461626c65636f696e2e726562616c616e636562796372656469742e626c6f636b2e696e74657276616c45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734d696e74696e6720616d6f756e742069732067726561746572207468616e20617661696c6162696c69747945524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a6edf43710700896a164d0275b0640fc162239f48904b6e5d9766aaf7678e2b164736f6c63430007000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000a8ce548324181cd96e51db9bb71d993c4c226c9e000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000002e0000000000000000000000000000000000000000000000000000000000000034000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000014756e697377617020537461746520446f6c6c617200000000000000000000000000000000000000000000000000000000000000000000000000000000000000037553440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b0000000000000000000000003139ffc91b99aa94da8a2dc13f1fc36f9bdc98ee0000000000000000000000007cd0378010711cb72a6ca35f09d5da2094061d9c000000000000000000000000fc5211986172260fb6579eb06220b14f4389011f000000000000000000000000ae461ca67b15dc8dc81ce7615e0320da1a9ab8d5000000000000000000000000b20bd5d04be54f870d5c0d3ca85d82b34b836405000000000000000000000000bdfa9ebff5369bc10ff75b4a2fbfce8d5caf10240000000000000000000000003041cbd36888becc7bbcbc0045e3b1f144466f5f000000000000000000000000f1f27db872b7f6e8b873c97f785fe4f9a6c92161000000000000000000000000524847c615639e76fe7d0fe0b16be8c4eac9cf3c000000000000000000000000615cc08df9084e3fac80fe19045a55612185b6a4000000000000000000000000a0abda1f980e03d7eadb78aed8fc1f2dd0fe83dd0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000001900000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000a6f5e90000000000000000000000000000000000000000000000000000000000aa03290000000000000000000000000000000000000000000000000000000000ad10690000000000000000000000000000000000000000000000000000000000b01da90000000000000000000000000000000000000000000000000000000000b32ae900000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000069e10de76676d080000000000000000000000000000000000000000000000001a784379d99db420000000000000000000000000000000000000000000000000422ca8b0a00a425000000000000000000000000000000000000000000000000084595161401484a000000000000000000000000000000000000000000000000108b2a2c28029094000000
-----Decoded View---------------
Arg [0] : name (string): uniswap State Dollar
Arg [1] : symbol (string): uSD
Arg [2] : doubleProxy (address): 0xa8CE548324181cd96e51db9bb71D993C4C226C9E
Arg [3] : allowedPairs (address[]): 0x3139Ffc91B99aa94DA8A2dc13f1fC36F9BDc98eE,0x7cD0378010711CB72a6ca35f09D5Da2094061D9c,0xfC5211986172260fb6579eb06220b14F4389011F,0xAE461cA67B15dc8dc81CE7615e0320dA1A9aB8D5,0xB20bd5D04BE54f870D5C0d3cA85d82b34B836405,0xbdFa9eBFf5369bC10ff75b4a2FBfce8d5caf1024,0x3041CbD36888bECc7bbCBc0045E3B1f144466f5f,0xf1f27Db872b7F6E8B873C97F785fe4f9a6C92161,0x524847C615639e76fE7D0FE0B16be8c4eAC9CF3c,0x615Cc08dF9084e3faC80FE19045A55612185B6a4,0xa0ABda1F980e03D7eADb78aed8fC1f2DD0fe83Dd
Arg [4] : rebalanceRewardMultiplier (uint256[]): 30,25
Arg [5] : timeWindows (uint256[]): 10941929,11141929,11341929,11541929,11741929
Arg [6] : mintables (uint256[]): 500000000000000000000000,2000000000000000000000000,5000000000000000000000000,10000000000000000000000000,20000000000000000000000000
-----Encoded View---------------
38 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [2] : 000000000000000000000000a8ce548324181cd96e51db9bb71d993c4c226c9e
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [4] : 00000000000000000000000000000000000000000000000000000000000002e0
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000340
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000400
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [8] : 756e697377617020537461746520446f6c6c6172000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [10] : 7553440000000000000000000000000000000000000000000000000000000000
Arg [11] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [12] : 0000000000000000000000003139ffc91b99aa94da8a2dc13f1fc36f9bdc98ee
Arg [13] : 0000000000000000000000007cd0378010711cb72a6ca35f09d5da2094061d9c
Arg [14] : 000000000000000000000000fc5211986172260fb6579eb06220b14f4389011f
Arg [15] : 000000000000000000000000ae461ca67b15dc8dc81ce7615e0320da1a9ab8d5
Arg [16] : 000000000000000000000000b20bd5d04be54f870d5c0d3ca85d82b34b836405
Arg [17] : 000000000000000000000000bdfa9ebff5369bc10ff75b4a2fbfce8d5caf1024
Arg [18] : 0000000000000000000000003041cbd36888becc7bbcbc0045e3b1f144466f5f
Arg [19] : 000000000000000000000000f1f27db872b7f6e8b873c97f785fe4f9a6c92161
Arg [20] : 000000000000000000000000524847c615639e76fe7d0fe0b16be8c4eac9cf3c
Arg [21] : 000000000000000000000000615cc08df9084e3fac80fe19045a55612185b6a4
Arg [22] : 000000000000000000000000a0abda1f980e03d7eadb78aed8fc1f2dd0fe83dd
Arg [23] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [24] : 000000000000000000000000000000000000000000000000000000000000001e
Arg [25] : 0000000000000000000000000000000000000000000000000000000000000019
Arg [26] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [27] : 0000000000000000000000000000000000000000000000000000000000a6f5e9
Arg [28] : 0000000000000000000000000000000000000000000000000000000000aa0329
Arg [29] : 0000000000000000000000000000000000000000000000000000000000ad1069
Arg [30] : 0000000000000000000000000000000000000000000000000000000000b01da9
Arg [31] : 0000000000000000000000000000000000000000000000000000000000b32ae9
Arg [32] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [33] : 0000000000000000000000000000000000000000000069e10de76676d0800000
Arg [34] : 00000000000000000000000000000000000000000001a784379d99db42000000
Arg [35] : 0000000000000000000000000000000000000000000422ca8b0a00a425000000
Arg [36] : 000000000000000000000000000000000000000000084595161401484a000000
Arg [37] : 000000000000000000000000000000000000000000108b2a2c28029094000000
Deployed Bytecode Sourcemap
109:13294:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2353:81:2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4469:202;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4469:202:2;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;4429:469:6;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4429:469:6;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;3396:98:2;;;:::i;5131:439::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5131:439:2;;;;;;;;;;;;;;;;;:::i;3255:81::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7011:1343:6;;;;;;;;;;;;;;;;-1:-1:-1;7011:1343:6;;;;;;;;;;;;;;;;;:::i;5965:289:2:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5965:289:2;;;;;;;;:::i;2488:98:6:-;;;:::i;:::-;;;;-1:-1:-1;;;;;2488:98:6;;;;;;;;;;;;;;3211:613;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3034:171;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1700:172;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3552:117:2;;;;;;;;;;;;;;;;-1:-1:-1;3552:117:2;-1:-1:-1;;;;;3552:117:2;;:::i;1878:604:6:-;;;:::i;6185:820::-;;;;;;;;;;;;;;;;-1:-1:-1;6185:820:6;;;;;;;;;;;;;;;;;:::i;2547:85:2:-;;;:::i;6741:386::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6741:386:2;;;;;;;;:::i;3872:208::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3872:208:2;;;;;;;;:::i;3830:593:6:-;;;;;;;;;;;;;;;;-1:-1:-1;3830:593:6;;:::i;4904:1275::-;;;;;;;;;;;;;;;;-1:-1:-1;4904:1275:6;;;;;;;;;;;;;;;;;;;;;;:::i;1048:646::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1048:646:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1048:646:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1048:646:6;;;;;;;;-1:-1:-1;1048:646:6;;-1:-1:-1;;;;;1048:646:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1048:646:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1048:646:6;;-1:-1:-1;;;;;1048:646:6;;;;;;;;-1:-1:-1;1048:646:6;;;;-1:-1:-1;1048:646:6;;;;-1:-1:-1;;;;1048:646:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1048:646:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1048:646:6;;;;;;;;-1:-1:-1;1048:646:6;;-1:-1:-1;;;;;1048:646:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1048:646:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1048:646:6;;;;;;;;-1:-1:-1;1048:646:6;;-1:-1:-1;;;;;1048:646:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1048:646:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1048:646:6;;;;;;;;-1:-1:-1;1048:646:6;;-1:-1:-1;;;;;1048:646:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1048:646:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1048:646:6;;-1:-1:-1;1048:646:6;;-1:-1:-1;;;;;1048:646:6:i;:::-;;2749:109;;;:::i;2592:151::-;;;;;;;;;;;;;;;;-1:-1:-1;2592:151:6;-1:-1:-1;;;;;2592:151:6;;:::i;2864:164::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2864:164:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2864:164:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2864:164:6;;-1:-1:-1;2864:164:6;;-1:-1:-1;;;;;2864:164:6:i;4138:193:2:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4138:193:2;;;;;;;;;;:::i;8360:588:6:-;;;;;;;;;;;;;;;;-1:-1:-1;8360:588:6;;:::i;2353:81:2:-;2422:5;2415:12;;;;;;;;-1:-1:-1;;2415:12:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2390:13;;2415:12;;2422:5;;2415:12;;2422:5;2415:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2353:81;:::o;4469:202::-;4584:4;4604:39;4613:12;:10;:12::i;:::-;4627:7;4636:6;4604:8;:39::i;:::-;-1:-1:-1;4660:4:2;4469:202;;;;;:::o;4429:469:6:-;4556:7;4579:16;4609:12;4579:43;;4632:25;4673:5;-1:-1:-1;;;;;4673:14:6;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4673:16:6;4660:10;:8;:10::i;:::-;:29;4632:57;;;;4699:14;4716:6;4726:1;4716:11;:53;;4763:6;4716:53;;;4730:30;;;-1:-1:-1;;;4730:30:6;;4754:4;4730:30;;;;;;-1:-1:-1;;;;;4730:15:6;;;;;:30;;;;;;;;;;;;;;:15;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4730:30:6;4716:53;4699:70;-1:-1:-1;4783:22:6;4779:66;;4828:6;-1:-1:-1;4821:13:6;;-1:-1:-1;;4821:13:6;4779:66;4870:2;:21;;;;4861:30;;4429:469;-1:-1:-1;;;;4429:469:6:o;3396:98:2:-;3475:12;;3396:98;:::o;5131:439::-;5267:4;5283:36;5293:6;5301:9;5312:6;5283:9;:36::i;:::-;5329:213;5351:6;5371:12;:10;:12::i;:::-;5397:135;5452:6;5397:135;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5397:19:2;;;;;;:11;:19;;;;;;5417:12;:10;:12::i;:::-;-1:-1:-1;;;;;5397:33:2;;;;;;;;;;;;-1:-1:-1;5397:33:2;;;:135;:37;:135::i;:::-;5329:8;:213::i;:::-;-1:-1:-1;5559:4:2;5131:439;;;;;:::o;3255:81::-;3320:9;;;;3255:81;:::o;7011:1343:6:-;7201:16;7181:9;9401:13;:20;9389:32;;9350:110;;;;;-1:-1:-1;;;9350:110:6;;;;;;;;;;;;-1:-1:-1;;;9350:110:6;;;;;;;;;;;;;;;7363:12:::1;;;;;;;;;-1:-1:-1::0;;;;;7363:12:6::1;-1:-1:-1::0;;;;;7350:32:6::1;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;7350:34:6;7340:90:::1;::::0;;-1:-1:-1;;;7340:90:6;;;;-1:-1:-1;;;;;7340:88:6;;::::1;::::0;::::1;::::0;:90:::1;::::0;;::::1;::::0;7350:34:::1;::::0;7340:90;;;;;;;;:88;:90;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;7340:90:6;7310:209:::1;::::0;-1:-1:-1;;;7310:209:6;;7340:90:::1;7310:209;::::0;::::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;;;;;7310:162:6;;::::1;::::0;::::1;::::0;:209;;;;;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;7310:209:6;7278:16:::1;::::0;:241:::1;7250:12;:269;;7229:336;;;::::0;;-1:-1:-1;;;7229:336:6;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;7229:336:6;;;;;;;;;;;;;::::1;;7594:12;7575:16;:31:::0;7617:14:::1;7637:13;:11;:13::i;:::-;7616:34;;;7661:14;7677::::0;7693:19:::1;7716:23;7729:9;7716:12;:23::i;:::-;7660:79;;;;;;7749:40;7765:11;7778:10;7749:15;:40::i;:::-;7800:16;7818::::0;210:42:::1;-1:-1:-1::0;;;;;7838:86:6::1;;7938:6;7958;7978:10;8002:7;8023;8067:12;;;;;;;;;-1:-1:-1::0;;;;;8067:12:6::1;-1:-1:-1::0;;;;;8054:32:6::1;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;8054:34:6;8044:67:::1;::::0;;-1:-1:-1;;;8044:67:6;;;;-1:-1:-1;;;;;8044:65:6;;::::1;::::0;::::1;::::0;:67:::1;::::0;;::::1;::::0;8054:34:::1;::::0;8044:67;;;;;;;;:65;:67;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;8044:67:6;7838:319:::1;::::0;;-1:-1:-1;;;;;;7838:319:6::1;::::0;;;;;;-1:-1:-1;;;;;7838:319:6;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;;::::1;::::0;;;;8143:4:::1;8125:15;:22;7838:319:::0;;;;;;;;;;;;;;;;;-1:-1:-1;7838:319:6;;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;7838:319:6;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;7838:319:6;-1:-1:-1;8240:35:6::1;8258:6:::0;7838:319;8240:17:::1;:35::i;:::-;8190;8208:6;8216:8;8190:17;:35::i;:::-;:85;8167:108;;8305:6;8293:8;:18;;8285:62;;;::::0;;-1:-1:-1;;;8285:62:6;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;9470:1;;;;;;7011:1343:::0;;;;;;;:::o;5965:289:2:-;6077:4;6097:129;6119:12;:10;:12::i;:::-;6145:7;6166:50;6205:10;6166:11;:25;6178:12;:10;:12::i;:::-;-1:-1:-1;;;;;6166:25:2;;;;;;;;;;;;;;;;;-1:-1:-1;6166:25:2;;;:34;;;;;;;;;;;:38;:50::i;2488:98:6:-;2567:12;;;;;-1:-1:-1;;;;;2567:12:6;;2488:98::o;3211:613::-;3296:14;3312:12;3340:19;3362:13;:11;:13::i;:::-;3340:35;;3385:23;3427:9;3422:182;3446:13;:20;3442:24;;3422:182;;;3488:15;3505;3524:17;3539:1;3524:14;:17::i;:::-;3575;3555:38;;;;;-1:-1:-1;;3468:3:6;;3422:182;;;;3640:11;3622:15;:29;:89;;3710:1;3622:89;;;3684:11;3666:15;:29;3622:89;3613:98;;3742:15;3728:11;:29;:89;;3816:1;3728:89;;;3786:15;3772:11;:29;3728:89;3721:96;;3211:613;;;;:::o;3034:171::-;3133:16;3172:26;3165:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3034:171;:::o;1700:172::-;1782:16;1800;1840:12;1854:10;1832:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1700:172;;:::o;3552:117:2:-;-1:-1:-1;;;;;3644:18:2;;3618:7;3644:18;;;;;;;;;;;3552:117;;;;:::o;1878:604:6:-;2062:12;:19;1935:7;;-1:-1:-1;;1983:66:6;2062:23;;;;:79;;-1:-1:-1;2104:12:6;2117:19;;-1:-1:-1;;2117:23:6;;;2104:37;;;;;;;;;;;;;;2089:12;:52;2062:79;2059:318;;;2162:9;2157:210;2181:12;:19;2177:23;;2157:210;;;2244:12;2257:1;2244:15;;;;;;;;;;;;;;;;2229:12;:30;2225:128;;;2294:10;2305:1;2294:13;;;;;;;;;;;;;;;;2283:24;;2329:5;;2225:128;2202:3;;2157:210;;;;2059:318;2386:14;2403:13;:11;:13::i;:::-;2386:30;;2443:8;2433:6;:18;;:42;;2469:6;2458:8;:17;2433:42;;;2454:1;2433:42;2426:49;;;;1878:604;:::o;6185:820::-;6394:16;;6366:9;9401:13;:20;9389:32;;9350:110;;;;;-1:-1:-1;;;9350:110:6;;;;;;;;;;;;-1:-1:-1;;;9350:110:6;;;;;;;;;;;;;;;6445:14:::1;6461::::0;6477:19:::1;6500:23;6513:9;6500:12;:23::i;:::-;6444:79;;;;;;6533:40;6549:11;6562:10;6533:15;:40::i;:::-;6606:240;::::0;;-1:-1:-1;;;6606:240:6;;-1:-1:-1;;;;;6606:240:6;;::::1;;::::0;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;6790:10:::1;6606:240:::0;;;;6832:4:::1;6814:15;:22;6606:240:::0;;;;;;210:42:::1;::::0;6606:64:::1;::::0;:240;;;;;;;;;;;-1:-1:-1;210:42:6;6606:240;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;6606:240:6;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;6606:240:6;-1:-1:-1;6856:142:6::1;6875:10;6953:35;6971:6:::0;6606:240;6953:17:::1;:35::i;:::-;6899;6917:6;6925:8;6899:17;:35::i;:::-;:89;6856:5;:142::i;:::-;9470:1;;;6185:820:::0;;;;;;;;:::o;2547:85:2:-;2618:7;2611:14;;;;;;;;-1:-1:-1;;2611:14:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2586:13;;2611:14;;2618:7;;2611:14;;2618:7;2611:14;;;;;;;;;;;;;;;;;;;;;;;;6741:386;6858:4;6878:221;6900:12;:10;:12::i;:::-;6926:7;6947:142;7003:15;6947:142;;;;;;;;;;;;;;;;;:11;:25;6959:12;:10;:12::i;:::-;-1:-1:-1;;;;;6947:25:2;;;;;;;;;;;;;;;;;-1:-1:-1;6947:25:2;;;:34;;;;;;;;;;;:142;:38;:142::i;3872:208::-;3990:4;4010:42;4020:12;:10;:12::i;:::-;4034:9;4045:6;4010:9;:42::i;3830:593:6:-;3947:14;3980:10;3977:48;;-1:-1:-1;4013:1:6;4006:8;;3977:48;4058:16;;;4072:1;4058:16;;;4034:21;4058:16;;;;;4034:21;4058:16;;;;;;;;;;-1:-1:-1;4058:16:6;4034:40;;4102:4;4084;4089:1;4084:7;;;;;;;;;;;;;:23;-1:-1:-1;;;;;4084:23:6;;;-1:-1:-1;;;;;4084:23:6;;;;;4150:12;;;;;;;;;-1:-1:-1;;;;;4150:12:6;-1:-1:-1;;;;;4137:32:6;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4137:34:6;4127:56;;;-1:-1:-1;;;4127:56:6;;;;-1:-1:-1;;;;;4127:54:6;;;;;;:56;;;;;4137:34;;4127:56;;;;;;;;:54;:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4127:56:6;4117:7;;:4;;4122:1;;4117:7;;;;;;-1:-1:-1;;;;;4117:66:6;;;:7;;;;;;;;;;:66;4202:96;;;-1:-1:-1;;;4202:96:6;;;;;;;;;;;;;;;;;;;;;;210:42;;4202:49;;4265:5;;4284:4;;4202:96;;;;;;;;;;;;;;;;-1:-1:-1;4202:96:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4202:96:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4202:96:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4202:96:6;;;;;;;;;;;;-1:-1:-1;4202:96:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4299:1;4202:99;;;;;;;;;;;;;;4193:108;;4387:26;4414:1;4387:29;;;;;;;;;;;;;;;;4342:26;4369:1;4342:29;;;;;;;;;;;;;;;;4333:6;:38;4332:84;;;;;;;3830:593;-1:-1:-1;;;3830:593:6:o;4904:1275::-;5109:14;5089:9;9401:13;:20;9389:32;;9350:110;;;;;-1:-1:-1;;;9350:110:6;;;;;;;;;;;;-1:-1:-1;;;9350:110:6;;;;;;;;;;;;;;;5209:12:::1;;;;;;;;;-1:-1:-1::0;;;;;5209:12:6::1;-1:-1:-1::0;;;;;5196:32:6::1;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;5196:34:6;5186:90:::1;::::0;;-1:-1:-1;;;5186:90:6;;;;-1:-1:-1;;;;;5186:88:6;;::::1;::::0;::::1;::::0;:90:::1;::::0;;::::1;::::0;5196:34:::1;::::0;5186:90;;;;;;;;:88;:90;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;5186:90:6;5333:126:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;5186:90:6::1;5333:126:::0;::::1;::::0;-1:-1:-1;;;;;5156:159:6;;::::1;::::0;::::1;::::0;5333:126:::1;::::0;5417:24:::1;5435:4;5417:9;:24::i;:::-;5333:17;:126::i;:::-;5156:317;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;5156:317:6;5135:384:::1;;;::::0;;-1:-1:-1;;;5135:384:6;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;5135:384:6;;;;;;;;;;;;;::::1;;5530:14;5546::::0;5566:23:::1;5579:9;5566:12;:23::i;:::-;5529:60;;;;;5599:49;5632:6;5640:7;5599:32;:49::i;:::-;5658;5691:6;5699:7;5658:32;:49::i;:::-;5718:19;5739:20:::0;5765:156:::1;5795:6;5815;5835:7;5856;5877:10;5901;5765:16;:156::i;:::-;5717:204;;;;;6005:39;6023:6;6031:12;6005:17;:39::i;:::-;5952:38;5970:6;5978:11;5952:17;:38::i;:::-;:92;5931:113;;6072:17;:15;:17::i;:::-;6062:6;:27;;6054:83;;;;-1:-1:-1::0;;;6054:83:6::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6147:25;6153:10;6165:6;6147:5;:25::i;:::-;9470:1;;;;4904:1275:::0;;;;;;;;:::o;1048:646::-;1346:24;1357:4;1363:6;1346:10;:24::i;:::-;1380:12;:26;;-1:-1:-1;;;;;;1380:26:6;;-1:-1:-1;;;;;1380:26:6;;;;;;1416:28;;;;:13;;:28;;;;;:::i;:::-;;1461:25;:32;1497:1;1461:37;1454:45;;;;1509:54;;;;:26;;:54;;;;;:::i;:::-;;1602:9;:16;1580:11;:18;:38;1573:46;;;;1629:26;;;;:12;;:26;;;;;:::i;:::-;-1:-1:-1;1665:22:6;;;;:10;;:22;;;;;:::i;:::-;;1048:646;;;;;;;:::o;2749:109::-;2803:16;2838:13;2831:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2831:20:6;;;;;;;;;;;;;;;;;;;;;;2749:109;:::o;2592:151::-;9076:12;;;;;;;;;-1:-1:-1;;;;;9076:12:6;-1:-1:-1;;;;;9063:32:6;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9063:34:6;9053:104;;;-1:-1:-1;;;9053:104:6;;;;-1:-1:-1;;;;;9053:102:6;;;;;;:104;;;;;9063:34;;9053:104;;;;;;;;:102;:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9053:104:6;9009:217;;;-1:-1:-1;;;9009:217:6;;9215:10;9009:217;;;;;;-1:-1:-1;;;;;9009:205:6;;;;;;:217;;;;;9053:104;;9009:217;;;;;;;;:205;:217;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9009:217:6;8988:284;;;;;-1:-1:-1;;;8988:284:6;;;;;;;;;;;;-1:-1:-1;;;8988:284:6;;;;;;;;;;;;;;;2707:12:::1;:29:::0;;-1:-1:-1;;;;;2707:29:6;;::::1;;;-1:-1:-1::0;;;;;;2707:29:6;;::::1;::::0;;;::::1;::::0;;2592:151::o;2864:164::-;9076:12;;;;;;;;;-1:-1:-1;;;;;9076:12:6;-1:-1:-1;;;;;9063:32:6;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9063:34:6;9053:104;;;-1:-1:-1;;;9053:104:6;;;;-1:-1:-1;;;;;9053:102:6;;;;;;:104;;;;;9063:34;;9053:104;;;;;;;;:102;:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9053:104:6;9009:217;;;-1:-1:-1;;;9009:217:6;;9215:10;9009:217;;;;;;-1:-1:-1;;;;;9009:205:6;;;;;;:217;;;;;9053:104;;9009:217;;;;;;;;:205;:217;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9009:217:6;8988:284;;;;;-1:-1:-1;;;8988:284:6;;;;;;;;;;;;-1:-1:-1;;;8988:284:6;;;;;;;;;;;;;;;2990:31;;::::1;::::0;:13:::1;::::0;:31:::1;::::0;::::1;::::0;::::1;:::i;:::-;;2864:164:::0;:::o;4138:193:2:-;-1:-1:-1;;;;;4297:18:2;;;4267:7;4297:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4138:193::o;8360:588:6:-;8425:14;8468:1;8459:6;:10;8451:55;;;;;-1:-1:-1;;;8451:55:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8519:12;8535:13;:11;:13::i;:::-;8516:32;;;8576:4;8566:6;:14;;8558:50;;;;;-1:-1:-1;;;8558:50:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;8618:25;8624:10;8636:6;8618:5;:25::i;:::-;8676:12;;;;;;;;;-1:-1:-1;;;;;8676:12:6;-1:-1:-1;;;;;8663:32:6;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8663:34:6;-1:-1:-1;;;;;8653:52:6;;8803:1;;8851:38;8882:6;8851:30;:38::i;:::-;8842:47;;;8907:10;8767:164;;;;;;-1:-1:-1;;;;;8767:164:6;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8767:164:6;;;;;;;;;;;;;;;;;;;;;;;8653:288;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8653:288:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8653:288:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8653:288:6;;;;;;-1:-1:-1;8653:288:6;;;;;;;;;;-1:-1:-1;8653:288:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8360:588;;;;:::o;2021:267:2:-;2146:13;2133:7;2117:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:42;2096:109;;;;;-1:-1:-1;;;2096:109:2;;;;;;;;;;;;-1:-1:-1;;;2096:109:2;;;;;;;;;;;;;;;2216:12;;;;:5;;:12;;;;;:::i;:::-;-1:-1:-1;2239:16:2;;;;:7;;:16;;;;;:::i;:::-;-1:-1:-1;;2266:9:2;:14;;-1:-1:-1;;2266:14:2;2278:2;2266:14;;;-1:-1:-1;2021:267:2:o;590:104:1:-;677:10;590:104;:::o;10023:370:2:-;-1:-1:-1;;;;;10154:19:2;;10146:68;;;;-1:-1:-1;;;10146:68:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10232:21:2;;10224:68;;;;-1:-1:-1;;;10224:68:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10303:18:2;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10354:32;;;;;;;;;;;;;;;;;10023:370;;;:::o;7601:594::-;-1:-1:-1;;;;;7736:20:2;;7728:70;;;;-1:-1:-1;;;7728:70:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7816:23:2;;7808:71;;;;-1:-1:-1;;;7808:71:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7890:47;7911:6;7919:9;7930:6;7890:20;:47::i;:::-;7968:105;8003:6;7968:105;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7968:17:2;;:9;:17;;;;;;;;;;;;:105;:21;:105::i;:::-;-1:-1:-1;;;;;7948:17:2;;;:9;:17;;;;;;;;;;;:125;;;;8106:20;;;;;;;:32;;8131:6;8106:24;:32::i;:::-;-1:-1:-1;;;;;8083:20:2;;;:9;:20;;;;;;;;;;;;:55;;;;8153:35;;;;;;;8083:20;;8153:35;;;;;;;;;;;;;7601:594;;;:::o;1746:187:5:-;1832:7;1867:12;1859:6;;;;1851:29;;;;-1:-1:-1;;;1851:29:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1902:5:5;;;1746:187::o;9484:369:6:-;9584:14;9612;9640:19;9684;9748:13;9762:9;9748:24;;;;;;;;;;;;;;;;;;;9801:13;;;-1:-1:-1;;;9801:13:6;;;;-1:-1:-1;;;;;9748:24:6;;;;-1:-1:-1;9748:24:6;;-1:-1:-1;9748:24:6;;9801:11;;:13;;;;;;;;;;9748:24;9801:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9801:13:6;9833;;;-1:-1:-1;;;9833:13:6;;;;9801;;-1:-1:-1;;;;;;9833:11:6;;;;;:13;;;;;9801;;9833;;;;;;;;:11;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9833:13:6;9484:369;;9833:13;;-1:-1:-1;9484:369:6;;;-1:-1:-1;;9484:369:6:o;10104:366::-;10233:49;;;-1:-1:-1;;;10233:49:6;;10257:4;10233:49;;;;210:42;10233:49;;;;;;10206:12;;10286:5;;-1:-1:-1;;;;;10233:15:6;;;;;:49;;;;;;;;;;;;;;:15;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10233:49:6;:58;10229:235;;10307:146;;;-1:-1:-1;;;10307:146:6;;210:42;10307:146;;;;-1:-1:-1;;10307:146:6;;;;;;-1:-1:-1;;;;;10307:13:6;;;;;:146;;;;;;;;;;;;;;-1:-1:-1;10307:13:6;:146;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10229:235:6;10104:366;;;:::o;874:176:5:-;932:7;963:5;;;986:6;;;;978:46;;;;;-1:-1:-1;;;978:46:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;1042:1;874:176;-1:-1:-1;;;874:176:5:o;11636:673:6:-;11717:15;11734;11766:14;11782;11798:19;11821:15;11834:1;11821:12;:15::i;:::-;11765:71;;;;;;11846:19;11883:11;11846:49;;11905:18;11926:4;-1:-1:-1;;;;;11926:14:6;;11949:4;11926:29;;;;;;;;;;;;;-1:-1:-1;;;;;11926:29:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11926:29:6;11991:18;;;-1:-1:-1;;;11991:18:6;;;;11926:29;;-1:-1:-1;11965:23:6;;-1:-1:-1;;;;;11991:16:6;;;;;:18;;;;;11926:29;;11991:18;;;;;;;:16;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11991:18:6;12042;;;-1:-1:-1;;;12042:18:6;;;;11991;;-1:-1:-1;;;;;;12042:16:6;;;;;:18;;;;;;;;;;;;;;;:16;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12042:18:6;;;;;;;12019:41;;;;;-1:-1:-1;12019:41:6;;-1:-1:-1;12080:101:6;12111:6;12156:15;12132:20;;;12156:15;12131:40;;;;;12080:17;:101::i;:::-;12070:111;;12201:101;12232:6;12277:15;12266:7;12253:10;:20;12252:40;;;;12201:101;12191:111;;11636:673;;;;;;;;;:::o;9154:444:2:-;-1:-1:-1;;;;;9237:21:2;;9229:67;;;;-1:-1:-1;;;9229:67:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9307:49;9328:7;9345:1;9349:6;9307:20;:49::i;:::-;9388:102;9424:6;9388:102;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9388:18:2;;:9;:18;;;;;;;;;;;;:102;:22;:102::i;:::-;-1:-1:-1;;;;;9367:18:2;;:9;:18;;;;;;;;;;:123;9515:12;;:24;;9532:6;9515:16;:24::i;:::-;9500:12;:39;9554:37;;;;;;;;9580:1;;-1:-1:-1;;;;;9554:37:2;;;;;;;;;;;;9154:444;;:::o;12520:499:6:-;12650:42;;;;;;;;;;;-1:-1:-1;;;12650:42:6;;;;12722:13;;12732:2;12722:13;;;12576;12722;;;;;;-1:-1:-1;;;;;12625:14:6;;;12650:42;12576:13;;12722;;;;;;;;;;-1:-1:-1;12722:13:6;12703:32;;-1:-1:-1;;;12745:3:6;12749:1;12745:6;;;;;;;;;;;:12;-1:-1:-1;;;;;12745:12:6;;;;;;;;;-1:-1:-1;;;12767:3:6;12771:1;12767:6;;;;;;;;;;;:12;-1:-1:-1;;;;;12767:12:6;;;;;;;;;12794:9;12789:196;12813:2;12809:1;:6;12789:196;;;12853:8;12893:1;12876:5;12882:1;12886:2;12882:6;12876:13;;;;;;;;;;-1:-1:-1;;;;;12876:18:6;;;;12870:25;;12862:34;;12853:44;;;;;;;;;;;;;;;;12836:3;12844:1;12848;12844:5;12840:1;:9;12836:14;;;;;;;;;;;:61;-1:-1:-1;;;;;12836:61:6;;;;;;;;;12928:8;12951:5;12957:1;12961:2;12957:6;12951:13;;;;;;;12928:46;;12951:13;;;12967:4;12945:27;;12928:46;;;;;;;;;;;;;;12911:3;12919:1;12923;12919:5;12915:1;:9;12911:14;;;;;;;;;;;:63;-1:-1:-1;;;;;12911:63:6;;;;;;;;-1:-1:-1;12817:3:6;;12789:196;;;-1:-1:-1;13008:3:6;12520:499;-1:-1:-1;;;;12520:499:6:o;12315:199::-;12422:13;12458:49;12495:1;12503;12478:27;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12478:27:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12478:27:6;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12478:27:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12458:12;:49::i;9859:239::-;9978:67;;;-1:-1:-1;;;9978:67:6;;10012:10;9978:67;;;;10032:4;9978:67;;;;;;;;;;;;-1:-1:-1;;;;;9978:33:6;;;;;:67;;;;;;;;;;;;;;-1:-1:-1;9978:33:6;:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10055:36:6;;-1:-1:-1;10071:12:6;10085:5;10055:15;:36::i;10476:1154::-;10903:329;;;-1:-1:-1;;;10903:329:6;;-1:-1:-1;;;;;10903:329:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11181:4;10903:329;;;;11218:4;11200:15;:22;10903:329;;;;;;10751:19;;;;;;210:42;;10903:83;;:329;;;;;;;;;;;;;;;10751:19;210:42;10903:329;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10903:329:6;;;;;;;;;;;;;-1:-1:-1;10903:329:6;;-1:-1:-1;10903:329:6;-1:-1:-1;11246:33:6;;;11242:184;;;11295:120;;;-1:-1:-1;;;11295:120:6;;11340:10;11295:120;;;;11368:33;;;11295:120;;;;;;-1:-1:-1;;;;;11295:27:6;;;;;:120;;;;;;;;;;;;;;-1:-1:-1;11295:27:6;:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11242:184:6;11454:20;11439:12;:35;11435:189;;;11490:123;;;-1:-1:-1;;;11490:123:6;;11536:10;11490:123;;;;11564:35;;;11490:123;;;;;;-1:-1:-1;;;;;11490:28:6;;;;;:123;;;;;;;;;;;;;;-1:-1:-1;11490:28:6;:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11435:189:6;10476:1154;;;;;;;;;;:::o;8465:370:2:-;-1:-1:-1;;;;;8548:21:2;;8540:65;;;;;-1:-1:-1;;;8540:65:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;8616:49;8645:1;8649:7;8658:6;8616:20;:49::i;:::-;8691:12;;:24;;8708:6;8691:16;:24::i;:::-;8676:12;:39;-1:-1:-1;;;;;8746:18:2;;:9;:18;;;;;;;;;;;:30;;8769:6;8746:22;:30::i;:::-;-1:-1:-1;;;;;8725:18:2;;:9;:18;;;;;;;;;;;:51;;;;8791:37;;;;;;;8725:18;;:9;;8791:37;;;;;;;;;;8465:370;;:::o;1321:134:5:-;1379:7;1405:43;1409:1;1412;1405:43;;;;;;;;;;;;;;;;;:3;:43::i;13025:376:6:-;13112:13;13167:3;13186:9;13181:185;13205:4;:11;13201:1;:15;13181:185;;;13258:4;13247:15;;:4;13252:1;13247:7;;;;;;;;;;;;-1:-1:-1;;;;;;13247:7:6;:15;;;;:34;;;13277:4;13266:15;;:4;13271:1;13266:7;;;;;;;;;;;;-1:-1:-1;;;;;;13266:7:6;:15;;13247:34;:108;;13348:4;13353:1;13348:7;;;;;;;;;;;;-1:-1:-1;;;;;;13348:7:6;13247:108;;;13313:4;13318:1;13313:7;;;;;;;;;;;;;;;;13307:14;;13324:4;13307:21;13300:29;;13247:108;13237:4;13242:1;13237:7;;;;;;;;;;;:118;-1:-1:-1;;;;;13237:118:6;;;;;;;;-1:-1:-1;13218:3:6;;13181:185;;;-1:-1:-1;13389:4:6;13025:376;-1:-1:-1;;13025:376:6:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
ipfs://a6edf43710700896a164d0275b0640fc162239f48904b6e5d9766aaf7678e2b1
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.