Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00Token Holdings
More Info
Private Name Tags
ContractCreator
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
UMAFarmingMar
Compiler Version
v0.5.15+commit.6a57276f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-02-09 */ pragma solidity ^0.5.15; pragma experimental ABIEncoderV2; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } interface UniswapPair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } /// Helper for a reserve contract to perform uniswap, price bound actions contract UniHelper{ using SafeMath for uint256; uint256 internal constant ONE = 10**18; function _mintLPToken( UniswapPair uniswap_pair, IERC20 token0, IERC20 token1, uint256 amount_token0, address token1_source ) internal { (uint256 reserve0, uint256 reserve1, ) = uniswap_pair .getReserves(); uint256 quoted = quote(reserve1, reserve0); uint256 amount_token1 = quoted.mul(amount_token0).div(ONE); token0.transfer(address(uniswap_pair), amount_token0); token1.transferFrom(token1_source, address(uniswap_pair), amount_token1); UniswapPair(uniswap_pair).mint(address(this)); } function _burnLPToken(UniswapPair uniswap_pair, address destination) internal { uniswap_pair.transfer( address(uniswap_pair), uniswap_pair.balanceOf(address(this)) ); UniswapPair(uniswap_pair).burn(destination); } function quote(uint256 purchaseAmount, uint256 saleAmount) internal view returns (uint256) { return purchaseAmount.mul(ONE).div(saleAmount); } } contract YamGoverned { event NewGov(address oldGov, address newGov); event NewPendingGov(address oldPendingGov, address newPendingGov); address public gov; address public pendingGov; modifier onlyGov { require(msg.sender == gov, "!gov"); _; } function _setPendingGov(address who) public onlyGov { address old = pendingGov; pendingGov = who; emit NewPendingGov(old, who); } function _acceptGov() public { require(msg.sender == pendingGov, "!pendingGov"); address oldgov = gov; gov = pendingGov; pendingGov = address(0); emit NewGov(oldgov, gov); } } contract YamSubGoverned is YamGoverned { /** * @notice Event emitted when a sub gov is enabled/disabled */ event SubGovModified( address account, bool isSubGov ); /// @notice sub governors mapping(address => bool) public isSubGov; modifier onlyGovOrSubGov() { require(msg.sender == gov || isSubGov[msg.sender]); _; } function setIsSubGov(address subGov, bool _isSubGov) public onlyGov { isSubGov[subGov] = _isSubGov; emit SubGovModified(subGov, _isSubGov); } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call.value(amount)(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call.value(weiValue)(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // computes square roots using the babylonian method // https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method library Babylonian { function sqrt(uint y) internal pure returns (uint z) { if (y > 3) { z = y; uint x = y / 2 + 1; while (x < z) { z = x; x = (y / x + x) / 2; } } else if (y != 0) { z = 1; } // else z = 0 } } // a library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format)) library FixedPoint { // range: [0, 2**112 - 1] // resolution: 1 / 2**112 struct uq112x112 { uint224 _x; } // range: [0, 2**144 - 1] // resolution: 1 / 2**112 struct uq144x112 { uint _x; } uint8 private constant RESOLUTION = 112; uint private constant Q112 = uint(1) << RESOLUTION; uint private constant Q224 = Q112 << RESOLUTION; // encode a uint112 as a UQ112x112 function encode(uint112 x) internal pure returns (uq112x112 memory) { return uq112x112(uint224(x) << RESOLUTION); } // encodes a uint144 as a UQ144x112 function encode144(uint144 x) internal pure returns (uq144x112 memory) { return uq144x112(uint256(x) << RESOLUTION); } // divide a UQ112x112 by a uint112, returning a UQ112x112 function div(uq112x112 memory self, uint112 x) internal pure returns (uq112x112 memory) { require(x != 0, 'FixedPoint: DIV_BY_ZERO'); return uq112x112(self._x / uint224(x)); } // multiply a UQ112x112 by a uint, returning a UQ144x112 // reverts on overflow function mul(uq112x112 memory self, uint y) internal pure returns (uq144x112 memory) { uint z; require(y == 0 || (z = uint(self._x) * y) / y == uint(self._x), "FixedPoint: MULTIPLICATION_OVERFLOW"); return uq144x112(z); } // returns a UQ112x112 which represents the ratio of the numerator to the denominator // equivalent to encode(numerator).div(denominator) function fraction(uint112 numerator, uint112 denominator) internal pure returns (uq112x112 memory) { require(denominator > 0, "FixedPoint: DIV_BY_ZERO"); return uq112x112((uint224(numerator) << RESOLUTION) / denominator); } // decode a UQ112x112 into a uint112 by truncating after the radix point function decode(uq112x112 memory self) internal pure returns (uint112) { return uint112(self._x >> RESOLUTION); } // decode a UQ144x112 into a uint144 by truncating after the radix point function decode144(uq144x112 memory self) internal pure returns (uint144) { return uint144(self._x >> RESOLUTION); } // take the reciprocal of a UQ112x112 function reciprocal(uq112x112 memory self) internal pure returns (uq112x112 memory) { require(self._x != 0, 'FixedPoint: ZERO_RECIPROCAL'); return uq112x112(uint224(Q224 / self._x)); } // square root of a UQ112x112 function sqrt(uq112x112 memory self) internal pure returns (uq112x112 memory) { return uq112x112(uint224(Babylonian.sqrt(uint256(self._x)) << 56)); } } // library with helper methods for oracles that are concerned with computing average prices library UniswapV2OracleLibrary { using FixedPoint for *; // helper function that returns the current block timestamp within the range of uint32, i.e. [0, 2**32 - 1] function currentBlockTimestamp() internal view returns (uint32) { return uint32(block.timestamp % 2 ** 32); } // produces the cumulative price using counterfactuals to save gas and avoid a call to sync. function currentCumulativePrices( address pair, bool isToken0 ) internal view returns (uint priceCumulative, uint32 blockTimestamp) { blockTimestamp = currentBlockTimestamp(); (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast) = UniswapPair(pair).getReserves(); if (isToken0) { priceCumulative = UniswapPair(pair).price0CumulativeLast(); // if time has elapsed since the last update on the pair, mock the accumulated price values if (blockTimestampLast != blockTimestamp) { // subtraction overflow is desired uint32 timeElapsed = blockTimestamp - blockTimestampLast; // addition overflow is desired // counterfactual priceCumulative += uint(FixedPoint.fraction(reserve1, reserve0)._x) * timeElapsed; } } else { priceCumulative = UniswapPair(pair).price1CumulativeLast(); // if time has elapsed since the last update on the pair, mock the accumulated price values if (blockTimestampLast != blockTimestamp) { // subtraction overflow is desired uint32 timeElapsed = blockTimestamp - blockTimestampLast; // addition overflow is desired // counterfactual priceCumulative += uint(FixedPoint.fraction(reserve0, reserve1)._x) * timeElapsed; } } } } // Hardcoding a lot of constants and stripping out unnecessary things because of high gas prices contract TWAPBounded2 { using SafeMath for uint256; uint256 internal constant BASE = 10**18; uint256 internal constant ONE = 10**18; /// @notice Current uniswap pair for purchase & sale tokens UniswapPair internal uniswap_pair = UniswapPair( 0x683ea972fFa19b7BaD6d6be0440E0A8465dBA71C ); IERC20 internal constant WETH = IERC20( 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 ); IERC20 internal constant MAR_UGAS = IERC20( 0x4e110603e70B0b5f1c403ee543b37e1F1244Cf28 ); /// @notice last cumulative price update time uint32 internal block_timestamp_last; /// @notice last cumulative price; uint256 internal price_cumulative_last; /// @notice Minimum amount of time since TWAP set uint256 internal constant MIN_TWAP_TIME = 60 * 60; // 1 hour /// @notice Maximum amount of time since TWAP set uint256 internal constant MAX_TWAP_TIME = 120 * 60; // 2 hours /// @notice % bound away from TWAP price uint256 internal constant TWAP_BOUNDS = 5 * 10**15; function quote(uint256 purchaseAmount, uint256 saleAmount) internal view returns (uint256) { return purchaseAmount.mul(ONE).div(saleAmount); } function bounds(uint256 uniswap_quote) internal view returns (uint256) { uint256 minimum = uniswap_quote.mul(BASE.sub(TWAP_BOUNDS)).div(BASE); return minimum; } function bounds_max(uint256 uniswap_quote) internal view returns (uint256) { uint256 maximum = uniswap_quote.mul(BASE.add(TWAP_BOUNDS)).div(BASE); return maximum; } function withinBounds(uint256 purchaseAmount, uint256 saleAmount) internal view returns (bool) { uint256 uniswap_quote = consult(); uint256 quoted = quote(purchaseAmount, saleAmount); uint256 minimum = bounds(uniswap_quote); uint256 maximum = bounds_max(uniswap_quote); return quoted > minimum && quoted < maximum; } // callable by anyone function update_twap() public { ( uint256 sell_token_priceCumulative, uint32 blockTimestamp ) = UniswapV2OracleLibrary.currentCumulativePrices( address(uniswap_pair), true ); uint32 timeElapsed = blockTimestamp - block_timestamp_last; // overflow is impossible // ensure that it's been long enough since the last update require(timeElapsed >= MIN_TWAP_TIME, "OTC: MIN_TWAP_TIME NOT ELAPSED"); price_cumulative_last = sell_token_priceCumulative; block_timestamp_last = blockTimestamp; } function consult() internal view returns (uint256) { ( uint256 sell_token_priceCumulative, uint32 blockTimestamp ) = UniswapV2OracleLibrary.currentCumulativePrices( address(uniswap_pair), true ); uint32 timeElapsed = blockTimestamp - block_timestamp_last; // overflow is impossible // overflow is desired uint256 priceAverageSell = uint256( uint224( (sell_token_priceCumulative - price_cumulative_last) / timeElapsed ) ); // single hop uint256 purchasePrice; if (priceAverageSell > uint192(-1)) { // eat loss of precision // effectively: (x / 2**112) * 1e18 purchasePrice = (priceAverageSell >> 112) * ONE; } else { // cant overflow // effectively: (x * 1e18 / 2**112) purchasePrice = (priceAverageSell * ONE) >> 112; } return purchasePrice; } modifier timeBoundsCheck() { uint256 elapsed_since_update = block.timestamp - block_timestamp_last; require( block.timestamp - block_timestamp_last < MAX_TWAP_TIME, "Cumulative price snapshot too old" ); require( block.timestamp - block_timestamp_last > MIN_TWAP_TIME, "Cumulative price snapshot too new" ); _; } } interface SynthMinter { struct Unsigned { uint256 rawValue; } struct PositionData { Unsigned tokensOutstanding; // Tracks pending withdrawal requests. A withdrawal request is pending if `withdrawalRequestPassTimestamp != 0`. uint256 withdrawalRequestPassTimestamp; Unsigned withdrawalRequestAmount; // Raw collateral value. This value should never be accessed directly -- always use _getFeeAdjustedCollateral(). // To add or remove collateral, use _addCollateral() and _removeCollateral(). Unsigned rawCollateral; // Tracks pending transfer position requests. A transfer position request is pending if `transferPositionRequestPassTimestamp != 0`. uint256 transferPositionRequestPassTimestamp; } function create( Unsigned calldata collateralAmount, Unsigned calldata numTokens ) external; function redeem(Unsigned calldata debt_amount) external returns(Unsigned memory); function withdraw(Unsigned calldata collateral_amount) external; function positions(address account) external returns (PositionData memory); function settleExpired() external returns (Unsigned memory); function expire() external; } contract UMAFarmingMar is TWAPBounded2, UniHelper, YamSubGoverned { enum ACTION {ENTER, EXIT} constructor(address pendingGov_) public { gov = msg.sender; pendingGov = pendingGov_; } SynthMinter minter = SynthMinter( 0xfA3AA7EE08399A4cE0B4921c85AB7D645Ccac669 ); bool completed = true; ACTION action; address internal constant RESERVES = address( 0x97990B693835da58A281636296D2Bf02787DEa17 ); // ========= MINTING ========= function _mint(uint256 collateral_amount, uint256 mint_amount) internal { WETH.transferFrom(RESERVES, address(this), collateral_amount); WETH.approve(address(minter), uint256(-1)); minter.create( SynthMinter.Unsigned(collateral_amount), SynthMinter.Unsigned(mint_amount) ); } function _repayAndWithdraw() internal { MAR_UGAS.approve(address(minter), uint256(-1)); SynthMinter.PositionData memory position = minter.positions( address(this) ); uint256 ugasBalance = MAR_UGAS.balanceOf(address(this)); // We might end up with more MAR UGAS than we have debt. These will get sent to the treasury for future redemption if (ugasBalance >= position.tokensOutstanding.rawValue) { minter.redeem(position.tokensOutstanding); } else { // We might end up with more debt than we have MAR UGAS. In this case, only redeem MAX(minSponsorTokens, ugasBalance) // The extra debt will need to be handled externally, by either waiting until expiry, others sponsoring the debt for later reimbursement, or purchasing the ugas minter.redeem( SynthMinter.Unsigned( position.tokensOutstanding.rawValue - ugasBalance <= 5 * 10**18 ? position.tokensOutstanding.rawValue - 5 * 10**18 : ugasBalance ) ); } } // ========= ENTER ========== function enter() public timeBoundsCheck { require(action == ACTION.ENTER, "Wrong action"); require(!completed, "Action completed"); uint256 ugasReserves; uint256 wethReserves; (ugasReserves, wethReserves, ) = uniswap_pair.getReserves(); require( withinBounds(wethReserves, ugasReserves), "Market rate is outside bounds" ); uint256 wethBalance = WETH.balanceOf(RESERVES); require(wethBalance > 100*(10**18), "Not enough ETH"); // This is so we can be sure the FEB contract exited // Since we are aiming for a CR of 4, we can mint with up to 80% of reserves // We mint slightly less so we can be sure there will be enough WETH uint256 collateral_amount = (wethBalance * 79) / 100; uint256 mint_amount = (collateral_amount * ugasReserves) / wethReserves / 4; _mint(collateral_amount, mint_amount); _mintLPToken(uniswap_pair, MAR_UGAS, WETH, mint_amount, RESERVES); completed = true; } // ========== EXIT ========== function exit() public timeBoundsCheck { require(action == ACTION.EXIT); require(!completed, "Action completed"); uint256 ugasReserves; uint256 wethReserves; (ugasReserves, wethReserves, ) = uniswap_pair.getReserves(); require( withinBounds(wethReserves, ugasReserves), "Market rate is outside bounds" ); _burnLPToken(uniswap_pair, address(this)); _repayAndWithdraw(); WETH.transfer(RESERVES, WETH.balanceOf(address(this))); uint256 ugasBalance = MAR_UGAS.balanceOf(address(this)); if (ugasBalance > 0) { MAR_UGAS.transfer(RESERVES, ugasBalance); } completed = true; } // ========= GOVERNANCE ONLY ACTION APPROVALS ========= function _approveEnter() public onlyGovOrSubGov { completed = false; action = ACTION.ENTER; } function _approveExit() public onlyGovOrSubGov { completed = false; action = ACTION.EXIT; } // ========= GOVERNANCE ONLY SAFTEY MEASURES ========= function _redeem(uint256 debt_to_pay) public onlyGovOrSubGov { minter.redeem(SynthMinter.Unsigned(debt_to_pay)); } function _withdrawCollateral(uint256 amount_to_withdraw) public onlyGovOrSubGov { minter.withdraw(SynthMinter.Unsigned(amount_to_withdraw)); } function _settleExpired() public onlyGovOrSubGov { minter.settleExpired(); } function masterFallback(address target, bytes memory data) public onlyGovOrSubGov { target.call.value(0)(data); } function _getTokenFromHere(address token) public onlyGovOrSubGov { IERC20 t = IERC20(token); t.transfer(RESERVES, t.balanceOf(address(this))); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"pendingGov_","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldGov","type":"address"},{"indexed":false,"internalType":"address","name":"newGov","type":"address"}],"name":"NewGov","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldPendingGov","type":"address"},{"indexed":false,"internalType":"address","name":"newPendingGov","type":"address"}],"name":"NewPendingGov","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isSubGov","type":"bool"}],"name":"SubGovModified","type":"event"},{"constant":false,"inputs":[],"name":"_acceptGov","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"_approveEnter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"_approveExit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"_getTokenFromHere","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"debt_to_pay","type":"uint256"}],"name":"_redeem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"_setPendingGov","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"_settleExpired","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount_to_withdraw","type":"uint256"}],"name":"_withdrawCollateral","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"enter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"exit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"gov","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isSubGov","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"masterFallback","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"pendingGov","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"subGov","type":"address"},{"internalType":"bool","name":"_isSubGov","type":"bool"}],"name":"setIsSubGov","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"update_twap","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052600080546001600160a01b031990811673683ea972ffa19b7bad6d6be0440e0a8465dba71c179091556005805460ff60a01b19921673fa3aa7ee08399a4ce0b4921c85ab7d645ccac6691791909116600160a01b1790553480156200006857600080fd5b50604051620027c8380380620027c88339810160408190526200008b91620000d2565b60028054336001600160a01b031991821617909155600380549091166001600160a01b039290921691909117905562000127565b8051620000cc816200010d565b92915050565b600060208284031215620000e557600080fd5b6000620000f38484620000bf565b949350505050565b60006001600160a01b038216620000cc565b6200011881620000fb565b81146200012457600080fd5b50565b61269180620001376000396000f3fe608060405234801561001057600080fd5b50600436106100d05760003560e01c806312d43a51146100d557806325240810146100f357806328a3dd2c146100fb578063343ac5331461011057806345cd1b17146101235780634bda2e201461012b57806373f03dff146101335780638d0cc11114610146578063aaeae5c314610159578063b559316314610161578063b909650214610181578063bd7d8df114610194578063d1dbf977146101a7578063e97dcb62146101af578063e9fad8ee146101b7578063fe26f479146101bf575b600080fd5b6100dd6101c7565b6040516100ea91906123b2565b60405180910390f35b6100dd6101d6565b61010e61010936600461203b565b6101e5565b005b61010e61011e36600461203b565b6102a6565b61010e610346565b61010e6103d4565b61010e610141366004611eed565b61046b565b61010e610154366004611f4d565b6104f4565b61010e61057c565b61017461016f366004611eed565b6105d5565b6040516100ea9190612439565b61010e61018f366004611f13565b6105ea565b61010e6101a2366004611eed565b61066a565b61010e6107ab565b61010e610801565b61010e610adf565b61010e610ec6565b6002546001600160a01b031681565b6003546001600160a01b031681565b6002546001600160a01b031633148061020d57503360009081526004602052604090205460ff165b61021657600080fd5b600554604080516020810182528381529051632f8d78e560e11b81526001600160a01b0390921691635f1af1ca9161025091600401612518565b602060405180830381600087803b15801561026a57600080fd5b505af115801561027e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506102a29190810190611fd0565b5050565b6002546001600160a01b03163314806102ce57503360009081526004602052604090205460ff165b6102d757600080fd5b600554604080516020810182528381529051631f73d2e760e11b81526001600160a01b0390921691633ee7a5ce9161031191600401612518565b600060405180830381600087803b15801561032b57600080fd5b505af115801561033f573d6000803e3d6000fd5b5050505050565b600080548190610360906001600160a01b03166001610f82565b600054919350915063ffffffff600160a01b9091048116820390610e1090821610156103a75760405162461bcd60e51b815260040161039e90612458565b60405180910390fd5b506001919091556000805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b6003546001600160a01b031633146103fe5760405162461bcd60e51b815260040161039e906124a8565b60028054600380546001600160a01b03198084166001600160a01b0383811691909117958690559116909155604051918116927f1f14cfc03e486d23acee577b07bc0b3b23f4888c91fcdba5e0fef5a2549d55239261046092859216906123c0565b60405180910390a150565b6002546001600160a01b031633146104955760405162461bcd60e51b815260040161039e90612488565b600380546001600160a01b038381166001600160a01b03198316179092556040519116907f6163d5b9efd962645dd649e6e48a61bcb0f9df00997a2398b80d135a9ab0c61e906104e890839085906123c0565b60405180910390a15050565b6002546001600160a01b031633148061051c57503360009081526004602052604090205460ff165b61052557600080fd5b816001600160a01b031660008260405161053f91906123a6565b60006040518083038185875af1925050503d806000811461033f576040519150601f19603f3d011682016040523d82523d6000602084013e61033f565b6002546001600160a01b03163314806105a457503360009081526004602052604090205460ff165b6105ad57600080fd5b6005805460ff60a01b19811682556001919061ffff60a01b1916600160a81b835b0217905550565b60046020526000908152604090205460ff1681565b6002546001600160a01b031633146106145760405162461bcd60e51b815260040161039e90612488565b6001600160a01b03821660009081526004602052604090819020805460ff1916831515179055517f89a72fa31450add4a5b7b6e785ea3918017bd399450de805617222369b8574f6906104e89084908490612403565b6002546001600160a01b031633148061069257503360009081526004602052604090205460ff165b61069b57600080fd5b6040516370a0823160e01b815281906001600160a01b0382169063a9059cbb907397990b693835da58a281636296d2bf02787dea179083906370a08231906106e79030906004016123b2565b60206040518083038186803b1580156106ff57600080fd5b505afa158015610713573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506107379190810190612059565b6040518363ffffffff1660e01b815260040161075492919061241e565b602060405180830381600087803b15801561076e57600080fd5b505af1158015610782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506107a69190810190611f94565b505050565b6002546001600160a01b03163314806107d357503360009081526004602052604090205460ff165b6107dc57600080fd5b6005805460ff60a01b19811682556000919061ffff60a01b1916600160a81b836105ce565b600054600160a01b900463ffffffff164203611c2081106108345760405162461bcd60e51b815260040161039e90612468565b600054610e10600160a01b90910463ffffffff164203116108675760405162461bcd60e51b815260040161039e906124b8565b6000600554600160a81b900460ff16600181111561088157fe5b1461089e5760405162461bcd60e51b815260040161039e90612498565b600554600160a01b900460ff16156108c85760405162461bcd60e51b815260040161039e906124f8565b6000805460408051630240bc6b60e21b8152905183926001600160a01b031691630902f1ac916004808301926060929190829003018186803b15801561090d57600080fd5b505afa158015610921573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506109459190810190611fee565b506001600160701b0391821693501690506109608183611178565b61097c5760405162461bcd60e51b815260040161039e906124c8565b6040516370a0823160e01b815260009073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2906370a08231906109ca907397990b693835da58a281636296d2bf02787dea17906004016123b2565b60206040518083038186803b1580156109e257600080fd5b505afa1580156109f6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a1a9190810190612059565b905068056bc75e2d631000008111610a445760405162461bcd60e51b815260040161039e906124e8565b6064604f820204600060048486840281610a5a57fe5b0481610a6257fe5b049050610a6f82826111c8565b600054610ac4906001600160a01b0316734e110603e70b0b5f1c403ee543b37e1f1244cf2873c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2847397990b693835da58a281636296d2bf02787dea1761137f565b50506005805460ff60a01b1916600160a01b17905550505050565b600054600160a01b900463ffffffff164203611c208110610b125760405162461bcd60e51b815260040161039e90612468565b600054610e10600160a01b90910463ffffffff16420311610b455760405162461bcd60e51b815260040161039e906124b8565b6001600554600160a81b900460ff166001811115610b5f57fe5b14610b6957600080fd5b600554600160a01b900460ff1615610b935760405162461bcd60e51b815260040161039e906124f8565b6000805460408051630240bc6b60e21b8152905183926001600160a01b031691630902f1ac916004808301926060929190829003018186803b158015610bd857600080fd5b505afa158015610bec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610c109190810190611fee565b506001600160701b039182169350169050610c2b8183611178565b610c475760405162461bcd60e51b815260040161039e906124c8565b600054610c5d906001600160a01b0316306115d3565b610c6561174c565b6040516370a0823160e01b815273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc29063a9059cbb907397990b693835da58a281636296d2bf02787dea179083906370a0823190610cba9030906004016123b2565b60206040518083038186803b158015610cd257600080fd5b505afa158015610ce6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d0a9190810190612059565b6040518363ffffffff1660e01b8152600401610d2792919061241e565b602060405180830381600087803b158015610d4157600080fd5b505af1158015610d55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d799190810190611f94565b506040516370a0823160e01b8152600090734e110603e70b0b5f1c403ee543b37e1f1244cf28906370a0823190610db49030906004016123b2565b60206040518083038186803b158015610dcc57600080fd5b505afa158015610de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610e049190810190612059565b90508015610ead5760405163a9059cbb60e01b8152734e110603e70b0b5f1c403ee543b37e1f1244cf289063a9059cbb90610e59907397990b693835da58a281636296d2bf02787dea1790859060040161241e565b602060405180830381600087803b158015610e7357600080fd5b505af1158015610e87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610eab9190810190611f94565b505b50506005805460ff60a01b1916600160a01b1790555050565b6002546001600160a01b0316331480610eee57503360009081526004602052604090205460ff165b610ef757600080fd5b600560009054906101000a90046001600160a01b03166001600160a01b031663fcccedc76040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610f4757600080fd5b505af1158015610f5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f7f9190810190611fd0565b50565b600080610f8d611a4f565b90506000806000866001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015610fcd57600080fd5b505afa158015610fe1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110059190810190611fee565b92509250925085156110c257866001600160a01b0316635909c0d56040518163ffffffff1660e01b815260040160206040518083038186803b15801561104a57600080fd5b505afa15801561105e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110829190810190612059565b94508363ffffffff168163ffffffff16146110bd5780840363ffffffff81166110ab8486611a59565b516001600160e01b0316029590950194505b61116e565b866001600160a01b0316635a3d54936040518163ffffffff1660e01b815260040160206040518083038186803b1580156110fb57600080fd5b505afa15801561110f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506111339190810190612059565b94508363ffffffff168163ffffffff161461116e5780840363ffffffff811661115c8585611a59565b516001600160e01b0316029590950194505b5050509250929050565b600080611183611acd565b905060006111918585611b69565b9050600061119e83611b8e565b905060006111ab84611bc4565b905081831180156111bb57508083105b9450505050505b92915050565b6040516323b872dd60e01b815273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2906323b872dd90611217907397990b693835da58a281636296d2bf02787dea1790309087906004016123db565b602060405180830381600087803b15801561123157600080fd5b505af1158015611245573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506112699190810190611f94565b5060055460405163095ea7b360e01b815273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc29163095ea7b3916112b0916001600160a01b0316906000199060040161241e565b602060405180830381600087803b1580156112ca57600080fd5b505af11580156112de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113029190810190611f94565b5060055460408051602080820183528582528251908101835284815291516335d17cc960e11b81526001600160a01b0390931692636ba2f992926113499291600401612526565b600060405180830381600087803b15801561136357600080fd5b505af1158015611377573d6000803e3d6000fd5b505050505050565b600080866001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156113bb57600080fd5b505afa1580156113cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113f39190810190611fee565b506001600160701b031691506001600160701b0316915060006114168284611b69565b90506000611442670de0b6b3a7640000611436848963ffffffff611bed16565b9063ffffffff611c2716565b60405163a9059cbb60e01b81529091506001600160a01b0389169063a9059cbb90611473908c908a9060040161241e565b602060405180830381600087803b15801561148d57600080fd5b505af11580156114a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506114c59190810190611f94565b506040516323b872dd60e01b81526001600160a01b038816906323b872dd906114f69088908d9086906004016123db565b602060405180830381600087803b15801561151057600080fd5b505af1158015611524573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115489190810190611f94565b506040516335313c2160e11b81526001600160a01b038a1690636a627842906115759030906004016123b2565b602060405180830381600087803b15801561158f57600080fd5b505af11580156115a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115c79190810190612059565b50505050505050505050565b6040516370a0823160e01b81526001600160a01b0383169063a9059cbb90849083906370a08231906116099030906004016123b2565b60206040518083038186803b15801561162157600080fd5b505afa158015611635573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116599190810190612059565b6040518363ffffffff1660e01b815260040161167692919061241e565b602060405180830381600087803b15801561169057600080fd5b505af11580156116a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116c89190810190611f94565b5060405163226bf2d160e21b81526001600160a01b038316906389afcb44906116f59084906004016123b2565b6040805180830381600087803b15801561170e57600080fd5b505af1158015611722573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506117469190810190612077565b50505050565b60055460405163095ea7b360e01b8152734e110603e70b0b5f1c403ee543b37e1f1244cf289163095ea7b391611792916001600160a01b0316906000199060040161241e565b602060405180830381600087803b1580156117ac57600080fd5b505af11580156117c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506117e49190810190611f94565b506117ed611d30565b60055460405163055f575160e41b81526001600160a01b03909116906355f575109061181d9030906004016123b2565b60a060405180830381600087803b15801561183757600080fd5b505af115801561184b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061186f9190810190611fb2565b6040516370a0823160e01b8152909150600090734e110603e70b0b5f1c403ee543b37e1f1244cf28906370a08231906118ac9030906004016123b2565b60206040518083038186803b1580156118c457600080fd5b505afa1580156118d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506118fc9190810190612059565b8251519091508110611990576005548251604051632f8d78e560e11b81526001600160a01b0390921691635f1af1ca9161193891600401612518565b602060405180830381600087803b15801561195257600080fd5b505af1158015611966573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061198a9190810190611fd0565b506102a2565b60055460408051602081019091528351516001600160a01b0390921691635f1af1ca91908190674563918244f400009086900311156119cf57846119de565b855151674563918244f3ffff19015b8152506040518263ffffffff1660e01b81526004016119fd9190612518565b602060405180830381600087803b158015611a1757600080fd5b505af1158015611a2b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506107a69190810190611fd0565b63ffffffff421690565b611a61611d71565b6000826001600160701b031611611a8a5760405162461bcd60e51b815260040161039e90612508565b6040805160208101909152806001600160701b038416600160701b600160e01b03607087901b1681611ab857fe5b046001600160e01b0316815250905092915050565b6000805481908190611ae9906001600160a01b03166001610f82565b9150915060008060149054906101000a900463ffffffff168203905060008163ffffffff16600154850381611b1a57fe5b046001600160e01b0316905060006000196001600160c01b0316821115611b505750607081901c670de0b6b3a764000002611b60565b50670de0b6b3a7640000810260701c5b94505050505090565b6000611b878261143685670de0b6b3a764000063ffffffff611bed16565b9392505050565b600080611b87670de0b6b3a7640000611436611bb7826611c37937e0800063ffffffff611c6616565b869063ffffffff611bed16565b600080611b87670de0b6b3a7640000611436611bb7826611c37937e0800063ffffffff611ca816565b600082611bfc575060006111c2565b82820282848281611c0957fe5b0414611b875760405162461bcd60e51b815260040161039e906124d8565b6000611b8783836040518060400160405280601a815260200179536166654d6174683a206469766973696f6e206279207a65726f60301b815250611ccd565b6000611b8783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611d04565b600082820183811015611b875760405162461bcd60e51b815260040161039e90612478565b60008183611cee5760405162461bcd60e51b815260040161039e9190612447565b506000838581611cfa57fe5b0495945050505050565b60008184841115611d285760405162461bcd60e51b815260040161039e9190612447565b505050900390565b6040518060a00160405280611d43611d83565b815260200160008152602001611d57611d83565b8152602001611d64611d83565b8152602001600081525090565b60408051602081019091526000815290565b6040518060200160405280600081525090565b80356111c281612616565b80356111c28161262a565b80516111c28161262a565b600082601f830112611dc857600080fd5b8135611ddb611dd682612567565b612541565b91508082526020830160208301858383011115611df757600080fd5b611e028382846125d4565b50505092915050565b600060a08284031215611e1d57600080fd5b611e2760a0612541565b90506000611e358484611e8e565b8252506020611e4684848301611ed7565b6020830152506040611e5a84828501611e8e565b6040830152506060611e6e84828501611e8e565b6060830152506080611e8284828501611ed7565b60808301525092915050565b600060208284031215611ea057600080fd5b611eaa6020612541565b90506000611eb88484611ed7565b82525092915050565b80516111c281612633565b80356111c28161263c565b80516111c28161263c565b80516111c281612645565b600060208284031215611eff57600080fd5b6000611f0b8484611d96565b949350505050565b60008060408385031215611f2657600080fd5b6000611f328585611d96565b9250506020611f4385828601611da1565b9150509250929050565b60008060408385031215611f6057600080fd5b6000611f6c8585611d96565b92505060208301356001600160401b03811115611f8857600080fd5b611f4385828601611db7565b600060208284031215611fa657600080fd5b6000611f0b8484611dac565b600060a08284031215611fc457600080fd5b6000611f0b8484611e0b565b600060208284031215611fe257600080fd5b6000611f0b8484611e8e565b60008060006060848603121561200357600080fd5b600061200f8686611ec1565b935050602061202086828701611ec1565b925050604061203186828701611ee2565b9150509250925092565b60006020828403121561204d57600080fd5b6000611f0b8484611ecc565b60006020828403121561206b57600080fd5b6000611f0b8484611ed7565b6000806040838503121561208a57600080fd5b60006120968585611ed7565b9250506020611f4385828601611ed7565b6120b0816125a0565b82525050565b6120b0816125ab565b60006120ca8261258e565b6120d48185612592565b93506120e48185602086016125e0565b9290920192915050565b60006120f98261258e565b6121038185612597565b93506121138185602086016125e0565b61211c8161260c565b9093019392505050565b6000612133601e83612597565b7f4f54433a204d494e5f545741505f54494d45204e4f5420454c41505345440000815260200192915050565b600061216c602183612597565b7f43756d756c617469766520707269636520736e617073686f7420746f6f206f6c8152601960fa1b602082015260400192915050565b60006121af601b83612597565b7a536166654d6174683a206164646974696f6e206f766572666c6f7760281b815260200192915050565b60006121e6600483612597565b6310b3b7bb60e11b815260200192915050565b6000612206600c83612597565b6b2bb937b7339030b1ba34b7b760a11b815260200192915050565b600061222e600b83612597565b6a10b832b73234b733a3b7bb60a91b815260200192915050565b6000612255602183612597565b7f43756d756c617469766520707269636520736e617073686f7420746f6f206e658152607760f81b602082015260400192915050565b6000612298601d83612597565b7f4d61726b65742072617465206973206f75747369646520626f756e6473000000815260200192915050565b60006122d1602183612597565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b6000612314600e83612597565b6d09cdee840cadcdeeaced0408aa8960931b815260200192915050565b600061233e601083612597565b6f1058dd1a5bdb8818dbdb5c1b195d195960821b815260200192915050565b600061236a601783612597565b764669786564506f696e743a204449565f42595f5a45524f60481b815260200192915050565b8051602083019061174684825b6120b0816125c8565b6000611b8782846120bf565b602081016111c282846120a7565b604081016123ce82856120a7565b611b8760208301846120a7565b606081016123e982866120a7565b6123f660208301856120a7565b611f0b604083018461239d565b6040810161241182856120a7565b611b8760208301846120b6565b6040810161242c82856120a7565b611b87602083018461239d565b602081016111c282846120b6565b60208082528101611b8781846120ee565b602080825281016111c281612126565b602080825281016111c28161215f565b602080825281016111c2816121a2565b602080825281016111c2816121d9565b602080825281016111c2816121f9565b602080825281016111c281612221565b602080825281016111c281612248565b602080825281016111c28161228b565b602080825281016111c2816122c4565b602080825281016111c281612307565b602080825281016111c281612331565b602080825281016111c28161235d565b602081016111c28284612390565b604081016125348285612390565b611b876020830184612390565b6040518181016001600160401b038111828210171561255f57600080fd5b604052919050565b60006001600160401b0382111561257d57600080fd5b506020601f91909101601f19160190565b5190565b919050565b90815260200190565b60006111c2826125bc565b151590565b6001600160701b031690565b6001600160a01b031690565b90565b63ffffffff1690565b82818337506000910152565b60005b838110156125fb5781810151838201526020016125e3565b838111156117465750506000910152565b601f01601f191690565b61261f816125a0565b8114610f7f57600080fd5b61261f816125ab565b61261f816125b0565b61261f816125c8565b61261f816125cb56fea365627a7a72315820738aa2371f6d255f4b85f1812815b8651a5fcadf2c5165696da1f8e2a125f4926c6578706572696d656e74616cf564736f6c634300050f00400000000000000000000000008b4f1616751117c38a0f84f9a146cca191ea3ec5
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100d05760003560e01c806312d43a51146100d557806325240810146100f357806328a3dd2c146100fb578063343ac5331461011057806345cd1b17146101235780634bda2e201461012b57806373f03dff146101335780638d0cc11114610146578063aaeae5c314610159578063b559316314610161578063b909650214610181578063bd7d8df114610194578063d1dbf977146101a7578063e97dcb62146101af578063e9fad8ee146101b7578063fe26f479146101bf575b600080fd5b6100dd6101c7565b6040516100ea91906123b2565b60405180910390f35b6100dd6101d6565b61010e61010936600461203b565b6101e5565b005b61010e61011e36600461203b565b6102a6565b61010e610346565b61010e6103d4565b61010e610141366004611eed565b61046b565b61010e610154366004611f4d565b6104f4565b61010e61057c565b61017461016f366004611eed565b6105d5565b6040516100ea9190612439565b61010e61018f366004611f13565b6105ea565b61010e6101a2366004611eed565b61066a565b61010e6107ab565b61010e610801565b61010e610adf565b61010e610ec6565b6002546001600160a01b031681565b6003546001600160a01b031681565b6002546001600160a01b031633148061020d57503360009081526004602052604090205460ff165b61021657600080fd5b600554604080516020810182528381529051632f8d78e560e11b81526001600160a01b0390921691635f1af1ca9161025091600401612518565b602060405180830381600087803b15801561026a57600080fd5b505af115801561027e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506102a29190810190611fd0565b5050565b6002546001600160a01b03163314806102ce57503360009081526004602052604090205460ff165b6102d757600080fd5b600554604080516020810182528381529051631f73d2e760e11b81526001600160a01b0390921691633ee7a5ce9161031191600401612518565b600060405180830381600087803b15801561032b57600080fd5b505af115801561033f573d6000803e3d6000fd5b5050505050565b600080548190610360906001600160a01b03166001610f82565b600054919350915063ffffffff600160a01b9091048116820390610e1090821610156103a75760405162461bcd60e51b815260040161039e90612458565b60405180910390fd5b506001919091556000805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b6003546001600160a01b031633146103fe5760405162461bcd60e51b815260040161039e906124a8565b60028054600380546001600160a01b03198084166001600160a01b0383811691909117958690559116909155604051918116927f1f14cfc03e486d23acee577b07bc0b3b23f4888c91fcdba5e0fef5a2549d55239261046092859216906123c0565b60405180910390a150565b6002546001600160a01b031633146104955760405162461bcd60e51b815260040161039e90612488565b600380546001600160a01b038381166001600160a01b03198316179092556040519116907f6163d5b9efd962645dd649e6e48a61bcb0f9df00997a2398b80d135a9ab0c61e906104e890839085906123c0565b60405180910390a15050565b6002546001600160a01b031633148061051c57503360009081526004602052604090205460ff165b61052557600080fd5b816001600160a01b031660008260405161053f91906123a6565b60006040518083038185875af1925050503d806000811461033f576040519150601f19603f3d011682016040523d82523d6000602084013e61033f565b6002546001600160a01b03163314806105a457503360009081526004602052604090205460ff165b6105ad57600080fd5b6005805460ff60a01b19811682556001919061ffff60a01b1916600160a81b835b0217905550565b60046020526000908152604090205460ff1681565b6002546001600160a01b031633146106145760405162461bcd60e51b815260040161039e90612488565b6001600160a01b03821660009081526004602052604090819020805460ff1916831515179055517f89a72fa31450add4a5b7b6e785ea3918017bd399450de805617222369b8574f6906104e89084908490612403565b6002546001600160a01b031633148061069257503360009081526004602052604090205460ff165b61069b57600080fd5b6040516370a0823160e01b815281906001600160a01b0382169063a9059cbb907397990b693835da58a281636296d2bf02787dea179083906370a08231906106e79030906004016123b2565b60206040518083038186803b1580156106ff57600080fd5b505afa158015610713573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506107379190810190612059565b6040518363ffffffff1660e01b815260040161075492919061241e565b602060405180830381600087803b15801561076e57600080fd5b505af1158015610782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506107a69190810190611f94565b505050565b6002546001600160a01b03163314806107d357503360009081526004602052604090205460ff165b6107dc57600080fd5b6005805460ff60a01b19811682556000919061ffff60a01b1916600160a81b836105ce565b600054600160a01b900463ffffffff164203611c2081106108345760405162461bcd60e51b815260040161039e90612468565b600054610e10600160a01b90910463ffffffff164203116108675760405162461bcd60e51b815260040161039e906124b8565b6000600554600160a81b900460ff16600181111561088157fe5b1461089e5760405162461bcd60e51b815260040161039e90612498565b600554600160a01b900460ff16156108c85760405162461bcd60e51b815260040161039e906124f8565b6000805460408051630240bc6b60e21b8152905183926001600160a01b031691630902f1ac916004808301926060929190829003018186803b15801561090d57600080fd5b505afa158015610921573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506109459190810190611fee565b506001600160701b0391821693501690506109608183611178565b61097c5760405162461bcd60e51b815260040161039e906124c8565b6040516370a0823160e01b815260009073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2906370a08231906109ca907397990b693835da58a281636296d2bf02787dea17906004016123b2565b60206040518083038186803b1580156109e257600080fd5b505afa1580156109f6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a1a9190810190612059565b905068056bc75e2d631000008111610a445760405162461bcd60e51b815260040161039e906124e8565b6064604f820204600060048486840281610a5a57fe5b0481610a6257fe5b049050610a6f82826111c8565b600054610ac4906001600160a01b0316734e110603e70b0b5f1c403ee543b37e1f1244cf2873c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2847397990b693835da58a281636296d2bf02787dea1761137f565b50506005805460ff60a01b1916600160a01b17905550505050565b600054600160a01b900463ffffffff164203611c208110610b125760405162461bcd60e51b815260040161039e90612468565b600054610e10600160a01b90910463ffffffff16420311610b455760405162461bcd60e51b815260040161039e906124b8565b6001600554600160a81b900460ff166001811115610b5f57fe5b14610b6957600080fd5b600554600160a01b900460ff1615610b935760405162461bcd60e51b815260040161039e906124f8565b6000805460408051630240bc6b60e21b8152905183926001600160a01b031691630902f1ac916004808301926060929190829003018186803b158015610bd857600080fd5b505afa158015610bec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610c109190810190611fee565b506001600160701b039182169350169050610c2b8183611178565b610c475760405162461bcd60e51b815260040161039e906124c8565b600054610c5d906001600160a01b0316306115d3565b610c6561174c565b6040516370a0823160e01b815273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc29063a9059cbb907397990b693835da58a281636296d2bf02787dea179083906370a0823190610cba9030906004016123b2565b60206040518083038186803b158015610cd257600080fd5b505afa158015610ce6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d0a9190810190612059565b6040518363ffffffff1660e01b8152600401610d2792919061241e565b602060405180830381600087803b158015610d4157600080fd5b505af1158015610d55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d799190810190611f94565b506040516370a0823160e01b8152600090734e110603e70b0b5f1c403ee543b37e1f1244cf28906370a0823190610db49030906004016123b2565b60206040518083038186803b158015610dcc57600080fd5b505afa158015610de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610e049190810190612059565b90508015610ead5760405163a9059cbb60e01b8152734e110603e70b0b5f1c403ee543b37e1f1244cf289063a9059cbb90610e59907397990b693835da58a281636296d2bf02787dea1790859060040161241e565b602060405180830381600087803b158015610e7357600080fd5b505af1158015610e87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610eab9190810190611f94565b505b50506005805460ff60a01b1916600160a01b1790555050565b6002546001600160a01b0316331480610eee57503360009081526004602052604090205460ff165b610ef757600080fd5b600560009054906101000a90046001600160a01b03166001600160a01b031663fcccedc76040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610f4757600080fd5b505af1158015610f5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f7f9190810190611fd0565b50565b600080610f8d611a4f565b90506000806000866001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015610fcd57600080fd5b505afa158015610fe1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110059190810190611fee565b92509250925085156110c257866001600160a01b0316635909c0d56040518163ffffffff1660e01b815260040160206040518083038186803b15801561104a57600080fd5b505afa15801561105e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110829190810190612059565b94508363ffffffff168163ffffffff16146110bd5780840363ffffffff81166110ab8486611a59565b516001600160e01b0316029590950194505b61116e565b866001600160a01b0316635a3d54936040518163ffffffff1660e01b815260040160206040518083038186803b1580156110fb57600080fd5b505afa15801561110f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506111339190810190612059565b94508363ffffffff168163ffffffff161461116e5780840363ffffffff811661115c8585611a59565b516001600160e01b0316029590950194505b5050509250929050565b600080611183611acd565b905060006111918585611b69565b9050600061119e83611b8e565b905060006111ab84611bc4565b905081831180156111bb57508083105b9450505050505b92915050565b6040516323b872dd60e01b815273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2906323b872dd90611217907397990b693835da58a281636296d2bf02787dea1790309087906004016123db565b602060405180830381600087803b15801561123157600080fd5b505af1158015611245573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506112699190810190611f94565b5060055460405163095ea7b360e01b815273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc29163095ea7b3916112b0916001600160a01b0316906000199060040161241e565b602060405180830381600087803b1580156112ca57600080fd5b505af11580156112de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113029190810190611f94565b5060055460408051602080820183528582528251908101835284815291516335d17cc960e11b81526001600160a01b0390931692636ba2f992926113499291600401612526565b600060405180830381600087803b15801561136357600080fd5b505af1158015611377573d6000803e3d6000fd5b505050505050565b600080866001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156113bb57600080fd5b505afa1580156113cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113f39190810190611fee565b506001600160701b031691506001600160701b0316915060006114168284611b69565b90506000611442670de0b6b3a7640000611436848963ffffffff611bed16565b9063ffffffff611c2716565b60405163a9059cbb60e01b81529091506001600160a01b0389169063a9059cbb90611473908c908a9060040161241e565b602060405180830381600087803b15801561148d57600080fd5b505af11580156114a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506114c59190810190611f94565b506040516323b872dd60e01b81526001600160a01b038816906323b872dd906114f69088908d9086906004016123db565b602060405180830381600087803b15801561151057600080fd5b505af1158015611524573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115489190810190611f94565b506040516335313c2160e11b81526001600160a01b038a1690636a627842906115759030906004016123b2565b602060405180830381600087803b15801561158f57600080fd5b505af11580156115a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115c79190810190612059565b50505050505050505050565b6040516370a0823160e01b81526001600160a01b0383169063a9059cbb90849083906370a08231906116099030906004016123b2565b60206040518083038186803b15801561162157600080fd5b505afa158015611635573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116599190810190612059565b6040518363ffffffff1660e01b815260040161167692919061241e565b602060405180830381600087803b15801561169057600080fd5b505af11580156116a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116c89190810190611f94565b5060405163226bf2d160e21b81526001600160a01b038316906389afcb44906116f59084906004016123b2565b6040805180830381600087803b15801561170e57600080fd5b505af1158015611722573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506117469190810190612077565b50505050565b60055460405163095ea7b360e01b8152734e110603e70b0b5f1c403ee543b37e1f1244cf289163095ea7b391611792916001600160a01b0316906000199060040161241e565b602060405180830381600087803b1580156117ac57600080fd5b505af11580156117c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506117e49190810190611f94565b506117ed611d30565b60055460405163055f575160e41b81526001600160a01b03909116906355f575109061181d9030906004016123b2565b60a060405180830381600087803b15801561183757600080fd5b505af115801561184b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061186f9190810190611fb2565b6040516370a0823160e01b8152909150600090734e110603e70b0b5f1c403ee543b37e1f1244cf28906370a08231906118ac9030906004016123b2565b60206040518083038186803b1580156118c457600080fd5b505afa1580156118d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506118fc9190810190612059565b8251519091508110611990576005548251604051632f8d78e560e11b81526001600160a01b0390921691635f1af1ca9161193891600401612518565b602060405180830381600087803b15801561195257600080fd5b505af1158015611966573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061198a9190810190611fd0565b506102a2565b60055460408051602081019091528351516001600160a01b0390921691635f1af1ca91908190674563918244f400009086900311156119cf57846119de565b855151674563918244f3ffff19015b8152506040518263ffffffff1660e01b81526004016119fd9190612518565b602060405180830381600087803b158015611a1757600080fd5b505af1158015611a2b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506107a69190810190611fd0565b63ffffffff421690565b611a61611d71565b6000826001600160701b031611611a8a5760405162461bcd60e51b815260040161039e90612508565b6040805160208101909152806001600160701b038416600160701b600160e01b03607087901b1681611ab857fe5b046001600160e01b0316815250905092915050565b6000805481908190611ae9906001600160a01b03166001610f82565b9150915060008060149054906101000a900463ffffffff168203905060008163ffffffff16600154850381611b1a57fe5b046001600160e01b0316905060006000196001600160c01b0316821115611b505750607081901c670de0b6b3a764000002611b60565b50670de0b6b3a7640000810260701c5b94505050505090565b6000611b878261143685670de0b6b3a764000063ffffffff611bed16565b9392505050565b600080611b87670de0b6b3a7640000611436611bb7826611c37937e0800063ffffffff611c6616565b869063ffffffff611bed16565b600080611b87670de0b6b3a7640000611436611bb7826611c37937e0800063ffffffff611ca816565b600082611bfc575060006111c2565b82820282848281611c0957fe5b0414611b875760405162461bcd60e51b815260040161039e906124d8565b6000611b8783836040518060400160405280601a815260200179536166654d6174683a206469766973696f6e206279207a65726f60301b815250611ccd565b6000611b8783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611d04565b600082820183811015611b875760405162461bcd60e51b815260040161039e90612478565b60008183611cee5760405162461bcd60e51b815260040161039e9190612447565b506000838581611cfa57fe5b0495945050505050565b60008184841115611d285760405162461bcd60e51b815260040161039e9190612447565b505050900390565b6040518060a00160405280611d43611d83565b815260200160008152602001611d57611d83565b8152602001611d64611d83565b8152602001600081525090565b60408051602081019091526000815290565b6040518060200160405280600081525090565b80356111c281612616565b80356111c28161262a565b80516111c28161262a565b600082601f830112611dc857600080fd5b8135611ddb611dd682612567565b612541565b91508082526020830160208301858383011115611df757600080fd5b611e028382846125d4565b50505092915050565b600060a08284031215611e1d57600080fd5b611e2760a0612541565b90506000611e358484611e8e565b8252506020611e4684848301611ed7565b6020830152506040611e5a84828501611e8e565b6040830152506060611e6e84828501611e8e565b6060830152506080611e8284828501611ed7565b60808301525092915050565b600060208284031215611ea057600080fd5b611eaa6020612541565b90506000611eb88484611ed7565b82525092915050565b80516111c281612633565b80356111c28161263c565b80516111c28161263c565b80516111c281612645565b600060208284031215611eff57600080fd5b6000611f0b8484611d96565b949350505050565b60008060408385031215611f2657600080fd5b6000611f328585611d96565b9250506020611f4385828601611da1565b9150509250929050565b60008060408385031215611f6057600080fd5b6000611f6c8585611d96565b92505060208301356001600160401b03811115611f8857600080fd5b611f4385828601611db7565b600060208284031215611fa657600080fd5b6000611f0b8484611dac565b600060a08284031215611fc457600080fd5b6000611f0b8484611e0b565b600060208284031215611fe257600080fd5b6000611f0b8484611e8e565b60008060006060848603121561200357600080fd5b600061200f8686611ec1565b935050602061202086828701611ec1565b925050604061203186828701611ee2565b9150509250925092565b60006020828403121561204d57600080fd5b6000611f0b8484611ecc565b60006020828403121561206b57600080fd5b6000611f0b8484611ed7565b6000806040838503121561208a57600080fd5b60006120968585611ed7565b9250506020611f4385828601611ed7565b6120b0816125a0565b82525050565b6120b0816125ab565b60006120ca8261258e565b6120d48185612592565b93506120e48185602086016125e0565b9290920192915050565b60006120f98261258e565b6121038185612597565b93506121138185602086016125e0565b61211c8161260c565b9093019392505050565b6000612133601e83612597565b7f4f54433a204d494e5f545741505f54494d45204e4f5420454c41505345440000815260200192915050565b600061216c602183612597565b7f43756d756c617469766520707269636520736e617073686f7420746f6f206f6c8152601960fa1b602082015260400192915050565b60006121af601b83612597565b7a536166654d6174683a206164646974696f6e206f766572666c6f7760281b815260200192915050565b60006121e6600483612597565b6310b3b7bb60e11b815260200192915050565b6000612206600c83612597565b6b2bb937b7339030b1ba34b7b760a11b815260200192915050565b600061222e600b83612597565b6a10b832b73234b733a3b7bb60a91b815260200192915050565b6000612255602183612597565b7f43756d756c617469766520707269636520736e617073686f7420746f6f206e658152607760f81b602082015260400192915050565b6000612298601d83612597565b7f4d61726b65742072617465206973206f75747369646520626f756e6473000000815260200192915050565b60006122d1602183612597565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b6000612314600e83612597565b6d09cdee840cadcdeeaced0408aa8960931b815260200192915050565b600061233e601083612597565b6f1058dd1a5bdb8818dbdb5c1b195d195960821b815260200192915050565b600061236a601783612597565b764669786564506f696e743a204449565f42595f5a45524f60481b815260200192915050565b8051602083019061174684825b6120b0816125c8565b6000611b8782846120bf565b602081016111c282846120a7565b604081016123ce82856120a7565b611b8760208301846120a7565b606081016123e982866120a7565b6123f660208301856120a7565b611f0b604083018461239d565b6040810161241182856120a7565b611b8760208301846120b6565b6040810161242c82856120a7565b611b87602083018461239d565b602081016111c282846120b6565b60208082528101611b8781846120ee565b602080825281016111c281612126565b602080825281016111c28161215f565b602080825281016111c2816121a2565b602080825281016111c2816121d9565b602080825281016111c2816121f9565b602080825281016111c281612221565b602080825281016111c281612248565b602080825281016111c28161228b565b602080825281016111c2816122c4565b602080825281016111c281612307565b602080825281016111c281612331565b602080825281016111c28161235d565b602081016111c28284612390565b604081016125348285612390565b611b876020830184612390565b6040518181016001600160401b038111828210171561255f57600080fd5b604052919050565b60006001600160401b0382111561257d57600080fd5b506020601f91909101601f19160190565b5190565b919050565b90815260200190565b60006111c2826125bc565b151590565b6001600160701b031690565b6001600160a01b031690565b90565b63ffffffff1690565b82818337506000910152565b60005b838110156125fb5781810151838201526020016125e3565b838111156117465750506000910152565b601f01601f191690565b61261f816125a0565b8114610f7f57600080fd5b61261f816125ab565b61261f816125b0565b61261f816125c8565b61261f816125cb56fea365627a7a72315820738aa2371f6d255f4b85f1812815b8651a5fcadf2c5165696da1f8e2a125f4926c6578706572696d656e74616cf564736f6c634300050f0040
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000008b4f1616751117c38a0f84f9a146cca191ea3ec5
-----Decoded View---------------
Arg [0] : pendingGov_ (address): 0x8b4f1616751117C38a0f84F9A146cca191ea3EC5
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000008b4f1616751117c38a0f84f9a146cca191ea3ec5
Deployed Bytecode Sourcemap
33621:5231:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33621:5231:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11956:18;;;:::i;:::-;;;;;;;;;;;;;;;;11981:25;;;:::i;38033:151::-;;;;;;;;;:::i;:::-;;38192:179;;;;;;;;;:::i;30209:620::-;;;:::i;12297:237::-;;;:::i;12105:184::-;;;;;;;;;:::i;38500:151::-;;;;;;;;;:::i;37826:137::-;;;:::i;12785:40::-;;;;;;;;;:::i;:::-;;;;;;;;12950:187;;;;;;;;;:::i;38659:190::-;;;;;;;;;:::i;37675:143::-;;;:::i;35732:1086::-;;;:::i;36862:744::-;;;:::i;38379:113::-;;;:::i;11956:18::-;;;-1:-1:-1;;;;;11956:18:0;;:::o;11981:25::-;;;-1:-1:-1;;;;;11981:25:0;;:::o;38033:151::-;12894:3;;-1:-1:-1;;;;;12894:3:0;12880:10;:17;;:41;;-1:-1:-1;12910:10:0;12901:20;;;;:8;:20;;;;;;;;12880:41;12872:50;;;;;;38128:6;;38142:33;;;;;;;;;;;38128:48;;-1:-1:-1;;;38128:48:0;;-1:-1:-1;;;;;38128:6:0;;;;:13;;:48;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38128:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38128:48:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;38128:48:0;;;;;;;;;;38033:151;:::o;38192:179::-;12894:3;;-1:-1:-1;;;;;12894:3:0;12880:10;:17;;:41;;-1:-1:-1;12910:10:0;12901:20;;;;:8;:20;;;;;;;;12880:41;12872:50;;;;;;38306:6;;38322:40;;;;;;;;;;;38306:57;;-1:-1:-1;;;38306:57:0;;-1:-1:-1;;;;;38306:6:0;;;;:15;;:57;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38306:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38306:57:0;;;;38192:179;:::o;30209:620::-;30265:34;30418:12;;30265:34;;30349:112;;-1:-1:-1;;;;;30418:12:0;;30349:46;:112::i;:::-;30472:18;30510:20;30250:211;;-1:-1:-1;30250:211:0;-1:-1:-1;30510:20:0;-1:-1:-1;;;30510:20:0;;;;;30493:37;;;28938:7;30645:28;;;;;30637:71;;;;-1:-1:-1;;;30637:71:0;;;;;;;;;;;;;;;;;-1:-1:-1;30721:21:0;:50;;;;30784:20;:37;;;;;;-1:-1:-1;;;30784:37:0;-1:-1:-1;;;;30784:37:0;;;;;;;;;30209:620::o;12297:237::-;12373:10;;-1:-1:-1;;;;;12373:10:0;12359;:24;12351:48;;;;-1:-1:-1;;;12351:48:0;;;;;;;;;12427:3;;;12447:10;;;-1:-1:-1;;;;;;12441:16:0;;;-1:-1:-1;;;;;12447:10:0;;;12441:16;;;;;;;;12468:23;;;;;12507:19;;12427:3;;;;12507:19;;;;12427:3;;12522;;12507:19;;;;;;;;;;12297:237;:::o;12105:184::-;12065:3;;-1:-1:-1;;;;;12065:3:0;12051:10;:17;12043:34;;;;-1:-1:-1;;;12043:34:0;;;;;;;;;12205:10;;;-1:-1:-1;;;;;12226:16:0;;;-1:-1:-1;;;;;;12226:16:0;;;;;;12258:23;;12205:10;;;12258:23;;;;12205:10;;12239:3;;12258:23;;;;;;;;;;12088:1;12105:184;:::o;38500:151::-;12894:3;;-1:-1:-1;;;;;12894:3:0;12880:10;:17;;:41;;-1:-1:-1;12910:10:0;12901:20;;;;:8;:20;;;;;;;;12880:41;12872:50;;;;;;38617:6;-1:-1:-1;;;;;38617:11:0;38635:1;38638:4;38617:26;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;37826:137:0;12894:3;;-1:-1:-1;;;;;12894:3:0;12880:10;:17;;:41;;-1:-1:-1;12910:10:0;12901:20;;;;:8;:20;;;;;;;;12880:41;12872:50;;;;;;37907:9;:17;;-1:-1:-1;;;;37907:17:0;;;;;;:9;-1:-1:-1;;;;37935:20:0;-1:-1:-1;;;37907:17:0;37935:20;;;;;;37826:137::o;12785:40::-;;;;;;;;;;;;;;;:::o;12950:187::-;12065:3;;-1:-1:-1;;;;;12065:3:0;12051:10;:17;12043:34;;;;-1:-1:-1;;;12043:34:0;;;;;;;;;-1:-1:-1;;;;;13052:16:0;;;;;;:8;:16;;;;;;;:28;;-1:-1:-1;;13052:28:0;;;;;;;13096:33;;;;;13052:16;;:28;;13096:33;;38659:190;12894:3;;-1:-1:-1;;;;;12894:3:0;12880:10;:17;;:41;;-1:-1:-1;12910:10:0;12901:20;;;;:8;:20;;;;;;;;12880:41;12872:50;;;;;;38814:26;;-1:-1:-1;;;38814:26:0;;38776:5;;-1:-1:-1;;;;;38793:10:0;;;;;34053:42;;38793:10;;38814:11;;:26;;38834:4;;38814:26;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38814:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38814:26:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;38814:26:0;;;;;;;;;38793:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38793:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38793:48:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;38793:48:0;;;;;;;;;;12933:1;38659:190;:::o;37675:143::-;12894:3;;-1:-1:-1;;;;;12894:3:0;12880:10;:17;;:41;;-1:-1:-1;12910:10:0;12901:20;;;;:8;:20;;;;;;;;12880:41;12872:50;;;;;;37761:9;:17;;-1:-1:-1;;;;37761:17:0;;;;37773:5;;37761:9;-1:-1:-1;;;;37789:21:0;-1:-1:-1;;;37773:5:0;37789:21;;35732:1086;31946:28;31995:20;-1:-1:-1;;;31995:20:0;;;;31977:15;:38;29061:8;32048:54;;32026:137;;;;-1:-1:-1;;;32026:137:0;;;;;;;;;32214:20;;28938:7;-1:-1:-1;;;32214:20:0;;;;;32196:15;:38;:54;32174:137;;;;-1:-1:-1;;;32174:137:0;;;;;;;;;35801:12;35791:6;;-1:-1:-1;;;35791:6:0;;;;:22;;;;;;;;;35783:47;;;;-1:-1:-1;;;35783:47:0;;;;;;;;;35850:9;;-1:-1:-1;;;35850:9:0;;;;35849:10;35841:39;;;;-1:-1:-1;;;35841:39:0;;;;;;;;;35891:20;35986:12;;:26;;;-1:-1:-1;;;35986:26:0;;;;35891:20;;-1:-1:-1;;;;;35986:12:0;;:24;;:26;;;;;;;;;;;;;;:12;:26;;;5:2:-1;;;;30:1;27;20:12;5:2;35986:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35986:26:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;35986:26:0;;;;;;;;;-1:-1:-1;;;;;;35953:59:0;;;;-1:-1:-1;35953:59:0;;-1:-1:-1;36045:40:0;35953:59;;36045:12;:40::i;:::-;36023:119;;;;-1:-1:-1;;;36023:119:0;;;;;;;;;36175:24;;-1:-1:-1;;;36175:24:0;;36153:19;;28485:42;;36175:14;;:24;;34053:42;;36175:24;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36175:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36175:24:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;36175:24:0;;;;;;;;;36153:46;;36232:12;36218:11;:26;36210:53;;;;-1:-1:-1;;;36210:53:0;;;;;;;;;36540:3;36534:2;36520:16;;36519:24;36491:25;36654:1;36626:12;36577:32;;;36626:12;36576:62;;;;;:79;;;;;;36554:101;;36666:37;36672:17;36691:11;36666:5;:37::i;:::-;36729:12;;36716:65;;-1:-1:-1;;;;;36729:12:0;28596:42;28485;36759:11;34053:42;36716:12;:65::i;:::-;-1:-1:-1;;36794:9:0;:16;;-1:-1:-1;;;;36794:16:0;-1:-1:-1;;;36794:16:0;;;-1:-1:-1;;;;35732:1086:0:o;36862:744::-;31946:28;31995:20;-1:-1:-1;;;31995:20:0;;;;31977:15;:38;29061:8;32048:54;;32026:137;;;;-1:-1:-1;;;32026:137:0;;;;;;;;;32214:20;;28938:7;-1:-1:-1;;;32214:20:0;;;;;32196:15;:38;:54;32174:137;;;;-1:-1:-1;;;32174:137:0;;;;;;;;;36930:11;36920:6;;-1:-1:-1;;;36920:6:0;;;;:21;;;;;;;;;36912:30;;;;;;36962:9;;-1:-1:-1;;;36962:9:0;;;;36961:10;36953:39;;;;-1:-1:-1;;;36953:39:0;;;;;;;;;37003:20;37098:12;;:26;;;-1:-1:-1;;;37098:26:0;;;;37003:20;;-1:-1:-1;;;;;37098:12:0;;:24;;:26;;;;;;;;;;;;;;:12;:26;;;5:2:-1;;;;30:1;27;20:12;5:2;37098:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37098:26:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;37098:26:0;;;;;;;;;-1:-1:-1;;;;;;37065:59:0;;;;-1:-1:-1;37065:59:0;;-1:-1:-1;37157:40:0;37065:59;;37157:12;:40::i;:::-;37135:119;;;;-1:-1:-1;;;37135:119:0;;;;;;;;;37280:12;;37267:41;;-1:-1:-1;;;;;37280:12:0;37302:4;37267:12;:41::i;:::-;37321:19;:17;:19::i;:::-;37377:29;;-1:-1:-1;;;37377:29:0;;28485:42;;37353:13;;34053:42;;28485;;37377:14;;:29;;37400:4;;37377:29;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37377:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37377:29:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;37377:29:0;;;;;;;;;37353:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37353:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37353:54:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;37353:54:0;;;;;;;;;-1:-1:-1;37440:33:0;;-1:-1:-1;;;37440:33:0;;37418:19;;28596:42;;37440:18;;:33;;37467:4;;37440:33;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37440:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37440:33:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;37440:33:0;;;;;;;;;37418:55;-1:-1:-1;37488:15:0;;37484:88;;37520:40;;-1:-1:-1;;;37520:40:0;;28596:42;;37520:17;;:40;;34053:42;;37548:11;;37520:40;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37520:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37520:40:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;37520:40:0;;;;;;;;;;37484:88;-1:-1:-1;;37582:9:0;:16;;-1:-1:-1;;;;37582:16:0;-1:-1:-1;;;37582:16:0;;;-1:-1:-1;;36862:744:0:o;38379:113::-;12894:3;;-1:-1:-1;;;;;12894:3:0;12880:10;:17;;:41;;-1:-1:-1;12910:10:0;12901:20;;;;:8;:20;;;;;;;;12880:41;12872:50;;;;;;38462:6;;;;;;;;;-1:-1:-1;;;;;38462:6:0;-1:-1:-1;;;;;38462:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38462:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38462:22:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;38462:22:0;;;;;;;;;;38379:113::o;26525:1466::-;26635:20;26657:21;26708:23;:21;:23::i;:::-;26691:40;;26743:16;26761;26779:25;26820:4;-1:-1:-1;;;;;26808:29:0;;:31;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26808:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26808:31:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;26808:31:0;;;;;;;;;26742:97;;;;;;26854:8;26850:1132;;;26907:4;-1:-1:-1;;;;;26895:38:0;;:40;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26895:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26895:40:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;26895:40:0;;;;;;;;;26877:58;;27079:14;27057:36;;:18;:36;;;27053:357;;27183:35;;;27334:62;;;27339:39;27359:8;27369;27339:19;:39::i;:::-;:42;-1:-1:-1;;;;;27334:48:0;:62;27315:81;;;;;-1:-1:-1;27053:357:0;26850:1132;;;27470:4;-1:-1:-1;;;;;27458:38:0;;:40;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27458:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27458:40:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;27458:40:0;;;;;;;;;27440:58;;27640:14;27618:36;;:18;:36;;;27614:357;;27744:35;;;27895:62;;;27900:39;27920:8;27930;27900:19;:39::i;:::-;:42;-1:-1:-1;;;;;27895:48:0;:62;27876:81;;;;;-1:-1:-1;27614:357:0;26525:1466;;;;;;;;:::o;29776:398::-;29892:4;29914:21;29938:9;:7;:9::i;:::-;29914:33;;29958:14;29975:33;29981:14;29997:10;29975:5;:33::i;:::-;29958:50;;30019:15;30037:21;30044:13;30037:6;:21::i;:::-;30019:39;;30069:15;30087:25;30098:13;30087:10;:25::i;:::-;30069:43;;30139:7;30130:6;:16;:36;;;;;30159:7;30150:6;:16;30130:36;30123:43;;;;;;29776:398;;;;;:::o;34149:344::-;34232:61;;-1:-1:-1;;;34232:61:0;;28485:42;;34232:17;;:61;;34053:42;;34268:4;;34275:17;;34232:61;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34232:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34232:61:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;34232:61:0;;;;;;;;;-1:-1:-1;34325:6:0;;34304:42;;-1:-1:-1;;;34304:42:0;;28485;;34304:12;;:42;;-1:-1:-1;;;;;34325:6:0;;-1:-1:-1;;34342:2:0;34304:42;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34304:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34304:42:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;34304:42:0;;;;;;;;;-1:-1:-1;34359:6:0;;34387:39;;;;;;;;;;;;34441:33;;;;;;;;;;34359:126;;-1:-1:-1;;;34359:126:0;;-1:-1:-1;;;;;34359:6:0;;;;:13;;:126;;34387:39;34359:126;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34359:126:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34359:126:0;;;;34149:344;;:::o;10705:614::-;10902:16;10920;10942:12;-1:-1:-1;;;;;10942:38:0;;:40;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10942:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10942:40:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;10942:40:0;;;;;;;;;10901:81;-1:-1:-1;;;;;10901:81:0;;;-1:-1:-1;;;;;10901:81:0;;;10993:14;11010:25;11016:8;11026;11010:5;:25::i;:::-;10993:42;-1:-1:-1;11048:21:0;11072:34;10690:6;11072:25;10993:42;11083:13;11072:25;:10;:25;:::i;:::-;:29;:34;:29;:34;:::i;:::-;11119:53;;-1:-1:-1;;;11119:53:0;;11048:58;;-1:-1:-1;;;;;;11119:15:0;;;;;:53;;11143:12;;11158:13;;11119:53;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11119:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11119:53:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;11119:53:0;;;;;;;;;-1:-1:-1;11183:72:0;;-1:-1:-1;;;11183:72:0;;-1:-1:-1;;;;;11183:19:0;;;;;:72;;11203:13;;11226:12;;11241:13;;11183:72;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11183:72:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11183:72:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;11183:72:0;;;;;;;;;-1:-1:-1;11266:45:0;;-1:-1:-1;;;11266:45:0;;-1:-1:-1;;;;;11266:30:0;;;;;:45;;11305:4;;11266:45;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11266:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11266:45:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;11266:45:0;;;;;;;;;;10705:614;;;;;;;;;:::o;11327:271::-;11488:37;;-1:-1:-1;;;11488:37:0;;-1:-1:-1;;;;;11416:21:0;;;;;:12;;:21;;11488:22;;:37;;11519:4;;11488:37;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11488:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11488:37:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;11488:37:0;;;;;;;;;11416:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11416:120:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11416:120:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;11416:120:0;;;;;;;;;-1:-1:-1;11547:43:0;;-1:-1:-1;;;11547:43:0;;-1:-1:-1;;;;;11547:30:0;;;;;:43;;11578:11;;11547:43;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11547:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11547:43:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;11547:43:0;;;;;;;;;;;11327:271;;:::o;34501:1186::-;34575:6;;34550:46;;-1:-1:-1;;;34550:46:0;;28596:42;;34550:16;;:46;;-1:-1:-1;;;;;34575:6:0;;-1:-1:-1;;34592:2:0;34550:46;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34550:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34550:46:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;34550:46:0;;;;;;;;;;34607:40;;:::i;:::-;34650:6;;:55;;-1:-1:-1;;;34650:55:0;;-1:-1:-1;;;;;34650:6:0;;;;:16;;:55;;34689:4;;34650:55;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34650:55:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34650:55:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;34650:55:0;;;;;;;;;34738:33;;-1:-1:-1;;;34738:33:0;;34607:98;;-1:-1:-1;34716:19:0;;28596:42;;34738:18;;:33;;34765:4;;34738:33;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34738:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34738:33:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;34738:33:0;;;;;;;;;34925:26;;:35;34716:55;;-1:-1:-1;34910:50:0;;34906:774;;34977:6;;34991:26;;34977:41;;-1:-1:-1;;;34977:41:0;;-1:-1:-1;;;;;34977:6:0;;;;:13;;:41;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34977:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34977:41:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;34977:41:0;;;;;;;;;;34906:774;;;35356:6;;35388:265;;;;;;;;;35431:26;;:35;-1:-1:-1;;;;;35356:6:0;;;;:13;;35388:265;;;35509:10;35431:49;;;;:88;;:203;;35623:11;35431:203;;;35547:26;;:35;-1:-1:-1;;35547:48:0;35431:203;35388:265;;;35356:312;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35356:312:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35356:312:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;35356:312:0;;;;;;;;26296:123;26385:25;:15;:25;;26296:123::o;24875:246::-;24956:16;;:::i;:::-;25007:1;24993:11;-1:-1:-1;;;;;24993:15:0;;24985:51;;;;-1:-1:-1;;;24985:51:0;;;;;;;;;25054:59;;;;;;;;;;-1:-1:-1;;;;;25064:48:0;;-1:-1:-1;;;;;;;23626:3:0;25065:32;;;;25064:48;;;;;;-1:-1:-1;;;;;25054:59:0;;;;25047:66;;24875:246;;;;:::o;30837:1063::-;30879:7;31067:12;;30879:7;;;;30998:112;;-1:-1:-1;;;;;31067:12:0;;30998:46;:112::i;:::-;30899:211;;;;31121:18;31159:20;;;;;;;;;;;31142:14;:37;31121:58;;31250:24;31401:11;31325:87;;31355:21;;31326:26;:50;31325:87;;;;;;-1:-1:-1;;;;;31277:161:0;31250:188;;31474:21;-1:-1:-1;;;;;;;31510:30:0;:16;:30;31506:356;;;-1:-1:-1;31681:3:0;31661:23;;;28240:6;31660:31;31506:356;;;-1:-1:-1;28240:6:0;31820:22;;31847:3;31819:31;31506:356;31879:13;-1:-1:-1;;;;;30837:1063:0;:::o;11606:188::-;11715:7;11747:39;11775:10;11747:23;:14;10690:6;11747:23;:18;:23;:::i;:39::-;11740:46;11606:188;-1:-1:-1;;;11606:188:0:o;29390:183::-;29452:7;;29490:50;28193:6;29490:40;29508:21;28193:6;29175:10;29508:21;:8;:21;:::i;:::-;29490:13;;:40;:17;:40;:::i;29581:187::-;29647:7;;29685:50;28193:6;29685:40;29703:21;28193:6;29175:10;29703:21;:8;:21;:::i;7417:471::-;7475:7;7720:6;7716:47;;-1:-1:-1;7750:1:0;7743:8;;7716:47;7787:5;;;7791:1;7787;:5;:1;7811:5;;;;;:10;7803:56;;;;-1:-1:-1;;;7803:56:0;;;;;;;;8364:132;8422:7;8449:39;8453:1;8456;8449:39;;;;;;;;;;;;;-1:-1:-1;;;8449:39:0;;;:3;:39::i;6527:136::-;6585:7;6612:43;6616:1;6619;6612:43;;;;;;;;;;;;;;;;;:3;:43::i;6063:181::-;6121:7;6153:5;;;6177:6;;;;6169:46;;;;-1:-1:-1;;;6169:46:0;;;;;;;;8992:278;9078:7;9113:12;9106:5;9098:28;;;;-1:-1:-1;;;9098:28:0;;;;;;;;;;;9137:9;9153:1;9149;:5;;;;;;;8992:278;-1:-1:-1;;;;;8992:278:0:o;6966:192::-;7052:7;7088:12;7080:6;;;;7072:29;;;;-1:-1:-1;;;7072:29:0;;;;;;;;;;-1:-1:-1;;;7124:5:0;;;6966:192::o;33621:5231::-;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;-1:-1:-1;33621:5231:0;;;:::o;:::-;;;;;;;;;;;;;;:::o;5:130:-1:-;72:20;;97:33;72:20;97:33;;142:124;206:20;;231:30;206:20;231:30;;273:128;348:13;;366:30;348:13;366:30;;409:440;;510:3;503:4;495:6;491:17;487:27;477:2;;528:1;525;518:12;477:2;565:6;552:20;587:64;602:48;643:6;602:48;;;587:64;;;578:73;;671:6;664:5;657:21;707:4;699:6;695:17;740:4;733:5;729:16;775:3;766:6;761:3;757:16;754:25;751:2;;;792:1;789;782:12;751:2;802:41;836:6;831:3;826;802:41;;;470:379;;;;;;;;895:1136;;1025:4;1013:9;1008:3;1004:19;1000:30;997:2;;;1043:1;1040;1033:12;997:2;1061:20;1076:4;1061:20;;;1052:29;-1:-1;1144:1;1176:82;1254:3;1234:9;1176:82;;;1151:108;;-1:-1;1346:2;1379:60;1435:3;1411:22;;;1379:60;;;1372:4;1365:5;1361:16;1354:86;1280:171;1520:2;1553:82;1631:3;1622:6;1611:9;1607:22;1553:82;;;1546:4;1539:5;1535:16;1528:108;1461:186;1706:2;1739:82;1817:3;1808:6;1797:9;1793:22;1739:82;;;1732:4;1725:5;1721:16;1714:108;1657:176;1915:3;1949:60;2005:3;1996:6;1985:9;1981:22;1949:60;;;1942:4;1935:5;1931:16;1924:86;1843:178;991:1040;;;;;2072:346;;2194:4;2182:9;2177:3;2173:19;2169:30;2166:2;;;2212:1;2209;2202:12;2166:2;2230:20;2245:4;2230:20;;;2221:29;-1:-1;2304:1;2336:60;2392:3;2372:9;2336:60;;;2311:86;;-1:-1;2322:5;2160:258;-1:-1;;2160:258;2816:134;2894:13;;2912:33;2894:13;2912:33;;2957:130;3024:20;;3049:33;3024:20;3049:33;;3094:134;3172:13;;3190:33;3172:13;3190:33;;3235:132;3312:13;;3330:32;3312:13;3330:32;;3374:241;;3478:2;3466:9;3457:7;3453:23;3449:32;3446:2;;;3494:1;3491;3484:12;3446:2;3529:1;3546:53;3591:7;3571:9;3546:53;;;3536:63;3440:175;-1:-1;;;;3440:175;3622:360;;;3740:2;3728:9;3719:7;3715:23;3711:32;3708:2;;;3756:1;3753;3746:12;3708:2;3791:1;3808:53;3853:7;3833:9;3808:53;;;3798:63;;3770:97;3898:2;3916:50;3958:7;3949:6;3938:9;3934:22;3916:50;;;3906:60;;3877:95;3702:280;;;;;;3989:470;;;4119:2;4107:9;4098:7;4094:23;4090:32;4087:2;;;4135:1;4132;4125:12;4087:2;4170:1;4187:53;4232:7;4212:9;4187:53;;;4177:63;;4149:97;4305:2;4294:9;4290:18;4277:32;-1:-1;;;;;4321:6;4318:30;4315:2;;;4361:1;4358;4351:12;4315:2;4381:62;4435:7;4426:6;4415:9;4411:22;4381:62;;4466:257;;4578:2;4566:9;4557:7;4553:23;4549:32;4546:2;;;4594:1;4591;4584:12;4546:2;4629:1;4646:61;4699:7;4679:9;4646:61;;4730:324;;4875:3;4863:9;4854:7;4850:23;4846:33;4843:2;;;4892:1;4889;4882:12;4843:2;4927:1;4944:94;5030:7;5010:9;4944:94;;5061:315;;5202:2;5190:9;5181:7;5177:23;5173:32;5170:2;;;5218:1;5215;5208:12;5170:2;5253:1;5270:90;5352:7;5332:9;5270:90;;5383:533;;;;5531:2;5519:9;5510:7;5506:23;5502:32;5499:2;;;5547:1;5544;5537:12;5499:2;5582:1;5599:64;5655:7;5635:9;5599:64;;;5589:74;;5561:108;5700:2;5718:64;5774:7;5765:6;5754:9;5750:22;5718:64;;;5708:74;;5679:109;5819:2;5837:63;5892:7;5883:6;5872:9;5868:22;5837:63;;;5827:73;;5798:108;5493:423;;;;;;5923:241;;6027:2;6015:9;6006:7;6002:23;5998:32;5995:2;;;6043:1;6040;6033:12;5995:2;6078:1;6095:53;6140:7;6120:9;6095:53;;6171:263;;6286:2;6274:9;6265:7;6261:23;6257:32;6254:2;;;6302:1;6299;6292:12;6254:2;6337:1;6354:64;6410:7;6390:9;6354:64;;6441:399;;;6573:2;6561:9;6552:7;6548:23;6544:32;6541:2;;;6589:1;6586;6579:12;6541:2;6624:1;6641:64;6697:7;6677:9;6641:64;;;6631:74;;6603:108;6742:2;6760:64;6816:7;6807:6;6796:9;6792:22;6760:64;;6847:113;6930:24;6948:5;6930:24;;;6925:3;6918:37;6912:48;;;6967:104;7044:21;7059:5;7044:21;;7078:356;;7206:38;7238:5;7206:38;;;7256:88;7337:6;7332:3;7256:88;;;7249:95;;7349:52;7394:6;7389:3;7382:4;7375:5;7371:16;7349:52;;;7413:16;;;;;7186:248;-1:-1;;7186:248;7441:347;;7553:39;7586:5;7553:39;;;7604:71;7668:6;7663:3;7604:71;;;7597:78;;7680:52;7725:6;7720:3;7713:4;7706:5;7702:16;7680:52;;;7753:29;7775:6;7753:29;;;7744:39;;;;7533:255;-1:-1;;;7533:255;7796:330;;7956:67;8020:2;8015:3;7956:67;;;8056:32;8036:53;;8117:2;8108:12;;7942:184;-1:-1;;7942:184;8135:370;;8295:67;8359:2;8354:3;8295:67;;;8395:34;8375:55;;-1:-1;;;8459:2;8450:12;;8443:25;8496:2;8487:12;;8281:224;-1:-1;;8281:224;8514:327;;8674:67;8738:2;8733:3;8674:67;;;-1:-1;;;8754:50;;8832:2;8823:12;;8660:181;-1:-1;;8660:181;8850:303;;9010:66;9074:1;9069:3;9010:66;;;-1:-1;;;9089:27;;9144:2;9135:12;;8996:157;-1:-1;;8996:157;9162:312;;9322:67;9386:2;9381:3;9322:67;;;-1:-1;;;9402:35;;9465:2;9456:12;;9308:166;-1:-1;;9308:166;9483:311;;9643:67;9707:2;9702:3;9643:67;;;-1:-1;;;9723:34;;9785:2;9776:12;;9629:165;-1:-1;;9629:165;9803:370;;9963:67;10027:2;10022:3;9963:67;;;10063:34;10043:55;;-1:-1;;;10127:2;10118:12;;10111:25;10164:2;10155:12;;9949:224;-1:-1;;9949:224;10182:329;;10342:67;10406:2;10401:3;10342:67;;;10442:31;10422:52;;10502:2;10493:12;;10328:183;-1:-1;;10328:183;10520:370;;10680:67;10744:2;10739:3;10680:67;;;10780:34;10760:55;;-1:-1;;;10844:2;10835:12;;10828:25;10881:2;10872:12;;10666:224;-1:-1;;10666:224;10899:314;;11059:67;11123:2;11118:3;11059:67;;;-1:-1;;;11139:37;;11204:2;11195:12;;11045:168;-1:-1;;11045:168;11222:316;;11382:67;11446:2;11441:3;11382:67;;;-1:-1;;;11462:39;;11529:2;11520:12;;11368:170;-1:-1;;11368:170;11547:323;;11707:67;11771:2;11766:3;11707:67;;;-1:-1;;;11787:46;;11861:2;11852:12;;11693:177;-1:-1;;11693:177;11943:324;12154:23;;12084:4;12075:14;;;12183:63;12079:3;12154:23;12274:103;12347:24;12365:5;12347:24;;12504:262;;12648:93;12737:3;12728:6;12648:93;;12773:213;12891:2;12876:18;;12905:71;12880:9;12949:6;12905:71;;12993:324;13139:2;13124:18;;13153:71;13128:9;13197:6;13153:71;;;13235:72;13303:2;13292:9;13288:18;13279:6;13235:72;;13324:435;13498:2;13483:18;;13512:71;13487:9;13556:6;13512:71;;;13594:72;13662:2;13651:9;13647:18;13638:6;13594:72;;;13677;13745:2;13734:9;13730:18;13721:6;13677:72;;13766:312;13906:2;13891:18;;13920:71;13895:9;13964:6;13920:71;;;14002:66;14064:2;14053:9;14049:18;14040:6;14002:66;;14085:324;14231:2;14216:18;;14245:71;14220:9;14289:6;14245:71;;;14327:72;14395:2;14384:9;14380:18;14371:6;14327:72;;14416:201;14528:2;14513:18;;14542:65;14517:9;14580:6;14542:65;;14624:301;14762:2;14776:47;;;14747:18;;14837:78;14747:18;14901:6;14837:78;;14932:407;15123:2;15137:47;;;15108:18;;15198:131;15108:18;15198:131;;15346:407;15537:2;15551:47;;;15522:18;;15612:131;15522:18;15612:131;;15760:407;15951:2;15965:47;;;15936:18;;16026:131;15936:18;16026:131;;16174:407;16365:2;16379:47;;;16350:18;;16440:131;16350:18;16440:131;;16588:407;16779:2;16793:47;;;16764:18;;16854:131;16764:18;16854:131;;17002:407;17193:2;17207:47;;;17178:18;;17268:131;17178:18;17268:131;;17416:407;17607:2;17621:47;;;17592:18;;17682:131;17592:18;17682:131;;17830:407;18021:2;18035:47;;;18006:18;;18096:131;18006:18;18096:131;;18244:407;18435:2;18449:47;;;18420:18;;18510:131;18420:18;18510:131;;18658:407;18849:2;18863:47;;;18834:18;;18924:131;18834:18;18924:131;;19072:407;19263:2;19277:47;;;19248:18;;19338:131;19248:18;19338:131;;19486:407;19677:2;19691:47;;;19662:18;;19752:131;19662:18;19752:131;;19900:309;20066:2;20051:18;;20080:119;20055:9;20172:6;20080:119;;20216:516;20458:2;20443:18;;20472:119;20447:9;20564:6;20472:119;;;20602:120;20718:2;20707:9;20703:18;20694:6;20602:120;;20739:256;20801:2;20795:9;20827:17;;;-1:-1;;;;;20887:34;;20923:22;;;20884:62;20881:2;;;20959:1;20956;20949:12;20881:2;20975;20968:22;20779:216;;-1:-1;20779:216;21002:321;;-1:-1;;;;;21137:6;21134:30;21131:2;;;21177:1;21174;21167:12;21131:2;-1:-1;21308:4;21244;21221:17;;;;-1:-1;;21217:33;21298:15;;21068:255;21330:121;21417:12;;21388:63;21588:144;21723:3;21701:31;-1:-1;21701:31;21741:163;21844:19;;;21893:4;21884:14;;21837:67;21912:91;;21974:24;21992:5;21974:24;;22010:85;22076:13;22069:21;;22052:43;22102:109;-1:-1;;;;;22164:42;;22147:64;22218:121;-1:-1;;;;;22280:54;;22263:76;22346:72;22408:5;22391:27;22425:88;22497:10;22486:22;;22469:44;22521:145;22602:6;22597:3;22592;22579:30;-1:-1;22658:1;22640:16;;22633:27;22572:94;22675:268;22740:1;22747:101;22761:6;22758:1;22755:13;22747:101;;;22828:11;;;22822:18;22809:11;;;22802:39;22783:2;22776:10;22747:101;;;22863:6;22860:1;22857:13;22854:2;;;-1:-1;;22928:1;22910:16;;22903:27;22724:219;22951:97;23039:2;23019:14;-1:-1;;23015:28;;22999:49;23056:117;23125:24;23143:5;23125:24;;;23118:5;23115:35;23105:2;;23164:1;23161;23154:12;23180:111;23246:21;23261:5;23246:21;;23298:117;23367:24;23385:5;23367:24;;23422:117;23491:24;23509:5;23491:24;;23546:115;23614:23;23631:5;23614:23;
Swarm Source
bzzr://738aa2371f6d255f4b85f1812815b8651a5fcadf2c5165696da1f8e2a125f492
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $3.2 | 763.1013 | $2,441.92 |
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.