Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 6 from a total of 6 transactions
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
13732704 | 966 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Name:
GUniLPOracle
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-03 */ /** *Submitted for verification at Etherscan.io on 2021-09-17 */ // SPDX-License-Identifier: AGPL-3.0-or-later /// GUniLPOracle.sol // Copyright (C) 2017-2020 Maker Ecosystem Growth Holdings, INC. // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <https://www.gnu.org/licenses/>. /////////////////////////////////////////////////////// // // // Methodology for Calculating LP Token Price // // // /////////////////////////////////////////////////////// // We derive the sqrtPriceX96 via Maker's own oracles to prevent price manipulation in the pool: // // p0 = price of token0 in USD // p1 = price of token1 in USD // UNITS_0 = decimals of token0 // UNITS_1 = decimals of token1 // // token1/token0 = (p0 / 10^UNITS_0) / (p1 / 10^UNITS_1) [Conversion from Maker's price ratio into Uniswap's format] // = (p0 * 10^UNITS_1) / (p1 * 10^UNITS_0) // // sqrtPriceX96 = sqrt(token1/token0) * 2^96 [From Uniswap's definition] // = sqrt((p0 * 10^UNITS_1) / (p1 * 10^UNITS_0)) * 2^96 // = sqrt((p0 * 10^UNITS_1) / (p1 * 10^UNITS_0)) * 2^48 * 2^48 // = sqrt((p0 * 10^UNITS_1 * 2^96) / (p1 * 10^UNITS_0)) * 2^48 // // Once we have the sqrtPriceX96 we can use that to compute the fair reserves for each token. This part may be slightly subjective // depending on the implementation, but we expect most tokens to provide something like getUnderlyingBalancesAtPrice(uint160 sqrtPriceX96) // which will forward our oracle-calculated `sqrtPriceX96` to the Uniswap-provided LiquidityAmounts.getAmountsForLiquidity(...) // This function will return the fair reserves for each token. Vendor-specific logic is then used to tack any uninvested fees on top of those amounts. // // Once we have the fair reserves and the prices we can compute the token price by: // // Token Price = TVL / Token Supply // = (r0 * p0 + r1 * p1) / totalSupply pragma solidity =0.6.12; interface ERC20Like { function decimals() external view returns (uint8); function totalSupply() external view returns (uint256); } interface GUNILike { function token0() external view returns (address); function token1() external view returns (address); function getUnderlyingBalancesAtPrice(uint160) external view returns (uint256,uint256); } interface OracleLike { function read() external view returns (uint256); } contract GUniLPOracle { // --- Auth --- mapping (address => uint256) public wards; // Addresses with admin authority function rely(address _usr) external auth { wards[_usr] = 1; emit Rely(_usr); } // Add admin function deny(address _usr) external auth { wards[_usr] = 0; emit Deny(_usr); } // Remove admin modifier auth { require(wards[msg.sender] == 1, "GUniLPOracle/not-authorized"); _; } address public immutable src; // Price source // hop and zph are packed into single slot to reduce SLOADs; // this outweighs the cost from added bitmasking operations. uint8 public stopped; // Stop/start ability to update uint16 public hop = 1 hours; // Minimum time in between price updates uint232 public zph; // Time of last price update plus hop bytes32 public immutable wat; // Label of token whose price is being tracked // --- Whitelisting --- mapping (address => uint256) public bud; modifier toll { require(bud[msg.sender] == 1, "GUniLPOracle/contract-not-whitelisted"); _; } struct Feed { uint128 val; // Price uint128 has; // Is price valid } Feed internal cur; // Current price (mem slot 0x3) Feed internal nxt; // Queued price (mem slot 0x4) // --- Data --- uint256 private immutable UNIT_0; // Numerical representation of one token of token0 (10^decimals) uint256 private immutable UNIT_1; // Numerical representation of one token of token1 (10^decimals) uint256 private immutable TO_18_DEC_0; // Conversion factor to 18 decimals uint256 private immutable TO_18_DEC_1; // Conversion factor to 18 decimals address public orb0; // Oracle for token0, ideally a Medianizer address public orb1; // Oracle for token1, ideally a Medianizer // --- Math --- uint256 constant WAD = 10 ** 18; function _add(uint256 _x, uint256 _y) internal pure returns (uint256 z) { require((z = _x + _y) >= _x, "GUniLPOracle/add-overflow"); } function _sub(uint256 _x, uint256 _y) internal pure returns (uint256 z) { require((z = _x - _y) <= _x, "GUniLPOracle/sub-underflow"); } function _mul(uint256 _x, uint256 _y) internal pure returns (uint256 z) { require(_y == 0 || (z = _x * _y) / _y == _x, "GUniLPOracle/mul-overflow"); } function toUint160(uint256 x) internal pure returns (uint160 z) { require((z = uint160(x)) == x, "GUniLPOracle/uint160-overflow"); } // FROM https://github.com/abdk-consulting/abdk-libraries-solidity/blob/16d7e1dd8628dfa2f88d5dadab731df7ada70bdd/ABDKMath64x64.sol#L687 function sqrt(uint256 _x) private pure returns (uint128) { if (_x == 0) return 0; else { uint256 xx = _x; uint256 r = 1; if (xx >= 0x100000000000000000000000000000000) { xx >>= 128; r <<= 64; } if (xx >= 0x10000000000000000) { xx >>= 64; r <<= 32; } if (xx >= 0x100000000) { xx >>= 32; r <<= 16; } if (xx >= 0x10000) { xx >>= 16; r <<= 8; } if (xx >= 0x100) { xx >>= 8; r <<= 4; } if (xx >= 0x10) { xx >>= 4; r <<= 2; } if (xx >= 0x8) { r <<= 1; } r = (r + _x / r) >> 1; r = (r + _x / r) >> 1; r = (r + _x / r) >> 1; r = (r + _x / r) >> 1; r = (r + _x / r) >> 1; r = (r + _x / r) >> 1; r = (r + _x / r) >> 1; // Seven iterations should be enough uint256 r1 = _x / r; return uint128 (r < r1 ? r : r1); } } // --- Events --- event Rely(address indexed usr); event Deny(address indexed usr); event Step(uint256 hop); event Stop(); event Start(); event Value(uint128 curVal, uint128 nxtVal); event Link(uint256 id, address orb); event Kiss(address a); event Diss(address a); // --- Init --- constructor (address _src, bytes32 _wat, address _orb0, address _orb1) public { require(_src != address(0), "GUniLPOracle/invalid-src-address"); require(_orb0 != address(0) && _orb1 != address(0), "GUniLPOracle/invalid-oracle-address"); wards[msg.sender] = 1; emit Rely(msg.sender); src = _src; wat = _wat; uint256 dec0 = uint256(ERC20Like(GUNILike(_src).token0()).decimals()); require(dec0 <= 18, "GUniLPOracle/token0-dec-gt-18"); UNIT_0 = 10 ** dec0; TO_18_DEC_0 = 10 ** (18 - dec0); uint256 dec1 = uint256(ERC20Like(GUNILike(_src).token1()).decimals()); require(dec1 <= 18, "GUniLPOracle/token1-dec-gt-18"); UNIT_1 = 10 ** dec1; TO_18_DEC_1 = 10 ** (18 - dec1); orb0 = _orb0; orb1 = _orb1; } function stop() external auth { stopped = 1; delete cur; delete nxt; zph = 0; emit Stop(); } function start() external auth { stopped = 0; emit Start(); } function step(uint256 _hop) external auth { require(_hop <= uint16(-1), "GUniLPOracle/invalid-hop"); hop = uint16(_hop); emit Step(_hop); } function link(uint256 _id, address _orb) external auth { require(_orb != address(0), "GUniLPOracle/no-contract-0"); if(_id == 0) { orb0 = _orb; } else if (_id == 1) { orb1 = _orb; } else { revert("GUniLPOracle/invalid-id"); } emit Link(_id, _orb); } // For consistency with other oracles. function zzz() external view returns (uint256) { if (zph == 0) return 0; // backwards compatibility return _sub(zph, hop); } function pass() external view returns (bool) { return block.timestamp >= zph; } function seek() internal returns (uint128 quote) { // All Oracle prices are priced with 18 decimals against USD uint256 p0 = OracleLike(orb0).read(); // Query token0 price from oracle (WAD) require(p0 != 0, "GUniLPOracle/invalid-oracle-0-price"); uint256 p1 = OracleLike(orb1).read(); // Query token1 price from oracle (WAD) require(p1 != 0, "GUniLPOracle/invalid-oracle-1-price"); uint160 sqrtPriceX96 = toUint160(sqrt(_mul(_mul(p0, UNIT_1), (1 << 96)) / (_mul(p1, UNIT_0))) << 48); // Get balances of the tokens in the pool (uint256 r0, uint256 r1) = GUNILike(src).getUnderlyingBalancesAtPrice(sqrtPriceX96); require(r0 > 0 || r1 > 0, "GUniLPOracle/invalid-balances"); uint256 totalSupply = ERC20Like(src).totalSupply(); require(totalSupply >= 1e9, "GUniLPOracle/total-supply-too-small"); // Protect against precision errors with dust-levels of collateral // Add the total value of each token together and divide by the totalSupply to get the unit price uint256 preq = _add( _mul(p0, _mul(r0, TO_18_DEC_0)), _mul(p1, _mul(r1, TO_18_DEC_1)) ) / totalSupply; require(preq < 2 ** 128, "GUniLPOracle/quote-overflow"); quote = uint128(preq); // WAD } function poke() external { // Ensure a single SLOAD while avoiding solc's excessive bitmasking bureaucracy. uint256 hop_; { // Block-scoping these variables saves some gas. uint256 stopped_; uint256 zph_; assembly { let slot1 := sload(1) stopped_ := and(slot1, 0xff ) hop_ := and(shr(8, slot1), 0xffff) zph_ := shr(24, slot1) } // When stopped, values are set to zero and should remain such; thus, disallow updating in that case. require(stopped_ == 0, "GUniLPOracle/is-stopped"); // Equivalent to requiring that pass() returns true. // The logic is repeated instead of calling pass() to save gas // (both by eliminating an internal call here, and allowing pass to be external). require(block.timestamp >= zph_, "GUniLPOracle/not-passed"); } uint128 val = seek(); require(val != 0, "GUniLPOracle/invalid-price"); Feed memory cur_ = nxt; // This memory value is used to save an SLOAD later. cur = cur_; nxt = Feed(val, 1); // The below is equivalent to: // // zph = block.timestamp + hop // // but ensures no extra SLOADs are performed. // // Even if _hop = (2^16 - 1), the maximum possible value, add(timestamp(), _hop) // will not overflow (even a 232 bit value) for a very long time. // // Also, we know stopped was zero, so there is no need to account for it explicitly here. assembly { sstore( 1, add( // zph value starts 24 bits in shl(24, add(timestamp(), hop_)), // hop value starts 8 bits in shl(8, hop_) ) ) } // Equivalent to emitting Value(cur.val, nxt.val), but averts extra SLOADs. emit Value(cur_.val, val); // Safe to terminate immediately since no postfix modifiers are applied. assembly { stop() } } function peek() external view toll returns (bytes32,bool) { return (bytes32(uint256(cur.val)), cur.has == 1); } function peep() external view toll returns (bytes32,bool) { return (bytes32(uint256(nxt.val)), nxt.has == 1); } function read() external view toll returns (bytes32) { require(cur.has == 1, "GUniLPOracle/no-current-value"); return (bytes32(uint256(cur.val))); } function kiss(address _a) external auth { require(_a != address(0), "GUniLPOracle/no-contract-0"); bud[_a] = 1; emit Kiss(_a); } function kiss(address[] calldata _a) external auth { for(uint256 i = 0; i < _a.length; i++) { require(_a[i] != address(0), "GUniLPOracle/no-contract-0"); bud[_a[i]] = 1; emit Kiss(_a[i]); } } function diss(address _a) external auth { bud[_a] = 0; emit Diss(_a); } function diss(address[] calldata _a) external auth { for(uint256 i = 0; i < _a.length; i++) { bud[_a[i]] = 0; emit Diss(_a[i]); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_src","type":"address"},{"internalType":"bytes32","name":"_wat","type":"bytes32"},{"internalType":"address","name":"_orb0","type":"address"},{"internalType":"address","name":"_orb1","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usr","type":"address"}],"name":"Deny","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"a","type":"address"}],"name":"Diss","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"a","type":"address"}],"name":"Kiss","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"address","name":"orb","type":"address"}],"name":"Link","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usr","type":"address"}],"name":"Rely","type":"event"},{"anonymous":false,"inputs":[],"name":"Start","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"hop","type":"uint256"}],"name":"Step","type":"event"},{"anonymous":false,"inputs":[],"name":"Stop","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint128","name":"curVal","type":"uint128"},{"indexed":false,"internalType":"uint128","name":"nxtVal","type":"uint128"}],"name":"Value","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bud","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_usr","type":"address"}],"name":"deny","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_a","type":"address[]"}],"name":"diss","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_a","type":"address"}],"name":"diss","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"hop","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_a","type":"address[]"}],"name":"kiss","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_a","type":"address"}],"name":"kiss","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"address","name":"_orb","type":"address"}],"name":"link","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"orb0","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"orb1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pass","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"peek","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"peep","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poke","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"read","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_usr","type":"address"}],"name":"rely","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"src","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"start","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_hop","type":"uint256"}],"name":"step","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopped","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"wards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wat","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"zph","outputs":[{"internalType":"uint232","name":"","type":"uint232"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"zzz","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6101406040526001805462ffff001916620e10001790553480156200002357600080fd5b5060405162001f7c38038062001f7c833981810160405260808110156200004957600080fd5b50805160208201516040830151606090930151919290916001600160a01b038416620000bc576040805162461bcd60e51b815260206004820181905260248201527f47556e694c504f7261636c652f696e76616c69642d7372632d61646472657373604482015290519081900360640190fd5b6001600160a01b03821615801590620000dd57506001600160a01b03811615155b6200011a5760405162461bcd60e51b815260040180806020018281038252602381526020018062001f596023913960400191505060405180910390fd5b3360008181526020819052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a2836001600160a01b03166080816001600160a01b031660601b815250508260a081815250506000846001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015620001b457600080fd5b505afa158015620001c9573d6000803e3d6000fd5b505050506040513d6020811015620001e057600080fd5b50516040805163313ce56760e01b815290516001600160a01b039092169163313ce56791600480820192602092909190829003018186803b1580156200022557600080fd5b505afa1580156200023a573d6000803e3d6000fd5b505050506040513d60208110156200025157600080fd5b505160ff1690506012811115620002af576040805162461bcd60e51b815260206004820152601d60248201527f47556e694c504f7261636c652f746f6b656e302d6465632d67742d3138000000604482015290519081900360640190fd5b80600a0a60c0818152505080601203600a0a61010081815250506000856001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156200030557600080fd5b505afa1580156200031a573d6000803e3d6000fd5b505050506040513d60208110156200033157600080fd5b50516040805163313ce56760e01b815290516001600160a01b039092169163313ce56791600480820192602092909190829003018186803b1580156200037657600080fd5b505afa1580156200038b573d6000803e3d6000fd5b505050506040513d6020811015620003a257600080fd5b505160ff169050601281111562000400576040805162461bcd60e51b815260206004820152601d60248201527f47556e694c504f7261636c652f746f6b656e312d6465632d67742d3138000000604482015290519081900360640190fd5b600a81810a60e052601291909103900a6101205250600580546001600160a01b039384166001600160a01b03199182161790915560068054929093169116179055505060805160601c60a05160c05160e0516101005161012051611abf6200049a600039806116665250806116335250806113fb5250806113ce525080610b435250806109235280611456528061155b5250611abf6000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c806365c4ce7a116100de578063a7a1ed7211610097578063be9a655511610071578063be9a655514610447578063bf353dbb1461044f578063dca44f6f14610475578063f29c29c41461047d57610173565b8063a7a1ed72146103e8578063a9c52a3914610404578063b0b8579b1461042857610173565b806365c4ce7a1461034857806365fae35e1461036e5780636c2552f91461039457806375f12b211461039c5780639c52a7f1146103ba578063a4dff0a2146103e057610173565b806346d4577d1161013057806346d4577d1461025c5780634ca29923146102cc5780634fce7a2a146102e657806357de26a41461030c57806359e02dd71461031457806365af79091461031c57610173565b806307da68f5146101785780630e5a6c701461018257806318178358146101a35780631b25b65f146101ab5780632e7dc6af1461021b5780633a1cde751461023f575b600080fd5b6101806104a3565b005b61018a61053e565b6040805192835290151560208301528051918290030190f35b6101806105ae565b610180600480360360208110156101c157600080fd5b8101906020810181356401000000008111156101dc57600080fd5b8201836020820111156101ee57600080fd5b8035906020019184602083028401116401000000008311171561021057600080fd5b50909250905061079f565b610223610921565b604080516001600160a01b039092168252519081900360200190f35b6101806004803603602081101561025557600080fd5b5035610945565b6101806004803603602081101561027257600080fd5b81019060208101813564010000000081111561028d57600080fd5b82018360208201111561029f57600080fd5b803590602001918460208302840111640100000000831117156102c157600080fd5b509092509050610a3b565b6102d4610b41565b60408051918252519081900360200190f35b6102d4600480360360208110156102fc57600080fd5b50356001600160a01b0316610b65565b6102d4610b77565b61018a610c3d565b6101806004803603604081101561033257600080fd5b50803590602001356001600160a01b0316610cad565b6101806004803603602081101561035e57600080fd5b50356001600160a01b0316610e39565b6101806004803603602081101561038457600080fd5b50356001600160a01b0316610ede565b610223610f75565b6103a4610f84565b6040805160ff9092168252519081900360200190f35b610180600480360360208110156103d057600080fd5b50356001600160a01b0316610f8d565b6102d4611023565b6103f0611070565b604080519115158252519081900360200190f35b61040c611089565b604080516001600160e81b039092168252519081900360200190f35b61043061109f565b6040805161ffff9092168252519081900360200190f35b6101806110ae565b6102d46004803603602081101561046557600080fd5b50356001600160a01b0316611135565b610223611147565b6101806004803603602081101561049357600080fd5b50356001600160a01b0316611156565b336000908152602081905260409020546001146104f5576040805162461bcd60e51b815260206004820152601b60248201526000805160206119ff833981519152604482015290519081900360640190fd5b6001805460006003819055600481905560ff19909116821762ffffff169091556040517fbedf0f4abfe86d4ffad593d9607fe70e83ea706033d44d24b3b6283cf3fc4f6b9190a1565b33600090815260026020526040812054819060011461058e5760405162461bcd60e51b8152600401808060200182810382526025815260200180611a1f6025913960400191505060405180910390fd5b50506004546001600160801b0380821691600160801b9004166001149091565b600154600881901c61ffff169060ff81169060181c8115610616576040805162461bcd60e51b815260206004820152601760248201527f47556e694c504f7261636c652f69732d73746f70706564000000000000000000604482015290519081900360640190fd5b8042101561066b576040805162461bcd60e51b815260206004820152601760248201527f47556e694c504f7261636c652f6e6f742d706173736564000000000000000000604482015290519081900360640190fd5b50506000610677611254565b90506001600160801b0381166106d4576040805162461bcd60e51b815260206004820152601a60248201527f47556e694c504f7261636c652f696e76616c69642d7072696365000000000000604482015290519081900360640190fd5b6106dc6119c4565b50604080518082018252600480546001600160801b03808216808552600160801b80840483166020808801829052600380546fffffffffffffffffffffffffffffffff199081169095178616928402929092179091558751808901895289851680825260019183018290529390951683178416909117909455600888901b42890160181b01909255835185519116815291820152825191927f80a5d0081d7e9a7bdb15ef207c6e0772f0f56d24317693206c0e47408f2d0b7392918290030190a1005b336000908152602081905260409020546001146107f1576040805162461bcd60e51b815260206004820152601b60248201526000805160206119ff833981519152604482015290519081900360640190fd5b60005b8181101561091c57600083838381811061080a57fe5b905060200201356001600160a01b03166001600160a01b03161415610873576040805162461bcd60e51b815260206004820152601a602482015279047556e694c504f7261636c652f6e6f2d636f6e74726163742d360341b604482015290519081900360640190fd5b60016002600085858581811061088557fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020819055507f6ffc0fabf0709270e42087e84a3bfc36041d3b281266d04ae1962185092fb2448383838181106108e657fe5b905060200201356001600160a01b031660405180826001600160a01b0316815260200191505060405180910390a16001016107f4565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b33600090815260208190526040902054600114610997576040805162461bcd60e51b815260206004820152601b60248201526000805160206119ff833981519152604482015290519081900360640190fd5b61ffff8111156109ee576040805162461bcd60e51b815260206004820152601860248201527f47556e694c504f7261636c652f696e76616c69642d686f700000000000000000604482015290519081900360640190fd5b6001805462ffff00191661010061ffff8416021790556040805182815290517fd5cae49d972f01d170fb2d3409c5f318698639863c0403e59e4af06e0ce92817916020908290030190a150565b33600090815260208190526040902054600114610a8d576040805162461bcd60e51b815260206004820152601b60248201526000805160206119ff833981519152604482015290519081900360640190fd5b60005b8181101561091c57600060026000858585818110610aaa57fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020819055507f12fdafd291eb287a54e3416070923d22aa5072f5ee04c4fb8361615e7508a37c838383818110610b0b57fe5b905060200201356001600160a01b031660405180826001600160a01b0316815260200191505060405180910390a1600101610a90565b7f000000000000000000000000000000000000000000000000000000000000000081565b60026020526000908152604090205481565b33600090815260026020526040812054600114610bc55760405162461bcd60e51b8152600401808060200182810382526025815260200180611a1f6025913960400191505060405180910390fd5b600354600160801b90046001600160801b0316600114610c2c576040805162461bcd60e51b815260206004820152601d60248201527f47556e694c504f7261636c652f6e6f2d63757272656e742d76616c7565000000604482015290519081900360640190fd5b506003546001600160801b03165b90565b336000908152600260205260408120548190600114610c8d5760405162461bcd60e51b8152600401808060200182810382526025815260200180611a1f6025913960400191505060405180910390fd5b50506003546001600160801b0380821691600160801b9004166001149091565b33600090815260208190526040902054600114610cff576040805162461bcd60e51b815260206004820152601b60248201526000805160206119ff833981519152604482015290519081900360640190fd5b6001600160a01b038116610d57576040805162461bcd60e51b815260206004820152601a602482015279047556e694c504f7261636c652f6e6f2d636f6e74726163742d360341b604482015290519081900360640190fd5b81610d7c57600580546001600160a01b0319166001600160a01b038316179055610df2565b8160011415610da557600680546001600160a01b0319166001600160a01b038316179055610df2565b6040805162461bcd60e51b815260206004820152601760248201527f47556e694c504f7261636c652f696e76616c69642d6964000000000000000000604482015290519081900360640190fd5b604080518381526001600160a01b038316602082015281517f57e1d18531e0ed6c4f60bf6039e5719aa115e43e43847525125856433a69f7a7929181900390910190a15050565b33600090815260208190526040902054600114610e8b576040805162461bcd60e51b815260206004820152601b60248201526000805160206119ff833981519152604482015290519081900360640190fd5b6001600160a01b038116600081815260026020908152604080832092909255815192835290517f12fdafd291eb287a54e3416070923d22aa5072f5ee04c4fb8361615e7508a37c9281900390910190a150565b33600090815260208190526040902054600114610f30576040805162461bcd60e51b815260206004820152601b60248201526000805160206119ff833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526020819052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a250565b6005546001600160a01b031681565b60015460ff1681565b33600090815260208190526040902054600114610fdf576040805162461bcd60e51b815260206004820152601b60248201526000805160206119ff833981519152604482015290519081900360640190fd5b6001600160a01b038116600081815260208190526040808220829055517f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b9190a250565b600154600090630100000090046001600160e81b031661104557506000610c3a565b60015461106b90630100000081046001600160e81b031690610100900461ffff166116fc565b905090565b600154630100000090046001600160e81b031642101590565b600154630100000090046001600160e81b031681565b600154610100900461ffff1681565b33600090815260208190526040902054600114611100576040805162461bcd60e51b815260206004820152601b60248201526000805160206119ff833981519152604482015290519081900360640190fd5b6001805460ff191690556040517f1b55ba3aa851a46be3b365aee5b5c140edd620d578922f3e8466d2cbd96f954b90600090a1565b60006020819052908152604090205481565b6006546001600160a01b031681565b336000908152602081905260409020546001146111a8576040805162461bcd60e51b815260206004820152601b60248201526000805160206119ff833981519152604482015290519081900360640190fd5b6001600160a01b038116611200576040805162461bcd60e51b815260206004820152601a602482015279047556e694c504f7261636c652f6e6f2d636f6e74726163742d360341b604482015290519081900360640190fd5b6001600160a01b03811660008181526002602090815260409182902060019055815192835290517f6ffc0fabf0709270e42087e84a3bfc36041d3b281266d04ae1962185092fb2449281900390910190a150565b600080600560009054906101000a90046001600160a01b03166001600160a01b03166357de26a46040518163ffffffff1660e01b815260040160206040518083038186803b1580156112a557600080fd5b505afa1580156112b9573d6000803e3d6000fd5b505050506040513d60208110156112cf57600080fd5b505190508061130f5760405162461bcd60e51b8152600401808060200182810382526023815260200180611a446023913960400191505060405180910390fd5b600654604080516315f789a960e21b815290516000926001600160a01b0316916357de26a4916004808301926020929190829003018186803b15801561135457600080fd5b505afa158015611368573d6000803e3d6000fd5b505050506040513d602081101561137e57600080fd5b50519050806113be5760405162461bcd60e51b81526004018080602001828103825260238152602001806119dc6023913960400191505060405180910390fd5b600061144f60306114366113f2857f000000000000000000000000000000000000000000000000000000000000000061175a565b61142961141f887f000000000000000000000000000000000000000000000000000000000000000061175a565b600160601b61175a565b8161143057fe5b046117c6565b6001600160801b0316901b6001600160801b031661190e565b90506000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b670ed7d846040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050604080518083038186803b1580156114c057600080fd5b505afa1580156114d4573d6000803e3d6000fd5b505050506040513d60408110156114ea57600080fd5b5080516020909101519092509050811515806115065750600081115b611557576040805162461bcd60e51b815260206004820152601d60248201527f47556e694c504f7261636c652f696e76616c69642d62616c616e636573000000604482015290519081900360640190fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156115b257600080fd5b505afa1580156115c6573d6000803e3d6000fd5b505050506040513d60208110156115dc57600080fd5b50519050633b9aca008110156116235760405162461bcd60e51b8152600401808060200182810382526023815260200180611a676023913960400191505060405180910390fd5b60008161168f61165c89611657887f000000000000000000000000000000000000000000000000000000000000000061175a565b61175a565b61168a89611657887f000000000000000000000000000000000000000000000000000000000000000061175a565b61196c565b8161169657fe5b049050600160801b81106116f1576040805162461bcd60e51b815260206004820152601b60248201527f47556e694c504f7261636c652f71756f74652d6f766572666c6f770000000000604482015290519081900360640190fd5b979650505050505050565b80820382811115611754576040805162461bcd60e51b815260206004820152601a60248201527f47556e694c504f7261636c652f7375622d756e646572666c6f77000000000000604482015290519081900360640190fd5b92915050565b60008115806117755750508082028282828161177257fe5b04145b611754576040805162461bcd60e51b815260206004820152601960248201527f47556e694c504f7261636c652f6d756c2d6f766572666c6f7700000000000000604482015290519081900360640190fd5b6000816117d557506000611909565b816001600160801b82106117ee5760809190911c9060401b5b6801000000000000000082106118095760409190911c9060201b5b64010000000082106118205760209190911c9060101b5b6201000082106118355760109190911c9060081b5b61010082106118495760089190911c9060041b5b6010821061185c5760049190911c9060021b5b600882106118685760011b5b600181858161187357fe5b048201901c9050600181858161188557fe5b048201901c9050600181858161189757fe5b048201901c905060018185816118a957fe5b048201901c905060018185816118bb57fe5b048201901c905060018185816118cd57fe5b048201901c905060018185816118df57fe5b048201901c905060008185816118f157fe5b0490508082106119015780611903565b815b93505050505b919050565b806001600160a01b0381168114611909576040805162461bcd60e51b815260206004820152601d60248201527f47556e694c504f7261636c652f75696e743136302d6f766572666c6f77000000604482015290519081900360640190fd5b80820182811015611754576040805162461bcd60e51b815260206004820152601960248201527f47556e694c504f7261636c652f6164642d6f766572666c6f7700000000000000604482015290519081900360640190fd5b60408051808201909152600080825260208201529056fe47556e694c504f7261636c652f696e76616c69642d6f7261636c652d312d707269636547556e694c504f7261636c652f6e6f742d617574686f72697a6564000000000047556e694c504f7261636c652f636f6e74726163742d6e6f742d77686974656c697374656447556e694c504f7261636c652f696e76616c69642d6f7261636c652d302d707269636547556e694c504f7261636c652f746f74616c2d737570706c792d746f6f2d736d616c6ca2646970667358221220869df76b56e08bd8fae51cc93bbbd6e3973eb722c14fb3c70763bc9656afd8a964736f6c634300060c003347556e694c504f7261636c652f696e76616c69642d6f7261636c652d6164647265737300000000000000000000000050379f632ca68d36e50cfbc8f78fe16bd1499d1e47554e495633444149555344433200000000000000000000000000000000000000000000000000000000000047c3dc029825da43be595e21fffd0b66ffcb7f6e00000000000000000000000077b68899b99b686f415d074278a9a16b336085a0
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101735760003560e01c806365c4ce7a116100de578063a7a1ed7211610097578063be9a655511610071578063be9a655514610447578063bf353dbb1461044f578063dca44f6f14610475578063f29c29c41461047d57610173565b8063a7a1ed72146103e8578063a9c52a3914610404578063b0b8579b1461042857610173565b806365c4ce7a1461034857806365fae35e1461036e5780636c2552f91461039457806375f12b211461039c5780639c52a7f1146103ba578063a4dff0a2146103e057610173565b806346d4577d1161013057806346d4577d1461025c5780634ca29923146102cc5780634fce7a2a146102e657806357de26a41461030c57806359e02dd71461031457806365af79091461031c57610173565b806307da68f5146101785780630e5a6c701461018257806318178358146101a35780631b25b65f146101ab5780632e7dc6af1461021b5780633a1cde751461023f575b600080fd5b6101806104a3565b005b61018a61053e565b6040805192835290151560208301528051918290030190f35b6101806105ae565b610180600480360360208110156101c157600080fd5b8101906020810181356401000000008111156101dc57600080fd5b8201836020820111156101ee57600080fd5b8035906020019184602083028401116401000000008311171561021057600080fd5b50909250905061079f565b610223610921565b604080516001600160a01b039092168252519081900360200190f35b6101806004803603602081101561025557600080fd5b5035610945565b6101806004803603602081101561027257600080fd5b81019060208101813564010000000081111561028d57600080fd5b82018360208201111561029f57600080fd5b803590602001918460208302840111640100000000831117156102c157600080fd5b509092509050610a3b565b6102d4610b41565b60408051918252519081900360200190f35b6102d4600480360360208110156102fc57600080fd5b50356001600160a01b0316610b65565b6102d4610b77565b61018a610c3d565b6101806004803603604081101561033257600080fd5b50803590602001356001600160a01b0316610cad565b6101806004803603602081101561035e57600080fd5b50356001600160a01b0316610e39565b6101806004803603602081101561038457600080fd5b50356001600160a01b0316610ede565b610223610f75565b6103a4610f84565b6040805160ff9092168252519081900360200190f35b610180600480360360208110156103d057600080fd5b50356001600160a01b0316610f8d565b6102d4611023565b6103f0611070565b604080519115158252519081900360200190f35b61040c611089565b604080516001600160e81b039092168252519081900360200190f35b61043061109f565b6040805161ffff9092168252519081900360200190f35b6101806110ae565b6102d46004803603602081101561046557600080fd5b50356001600160a01b0316611135565b610223611147565b6101806004803603602081101561049357600080fd5b50356001600160a01b0316611156565b336000908152602081905260409020546001146104f5576040805162461bcd60e51b815260206004820152601b60248201526000805160206119ff833981519152604482015290519081900360640190fd5b6001805460006003819055600481905560ff19909116821762ffffff169091556040517fbedf0f4abfe86d4ffad593d9607fe70e83ea706033d44d24b3b6283cf3fc4f6b9190a1565b33600090815260026020526040812054819060011461058e5760405162461bcd60e51b8152600401808060200182810382526025815260200180611a1f6025913960400191505060405180910390fd5b50506004546001600160801b0380821691600160801b9004166001149091565b600154600881901c61ffff169060ff81169060181c8115610616576040805162461bcd60e51b815260206004820152601760248201527f47556e694c504f7261636c652f69732d73746f70706564000000000000000000604482015290519081900360640190fd5b8042101561066b576040805162461bcd60e51b815260206004820152601760248201527f47556e694c504f7261636c652f6e6f742d706173736564000000000000000000604482015290519081900360640190fd5b50506000610677611254565b90506001600160801b0381166106d4576040805162461bcd60e51b815260206004820152601a60248201527f47556e694c504f7261636c652f696e76616c69642d7072696365000000000000604482015290519081900360640190fd5b6106dc6119c4565b50604080518082018252600480546001600160801b03808216808552600160801b80840483166020808801829052600380546fffffffffffffffffffffffffffffffff199081169095178616928402929092179091558751808901895289851680825260019183018290529390951683178416909117909455600888901b42890160181b01909255835185519116815291820152825191927f80a5d0081d7e9a7bdb15ef207c6e0772f0f56d24317693206c0e47408f2d0b7392918290030190a1005b336000908152602081905260409020546001146107f1576040805162461bcd60e51b815260206004820152601b60248201526000805160206119ff833981519152604482015290519081900360640190fd5b60005b8181101561091c57600083838381811061080a57fe5b905060200201356001600160a01b03166001600160a01b03161415610873576040805162461bcd60e51b815260206004820152601a602482015279047556e694c504f7261636c652f6e6f2d636f6e74726163742d360341b604482015290519081900360640190fd5b60016002600085858581811061088557fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020819055507f6ffc0fabf0709270e42087e84a3bfc36041d3b281266d04ae1962185092fb2448383838181106108e657fe5b905060200201356001600160a01b031660405180826001600160a01b0316815260200191505060405180910390a16001016107f4565b505050565b7f00000000000000000000000050379f632ca68d36e50cfbc8f78fe16bd1499d1e81565b33600090815260208190526040902054600114610997576040805162461bcd60e51b815260206004820152601b60248201526000805160206119ff833981519152604482015290519081900360640190fd5b61ffff8111156109ee576040805162461bcd60e51b815260206004820152601860248201527f47556e694c504f7261636c652f696e76616c69642d686f700000000000000000604482015290519081900360640190fd5b6001805462ffff00191661010061ffff8416021790556040805182815290517fd5cae49d972f01d170fb2d3409c5f318698639863c0403e59e4af06e0ce92817916020908290030190a150565b33600090815260208190526040902054600114610a8d576040805162461bcd60e51b815260206004820152601b60248201526000805160206119ff833981519152604482015290519081900360640190fd5b60005b8181101561091c57600060026000858585818110610aaa57fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020819055507f12fdafd291eb287a54e3416070923d22aa5072f5ee04c4fb8361615e7508a37c838383818110610b0b57fe5b905060200201356001600160a01b031660405180826001600160a01b0316815260200191505060405180910390a1600101610a90565b7f47554e495633444149555344433200000000000000000000000000000000000081565b60026020526000908152604090205481565b33600090815260026020526040812054600114610bc55760405162461bcd60e51b8152600401808060200182810382526025815260200180611a1f6025913960400191505060405180910390fd5b600354600160801b90046001600160801b0316600114610c2c576040805162461bcd60e51b815260206004820152601d60248201527f47556e694c504f7261636c652f6e6f2d63757272656e742d76616c7565000000604482015290519081900360640190fd5b506003546001600160801b03165b90565b336000908152600260205260408120548190600114610c8d5760405162461bcd60e51b8152600401808060200182810382526025815260200180611a1f6025913960400191505060405180910390fd5b50506003546001600160801b0380821691600160801b9004166001149091565b33600090815260208190526040902054600114610cff576040805162461bcd60e51b815260206004820152601b60248201526000805160206119ff833981519152604482015290519081900360640190fd5b6001600160a01b038116610d57576040805162461bcd60e51b815260206004820152601a602482015279047556e694c504f7261636c652f6e6f2d636f6e74726163742d360341b604482015290519081900360640190fd5b81610d7c57600580546001600160a01b0319166001600160a01b038316179055610df2565b8160011415610da557600680546001600160a01b0319166001600160a01b038316179055610df2565b6040805162461bcd60e51b815260206004820152601760248201527f47556e694c504f7261636c652f696e76616c69642d6964000000000000000000604482015290519081900360640190fd5b604080518381526001600160a01b038316602082015281517f57e1d18531e0ed6c4f60bf6039e5719aa115e43e43847525125856433a69f7a7929181900390910190a15050565b33600090815260208190526040902054600114610e8b576040805162461bcd60e51b815260206004820152601b60248201526000805160206119ff833981519152604482015290519081900360640190fd5b6001600160a01b038116600081815260026020908152604080832092909255815192835290517f12fdafd291eb287a54e3416070923d22aa5072f5ee04c4fb8361615e7508a37c9281900390910190a150565b33600090815260208190526040902054600114610f30576040805162461bcd60e51b815260206004820152601b60248201526000805160206119ff833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526020819052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a250565b6005546001600160a01b031681565b60015460ff1681565b33600090815260208190526040902054600114610fdf576040805162461bcd60e51b815260206004820152601b60248201526000805160206119ff833981519152604482015290519081900360640190fd5b6001600160a01b038116600081815260208190526040808220829055517f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b9190a250565b600154600090630100000090046001600160e81b031661104557506000610c3a565b60015461106b90630100000081046001600160e81b031690610100900461ffff166116fc565b905090565b600154630100000090046001600160e81b031642101590565b600154630100000090046001600160e81b031681565b600154610100900461ffff1681565b33600090815260208190526040902054600114611100576040805162461bcd60e51b815260206004820152601b60248201526000805160206119ff833981519152604482015290519081900360640190fd5b6001805460ff191690556040517f1b55ba3aa851a46be3b365aee5b5c140edd620d578922f3e8466d2cbd96f954b90600090a1565b60006020819052908152604090205481565b6006546001600160a01b031681565b336000908152602081905260409020546001146111a8576040805162461bcd60e51b815260206004820152601b60248201526000805160206119ff833981519152604482015290519081900360640190fd5b6001600160a01b038116611200576040805162461bcd60e51b815260206004820152601a602482015279047556e694c504f7261636c652f6e6f2d636f6e74726163742d360341b604482015290519081900360640190fd5b6001600160a01b03811660008181526002602090815260409182902060019055815192835290517f6ffc0fabf0709270e42087e84a3bfc36041d3b281266d04ae1962185092fb2449281900390910190a150565b600080600560009054906101000a90046001600160a01b03166001600160a01b03166357de26a46040518163ffffffff1660e01b815260040160206040518083038186803b1580156112a557600080fd5b505afa1580156112b9573d6000803e3d6000fd5b505050506040513d60208110156112cf57600080fd5b505190508061130f5760405162461bcd60e51b8152600401808060200182810382526023815260200180611a446023913960400191505060405180910390fd5b600654604080516315f789a960e21b815290516000926001600160a01b0316916357de26a4916004808301926020929190829003018186803b15801561135457600080fd5b505afa158015611368573d6000803e3d6000fd5b505050506040513d602081101561137e57600080fd5b50519050806113be5760405162461bcd60e51b81526004018080602001828103825260238152602001806119dc6023913960400191505060405180910390fd5b600061144f60306114366113f2857f0000000000000000000000000000000000000000000000000de0b6b3a764000061175a565b61142961141f887f00000000000000000000000000000000000000000000000000000000000f424061175a565b600160601b61175a565b8161143057fe5b046117c6565b6001600160801b0316901b6001600160801b031661190e565b90506000807f00000000000000000000000050379f632ca68d36e50cfbc8f78fe16bd1499d1e6001600160a01b031663b670ed7d846040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050604080518083038186803b1580156114c057600080fd5b505afa1580156114d4573d6000803e3d6000fd5b505050506040513d60408110156114ea57600080fd5b5080516020909101519092509050811515806115065750600081115b611557576040805162461bcd60e51b815260206004820152601d60248201527f47556e694c504f7261636c652f696e76616c69642d62616c616e636573000000604482015290519081900360640190fd5b60007f00000000000000000000000050379f632ca68d36e50cfbc8f78fe16bd1499d1e6001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156115b257600080fd5b505afa1580156115c6573d6000803e3d6000fd5b505050506040513d60208110156115dc57600080fd5b50519050633b9aca008110156116235760405162461bcd60e51b8152600401808060200182810382526023815260200180611a676023913960400191505060405180910390fd5b60008161168f61165c89611657887f000000000000000000000000000000000000000000000000000000000000000161175a565b61175a565b61168a89611657887f000000000000000000000000000000000000000000000000000000e8d4a5100061175a565b61196c565b8161169657fe5b049050600160801b81106116f1576040805162461bcd60e51b815260206004820152601b60248201527f47556e694c504f7261636c652f71756f74652d6f766572666c6f770000000000604482015290519081900360640190fd5b979650505050505050565b80820382811115611754576040805162461bcd60e51b815260206004820152601a60248201527f47556e694c504f7261636c652f7375622d756e646572666c6f77000000000000604482015290519081900360640190fd5b92915050565b60008115806117755750508082028282828161177257fe5b04145b611754576040805162461bcd60e51b815260206004820152601960248201527f47556e694c504f7261636c652f6d756c2d6f766572666c6f7700000000000000604482015290519081900360640190fd5b6000816117d557506000611909565b816001600160801b82106117ee5760809190911c9060401b5b6801000000000000000082106118095760409190911c9060201b5b64010000000082106118205760209190911c9060101b5b6201000082106118355760109190911c9060081b5b61010082106118495760089190911c9060041b5b6010821061185c5760049190911c9060021b5b600882106118685760011b5b600181858161187357fe5b048201901c9050600181858161188557fe5b048201901c9050600181858161189757fe5b048201901c905060018185816118a957fe5b048201901c905060018185816118bb57fe5b048201901c905060018185816118cd57fe5b048201901c905060018185816118df57fe5b048201901c905060008185816118f157fe5b0490508082106119015780611903565b815b93505050505b919050565b806001600160a01b0381168114611909576040805162461bcd60e51b815260206004820152601d60248201527f47556e694c504f7261636c652f75696e743136302d6f766572666c6f77000000604482015290519081900360640190fd5b80820182811015611754576040805162461bcd60e51b815260206004820152601960248201527f47556e694c504f7261636c652f6164642d6f766572666c6f7700000000000000604482015290519081900360640190fd5b60408051808201909152600080825260208201529056fe47556e694c504f7261636c652f696e76616c69642d6f7261636c652d312d707269636547556e694c504f7261636c652f6e6f742d617574686f72697a6564000000000047556e694c504f7261636c652f636f6e74726163742d6e6f742d77686974656c697374656447556e694c504f7261636c652f696e76616c69642d6f7261636c652d302d707269636547556e694c504f7261636c652f746f74616c2d737570706c792d746f6f2d736d616c6ca2646970667358221220869df76b56e08bd8fae51cc93bbbd6e3973eb722c14fb3c70763bc9656afd8a964736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000050379f632ca68d36e50cfbc8f78fe16bd1499d1e47554e495633444149555344433200000000000000000000000000000000000000000000000000000000000047c3dc029825da43be595e21fffd0b66ffcb7f6e00000000000000000000000077b68899b99b686f415d074278a9a16b336085a0
-----Decoded View---------------
Arg [0] : _src (address): 0x50379f632ca68D36E50cfBC8F78fe16bd1499d1e
Arg [1] : _wat (bytes32): 0x47554e4956334441495553444332000000000000000000000000000000000000
Arg [2] : _orb0 (address): 0x47c3dC029825Da43BE595E21fffD0b66FfcB7F6e
Arg [3] : _orb1 (address): 0x77b68899b99b686F415d074278a9a16b336085A0
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 00000000000000000000000050379f632ca68d36e50cfbc8f78fe16bd1499d1e
Arg [1] : 47554e4956334441495553444332000000000000000000000000000000000000
Arg [2] : 00000000000000000000000047c3dc029825da43be595e21fffd0b66ffcb7f6e
Arg [3] : 00000000000000000000000077b68899b99b686f415d074278a9a16b336085a0
Deployed Bytecode Sourcemap
3260:10838:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8235:142;;;:::i;:::-;;13072:125;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;10649:2282;;;:::i;13552:253::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13552:253:0;;-1:-1:-1;13552:253:0;-1:-1:-1;13552:253:0;:::i;3748:28::-;;;:::i;:::-;;;;-1:-1:-1;;;;;3748:28:0;;;;;;;;;;;;;;8477:171;;;;;;;;;;;;;;;;-1:-1:-1;8477:171:0;;:::i;13915:180::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13915:180:0;;-1:-1:-1;13915:180:0;-1:-1:-1;13915:180:0;:::i;4159:28::-;;;:::i;:::-;;;;;;;;;;;;;;;;4274:39;;;;;;;;;;;;;;;;-1:-1:-1;4274:39:0;-1:-1:-1;;;;;4274:39:0;;:::i;13205:171::-;;;:::i;12939:125::-;;;:::i;8656:347::-;;;;;;;;;;;;;;;;-1:-1:-1;8656:347:0;;;;;;-1:-1:-1;;;;;8656:347:0;;:::i;13813:94::-;;;;;;;;;;;;;;;;-1:-1:-1;13813:94:0;-1:-1:-1;;;;;13813:94:0;;:::i;3432:79::-;;;;;;;;;;;;;;;;-1:-1:-1;3432:79:0;-1:-1:-1;;;;;3432:79:0;;:::i;5042:30::-;;;:::i;3935:22::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3531:79;;;;;;;;;;;;;;;;-1:-1:-1;3531:79:0;-1:-1:-1;;;;;3531:79:0;;:::i;9055:148::-;;;:::i;9211:93::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;4082:18;;;:::i;:::-;;;;-1:-1:-1;;;;;4082:18:0;;;;;;;;;;;;;;4004:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8385:84;;;:::i;3312:41::-;;;;;;;;;;;;;;;;-1:-1:-1;3312:41:0;-1:-1:-1;;;;;3312:41:0;;:::i;5123:30::-;;;:::i;13384:160::-;;;;;;;;;;;;;;;;-1:-1:-1;13384:160:0;-1:-1:-1;;;;;13384:160:0;;:::i;8235:142::-;3672:10;3666:5;:17;;;;;;;;;;;3687:1;3666:22;3658:62;;;;;-1:-1:-1;;;3658:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3658:62:0;;;;;;;;;;;;;;;8286:1:::1;8276:11:::0;;:7:::1;8305:3;8298:10:::0;;;8326:3:::1;8319:10:::0;;;-1:-1:-1;;8276:11:0;;::::1;::::0;::::1;8340:7:::0;::::1;::::0;;;8363:6:::1;::::0;::::1;::::0;8276:7;8363:6:::1;8235:142::o:0;13072:125::-;4348:10;13116:7;4344:15;;;:3;:15;;;;;;13116:7;;4363:1;4344:20;4336:70;;;;-1:-1:-1;;;4336:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13165:3:0::1;:7:::0;-1:-1:-1;;;;;13165:7:0;;::::1;::::0;-1:-1:-1;;;13176:7:0;::::1;;13165::::0;13176:12:::1;13072:125:::0;;:::o;10649:2282::-;10984:1;10978:8;11082:1;11078:13;;;11093:6;11074:26;;11036:4;11017:26;;;11135:2;11131:14;11299:13;;11291:49;;;;;-1:-1:-1;;;11291:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11621:4;11602:15;:23;;11594:59;;;;;-1:-1:-1;;;11594:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10649:2282;;11677:11;11691:6;:4;:6::i;:::-;11677:20;-1:-1:-1;;;;;;11716:8:0;;11708:47;;;;;-1:-1:-1;;;11708:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11766:16;;:::i;:::-;-1:-1:-1;11766:22:0;;;;;;;;11785:3;11766:22;;-1:-1:-1;;;;;11766:22:0;;;;;;-1:-1:-1;;;11766:22:0;;;;;;;;;;;;11853:3;:10;;-1:-1:-1;;11853:10:0;;;;;;;;;;;;;;;;;;11880:12;;;;;;;;;;;;;-1:-1:-1;11880:12:0;;;;;;11874:18;;;;;;;;;;;;;;12613:1;12609:12;;;12514:11;12510:22;;12506:2;12502:31;12424:216;12379:276;;;12774:8;;12768:20;;;;;;;;;;;;11766:22;;12768:20;;;;;;;;;12907:6;13552:253;3672:10;3666:5;:17;;;;;;;;;;;3687:1;3666:22;3658:62;;;;;-1:-1:-1;;;3658:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3658:62:0;;;;;;;;;;;;;;;13618:9:::1;13614:184;13633:13:::0;;::::1;13614:184;;;13693:1;13676:2:::0;;13679:1;13676:5;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;13676:5:0::1;-1:-1:-1::0;;;;;13676:19:0::1;;;13668:58;;;::::0;;-1:-1:-1;;;13668:58:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;13668:58:0;;;;;;;;;;;;;::::1;;13754:1;13741:3;:10;13745:2;;13748:1;13745:5;;;;;;;;;;;;;-1:-1:-1::0;;;;;13745:5:0::1;-1:-1:-1::0;;;;;13741:10:0::1;-1:-1:-1::0;;;;;13741:10:0::1;;;;;;;;;;;;:14;;;;13775:11;13780:2;;13783:1;13780:5;;;;;;;;;;;;;-1:-1:-1::0;;;;;13780:5:0::1;13775:11;;;;-1:-1:-1::0;;;;;13775:11:0::1;;;;;;;;;;;;;;;13648:3;;13614:184;;;;13552:253:::0;;:::o;3748:28::-;;;:::o;8477:171::-;3672:10;3666:5;:17;;;;;;;;;;;3687:1;3666:22;3658:62;;;;;-1:-1:-1;;;3658:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3658:62:0;;;;;;;;;;;;;;;8538:18:::1;::::0;::::1;;8530:55;;;::::0;;-1:-1:-1;;;8530:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;8596:3;:18:::0;;-1:-1:-1;;8596:18:0::1;;;::::0;::::1;;;::::0;;8630:10:::1;::::0;;;;;;;::::1;::::0;::::1;::::0;;;;;;::::1;8477:171:::0;:::o;13915:180::-;3672:10;3666:5;:17;;;;;;;;;;;3687:1;3666:22;3658:62;;;;;-1:-1:-1;;;3658:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3658:62:0;;;;;;;;;;;;;;;13981:9:::1;13977:111;13996:13:::0;;::::1;13977:111;;;14044:1;14031:3;:10;14035:2;;14038:1;14035:5;;;;;;;;;;;;;-1:-1:-1::0;;;;;14035:5:0::1;-1:-1:-1::0;;;;;14031:10:0::1;-1:-1:-1::0;;;;;14031:10:0::1;;;;;;;;;;;;:14;;;;14065:11;14070:2;;14073:1;14070:5;;;;;;;;;;;;;-1:-1:-1::0;;;;;14070:5:0::1;14065:11;;;;-1:-1:-1::0;;;;;14065:11:0::1;;;;;;;;;;;;;;;14011:3;;13977:111;;4159:28:::0;;;:::o;4274:39::-;;;;;;;;;;;;;:::o;13205:171::-;4348:10;13249:7;4344:15;;;:3;:15;;;;;;4363:1;4344:20;4336:70;;;;-1:-1:-1;;;4336:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13277:3:::1;:7:::0;-1:-1:-1;;;13277:7:0;::::1;-1:-1:-1::0;;;;;13277:7:0::1;13288:1;13277:12;13269:54;;;::::0;;-1:-1:-1;;;13269:54:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;13358:3:0::1;:7:::0;-1:-1:-1;;;;;13358:7:0::1;4408:1;13205:171:::0;:::o;12939:125::-;4348:10;12983:7;4344:15;;;:3;:15;;;;;;12983:7;;4363:1;4344:20;4336:70;;;;-1:-1:-1;;;4336:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13032:3:0::1;:7:::0;-1:-1:-1;;;;;13032:7:0;;::::1;::::0;-1:-1:-1;;;13043:7:0;::::1;;13032::::0;13043:12:::1;12939:125:::0;;:::o;8656:347::-;3672:10;3666:5;:17;;;;;;;;;;;3687:1;3666:22;3658:62;;;;;-1:-1:-1;;;3658:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3658:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;8730:18:0;::::1;8722:57;;;::::0;;-1:-1:-1;;;8722:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;8722:57:0;;;;;;;;;;;;;::::1;;8793:8:::0;8790:175:::1;;8818:4;:11:::0;;-1:-1:-1;;;;;;8818:11:0::1;-1:-1:-1::0;;;;;8818:11:0;::::1;;::::0;;8790:175:::1;;;8851:3;8858:1;8851:8;8847:118;;;8876:4;:11:::0;;-1:-1:-1;;;;;;8876:11:0::1;-1:-1:-1::0;;;;;8876:11:0;::::1;;::::0;;8847:118:::1;;;8920:33;::::0;;-1:-1:-1;;;8920:33:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;8847:118;8980:15;::::0;;;;;-1:-1:-1;;;;;8980:15:0;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;;::::1;8656:347:::0;;:::o;13813:94::-;3672:10;3666:5;:17;;;;;;;;;;;3687:1;3666:22;3658:62;;;;;-1:-1:-1;;;3658:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3658:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;13864:7:0;::::1;13874:1;13864:7:::0;;;:3:::1;:7;::::0;;;;;;;:11;;;;13891:8;;;;;;;::::1;::::0;;;;;;;;::::1;13813:94:::0;:::o;3432:79::-;3672:10;3666:5;:17;;;;;;;;;;;3687:1;3666:22;3658:62;;;;;-1:-1:-1;;;3658:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3658:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;3476:11:0;::::1;:5;:11:::0;;;::::1;::::0;;;;;;;3490:1:::1;3476:15:::0;;3498:10;::::1;::::0;3476:5;3498:10:::1;3432:79:::0;:::o;5042:30::-;;;-1:-1:-1;;;;;5042:30:0;;:::o;3935:22::-;;;;;;:::o;3531:79::-;3672:10;3666:5;:17;;;;;;;;;;;3687:1;3666:22;3658:62;;;;;-1:-1:-1;;;3658:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3658:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;3575:11:0;::::1;3589:1;3575:11:::0;;;::::1;::::0;;;;;;;:15;;;3597:10;::::1;::::0;3589:1;3597:10:::1;3531:79:::0;:::o;9055:148::-;9117:3;;9093:7;;9117:3;;;-1:-1:-1;;;;;9117:3:0;9113:22;;-1:-1:-1;9134:1:0;9127:8;;9113:22;9186:3;;9181:14;;9186:3;;;-1:-1:-1;;;;;9186:3:0;;;9191;;;;9181:4;:14::i;:::-;9174:21;;9055:148;:::o;9211:93::-;9293:3;;;;;-1:-1:-1;;;;;9293:3:0;9274:15;:22;;;9211:93::o;4082:18::-;;;;;;-1:-1:-1;;;;;4082:18:0;;:::o;4004:28::-;;;;;;;;;:::o;8385:84::-;3672:10;3666:5;:17;;;;;;;;;;;3687:1;3666:22;3658:62;;;;;-1:-1:-1;;;3658:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3658:62:0;;;;;;;;;;;;;;;8427:7:::1;:11:::0;;-1:-1:-1;;8427:11:0::1;::::0;;8454:7:::1;::::0;::::1;::::0;8437:1:::1;::::0;8454:7:::1;8385:84::o:0;3312:41::-;;;;;;;;;;;;;;:::o;5123:30::-;;;-1:-1:-1;;;;;5123:30:0;;:::o;13384:160::-;3672:10;3666:5;:17;;;;;;;;;;;3687:1;3666:22;3658:62;;;;;-1:-1:-1;;;3658:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3658:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;13443:16:0;::::1;13435:55;;;::::0;;-1:-1:-1;;;13435:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;13435:55:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;13501:7:0;::::1;;::::0;;;:3:::1;:7;::::0;;;;;;;;13511:1:::1;13501:11:::0;;13528:8;;;;;;;::::1;::::0;;;;;;;;::::1;13384:160:::0;:::o;9312:1329::-;9346:13;9442:10;9466:4;;;;;;;;;-1:-1:-1;;;;;9466:4:0;-1:-1:-1;;;;;9455:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9455:23:0;;-1:-1:-1;9538:7:0;9530:55;;;;-1:-1:-1;;;9530:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9620:4;;9609:23;;;-1:-1:-1;;;9609:23:0;;;;9596:10;;-1:-1:-1;;;;;9620:4:0;;9609:21;;:23;;;;;;;;;;;;;;9620:4;9609:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9609:23:0;;-1:-1:-1;9692:7:0;9684:55;;;;-1:-1:-1;;;9684:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9750:20;9773:77;9847:2;9783:60;9825:16;9830:2;9834:6;9825:4;:16::i;:::-;9788:33;9793:16;9798:2;9802:6;9793:4;:16::i;:::-;-1:-1:-1;;;9788:4:0;:33::i;:::-;:54;;;;;;9783:4;:60::i;:::-;-1:-1:-1;;;;;9783:66:0;;;-1:-1:-1;;;;;9773:77:0;:9;:77::i;:::-;9750:100;;9915:10;9927;9950:3;-1:-1:-1;;;;;9941:42:0;;9984:12;9941:56;;;;;;;;;;;;;-1:-1:-1;;;;;9941:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9941:56:0;;;;;;;;;-1:-1:-1;9941:56:0;-1:-1:-1;10016:6:0;;;;:16;;;10031:1;10026:2;:6;10016:16;10008:58;;;;;-1:-1:-1;;;10008:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10077:19;10109:3;-1:-1:-1;;;;;10099:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10099:28:0;;-1:-1:-1;10161:3:0;10146:18;;;10138:66;;;;-1:-1:-1;;;10138:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10391:12;10516:11;10406:107;10425:31;10430:2;10434:21;10439:2;10443:11;10434:4;:21::i;:::-;10425:4;:31::i;:::-;10471;10476:2;10480:21;10485:2;10489:11;10480:4;:21::i;10471:31::-;10406:4;:107::i;:::-;:121;;;;;;10391:136;;-1:-1:-1;;;10546:4:0;:15;10538:55;;;;;-1:-1:-1;;;10538:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10620:4;9312:1329;-1:-1:-1;;;;;;;9312:1329:0:o;5421:149::-;5517:7;;;5512:19;;;;5504:58;;;;;-1:-1:-1;;;5504:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;5421:149;;;;:::o;5576:164::-;5637:9;5667:7;;;:35;;-1:-1:-1;;5683:7:0;;;5700:2;5694;5683:7;5694:2;5678:18;;;;;:24;5667:35;5659:73;;;;;-1:-1:-1;;;5659:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;6041:970;6089:7;6113;6109:895;;-1:-1:-1;6129:1:0;6122:8;;6109:895;6174:2;6203:1;-1:-1:-1;;;6223:41:0;;6219:72;;6275:3;6268:10;;;;;6286:2;6280:8;6219:72;6315:19;6309:2;:25;6305:55;;6345:2;6338:9;;;;;6355:2;6349:8;6305:55;6384:11;6378:2;:17;6374:47;;6406:2;6399:9;;;;;6416:2;6410:8;6374:47;6445:7;6439:2;:13;6435:42;;6463:2;6456:9;;;;;6473:1;6467:7;6435:42;6501:5;6495:2;:11;6491:39;;6517:1;6510:8;;;;;6526:1;6520:7;6491:39;6554:4;6548:2;:10;6544:38;;6569:1;6562:8;;;;;6578:1;6572:7;6544:38;6606:3;6600:2;:9;6596:27;;6619:1;6613:7;6596:27;6657:1;6651;6646:2;:6;;;;;;6642:1;:10;6641:17;;6637:21;;6693:1;6687;6682:2;:6;;;;;;6678:1;:10;6677:17;;6673:21;;6729:1;6723;6718:2;:6;;;;;;6714:1;:10;6713:17;;6709:21;;6765:1;6759;6754:2;:6;;;;;;6750:1;:10;6749:17;;6745:21;;6801:1;6795;6790:2;:6;;;;;;6786:1;:10;6785:17;;6781:21;;6837:1;6831;6826:2;:6;;;;;;6822:1;:10;6821:17;;6817:21;;6873:1;6867;6862:2;:6;;;;;;6858:1;:10;6857:17;;6853:21;;6926:10;6944:1;6939:2;:6;;;;;;6926:19;;6980:2;6976:1;:6;:15;;6989:2;6976:15;;;6985:1;6976:15;6960:32;;;;;6109:895;6041:970;;;:::o;5746:146::-;5849:1;-1:-1:-1;;;;;5829:21:0;;;;5821:63;;;;;-1:-1:-1;;;5821:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;5267:148;5363:7;;;5358:19;;;;5350:57;;;;;-1:-1:-1;;;5350:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://869df76b56e08bd8fae51cc93bbbd6e3973eb722c14fb3c70763bc9656afd8a9
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.