Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0xC4bAFdD2...7eA0eE331 The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
UniswapRebalancerMakerBroker
Compiler Version
v0.5.13+commit.5b0b510c
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2020-07-20
*/
// File: contracts/loopring/impl/BrokerData.sol
pragma solidity ^0.5.7;
library BrokerData {
struct BrokerOrder {
address owner;
bytes32 orderHash;
uint fillAmountB;
uint requestedAmountS;
uint requestedFeeAmount;
address tokenRecipient;
bytes extraData;
}
/**
* The request wraps all broker orders that share the following overall fields. The perspective on these fields is
* the orders that are passed in. Meaning, `tokenB` is the token being RECEIVED by each owner and `tokenS` is the
* token being SPENT by each owner. Lastly, `totalRequestedFeeAmount` is the total `feeAmountS` for all brokered
* orders. If the fees are in `tokenB`, then this amount is always 0.
*/
struct BrokerApprovalRequest {
BrokerOrder[] orders;
// The token output token for the broker at the end of #brokerRequestAllowance.
address tokenS;
// The token received by the broker at the start of #brokerRequestAllowance. This token must be internally traded
// for tokenS.
address tokenB;
address feeToken;
// The amount of tokens that the broker has at the start of the call to #brokerRequestAllowance. This amount needs
// to be traded within the brokering contract for #totalRequestedAmountS
uint totalFillAmountB;
// The amount of tokens that needs be outputted by #brokerRequestAllowance (and therefore traded for INTERNALLY
// within the contract)
uint totalRequestedAmountS;
uint totalRequestedFeeAmount;
}
struct BrokerInterceptorReport {
address owner;
address broker;
bytes32 orderHash;
address tokenB;
address tokenS;
address feeToken;
uint fillAmountB;
uint spentAmountS;
uint spentFeeAmount;
address tokenRecipient;
bytes extraData;
}
}
// File: contracts/market-making/sources/uniswap-v2/interfaces/IUniswapV2Router01.sol
/*
* Copyright 2019 Dolomite
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
pragma solidity ^0.5.7;
pragma experimental ABIEncoderV2;
interface IUniswapV2Router01 {
function swapExactTokensForTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function getAmountsOut(
uint amountIn,
address[] calldata path
) external view returns (uint[] memory amounts);
}
// File: openzeppelin-solidity/contracts/token/ERC20/IERC20.sol
pragma solidity ^0.5.0;
/**
* @title ERC20 interface
* @dev see https://github.com/ethereum/EIPs/issues/20
*/
interface IERC20 {
function transfer(address to, uint256 value) external returns (bool);
function approve(address spender, uint256 value) external returns (bool);
function transferFrom(address from, address to, uint256 value) external returns (bool);
function totalSupply() external view returns (uint256);
function balanceOf(address who) external view returns (uint256);
function allowance(address owner, address spender) external view returns (uint256);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
// File: openzeppelin-solidity/contracts/math/SafeMath.sol
pragma solidity ^0.5.0;
/**
* @title SafeMath
* @dev Unsigned math operations with safety checks that revert on error
*/
library SafeMath {
/**
* @dev Multiplies two unsigned integers, reverts on 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-solidity/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b);
return c;
}
/**
* @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
// Solidity only automatically asserts when dividing by 0
require(b > 0);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend).
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
require(b <= a);
uint256 c = a - b;
return c;
}
/**
* @dev Adds two unsigned integers, reverts on overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a);
return c;
}
/**
* @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo),
* reverts when dividing by zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
require(b != 0);
return a % b;
}
}
// File: openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol
pragma solidity ^0.5.0;
/**
* @title SafeERC20
* @dev Wrappers around ERC20 operations that throw on failure.
* To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20 {
using SafeMath for uint256;
function safeTransfer(IERC20 token, address to, uint256 value) internal {
require(token.transfer(to, value));
}
function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
require(token.transferFrom(from, to, value));
}
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'
require((value == 0) || (token.allowance(address(this), spender) == 0));
require(token.approve(spender, value));
}
function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender).add(value);
require(token.approve(spender, newAllowance));
}
function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender).sub(value);
require(token.approve(spender, newAllowance));
}
}
// File: contracts/libs/SafeEther.sol
/*
* Copyright 2020 Dolomite
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
pragma solidity ^0.5.0;
library SafeEther {
function toPayable(address _address) internal pure returns (address payable) {
return address(uint160(_address));
}
function safeTransferEther(address recipient, uint amount) internal {
safeTransferEther(recipient, amount, "CANNOT_TRANSFER_ETHER");
}
function safeTransferEther(address recipient, uint amount, string memory errorMessage) internal {
(bool success,) = address(uint160(recipient)).call.value(amount)("");
require(success, errorMessage);
}
}
// File: contracts/market-making/helper/MakerBrokerBase.sol
/*
* Copyright 2020 Dolomite
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
pragma solidity ^0.5.7;
/**
* @dev The base contract for any ownable contract is used for permissioned market making with either open liquidity
* pools, like Uniswap, or permissioned ones like Dolomite Options.
*/
contract MakerBrokerBase {
using SafeEther for address payable;
using SafeERC20 for IERC20;
address public owner;
constructor() public {
owner = msg.sender;
}
modifier onlyOwner() {
require(msg.sender == owner, "NOT_OWNER");
_;
}
function transferOwnership(address newOwner) public onlyOwner {
require(newOwner != address(0x0), "ZERO_ADDRESS");
owner = newOwner;
}
function withdrawDust(address token) external {
_withdrawDust(token, msg.sender);
}
function withdrawDust(address token, address recipient) external {
_withdrawDust(token, recipient);
}
function withdrawEthDust() external {
_withdrawEthDust(msg.sender);
}
function withdrawEthDust(address payable recipient) external {
_withdrawEthDust(recipient);
}
function _withdrawDust(address token, address recipient) internal {
require(msg.sender == owner, "UNAUTHORIZED");
IERC20(token).safeTransfer(
recipient,
IERC20(token).balanceOf(address(this))
);
}
function _withdrawEthDust(address payable recipient) internal {
require(msg.sender == owner, "UNAUTHORIZED");
recipient.safeTransferEther(address(this).balance);
}
}
// File: contracts/misc/interfaces/IWETH.sol
/*
* Copyright 2019 Dolomite
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
pragma solidity ^0.5.7;
interface IWETH {
event Deposit(address indexed src, uint wad);
event Withdraw(address indexed src, uint wad);
function deposit() external payable;
function withdraw(uint wad) external;
}
// File: contracts/loopring/iface/IBrokerDelegate.sol
/*
* Copyright 2019 Dolomite
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
pragma solidity ^0.5.7;
interface IBrokerDelegate {
/*
* Loopring requests an allowance be set on a given token for a specified amount. Order details
* are provided (tokenS, totalAmountS, tokenB, totalAmountB, orderTokenRecipient, extraOrderData)
* to aid in any calculations or on-chain exchange of assets that may be required. The last 4
* parameters concern the actual token approval being requested of the broker.
*
* @returns Whether or not onOrderFillReport should be called for orders using this broker
*/
function brokerRequestAllowance(BrokerData.BrokerApprovalRequest calldata request) external returns (bool);
/*
* After Loopring performs all of the transfers necessary to complete all the submitted
* rings it will call this function for every order's brokerInterceptor (if set) passing
* along the final fill counts for tokenB, tokenS and feeToken. This allows actions to be
* performed on a per-order basis after all tokenS/feeToken funds have left the order owner's
* possession and the tokenB funds have been transferred to the order owner's intended recipient
*/
function onOrderFillReport(BrokerData.BrokerInterceptorReport calldata fillReport) external;
/*
* Get the available token balance controlled by the broker on behalf of an address (owner)
*/
function brokerBalanceOf(address owner, address token) external view returns (uint);
}
// File: contracts/market-making/UniswapRebalancerMakerBroker.sol
/*
* Copyright 2019 Dolomite
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
pragma solidity ^0.5.7;
/*
* Inherits Loopring's IBrokerDelegate and sources liquidity from Uniswap
* when the Loopring protocol requests a token approval. Because the Loopring
* protocol expects the taker order to precede maker orders, and non-brokered
* transfers occur before before brokered transfers, it is guaranteed that this
* broker contract will receive the necessary tokens to trade, right before it
* sets the approval and the Loopring protocol transfers the tokens out. Thus,
* liquidity can be sourced on-chain with no money down!
*/
contract UniswapRebalancerMakerBroker is MakerBrokerBase, IBrokerDelegate {
address internal _wethTokenAddress;
address internal _loopringDelegate;
address internal _uniswapV2Router;
uint8 internal _slippageFactor;
uint8 internal _decayFactor;
mapping(address => address) public tokenToExchange;
mapping(address => bool) public tokenToIsSetup;
constructor(address loopringDelegate, address uniswapV2Router, address wethTokenAddress) public {
_loopringDelegate = loopringDelegate;
_wethTokenAddress = wethTokenAddress;
_uniswapV2Router = uniswapV2Router;
_slippageFactor = 4;
_decayFactor = 10;
}
function setupToken(address token) public {
IERC20(token).safeApprove(_loopringDelegate, uint(- 1));
IERC20(token).safeApprove(_uniswapV2Router, uint(- 1));
tokenToIsSetup[token] = true;
}
function setupTokens(address[] calldata tokens) external {
for (uint i = 0; i < tokens.length; i++) {
setupToken(tokens[i]);
}
}
function setSlippageFactor(uint8 slippageFactor) external onlyOwner {
_slippageFactor = slippageFactor;
}
function getSlippageFactor() external view returns (uint8) {
return _slippageFactor;
}
function setDecayFactor(uint8 decayFactor) external onlyOwner {
_decayFactor = decayFactor;
}
function getDecayFactor() external view returns (uint8) {
return _decayFactor;
}
function() external payable {
revert("UniswapRebalancerMakerBroker: NO_DEFAULT");
}
// --------------------------------
// Loopring Broker Delegate
function brokerRequestAllowance(BrokerData.BrokerApprovalRequest memory request) public returns (bool) {
require(msg.sender == _loopringDelegate, "UniswapRebalancerMakerBroker: UNAUTHORIZED");
require(tokenToIsSetup[request.tokenS], "UniswapRebalancerMakerBroker: TOKEN_S_NOT_SETUP");
for (uint i = 0; i < request.orders.length; i++) {
require(request.orders[i].tokenRecipient == address(this), "UniswapRebalancerMakerBroker: INVALID_TOKEN_RECIPIENT");
require(request.orders[i].owner == owner, "UniswapRebalancerMakerBroker: INVALID_ORDER_OWNER");
}
address[] memory intermediatePaths;
if (request.orders[0].extraData.length == 0) {
intermediatePaths = new address[](0);
} else {
intermediatePaths = abi.decode(request.orders[0].extraData, (address[]));
}
if (
(_decayFactor != 0 && _slippageFactor != 0) &&
(intermediatePaths.length == 0 || intermediatePaths[0] != address(0x0000000000000000000000000000000000000001))
) {
address[] memory path = new address[](intermediatePaths.length + 2);
path[0] = request.tokenB;
for (uint i = 0; i < intermediatePaths.length; i++) {
path[i + 1] = intermediatePaths[i];
}
path[path.length - 1] = request.tokenS;
uint[] memory amounts = IUniswapV2Router01(_uniswapV2Router).getAmountsOut(request.totalFillAmountB, path);
if (amounts[amounts.length - 1] >= request.totalRequestedAmountS) {
IUniswapV2Router01(_uniswapV2Router).swapExactTokensForTokens(
request.totalFillAmountB,
request.totalRequestedAmountS / uint(_slippageFactor),
path,
address(this),
block.timestamp
);
} else {
IUniswapV2Router01(_uniswapV2Router).swapExactTokensForTokens(
request.totalFillAmountB / uint(_decayFactor),
request.totalRequestedAmountS / (uint(_decayFactor) * uint(_slippageFactor)),
path,
address(this),
block.timestamp
);
}
}
// We don't need a fill report.
return false;
}
function onOrderFillReport(BrokerData.BrokerInterceptorReport memory fillReport) public {
// No op
}
/*
* This broker isn't concerned with accurate balance reporting. It simplifies balance-tracking logic to just report
* a maximum.
*/
function brokerBalanceOf(address owner, address token) public view returns (uint) {
return uint(- 1);
}
function balanceOf(address token) public view returns (uint) {
return IERC20(token).balanceOf(address(this));
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"loopringDelegate","type":"address"},{"internalType":"address","name":"uniswapV2Router","type":"address"},{"internalType":"address","name":"wethTokenAddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":true,"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"token","type":"address"}],"name":"brokerBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"components":[{"components":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"internalType":"uint256","name":"fillAmountB","type":"uint256"},{"internalType":"uint256","name":"requestedAmountS","type":"uint256"},{"internalType":"uint256","name":"requestedFeeAmount","type":"uint256"},{"internalType":"address","name":"tokenRecipient","type":"address"},{"internalType":"bytes","name":"extraData","type":"bytes"}],"internalType":"struct BrokerData.BrokerOrder[]","name":"orders","type":"tuple[]"},{"internalType":"address","name":"tokenS","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"address","name":"feeToken","type":"address"},{"internalType":"uint256","name":"totalFillAmountB","type":"uint256"},{"internalType":"uint256","name":"totalRequestedAmountS","type":"uint256"},{"internalType":"uint256","name":"totalRequestedFeeAmount","type":"uint256"}],"internalType":"struct BrokerData.BrokerApprovalRequest","name":"request","type":"tuple"}],"name":"brokerRequestAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getDecayFactor","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getSlippageFactor","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"components":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"broker","type":"address"},{"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"address","name":"tokenS","type":"address"},{"internalType":"address","name":"feeToken","type":"address"},{"internalType":"uint256","name":"fillAmountB","type":"uint256"},{"internalType":"uint256","name":"spentAmountS","type":"uint256"},{"internalType":"uint256","name":"spentFeeAmount","type":"uint256"},{"internalType":"address","name":"tokenRecipient","type":"address"},{"internalType":"bytes","name":"extraData","type":"bytes"}],"internalType":"struct BrokerData.BrokerInterceptorReport","name":"fillReport","type":"tuple"}],"name":"onOrderFillReport","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint8","name":"decayFactor","type":"uint8"}],"name":"setDecayFactor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint8","name":"slippageFactor","type":"uint8"}],"name":"setSlippageFactor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"setupToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"}],"name":"setupTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenToExchange","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenToIsSetup","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"withdrawDust","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawDust","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdrawEthDust","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address payable","name":"recipient","type":"address"}],"name":"withdrawEthDust","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
0x60806040523480156200001157600080fd5b5060405162001c2038038062001c208339810160408190526200003491620000d1565b60008054336001600160a01b0319918216179091556002805482166001600160a01b039586161790556001805482169285169290921790915560038054909116919092161760ff60a01b1916740400000000000000000000000000000000000000001760ff60a81b1916750a00000000000000000000000000000000000000000017905562000151565b8051620000cb8162000137565b92915050565b600080600060608486031215620000e757600080fd5b6000620000f58686620000be565b93505060206200010886828701620000be565b92505060406200011b86828701620000be565b9150509250925092565b60006001600160a01b038216620000cb565b620001428162000125565b81146200014e57600080fd5b50565b611abf80620001616000396000f3fe6080604052600436106101095760003560e01c80637fa948d211610095578063b3c4a36b11610064578063b3c4a36b146102dd578063beb66f6f146102fd578063c3c49a631461031d578063cc2df0961461033d578063f2fde38b1461035d57610109565b80637fa948d2146102665780638938d0981461027b5780638da5cb5b1461029b578063b3508011146102bd57610109565b806356604d02116100dc57806356604d02146101b75780636b24b8b2146101e457806370a08231146101f9578063727b615a146102265780637d8784d81461024657610109565b806301b99eba1461012a578063097d2c591461014c578063212d1e59146101775780633f21777614610197575b60405162461bcd60e51b8152600401610121906118aa565b60405180910390fd5b34801561013657600080fd5b5061014a6101453660046112fc565b61037d565b005b34801561015857600080fd5b5061016161038a565b60405161016e919061193b565b60405180910390f35b34801561018357600080fd5b5061014a6101923660046114ae565b61039a565b3480156101a357600080fd5b5061014a6101b23660046114ae565b6103e4565b3480156101c357600080fd5b506101d76101d23660046112fc565b61042e565b60405161016e919061181b565b3480156101f057600080fd5b5061014a610443565b34801561020557600080fd5b506102196102143660046112fc565b61044e565b60405161016e91906118ba565b34801561023257600080fd5b5061014a61024136600461145b565b610387565b34801561025257600080fd5b50610219610261366004611322565b6104d3565b34801561027257600080fd5b506101616104dc565b34801561028757600080fd5b5061014a6102963660046112fc565b6104ec565b3480156102a757600080fd5b506102b06104f5565b60405161016e91906117c2565b3480156102c957600080fd5b5061014a6102d8366004611322565b610504565b3480156102e957600080fd5b5061014a6102f83660046112fc565b610512565b34801561030957600080fd5b5061014a61031836600461135c565b61057a565b34801561032957600080fd5b506102b06103383660046112fc565b6105b6565b34801561034957600080fd5b506101d7610358366004611426565b6105d1565b34801561036957600080fd5b5061014a6103783660046112fc565b610acb565b6103878133610b3d565b50565b600354600160a01b900460ff1690565b6000546001600160a01b031633146103c45760405162461bcd60e51b81526004016101219061186a565b6003805460ff909216600160a01b0260ff60a01b19909216919091179055565b6000546001600160a01b0316331461040e5760405162461bcd60e51b81526004016101219061186a565b6003805460ff909216600160a81b0260ff60a81b19909216919091179055565b60056020526000908152604090205460ff1681565b61044c33610bfe565b565b6040516370a0823160e01b81526000906001600160a01b038316906370a082319061047d9030906004016117d0565b60206040518083038186803b15801561049557600080fd5b505afa1580156104a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506104cd9190810190611490565b92915050565b60001992915050565b600354600160a81b900460ff1690565b61038781610bfe565b6000546001600160a01b031681565b61050e8282610b3d565b5050565b600254610534906001600160a01b03838116911660001963ffffffff610c4116565b600354610556906001600160a01b03838116911660001963ffffffff610c4116565b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b60005b818110156105b1576105a983838381811061059457fe5b90506020020160206102f891908101906112fc565b60010161057d565b505050565b6004602052600090815260409020546001600160a01b031681565b6002546000906001600160a01b031633146105fe5760405162461bcd60e51b81526004016101219061187a565b6020808301516001600160a01b031660009081526005909152604090205460ff1661063b5760405162461bcd60e51b81526004016101219061189a565b60005b8251518110156106e257825180513091908390811061065957fe5b602002602001015160a001516001600160a01b03161461068b5760405162461bcd60e51b81526004016101219061185a565b600054835180516001600160a01b0390921691839081106106a857fe5b6020026020010151600001516001600160a01b0316146106da5760405162461bcd60e51b81526004016101219061188a565b60010161063e565b50606082600001516000815181106106f657fe5b602002602001015160c001515160001415610720575060408051600081526020810190915261074f565b8251805160009061072d57fe5b602002602001015160c0015180602001905161074c919081019061139e565b90505b600354600160a81b900460ff16158015906107755750600354600160a01b900460ff1615155b80156107b15750805115806107b1575060016001600160a01b03168160008151811061079d57fe5b60200260200101516001600160a01b031614155b15610ac257606081516002016040519080825280602002602001820160405280156107e6578160200160208202803883390190505b5090508360400151816000815181106107fb57fe5b6001600160a01b039092166020928302919091019091015260005b82518110156108625782818151811061082b57fe5b602002602001015182826001018151811061084257fe5b6001600160a01b0390921660209283029190910190910152600101610816565b5083602001518160018351038151811061087857fe5b6001600160a01b039283166020918202929092010152600354608086015160405163d06ca61f60e01b8152606093929092169163d06ca61f916108bf9186906004016118c8565b60006040518083038186803b1580156108d757600080fd5b505afa1580156108eb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261091391908101906113d3565b90508460a001518160018351038151811061092a57fe5b6020026020010151106109e957600354608086015160a08701516001600160a01b038316926338ed17399291600160a01b90910460ff16908161096957fe5b048530426040518663ffffffff1660e01b815260040161098d9594939291906118e8565b600060405180830381600087803b1580156109a757600080fd5b505af11580156109bb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109e391908101906113d3565b50610abf565b60035460808601516001600160a01b038216916338ed173991600160a81b90910460ff169081610a1557fe5b60035460a08a01519290910491600160a81b820460ff908116600160a01b90930416919091029081610a4357fe5b048530426040518663ffffffff1660e01b8152600401610a679594939291906118e8565b600060405180830381600087803b158015610a8157600080fd5b505af1158015610a95573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610abd91908101906113d3565b505b50505b50600092915050565b6000546001600160a01b03163314610af55760405162461bcd60e51b81526004016101219061186a565b6001600160a01b038116610b1b5760405162461bcd60e51b81526004016101219061184a565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610b675760405162461bcd60e51b81526004016101219061183a565b61050e81836001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401610b9791906117c2565b60206040518083038186803b158015610baf57600080fd5b505afa158015610bc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610be79190810190611490565b6001600160a01b038516919063ffffffff610d5b16565b6000546001600160a01b03163314610c285760405162461bcd60e51b81526004016101219061183a565b6103876001600160a01b0382164763ffffffff610d8916565b801580610cc95750604051636eb1769f60e11b81526001600160a01b0384169063dd62ed3e90610c7790309086906004016117de565b60206040518083038186803b158015610c8f57600080fd5b505afa158015610ca3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610cc79190810190611490565b155b610cd257600080fd5b60405163095ea7b360e01b81526001600160a01b0384169063095ea7b390610d009085908590600401611800565b602060405180830381600087803b158015610d1a57600080fd5b505af1158015610d2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d529190810190611408565b6105b157600080fd5b60405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb90610d009085908590600401611800565b61050e82826040518060400160405280601581526020017421a0a72727aa2faa2920a729a322a92fa2aa2422a960591b8152506000836001600160a01b031683604051610dd5906117b7565b60006040518083038185875af1925050503d8060008114610e12576040519150601f19603f3d011682016040523d82523d6000602084013e610e17565b606091505b50509050808290610e3b5760405162461bcd60e51b81526004016101219190611829565b5050505050565b80356104cd81611a4d565b80516104cd81611a4d565b60008083601f840112610e6a57600080fd5b50813567ffffffffffffffff811115610e8257600080fd5b602083019150836020820283011115610e9a57600080fd5b9250929050565b600082601f830112610eb257600080fd5b8151610ec5610ec082611970565b611949565b91508181835260208401935060208101905083856020840282011115610eea57600080fd5b60005b83811015610f165781610f008882610e4d565b8452506020928301929190910190600101610eed565b5050505092915050565b600082601f830112610f3157600080fd5b8135610f3f610ec082611970565b81815260209384019390925082018360005b83811015610f165781358601610f67888261122f565b8452506020928301929190910190600101610f51565b600082601f830112610f8e57600080fd5b8151610f9c610ec082611970565b91508181835260208401935060208101905083856020840282011115610fc157600080fd5b60005b83811015610f165781610fd788826112e6565b8452506020928301929190910190600101610fc4565b80516104cd81611a61565b80356104cd81611a6a565b600082601f83011261101457600080fd5b8135611022610ec082611991565b9150808252602083016020830185838301111561103e57600080fd5b611049838284611a07565b50505092915050565b600060e0828403121561106457600080fd5b61106e60e0611949565b9050813567ffffffffffffffff81111561108757600080fd5b61109384828501610f20565b82525060206110a484848301610e42565b60208301525060406110b884828501610e42565b60408301525060606110cc84828501610e42565b60608301525060806110e084828501610ff8565b60808301525060a06110f484828501610ff8565b60a08301525060c061110884828501610ff8565b60c08301525092915050565b6000610160828403121561112757600080fd5b611132610160611949565b905060006111408484610e42565b825250602061115184848301610e42565b602083015250604061116584828501610ff8565b604083015250606061117984828501610e42565b606083015250608061118d84828501610e42565b60808301525060a06111a184828501610e42565b60a08301525060c06111b584828501610ff8565b60c08301525060e06111c984828501610ff8565b60e0830152506101006111de84828501610ff8565b610100830152506101206111f484828501610e42565b6101208301525061014082013567ffffffffffffffff81111561121657600080fd5b61122284828501611003565b6101408301525092915050565b600060e0828403121561124157600080fd5b61124b60e0611949565b905060006112598484610e42565b825250602061126a84848301610ff8565b602083015250604061127e84828501610ff8565b604083015250606061129284828501610ff8565b60608301525060806112a684828501610ff8565b60808301525060a06112ba84828501610e42565b60a08301525060c082013567ffffffffffffffff8111156112da57600080fd5b61110884828501611003565b80516104cd81611a6a565b80356104cd81611a73565b60006020828403121561130e57600080fd5b600061131a8484610e42565b949350505050565b6000806040838503121561133557600080fd5b60006113418585610e42565b925050602061135285828601610e42565b9150509250929050565b6000806020838503121561136f57600080fd5b823567ffffffffffffffff81111561138657600080fd5b61139285828601610e58565b92509250509250929050565b6000602082840312156113b057600080fd5b815167ffffffffffffffff8111156113c757600080fd5b61131a84828501610ea1565b6000602082840312156113e557600080fd5b815167ffffffffffffffff8111156113fc57600080fd5b61131a84828501610f7d565b60006020828403121561141a57600080fd5b600061131a8484610fed565b60006020828403121561143857600080fd5b813567ffffffffffffffff81111561144f57600080fd5b61131a84828501611052565b60006020828403121561146d57600080fd5b813567ffffffffffffffff81111561148457600080fd5b61131a84828501611114565b6000602082840312156114a257600080fd5b600061131a84846112e6565b6000602082840312156114c057600080fd5b600061131a84846112f1565b60006114d883836114ef565b505060200190565b6114e9816119f6565b82525050565b6114e9816119d1565b6000611503826119bf565b61150d81856119c3565b9350611518836119b9565b8060005b8381101561154657815161153088826114cc565b975061153b836119b9565b92505060010161151c565b509495945050505050565b6114e9816119dc565b6000611565826119bf565b61156f81856119c3565b935061157f818560208601611a13565b61158881611a43565b9093019392505050565b600061159f600c836119c3565b6b15539055551213d49256915160a21b815260200192915050565b60006115c7600c836119c3565b6b5a45524f5f4144445245535360a01b815260200192915050565b60006115ef6035836119c3565b7f556e6973776170526562616c616e6365724d616b657242726f6b65723a20494e815274159053125117d513d2d15397d49150d25412515395605a1b602082015260400192915050565b60006104cd6000836119cc565b60006116536009836119c3565b682727aa2fa7aba722a960b91b815260200192915050565b6000611678602a836119c3565b7f556e6973776170526562616c616e6365724d616b657242726f6b65723a20554e8152691055551213d49256915160b21b602082015260400192915050565b60006116c46031836119c3565b7f556e6973776170526562616c616e6365724d616b657242726f6b65723a20494e8152702b20a624a22fa7a92222a92fa7aba722a960791b602082015260400192915050565b6000611717602f836119c3565b7f556e6973776170526562616c616e6365724d616b657242726f6b65723a20544f81526e04b454e5f535f4e4f545f534554555608c1b602082015260400192915050565b60006117686028836119c3565b7f556e6973776170526562616c616e6365724d616b657242726f6b65723a204e4f81526717d111519055531560c21b602082015260400192915050565b6114e9816119e1565b6114e9816119f0565b60006104cd82611639565b602081016104cd82846114ef565b602081016104cd82846114e0565b604081016117ec82856114ef565b6117f960208301846114ef565b9392505050565b6040810161180e82856114ef565b6117f960208301846117a5565b602081016104cd8284611551565b602080825281016117f9818461155a565b602080825281016104cd81611592565b602080825281016104cd816115ba565b602080825281016104cd816115e2565b602080825281016104cd81611646565b602080825281016104cd8161166b565b602080825281016104cd816116b7565b602080825281016104cd8161170a565b602080825281016104cd8161175b565b602081016104cd82846117a5565b604081016118d682856117a5565b818103602083015261131a81846114f8565b60a081016118f682886117a5565b61190360208301876117a5565b818103604083015261191581866114f8565b905061192460608301856114e0565b61193160808301846117a5565b9695505050505050565b602081016104cd82846117ae565b60405181810167ffffffffffffffff8111828210171561196857600080fd5b604052919050565b600067ffffffffffffffff82111561198757600080fd5b5060209081020190565b600067ffffffffffffffff8211156119a857600080fd5b506020601f91909101601f19160190565b60200190565b5190565b90815260200190565b919050565b60006104cd826119e4565b151590565b90565b6001600160a01b031690565b60ff1690565b60006104cd8260006104cd826119d1565b82818337506000910152565b60005b83811015611a2e578181015183820152602001611a16565b83811115611a3d576000848401525b50505050565b601f01601f191690565b611a56816119d1565b811461038757600080fd5b611a56816119dc565b611a56816119e1565b611a56816119f056fea365627a7a72315820b4add4ac8850852c61e762a02465868b1651782ce59d513fe7bfd8a4cab8ab696c6578706572696d656e74616cf564736f6c634300050d0040000000000000000000000000e2466deb9536a69bf8131ecd0c267ee41dd1cda0000000000000000000000000f164fc0ec4e93095b804a4795bbe1e041497b92a000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Deployed Bytecode
0x6080604052600436106101095760003560e01c80637fa948d211610095578063b3c4a36b11610064578063b3c4a36b146102dd578063beb66f6f146102fd578063c3c49a631461031d578063cc2df0961461033d578063f2fde38b1461035d57610109565b80637fa948d2146102665780638938d0981461027b5780638da5cb5b1461029b578063b3508011146102bd57610109565b806356604d02116100dc57806356604d02146101b75780636b24b8b2146101e457806370a08231146101f9578063727b615a146102265780637d8784d81461024657610109565b806301b99eba1461012a578063097d2c591461014c578063212d1e59146101775780633f21777614610197575b60405162461bcd60e51b8152600401610121906118aa565b60405180910390fd5b34801561013657600080fd5b5061014a6101453660046112fc565b61037d565b005b34801561015857600080fd5b5061016161038a565b60405161016e919061193b565b60405180910390f35b34801561018357600080fd5b5061014a6101923660046114ae565b61039a565b3480156101a357600080fd5b5061014a6101b23660046114ae565b6103e4565b3480156101c357600080fd5b506101d76101d23660046112fc565b61042e565b60405161016e919061181b565b3480156101f057600080fd5b5061014a610443565b34801561020557600080fd5b506102196102143660046112fc565b61044e565b60405161016e91906118ba565b34801561023257600080fd5b5061014a61024136600461145b565b610387565b34801561025257600080fd5b50610219610261366004611322565b6104d3565b34801561027257600080fd5b506101616104dc565b34801561028757600080fd5b5061014a6102963660046112fc565b6104ec565b3480156102a757600080fd5b506102b06104f5565b60405161016e91906117c2565b3480156102c957600080fd5b5061014a6102d8366004611322565b610504565b3480156102e957600080fd5b5061014a6102f83660046112fc565b610512565b34801561030957600080fd5b5061014a61031836600461135c565b61057a565b34801561032957600080fd5b506102b06103383660046112fc565b6105b6565b34801561034957600080fd5b506101d7610358366004611426565b6105d1565b34801561036957600080fd5b5061014a6103783660046112fc565b610acb565b6103878133610b3d565b50565b600354600160a01b900460ff1690565b6000546001600160a01b031633146103c45760405162461bcd60e51b81526004016101219061186a565b6003805460ff909216600160a01b0260ff60a01b19909216919091179055565b6000546001600160a01b0316331461040e5760405162461bcd60e51b81526004016101219061186a565b6003805460ff909216600160a81b0260ff60a81b19909216919091179055565b60056020526000908152604090205460ff1681565b61044c33610bfe565b565b6040516370a0823160e01b81526000906001600160a01b038316906370a082319061047d9030906004016117d0565b60206040518083038186803b15801561049557600080fd5b505afa1580156104a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506104cd9190810190611490565b92915050565b60001992915050565b600354600160a81b900460ff1690565b61038781610bfe565b6000546001600160a01b031681565b61050e8282610b3d565b5050565b600254610534906001600160a01b03838116911660001963ffffffff610c4116565b600354610556906001600160a01b03838116911660001963ffffffff610c4116565b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b60005b818110156105b1576105a983838381811061059457fe5b90506020020160206102f891908101906112fc565b60010161057d565b505050565b6004602052600090815260409020546001600160a01b031681565b6002546000906001600160a01b031633146105fe5760405162461bcd60e51b81526004016101219061187a565b6020808301516001600160a01b031660009081526005909152604090205460ff1661063b5760405162461bcd60e51b81526004016101219061189a565b60005b8251518110156106e257825180513091908390811061065957fe5b602002602001015160a001516001600160a01b03161461068b5760405162461bcd60e51b81526004016101219061185a565b600054835180516001600160a01b0390921691839081106106a857fe5b6020026020010151600001516001600160a01b0316146106da5760405162461bcd60e51b81526004016101219061188a565b60010161063e565b50606082600001516000815181106106f657fe5b602002602001015160c001515160001415610720575060408051600081526020810190915261074f565b8251805160009061072d57fe5b602002602001015160c0015180602001905161074c919081019061139e565b90505b600354600160a81b900460ff16158015906107755750600354600160a01b900460ff1615155b80156107b15750805115806107b1575060016001600160a01b03168160008151811061079d57fe5b60200260200101516001600160a01b031614155b15610ac257606081516002016040519080825280602002602001820160405280156107e6578160200160208202803883390190505b5090508360400151816000815181106107fb57fe5b6001600160a01b039092166020928302919091019091015260005b82518110156108625782818151811061082b57fe5b602002602001015182826001018151811061084257fe5b6001600160a01b0390921660209283029190910190910152600101610816565b5083602001518160018351038151811061087857fe5b6001600160a01b039283166020918202929092010152600354608086015160405163d06ca61f60e01b8152606093929092169163d06ca61f916108bf9186906004016118c8565b60006040518083038186803b1580156108d757600080fd5b505afa1580156108eb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261091391908101906113d3565b90508460a001518160018351038151811061092a57fe5b6020026020010151106109e957600354608086015160a08701516001600160a01b038316926338ed17399291600160a01b90910460ff16908161096957fe5b048530426040518663ffffffff1660e01b815260040161098d9594939291906118e8565b600060405180830381600087803b1580156109a757600080fd5b505af11580156109bb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109e391908101906113d3565b50610abf565b60035460808601516001600160a01b038216916338ed173991600160a81b90910460ff169081610a1557fe5b60035460a08a01519290910491600160a81b820460ff908116600160a01b90930416919091029081610a4357fe5b048530426040518663ffffffff1660e01b8152600401610a679594939291906118e8565b600060405180830381600087803b158015610a8157600080fd5b505af1158015610a95573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610abd91908101906113d3565b505b50505b50600092915050565b6000546001600160a01b03163314610af55760405162461bcd60e51b81526004016101219061186a565b6001600160a01b038116610b1b5760405162461bcd60e51b81526004016101219061184a565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610b675760405162461bcd60e51b81526004016101219061183a565b61050e81836001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401610b9791906117c2565b60206040518083038186803b158015610baf57600080fd5b505afa158015610bc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610be79190810190611490565b6001600160a01b038516919063ffffffff610d5b16565b6000546001600160a01b03163314610c285760405162461bcd60e51b81526004016101219061183a565b6103876001600160a01b0382164763ffffffff610d8916565b801580610cc95750604051636eb1769f60e11b81526001600160a01b0384169063dd62ed3e90610c7790309086906004016117de565b60206040518083038186803b158015610c8f57600080fd5b505afa158015610ca3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610cc79190810190611490565b155b610cd257600080fd5b60405163095ea7b360e01b81526001600160a01b0384169063095ea7b390610d009085908590600401611800565b602060405180830381600087803b158015610d1a57600080fd5b505af1158015610d2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d529190810190611408565b6105b157600080fd5b60405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb90610d009085908590600401611800565b61050e82826040518060400160405280601581526020017421a0a72727aa2faa2920a729a322a92fa2aa2422a960591b8152506000836001600160a01b031683604051610dd5906117b7565b60006040518083038185875af1925050503d8060008114610e12576040519150601f19603f3d011682016040523d82523d6000602084013e610e17565b606091505b50509050808290610e3b5760405162461bcd60e51b81526004016101219190611829565b5050505050565b80356104cd81611a4d565b80516104cd81611a4d565b60008083601f840112610e6a57600080fd5b50813567ffffffffffffffff811115610e8257600080fd5b602083019150836020820283011115610e9a57600080fd5b9250929050565b600082601f830112610eb257600080fd5b8151610ec5610ec082611970565b611949565b91508181835260208401935060208101905083856020840282011115610eea57600080fd5b60005b83811015610f165781610f008882610e4d565b8452506020928301929190910190600101610eed565b5050505092915050565b600082601f830112610f3157600080fd5b8135610f3f610ec082611970565b81815260209384019390925082018360005b83811015610f165781358601610f67888261122f565b8452506020928301929190910190600101610f51565b600082601f830112610f8e57600080fd5b8151610f9c610ec082611970565b91508181835260208401935060208101905083856020840282011115610fc157600080fd5b60005b83811015610f165781610fd788826112e6565b8452506020928301929190910190600101610fc4565b80516104cd81611a61565b80356104cd81611a6a565b600082601f83011261101457600080fd5b8135611022610ec082611991565b9150808252602083016020830185838301111561103e57600080fd5b611049838284611a07565b50505092915050565b600060e0828403121561106457600080fd5b61106e60e0611949565b9050813567ffffffffffffffff81111561108757600080fd5b61109384828501610f20565b82525060206110a484848301610e42565b60208301525060406110b884828501610e42565b60408301525060606110cc84828501610e42565b60608301525060806110e084828501610ff8565b60808301525060a06110f484828501610ff8565b60a08301525060c061110884828501610ff8565b60c08301525092915050565b6000610160828403121561112757600080fd5b611132610160611949565b905060006111408484610e42565b825250602061115184848301610e42565b602083015250604061116584828501610ff8565b604083015250606061117984828501610e42565b606083015250608061118d84828501610e42565b60808301525060a06111a184828501610e42565b60a08301525060c06111b584828501610ff8565b60c08301525060e06111c984828501610ff8565b60e0830152506101006111de84828501610ff8565b610100830152506101206111f484828501610e42565b6101208301525061014082013567ffffffffffffffff81111561121657600080fd5b61122284828501611003565b6101408301525092915050565b600060e0828403121561124157600080fd5b61124b60e0611949565b905060006112598484610e42565b825250602061126a84848301610ff8565b602083015250604061127e84828501610ff8565b604083015250606061129284828501610ff8565b60608301525060806112a684828501610ff8565b60808301525060a06112ba84828501610e42565b60a08301525060c082013567ffffffffffffffff8111156112da57600080fd5b61110884828501611003565b80516104cd81611a6a565b80356104cd81611a73565b60006020828403121561130e57600080fd5b600061131a8484610e42565b949350505050565b6000806040838503121561133557600080fd5b60006113418585610e42565b925050602061135285828601610e42565b9150509250929050565b6000806020838503121561136f57600080fd5b823567ffffffffffffffff81111561138657600080fd5b61139285828601610e58565b92509250509250929050565b6000602082840312156113b057600080fd5b815167ffffffffffffffff8111156113c757600080fd5b61131a84828501610ea1565b6000602082840312156113e557600080fd5b815167ffffffffffffffff8111156113fc57600080fd5b61131a84828501610f7d565b60006020828403121561141a57600080fd5b600061131a8484610fed565b60006020828403121561143857600080fd5b813567ffffffffffffffff81111561144f57600080fd5b61131a84828501611052565b60006020828403121561146d57600080fd5b813567ffffffffffffffff81111561148457600080fd5b61131a84828501611114565b6000602082840312156114a257600080fd5b600061131a84846112e6565b6000602082840312156114c057600080fd5b600061131a84846112f1565b60006114d883836114ef565b505060200190565b6114e9816119f6565b82525050565b6114e9816119d1565b6000611503826119bf565b61150d81856119c3565b9350611518836119b9565b8060005b8381101561154657815161153088826114cc565b975061153b836119b9565b92505060010161151c565b509495945050505050565b6114e9816119dc565b6000611565826119bf565b61156f81856119c3565b935061157f818560208601611a13565b61158881611a43565b9093019392505050565b600061159f600c836119c3565b6b15539055551213d49256915160a21b815260200192915050565b60006115c7600c836119c3565b6b5a45524f5f4144445245535360a01b815260200192915050565b60006115ef6035836119c3565b7f556e6973776170526562616c616e6365724d616b657242726f6b65723a20494e815274159053125117d513d2d15397d49150d25412515395605a1b602082015260400192915050565b60006104cd6000836119cc565b60006116536009836119c3565b682727aa2fa7aba722a960b91b815260200192915050565b6000611678602a836119c3565b7f556e6973776170526562616c616e6365724d616b657242726f6b65723a20554e8152691055551213d49256915160b21b602082015260400192915050565b60006116c46031836119c3565b7f556e6973776170526562616c616e6365724d616b657242726f6b65723a20494e8152702b20a624a22fa7a92222a92fa7aba722a960791b602082015260400192915050565b6000611717602f836119c3565b7f556e6973776170526562616c616e6365724d616b657242726f6b65723a20544f81526e04b454e5f535f4e4f545f534554555608c1b602082015260400192915050565b60006117686028836119c3565b7f556e6973776170526562616c616e6365724d616b657242726f6b65723a204e4f81526717d111519055531560c21b602082015260400192915050565b6114e9816119e1565b6114e9816119f0565b60006104cd82611639565b602081016104cd82846114ef565b602081016104cd82846114e0565b604081016117ec82856114ef565b6117f960208301846114ef565b9392505050565b6040810161180e82856114ef565b6117f960208301846117a5565b602081016104cd8284611551565b602080825281016117f9818461155a565b602080825281016104cd81611592565b602080825281016104cd816115ba565b602080825281016104cd816115e2565b602080825281016104cd81611646565b602080825281016104cd8161166b565b602080825281016104cd816116b7565b602080825281016104cd8161170a565b602080825281016104cd8161175b565b602081016104cd82846117a5565b604081016118d682856117a5565b818103602083015261131a81846114f8565b60a081016118f682886117a5565b61190360208301876117a5565b818103604083015261191581866114f8565b905061192460608301856114e0565b61193160808301846117a5565b9695505050505050565b602081016104cd82846117ae565b60405181810167ffffffffffffffff8111828210171561196857600080fd5b604052919050565b600067ffffffffffffffff82111561198757600080fd5b5060209081020190565b600067ffffffffffffffff8211156119a857600080fd5b506020601f91909101601f19160190565b60200190565b5190565b90815260200190565b919050565b60006104cd826119e4565b151590565b90565b6001600160a01b031690565b60ff1690565b60006104cd8260006104cd826119d1565b82818337506000910152565b60005b83811015611a2e578181015183820152602001611a16565b83811115611a3d576000848401525b50505050565b601f01601f191690565b611a56816119d1565b811461038757600080fd5b611a56816119dc565b611a56816119e1565b611a56816119f056fea365627a7a72315820b4add4ac8850852c61e762a02465868b1651782ce59d513fe7bfd8a4cab8ab696c6578706572696d656e74616cf564736f6c634300050d0040
Deployed Bytecode Sourcemap
15240:4695:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16830:50;;-1:-1:-1;;;16830:50:0;;;;;;;;;;;;;;;;10099:97;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10099:97:0;;;;;;;;:::i;:::-;;16466:100;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16466:100:0;;;:::i;:::-;;;;;;;;;;;;;;;;16339:119;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;16339:119:0;;;;;;;;:::i;16574:107::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;16574:107:0;;;;;;;;:::i;15575:46::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15575:46:0;;;;;;;;:::i;:::-;;;;;;;;10327:83;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10327:83:0;;;:::i;19805:125::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;19805:125:0;;;;;;;;:::i;:::-;;;;;;;;19401:114;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;19401:114:0;;;;;;;;:::i;19680:117::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;19680:117:0;;;;;;;;:::i;16689:94::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16689:94:0;;;:::i;10418:107::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10418:107:0;;;;;;;;:::i;9738:20::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9738:20:0;;;:::i;:::-;;;;;;;;10204:115;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10204:115:0;;;;;;;;:::i;15939:220::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15939:220:0;;;;;;;;:::i;16167:164::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;16167:164:0;;;;;;;;:::i;15518:50::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15518:50:0;;;;;;;;:::i;16972:2421::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;16972:2421:0;;;;;;;;:::i;9934:157::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9934:157:0;;;;;;;;:::i;10099:97::-;10156:32;10170:5;10177:10;10156:13;:32::i;:::-;10099:97;:::o;16466:100::-;16543:15;;-1:-1:-1;;;16543:15:0;;;;;16466:100::o;16339:119::-;9887:5;;-1:-1:-1;;;;;9887:5:0;9873:10;:19;9865:41;;;;-1:-1:-1;;;9865:41:0;;;;;;;;;16418:15;:32;;;;;;-1:-1:-1;;;16418:32:0;-1:-1:-1;;;;16418:32:0;;;;;;;;;16339:119::o;16574:107::-;9887:5;;-1:-1:-1;;;;;9887:5:0;9873:10;:19;9865:41;;;;-1:-1:-1;;;9865:41:0;;;;;;;;;16647:12;:26;;;;;;-1:-1:-1;;;16647:26:0;-1:-1:-1;;;;16647:26:0;;;;;;;;;16574:107::o;15575:46::-;;;;;;;;;;;;;;;:::o;10327:83::-;10374:28;10391:10;10374:16;:28::i;:::-;10327:83::o;19805:125::-;19884:38;;-1:-1:-1;;;19884:38:0;;19860:4;;-1:-1:-1;;;;;19884:23:0;;;;;:38;;19916:4;;19884:38;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19884:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19884:38: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;19884:38:0;;;;;;;;;19877:45;19805:125;-1:-1:-1;;19805:125:0:o;19680:117::-;-1:-1:-1;;19680:117:0;;;;:::o;16689:94::-;16763:12;;-1:-1:-1;;;16763:12:0;;;;;16689:94::o;10418:107::-;10490:27;10507:9;10490:16;:27::i;9738:20::-;;;-1:-1:-1;;;;;9738:20:0;;:::o;10204:115::-;10280:31;10294:5;10301:9;10280:13;:31::i;:::-;10204:115;;:::o;15939:220::-;16018:17;;15992:55;;-1:-1:-1;;;;;15992:25:0;;;;16018:17;-1:-1:-1;;15992:55:0;:25;:55;:::i;:::-;16084:16;;16058:54;;-1:-1:-1;;;;;16058:25:0;;;;16084:16;-1:-1:-1;;16058:54:0;:25;:54;:::i;:::-;-1:-1:-1;;;;;16123:21:0;;;;;:14;:21;;;;;:28;;-1:-1:-1;;16123:28:0;16147:4;16123:28;;;15939:220::o;16167:164::-;16240:6;16235:89;16252:17;;;16235:89;;;16291:21;16302:6;;16309:1;16302:9;;;;;;;;;;;;;;;;;;;;;16291:21;16271:3;;16235:89;;;;16167:164;;:::o;15518:50::-;;;;;;;;;;;;-1:-1:-1;;;;;15518:50:0;;:::o;16972:2421::-;17108:17;;17069:4;;-1:-1:-1;;;;;17108:17:0;17094:10;:31;17086:86;;;;-1:-1:-1;;;17086:86:0;;;;;;;;;17206:14;;;;;-1:-1:-1;;;;;17191:30:0;;;;;:14;:30;;;;;;;;;17183:90;;;;-1:-1:-1;;;17183:90:0;;;;;;;;;17291:6;17286:300;17307:14;;:21;17303:25;;17286:300;;;17358:14;;:17;;17402:4;;17358:14;17373:1;;17358:17;;;;;;;;;;;;:32;;;-1:-1:-1;;;;;17358:49:0;;17350:115;;;;-1:-1:-1;;;17350:115:0;;;;;;;;;17515:5;;17488:14;;:17;;-1:-1:-1;;;;;17515:5:0;;;;17503:1;;17488:17;;;;;;;;;;;;:23;;;-1:-1:-1;;;;;17488:32:0;;17480:94;;;;-1:-1:-1;;;17480:94:0;;;;;;;;;17330:3;;17286:300;;;;17598:34;17647:7;:14;;;17662:1;17647:17;;;;;;;;;;;;;;:27;;;:34;17685:1;17647:39;17643:213;;;-1:-1:-1;17723:16:0;;;17737:1;17723:16;;;;;;;;17643:213;;;17803:14;;:17;;:14;;:17;;;;;;;;;;:27;;;17792:52;;;;;;;;;;;;;;17772:72;;17643:213;17887:12;;-1:-1:-1;;;17887:12:0;;;;:17;;;;:41;;-1:-1:-1;17908:15:0;;-1:-1:-1;;;17908:15:0;;;;:20;;17887:41;17886:170;;;;-1:-1:-1;17947:24:0;;:29;;:108;;;18012:42;-1:-1:-1;;;;;17980:75:0;:17;17998:1;17980:20;;;;;;;;;;;;;;-1:-1:-1;;;;;17980:75:0;;;17947:108;17868:1452;;;18083:21;18121:17;:24;18148:1;18121:28;18107:43;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;18107:43:0;;18083:67;;18175:7;:14;;;18165:4;18170:1;18165:7;;;;;;;;-1:-1:-1;;;;;18165:24:0;;;:7;;;;;;;;;;;:24;18209:6;18204:121;18225:17;:24;18221:1;:28;18204:121;;;18289:17;18307:1;18289:20;;;;;;;;;;;;;;18275:4;18280:1;18284;18280:5;18275:11;;;;;;;;-1:-1:-1;;;;;18275:34:0;;;:11;;;;;;;;;;;:34;18251:3;;18204:121;;;;18363:7;:14;;;18339:4;18358:1;18344:4;:11;:15;18339:21;;;;;;;;-1:-1:-1;;;;;18339:38:0;;;:21;;;;;;;;;:38;18437:16;;18469:24;;;;18418:82;;-1:-1:-1;;;18418:82:0;;18394:21;;18437:16;;;;;18418:50;;:82;;18495:4;;18418:82;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18418:82:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18418:82:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;18418:82:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;18418:82:0;;;;;;;;;18394:106;;18550:7;:29;;;18519:7;18544:1;18527:7;:14;:18;18519:27;;;;;;;;;;;;;;:60;18515:794;;18619:16;;18684:24;;;;18731:29;;;;-1:-1:-1;;;;;18619:16:0;;;18600:61;;18684:24;-1:-1:-1;;;18768:15:0;;;;;;;18731:53;;;;;18807:4;18842;18870:15;18600:304;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18600:304:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18600:304:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;18600:304:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;18600:304:0;;;;;;;;;;18515:794;;;18964:16;;19029:24;;;;-1:-1:-1;;;;;18964:16:0;;;18945:61;;-1:-1:-1;;;19061:12:0;;;;;;;19029:45;;;;19156:15;;19097:29;;;;19029:45;;;;;-1:-1:-1;;;19135:12:0;;19156:15;19135:12;;;-1:-1:-1;;;19156:15:0;;;;19130:42;;;;;;19097:76;;;;;19196:4;19231;19259:15;18945:348;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18945:348:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18945:348:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;18945:348:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;18945:348:0;;;;;;;;;;18515:794;17868:1452;;;-1:-1:-1;19380:5:0;;16972:2421;-1:-1:-1;;16972:2421:0:o;9934:157::-;9887:5;;-1:-1:-1;;;;;9887:5:0;9873:10;:19;9865:41;;;;-1:-1:-1;;;9865:41:0;;;;;;;;;-1:-1:-1;;;;;10015:24:0;;10007:49;;;;-1:-1:-1;;;10007:49:0;;;;;;;;;10067:5;:16;;-1:-1:-1;;;;;;10067:16:0;-1:-1:-1;;;;;10067:16:0;;;;;;;;;;9934:157::o;10533:254::-;10632:5;;-1:-1:-1;;;;;10632:5:0;10618:10;:19;10610:44;;;;-1:-1:-1;;;10610:44:0;;;;;;;;;10665:114;10706:9;10737:5;-1:-1:-1;;;;;10730:23:0;;10762:4;10730:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10730:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10730:38: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;10730:38:0;;;;;;;;;-1:-1:-1;;;;;10665:26:0;;;:114;;:26;:114;:::i;10795:186::-;10890:5;;-1:-1:-1;;;;;10890:5:0;10876:10;:19;10868:44;;;;-1:-1:-1;;;10868:44:0;;;;;;;;;10923:50;-1:-1:-1;;;;;10923:27:0;;10951:21;10923:50;:27;:50;:::i;6572:435::-;6888:10;;;6887:62;;-1:-1:-1;6904:39:0;;-1:-1:-1;;;6904:39:0;;-1:-1:-1;;;;;6904:15:0;;;;;:39;;6928:4;;6935:7;;6904:39;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6904:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6904:39: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;6904:39:0;;;;;;;;;:44;6887:62;6879:71;;;;;;6969:29;;-1:-1:-1;;;6969:29:0;;-1:-1:-1;;;;;6969:13:0;;;;;:29;;6983:7;;6992:5;;6969:29;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6969:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6969: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;6969:29:0;;;;;;;;;6961:38;;;;;6278:125;6369:25;;-1:-1:-1;;;6369:25:0;;-1:-1:-1;;;;;6369:14:0;;;;;:25;;6384:2;;6388:5;;6369:25;;;;8335:148;8414:61;8432:9;8443:6;8414:61;;;;;;;;;;;;;-1:-1:-1;;;8414:61:0;;;8599:12;8632:9;-1:-1:-1;;;;;8616:32:0;8655:6;8616:50;;;;;;;;;;;;;;;;;;;;;;;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;;16:31;36:4;31:9;;7:242;;8598:68:0;;;8685:7;8694:12;8677:30;;;;;-1:-1:-1;;;8677:30:0;;;;;;;;;;;8491:224;;;;:::o;5:130:-1:-;72:20;;97:33;72:20;97:33;;142:134;220:13;;238:33;220:13;238:33;;454:352;;;584:3;577:4;569:6;565:17;561:27;551:2;;602:1;599;592:12;551:2;-1:-1;622:20;;662:18;651:30;;648:2;;;694:1;691;684:12;648:2;728:4;720:6;716:17;704:29;;779:3;771:4;763:6;759:17;749:8;745:32;742:41;739:2;;;796:1;793;786:12;739:2;544:262;;;;;;832:714;;956:3;949:4;941:6;937:17;933:27;923:2;;974:1;971;964:12;923:2;1004:6;998:13;1026:76;1041:60;1094:6;1041:60;;;1026:76;;;1017:85;;1119:5;1144:6;1137:5;1130:21;1174:4;1166:6;1162:17;1152:27;;1196:4;1191:3;1187:14;1180:21;;1249:6;1296:3;1288:4;1280:6;1276:17;1271:3;1267:27;1264:36;1261:2;;;1313:1;1310;1303:12;1261:2;1338:1;1323:217;1348:6;1345:1;1342:13;1323:217;;;1406:3;1428:48;1472:3;1460:10;1428:48;;;1416:61;;-1:-1;1500:4;1491:14;;;;1519;;;;;1370:1;1363:9;1323:217;;;1327:14;916:630;;;;;;;;1594:739;;1730:3;1723:4;1715:6;1711:17;1707:27;1697:2;;1748:1;1745;1738:12;1697:2;1785:6;1772:20;1807:99;1822:83;1898:6;1822:83;;1807:99;1934:21;;;1978:4;1966:17;;;;1798:108;;-1:-1;1991:14;;1966:17;2086:1;2071:256;2096:6;2093:1;2090:13;2071:256;;;2179:3;2166:17;2158:6;2154:30;2203:60;2259:3;2247:10;2203:60;;;2191:73;;-1:-1;2287:4;2278:14;;;;2306;;;;;2118:1;2111:9;2071:256;;2359:722;;2487:3;2480:4;2472:6;2468:17;2464:27;2454:2;;2505:1;2502;2495:12;2454:2;2535:6;2529:13;2557:80;2572:64;2629:6;2572:64;;2557:80;2548:89;;2654:5;2679:6;2672:5;2665:21;2709:4;2701:6;2697:17;2687:27;;2731:4;2726:3;2722:14;2715:21;;2784:6;2831:3;2823:4;2815:6;2811:17;2806:3;2802:27;2799:36;2796:2;;;2848:1;2845;2838:12;2796:2;2873:1;2858:217;2883:6;2880:1;2877:13;2858:217;;;2941:3;2963:48;3007:3;2995:10;2963:48;;;2951:61;;-1:-1;3035:4;3026:14;;;;3054;;;;;2905:1;2898:9;2858:217;;3089:128;3164:13;;3182:30;3164:13;3182:30;;3224:130;3291:20;;3316:33;3291:20;3316:33;;3362:432;;3459:3;3452:4;3444:6;3440:17;3436:27;3426:2;;3477:1;3474;3467:12;3426:2;3514:6;3501:20;3536:60;3551:44;3588:6;3551:44;;3536:60;3527:69;;3616:6;3609:5;3602:21;3652:4;3644:6;3640:17;3685:4;3678:5;3674:16;3720:3;3711:6;3706:3;3702:16;3699:25;3696:2;;;3737:1;3734;3727:12;3696:2;3747:41;3781:6;3776:3;3771;3747:41;;;3419:375;;;;;;;;3848:1389;;3974:4;3962:9;3957:3;3953:19;3949:30;3946:2;;;3992:1;3989;3982:12;3946:2;4010:20;4025:4;4010:20;;;4001:29;-1:-1;4082:31;;4133:18;4122:30;;4119:2;;;4165:1;4162;4155:12;4119:2;4199:93;4288:3;4279:6;4268:9;4264:22;4199:93;;;4175:118;;-1:-1;4356:2;4389:49;4434:3;4410:22;;;4389:49;;;4382:4;4375:5;4371:16;4364:75;4314:136;4502:2;4535:49;4580:3;4571:6;4560:9;4556:22;4535:49;;;4528:4;4521:5;4517:16;4510:75;4460:136;4650:2;4683:49;4728:3;4719:6;4708:9;4704:22;4683:49;;;4676:4;4669:5;4665:16;4658:75;4606:138;4806:3;4840:49;4885:3;4876:6;4865:9;4861:22;4840:49;;;4833:4;4826:5;4822:16;4815:75;4754:147;4968:3;5002:49;5047:3;5038:6;5027:9;5023:22;5002:49;;;4995:4;4988:5;4984:16;4977:75;4911:152;5132:3;5166:49;5211:3;5202:6;5191:9;5187:22;5166:49;;;5159:4;5152:5;5148:16;5141:75;5073:154;3940:1297;;;;;5292:1935;;5420:5;5408:9;5403:3;5399:19;5395:31;5392:2;;;5439:1;5436;5429:12;5392:2;5457:21;5472:5;5457:21;;;5448:30;-1:-1;5529:1;5560:49;5605:3;5585:9;5560:49;;;5536:74;;-1:-1;5673:2;5706:49;5751:3;5727:22;;;5706:49;;;5699:4;5692:5;5688:16;5681:75;5631:136;5822:2;5855:49;5900:3;5891:6;5880:9;5876:22;5855:49;;;5848:4;5841:5;5837:16;5830:75;5777:139;5968:2;6001:49;6046:3;6037:6;6026:9;6022:22;6001:49;;;5994:4;5987:5;5983:16;5976:75;5926:136;6114:3;6148:49;6193:3;6184:6;6173:9;6169:22;6148:49;;;6141:4;6134:5;6130:16;6123:75;6072:137;6263:3;6297:49;6342:3;6333:6;6322:9;6318:22;6297:49;;;6290:4;6283:5;6279:16;6272:75;6219:139;6415:3;6449:49;6494:3;6485:6;6474:9;6470:22;6449:49;;;6442:4;6435:5;6431:16;6424:75;6368:142;6568:3;6602:49;6647:3;6638:6;6627:9;6623:22;6602:49;;;6595:4;6588:5;6584:16;6577:75;6520:143;6723:3;6758:49;6803:3;6794:6;6783:9;6779:22;6758:49;;;6750:5;6743;6739:17;6732:76;6673:146;6879:3;6914:49;6959:3;6950:6;6939:9;6935:22;6914:49;;;6906:5;6899;6895:17;6888:76;6829:146;7058:3;7047:9;7043:19;7030:33;7083:18;7075:6;7072:30;7069:2;;;7115:1;7112;7105:12;7069:2;7151:54;7201:3;7192:6;7181:9;7177:22;7151:54;;;7143:5;7136;7132:17;7125:81;6985:232;5386:1841;;;;;7270:1332;;7382:4;7370:9;7365:3;7361:19;7357:30;7354:2;;;7400:1;7397;7390:12;7354:2;7418:20;7433:4;7418:20;;;7409:29;-1:-1;7489:1;7520:49;7565:3;7545:9;7520:49;;;7496:74;;-1:-1;7636:2;7669:49;7714:3;7690:22;;;7669:49;;;7662:4;7655:5;7651:16;7644:75;7591:139;7787:2;7820:49;7865:3;7856:6;7845:9;7841:22;7820:49;;;7813:4;7806:5;7802:16;7795:75;7740:141;7943:2;7976:49;8021:3;8012:6;8001:9;7997:22;7976:49;;;7969:4;7962:5;7958:16;7951:75;7891:146;8101:3;8135:49;8180:3;8171:6;8160:9;8156:22;8135:49;;;8128:4;8121:5;8117:16;8110:75;8047:149;8256:3;8290:49;8335:3;8326:6;8315:9;8311:22;8290:49;;;8283:4;8276:5;8272:16;8265:75;8206:145;8434:3;8423:9;8419:19;8406:33;8459:18;8451:6;8448:30;8445:2;;;8491:1;8488;8481:12;8445:2;8526:54;8576:3;8567:6;8556:9;8552:22;8526:54;;8746:134;8824:13;;8842:33;8824:13;8842:33;;8887:126;8952:20;;8977:31;8952:20;8977:31;;9020:241;;9124:2;9112:9;9103:7;9099:23;9095:32;9092:2;;;9140:1;9137;9130:12;9092:2;9175:1;9192:53;9237:7;9217:9;9192:53;;;9182:63;9086:175;-1:-1;;;;9086:175;9532:366;;;9653:2;9641:9;9632:7;9628:23;9624:32;9621:2;;;9669:1;9666;9659:12;9621:2;9704:1;9721:53;9766:7;9746:9;9721:53;;;9711:63;;9683:97;9811:2;9829:53;9874:7;9865:6;9854:9;9850:22;9829:53;;;9819:63;;9790:98;9615:283;;;;;;9905:397;;;10044:2;10032:9;10023:7;10019:23;10015:32;10012:2;;;10060:1;10057;10050:12;10012:2;10095:31;;10146:18;10135:30;;10132:2;;;10178:1;10175;10168:12;10132:2;10206:80;10278:7;10269:6;10258:9;10254:22;10206:80;;;10196:90;;;;10074:218;10006:296;;;;;;10309:384;;10445:2;10433:9;10424:7;10420:23;10416:32;10413:2;;;10461:1;10458;10451:12;10413:2;10496:24;;10540:18;10529:30;;10526:2;;;10572:1;10569;10562:12;10526:2;10592:85;10669:7;10660:6;10649:9;10645:22;10592:85;;10700:392;;10840:2;10828:9;10819:7;10815:23;10811:32;10808:2;;;10856:1;10853;10846:12;10808:2;10891:24;;10935:18;10924:30;;10921:2;;;10967:1;10964;10957:12;10921:2;10987:89;11068:7;11059:6;11048:9;11044:22;10987:89;;11099:257;;11211:2;11199:9;11190:7;11186:23;11182:32;11179:2;;;11227:1;11224;11217:12;11179:2;11262:1;11279:61;11332:7;11312:9;11279:61;;11363:401;;11504:2;11492:9;11483:7;11479:23;11475:32;11472:2;;;11520:1;11517;11510:12;11472:2;11555:31;;11606:18;11595:30;;11592:2;;;11638:1;11635;11628:12;11592:2;11658:90;11740:7;11731:6;11720:9;11716:22;11658:90;;11771:405;;11914:2;11902:9;11893:7;11889:23;11885:32;11882:2;;;11930:1;11927;11920:12;11882:2;11965:31;;12016:18;12005:30;;12002:2;;;12048:1;12045;12038:12;12002:2;12068:92;12152:7;12143:6;12132:9;12128:22;12068:92;;12183:263;;12298:2;12286:9;12277:7;12273:23;12269:32;12266:2;;;12314:1;12311;12304:12;12266:2;12349:1;12366:64;12422:7;12402:9;12366:64;;12453:237;;12555:2;12543:9;12534:7;12530:23;12526:32;12523:2;;;12571:1;12568;12561:12;12523:2;12606:1;12623:51;12666:7;12646:9;12623:51;;12698:173;;12785:46;12827:3;12819:6;12785:46;;;-1:-1;;12860:4;12851:14;;12778:93;12879:142;12970:45;13009:5;12970:45;;;12965:3;12958:58;12952:69;;;13028:103;13101:24;13119:5;13101:24;;13289:690;;13434:54;13482:5;13434:54;;;13501:86;13580:6;13575:3;13501:86;;;13494:93;;13608:56;13658:5;13608:56;;;13684:7;13712:1;13697:260;13722:6;13719:1;13716:13;13697:260;;;13789:6;13783:13;13810:63;13869:3;13854:13;13810:63;;;13803:70;;13890:60;13943:6;13890:60;;;13880:70;-1:-1;;13744:1;13737:9;13697:260;;;-1:-1;13970:3;;13413:566;-1:-1;;;;;13413:566;13987:104;14064:21;14079:5;14064:21;;14098:347;;14210:39;14243:5;14210:39;;;14261:71;14325:6;14320:3;14261:71;;;14254:78;;14337:52;14382:6;14377:3;14370:4;14363:5;14359:16;14337:52;;;14410:29;14432:6;14410:29;;;14401:39;;;;14190:255;-1:-1;;;14190:255;14453:364;;14613:67;14677:2;14672:3;14613:67;;;-1:-1;;;14693:87;;14808:2;14799:12;;14599:218;-1:-1;;14599:218;14826:364;;14986:67;15050:2;15045:3;14986:67;;;-1:-1;;;15066:87;;15181:2;15172:12;;14972:218;-1:-1;;14972:218;15199:465;;15359:67;15423:2;15418:3;15359:67;;;15459:66;15439:87;;-1:-1;;;15555:2;15546:12;;15539:88;15655:2;15646:12;;15345:319;-1:-1;;15345:319;15673:296;;15850:83;15931:1;15926:3;15850:83;;15978:363;;16138:66;16202:1;16197:3;16138:66;;;-1:-1;;;16217:87;;16332:2;16323:12;;16124:217;-1:-1;;16124:217;16350:465;;16510:67;16574:2;16569:3;16510:67;;;16610:66;16590:87;;-1:-1;;;16706:2;16697:12;;16690:88;16806:2;16797:12;;16496:319;-1:-1;;16496:319;16824:465;;16984:67;17048:2;17043:3;16984:67;;;17084:66;17064:87;;-1:-1;;;17180:2;17171:12;;17164:88;17280:2;17271:12;;16970:319;-1:-1;;16970:319;17298:465;;17458:67;17522:2;17517:3;17458:67;;;17558:66;17538:87;;-1:-1;;;17654:2;17645:12;;17638:88;17754:2;17745:12;;17444:319;-1:-1;;17444:319;17772:465;;17932:67;17996:2;17991:3;17932:67;;;18032:66;18012:87;;-1:-1;;;18128:2;18119:12;;18112:88;18228:2;18219:12;;17918:319;-1:-1;;17918:319;18245:113;18328:24;18346:5;18328:24;;18365:107;18444:22;18460:5;18444:22;;18479:370;;18677:147;18820:3;18677:147;;18856:213;18974:2;18959:18;;18988:71;18963:9;19032:6;18988:71;;19076:229;19202:2;19187:18;;19216:79;19191:9;19268:6;19216:79;;19312:324;19458:2;19443:18;;19472:71;19447:9;19516:6;19472:71;;;19554:72;19622:2;19611:9;19607:18;19598:6;19554:72;;;19429:207;;;;;;19643:324;19789:2;19774:18;;19803:71;19778:9;19847:6;19803:71;;;19885:72;19953:2;19942:9;19938:18;19929:6;19885:72;;19974:201;20086:2;20071:18;;20100:65;20075:9;20138:6;20100:65;;20182:301;20320:2;20334:47;;;20305:18;;20395:78;20305:18;20459:6;20395:78;;20490:407;20681:2;20695:47;;;20666:18;;20756:131;20666:18;20756:131;;20904:407;21095:2;21109:47;;;21080:18;;21170:131;21080:18;21170:131;;21318:407;21509:2;21523:47;;;21494:18;;21584:131;21494:18;21584:131;;21732:407;21923:2;21937:47;;;21908:18;;21998:131;21908:18;21998:131;;22146:407;22337:2;22351:47;;;22322:18;;22412:131;22322:18;22412:131;;22560:407;22751:2;22765:47;;;22736:18;;22826:131;22736:18;22826:131;;22974:407;23165:2;23179:47;;;23150:18;;23240:131;23150:18;23240:131;;23388:407;23579:2;23593:47;;;23564:18;;23654:131;23564:18;23654:131;;23802:213;23920:2;23905:18;;23934:71;23909:9;23978:6;23934:71;;24022:472;24218:2;24203:18;;24232:71;24207:9;24276:6;24232:71;;;24351:9;24345:4;24341:20;24336:2;24325:9;24321:18;24314:48;24376:108;24479:4;24470:6;24376:108;;24501:823;24789:3;24774:19;;24804:71;24778:9;24848:6;24804:71;;;24886:72;24954:2;24943:9;24939:18;24930:6;24886:72;;;25006:9;25000:4;24996:20;24991:2;24980:9;24976:18;24969:48;25031:108;25134:4;25125:6;25031:108;;;25023:116;;25150:80;25226:2;25215:9;25211:18;25202:6;25150:80;;;25241:73;25309:3;25298:9;25294:19;25285:6;25241:73;;;24760:564;;;;;;;;;25331:205;25445:2;25430:18;;25459:67;25434:9;25499:6;25459:67;;25543:256;25605:2;25599:9;25631:17;;;25706:18;25691:34;;25727:22;;;25688:62;25685:2;;;25763:1;25760;25753:12;25685:2;25779;25772:22;25583:216;;-1:-1;25583:216;25806:300;;25961:18;25953:6;25950:30;25947:2;;;25993:1;25990;25983:12;25947:2;-1:-1;26028:4;26016:17;;;26081:15;;25884:222;26754:317;;26893:18;26885:6;26882:30;26879:2;;;26925:1;26922;26915:12;26879:2;-1:-1;27056:4;26992;26969:17;;;;-1:-1;;26965:33;27046:15;;26816:255;27078:151;27202:4;27193:14;;27150:79;27236:137;27339:12;;27310:63;27625:178;27743:19;;;27792:4;27783:14;;27736:67;27812:144;27947:3;27925:31;-1:-1;27925:31;28136:91;;28198:24;28216:5;28198:24;;28340:85;28406:13;28399:21;;28382:43;28432:72;28494:5;28477:27;28511:121;-1:-1;;;;;28573:54;;28556:76;28718:81;28789:4;28778:16;;28761:38;28806:129;;28893:37;28924:5;28942:121;29021:37;29052:5;29021:37;;29186:145;29267:6;29262:3;29257;29244:30;-1:-1;29323:1;29305:16;;29298:27;29237:94;29340:268;29405:1;29412:101;29426:6;29423:1;29420:13;29412:101;;;29493:11;;;29487:18;29474:11;;;29467:39;29448:2;29441:10;29412:101;;;29528:6;29525:1;29522:13;29519:2;;;29593:1;29584:6;29579:3;29575:16;29568:27;29519:2;29389:219;;;;;29616:97;29704:2;29684:14;-1:-1;;29680:28;;29664:49;29721:117;29790:24;29808:5;29790:24;;;29783:5;29780:35;29770:2;;29829:1;29826;29819:12;29985:111;30051:21;30066:5;30051:21;;30103:117;30172:24;30190:5;30172:24;;30351:113;30418:22;30434:5;30418:22;
Swarm Source
bzzr://b4add4ac8850852c61e762a02465868b1651782ce59d513fe7bfd8a4cab8ab69
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
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.