More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 26 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x68747470 | 13923562 | 1114 days ago | IN | 0 ETH | 0.00196131 | ||||
0x68747470 | 13923562 | 1114 days ago | IN | 0 ETH | 0.00196131 | ||||
0x68747470 | 13923562 | 1114 days ago | IN | 0 ETH | 0.00196131 | ||||
0x68747470 | 13923562 | 1114 days ago | IN | 0 ETH | 0.00196131 | ||||
0x68747470 | 13923562 | 1114 days ago | IN | 0 ETH | 0.00196131 | ||||
0x68747470 | 13923562 | 1114 days ago | IN | 0 ETH | 0.00196131 | ||||
0x68747470 | 13923562 | 1114 days ago | IN | 0 ETH | 0.00196131 | ||||
0x68747470 | 13923562 | 1114 days ago | IN | 0 ETH | 0.00196131 | ||||
0x68747470 | 13923562 | 1114 days ago | IN | 0 ETH | 0.00196131 | ||||
0x68747470 | 13923562 | 1114 days ago | IN | 0 ETH | 0.00196131 | ||||
0x68747470 | 13923562 | 1114 days ago | IN | 0 ETH | 0.00196131 | ||||
0x68747470 | 13923562 | 1114 days ago | IN | 0 ETH | 0.00196131 | ||||
0x68747470 | 13923562 | 1114 days ago | IN | 0 ETH | 0.00196131 | ||||
0x68747470 | 13923562 | 1114 days ago | IN | 0 ETH | 0.00196131 | ||||
0x68747470 | 13923562 | 1114 days ago | IN | 0 ETH | 0.00196131 | ||||
0x68747470 | 13923561 | 1114 days ago | IN | 0 ETH | 0.00196131 | ||||
0x68747470 | 13923561 | 1114 days ago | IN | 0 ETH | 0.00196131 | ||||
0x68747470 | 13923551 | 1114 days ago | IN | 0 ETH | 0.00196131 | ||||
0x68747470 | 13923551 | 1114 days ago | IN | 0 ETH | 0.00196131 | ||||
0x68747470 | 13923551 | 1114 days ago | IN | 0 ETH | 0.00196131 | ||||
0x68747470 | 13923551 | 1114 days ago | IN | 0 ETH | 0.00196131 | ||||
0x68747470 | 13923551 | 1114 days ago | IN | 0 ETH | 0.00196131 | ||||
0x68747470 | 13923551 | 1114 days ago | IN | 0 ETH | 0.00196131 | ||||
0x68747470 | 13923551 | 1114 days ago | IN | 0 ETH | 0.00196131 | ||||
0x68747470 | 13923551 | 1114 days ago | IN | 0 ETH | 0.00196131 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
OlympusTreasury
Compiler Version
v0.7.5+commit.eb77ed08
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-11 */ // SPDX-License-Identifier: AGPL-3.0-or-later // File: interfaces/IOlympusAuthority.sol pragma solidity =0.7.5; interface IOlympusAuthority { /* ========== EVENTS ========== */ event GovernorPushed(address indexed from, address indexed to, bool _effectiveImmediately); event GuardianPushed(address indexed from, address indexed to, bool _effectiveImmediately); event PolicyPushed(address indexed from, address indexed to, bool _effectiveImmediately); event VaultPushed(address indexed from, address indexed to, bool _effectiveImmediately); event GovernorPulled(address indexed from, address indexed to); event GuardianPulled(address indexed from, address indexed to); event PolicyPulled(address indexed from, address indexed to); event VaultPulled(address indexed from, address indexed to); /* ========== VIEW ========== */ function governor() external view returns (address); function guardian() external view returns (address); function policy() external view returns (address); function vault() external view returns (address); } // File: types/OlympusAccessControlled.sol pragma solidity >=0.7.5; abstract contract OlympusAccessControlled { /* ========== EVENTS ========== */ event AuthorityUpdated(IOlympusAuthority indexed authority); string UNAUTHORIZED = "UNAUTHORIZED"; // save gas /* ========== STATE VARIABLES ========== */ IOlympusAuthority public authority; /* ========== Constructor ========== */ constructor(IOlympusAuthority _authority) { authority = _authority; emit AuthorityUpdated(_authority); } /* ========== MODIFIERS ========== */ modifier onlyGovernor() { require(msg.sender == authority.governor(), UNAUTHORIZED); _; } modifier onlyGuardian() { require(msg.sender == authority.guardian(), UNAUTHORIZED); _; } modifier onlyPolicy() { require(msg.sender == authority.policy(), UNAUTHORIZED); _; } modifier onlyVault() { require(msg.sender == authority.vault(), UNAUTHORIZED); _; } /* ========== GOV ONLY ========== */ function setAuthority(IOlympusAuthority _newAuthority) external onlyGovernor { authority = _newAuthority; emit AuthorityUpdated(_newAuthority); } } // File: interfaces/ITreasury.sol pragma solidity >=0.7.5; interface ITreasury { function deposit( uint256 _amount, address _token, uint256 _profit ) external returns (uint256); function withdraw(uint256 _amount, address _token) external; function tokenValue(address _token, uint256 _amount) external view returns (uint256 value_); function mint(address _recipient, uint256 _amount) external; function manage(address _token, uint256 _amount) external; function incurDebt(uint256 amount_, address token_) external; function repayDebtWithReserve(uint256 amount_, address token_) external; function excessReserves() external view returns (uint256); function baseSupply() external view returns (uint256); } // File: interfaces/IBondingCalculator.sol pragma solidity >=0.7.5; interface IBondingCalculator { function markdown( address _LP ) external view returns ( uint ); function valuation( address pair_, uint amount_ ) external view returns ( uint _value ); } // File: interfaces/IOwnable.sol pragma solidity >=0.7.5; interface IOwnable { function owner() external view returns (address); function renounceManagement() external; function pushManagement( address newOwner_ ) external; function pullManagement() external; } // File: interfaces/IERC20.sol pragma solidity >=0.7.5; 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); } // File: interfaces/IsOHM.sol pragma solidity >=0.7.5; interface IsOHM is IERC20 { function rebase( uint256 ohmProfit_, uint epoch_) external returns (uint256); function circulatingSupply() external view returns (uint256); function gonsForBalance( uint amount ) external view returns ( uint ); function balanceForGons( uint gons ) external view returns ( uint ); function index() external view returns ( uint ); function toG(uint amount) external view returns (uint); function fromG(uint amount) external view returns (uint); function changeDebt( uint256 amount, address debtor, bool add ) external; function debtBalances(address _address) external view returns (uint256); } // File: interfaces/IOHM.sol pragma solidity >=0.7.5; interface IOHM is IERC20 { function mint(address account_, uint256 amount_) external; function burn(uint256 amount) external; function burnFrom(address account_, uint256 amount_) external; } // File: interfaces/IERC20Metadata.sol pragma solidity >=0.7.5; interface IERC20Metadata is IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } // File: libraries/SafeERC20.sol pragma solidity >=0.7.5; /// @notice Safe IERC20 and ETH transfer library that safely handles missing return values. /// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v3-periphery/blob/main/contracts/libraries/TransferHelper.sol) /// Taken from Solmate library SafeERC20 { function safeTransferFrom( IERC20 token, address from, address to, uint256 amount ) internal { (bool success, bytes memory data) = address(token).call( abi.encodeWithSelector(IERC20.transferFrom.selector, from, to, amount) ); require(success && (data.length == 0 || abi.decode(data, (bool))), "TRANSFER_FROM_FAILED"); } function safeTransfer( IERC20 token, address to, uint256 amount ) internal { (bool success, bytes memory data) = address(token).call( abi.encodeWithSelector(IERC20.transfer.selector, to, amount) ); require(success && (data.length == 0 || abi.decode(data, (bool))), "TRANSFER_FAILED"); } function safeApprove( IERC20 token, address to, uint256 amount ) internal { (bool success, bytes memory data) = address(token).call( abi.encodeWithSelector(IERC20.approve.selector, to, amount) ); require(success && (data.length == 0 || abi.decode(data, (bool))), "APPROVE_FAILED"); } function safeTransferETH(address to, uint256 amount) internal { (bool success, ) = to.call{value: amount}(new bytes(0)); require(success, "ETH_TRANSFER_FAILED"); } } // File: libraries/SafeMath.sol pragma solidity ^0.7.5; // TODO(zx): Replace all instances of SafeMath with OZ implementation library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by 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; } // Only used in the BondingCalculator.sol function sqrrt(uint256 a) internal pure returns (uint c) { if (a > 3) { c = a; uint b = add( div( a, 2), 1 ); while (b < c) { c = b; b = div( add( div( a, b ), b), 2 ); } } else if (a != 0) { c = 1; } } } // File: Treasury.sol pragma solidity ^0.7.5; contract OlympusTreasury is OlympusAccessControlled, ITreasury { /* ========== DEPENDENCIES ========== */ using SafeMath for uint256; using SafeERC20 for IERC20; /* ========== EVENTS ========== */ event Deposit(address indexed token, uint256 amount, uint256 value); event Withdrawal(address indexed token, uint256 amount, uint256 value); event CreateDebt(address indexed debtor, address indexed token, uint256 amount, uint256 value); event RepayDebt(address indexed debtor, address indexed token, uint256 amount, uint256 value); event Managed(address indexed token, uint256 amount); event ReservesAudited(uint256 indexed totalReserves); event Minted(address indexed caller, address indexed recipient, uint256 amount); event PermissionQueued(STATUS indexed status, address queued); event Permissioned(address addr, STATUS indexed status, bool result); /* ========== DATA STRUCTURES ========== */ enum STATUS { RESERVEDEPOSITOR, RESERVESPENDER, RESERVETOKEN, RESERVEMANAGER, LIQUIDITYDEPOSITOR, LIQUIDITYTOKEN, LIQUIDITYMANAGER, RESERVEDEBTOR, REWARDMANAGER, SOHM, OHMDEBTOR } struct Queue { STATUS managing; address toPermit; address calculator; uint256 timelockEnd; bool nullify; bool executed; } /* ========== STATE VARIABLES ========== */ IOHM public immutable OHM; IsOHM public sOHM; mapping(STATUS => address[]) public registry; mapping(STATUS => mapping(address => bool)) public permissions; mapping(address => address) public bondCalculator; mapping(address => uint256) public debtLimit; uint256 public totalReserves; uint256 public totalDebt; uint256 public ohmDebt; Queue[] public permissionQueue; uint256 public immutable blocksNeededForQueue; bool public timelockEnabled; bool public initialized; uint256 public onChainGovernanceTimelock; string internal notAccepted = "Treasury: not accepted"; string internal notApproved = "Treasury: not approved"; string internal invalidToken = "Treasury: invalid token"; string internal insufficientReserves = "Treasury: insufficient reserves"; /* ========== CONSTRUCTOR ========== */ constructor( address _ohm, uint256 _timelock, address _authority ) OlympusAccessControlled(IOlympusAuthority(_authority)) { require(_ohm != address(0), "Zero address: OHM"); OHM = IOHM(_ohm); timelockEnabled = false; initialized = false; blocksNeededForQueue = _timelock; } /* ========== MUTATIVE FUNCTIONS ========== */ /** * @notice allow approved address to deposit an asset for OHM * @param _amount uint256 * @param _token address * @param _profit uint256 * @return send_ uint256 */ function deposit( uint256 _amount, address _token, uint256 _profit ) external override returns (uint256 send_) { if (permissions[STATUS.RESERVETOKEN][_token]) { require(permissions[STATUS.RESERVEDEPOSITOR][msg.sender], notApproved); } else if (permissions[STATUS.LIQUIDITYTOKEN][_token]) { require(permissions[STATUS.LIQUIDITYDEPOSITOR][msg.sender], notApproved); } else { revert(invalidToken); } IERC20(_token).safeTransferFrom(msg.sender, address(this), _amount); uint256 value = tokenValue(_token, _amount); // mint OHM needed and store amount of rewards for distribution send_ = value.sub(_profit); OHM.mint(msg.sender, send_); totalReserves = totalReserves.add(value); emit Deposit(_token, _amount, value); } /** * @notice allow approved address to burn OHM for reserves * @param _amount uint256 * @param _token address */ function withdraw(uint256 _amount, address _token) external override { require(permissions[STATUS.RESERVETOKEN][_token], notAccepted); // Only reserves can be used for redemptions require(permissions[STATUS.RESERVESPENDER][msg.sender], notApproved); uint256 value = tokenValue(_token, _amount); OHM.burnFrom(msg.sender, value); totalReserves = totalReserves.sub(value); IERC20(_token).safeTransfer(msg.sender, _amount); emit Withdrawal(_token, _amount, value); } /** * @notice allow approved address to withdraw assets * @param _token address * @param _amount uint256 */ function manage(address _token, uint256 _amount) external override { if (permissions[STATUS.LIQUIDITYTOKEN][_token]) { require(permissions[STATUS.LIQUIDITYMANAGER][msg.sender], notApproved); } else { require(permissions[STATUS.RESERVEMANAGER][msg.sender], notApproved); } if (permissions[STATUS.RESERVETOKEN][_token] || permissions[STATUS.LIQUIDITYTOKEN][_token]) { uint256 value = tokenValue(_token, _amount); require(value <= excessReserves(), insufficientReserves); totalReserves = totalReserves.sub(value); } IERC20(_token).safeTransfer(msg.sender, _amount); emit Managed(_token, _amount); } /** * @notice mint new OHM using excess reserves * @param _recipient address * @param _amount uint256 */ function mint(address _recipient, uint256 _amount) external override { require(permissions[STATUS.REWARDMANAGER][msg.sender], notApproved); require(_amount <= excessReserves(), insufficientReserves); OHM.mint(_recipient, _amount); emit Minted(msg.sender, _recipient, _amount); } /** * DEBT: The debt functions allow approved addresses to borrow treasury assets * or OHM from the treasury, using sOHM as collateral. This might allow an * sOHM holder to provide OHM liquidity without taking on the opportunity cost * of unstaking, or alter their backing without imposing risk onto the treasury. * Many of these use cases are yet to be defined, but they appear promising. * However, we urge the community to think critically and move slowly upon * proposals to acquire these permissions. */ /** * @notice allow approved address to borrow reserves * @param _amount uint256 * @param _token address */ function incurDebt(uint256 _amount, address _token) external override { uint256 value; if (_token == address(OHM)) { require(permissions[STATUS.OHMDEBTOR][msg.sender], notApproved); value = _amount; } else { require(permissions[STATUS.RESERVEDEBTOR][msg.sender], notApproved); require(permissions[STATUS.RESERVETOKEN][_token], notAccepted); value = tokenValue(_token, _amount); } require(value != 0, invalidToken); sOHM.changeDebt(value, msg.sender, true); require(sOHM.debtBalances(msg.sender) <= debtLimit[msg.sender], "Treasury: exceeds limit"); totalDebt = totalDebt.add(value); if (_token == address(OHM)) { OHM.mint(msg.sender, value); ohmDebt = ohmDebt.add(value); } else { totalReserves = totalReserves.sub(value); IERC20(_token).safeTransfer(msg.sender, _amount); } emit CreateDebt(msg.sender, _token, _amount, value); } /** * @notice allow approved address to repay borrowed reserves with reserves * @param _amount uint256 * @param _token address */ function repayDebtWithReserve(uint256 _amount, address _token) external override { require(permissions[STATUS.RESERVEDEBTOR][msg.sender], notApproved); require(permissions[STATUS.RESERVETOKEN][_token], notAccepted); IERC20(_token).safeTransferFrom(msg.sender, address(this), _amount); uint256 value = tokenValue(_token, _amount); sOHM.changeDebt(value, msg.sender, false); totalDebt = totalDebt.sub(value); totalReserves = totalReserves.add(value); emit RepayDebt(msg.sender, _token, _amount, value); } /** * @notice allow approved address to repay borrowed reserves with OHM * @param _amount uint256 */ function repayDebtWithOHM(uint256 _amount) external { require(permissions[STATUS.RESERVEDEBTOR][msg.sender] || permissions[STATUS.OHMDEBTOR][msg.sender], notApproved); OHM.burnFrom(msg.sender, _amount); sOHM.changeDebt(_amount, msg.sender, false); totalDebt = totalDebt.sub(_amount); ohmDebt = ohmDebt.sub(_amount); emit RepayDebt(msg.sender, address(OHM), _amount, _amount); } /* ========== MANAGERIAL FUNCTIONS ========== */ /** * @notice takes inventory of all tracked assets * @notice always consolidate to recognized reserves before audit */ function auditReserves() external onlyGovernor { uint256 reserves; address[] memory reserveToken = registry[STATUS.RESERVETOKEN]; for (uint256 i = 0; i < reserveToken.length; i++) { if (permissions[STATUS.RESERVETOKEN][reserveToken[i]]) { reserves = reserves.add(tokenValue(reserveToken[i], IERC20(reserveToken[i]).balanceOf(address(this)))); } } address[] memory liquidityToken = registry[STATUS.LIQUIDITYTOKEN]; for (uint256 i = 0; i < liquidityToken.length; i++) { if (permissions[STATUS.LIQUIDITYTOKEN][liquidityToken[i]]) { reserves = reserves.add(tokenValue(liquidityToken[i], IERC20(liquidityToken[i]).balanceOf(address(this)))); } } totalReserves = reserves; emit ReservesAudited(reserves); } /** * @notice set max debt for address * @param _address address * @param _limit uint256 */ function setDebtLimit(address _address, uint256 _limit) external onlyGovernor { debtLimit[_address] = _limit; } /** * @notice enable permission from queue * @param _status STATUS * @param _address address * @param _calculator address */ function enable( STATUS _status, address _address, address _calculator ) external onlyGovernor { require(timelockEnabled == false, "Use queueTimelock"); if (_status == STATUS.SOHM) { sOHM = IsOHM(_address); } else { permissions[_status][_address] = true; if (_status == STATUS.LIQUIDITYTOKEN) { bondCalculator[_address] = _calculator; } (bool registered, ) = indexInRegistry(_address, _status); if (!registered) { registry[_status].push(_address); if (_status == STATUS.LIQUIDITYTOKEN || _status == STATUS.RESERVETOKEN) { (bool reg, uint256 index) = indexInRegistry(_address, _status); if (reg) { delete registry[_status][index]; } } } } emit Permissioned(_address, _status, true); } /** * @notice disable permission from address * @param _status STATUS * @param _toDisable address */ function disable(STATUS _status, address _toDisable) external { require(msg.sender == authority.governor() || msg.sender == authority.guardian(), "Only governor or guardian"); permissions[_status][_toDisable] = false; emit Permissioned(_toDisable, _status, false); } /** * @notice check if registry contains address * @return (bool, uint256) */ function indexInRegistry(address _address, STATUS _status) public view returns (bool, uint256) { address[] memory entries = registry[_status]; for (uint256 i = 0; i < entries.length; i++) { if (_address == entries[i]) { return (true, i); } } return (false, 0); } /* ========== TIMELOCKED FUNCTIONS ========== */ // functions are used prior to enabling on-chain governance /** * @notice queue address to receive permission * @param _status STATUS * @param _address address * @param _calculator address */ function queueTimelock( STATUS _status, address _address, address _calculator ) external onlyGovernor { require(_address != address(0)); require(timelockEnabled == true, "Timelock is disabled, use enable"); uint256 timelock = block.number.add(blocksNeededForQueue); if (_status == STATUS.RESERVEMANAGER || _status == STATUS.LIQUIDITYMANAGER) { timelock = block.number.add(blocksNeededForQueue.mul(2)); } permissionQueue.push( Queue({managing: _status, toPermit: _address, calculator: _calculator, timelockEnd: timelock, nullify: false, executed: false}) ); emit PermissionQueued(_status, _address); } /** * @notice enable queued permission * @param _index uint256 */ function execute(uint256 _index) external { require(timelockEnabled == true, "Timelock is disabled, use enable"); Queue memory info = permissionQueue[_index]; require(!info.nullify, "Action has been nullified"); require(!info.executed, "Action has already been executed"); require(block.number >= info.timelockEnd, "Timelock not complete"); if (info.managing == STATUS.SOHM) { // 9 sOHM = IsOHM(info.toPermit); } else { permissions[info.managing][info.toPermit] = true; if (info.managing == STATUS.LIQUIDITYTOKEN) { bondCalculator[info.toPermit] = info.calculator; } (bool registered, ) = indexInRegistry(info.toPermit, info.managing); if (!registered) { registry[info.managing].push(info.toPermit); if (info.managing == STATUS.LIQUIDITYTOKEN) { (bool reg, uint256 index) = indexInRegistry(info.toPermit, STATUS.RESERVETOKEN); if (reg) { delete registry[STATUS.RESERVETOKEN][index]; } } else if (info.managing == STATUS.RESERVETOKEN) { (bool reg, uint256 index) = indexInRegistry(info.toPermit, STATUS.LIQUIDITYTOKEN); if (reg) { delete registry[STATUS.LIQUIDITYTOKEN][index]; } } } } permissionQueue[_index].executed = true; emit Permissioned(info.toPermit, info.managing, true); } /** * @notice cancel timelocked action * @param _index uint256 */ function nullify(uint256 _index) external onlyGovernor { permissionQueue[_index].nullify = true; } /** * @notice disables timelocked functions */ function disableTimelock() external onlyGovernor { require(timelockEnabled == true, "timelock already disabled"); if (onChainGovernanceTimelock != 0 && onChainGovernanceTimelock <= block.number) { timelockEnabled = false; } else { onChainGovernanceTimelock = block.number.add(blocksNeededForQueue.mul(7)); // 7-day timelock } } /** * @notice enables timelocks after initilization */ function initialize() external onlyGovernor { require(initialized == false, "Already initialized"); timelockEnabled = true; initialized = true; } /* ========== VIEW FUNCTIONS ========== */ /** * @notice returns excess reserves not backing tokens * @return uint */ function excessReserves() public view override returns (uint256) { return totalReserves.sub(OHM.totalSupply().sub(totalDebt)); } /** * @notice returns OHM valuation of asset * @param _token address * @param _amount uint256 * @return value_ uint256 */ function tokenValue(address _token, uint256 _amount) public view override returns (uint256 value_) { value_ = _amount.mul(10**IERC20Metadata(address(OHM)).decimals()).div(10**IERC20Metadata(_token).decimals()); if (permissions[STATUS.LIQUIDITYTOKEN][_token]) { value_ = IBondingCalculator(bondCalculator[_token]).valuation(_token, _amount); } } /** * @notice returns supply metric that cannot be manipulated by debt * @dev use this any time you need to query supply * @return uint256 */ function baseSupply() external view override returns (uint256) { return OHM.totalSupply() - ohmDebt; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_ohm","type":"address"},{"internalType":"uint256","name":"_timelock","type":"uint256"},{"internalType":"address","name":"_authority","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IOlympusAuthority","name":"authority","type":"address"}],"name":"AuthorityUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"debtor","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"CreateDebt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Managed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Minted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum OlympusTreasury.STATUS","name":"status","type":"uint8"},{"indexed":false,"internalType":"address","name":"queued","type":"address"}],"name":"PermissionQueued","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"addr","type":"address"},{"indexed":true,"internalType":"enum OlympusTreasury.STATUS","name":"status","type":"uint8"},{"indexed":false,"internalType":"bool","name":"result","type":"bool"}],"name":"Permissioned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"debtor","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"RepayDebt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"totalReserves","type":"uint256"}],"name":"ReservesAudited","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Withdrawal","type":"event"},{"inputs":[],"name":"OHM","outputs":[{"internalType":"contract IOHM","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"auditReserves","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"authority","outputs":[{"internalType":"contract IOlympusAuthority","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blocksNeededForQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bondCalculator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"debtLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_profit","type":"uint256"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"send_","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum OlympusTreasury.STATUS","name":"_status","type":"uint8"},{"internalType":"address","name":"_toDisable","type":"address"}],"name":"disable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTimelock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum OlympusTreasury.STATUS","name":"_status","type":"uint8"},{"internalType":"address","name":"_address","type":"address"},{"internalType":"address","name":"_calculator","type":"address"}],"name":"enable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"excessReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"execute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_token","type":"address"}],"name":"incurDebt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"enum OlympusTreasury.STATUS","name":"_status","type":"uint8"}],"name":"indexInRegistry","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"manage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"nullify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ohmDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onChainGovernanceTimelock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"permissionQueue","outputs":[{"internalType":"enum OlympusTreasury.STATUS","name":"managing","type":"uint8"},{"internalType":"address","name":"toPermit","type":"address"},{"internalType":"address","name":"calculator","type":"address"},{"internalType":"uint256","name":"timelockEnd","type":"uint256"},{"internalType":"bool","name":"nullify","type":"bool"},{"internalType":"bool","name":"executed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum OlympusTreasury.STATUS","name":"","type":"uint8"},{"internalType":"address","name":"","type":"address"}],"name":"permissions","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum OlympusTreasury.STATUS","name":"_status","type":"uint8"},{"internalType":"address","name":"_address","type":"address"},{"internalType":"address","name":"_calculator","type":"address"}],"name":"queueTimelock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum OlympusTreasury.STATUS","name":"","type":"uint8"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"registry","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"repayDebtWithOHM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_token","type":"address"}],"name":"repayDebtWithReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sOHM","outputs":[{"internalType":"contract IsOHM","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IOlympusAuthority","name":"_newAuthority","type":"address"}],"name":"setAuthority","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setDebtLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"timelockEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"tokenValue","outputs":[{"internalType":"uint256","name":"value_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_token","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
610100604052600c60c08190526b15539055551213d49256915160a21b60e090815262000030916000919062000255565b506040805180820190915260168082527f54726561737572793a206e6f742061636365707465640000000000000000000060209092019182526200007791600d9162000255565b506040805180820190915260168082527f54726561737572793a206e6f7420617070726f766564000000000000000000006020909201918252620000be91600e9162000255565b506040805180820190915260178082527f54726561737572793a20696e76616c696420746f6b656e00000000000000000060209092019182526200010591600f9162000255565b5060408051808201909152601f8082527f54726561737572793a20696e73756666696369656e742072657365727665730060209092019182526200014c9160109162000255565b503480156200015a57600080fd5b506040516200406638038062004066833981810160405260608110156200018057600080fd5b5080516020820151604092830151600180546001600160a01b0319166001600160a01b038316908117909155935192939192909182917f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad90600090a2506001600160a01b0383166200022d576040805162461bcd60e51b81526020600482015260116024820152705a65726f20616464726573733a204f484d60781b604482015290519081900360640190fd5b5060609190911b6001600160601b031916608052600b805461ffff1916905560a05262000301565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826200028d5760008555620002d8565b82601f10620002a857805160ff1916838001178555620002d8565b82800160010185558215620002d8579182015b82811115620002d8578251825591602001919060010190620002bb565b50620002e6929150620002ea565b5090565b5b80821115620002e65760008155600101620002eb565b60805160601c60a051613cf86200036e6000398061158b52806115e3528061237f5280612a855250806108315280610be55280610d755280610e7e5280610ed352806112ab528061130a5280611c70528061250b52806127c4528061298b52806130b75250613cf86000f3fe608060405234801561001057600080fd5b506004361061021b5760003560e01c80637d921af011610125578063b39df88e116100ad578063d796ffb81161007c578063d796ffb81461060a578063e4e33ef814610636578063f18217831461066d578063fc7b9c1814610699578063fe0d94c1146106a15761021b565b8063b39df88e146105c0578063bc157ac1146105c8578063bf7e214f146105fa578063d07f390f146106025761021b565b806393988b53116100f457806393988b53146105145780639edd8d431461055e578063a44b82871461058a578063a6c41fec146105b0578063b320f6a9146105b85761021b565b80637d921af0146104f45780638129fc1c146104fc578063860f5048146105045780638f840ddd1461050c5761021b565b80632b7ce500116101a8578063503edcf011610177578063503edcf0146103e5578063529918311461045c5780635619004b1461048b57806371a45c95146104b15780637a9e5e4b146104ce5761021b565b80632b7ce5001461037a578063330dd34514610382578063341f9688146103b157806340c10f19146103b95761021b565b806312422d23116101ef57806312422d23146102b157806315079925146102dd578063158ef93e146103015780631af4da701461031d5780631d6d5f05146103435761021b565b8062f714ce146102205780630b0eee301461024e5780630c3513a81461027a5780630f70431f14610294575b600080fd5b61024c6004803603604081101561023657600080fd5b50803590602001356001600160a01b03166106be565b005b61024c6004803603604081101561026457600080fd5b506001600160a01b03813516906020013561092b565b610282610bd8565b60408051918252519081900360200190f35b61024c600480360360208110156102aa57600080fd5b5035610c7c565b61024c600480360360408110156102c757600080fd5b50803590602001356001600160a01b0316610ecf565b6102e56113f0565b604080516001600160a01b039092168252519081900360200190f35b6103096113ff565b604080519115158252519081900360200190f35b6102e56004803603602081101561033357600080fd5b50356001600160a01b031661140d565b61024c6004803603606081101561035957600080fd5b5060ff813516906001600160a01b0360208201358116916040013516611428565b61024c611763565b6103096004803603604081101561039857600080fd5b50803560ff1690602001356001600160a01b0316611b3d565b610282611b5d565b61024c600480360360408110156103cf57600080fd5b506001600160a01b038135169060200135611b63565b610402600480360360208110156103fb57600080fd5b5035611d41565b6040518087600a81111561041257fe5b8152602001866001600160a01b03168152602001856001600160a01b0316815260200184815260200183151581526020018215158152602001965050505050505060405180910390f35b61024c6004803603604081101561047257600080fd5b50803560ff1690602001356001600160a01b0316611d98565b610282600480360360208110156104a157600080fd5b50356001600160a01b0316611fa0565b61024c600480360360208110156104c757600080fd5b5035611fb2565b61024c600480360360208110156104e457600080fd5b50356001600160a01b03166120d2565b61024c612208565b61024c6123ab565b610282612504565b610282612594565b6105436004803603604081101561052a57600080fd5b5080356001600160a01b0316906020013560ff1661259a565b60408051921515835260208301919091528051918290030190f35b61024c6004803603604081101561057457600080fd5b506001600160a01b038135169060200135612682565b6102e5600480360360408110156105a057600080fd5b5060ff813516906020013561278a565b6102e56127c2565b6103096127e6565b6102826127ef565b610282600480360360608110156105de57600080fd5b508035906001600160a01b0360208201351690604001356127f5565b6102e5612a74565b610282612a83565b61024c6004803603604081101561062057600080fd5b50803590602001356001600160a01b0316612aa7565b61024c6004803603606081101561064c57600080fd5b5060ff813516906001600160a01b0360208201358116916040013516612cd2565b6102826004803603604081101561068357600080fd5b506001600160a01b038135169060200135613026565b610282613204565b61024c600480360360208110156106b757600080fd5b503561320a565b6001600160a01b0381166000908152600080516020613ca38339815191526020526040902054600d9060ff166107875760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107785780601f1061074d57610100808354040283529160200191610778565b820191906000526020600020905b81548152906001019060200180831161075b57829003601f168201915b50509250505060405180910390fd5b503360009081527fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe056020526040902054600e9060ff166108205760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107785780601f1061074d57610100808354040283529160200191610778565b50600061082d8284613026565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166379cc679033836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156108a657600080fd5b505af11580156108ba573d6000803e3d6000fd5b50506007546108cc9250905082613713565b6007556108e36001600160a01b038316338561375c565b604080518481526020810183905281516001600160a01b038516927fdf273cb619d95419a9cd0ec88123a0538c85064229baa6363788f743fff90deb928290030190a2505050565b6001600160a01b0382166000908152600080516020613c62833981519152602052604090205460ff16156109f7573360009081527fc59312466997bb42aaaf719ece141047820e6b34531e1670dc1852a453648f0f6020526040902054600e9060ff166109f15760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107785780601f1061074d57610100808354040283529160200191610778565b50610a91565b3360009081527f2e174c10e159ea99b867ce3205125c24a42d128804e4070ed6fcc8cc98166aa06020526040902054600e9060ff16610a8f5760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107785780601f1061074d57610100808354040283529160200191610778565b505b6001600160a01b0382166000908152600080516020613ca3833981519152602052604090205460ff1680610aea57506001600160a01b0382166000908152600080516020613c62833981519152602052604090205460ff165b15610b81576000610afb8383613026565b9050610b05610bd8565b811115601090610b6e5760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107785780601f1061074d57610100808354040283529160200191610778565b50600754610b7c9082613713565b600755505b610b956001600160a01b038316338361375c565b6040805182815290516001600160a01b038416917fb4460e34f1e91c4fa28eb7fac4cbd88cf530ef54a67e1978cd5edd9f77033ead919081900360200190a25050565b6000610c77610c6e6008547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610c3c57600080fd5b505afa158015610c50573d6000803e3d6000fd5b505050506040513d6020811015610c6657600080fd5b505190613713565b60075490613713565b905090565b3360009081527fbeb3bad75134cb432e5707980e3245c52c5998a1125ee30f2f0dbf3925b1e551602052604090205460ff1680610ce757503360009081527f5c6b02db8b672415ffad906d7ccee10bd53dbad7d0b29e2bc0e50c93d5f31093602052604090205460ff165b600e90610d4d5760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107785780601f1061074d57610100808354040283529160200191610778565b506040805163079cc67960e41b81523360048201526024810183905290516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916379cc679091604480830192600092919082900301818387803b158015610dbc57600080fd5b505af1158015610dd0573d6000803e3d6000fd5b50506002546040805163ae5c6cd360e01b81526004810186905233602482015260006044820181905291516001600160a01b03909316945063ae5c6cd393506064808201939182900301818387803b158015610e2b57600080fd5b505af1158015610e3f573d6000803e3d6000fd5b5050600854610e519250905082613713565b600855600954610e619082613713565b600955604080518281526020810183905281516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169233927fc6d98eecfc9c78ab62c89a82950079b54874749f1f6f24090f7acc758bc2f309929081900390910190a350565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415610fac573360009081527f5c6b02db8b672415ffad906d7ccee10bd53dbad7d0b29e2bc0e50c93d5f310936020526040902054600e9060ff16610fa35760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107785780601f1061074d57610100808354040283529160200191610778565b508290506110e2565b3360009081527fbeb3bad75134cb432e5707980e3245c52c5998a1125ee30f2f0dbf3925b1e5516020526040902054600e9060ff166110445760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107785780601f1061074d57610100808354040283529160200191610778565b506001600160a01b0382166000908152600080516020613ca38339815191526020526040902054600d9060ff166110d45760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107785780601f1061074d57610100808354040283529160200191610778565b506110df8284613026565b90505b600f816111485760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107785780601f1061074d57610100808354040283529160200191610778565b506002546040805163ae5c6cd360e01b8152600481018490523360248201526001604482015290516001600160a01b039092169163ae5c6cd39160648082019260009290919082900301818387803b1580156111a357600080fd5b505af11580156111b7573d6000803e3d6000fd5b50503360008181526006602090815260409182902054600254835163313bc71360e21b8152600481019590955292519095506001600160a01b03909216935063c4ef1c4c9260248082019391829003018186803b15801561121757600080fd5b505afa15801561122b573d6000803e3d6000fd5b505050506040513d602081101561124157600080fd5b50511115611296576040805162461bcd60e51b815260206004820152601760248201527f54726561737572793a2065786365656473206c696d6974000000000000000000604482015290519081900360640190fd5b6008546112a390826138b8565b6008819055507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561137f57604080516340c10f1960e01b81523360048201526024810183905290516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916340c10f1991604480830192600092919082900301818387803b15801561135157600080fd5b505af1158015611365573d6000803e3d6000fd5b505060095461137792509050826138b8565b6009556113a3565b60075461138c9082613713565b6007556113a36001600160a01b038316338561375c565b604080518481526020810183905281516001600160a01b0385169233927f7e1a939bed137a819b5d2979822c67f877689f7a863d5e4cb57cdca97b2977d6929081900390910190a3505050565b6002546001600160a01b031681565b600b54610100900460ff1681565b6005602052600090815260409020546001600160a01b031681565b600160009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b15801561147657600080fd5b505afa15801561148a573d6000803e3d6000fd5b505050506040513d60208110156114a057600080fd5b50516000906001600160a01b031633146115135760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107785780601f1061074d57610100808354040283529160200191610778565b506001600160a01b03821661152757600080fd5b600b5460ff161515600114611583576040805162461bcd60e51b815260206004820181905260248201527f54696d656c6f636b2069732064697361626c65642c2075736520656e61626c65604482015290519081900360640190fd5b60006115af437f00000000000000000000000000000000000000000000000000000000000000006138b8565b9050600384600a8111156115bf57fe5b14806115d65750600684600a8111156115d457fe5b145b15611613576116106116097f00000000000000000000000000000000000000000000000000000000000000006002613912565b43906138b8565b90505b600a6040518060c0016040528086600a81111561162c57fe5b81526001600160a01b0380871660208084019190915290861660408301526060820185905260006080830181905260a090920182905283546001818101865594835291208251600490920201805492939092839160ff199091169083600a81111561169357fe5b021790555060208201518154610100600160a81b0319166101006001600160a01b03928316810291909117835560408401516001840180546001600160a01b03191691909316179091556060830151600283015560808301516003909201805460a09094015160ff199094169215159290921761ff0019169215150291909117905583600a81111561172157fe5b604080516001600160a01b038616815290517fc822ff41836a6dc998393c71843db8adcbbf01721f41b32389f6838ecb1ea9c89181900360200190a250505050565b600160009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b1580156117b157600080fd5b505afa1580156117c5573d6000803e3d6000fd5b505050506040513d60208110156117db57600080fd5b50516000906001600160a01b0316331461184e5760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107785780601f1061074d57610100808354040283529160200191610778565b5060026000908152600360209081527fc3a24b0501bd2c13a7e57f2db4369ec4c223447539fc0724a9d55ac4a06ebd4d80546040805182850281018501909152818152606093909291908301828280156118d157602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116118b3575b5050505050905060005b81518110156119f8576002600090815260046020528251600080516020613ca3833981519152919084908490811061190f57fe5b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff16156119f0576119ed6119e683838151811061194d57fe5b602002602001015184848151811061196157fe5b60200260200101516001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156119b557600080fd5b505afa1580156119c9573d6000803e3d6000fd5b505050506040513d60208110156119df57600080fd5b5051613026565b84906138b8565b92505b6001016118db565b506005600052600360209081527f405aad32e1adbac89bb7f176e338b8fc6e994ca210c9bb7bdca249b4659422508054604080518285028101850190915281815260609390929190830182828015611a7957602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611a5b575b5050505050905060005b8151811015611b07576005600090815260046020528251600080516020613c628339815191529190849084908110611ab757fe5b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff1615611aff57611afc611af583838151811061194d57fe5b85906138b8565b93505b600101611a83565b50600783905560405183907fec691f09f6924b27932253f85caf99bacc30360cc0e50a1cc4d2acc24601446690600090a2505050565b600460209081526000928352604080842090915290825290205460ff1681565b60095481565b3360009081527f2645749a946633740611cfc8178319f0958659d6922e4bf7e3a08b44789f53a46020526040902054600e9060ff16611bfb5760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107785780601f1061074d57610100808354040283529160200191610778565b50611c04610bd8565b811115601090611c6d5760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107785780601f1061074d57610100808354040283529160200191610778565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166340c10f1983836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611ce557600080fd5b505af1158015611cf9573d6000803e3d6000fd5b50506040805184815290516001600160a01b03861693503392507f9d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f09181900360200190a35050565b600a8181548110611d5157600080fd5b6000918252602090912060049091020180546001820154600283015460039093015460ff80841695506001600160a01b036101009485900481169593169382821692041686565b600160009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b158015611de657600080fd5b505afa158015611dfa573d6000803e3d6000fd5b505050506040513d6020811015611e1057600080fd5b50516001600160a01b0316331480611ea95750600160009054906101000a90046001600160a01b03166001600160a01b031663452a93206040518163ffffffff1660e01b815260040160206040518083038186803b158015611e7157600080fd5b505afa158015611e85573d6000803e3d6000fd5b505050506040513d6020811015611e9b57600080fd5b50516001600160a01b031633145b611efa576040805162461bcd60e51b815260206004820152601960248201527f4f6e6c7920676f7665726e6f72206f7220677561726469616e00000000000000604482015290519081900360640190fd5b60006004600084600a811115611f0c57fe5b600a811115611f1757fe5b8152602080820192909252604090810160009081206001600160a01b03861682529092529020805460ff191691151591909117905581600a811115611f5857fe5b604080516001600160a01b03841681526000602082015281517f7531a7aefe3985500c4dec2dcb6049a708f14c6a8a9022b435b8841bdb8e1713929181900390910190a25050565b60066020526000908152604090205481565b600160009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b15801561200057600080fd5b505afa158015612014573d6000803e3d6000fd5b505050506040513d602081101561202a57600080fd5b50516000906001600160a01b0316331461209d5760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107785780601f1061074d57610100808354040283529160200191610778565b506001600a82815481106120ad57fe5b60009182526020909120600490910201600301805460ff191691151591909117905550565b600160009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b15801561212057600080fd5b505afa158015612134573d6000803e3d6000fd5b505050506040513d602081101561214a57600080fd5b50516000906001600160a01b031633146121bd5760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107785780601f1061074d57610100808354040283529160200191610778565b50600180546001600160a01b0319166001600160a01b0383169081179091556040517f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad90600090a250565b600160009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b15801561225657600080fd5b505afa15801561226a573d6000803e3d6000fd5b505050506040513d602081101561228057600080fd5b50516000906001600160a01b031633146122f35760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107785780601f1061074d57610100808354040283529160200191610778565b50600b5460ff161515600114612350576040805162461bcd60e51b815260206004820152601960248201527f74696d656c6f636b20616c72656164792064697361626c656400000000000000604482015290519081900360640190fd5b600c5415801590612363575043600c5411155b1561237757600b805460ff191690556123a9565b6123a56116097f00000000000000000000000000000000000000000000000000000000000000006007613912565b600c555b565b600160009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b1580156123f957600080fd5b505afa15801561240d573d6000803e3d6000fd5b505050506040513d602081101561242357600080fd5b50516000906001600160a01b031633146124965760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107785780601f1061074d57610100808354040283529160200191610778565b50600b54610100900460ff16156124ea576040805162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015290519081900360640190fd5b600b805461ff001960ff1990911660011716610100179055565b60006009547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561256257600080fd5b505afa158015612576573d6000803e3d6000fd5b505050506040513d602081101561258c57600080fd5b505103905090565b60075481565b60008060606003600085600a8111156125af57fe5b600a8111156125ba57fe5b815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561261c57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116125fe575b5050505050905060005b81518110156126715781818151811061263b57fe5b60200260200101516001600160a01b0316866001600160a01b031614156126695760019350915061267b9050565b600101612626565b5060008092509250505b9250929050565b600160009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b1580156126d057600080fd5b505afa1580156126e4573d6000803e3d6000fd5b505050506040513d60208110156126fa57600080fd5b50516000906001600160a01b0316331461276d5760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107785780601f1061074d57610100808354040283529160200191610778565b506001600160a01b03909116600090815260066020526040902055565b600360205281600052604060002081815481106127a657600080fd5b6000918252602090912001546001600160a01b03169150829050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b5460ff1681565b600c5481565b6001600160a01b0382166000908152600080516020613ca3833981519152602052604081205460ff16156128c15760046000805b600a81111561283457fe5b815260208082019290925260409081016000908120338252909252902054600e9060ff166128bb5760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107785780601f1061074d57610100808354040283529160200191610778565b5061295a565b6001600160a01b0383166000908152600080516020613c62833981519152602052604090205460ff16156128f9576004600081612829565b60405162461bcd60e51b8152602060048201908152600f8054600260001961010060018416150201909116046024840181905290928291604490910190849080156107785780601f1061074d57610100808354040283529160200191610778565b61296f6001600160a01b03841633308761396b565b600061297b8486613026565b90506129878184613713565b91507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166340c10f1933846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015612a0057600080fd5b505af1158015612a14573d6000803e3d6000fd5b5050600754612a2692509050826138b8565b600755604080518681526020810183905281516001600160a01b038716927f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15928290030190a2509392505050565b6001546001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000081565b3360009081527fbeb3bad75134cb432e5707980e3245c52c5998a1125ee30f2f0dbf3925b1e5516020526040902054600e9060ff16612b3f5760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107785780601f1061074d57610100808354040283529160200191610778565b506001600160a01b0381166000908152600080516020613ca38339815191526020526040902054600d9060ff16612bcf5760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107785780601f1061074d57610100808354040283529160200191610778565b50612be56001600160a01b03821633308561396b565b6000612bf18284613026565b6002546040805163ae5c6cd360e01b81526004810184905233602482015260006044820181905291519394506001600160a01b039092169263ae5c6cd392606480820193929182900301818387803b158015612c4c57600080fd5b505af1158015612c60573d6000803e3d6000fd5b5050600854612c729250905082613713565b600855600754612c8290826138b8565b600755604080518481526020810183905281516001600160a01b0385169233927fc6d98eecfc9c78ab62c89a82950079b54874749f1f6f24090f7acc758bc2f309929081900390910190a3505050565b600160009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b158015612d2057600080fd5b505afa158015612d34573d6000803e3d6000fd5b505050506040513d6020811015612d4a57600080fd5b50516000906001600160a01b03163314612dbd5760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107785780601f1061074d57610100808354040283529160200191610778565b50600b5460ff1615612e0a576040805162461bcd60e51b815260206004820152601160248201527055736520717565756554696d656c6f636b60781b604482015290519081900360640190fd5b600983600a811115612e1857fe5b1415612e3e57600280546001600160a01b0319166001600160a01b038416179055612fd1565b60016004600085600a811115612e5057fe5b600a811115612e5b57fe5b8152602080820192909252604090810160009081206001600160a01b03871682529092529020805460ff1916911515919091179055600583600a811115612e9e57fe5b1415612ed3576001600160a01b03828116600090815260056020526040902080546001600160a01b0319169183169190911790555b6000612edf838561259a565b50905080612fcf576003600085600a811115612ef757fe5b600a811115612f0257fe5b8152602080820192909252604001600090812080546001810182559082529190200180546001600160a01b0319166001600160a01b038516179055600584600a811115612f4b57fe5b1480612f625750600284600a811115612f6057fe5b145b15612fcf57600080612f74858761259a565b915091508115612fcc576003600087600a811115612f8e57fe5b600a811115612f9957fe5b81526020019081526020016000208181548110612fb257fe5b600091825260209091200180546001600160a01b03191690555b50505b505b82600a811115612fdd57fe5b604080516001600160a01b03851681526001602082015281517f7531a7aefe3985500c4dec2dcb6049a708f14c6a8a9022b435b8841bdb8e1713929181900390910190a2505050565b600061313d836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561306457600080fd5b505afa158015613078573d6000803e3d6000fd5b505050506040513d602081101561308e57600080fd5b50516040805163313ce56760e01b8152905160ff909216600a0a91613137916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163313ce56791600480820192602092909190829003018186803b1580156130fe57600080fd5b505afa158015613112573d6000803e3d6000fd5b505050506040513d602081101561312857600080fd5b5051859060ff16600a0a613912565b90613ad5565b6001600160a01b0384166000908152600080516020613c62833981519152602052604090205490915060ff16156131fe576001600160a01b03808416600081815260056020908152604091829020548251634249719f60e01b815260048101949094526024840187905291519190931692634249719f9260448082019391829003018186803b1580156131cf57600080fd5b505afa1580156131e3573d6000803e3d6000fd5b505050506040513d60208110156131f957600080fd5b505190505b92915050565b60085481565b600b5460ff161515600114613266576040805162461bcd60e51b815260206004820181905260248201527f54696d656c6f636b2069732064697361626c65642c2075736520656e61626c65604482015290519081900360640190fd5b61326e613c2a565b600a828154811061327b57fe5b600091825260209091206040805160c081019091526004909202018054829060ff16600a8111156132a857fe5b600a8111156132b357fe5b815281546001600160a01b03610100918290048116602084015260018401541660408301526002830154606083015260039092015460ff80821615156080808501919091529390910416151560a0909101528101519091501561335d576040805162461bcd60e51b815260206004820152601960248201527f416374696f6e20686173206265656e206e756c6c696669656400000000000000604482015290519081900360640190fd5b8060a00151156133b4576040805162461bcd60e51b815260206004820181905260248201527f416374696f6e2068617320616c7265616479206265656e206578656375746564604482015290519081900360640190fd5b8060600151431015613405576040805162461bcd60e51b815260206004820152601560248201527454696d656c6f636b206e6f7420636f6d706c65746560581b604482015290519081900360640190fd5b60098151600a81111561341457fe5b1415613443576020810151600280546001600160a01b0319166001600160a01b0390921691909117905561367b565b6001600460008360000151600a81111561345957fe5b600a81111561346457fe5b815260208082019290925260409081016000908120858401516001600160a01b031682529092529020805460ff191691151591909117905560058151600a8111156134ab57fe5b14156134ec576040818101516020808401516001600160a01b039081166000908152600590925292902080546001600160a01b031916929091169190911790555b60006135008260200151836000015161259a565b5090508061367957600360008360000151600a81111561351c57fe5b600a81111561352757fe5b81526020808201929092526040016000908120848301518154600181018355918352929091200180546001600160a01b0319166001600160a01b0390921691909117905560058251600a81111561357a57fe5b14156135f4576000806135928460200151600261259a565b9150915081156135ed57600260005260036020527fc3a24b0501bd2c13a7e57f2db4369ec4c223447539fc0724a9d55ac4a06ebd4d8054829081106135d357fe5b600091825260209091200180546001600160a01b03191690555b5050613679565b60028251600a81111561360357fe5b14156136795760008061361b8460200151600561259a565b91509150811561367657600560005260036020527f405aad32e1adbac89bb7f176e338b8fc6e994ca210c9bb7bdca249b46594225080548290811061365c57fe5b600091825260209091200180546001600160a01b03191690555b50505b505b6001600a838154811061368a57fe5b6000918252602090912060036004909202010180549115156101000261ff00199092169190911790558051600a8111156136c057fe5b7f7531a7aefe3985500c4dec2dcb6049a708f14c6a8a9022b435b8841bdb8e17138260200151600160405180836001600160a01b0316815260200182151581526020019250505060405180910390a25050565b600061375583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613b17565b9392505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106137d95780518252601f1990920191602091820191016137ba565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461383b576040519150601f19603f3d011682016040523d82523d6000602084013e613840565b606091505b509150915081801561386e57508051158061386e575080806020019051602081101561386b57600080fd5b50515b6138b1576040805162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b604482015290519081900360640190fd5b5050505050565b600082820183811015613755576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600082613921575060006131fe565b8282028284828161392e57fe5b04146137555760405162461bcd60e51b8152600401808060200182810382526021815260200180613c826021913960400191505060405180910390fd5b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106139f05780518252601f1990920191602091820191016139d1565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613a52576040519150601f19603f3d011682016040523d82523d6000602084013e613a57565b606091505b5091509150818015613a85575080511580613a855750808060200190516020811015613a8257600080fd5b50515b613acd576040805162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b604482015290519081900360640190fd5b505050505050565b600061375583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613bae565b60008184841115613ba65760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613b6b578181015183820152602001613b53565b50505050905090810190601f168015613b985780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183613bfd5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315613b6b578181015183820152602001613b53565b506000838581613c0957fe5b049050838581613c1557fe5b06818502018514613c2257fe5b949350505050565b6040805160c08101909152806000815260006020820181905260408201819052606082018190526080820181905260a0909101529056fe04cde762ef08b6b6c5ded8e8c4c0b3f4e5c9ad7342c88fcc93681b4588b73f05536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7791da3fd0782e51c6b3986e9e672fd566868e71f3dbc2d6c2cd6fbb3e361af2a7a264697066735822122066aa62093962779da8f389172be79978b48d4f17837919e8f4a03dd1d4274cc664736f6c6343000705003300000000000000000000000064aa3364f17a4d01c6f1751fd97c2bd3d7e7f1d500000000000000000000000000000000000000000000000000000000000019c80000000000000000000000001c21f8ea7e39e2ba00bc12d2968d63f4acb38b7a
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061021b5760003560e01c80637d921af011610125578063b39df88e116100ad578063d796ffb81161007c578063d796ffb81461060a578063e4e33ef814610636578063f18217831461066d578063fc7b9c1814610699578063fe0d94c1146106a15761021b565b8063b39df88e146105c0578063bc157ac1146105c8578063bf7e214f146105fa578063d07f390f146106025761021b565b806393988b53116100f457806393988b53146105145780639edd8d431461055e578063a44b82871461058a578063a6c41fec146105b0578063b320f6a9146105b85761021b565b80637d921af0146104f45780638129fc1c146104fc578063860f5048146105045780638f840ddd1461050c5761021b565b80632b7ce500116101a8578063503edcf011610177578063503edcf0146103e5578063529918311461045c5780635619004b1461048b57806371a45c95146104b15780637a9e5e4b146104ce5761021b565b80632b7ce5001461037a578063330dd34514610382578063341f9688146103b157806340c10f19146103b95761021b565b806312422d23116101ef57806312422d23146102b157806315079925146102dd578063158ef93e146103015780631af4da701461031d5780631d6d5f05146103435761021b565b8062f714ce146102205780630b0eee301461024e5780630c3513a81461027a5780630f70431f14610294575b600080fd5b61024c6004803603604081101561023657600080fd5b50803590602001356001600160a01b03166106be565b005b61024c6004803603604081101561026457600080fd5b506001600160a01b03813516906020013561092b565b610282610bd8565b60408051918252519081900360200190f35b61024c600480360360208110156102aa57600080fd5b5035610c7c565b61024c600480360360408110156102c757600080fd5b50803590602001356001600160a01b0316610ecf565b6102e56113f0565b604080516001600160a01b039092168252519081900360200190f35b6103096113ff565b604080519115158252519081900360200190f35b6102e56004803603602081101561033357600080fd5b50356001600160a01b031661140d565b61024c6004803603606081101561035957600080fd5b5060ff813516906001600160a01b0360208201358116916040013516611428565b61024c611763565b6103096004803603604081101561039857600080fd5b50803560ff1690602001356001600160a01b0316611b3d565b610282611b5d565b61024c600480360360408110156103cf57600080fd5b506001600160a01b038135169060200135611b63565b610402600480360360208110156103fb57600080fd5b5035611d41565b6040518087600a81111561041257fe5b8152602001866001600160a01b03168152602001856001600160a01b0316815260200184815260200183151581526020018215158152602001965050505050505060405180910390f35b61024c6004803603604081101561047257600080fd5b50803560ff1690602001356001600160a01b0316611d98565b610282600480360360208110156104a157600080fd5b50356001600160a01b0316611fa0565b61024c600480360360208110156104c757600080fd5b5035611fb2565b61024c600480360360208110156104e457600080fd5b50356001600160a01b03166120d2565b61024c612208565b61024c6123ab565b610282612504565b610282612594565b6105436004803603604081101561052a57600080fd5b5080356001600160a01b0316906020013560ff1661259a565b60408051921515835260208301919091528051918290030190f35b61024c6004803603604081101561057457600080fd5b506001600160a01b038135169060200135612682565b6102e5600480360360408110156105a057600080fd5b5060ff813516906020013561278a565b6102e56127c2565b6103096127e6565b6102826127ef565b610282600480360360608110156105de57600080fd5b508035906001600160a01b0360208201351690604001356127f5565b6102e5612a74565b610282612a83565b61024c6004803603604081101561062057600080fd5b50803590602001356001600160a01b0316612aa7565b61024c6004803603606081101561064c57600080fd5b5060ff813516906001600160a01b0360208201358116916040013516612cd2565b6102826004803603604081101561068357600080fd5b506001600160a01b038135169060200135613026565b610282613204565b61024c600480360360208110156106b757600080fd5b503561320a565b6001600160a01b0381166000908152600080516020613ca38339815191526020526040902054600d9060ff166107875760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107785780601f1061074d57610100808354040283529160200191610778565b820191906000526020600020905b81548152906001019060200180831161075b57829003601f168201915b50509250505060405180910390fd5b503360009081527fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe056020526040902054600e9060ff166108205760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107785780601f1061074d57610100808354040283529160200191610778565b50600061082d8284613026565b90507f00000000000000000000000064aa3364f17a4d01c6f1751fd97c2bd3d7e7f1d56001600160a01b03166379cc679033836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156108a657600080fd5b505af11580156108ba573d6000803e3d6000fd5b50506007546108cc9250905082613713565b6007556108e36001600160a01b038316338561375c565b604080518481526020810183905281516001600160a01b038516927fdf273cb619d95419a9cd0ec88123a0538c85064229baa6363788f743fff90deb928290030190a2505050565b6001600160a01b0382166000908152600080516020613c62833981519152602052604090205460ff16156109f7573360009081527fc59312466997bb42aaaf719ece141047820e6b34531e1670dc1852a453648f0f6020526040902054600e9060ff166109f15760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107785780601f1061074d57610100808354040283529160200191610778565b50610a91565b3360009081527f2e174c10e159ea99b867ce3205125c24a42d128804e4070ed6fcc8cc98166aa06020526040902054600e9060ff16610a8f5760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107785780601f1061074d57610100808354040283529160200191610778565b505b6001600160a01b0382166000908152600080516020613ca3833981519152602052604090205460ff1680610aea57506001600160a01b0382166000908152600080516020613c62833981519152602052604090205460ff165b15610b81576000610afb8383613026565b9050610b05610bd8565b811115601090610b6e5760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107785780601f1061074d57610100808354040283529160200191610778565b50600754610b7c9082613713565b600755505b610b956001600160a01b038316338361375c565b6040805182815290516001600160a01b038416917fb4460e34f1e91c4fa28eb7fac4cbd88cf530ef54a67e1978cd5edd9f77033ead919081900360200190a25050565b6000610c77610c6e6008547f00000000000000000000000064aa3364f17a4d01c6f1751fd97c2bd3d7e7f1d56001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610c3c57600080fd5b505afa158015610c50573d6000803e3d6000fd5b505050506040513d6020811015610c6657600080fd5b505190613713565b60075490613713565b905090565b3360009081527fbeb3bad75134cb432e5707980e3245c52c5998a1125ee30f2f0dbf3925b1e551602052604090205460ff1680610ce757503360009081527f5c6b02db8b672415ffad906d7ccee10bd53dbad7d0b29e2bc0e50c93d5f31093602052604090205460ff165b600e90610d4d5760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107785780601f1061074d57610100808354040283529160200191610778565b506040805163079cc67960e41b81523360048201526024810183905290516001600160a01b037f00000000000000000000000064aa3364f17a4d01c6f1751fd97c2bd3d7e7f1d516916379cc679091604480830192600092919082900301818387803b158015610dbc57600080fd5b505af1158015610dd0573d6000803e3d6000fd5b50506002546040805163ae5c6cd360e01b81526004810186905233602482015260006044820181905291516001600160a01b03909316945063ae5c6cd393506064808201939182900301818387803b158015610e2b57600080fd5b505af1158015610e3f573d6000803e3d6000fd5b5050600854610e519250905082613713565b600855600954610e619082613713565b600955604080518281526020810183905281516001600160a01b037f00000000000000000000000064aa3364f17a4d01c6f1751fd97c2bd3d7e7f1d5169233927fc6d98eecfc9c78ab62c89a82950079b54874749f1f6f24090f7acc758bc2f309929081900390910190a350565b60007f00000000000000000000000064aa3364f17a4d01c6f1751fd97c2bd3d7e7f1d56001600160a01b0316826001600160a01b03161415610fac573360009081527f5c6b02db8b672415ffad906d7ccee10bd53dbad7d0b29e2bc0e50c93d5f310936020526040902054600e9060ff16610fa35760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107785780601f1061074d57610100808354040283529160200191610778565b508290506110e2565b3360009081527fbeb3bad75134cb432e5707980e3245c52c5998a1125ee30f2f0dbf3925b1e5516020526040902054600e9060ff166110445760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107785780601f1061074d57610100808354040283529160200191610778565b506001600160a01b0382166000908152600080516020613ca38339815191526020526040902054600d9060ff166110d45760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107785780601f1061074d57610100808354040283529160200191610778565b506110df8284613026565b90505b600f816111485760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107785780601f1061074d57610100808354040283529160200191610778565b506002546040805163ae5c6cd360e01b8152600481018490523360248201526001604482015290516001600160a01b039092169163ae5c6cd39160648082019260009290919082900301818387803b1580156111a357600080fd5b505af11580156111b7573d6000803e3d6000fd5b50503360008181526006602090815260409182902054600254835163313bc71360e21b8152600481019590955292519095506001600160a01b03909216935063c4ef1c4c9260248082019391829003018186803b15801561121757600080fd5b505afa15801561122b573d6000803e3d6000fd5b505050506040513d602081101561124157600080fd5b50511115611296576040805162461bcd60e51b815260206004820152601760248201527f54726561737572793a2065786365656473206c696d6974000000000000000000604482015290519081900360640190fd5b6008546112a390826138b8565b6008819055507f00000000000000000000000064aa3364f17a4d01c6f1751fd97c2bd3d7e7f1d56001600160a01b0316826001600160a01b0316141561137f57604080516340c10f1960e01b81523360048201526024810183905290516001600160a01b037f00000000000000000000000064aa3364f17a4d01c6f1751fd97c2bd3d7e7f1d516916340c10f1991604480830192600092919082900301818387803b15801561135157600080fd5b505af1158015611365573d6000803e3d6000fd5b505060095461137792509050826138b8565b6009556113a3565b60075461138c9082613713565b6007556113a36001600160a01b038316338561375c565b604080518481526020810183905281516001600160a01b0385169233927f7e1a939bed137a819b5d2979822c67f877689f7a863d5e4cb57cdca97b2977d6929081900390910190a3505050565b6002546001600160a01b031681565b600b54610100900460ff1681565b6005602052600090815260409020546001600160a01b031681565b600160009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b15801561147657600080fd5b505afa15801561148a573d6000803e3d6000fd5b505050506040513d60208110156114a057600080fd5b50516000906001600160a01b031633146115135760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107785780601f1061074d57610100808354040283529160200191610778565b506001600160a01b03821661152757600080fd5b600b5460ff161515600114611583576040805162461bcd60e51b815260206004820181905260248201527f54696d656c6f636b2069732064697361626c65642c2075736520656e61626c65604482015290519081900360640190fd5b60006115af437f00000000000000000000000000000000000000000000000000000000000019c86138b8565b9050600384600a8111156115bf57fe5b14806115d65750600684600a8111156115d457fe5b145b15611613576116106116097f00000000000000000000000000000000000000000000000000000000000019c86002613912565b43906138b8565b90505b600a6040518060c0016040528086600a81111561162c57fe5b81526001600160a01b0380871660208084019190915290861660408301526060820185905260006080830181905260a090920182905283546001818101865594835291208251600490920201805492939092839160ff199091169083600a81111561169357fe5b021790555060208201518154610100600160a81b0319166101006001600160a01b03928316810291909117835560408401516001840180546001600160a01b03191691909316179091556060830151600283015560808301516003909201805460a09094015160ff199094169215159290921761ff0019169215150291909117905583600a81111561172157fe5b604080516001600160a01b038616815290517fc822ff41836a6dc998393c71843db8adcbbf01721f41b32389f6838ecb1ea9c89181900360200190a250505050565b600160009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b1580156117b157600080fd5b505afa1580156117c5573d6000803e3d6000fd5b505050506040513d60208110156117db57600080fd5b50516000906001600160a01b0316331461184e5760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107785780601f1061074d57610100808354040283529160200191610778565b5060026000908152600360209081527fc3a24b0501bd2c13a7e57f2db4369ec4c223447539fc0724a9d55ac4a06ebd4d80546040805182850281018501909152818152606093909291908301828280156118d157602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116118b3575b5050505050905060005b81518110156119f8576002600090815260046020528251600080516020613ca3833981519152919084908490811061190f57fe5b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff16156119f0576119ed6119e683838151811061194d57fe5b602002602001015184848151811061196157fe5b60200260200101516001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156119b557600080fd5b505afa1580156119c9573d6000803e3d6000fd5b505050506040513d60208110156119df57600080fd5b5051613026565b84906138b8565b92505b6001016118db565b506005600052600360209081527f405aad32e1adbac89bb7f176e338b8fc6e994ca210c9bb7bdca249b4659422508054604080518285028101850190915281815260609390929190830182828015611a7957602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611a5b575b5050505050905060005b8151811015611b07576005600090815260046020528251600080516020613c628339815191529190849084908110611ab757fe5b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff1615611aff57611afc611af583838151811061194d57fe5b85906138b8565b93505b600101611a83565b50600783905560405183907fec691f09f6924b27932253f85caf99bacc30360cc0e50a1cc4d2acc24601446690600090a2505050565b600460209081526000928352604080842090915290825290205460ff1681565b60095481565b3360009081527f2645749a946633740611cfc8178319f0958659d6922e4bf7e3a08b44789f53a46020526040902054600e9060ff16611bfb5760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107785780601f1061074d57610100808354040283529160200191610778565b50611c04610bd8565b811115601090611c6d5760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107785780601f1061074d57610100808354040283529160200191610778565b507f00000000000000000000000064aa3364f17a4d01c6f1751fd97c2bd3d7e7f1d56001600160a01b03166340c10f1983836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611ce557600080fd5b505af1158015611cf9573d6000803e3d6000fd5b50506040805184815290516001600160a01b03861693503392507f9d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f09181900360200190a35050565b600a8181548110611d5157600080fd5b6000918252602090912060049091020180546001820154600283015460039093015460ff80841695506001600160a01b036101009485900481169593169382821692041686565b600160009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b158015611de657600080fd5b505afa158015611dfa573d6000803e3d6000fd5b505050506040513d6020811015611e1057600080fd5b50516001600160a01b0316331480611ea95750600160009054906101000a90046001600160a01b03166001600160a01b031663452a93206040518163ffffffff1660e01b815260040160206040518083038186803b158015611e7157600080fd5b505afa158015611e85573d6000803e3d6000fd5b505050506040513d6020811015611e9b57600080fd5b50516001600160a01b031633145b611efa576040805162461bcd60e51b815260206004820152601960248201527f4f6e6c7920676f7665726e6f72206f7220677561726469616e00000000000000604482015290519081900360640190fd5b60006004600084600a811115611f0c57fe5b600a811115611f1757fe5b8152602080820192909252604090810160009081206001600160a01b03861682529092529020805460ff191691151591909117905581600a811115611f5857fe5b604080516001600160a01b03841681526000602082015281517f7531a7aefe3985500c4dec2dcb6049a708f14c6a8a9022b435b8841bdb8e1713929181900390910190a25050565b60066020526000908152604090205481565b600160009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b15801561200057600080fd5b505afa158015612014573d6000803e3d6000fd5b505050506040513d602081101561202a57600080fd5b50516000906001600160a01b0316331461209d5760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107785780601f1061074d57610100808354040283529160200191610778565b506001600a82815481106120ad57fe5b60009182526020909120600490910201600301805460ff191691151591909117905550565b600160009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b15801561212057600080fd5b505afa158015612134573d6000803e3d6000fd5b505050506040513d602081101561214a57600080fd5b50516000906001600160a01b031633146121bd5760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107785780601f1061074d57610100808354040283529160200191610778565b50600180546001600160a01b0319166001600160a01b0383169081179091556040517f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad90600090a250565b600160009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b15801561225657600080fd5b505afa15801561226a573d6000803e3d6000fd5b505050506040513d602081101561228057600080fd5b50516000906001600160a01b031633146122f35760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107785780601f1061074d57610100808354040283529160200191610778565b50600b5460ff161515600114612350576040805162461bcd60e51b815260206004820152601960248201527f74696d656c6f636b20616c72656164792064697361626c656400000000000000604482015290519081900360640190fd5b600c5415801590612363575043600c5411155b1561237757600b805460ff191690556123a9565b6123a56116097f00000000000000000000000000000000000000000000000000000000000019c86007613912565b600c555b565b600160009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b1580156123f957600080fd5b505afa15801561240d573d6000803e3d6000fd5b505050506040513d602081101561242357600080fd5b50516000906001600160a01b031633146124965760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107785780601f1061074d57610100808354040283529160200191610778565b50600b54610100900460ff16156124ea576040805162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015290519081900360640190fd5b600b805461ff001960ff1990911660011716610100179055565b60006009547f00000000000000000000000064aa3364f17a4d01c6f1751fd97c2bd3d7e7f1d56001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561256257600080fd5b505afa158015612576573d6000803e3d6000fd5b505050506040513d602081101561258c57600080fd5b505103905090565b60075481565b60008060606003600085600a8111156125af57fe5b600a8111156125ba57fe5b815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561261c57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116125fe575b5050505050905060005b81518110156126715781818151811061263b57fe5b60200260200101516001600160a01b0316866001600160a01b031614156126695760019350915061267b9050565b600101612626565b5060008092509250505b9250929050565b600160009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b1580156126d057600080fd5b505afa1580156126e4573d6000803e3d6000fd5b505050506040513d60208110156126fa57600080fd5b50516000906001600160a01b0316331461276d5760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107785780601f1061074d57610100808354040283529160200191610778565b506001600160a01b03909116600090815260066020526040902055565b600360205281600052604060002081815481106127a657600080fd5b6000918252602090912001546001600160a01b03169150829050565b7f00000000000000000000000064aa3364f17a4d01c6f1751fd97c2bd3d7e7f1d581565b600b5460ff1681565b600c5481565b6001600160a01b0382166000908152600080516020613ca3833981519152602052604081205460ff16156128c15760046000805b600a81111561283457fe5b815260208082019290925260409081016000908120338252909252902054600e9060ff166128bb5760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107785780601f1061074d57610100808354040283529160200191610778565b5061295a565b6001600160a01b0383166000908152600080516020613c62833981519152602052604090205460ff16156128f9576004600081612829565b60405162461bcd60e51b8152602060048201908152600f8054600260001961010060018416150201909116046024840181905290928291604490910190849080156107785780601f1061074d57610100808354040283529160200191610778565b61296f6001600160a01b03841633308761396b565b600061297b8486613026565b90506129878184613713565b91507f00000000000000000000000064aa3364f17a4d01c6f1751fd97c2bd3d7e7f1d56001600160a01b03166340c10f1933846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015612a0057600080fd5b505af1158015612a14573d6000803e3d6000fd5b5050600754612a2692509050826138b8565b600755604080518681526020810183905281516001600160a01b038716927f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15928290030190a2509392505050565b6001546001600160a01b031681565b7f00000000000000000000000000000000000000000000000000000000000019c881565b3360009081527fbeb3bad75134cb432e5707980e3245c52c5998a1125ee30f2f0dbf3925b1e5516020526040902054600e9060ff16612b3f5760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107785780601f1061074d57610100808354040283529160200191610778565b506001600160a01b0381166000908152600080516020613ca38339815191526020526040902054600d9060ff16612bcf5760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107785780601f1061074d57610100808354040283529160200191610778565b50612be56001600160a01b03821633308561396b565b6000612bf18284613026565b6002546040805163ae5c6cd360e01b81526004810184905233602482015260006044820181905291519394506001600160a01b039092169263ae5c6cd392606480820193929182900301818387803b158015612c4c57600080fd5b505af1158015612c60573d6000803e3d6000fd5b5050600854612c729250905082613713565b600855600754612c8290826138b8565b600755604080518481526020810183905281516001600160a01b0385169233927fc6d98eecfc9c78ab62c89a82950079b54874749f1f6f24090f7acc758bc2f309929081900390910190a3505050565b600160009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b158015612d2057600080fd5b505afa158015612d34573d6000803e3d6000fd5b505050506040513d6020811015612d4a57600080fd5b50516000906001600160a01b03163314612dbd5760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107785780601f1061074d57610100808354040283529160200191610778565b50600b5460ff1615612e0a576040805162461bcd60e51b815260206004820152601160248201527055736520717565756554696d656c6f636b60781b604482015290519081900360640190fd5b600983600a811115612e1857fe5b1415612e3e57600280546001600160a01b0319166001600160a01b038416179055612fd1565b60016004600085600a811115612e5057fe5b600a811115612e5b57fe5b8152602080820192909252604090810160009081206001600160a01b03871682529092529020805460ff1916911515919091179055600583600a811115612e9e57fe5b1415612ed3576001600160a01b03828116600090815260056020526040902080546001600160a01b0319169183169190911790555b6000612edf838561259a565b50905080612fcf576003600085600a811115612ef757fe5b600a811115612f0257fe5b8152602080820192909252604001600090812080546001810182559082529190200180546001600160a01b0319166001600160a01b038516179055600584600a811115612f4b57fe5b1480612f625750600284600a811115612f6057fe5b145b15612fcf57600080612f74858761259a565b915091508115612fcc576003600087600a811115612f8e57fe5b600a811115612f9957fe5b81526020019081526020016000208181548110612fb257fe5b600091825260209091200180546001600160a01b03191690555b50505b505b82600a811115612fdd57fe5b604080516001600160a01b03851681526001602082015281517f7531a7aefe3985500c4dec2dcb6049a708f14c6a8a9022b435b8841bdb8e1713929181900390910190a2505050565b600061313d836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561306457600080fd5b505afa158015613078573d6000803e3d6000fd5b505050506040513d602081101561308e57600080fd5b50516040805163313ce56760e01b8152905160ff909216600a0a91613137916001600160a01b037f00000000000000000000000064aa3364f17a4d01c6f1751fd97c2bd3d7e7f1d5169163313ce56791600480820192602092909190829003018186803b1580156130fe57600080fd5b505afa158015613112573d6000803e3d6000fd5b505050506040513d602081101561312857600080fd5b5051859060ff16600a0a613912565b90613ad5565b6001600160a01b0384166000908152600080516020613c62833981519152602052604090205490915060ff16156131fe576001600160a01b03808416600081815260056020908152604091829020548251634249719f60e01b815260048101949094526024840187905291519190931692634249719f9260448082019391829003018186803b1580156131cf57600080fd5b505afa1580156131e3573d6000803e3d6000fd5b505050506040513d60208110156131f957600080fd5b505190505b92915050565b60085481565b600b5460ff161515600114613266576040805162461bcd60e51b815260206004820181905260248201527f54696d656c6f636b2069732064697361626c65642c2075736520656e61626c65604482015290519081900360640190fd5b61326e613c2a565b600a828154811061327b57fe5b600091825260209091206040805160c081019091526004909202018054829060ff16600a8111156132a857fe5b600a8111156132b357fe5b815281546001600160a01b03610100918290048116602084015260018401541660408301526002830154606083015260039092015460ff80821615156080808501919091529390910416151560a0909101528101519091501561335d576040805162461bcd60e51b815260206004820152601960248201527f416374696f6e20686173206265656e206e756c6c696669656400000000000000604482015290519081900360640190fd5b8060a00151156133b4576040805162461bcd60e51b815260206004820181905260248201527f416374696f6e2068617320616c7265616479206265656e206578656375746564604482015290519081900360640190fd5b8060600151431015613405576040805162461bcd60e51b815260206004820152601560248201527454696d656c6f636b206e6f7420636f6d706c65746560581b604482015290519081900360640190fd5b60098151600a81111561341457fe5b1415613443576020810151600280546001600160a01b0319166001600160a01b0390921691909117905561367b565b6001600460008360000151600a81111561345957fe5b600a81111561346457fe5b815260208082019290925260409081016000908120858401516001600160a01b031682529092529020805460ff191691151591909117905560058151600a8111156134ab57fe5b14156134ec576040818101516020808401516001600160a01b039081166000908152600590925292902080546001600160a01b031916929091169190911790555b60006135008260200151836000015161259a565b5090508061367957600360008360000151600a81111561351c57fe5b600a81111561352757fe5b81526020808201929092526040016000908120848301518154600181018355918352929091200180546001600160a01b0319166001600160a01b0390921691909117905560058251600a81111561357a57fe5b14156135f4576000806135928460200151600261259a565b9150915081156135ed57600260005260036020527fc3a24b0501bd2c13a7e57f2db4369ec4c223447539fc0724a9d55ac4a06ebd4d8054829081106135d357fe5b600091825260209091200180546001600160a01b03191690555b5050613679565b60028251600a81111561360357fe5b14156136795760008061361b8460200151600561259a565b91509150811561367657600560005260036020527f405aad32e1adbac89bb7f176e338b8fc6e994ca210c9bb7bdca249b46594225080548290811061365c57fe5b600091825260209091200180546001600160a01b03191690555b50505b505b6001600a838154811061368a57fe5b6000918252602090912060036004909202010180549115156101000261ff00199092169190911790558051600a8111156136c057fe5b7f7531a7aefe3985500c4dec2dcb6049a708f14c6a8a9022b435b8841bdb8e17138260200151600160405180836001600160a01b0316815260200182151581526020019250505060405180910390a25050565b600061375583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613b17565b9392505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106137d95780518252601f1990920191602091820191016137ba565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461383b576040519150601f19603f3d011682016040523d82523d6000602084013e613840565b606091505b509150915081801561386e57508051158061386e575080806020019051602081101561386b57600080fd5b50515b6138b1576040805162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b604482015290519081900360640190fd5b5050505050565b600082820183811015613755576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600082613921575060006131fe565b8282028284828161392e57fe5b04146137555760405162461bcd60e51b8152600401808060200182810382526021815260200180613c826021913960400191505060405180910390fd5b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106139f05780518252601f1990920191602091820191016139d1565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613a52576040519150601f19603f3d011682016040523d82523d6000602084013e613a57565b606091505b5091509150818015613a85575080511580613a855750808060200190516020811015613a8257600080fd5b50515b613acd576040805162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b604482015290519081900360640190fd5b505050505050565b600061375583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613bae565b60008184841115613ba65760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613b6b578181015183820152602001613b53565b50505050905090810190601f168015613b985780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183613bfd5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315613b6b578181015183820152602001613b53565b506000838581613c0957fe5b049050838581613c1557fe5b06818502018514613c2257fe5b949350505050565b6040805160c08101909152806000815260006020820181905260408201819052606082018190526080820181905260a0909101529056fe04cde762ef08b6b6c5ded8e8c4c0b3f4e5c9ad7342c88fcc93681b4588b73f05536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7791da3fd0782e51c6b3986e9e672fd566868e71f3dbc2d6c2cd6fbb3e361af2a7a264697066735822122066aa62093962779da8f389172be79978b48d4f17837919e8f4a03dd1d4274cc664736f6c63430007050033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000064aa3364f17a4d01c6f1751fd97c2bd3d7e7f1d500000000000000000000000000000000000000000000000000000000000019c80000000000000000000000001c21f8ea7e39e2ba00bc12d2968d63f4acb38b7a
-----Decoded View---------------
Arg [0] : _ohm (address): 0x64aa3364F17a4D01c6f1751Fd97C2BD3D7e7f1D5
Arg [1] : _timelock (uint256): 6600
Arg [2] : _authority (address): 0x1c21F8EA7e39E2BA00BC12d2968D63F4acb38b7A
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 00000000000000000000000064aa3364f17a4d01c6f1751fd97c2bd3d7e7f1d5
Arg [1] : 00000000000000000000000000000000000000000000000000000000000019c8
Arg [2] : 0000000000000000000000001c21f8ea7e39e2ba00bc12d2968d63f4acb38b7a
Deployed Bytecode Sourcemap
11330:17329:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15418:538;;;;;;;;;;;;;;;;-1:-1:-1;15418:538:0;;;;;;-1:-1:-1;;;;;15418:538:0;;:::i;:::-;;16101:728;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;16101:728:0;;;;;;;;:::i;27663:142::-;;;:::i;:::-;;;;;;;;;;;;;;;;19940:436;;;;;;;;;;;;;;;;-1:-1:-1;19940:436:0;;:::i;17999:1063::-;;;;;;;;;;;;;;;;-1:-1:-1;17999:1063:0;;;;;;-1:-1:-1;;;;;17999:1063:0;;:::i;12872:17::-;;;:::i;:::-;;;;-1:-1:-1;;;;;12872:17:0;;;;;;;;;;;;;;13351:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;13018:49;;;;;;;;;;;;;;;;-1:-1:-1;13018:49:0;-1:-1:-1;;;;;13018:49:0;;:::i;24087:737::-;;;;;;;;;;;;;;;;-1:-1:-1;24087:737:0;;;;;-1:-1:-1;;;;;24087:737:0;;;;;;;;;;;;:::i;20583:872::-;;;:::i;12949:62::-;;;;;;;;;;;;;;;;-1:-1:-1;12949:62:0;;;;;;;;-1:-1:-1;;;;;12949:62:0;;:::i;13195:22::-;;;:::i;16971:319::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;16971:319:0;;;;;;;;:::i;13226:30::-;;;;;;;;;;;;;;;;-1:-1:-1;13226:30:0;;:::i;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13226:30:0;;;;;;-1:-1:-1;;;;;13226:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23036:298;;;;;;;;;;;;;;;;-1:-1:-1;23036:298:0;;;;;;;;-1:-1:-1;;;;;23036:298:0;;:::i;13076:44::-;;;;;;;;;;;;;;;;-1:-1:-1;13076:44:0;-1:-1:-1;;;;;13076:44:0;;:::i;26672:112::-;;;;;;;;;;;;;;;;-1:-1:-1;26672:112:0;;:::i;2303:168::-;;;;;;;;;;;;;;;;-1:-1:-1;2303:168:0;-1:-1:-1;;;;;2303:168:0;;:::i;26856:394::-;;;:::i;27330:177::-;;;:::i;28540:116::-;;;:::i;13129:28::-;;;:::i;23443:346::-;;;;;;;;;;;;;;;;-1:-1:-1;23443:346:0;;-1:-1:-1;;;;;23443:346:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;21584:125;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21584:125:0;;;;;;;;:::i;12898:44::-;;;;;;;;;;;;;;;;-1:-1:-1;12898:44:0;;;;;;;;;:::i;12840:25::-;;;:::i;13317:27::-;;;:::i;13383:40::-;;;:::i;14371:896::-;;;;;;;;;;;;;;;;-1:-1:-1;14371:896:0;;;-1:-1:-1;;;;;14371:896:0;;;;;;;;;;:::i;1491:34::-;;;:::i;13263:45::-;;;:::i;19229:579::-;;;;;;;;;;;;;;;;-1:-1:-1;19229:579:0;;;;;;-1:-1:-1;;;;;19229:579:0;;:::i;21877:1018::-;;;;;;;;;;;;;;;;-1:-1:-1;21877:1018:0;;;;;-1:-1:-1;;;;;21877:1018:0;;;;;;;;;;;;:::i;27970:391::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27970:391:0;;;;;;;;:::i;13164:24::-;;;:::i;24923:1652::-;;;;;;;;;;;;;;;;-1:-1:-1;24923:1652:0;;:::i;15418:538::-;-1:-1:-1;;;;;15506:40:0;;:32;:40;;;-1:-1:-1;;;;;;;;;;;15506:32:0;:40;:32;:40;;;15548:11;;15506:40;;15498:62;;;;-1:-1:-1;;;15498:62:0;;;;;;;;;;;;-1:-1:-1;;15498:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15659:10:0;15624:34;:46;;;:34;;:46;:34;:46;;;15672:11;;15624:46;;15616:68;;;;-1:-1:-1;;;15616:68:0;;;;;;;;;;;;-1:-1:-1;;15616:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15697:13;15713:27;15724:6;15732:7;15713:10;:27::i;:::-;15697:43;;15751:3;-1:-1:-1;;;;;15751:12:0;;15764:10;15776:5;15751:31;;;;;;;;;;;;;-1:-1:-1;;;;;15751:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15811:13:0;;:24;;-1:-1:-1;15811:13:0;-1:-1:-1;15829:5:0;15811:17;:24::i;:::-;15795:13;:40;15848:48;-1:-1:-1;;;;;15848:27:0;;15876:10;15888:7;15848:27;:48::i;:::-;15914:34;;;;;;;;;;;;;;-1:-1:-1;;;;;15914:34:0;;;;;;;;;;;15418:538;;;:::o;16101:728::-;-1:-1:-1;;;;;16183:42:0;;:34;:42;;;-1:-1:-1;;;;;;;;;;;16183:34:0;:42;:34;:42;;;;;16179:246;;;16287:10;16250:36;:48;;;:36;;:48;:36;:48;;;16300:11;;16250:48;;16242:70;;;;-1:-1:-1;;;16242:70:0;;;;;;;;;;;;-1:-1:-1;;16242:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16179:246;;;16388:10;16353:34;:46;;;:34;;:46;:34;:46;;;16401:11;;16353:46;;16345:68;;;;-1:-1:-1;;;16345:68:0;;;;;;;;;;;;-1:-1:-1;;16345:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16179:246;-1:-1:-1;;;;;16439:40:0;;:32;:40;;;-1:-1:-1;;;;;;;;;;;16439:32:0;:40;:32;:40;;;;;;:86;;-1:-1:-1;;;;;;16483:42:0;;:34;:42;;;-1:-1:-1;;;;;;;;;;;16483:34:0;:42;:34;:42;;;;;16439:86;16435:288;;;16542:13;16558:27;16569:6;16577:7;16558:10;:27::i;:::-;16542:43;;16617:16;:14;:16::i;:::-;16608:5;:25;;16635:20;16600:56;;;;;-1:-1:-1;;;16600:56:0;;;;;;;;;;;;-1:-1:-1;;16600:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16687:13:0;;:24;;16705:5;16687:17;:24::i;:::-;16671:13;:40;-1:-1:-1;16435:288:0;16733:48;-1:-1:-1;;;;;16733:27:0;;16761:10;16773:7;16733:27;:48::i;:::-;16797:24;;;;;;;;-1:-1:-1;;;;;16797:24:0;;;;;;;;;;;;;16101:728;;:::o;27663:142::-;27719:7;27746:51;27764:32;27786:9;;27764:3;-1:-1:-1;;;;;27764:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27764:17:0;;:21;:32::i;:::-;27746:13;;;:17;:51::i;:::-;27739:58;;27663:142;:::o;19940:436::-;20045:10;20011:33;:45;;;:33;;:45;:33;:45;;;;;;:90;;-1:-1:-1;20090:10:0;20060:29;:41;;;:29;;:41;:29;:41;;;;;20011:90;20103:11;20003:112;;;;;-1:-1:-1;;;20003:112:0;;;;;;;;;;;;-1:-1:-1;;20003:112:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20126:33:0;;;-1:-1:-1;;;20126:33:0;;20139:10;20126:33;;;;;;;;;;;;-1:-1:-1;;;;;20126:3:0;:12;;;;:33;;;;;-1:-1:-1;;20126:33:0;;;;;;;-1:-1:-1;20126:12:0;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20170:4:0;;:43;;;-1:-1:-1;;;20170:43:0;;;;;;;;20195:10;20170:43;;;;:4;:43;;;;;;;;-1:-1:-1;;;;;20170:4:0;;;;-1:-1:-1;20170:15:0;;-1:-1:-1;20170:43:0;;;;;;;;;;;:4;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20236:9:0;;:22;;-1:-1:-1;20236:9:0;-1:-1:-1;20250:7:0;20236:13;:22::i;:::-;20224:9;:34;20279:7;;:20;;20291:7;20279:11;:20::i;:::-;20269:7;:30;20315:53;;;;;;;;;;;;;;-1:-1:-1;;;;;20345:3:0;20315:53;;20325:10;;20315:53;;;;;;;;;;;19940:436;:::o;17999:1063::-;18080:13;18126:3;-1:-1:-1;;;;;18108:22:0;:6;-1:-1:-1;;;;;18108:22:0;;18104:375;;;18185:10;18155:29;:41;;;:29;;:41;:29;:41;;;18198:11;;18155:41;;18147:63;;;;-1:-1:-1;;;18147:63:0;;;;;;;;;;;;-1:-1:-1;;18147:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18233:7;18225:15;;18104:375;;;18315:10;18281:33;:45;;;:33;;:45;:33;:45;;;18328:11;;18281:45;;18273:67;;;;-1:-1:-1;;;18273:67:0;;;;;;;;;;;;-1:-1:-1;;18273:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18363:40:0;;:32;:40;;;-1:-1:-1;;;;;;;;;;;18363:32:0;:40;:32;:40;;;18405:11;;18363:40;;18355:62;;;;-1:-1:-1;;;18355:62:0;;;;;;;;;;;;-1:-1:-1;;18355:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18440:27;18451:6;18459:7;18440:10;:27::i;:::-;18432:35;;18104:375;18509:12;18497:10;18489:33;;;;-1:-1:-1;;;18489:33:0;;;;;;;;;;;;-1:-1:-1;;18489:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18535:4:0;;:40;;;-1:-1:-1;;;18535:40:0;;;;;;;;18558:10;18535:40;;;;:4;:40;;;;;;-1:-1:-1;;;;;18535:4:0;;;;:15;;:40;;;;;:4;;:40;;;;;;;;:4;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18637:10:0;18627:21;;;;:9;:21;;;;;;;;;;18594:4;;:29;;-1:-1:-1;;;18594:29:0;;;;;;;;;;;18627:21;;-1:-1:-1;;;;;;18594:4:0;;;;-1:-1:-1;18594:17:0;;:29;;;;;;;;;;;:4;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18594:29:0;:54;;18586:90;;;;;-1:-1:-1;;;18586:90:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18699:9;;:20;;18713:5;18699:13;:20::i;:::-;18687:9;:32;;;;18754:3;-1:-1:-1;;;;;18736:22:0;:6;-1:-1:-1;;;;;18736:22:0;;18732:261;;;18775:27;;;-1:-1:-1;;;18775:27:0;;18784:10;18775:27;;;;;;;;;;;;-1:-1:-1;;;;;18775:3:0;:8;;;;:27;;;;;-1:-1:-1;;18775:27:0;;;;;;;-1:-1:-1;18775:8:0;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18827:7:0;;:18;;-1:-1:-1;18827:7:0;-1:-1:-1;18839:5:0;18827:11;:18::i;:::-;18817:7;:28;18732:261;;;18894:13;;:24;;18912:5;18894:17;:24::i;:::-;18878:13;:40;18933:48;-1:-1:-1;;;;;18933:27:0;;18961:10;18973:7;18933:27;:48::i;:::-;19008:46;;;;;;;;;;;;;;-1:-1:-1;;;;;19008:46:0;;;19019:10;;19008:46;;;;;;;;;;;17999:1063;;;:::o;12872:17::-;;;-1:-1:-1;;;;;12872:17:0;;:::o;13351:23::-;;;;;;;;;:::o;13018:49::-;;;;;;;;;;;;-1:-1:-1;;;;;13018:49:0;;:::o;24087:737::-;1830:9;;;;;;;;;-1:-1:-1;;;;;1830:9:0;-1:-1:-1;;;;;1830:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1830:20:0;1852:12;;-1:-1:-1;;;;;1816:34:0;:10;:34;1808:57;;;;-1:-1:-1;;;1808:57:0;;;;;;;;;;;;-1:-1:-1;;1808:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24240:22:0;::::1;24232:31;;;::::0;::::1;;24282:15;::::0;::::1;;:23;;:15:::0;:23:::1;24274:68;;;::::0;;-1:-1:-1;;;24274:68:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;24355:16;24374:38;:12;24391:20;24374:16;:38::i;:::-;24355:57:::0;-1:-1:-1;24438:21:0::1;24427:7;:32;;;;;;;;;:70;;;-1:-1:-1::0;24474:23:0::1;24463:7;:34;;;;;;;;;24427:70;24423:159;;;24525:45;24542:27;:20;24567:1;24542:24;:27::i;:::-;24525:12;::::0;:16:::1;:45::i;:::-;24514:56;;24423:159;24592:15;24627:127;;;;;;;;24644:7;24627:127;;;;;;;;::::0;;-1:-1:-1;;;;;24627:127:0;;::::1;;::::0;;::::1;::::0;;;;;;::::1;::::0;;;;;;;;;;-1:-1:-1;24627:127:0;;;;;;;;;;;;;24592:173;;24627:127;24592:173;;::::1;::::0;;;;;;;;;::::1;::::0;;::::1;;::::0;;;;;;;;-1:-1:-1;;24592:173:0;;::::1;::::0;;::::1;::::0;::::1;;;;;;;;::::0;;-1:-1:-1;24592:173:0::1;::::0;::::1;::::0;;;-1:-1:-1;;;;;;24592:173:0::1;;-1:-1:-1::0;;;;;24592:173:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;-1:-1:-1;24592:173:0;::::1;::::0;;-1:-1:-1;;;;;;24592:173:0::1;::::0;;;::::1;;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;;24592:173:0;;::::1;::::0;::::1;;::::0;;;::::1;-1:-1:-1::0;;24592:173:0::1;::::0;::::1;;;::::0;;;::::1;::::0;;24798:7;24781:35:::1;::::0;::::1;;;;;;;::::0;;-1:-1:-1;;;;;24781:35:0;::::1;::::0;;;;::::1;::::0;;;;::::1;::::0;;::::1;1876:1;24087:737:::0;;;:::o;20583:872::-;1830:9;;;;;;;;;-1:-1:-1;;;;;1830:9:0;-1:-1:-1;;;;;1830:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1830:20:0;1852:12;;-1:-1:-1;;;;;1816:34:0;:10;:34;1808:57;;;;-1:-1:-1;;;1808:57:0;;;;;;;;;;;;-1:-1:-1;;1808:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20709:19:0::1;20641:16;20700:29:::0;;;:8:::1;:29;::::0;;;;20668:61;;20700:29;20668:61;;;;::::1;::::0;;;;;;;;;;:29:::1;::::0;:61;;20700:29;20668:61;;::::1;20700:29:::0;20668:61;;::::1;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;20668:61:0::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;;;;;;;;;;;20745:9;20740:268;20764:12;:19;20760:1;:23;20740:268;;;20821:19;20809:32;::::0;;;:11:::1;:32;::::0;20842:15;;-1:-1:-1;;;;;;;;;;;20809:32:0;;20842:12;;20855:1;;20842:15;::::1;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;20809:49:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;20809:49:0;;::::1;;20805:192;;;20890:91;20903:77;20914:12;20927:1;20914:15;;;;;;;;;;;;;;20938:12;20951:1;20938:15;;;;;;;;;;;;;;-1:-1:-1::0;;;;;20931:33:0::1;;20973:4;20931:48;;;;;;;;;;;;;-1:-1:-1::0;;;;;20931:48:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;20931:48:0;20903:10:::1;:77::i;:::-;20890:8:::0;;:12:::1;:91::i;:::-;20879:102;;20805:192;20785:3;;20740:268;;;-1:-1:-1::0;21061:21:0::1;21052:31;::::0;:8:::1;:31;::::0;;;;21018:65;;21052:31;21018:65;;;;::::1;::::0;;;;;;;;;;:31:::1;::::0;:65;;21052:31;21018:65;;::::1;21052:31:::0;21018:65;;::::1;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;21018:65:0::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;;;;;;;;;;;21099:9;21094:278;21118:14;:21;21114:1;:25;21094:278;;;21177:21;21165:34;::::0;;;:11:::1;:34;::::0;21200:17;;-1:-1:-1;;;;;;;;;;;21165:34:0;;21200:14;;21215:1;;21200:17;::::1;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;21165:53:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;21165:53:0;;::::1;;21161:200;;;21250:95;21263:81;21274:14;21289:1;21274:17;;;;;;;21263:81;21250:8:::0;;:12:::1;:95::i;:::-;21239:106;;21161:200;21141:3;;21094:278;;;-1:-1:-1::0;21382:13:0::1;:24:::0;;;21422:25:::1;::::0;21398:8;;21422:25:::1;::::0;;;::::1;1876:1;;;20583:872::o:0;12949:62::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;13195:22::-;;;;:::o;16971:319::-;17093:10;17059:33;:45;;;:33;;:45;:33;:45;;;17106:11;;17059:45;;17051:67;;;;-1:-1:-1;;;17051:67:0;;;;;;;;;;;;-1:-1:-1;;17051:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17148:16;:14;:16::i;:::-;17137:7;:27;;17166:20;17129:58;;;;;-1:-1:-1;;;17129:58:0;;;;;;;;;;;;-1:-1:-1;;17129:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17198:3;-1:-1:-1;;;;;17198:8:0;;17207:10;17219:7;17198:29;;;;;;;;;;;;;-1:-1:-1;;;;;17198:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17243:39:0;;;;;;;;-1:-1:-1;;;;;17243:39:0;;;-1:-1:-1;17250:10:0;;-1:-1:-1;17243:39:0;;;;;;;;;16971:319;;:::o;13226:30::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13226:30:0;;;;;;;;;;;;;;;;;;:::o;23036:298::-;23131:9;;;;;;;;;-1:-1:-1;;;;;23131:9:0;-1:-1:-1;;;;;23131:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23131:20:0;-1:-1:-1;;;;;23117:34:0;:10;:34;;:72;;;23169:9;;;;;;;;;-1:-1:-1;;;;;23169:9:0;-1:-1:-1;;;;;23169:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23169:20:0;-1:-1:-1;;;;;23155:34:0;:10;:34;23117:72;23109:110;;;;;-1:-1:-1;;;23109:110:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23265:5;23230:11;:20;23242:7;23230:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23230:20:0;;;-1:-1:-1;;;;;23230:32:0;;;;;;;;;:40;;-1:-1:-1;;23230:40:0;;;;;;;;;;23311:7;23286:40;;;;;;;;;;;-1:-1:-1;;;;;23286:40:0;;;;23320:5;23286:40;;;;;;;;;;;;;;;;;23036:298;;:::o;13076:44::-;;;;;;;;;;;;;:::o;26672:112::-;1830:9;;;;;;;;;-1:-1:-1;;;;;1830:9:0;-1:-1:-1;;;;;1830:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1830:20:0;1852:12;;-1:-1:-1;;;;;1816:34:0;:10;:34;1808:57;;;;-1:-1:-1;;;1808:57:0;;;;;;;;;;;;-1:-1:-1;;1808:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26772:4:::1;26738:15;26754:6;26738:23;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;:31;;:38:::0;;-1:-1:-1;;26738:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;26672:112:0:o;2303:168::-;1830:9;;;;;;;;;-1:-1:-1;;;;;1830:9:0;-1:-1:-1;;;;;1830:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1830:20:0;1852:12;;-1:-1:-1;;;;;1816:34:0;:10;:34;1808:57;;;;-1:-1:-1;;;1808:57:0;;;;;;;;;;;;-1:-1:-1;;1808:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2391:9:0::1;:25:::0;;-1:-1:-1;;;;;;2391:25:0::1;-1:-1:-1::0;;;;;2391:25:0;::::1;::::0;;::::1;::::0;;;2432:31:::1;::::0;::::1;::::0;-1:-1:-1;;2432:31:0::1;2303:168:::0;:::o;26856:394::-;1830:9;;;;;;;;;-1:-1:-1;;;;;1830:9:0;-1:-1:-1;;;;;1830:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1830:20:0;1852:12;;-1:-1:-1;;;;;1816:34:0;:10;:34;1808:57;;;;-1:-1:-1;;;1808:57:0;;;;;;;;;;;;-1:-1:-1;;1808:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26924:15:0::1;::::0;::::1;;:23;;:15:::0;:23:::1;26916:61;;;::::0;;-1:-1:-1;;;26916:61:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;26992:25;::::0;:30;;::::1;::::0;:75:::1;;;27055:12;27026:25;;:41;;26992:75;26988:255;;;27084:15;:23:::0;;-1:-1:-1;;27084:23:0::1;::::0;;26988:255:::1;;;27168:45;27185:27;:20;27210:1;27185:24;:27::i;27168:45::-;27140:25;:73:::0;26988:255:::1;26856:394::o:0;27330:177::-;1830:9;;;;;;;;;-1:-1:-1;;;;;1830:9:0;-1:-1:-1;;;;;1830:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1830:20:0;1852:12;;-1:-1:-1;;;;;1816:34:0;:10;:34;1808:57;;;;-1:-1:-1;;;1808:57:0;;;;;;;;;;;;-1:-1:-1;;1808:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27393:11:0::1;::::0;::::1;::::0;::::1;;;:20;27385:52;;;::::0;;-1:-1:-1;;;27385:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;27385:52:0;;;;;;;;;;;;;::::1;;27448:15;:22:::0;;-1:-1:-1;;;;27448:22:0;;::::1;27466:4;27448:22;27481:18;27448:22;27481:18;::::0;;27330:177::o;28540:116::-;28594:7;28641;;28621:3;-1:-1:-1;;;;;28621:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28621:17:0;:27;;-1:-1:-1;28540:116:0;:::o;13129:28::-;;;;:::o;23443:346::-;23523:4;23529:7;23549:24;23576:8;:17;23585:7;23576:17;;;;;;;;;;;;;;;;;;;;;;;;;;;23549:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23549:44:0;;;;;;;;;;;;;;;;;;;;;;;23609:9;23604:150;23628:7;:14;23624:1;:18;23604:150;;;23680:7;23688:1;23680:10;;;;;;;;;;;;;;-1:-1:-1;;;;;23668:22:0;:8;-1:-1:-1;;;;;23668:22:0;;23664:79;;;23719:4;;-1:-1:-1;23725:1:0;-1:-1:-1;23711:16:0;;-1:-1:-1;23711:16:0;23664:79;23644:3;;23604:150;;;;23772:5;23779:1;23764:17;;;;;23443:346;;;;;;:::o;21584:125::-;1830:9;;;;;;;;;-1:-1:-1;;;;;1830:9:0;-1:-1:-1;;;;;1830:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1830:20:0;1852:12;;-1:-1:-1;;;;;1816:34:0;:10;:34;1808:57;;;;-1:-1:-1;;;1808:57:0;;;;;;;;;;;;-1:-1:-1;;1808:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21673:19:0;;::::1;;::::0;;;:9:::1;:19;::::0;;;;:28;21584:125::o;12898:44::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12898:44:0;;-1:-1:-1;12898:44:0;;-1:-1:-1;12898:44:0:o;12840:25::-;;;:::o;13317:27::-;;;;;;:::o;13383:40::-;;;;:::o;14371:896::-;-1:-1:-1;;;;;14529:40:0;;14499:13;14529:40;;;-1:-1:-1;;;;;;;;;;;14529:32:0;:40;:32;:40;;;;;14525:349;;;14594:11;:36;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14594:36:0;;;14631:10;14594:48;;;;;;;;14644:11;;14594:48;;14586:70;;;;-1:-1:-1;;;14586:70:0;;;;;;;;;;;;-1:-1:-1;;14586:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14525:349;;;-1:-1:-1;;;;;14678:42:0;;:34;:42;;;-1:-1:-1;;;;;;;;;;;14678:34:0;:42;:34;:42;;;;;14674:200;;;14745:11;:38;:11;:38;;14674:200;14842:20;;-1:-1:-1;;;14842:20:0;;;;;;;;;14849:12;14842:20;;;-1:-1:-1;;14842:20:0;;;;;;;;;;;;;;;;;14849:12;;14842:20;;;;;;;14849:12;;14842:20;;;;;;;;;;;;;;;;;;;;;;;14674:200;14886:67;-1:-1:-1;;;;;14886:31:0;;14918:10;14938:4;14945:7;14886:31;:67::i;:::-;14966:13;14982:27;14993:6;15001:7;14982:10;:27::i;:::-;14966:43;-1:-1:-1;15101:18:0;14966:43;15111:7;15101:9;:18::i;:::-;15093:26;;15130:3;-1:-1:-1;;;;;15130:8:0;;15139:10;15151:5;15130:27;;;;;;;;;;;;;-1:-1:-1;;;;;15130:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15186:13:0;;:24;;-1:-1:-1;15186:13:0;-1:-1:-1;15204:5:0;15186:17;:24::i;:::-;15170:13;:40;15228:31;;;;;;;;;;;;;;-1:-1:-1;;;;;15228:31:0;;;;;;;;;;;14371:896;;;;;;:::o;1491:34::-;;;-1:-1:-1;;;;;1491:34:0;;:::o;13263:45::-;;;:::o;19229:579::-;19363:10;19329:33;:45;;;:33;;:45;:33;:45;;;19376:11;;19329:45;;19321:67;;;;-1:-1:-1;;;19321:67:0;;;;;;;;;;;;-1:-1:-1;;19321:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19407:40:0;;:32;:40;;;-1:-1:-1;;;;;;;;;;;19407:32:0;:40;:32;:40;;;19449:11;;19407:40;;19399:62;;;;-1:-1:-1;;;19399:62:0;;;;;;;;;;;;-1:-1:-1;;19399:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19472:67:0;-1:-1:-1;;;;;19472:31:0;;19504:10;19524:4;19531:7;19472:31;:67::i;:::-;19550:13;19566:27;19577:6;19585:7;19566:10;:27::i;:::-;19604:4;;:41;;;-1:-1:-1;;;19604:41:0;;;;;;;;19627:10;19604:41;;;;:4;:41;;;;;;;;19550:43;;-1:-1:-1;;;;;;19604:4:0;;;;:15;;:41;;;;;:4;:41;;;;;;:4;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19668:9:0;;:20;;-1:-1:-1;19668:9:0;-1:-1:-1;19682:5:0;19668:13;:20::i;:::-;19656:9;:32;19715:13;;:24;;19733:5;19715:17;:24::i;:::-;19699:13;:40;19755:45;;;;;;;;;;;;;;-1:-1:-1;;;;;19755:45:0;;;19765:10;;19755:45;;;;;;;;;;;19229:579;;;:::o;21877:1018::-;1830:9;;;;;;;;;-1:-1:-1;;;;;1830:9:0;-1:-1:-1;;;;;1830:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1830:20:0;1852:12;;-1:-1:-1;;;;;1816:34:0;:10;:34;1808:57;;;;-1:-1:-1;;;1808:57:0;;;;;;;;;;;;-1:-1:-1;;1808:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22023:15:0::1;::::0;::::1;;:24;22015:54;;;::::0;;-1:-1:-1;;;22015:54:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;22015:54:0;;;;;;;;;;;;;::::1;;22095:11;22084:7;:22;;;;;;;;;22080:755;;;22123:4;:22:::0;;-1:-1:-1;;;;;;22123:22:0::1;-1:-1:-1::0;;;;;22123:22:0;::::1;;::::0;;22080:755:::1;;;22211:4;22178:11;:20;22190:7;22178:20;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;22178:20:0;;;-1:-1:-1;;;;;22178:30:0;::::1;::::0;;;;;;;:37;;-1:-1:-1;;22178:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22247:21:::1;22236:7;:32;;;;;;;;;22232:111;;;-1:-1:-1::0;;;;;22289:24:0;;::::1;;::::0;;;:14:::1;:24;::::0;;;;:38;;-1:-1:-1;;;;;;22289:38:0::1;::::0;;::::1;::::0;;;::::1;::::0;;22232:111:::1;22360:15;22381:34;22397:8;22407:7;22381:15;:34::i;:::-;22359:56;;;22435:10;22430:394;;22466:8;:17;22475:7;22466:17;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;::::1;::::0;;;;;;-1:-1:-1;22466:17:0;;;:32;;::::1;::::0;::::1;::::0;;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;22466:32:0::1;-1:-1:-1::0;;;;;22466:32:0;::::1;;::::0;;22534:21:::1;22523:7;:32;;;;;;;;;:66;;;-1:-1:-1::0;22570:19:0::1;22559:7;:30;;;;;;;;;22523:66;22519:290;;;22615:8;22625:13:::0;22642:34:::1;22658:8;22668:7;22642:15;:34::i;:::-;22614:62;;;;22703:3;22699:91;;;22742:8;:17;22751:7;22742:17;;;;;;;;;;;;;;;;;;;;;;;;;;;22760:5;22742:24;;;;;;;;;::::0;;;::::1;::::0;;;::::1;22735:31:::0;;-1:-1:-1;;;;;;22735:31:0::1;::::0;;22699:91:::1;22519:290;;;22080:755;;22873:7;22850:37;;;;;;;;;::::0;;-1:-1:-1;;;;;22850:37:0;::::1;::::0;;22882:4:::1;22850:37;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;;::::1;21877:1018:::0;;;:::o;27970:391::-;28053:14;28089:99;28169:6;-1:-1:-1;;;;;28154:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28154:33:0;28105:39;;;-1:-1:-1;;;28105:39:0;;;;28150:37;;;;:2;:37;;28089:56;;-1:-1:-1;;;;;28128:3:0;28105:37;;;;:39;;;;;28154:33;;28105:39;;;;;;;;:37;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28105:39:0;28089:7;;28101:43;;:2;:43;28089:11;:56::i;:::-;:60;;:99::i;:::-;-1:-1:-1;;;;;28205:42:0;;:34;:42;;;-1:-1:-1;;;;;;;;;;;28205:34:0;:42;:34;:42;;;28080:108;;-1:-1:-1;28205:42:0;;28201:153;;;-1:-1:-1;;;;;28292:22:0;;;;;;;:14;:22;;;;;;;;;;28273:69;;-1:-1:-1;;;28273:69:0;;;;;;;;;;;;;;;;;28292:22;;;;;28273:52;;:69;;;;;;;;;;;28292:22;28273:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28273:69:0;;-1:-1:-1;28201:153:0;27970:391;;;;:::o;13164:24::-;;;;:::o;24923:1652::-;24984:15;;;;:23;;:15;:23;24976:68;;;;;-1:-1:-1;;;24976:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25057:17;;:::i;:::-;25077:15;25093:6;25077:23;;;;;;;;;;;;;;;;25057:43;;;;;;;;;25077:23;;;;;25057:43;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25057:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25122:12;;;25057:43;;-1:-1:-1;25121:13:0;25113:51;;;;;-1:-1:-1;;;25113:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;25184:4;:13;;;25183:14;25175:59;;;;;-1:-1:-1;;;25175:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25269:4;:16;;;25253:12;:32;;25245:66;;;;;-1:-1:-1;;;25245:66:0;;;;;;;;;;;;-1:-1:-1;;;25245:66:0;;;;;;;;;;;;;;;25345:11;25328:13;;:28;;;;;;;;;25324:1130;;;25404:13;;;;25391:4;:27;;-1:-1:-1;;;;;;25391:27:0;-1:-1:-1;;;;;25391:27:0;;;;;;;;;25324:1130;;;25495:4;25451:11;:26;25463:4;:13;;;25451:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25451:26:0;;;25478:13;;;;-1:-1:-1;;;;;25451:41:0;;;;;;;;:48;;-1:-1:-1;;25451:48:0;;;;;;;;;;25537:21;25520:13;;:38;;;;;;;;;25516:126;;;25611:15;;;;;25594:13;;;;;-1:-1:-1;;;;;25579:29:0;;;;;;;:14;:29;;;;;;:47;;-1:-1:-1;;;;;;25579:47:0;;;;;;;;;;;25516:126;25657:15;25678:45;25694:4;:13;;;25709:4;:13;;;25678:15;:45::i;:::-;25656:67;;;25743:10;25738:705;;25774:8;:23;25783:4;:13;;;25774:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25774:23:0;;;25803:13;;;;25774:43;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25774:43:0;-1:-1:-1;;;;;25774:43:0;;;;;;;;;25859:21;25842:13;;:38;;;;;;;;;25838:590;;;25906:8;25916:13;25933:51;25949:4;:13;;;25964:19;25933:15;:51::i;:::-;25905:79;;;;26011:3;26007:103;;;26059:19;26050:29;;:8;:29;;;:36;;26080:5;;26050:36;;;;;;;;;;;;;;;26043:43;;-1:-1:-1;;;;;;26043:43:0;;;26007:103;25838:590;;;;;26156:19;26139:13;;:36;;;;;;;;;26135:293;;;26201:8;26211:13;26228:53;26244:4;:13;;;26259:21;26228:15;:53::i;:::-;26200:81;;;;26308:3;26304:105;;;26356:21;26347:31;;:8;:31;;;:38;;26379:5;;26347:38;;;;;;;;;;;;;;;26340:45;;-1:-1:-1;;;;;;26340:45:0;;;26304:105;26135:293;;;25324:1130;;26499:4;26464:15;26480:6;26464:23;;;;;;;;;;;;;;;;:32;:23;;;;;:32;:39;;;;;;;-1:-1:-1;;26464:39:0;;;;;;;;;26547:13;;26519:48;;;;;;;;;26532:4;:13;;;26562:4;26519:48;;;;-1:-1:-1;;;;;26519:48:0;;;;;;;;;;;;;;;;;;;;;;;24923:1652;;:::o;9843:136::-;9901:7;9928:43;9932:1;9935;9928:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;9921:50;9843:136;-1:-1:-1;;;9843:136:0:o;8555:365::-;8743:60;;;-1:-1:-1;;;;;8743:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8743:60:0;-1:-1:-1;;;8743:60:0;;;8709:105;;;;8674:12;;8688:17;;8709:19;;;;8743:60;8709:105;;;8743:60;8709:105;;8743:60;8709:105;;;;;;;;;;-1:-1:-1;;8709:105:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8673:141;;;;8835:7;:57;;;;-1:-1:-1;8847:11:0;;:16;;:44;;;8878:4;8867:24;;;;;;;;;;;;;;;-1:-1:-1;8867:24:0;8847:44;8827:85;;;;;-1:-1:-1;;;8827:85:0;;;;;;;;;;;;-1:-1:-1;;;8827:85:0;;;;;;;;;;;;;;;8555:365;;;;;:::o;9654:181::-;9712:7;9744:5;;;9768:6;;;;9760:46;;;;;-1:-1:-1;;;9760:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;10187:250;10245:7;10269:6;10265:47;;-1:-1:-1;10299:1:0;10292:8;;10265:47;10336:5;;;10340:1;10336;:5;:1;10360:5;;;;;:10;10352:56;;;;-1:-1:-1;;;10352:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8140:407;8355:70;;;-1:-1:-1;;;;;8355:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8355:70:0;-1:-1:-1;;;8355:70:0;;;8321:115;;;;8286:12;;8300:17;;8321:19;;;;8355:70;8321:115;;;8355:70;8321:115;;8355:70;8321:115;;;;;;;;;;-1:-1:-1;;8321:115:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8285:151;;;;8457:7;:57;;;;-1:-1:-1;8469:11:0;;:16;;:44;;;8500:4;8489:24;;;;;;;;;;;;;;;-1:-1:-1;8489:24:0;8469:44;8449:90;;;;;-1:-1:-1;;;8449:90:0;;;;;;;;;;;;-1:-1:-1;;;8449:90:0;;;;;;;;;;;;;;;8140:407;;;;;;:::o;10445:132::-;10503:7;10530:39;10534:1;10537;10530:39;;;;;;;;;;;;;;;;;:3;:39::i;9987:192::-;10073:7;10109:12;10101:6;;;;10093:29;;;;-1:-1:-1;;;10093:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;10145:5:0;;;9987:192::o;10585:275::-;10671:7;10706:12;10699:5;10691:28;;;;-1:-1:-1;;;10691:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10730:9;10746:1;10742;:5;;;;;;10730:17;;10782:1;10778;:5;;;;;;10774:1;10770;:5;:13;10765:1;:18;10758:26;;;;10851:1;10585:275;-1:-1:-1;;;;10585:275:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://66aa62093962779da8f389172be79978b48d4f17837919e8f4a03dd1d4274cc6
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $2.72 | 45.8416 | $124.69 |
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.