Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Latest 25 from a total of 141 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Modify Offering ... | 23427334 | 160 days ago | IN | 0 ETH | 0.00021735 | ||||
| Cancel Offering | 23427304 | 160 days ago | IN | 0 ETH | 0.000099 | ||||
| Collect Investme... | 22837643 | 242 days ago | IN | 0 ETH | 0.00032568 | ||||
| Modify Offering ... | 22817450 | 245 days ago | IN | 0 ETH | 0.00051364 | ||||
| Return Investmen... | 22817415 | 245 days ago | IN | 0 ETH | 0.00056839 | ||||
| Invest | 22759003 | 253 days ago | IN | 0 ETH | 0.00029072 | ||||
| Invest | 22746189 | 255 days ago | IN | 0 ETH | 0.00185761 | ||||
| Modify Offering ... | 22736335 | 256 days ago | IN | 0 ETH | 0.00034989 | ||||
| Invest | 22716090 | 259 days ago | IN | 0 ETH | 0.00036289 | ||||
| Invest | 22673293 | 265 days ago | IN | 0 ETH | 0.00037672 | ||||
| Modify Offering ... | 22645768 | 269 days ago | IN | 0 ETH | 0.00023156 | ||||
| Modify Offering ... | 22615384 | 273 days ago | IN | 0 ETH | 0.0001981 | ||||
| Cancel Offering | 22573194 | 279 days ago | IN | 0 ETH | 0.00013399 | ||||
| Modify Offering ... | 22529250 | 285 days ago | IN | 0 ETH | 0.00043908 | ||||
| Modify Offering ... | 22433707 | 299 days ago | IN | 0 ETH | 0.00055106 | ||||
| Invest | 22128320 | 341 days ago | IN | 0 ETH | 0.00025965 | ||||
| Modify Offering ... | 21894783 | 374 days ago | IN | 0 ETH | 0.00015826 | ||||
| Cancel Offering | 21894749 | 374 days ago | IN | 0 ETH | 0.00007376 | ||||
| Modify Offering ... | 21784250 | 389 days ago | IN | 0 ETH | 0.00056437 | ||||
| Modify Offering ... | 21780130 | 390 days ago | IN | 0 ETH | 0.00020448 | ||||
| Collect Investme... | 21779469 | 390 days ago | IN | 0 ETH | 0.00018374 | ||||
| Invest | 21735419 | 396 days ago | IN | 0 ETH | 0.00045924 | ||||
| Invest | 21725341 | 397 days ago | IN | 0 ETH | 0.00141705 | ||||
| Collect Investme... | 21672205 | 405 days ago | IN | 0 ETH | 0.00140557 | ||||
| Invest | 21666865 | 406 days ago | IN | 0 ETH | 0.01092992 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
FixedPriceInitialOffering
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity Multiple files format)
/*
* SPDX-License-Identifier: UNLICENSED
* Copyright © 2021 Blocksquare d.o.o.
*/
pragma solidity ^0.6.12;
pragma experimental ABIEncoderV2;
import "./Ownable.sol";
import "./SafeMath.sol";
interface FixedPriceInitialOfferingHelpers {
function mint(address[] memory accounts, uint256[] memory amounts) external returns (bool);
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
function transfer(address sender, uint256 amount) external returns (bool);
function totalSupply() external view returns (uint256);
function canEditProperty(address wallet, address property) external view returns (bool);
function contractBurn(address user, uint256 amount) external returns (bool);
function cap() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function hasSystemAdminRights(address sender) external view returns (bool);
function isCPAdminOfProperty(address admin, address property) external view returns (bool);
function getUserBytesFromWallet(address wallet) external view returns (bytes32);
}
/// @title Fixed Price Initial Offering
contract FixedPriceInitialOffering is Ownable {
using SafeMath for uint256;
struct Offering {
uint256 presaleStart;
uint256 presaleEnd;
uint256 saleStart;
uint256 saleEnd;
uint256 price;
uint256 amountCollected;
uint256 presaleCollected;
uint256 presaleMaxInvestment;
uint256 presaleMinInvestment;
uint256 maxInvestment;
uint256 minInvestment;
uint256 softCap;
address investmentToken;
address collector;
address feeCollector;
uint256 fee;
bool investmentCollected;
}
struct NewOffering {
uint256 presaleStart;
uint256 presaleEnd;
uint256 saleEnd;
uint256 price;
uint256 presaleMaxInvestment;
uint256 presaleMinInvestment;
uint256 maxInvestment;
uint256 minInvestment;
uint256 softCap;
address investmentToken;
address collector;
address feeCollector;
uint256 fee;
}
mapping(address => mapping(address => mapping(uint16 => uint256))) private _userInvestment;
mapping(address => mapping(bytes32 => mapping(uint16 => uint256))) private _userTotalInvestment;
mapping(address => mapping(address => mapping(uint16 => uint256))) private _userTokens;
mapping(address => mapping(address => mapping(uint16 => uint256))) private _userTokensPresale;
mapping(address => Offering) private _offerings;
mapping(address => uint16) private _numOfSuccessfulOfferings;
address private _dataProxy;
address private _users;
modifier onlyCPOrAdmin(address admin, address property) {
require(FixedPriceInitialOfferingHelpers(_dataProxy).canEditProperty(admin, property), "Initial investment: You need to be able to edit property");
_;
}
event Invested(address indexed property, address indexed wallet, address investmentToken, uint256 amountInvested, uint256 amountReceived);
event InitialOffer(address indexed property, uint256 pricePerToken, uint256 presaleMaxInvestment, uint256 presaleMinInvestment, uint256 maxInvestment, uint256 minInvestment, uint256 softCap, uint256 presaleStart, uint256 presaleEnd, uint256 saleStart, uint256 saleEnd, address investmentCurrency, address collector, address feeCollector, uint256 fee);
event ClaimInvestment(address indexed property, uint256 amount, uint256 feeAmount);
event ReturnedInvestment(address indexed proeprty, address wallet, uint256 amount);
event ReturnedPresaleInvestment(address indexed proeprty, address wallet, uint256 amount);
event InitialOfferingCanceled(address indexed property);
constructor(address dataProxy, address users) public {
_dataProxy = dataProxy;
_users = users;
}
function changeDataProxy(address dataProxy) public onlyOwner {
_dataProxy = dataProxy;
}
function changeUsers(address users) public onlyOwner {
_users = users;
}
/// @notice create or update offering information
/// @param newOffering Offering information (price and fee support up to 2 decimals for 5% fee enter 500)
function modifyOfferingInfo(address property, NewOffering memory newOffering) public onlyCPOrAdmin(_msgSender(), property) {
require(newOffering.softCap.mul(10 ** 9).div(newOffering.price).div(10 ** 7) <= hardCap(property).sub(currentSupply(property)), "InitialInvestment: Soft cap set too high");
require(newOffering.presaleStart >= block.timestamp, "InitialInvestment: Investment must start in the future");
require(newOffering.presaleStart <= newOffering.presaleEnd && (newOffering.presaleEnd + 3 days) <= newOffering.saleEnd, "InitialInvestment: Start time must be before end time");
Offering memory offering = _offerings[property];
require(offering.presaleStart == 0 || offering.presaleStart > block.timestamp || offering.saleEnd < block.timestamp || offering.investmentCollected, "Initial investment: Offering already set and it started");
require((offering.amountCollected == 0 && offering.presaleCollected == 0) || offering.investmentCollected, "InitialInvestment: You need to collect investments first");
offering = Offering(newOffering.presaleStart, newOffering.presaleEnd, newOffering.presaleEnd + 3 days, newOffering.saleEnd, newOffering.price, 0, 0, newOffering.presaleMaxInvestment, newOffering.presaleMinInvestment, newOffering.maxInvestment, newOffering.minInvestment, newOffering.softCap, newOffering.investmentToken, newOffering.collector, newOffering.feeCollector, newOffering.fee, false);
_offerings[property] = offering;
emit InitialOffer(property, offering.price, offering.presaleMaxInvestment, offering.presaleMinInvestment, offering.maxInvestment, offering.minInvestment, offering.softCap, offering.presaleStart, offering.presaleEnd, offering.presaleStart + 3 days, offering.saleEnd, offering.investmentToken, offering.collector, offering.feeCollector, offering.fee);
}
/// @notice invest ERC-20 token (DAI for example) to receive property token
/// @param property Property contract address
/// @param amount Amount of specified token to invest
function invest(address property, uint256 amount) public {
Offering memory offering = _offerings[property];
bytes32 user = FixedPriceInitialOfferingHelpers(_users).getUserBytesFromWallet(_msgSender());
require(offering.saleStart <= block.timestamp && offering.saleEnd >= block.timestamp, "InitialInvestment: Offering is not active");
require(amount >= offering.minInvestment, "InitialInvestment: You need to invest more");
require(_userTotalInvestment[property][user][_numOfSuccessfulOfferings[property]].add(amount) <= offering.maxInvestment, "InitialInvestment: You need to invest less");
uint256 cap = FixedPriceInitialOfferingHelpers(property).cap();
uint256 mintAmount = amount.mul(10 ** 9).div(offering.price).div(10 ** 7);
uint256 currentSupply = FixedPriceInitialOfferingHelpers(property).totalSupply();
require(currentSupply.add(mintAmount) <= cap, "InitialInvestment: Too many tokens would be minted");
_offerings[property].amountCollected = offering.amountCollected.add(amount);
require(FixedPriceInitialOfferingHelpers(offering.investmentToken).transferFrom(_msgSender(), address(this), amount));
uint256[] memory mAmount = new uint256[](1);
mAmount[0] = mintAmount;
address[] memory receiver = new address[](1);
receiver[0] = _msgSender();
require(FixedPriceInitialOfferingHelpers(property).mint(receiver, mAmount));
_userInvestment[property][_msgSender()][_numOfSuccessfulOfferings[property]] = _userInvestment[property][_msgSender()][_numOfSuccessfulOfferings[property]].add(amount);
_userTokens[property][_msgSender()][_numOfSuccessfulOfferings[property]] = _userTokens[property][_msgSender()][_numOfSuccessfulOfferings[property]].add(mintAmount);
_userTotalInvestment[property][user][_numOfSuccessfulOfferings[property]] = _userTotalInvestment[property][user][_numOfSuccessfulOfferings[property]].add(amount);
emit Invested(property, _msgSender(), offering.investmentToken, amount, mintAmount);
}
/// @notice collect investment (only if soft cap was reached and the offering closed)
/// @param property Property contract address
function collectInvestments(address property) public {
Offering storage offering = _offerings[property];
require(offering.softCap <= offering.amountCollected.add(offering.presaleCollected), "InitialInvestment: Soft cap not reached");
require(offering.saleEnd < block.timestamp || currentSupply(property) == hardCap(property), "InitialInvestment: You need to wait for initial investment to finish");
uint256 collected = offering.amountCollected;
offering.amountCollected = 0;
offering.investmentCollected = true;
uint256 fee = collected.mul(offering.fee).div(10000);
collected = collected.sub(fee);
_numOfSuccessfulOfferings[property] = _numOfSuccessfulOfferings[property] + 1;
require(FixedPriceInitialOfferingHelpers(_offerings[property].investmentToken).transfer(offering.collector, collected));
if (fee > 0) {
require(FixedPriceInitialOfferingHelpers(_offerings[property].investmentToken).transfer(offering.feeCollector, fee));
}
emit ClaimInvestment(property, collected, fee);
}
/// @notice mint property tokens for presale (done offchain)
/// @param property Property contract address
/// @param wallets Array of wallets to which tokens should be minted
/// @param amounts Array of amounts of how much tokens should be minted
function mintPresale(address property, address[] memory wallets, uint256[] memory amounts) public {
require(FixedPriceInitialOfferingHelpers(_dataProxy).isCPAdminOfProperty(_msgSender(), property), "InitialInvestment: You need to be admin");
Offering storage offering = _offerings[property];
require(offering.presaleStart <= block.timestamp && block.timestamp <= offering.saleEnd, "InitialInvestment: Can only mint during sale");
require(FixedPriceInitialOfferingHelpers(property).mint(wallets, amounts));
for (uint256 i = 0; i < wallets.length; i++) {
address wallet = wallets[i];
_userTokensPresale[property][wallet][_numOfSuccessfulOfferings[property]] = _userTokensPresale[property][wallet][_numOfSuccessfulOfferings[property]].add(amounts[i]);
uint256 investment = amounts[i].mul(offering.price).div(100);
_offerings[property].presaleCollected = offering.presaleCollected.add(investment);
}
}
/// @notice burn presale minted tokens in case soft cap was not reached
/// @param property Property contract address
/// @param wallets Array of wallets for which to burn the property tokens
function returnPresaleInvestment(address property, address[] memory wallets) public onlyCPOrAdmin(msg.sender, property) {
Offering storage offering = _offerings[property];
require(offering.saleEnd <= block.timestamp && offering.softCap > offering.amountCollected.add(offering.presaleCollected), "InitialInvestment: Soft cap must not be reached");
for (uint i = 0; i < wallets.length; i++) {
address wallet = wallets[i];
uint256 userBalance = _userTokensPresale[property][wallet][_numOfSuccessfulOfferings[property]];
uint256 userInvestment = userBalance.mul(offering.price).div(100);
_userTokensPresale[property][wallet][_numOfSuccessfulOfferings[property]] = 0;
require(FixedPriceInitialOfferingHelpers(property).contractBurn(wallet, userBalance));
_offerings[property].presaleCollected = _offerings[property].presaleCollected.sub(userInvestment);
emit ReturnedPresaleInvestment(property, wallet, userInvestment);
}
}
function _returnInvestment(address property, address wallet) private {
bytes32 user = FixedPriceInitialOfferingHelpers(_users).getUserBytesFromWallet(wallet);
uint256 userBalance = _userTokens[property][wallet][_numOfSuccessfulOfferings[property]];
uint256 userInvestment = _userInvestment[property][wallet][_numOfSuccessfulOfferings[property]];
_userInvestment[property][wallet][_numOfSuccessfulOfferings[property]] = 0;
_userTokens[property][wallet][_numOfSuccessfulOfferings[property]] = 0;
_userTotalInvestment[property][user][_numOfSuccessfulOfferings[property]] = _userTotalInvestment[property][user][_numOfSuccessfulOfferings[property]].sub(userInvestment);
require(FixedPriceInitialOfferingHelpers(property).contractBurn(wallet, userBalance));
require(FixedPriceInitialOfferingHelpers(_offerings[property].investmentToken).transfer(wallet, userInvestment));
_offerings[property].amountCollected = _offerings[property].amountCollected.sub(userInvestment);
emit ReturnedInvestment(property, wallet, userInvestment);
}
/// @notice return investment in case soft cap was not reached
/// @param property Property contract address
/// @param wallets Array of wallets for which to return the investment
function returnInvestment(address property, address[] memory wallets) public onlyCPOrAdmin(msg.sender, property) {
Offering storage offering = _offerings[property];
require(offering.saleEnd <= block.timestamp && offering.softCap > offering.amountCollected.add(offering.presaleCollected), "InitialInvestment: Soft cap must not be reached");
for (uint i = 0; i < wallets.length; i++) {
address wallet = wallets[i];
_returnInvestment(property, wallet);
}
}
/// @notice get back investment and burn property token
/// @param property Property contract address
function getInvestmentBack(address property) public {
Offering storage offering = _offerings[property];
require(offering.saleEnd < block.timestamp && offering.softCap > offering.amountCollected.add(offering.presaleCollected), "InitialInvestment: Soft cap must not be reached");
_returnInvestment(property, _msgSender());
}
/// @notice cancel current initial investment for property
/// @param property Property contract address
function cancelOffering(address property) public {
require(FixedPriceInitialOfferingHelpers(_dataProxy).hasSystemAdminRights(msg.sender), "InitialInvestment: You need to have system admin rights");
_offerings[property].presaleStart = block.timestamp;
_offerings[property].presaleEnd = block.timestamp;
_offerings[property].saleStart = block.timestamp;
_offerings[property].saleEnd = block.timestamp;
emit InitialOfferingCanceled(property);
}
/// @notice transfer DAI from this contract to another wallet in case something goes wrong
/// @param property Property contract address
/// @param wallet Wallet address
function recoverDAI(address property, address wallet) public {
require(FixedPriceInitialOfferingHelpers(_dataProxy).hasSystemAdminRights(msg.sender), "InitialInvestment: You need to have system admin rights");
Offering storage offering = _offerings[property];
require(offering.saleEnd <= block.timestamp && offering.softCap > offering.amountCollected.add(offering.presaleCollected), "InitialInvestment: Soft cap must not be reached");
require(FixedPriceInitialOfferingHelpers(_offerings[property].investmentToken).transfer(wallet, offering.amountCollected));
_offerings[property].amountCollected = 0;
_offerings[property].presaleCollected = 0;
_numOfSuccessfulOfferings[property] = _numOfSuccessfulOfferings[property] + 1;
}
/// @notice retrieves total supply of property token
/// @param property Property contract address
function currentSupply(address property) public view returns (uint256) {
return FixedPriceInitialOfferingHelpers(property).totalSupply();
}
/// @notice retrieves cap of property token
/// @param property Property contract address
function hardCap(address property) public view returns (uint256) {
return FixedPriceInitialOfferingHelpers(property).cap();
}
/// @notice retrieves initial offering information for property
/// @param property Property contract address
function offeringInfo(address property) public view returns (Offering memory) {
return _offerings[property];
}
/// @notice retrieves current offering token invested in sale (returns zero if investment was collected) for wallet
/// @param property Property contract address
/// @param wallet Investor wallet
function currentInvestmentByWallet(address property, address wallet) public view returns (uint256) {
return _userInvestment[property][wallet][_numOfSuccessfulOfferings[property]];
}
/// @notice retrieves current total offering token invested in sale by user (returns zero if investment was collected)
/// @param property Property contract address
/// @param wallet Investor wallet
function currentInvestmentByUser(address property, address wallet) public view returns (uint256) {
bytes32 user = FixedPriceInitialOfferingHelpers(_users).getUserBytesFromWallet(wallet);
return _userTotalInvestment[property][user][_numOfSuccessfulOfferings[property]];
}
/// @notice retrieves current offering token invested in presale (returns zero if investment was collected)
/// @param property Property contract address
/// @param wallet Investor wallet
function currentUserPresaleInvestment(address property, address wallet) public view returns (uint256) {
return _userTokensPresale[property][wallet][_numOfSuccessfulOfferings[property]].mul(_offerings[property].price).div(100);
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;
/*
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with GSN meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address payable) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes memory) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;
import "./Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor () internal {
address msgSender = _msgSender();
_owner = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(_owner == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = address(0);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;
/**
* @dev Wrappers over Solidity's arithmetic operations with added overflow
* checks.
*
* Arithmetic operations in Solidity wrap on overflow. This can easily result
* in bugs, because programmers usually assume that an overflow raises an
* error, which is the standard behavior in high level programming languages.
* `SafeMath` restores this intuition by reverting the transaction when an
* operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b > 0, errorMessage);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts with custom message when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"dataProxy","type":"address"},{"internalType":"address","name":"users","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"property","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"feeAmount","type":"uint256"}],"name":"ClaimInvestment","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"property","type":"address"},{"indexed":false,"internalType":"uint256","name":"pricePerToken","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"presaleMaxInvestment","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"presaleMinInvestment","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxInvestment","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"minInvestment","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"softCap","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"presaleStart","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"presaleEnd","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"saleStart","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"saleEnd","type":"uint256"},{"indexed":false,"internalType":"address","name":"investmentCurrency","type":"address"},{"indexed":false,"internalType":"address","name":"collector","type":"address"},{"indexed":false,"internalType":"address","name":"feeCollector","type":"address"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"InitialOffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"property","type":"address"}],"name":"InitialOfferingCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"property","type":"address"},{"indexed":true,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"address","name":"investmentToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountInvested","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountReceived","type":"uint256"}],"name":"Invested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proeprty","type":"address"},{"indexed":false,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ReturnedInvestment","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proeprty","type":"address"},{"indexed":false,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ReturnedPresaleInvestment","type":"event"},{"inputs":[{"internalType":"address","name":"property","type":"address"}],"name":"cancelOffering","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"dataProxy","type":"address"}],"name":"changeDataProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"users","type":"address"}],"name":"changeUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"property","type":"address"}],"name":"collectInvestments","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"property","type":"address"},{"internalType":"address","name":"wallet","type":"address"}],"name":"currentInvestmentByUser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"property","type":"address"},{"internalType":"address","name":"wallet","type":"address"}],"name":"currentInvestmentByWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"property","type":"address"}],"name":"currentSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"property","type":"address"},{"internalType":"address","name":"wallet","type":"address"}],"name":"currentUserPresaleInvestment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"property","type":"address"}],"name":"getInvestmentBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"property","type":"address"}],"name":"hardCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"property","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"invest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"property","type":"address"},{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"mintPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"property","type":"address"},{"components":[{"internalType":"uint256","name":"presaleStart","type":"uint256"},{"internalType":"uint256","name":"presaleEnd","type":"uint256"},{"internalType":"uint256","name":"saleEnd","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"presaleMaxInvestment","type":"uint256"},{"internalType":"uint256","name":"presaleMinInvestment","type":"uint256"},{"internalType":"uint256","name":"maxInvestment","type":"uint256"},{"internalType":"uint256","name":"minInvestment","type":"uint256"},{"internalType":"uint256","name":"softCap","type":"uint256"},{"internalType":"address","name":"investmentToken","type":"address"},{"internalType":"address","name":"collector","type":"address"},{"internalType":"address","name":"feeCollector","type":"address"},{"internalType":"uint256","name":"fee","type":"uint256"}],"internalType":"struct FixedPriceInitialOffering.NewOffering","name":"newOffering","type":"tuple"}],"name":"modifyOfferingInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"property","type":"address"}],"name":"offeringInfo","outputs":[{"components":[{"internalType":"uint256","name":"presaleStart","type":"uint256"},{"internalType":"uint256","name":"presaleEnd","type":"uint256"},{"internalType":"uint256","name":"saleStart","type":"uint256"},{"internalType":"uint256","name":"saleEnd","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"amountCollected","type":"uint256"},{"internalType":"uint256","name":"presaleCollected","type":"uint256"},{"internalType":"uint256","name":"presaleMaxInvestment","type":"uint256"},{"internalType":"uint256","name":"presaleMinInvestment","type":"uint256"},{"internalType":"uint256","name":"maxInvestment","type":"uint256"},{"internalType":"uint256","name":"minInvestment","type":"uint256"},{"internalType":"uint256","name":"softCap","type":"uint256"},{"internalType":"address","name":"investmentToken","type":"address"},{"internalType":"address","name":"collector","type":"address"},{"internalType":"address","name":"feeCollector","type":"address"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"bool","name":"investmentCollected","type":"bool"}],"internalType":"struct FixedPriceInitialOffering.Offering","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"property","type":"address"},{"internalType":"address","name":"wallet","type":"address"}],"name":"recoverDAI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"property","type":"address"},{"internalType":"address[]","name":"wallets","type":"address[]"}],"name":"returnInvestment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"property","type":"address"},{"internalType":"address[]","name":"wallets","type":"address[]"}],"name":"returnPresaleInvestment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040523480156200001157600080fd5b5060405162003437380380620034378339810160408190526200003491620000c0565b600062000040620000bc565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600780546001600160a01b039384166001600160a01b0319918216179091556008805492909316911617905562000117565b3390565b60008060408385031215620000d3578182fd5b8251620000e081620000fe565b6020840151909250620000f381620000fe565b809150509250929050565b6001600160a01b03811681146200011457600080fd5b50565b61331080620001276000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c8063825e2645116100ad578063adc6816411610071578063adc681641461026a578063b9b8c2461461027d578063ca783e6514610290578063e22cdcdc146102a3578063f2fde38b146102b65761012c565b8063825e2645146102095780638da5cb5b1461021c57806396d01885146102315780639deb1d3a14610244578063a77fac44146102575761012c565b80634781f4f6116100f45780634781f4f6146101a8578063715018a6146101bb578063735f9f01146101c35780637e4387f6146101e357806381624cac146101f65761012c565b806305c873bd1461013157806314215dd1146101465780631f375b1e1461016f578063380c1a971461018257806342cc653214610195575b600080fd5b61014461013f3660046126d2565b6102c9565b005b6101596101543660046126b7565b6104b6565b60405161016691906131f2565b60405180910390f35b61014461017d3660046126b7565b61052f565b610144610190366004612753565b6107c3565b6101596101a33660046126d2565b610a6e565b6101596101b63660046126b7565b610b37565b610144610b72565b6101d66101d13660046126b7565b610bf1565b604051610166919061310a565b6101446101f13660046126b7565b610cde565b610144610204366004612706565b610dd3565b61014461021736600461281d565b610f11565b6102246114bc565b6040516101669190612981565b61014461023f3660046126b7565b6114cb565b6101446102523660046126b7565b611522565b6101596102653660046126d2565b611579565b610144610278366004612706565b6115b9565b61014461028b366004612904565b611882565b61015961029e3660046126d2565b611fbb565b6101446102b13660046126b7565b612020565b6101446102c43660046126b7565b612091565b60075460405163524ecd7960e11b81526001600160a01b039091169063a49d9af2906102f9903390600401612981565b60206040518083038186803b15801561031157600080fd5b505afa158015610325573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610349919061292e565b61036e5760405162461bcd60e51b815260040161036590612dbf565b60405180910390fd5b6001600160a01b0382166000908152600560205260409020600381015442108015906103af5750600681015460058201546103a891612147565b81600b0154115b6103cb5760405162461bcd60e51b815260040161036590612c0c565b6001600160a01b03808416600090815260056020819052604091829020600c015490840154915163a9059cbb60e01b815292169163a9059cbb91610414918691906004016129d3565b602060405180830381600087803b15801561042e57600080fd5b505af1158015610442573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610466919061292e565b61046f57600080fd5b50506001600160a01b0316600090815260056020818152604080842092830184905560069283018490559190529020805461ffff8082166001011661ffff19909116179055565b6000816001600160a01b031663355274ea6040518163ffffffff1660e01b815260040160206040518083038186803b1580156104f157600080fd5b505afa158015610505573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610529919061294e565b92915050565b6001600160a01b0381166000908152600560208190526040909120600681015491810154909161055f9190612147565b81600b015411156105825760405162461bcd60e51b815260040161036590612eba565b42816003015410806105a35750610598826104b6565b6105a183610b37565b145b6105bf5760405162461bcd60e51b815260040161036590612cb1565b60058101805460009182905560108301805460ff19166001179055600f8301549091906105fb90612710906105f590859061216c565b906121a6565b905061060782826121e8565b6001600160a01b038086166000908152600660209081526040808320805461ffff8082166001011661ffff19909116179055600590915290819020600c0154600d870154915163a9059cbb60e01b815293955082169263a9059cbb9261067392169086906004016129d3565b602060405180830381600087803b15801561068d57600080fd5b505af11580156106a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c5919061292e565b6106ce57600080fd5b801561077a576001600160a01b0380851660009081526005602052604090819020600c0154600e860154915163a9059cbb60e01b81529083169263a9059cbb9261071f9291169085906004016129d3565b602060405180830381600087803b15801561073957600080fd5b505af115801561074d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610771919061292e565b61077a57600080fd5b836001600160a01b03167f067118898b981e1259ac5a633ef5423387a2ebae70ac4bfc051b50ba982b7bf183836040516107b59291906131fb565b60405180910390a250505050565b6007546001600160a01b0316639af235536107dc61222a565b856040518363ffffffff1660e01b81526004016107fa929190612995565b60206040518083038186803b15801561081257600080fd5b505afa158015610826573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084a919061292e565b6108665760405162461bcd60e51b815260040161036590612d1b565b6001600160a01b038316600090815260056020526040902080544210801590610893575080600301544211155b6108af5760405162461bcd60e51b815260040161036590612b43565b6040516307233fbf60e51b81526001600160a01b0385169063e467f7e0906108dd9086908690600401612a0d565b602060405180830381600087803b1580156108f757600080fd5b505af115801561090b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092f919061292e565b61093857600080fd5b60005b8351811015610a6757600084828151811061095257fe5b602002602001015190506109b884838151811061096b57fe5b6020908102919091018101516001600160a01b03808a1660008181526004855260408082209388168252928552828120918152600685528281205461ffff16815293529091205490612147565b6001600160a01b0380881660008181526004602081815260408084209588168452948152848320938352600681528483205461ffff1683529290925291822092909255908401548551610a2f916064916105f59190899088908110610a1957fe5b602002602001015161216c90919063ffffffff16565b6006850154909150610a419082612147565b6001600160a01b038816600090815260056020526040902060060155505060010161093b565b5050505050565b600854604051631648d99360e31b815260009182916001600160a01b039091169063b246cc9890610aa3908690600401612981565b60206040518083038186803b158015610abb57600080fd5b505afa158015610acf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af3919061294e565b6001600160a01b0385166000818152600260209081526040808320948352938152838220928252600681528382205461ffff16825291909152205491505092915050565b6000816001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156104f157600080fd5b610b7a61222a565b6000546001600160a01b03908116911614610ba75760405162461bcd60e51b815260040161036590612f01565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610bf9612589565b506001600160a01b039081166000908152600560208181526040928390208351610220810185528154815260018201549281019290925260028101549382019390935260038301546060820152600483015460808201529082015460a0820152600682015460c0820152600782015460e082015260088201546101008201526009820154610120820152600a820154610140820152600b820154610160820152600c8201548316610180820152600d82015483166101a0820152600e8201549092166101c0830152600f8101546101e08301526010015460ff16151561020082015290565b60075460405163524ecd7960e11b81526001600160a01b039091169063a49d9af290610d0e903390600401612981565b60206040518083038186803b158015610d2657600080fd5b505afa158015610d3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5e919061292e565b610d7a5760405162461bcd60e51b815260040161036590612dbf565b6001600160a01b038116600081815260056020526040808220428082556001820181905560028201819055600390910155517f9b2754f8e10a23215a3fcc82107d046c5566aaa83664bef1dbc044ef112a7c769190a250565b6007546040516329fd1a4160e21b8152339184916001600160a01b039091169063a7f4690490610e099085908590600401612995565b60206040518083038186803b158015610e2157600080fd5b505afa158015610e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e59919061292e565b610e755760405162461bcd60e51b815260040161036590613064565b6001600160a01b038416600090815260056020526040902060038101544210801590610eb6575060068101546005820154610eaf91612147565b81600b0154115b610ed25760405162461bcd60e51b815260040161036590612c0c565b60005b8451811015610f09576000858281518110610eec57fe5b60200260200101519050610f00878261222e565b50600101610ed5565b505050505050565b610f1961222a565b6007546040516329fd1a4160e21b815284916001600160a01b03169063a7f4690490610f4b9085908590600401612995565b60206040518083038186803b158015610f6357600080fd5b505afa158015610f77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9b919061292e565b610fb75760405162461bcd60e51b815260040161036590613064565b610fd2610fc385610b37565b610fcc866104b6565b906121e8565b610ffd629896806105f586606001516105f5633b9aca0089610100015161216c90919063ffffffff16565b111561101b5760405162461bcd60e51b815260040161036590612f80565b825142111561103c5760405162461bcd60e51b815260040161036590612c5b565b602083015183511180159061105e5750826040015183602001516203f4800111155b61107a5760405162461bcd60e51b815260040161036590612aee565b611082612589565b506001600160a01b03808516600090815260056020818152604092839020835161022081018552815480825260018301549382019390935260028201549481019490945260038101546060850152600481015460808501529182015460a0840152600682015460c0840152600782015460e084015260088201546101008401526009820154610120840152600a820154610140840152600b820154610160840152600c8201548416610180840152600d82015484166101a0840152600e8201549093166101c0830152600f8101546101e08301526010015460ff1615156102008201529015806111725750805142105b806111805750428160600151105b8061118d57508061020001515b6111a95760405162461bcd60e51b815260040161036590612d62565b60a08101511580156111bd575060c0810151155b806111ca57508061020001515b6111e65760405162461bcd60e51b815260040161036590612e1c565b604051806102200160405280856000015181526020018560200151815260200185602001516203f48001815260200185604001518152602001856060015181526020016000815260200160008152602001856080015181526020018560a0015181526020018560c0015181526020018560e00151815260200185610100015181526020018561012001516001600160a01b031681526020018561014001516001600160a01b031681526020018561016001516001600160a01b0316815260200185610180015181526020016000151581525090508060056000876001600160a01b03166001600160a01b03168152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b015561018082015181600c0160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506101a082015181600d0160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506101c082015181600e0160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506101e082015181600f01556102008201518160100160006101000a81548160ff021916908315150217905550905050846001600160a01b03167f43d458af73054152f59e8170fb773bc9f9477d35ff08a648edc71abff5ac1f0882608001518360e00151846101000151856101200151866101400151876101600151886000015189602001518a600001516203f480018b606001518c61018001518d6101a001518e6101c001518f6101e001516040516114ad9e9d9c9b9a99989796959493929190613209565b60405180910390a25050505050565b6000546001600160a01b031690565b6114d361222a565b6000546001600160a01b039081169116146115005760405162461bcd60e51b815260040161036590612f01565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b61152a61222a565b6000546001600160a01b039081169116146115575760405162461bcd60e51b815260040161036590612f01565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b039182166000818152600160209081526040808320949095168252928352838120918152600683528381205461ffff1681529152205490565b6007546040516329fd1a4160e21b8152339184916001600160a01b039091169063a7f46904906115ef9085908590600401612995565b60206040518083038186803b15801561160757600080fd5b505afa15801561161b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163f919061292e565b61165b5760405162461bcd60e51b815260040161036590613064565b6001600160a01b03841660009081526005602052604090206003810154421080159061169c57506006810154600582015461169591612147565b81600b0154115b6116b85760405162461bcd60e51b815260040161036590612c0c565b60005b8451811015610f095760008582815181106116d257fe5b6020908102919091018101516001600160a01b03808a166000818152600480865260408083209486168352938652838220928252600686528382205461ffff1682529190945290832054908601549193509190611737906064906105f590859061216c565b6001600160a01b03808b166000818152600460208181526040808420958a168452948152848320848452600682528584205461ffff16845290528382209190915591516301cd910960e51b8152929350916339b221209161179c9187918791016129d3565b602060405180830381600087803b1580156117b657600080fd5b505af11580156117ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ee919061292e565b6117f757600080fd5b6001600160a01b03891660009081526005602052604090206006015461181d90826121e8565b6001600160a01b038a16600081815260056020526040908190206006019290925590517fb953fce83a28d4617eacb6af781c4df0f51088186cc78d2fffa773f1cd92c9029061186f90869085906129d3565b60405180910390a25050506001016116bb565b61188a612589565b506001600160a01b0380831660009081526005602081815260408084208151610220810183528154815260018201549381019390935260028101549183019190915260038101546060830152600481015460808301529182015460a0820152600682015460c0820152600782015460e08201526008808301546101008301526009830154610120830152600a830154610140830152600b830154610160830152600c8301548516610180830152600d83015485166101a0830152600e83015485166101c0830152600f8301546101e083015260109092015460ff161515610200820152905490921663b246cc9861197f61222a565b6040518263ffffffff1660e01b815260040161199b9190612981565b60206040518083038186803b1580156119b357600080fd5b505afa1580156119c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119eb919061294e565b905042826040015111158015611a05575042826060015110155b611a215760405162461bcd60e51b8152600401610365906130c1565b816101400151831015611a465760405162461bcd60e51b81526004016103659061301a565b6101208201516001600160a01b03851660008181526002602090815260408083208684528252808320938352600682528083205461ffff1683529290522054611a8f9085612147565b1115611aad5760405162461bcd60e51b815260040161036590612f36565b6000846001600160a01b031663355274ea6040518163ffffffff1660e01b815260040160206040518083038186803b158015611ae857600080fd5b505afa158015611afc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b20919061294e565b90506000611b4a629896806105f586608001516105f5633b9aca008a61216c90919063ffffffff16565b90506000866001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611b8757600080fd5b505afa158015611b9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bbf919061294e565b905082611bcc8284612147565b1115611bea5760405162461bcd60e51b815260040161036590612fc8565b60a0850151611bf99087612147565b6001600160a01b0380891660009081526005602081905260409091200191909155610180860151166323b872dd611c2e61222a565b30896040518463ffffffff1660e01b8152600401611c4e939291906129af565b602060405180830381600087803b158015611c6857600080fd5b505af1158015611c7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ca0919061292e565b611ca957600080fd5b604080516001808252818301909252606091602080830190803683370190505090508281600081518110611cd957fe5b6020908102919091010152604080516001808252818301909252606091816020016020820280368337019050509050611d1061222a565b81600081518110611d1d57fe5b6001600160a01b0392831660209182029290920101526040516307233fbf60e51b8152908a169063e467f7e090611d5a9084908690600401612a0d565b602060405180830381600087803b158015611d7457600080fd5b505af1158015611d88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dac919061292e565b611db557600080fd5b6001600160a01b0389166000908152600160205260408120611e1a918a9190611ddc61222a565b6001600160a01b03908116825260208083019390935260409182016000908120918f168152600684528281205461ffff168152925290205490612147565b6001600160a01b038a16600090815260016020526040812090611e3b61222a565b6001600160a01b03908116825260208083019390935260409182016000908120918e16808252600685528382205461ffff16825291845282812094909455835260039091528120611e9191869190611ddc61222a565b6001600160a01b038a16600090815260036020526040812090611eb261222a565b6001600160a01b03908116825260208083019390935260409182016000908120918e1680825260068552838220805461ffff9081168452938652848320969096558152600284528281208b825284528281209454909116815292909152902054611f1c9089612147565b6001600160a01b038a1660008181526002602090815260408083208b84528252808320938352600682528083205461ffff1683529290522055611f5d61222a565b6001600160a01b0316896001600160a01b03167f214399217b44b0f0f93b5ba58868c778310925962e91255cf7312f52e39f8e1c8961018001518b88604051611fa8939291906129ec565b60405180910390a3505050505050505050565b6001600160a01b0380831660008181526005602090815260408083206004908101549083528184209587168452948252808320938352600682528083205461ffff168352929052908120549091612019916064916105f5919061216c565b9392505050565b6001600160a01b038116600090815260056020526040902060038101544211801561206057506006810154600582015461205991612147565b81600b0154115b61207c5760405162461bcd60e51b815260040161036590612c0c565b61208d8261208861222a565b61222e565b5050565b61209961222a565b6000546001600160a01b039081169116146120c65760405162461bcd60e51b815260040161036590612f01565b6001600160a01b0381166120ec5760405162461bcd60e51b815260040161036590612b8f565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828201838110156120195760405162461bcd60e51b815260040161036590612bd5565b60008261217b57506000610529565b8282028284828161218857fe5b04146120195760405162461bcd60e51b815260040161036590612e79565b600061201983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612526565b600061201983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061255d565b3390565b600854604051631648d99360e31b81526000916001600160a01b03169063b246cc989061225f908590600401612981565b60206040518083038186803b15801561227757600080fd5b505afa15801561228b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122af919061294e565b6001600160a01b03808516600081815260036020908152604080832094881680845294825280832084845260068352818420805461ffff908116808752838652848720548888526001875285882099885298865284872090875285528386208054908790558254821687529285528386208690559585526002845282852088865284528285209054909516845293909152902054929350909161235290826121e8565b6001600160a01b03861660008181526002602090815260408083208884528252808320848452600683528184205461ffff168452909152908190209290925590516301cd910960e51b81526339b22120906123b390879086906004016129d3565b602060405180830381600087803b1580156123cd57600080fd5b505af11580156123e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612405919061292e565b61240e57600080fd5b6001600160a01b0380861660009081526005602052604090819020600c0154905163a9059cbb60e01b815291169063a9059cbb9061245290879085906004016129d3565b602060405180830381600087803b15801561246c57600080fd5b505af1158015612480573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a4919061292e565b6124ad57600080fd5b6001600160a01b038516600090815260056020819052604090912001546124d490826121e8565b6001600160a01b038616600081815260056020819052604091829020019290925590517fbfed30d9eb2d70c87ac13dffb355266c8508938ab8c9492dbd984b148ccfe8a3906114ad90879085906129d3565b600081836125475760405162461bcd60e51b81526004016103659190612a9b565b50600083858161255357fe5b0495945050505050565b600081848411156125815760405162461bcd60e51b81526004016103659190612a9b565b505050900390565b60405180610220016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000151581525090565b80356001600160a01b038116811461052957600080fd5b600082601f830112612651578081fd5b813561266461265f826132a2565b61327b565b81815291506020808301908481018184028601820187101561268557600080fd5b60005b848110156126ac5761269a888361262a565b84529282019290820190600101612688565b505050505092915050565b6000602082840312156126c8578081fd5b612019838361262a565b600080604083850312156126e4578081fd5b6126ee848461262a565b91506126fd846020850161262a565b90509250929050565b60008060408385031215612718578182fd5b612722848461262a565b9150602083013567ffffffffffffffff81111561273d578182fd5b61274985828601612641565b9150509250929050565b600080600060608486031215612767578081fd5b8335612772816132c2565b925060208481013567ffffffffffffffff8082111561278f578384fd5b61279b88838901612641565b945060408701359150808211156127b0578384fd5b508501601f810187136127c1578283fd5b80356127cf61265f826132a2565b81815283810190838501858402850186018b10156127eb578687fd5b8694505b8385101561280d5780358352600194909401939185019185016127ef565b5080955050505050509250925092565b6000808284036101c0811215612831578283fd5b833561283c816132c2565b92506101a0601f198201811315612851578283fd5b61285a8161327b565b91506020850135825260408501356020830152606085013560408301526080850135606083015260a0850135608083015260c085013560a083015260e085013560c08301526101008086013560e0840152610120808701358285015261014091506128c78883890161262a565b908401526101606128da8888830161262a565b8285015261018091506128ef8883890161262a565b90840152940135938101939093525092909150565b60008060408385031215612916578182fd5b612920848461262a565b946020939093013593505050565b60006020828403121561293f578081fd5b81518015158114612019578182fd5b60006020828403121561295f578081fd5b5051919050565b815260200190565b6001600160a01b03169052565b15159052565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039390931683526020830191909152604082015260600190565b604080825283519082018190526000906020906060840190828701845b82811015612a4d57612a3d84835161296e565b9284019290840190600101612a2a565b50505083810382850152808551612a6481846131f2565b91508387019250845b81811015612a8e57612a80838551612966565b938501939250600101612a6d565b5090979650505050505050565b6000602080835283518082850152825b81811015612ac757858101830151858201604001528201612aab565b81811115612ad85783604083870101525b50601f01601f1916929092016040019392505050565b60208082526035908201527f496e697469616c496e766573746d656e743a2053746172742074696d65206d756040820152747374206265206265666f726520656e642074696d6560581b606082015260800190565b6020808252602c908201527f496e697469616c496e766573746d656e743a2043616e206f6e6c79206d696e7460408201526b20647572696e672073616c6560a01b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252602f908201527f496e697469616c496e766573746d656e743a20536f667420636170206d75737460408201526e081b9bdd081899481c995858da1959608a1b606082015260800190565b60208082526036908201527f496e697469616c496e766573746d656e743a20496e766573746d656e74206d75604082015275737420737461727420696e207468652066757475726560501b606082015260800190565b60208082526044908201527f496e697469616c496e766573746d656e743a20596f75206e65656420746f207760408201527f61697420666f7220696e697469616c20696e766573746d656e7420746f2066696060820152630dcd2e6d60e31b608082015260a00190565b60208082526027908201527f496e697469616c496e766573746d656e743a20596f75206e65656420746f2062604082015266329030b236b4b760c91b606082015260800190565b60208082526037908201527f496e697469616c20696e766573746d656e743a204f66666572696e6720616c7260408201527f656164792073657420616e642069742073746172746564000000000000000000606082015260800190565b60208082526037908201527f496e697469616c496e766573746d656e743a20596f75206e65656420746f206860408201527f6176652073797374656d2061646d696e20726967687473000000000000000000606082015260800190565b60208082526038908201527f496e697469616c496e766573746d656e743a20596f75206e65656420746f206360408201527f6f6c6c65637420696e766573746d656e74732066697273740000000000000000606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526027908201527f496e697469616c496e766573746d656e743a20536f667420636170206e6f74206040820152661c995858da195960ca1b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602a908201527f496e697469616c496e766573746d656e743a20596f75206e65656420746f20696040820152696e76657374206c65737360b01b606082015260800190565b60208082526028908201527f496e697469616c496e766573746d656e743a20536f66742063617020736574206040820152670e8dede40d0d2ced60c31b606082015260800190565b60208082526032908201527f496e697469616c496e766573746d656e743a20546f6f206d616e7920746f6b656040820152711b9cc81ddbdd5b19081899481b5a5b9d195960721b606082015260800190565b6020808252602a908201527f496e697469616c496e766573746d656e743a20596f75206e65656420746f20696040820152696e76657374206d6f726560b01b606082015260800190565b60208082526038908201527f496e697469616c20696e766573746d656e743a20596f75206e65656420746f2060408201527f62652061626c6520746f20656469742070726f70657274790000000000000000606082015260800190565b60208082526029908201527f496e697469616c496e766573746d656e743a204f66666572696e67206973206e6040820152686f742061637469766560b81b606082015260800190565b600061022082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e0830152610100808401518184015250610120808401518184015250610140808401518184015250610160808401518184015250610180808401516131a08285018261296e565b50506101a0808401516131b58285018261296e565b50506101c0808401516131ca8285018261296e565b50506101e08381015190830152610200808401516131ea8285018261297b565b505092915050565b90815260200190565b918252602082015260400190565b9d8e5260208e019c909c5260408d019a909a5260608c019890985260808b019690965260a08a019490945260c089019290925260e08801526101008701526101208601526001600160a01b03908116610140860152908116610160850152166101808301526101a08201526101c00190565b60405181810167ffffffffffffffff8111828210171561329a57600080fd5b604052919050565b600067ffffffffffffffff8211156132b8578081fd5b5060209081020190565b6001600160a01b03811681146132d757600080fd5b5056fea26469706673582212208d3b192464f063698685395204ebd4fb425f5005036ccbe7a9334501f67a25d064736f6c634300060c00330000000000000000000000008c2a858fe7b2bf155247c7f528c6ca7b186197b500000000000000000000000013344d0cb96b17df81c4171ce47e14ff6c1975f7
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061012c5760003560e01c8063825e2645116100ad578063adc6816411610071578063adc681641461026a578063b9b8c2461461027d578063ca783e6514610290578063e22cdcdc146102a3578063f2fde38b146102b65761012c565b8063825e2645146102095780638da5cb5b1461021c57806396d01885146102315780639deb1d3a14610244578063a77fac44146102575761012c565b80634781f4f6116100f45780634781f4f6146101a8578063715018a6146101bb578063735f9f01146101c35780637e4387f6146101e357806381624cac146101f65761012c565b806305c873bd1461013157806314215dd1146101465780631f375b1e1461016f578063380c1a971461018257806342cc653214610195575b600080fd5b61014461013f3660046126d2565b6102c9565b005b6101596101543660046126b7565b6104b6565b60405161016691906131f2565b60405180910390f35b61014461017d3660046126b7565b61052f565b610144610190366004612753565b6107c3565b6101596101a33660046126d2565b610a6e565b6101596101b63660046126b7565b610b37565b610144610b72565b6101d66101d13660046126b7565b610bf1565b604051610166919061310a565b6101446101f13660046126b7565b610cde565b610144610204366004612706565b610dd3565b61014461021736600461281d565b610f11565b6102246114bc565b6040516101669190612981565b61014461023f3660046126b7565b6114cb565b6101446102523660046126b7565b611522565b6101596102653660046126d2565b611579565b610144610278366004612706565b6115b9565b61014461028b366004612904565b611882565b61015961029e3660046126d2565b611fbb565b6101446102b13660046126b7565b612020565b6101446102c43660046126b7565b612091565b60075460405163524ecd7960e11b81526001600160a01b039091169063a49d9af2906102f9903390600401612981565b60206040518083038186803b15801561031157600080fd5b505afa158015610325573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610349919061292e565b61036e5760405162461bcd60e51b815260040161036590612dbf565b60405180910390fd5b6001600160a01b0382166000908152600560205260409020600381015442108015906103af5750600681015460058201546103a891612147565b81600b0154115b6103cb5760405162461bcd60e51b815260040161036590612c0c565b6001600160a01b03808416600090815260056020819052604091829020600c015490840154915163a9059cbb60e01b815292169163a9059cbb91610414918691906004016129d3565b602060405180830381600087803b15801561042e57600080fd5b505af1158015610442573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610466919061292e565b61046f57600080fd5b50506001600160a01b0316600090815260056020818152604080842092830184905560069283018490559190529020805461ffff8082166001011661ffff19909116179055565b6000816001600160a01b031663355274ea6040518163ffffffff1660e01b815260040160206040518083038186803b1580156104f157600080fd5b505afa158015610505573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610529919061294e565b92915050565b6001600160a01b0381166000908152600560208190526040909120600681015491810154909161055f9190612147565b81600b015411156105825760405162461bcd60e51b815260040161036590612eba565b42816003015410806105a35750610598826104b6565b6105a183610b37565b145b6105bf5760405162461bcd60e51b815260040161036590612cb1565b60058101805460009182905560108301805460ff19166001179055600f8301549091906105fb90612710906105f590859061216c565b906121a6565b905061060782826121e8565b6001600160a01b038086166000908152600660209081526040808320805461ffff8082166001011661ffff19909116179055600590915290819020600c0154600d870154915163a9059cbb60e01b815293955082169263a9059cbb9261067392169086906004016129d3565b602060405180830381600087803b15801561068d57600080fd5b505af11580156106a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c5919061292e565b6106ce57600080fd5b801561077a576001600160a01b0380851660009081526005602052604090819020600c0154600e860154915163a9059cbb60e01b81529083169263a9059cbb9261071f9291169085906004016129d3565b602060405180830381600087803b15801561073957600080fd5b505af115801561074d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610771919061292e565b61077a57600080fd5b836001600160a01b03167f067118898b981e1259ac5a633ef5423387a2ebae70ac4bfc051b50ba982b7bf183836040516107b59291906131fb565b60405180910390a250505050565b6007546001600160a01b0316639af235536107dc61222a565b856040518363ffffffff1660e01b81526004016107fa929190612995565b60206040518083038186803b15801561081257600080fd5b505afa158015610826573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084a919061292e565b6108665760405162461bcd60e51b815260040161036590612d1b565b6001600160a01b038316600090815260056020526040902080544210801590610893575080600301544211155b6108af5760405162461bcd60e51b815260040161036590612b43565b6040516307233fbf60e51b81526001600160a01b0385169063e467f7e0906108dd9086908690600401612a0d565b602060405180830381600087803b1580156108f757600080fd5b505af115801561090b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092f919061292e565b61093857600080fd5b60005b8351811015610a6757600084828151811061095257fe5b602002602001015190506109b884838151811061096b57fe5b6020908102919091018101516001600160a01b03808a1660008181526004855260408082209388168252928552828120918152600685528281205461ffff16815293529091205490612147565b6001600160a01b0380881660008181526004602081815260408084209588168452948152848320938352600681528483205461ffff1683529290925291822092909255908401548551610a2f916064916105f59190899088908110610a1957fe5b602002602001015161216c90919063ffffffff16565b6006850154909150610a419082612147565b6001600160a01b038816600090815260056020526040902060060155505060010161093b565b5050505050565b600854604051631648d99360e31b815260009182916001600160a01b039091169063b246cc9890610aa3908690600401612981565b60206040518083038186803b158015610abb57600080fd5b505afa158015610acf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af3919061294e565b6001600160a01b0385166000818152600260209081526040808320948352938152838220928252600681528382205461ffff16825291909152205491505092915050565b6000816001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156104f157600080fd5b610b7a61222a565b6000546001600160a01b03908116911614610ba75760405162461bcd60e51b815260040161036590612f01565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610bf9612589565b506001600160a01b039081166000908152600560208181526040928390208351610220810185528154815260018201549281019290925260028101549382019390935260038301546060820152600483015460808201529082015460a0820152600682015460c0820152600782015460e082015260088201546101008201526009820154610120820152600a820154610140820152600b820154610160820152600c8201548316610180820152600d82015483166101a0820152600e8201549092166101c0830152600f8101546101e08301526010015460ff16151561020082015290565b60075460405163524ecd7960e11b81526001600160a01b039091169063a49d9af290610d0e903390600401612981565b60206040518083038186803b158015610d2657600080fd5b505afa158015610d3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5e919061292e565b610d7a5760405162461bcd60e51b815260040161036590612dbf565b6001600160a01b038116600081815260056020526040808220428082556001820181905560028201819055600390910155517f9b2754f8e10a23215a3fcc82107d046c5566aaa83664bef1dbc044ef112a7c769190a250565b6007546040516329fd1a4160e21b8152339184916001600160a01b039091169063a7f4690490610e099085908590600401612995565b60206040518083038186803b158015610e2157600080fd5b505afa158015610e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e59919061292e565b610e755760405162461bcd60e51b815260040161036590613064565b6001600160a01b038416600090815260056020526040902060038101544210801590610eb6575060068101546005820154610eaf91612147565b81600b0154115b610ed25760405162461bcd60e51b815260040161036590612c0c565b60005b8451811015610f09576000858281518110610eec57fe5b60200260200101519050610f00878261222e565b50600101610ed5565b505050505050565b610f1961222a565b6007546040516329fd1a4160e21b815284916001600160a01b03169063a7f4690490610f4b9085908590600401612995565b60206040518083038186803b158015610f6357600080fd5b505afa158015610f77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9b919061292e565b610fb75760405162461bcd60e51b815260040161036590613064565b610fd2610fc385610b37565b610fcc866104b6565b906121e8565b610ffd629896806105f586606001516105f5633b9aca0089610100015161216c90919063ffffffff16565b111561101b5760405162461bcd60e51b815260040161036590612f80565b825142111561103c5760405162461bcd60e51b815260040161036590612c5b565b602083015183511180159061105e5750826040015183602001516203f4800111155b61107a5760405162461bcd60e51b815260040161036590612aee565b611082612589565b506001600160a01b03808516600090815260056020818152604092839020835161022081018552815480825260018301549382019390935260028201549481019490945260038101546060850152600481015460808501529182015460a0840152600682015460c0840152600782015460e084015260088201546101008401526009820154610120840152600a820154610140840152600b820154610160840152600c8201548416610180840152600d82015484166101a0840152600e8201549093166101c0830152600f8101546101e08301526010015460ff1615156102008201529015806111725750805142105b806111805750428160600151105b8061118d57508061020001515b6111a95760405162461bcd60e51b815260040161036590612d62565b60a08101511580156111bd575060c0810151155b806111ca57508061020001515b6111e65760405162461bcd60e51b815260040161036590612e1c565b604051806102200160405280856000015181526020018560200151815260200185602001516203f48001815260200185604001518152602001856060015181526020016000815260200160008152602001856080015181526020018560a0015181526020018560c0015181526020018560e00151815260200185610100015181526020018561012001516001600160a01b031681526020018561014001516001600160a01b031681526020018561016001516001600160a01b0316815260200185610180015181526020016000151581525090508060056000876001600160a01b03166001600160a01b03168152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b015561018082015181600c0160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506101a082015181600d0160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506101c082015181600e0160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506101e082015181600f01556102008201518160100160006101000a81548160ff021916908315150217905550905050846001600160a01b03167f43d458af73054152f59e8170fb773bc9f9477d35ff08a648edc71abff5ac1f0882608001518360e00151846101000151856101200151866101400151876101600151886000015189602001518a600001516203f480018b606001518c61018001518d6101a001518e6101c001518f6101e001516040516114ad9e9d9c9b9a99989796959493929190613209565b60405180910390a25050505050565b6000546001600160a01b031690565b6114d361222a565b6000546001600160a01b039081169116146115005760405162461bcd60e51b815260040161036590612f01565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b61152a61222a565b6000546001600160a01b039081169116146115575760405162461bcd60e51b815260040161036590612f01565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b039182166000818152600160209081526040808320949095168252928352838120918152600683528381205461ffff1681529152205490565b6007546040516329fd1a4160e21b8152339184916001600160a01b039091169063a7f46904906115ef9085908590600401612995565b60206040518083038186803b15801561160757600080fd5b505afa15801561161b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163f919061292e565b61165b5760405162461bcd60e51b815260040161036590613064565b6001600160a01b03841660009081526005602052604090206003810154421080159061169c57506006810154600582015461169591612147565b81600b0154115b6116b85760405162461bcd60e51b815260040161036590612c0c565b60005b8451811015610f095760008582815181106116d257fe5b6020908102919091018101516001600160a01b03808a166000818152600480865260408083209486168352938652838220928252600686528382205461ffff1682529190945290832054908601549193509190611737906064906105f590859061216c565b6001600160a01b03808b166000818152600460208181526040808420958a168452948152848320848452600682528584205461ffff16845290528382209190915591516301cd910960e51b8152929350916339b221209161179c9187918791016129d3565b602060405180830381600087803b1580156117b657600080fd5b505af11580156117ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ee919061292e565b6117f757600080fd5b6001600160a01b03891660009081526005602052604090206006015461181d90826121e8565b6001600160a01b038a16600081815260056020526040908190206006019290925590517fb953fce83a28d4617eacb6af781c4df0f51088186cc78d2fffa773f1cd92c9029061186f90869085906129d3565b60405180910390a25050506001016116bb565b61188a612589565b506001600160a01b0380831660009081526005602081815260408084208151610220810183528154815260018201549381019390935260028101549183019190915260038101546060830152600481015460808301529182015460a0820152600682015460c0820152600782015460e08201526008808301546101008301526009830154610120830152600a830154610140830152600b830154610160830152600c8301548516610180830152600d83015485166101a0830152600e83015485166101c0830152600f8301546101e083015260109092015460ff161515610200820152905490921663b246cc9861197f61222a565b6040518263ffffffff1660e01b815260040161199b9190612981565b60206040518083038186803b1580156119b357600080fd5b505afa1580156119c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119eb919061294e565b905042826040015111158015611a05575042826060015110155b611a215760405162461bcd60e51b8152600401610365906130c1565b816101400151831015611a465760405162461bcd60e51b81526004016103659061301a565b6101208201516001600160a01b03851660008181526002602090815260408083208684528252808320938352600682528083205461ffff1683529290522054611a8f9085612147565b1115611aad5760405162461bcd60e51b815260040161036590612f36565b6000846001600160a01b031663355274ea6040518163ffffffff1660e01b815260040160206040518083038186803b158015611ae857600080fd5b505afa158015611afc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b20919061294e565b90506000611b4a629896806105f586608001516105f5633b9aca008a61216c90919063ffffffff16565b90506000866001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611b8757600080fd5b505afa158015611b9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bbf919061294e565b905082611bcc8284612147565b1115611bea5760405162461bcd60e51b815260040161036590612fc8565b60a0850151611bf99087612147565b6001600160a01b0380891660009081526005602081905260409091200191909155610180860151166323b872dd611c2e61222a565b30896040518463ffffffff1660e01b8152600401611c4e939291906129af565b602060405180830381600087803b158015611c6857600080fd5b505af1158015611c7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ca0919061292e565b611ca957600080fd5b604080516001808252818301909252606091602080830190803683370190505090508281600081518110611cd957fe5b6020908102919091010152604080516001808252818301909252606091816020016020820280368337019050509050611d1061222a565b81600081518110611d1d57fe5b6001600160a01b0392831660209182029290920101526040516307233fbf60e51b8152908a169063e467f7e090611d5a9084908690600401612a0d565b602060405180830381600087803b158015611d7457600080fd5b505af1158015611d88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dac919061292e565b611db557600080fd5b6001600160a01b0389166000908152600160205260408120611e1a918a9190611ddc61222a565b6001600160a01b03908116825260208083019390935260409182016000908120918f168152600684528281205461ffff168152925290205490612147565b6001600160a01b038a16600090815260016020526040812090611e3b61222a565b6001600160a01b03908116825260208083019390935260409182016000908120918e16808252600685528382205461ffff16825291845282812094909455835260039091528120611e9191869190611ddc61222a565b6001600160a01b038a16600090815260036020526040812090611eb261222a565b6001600160a01b03908116825260208083019390935260409182016000908120918e1680825260068552838220805461ffff9081168452938652848320969096558152600284528281208b825284528281209454909116815292909152902054611f1c9089612147565b6001600160a01b038a1660008181526002602090815260408083208b84528252808320938352600682528083205461ffff1683529290522055611f5d61222a565b6001600160a01b0316896001600160a01b03167f214399217b44b0f0f93b5ba58868c778310925962e91255cf7312f52e39f8e1c8961018001518b88604051611fa8939291906129ec565b60405180910390a3505050505050505050565b6001600160a01b0380831660008181526005602090815260408083206004908101549083528184209587168452948252808320938352600682528083205461ffff168352929052908120549091612019916064916105f5919061216c565b9392505050565b6001600160a01b038116600090815260056020526040902060038101544211801561206057506006810154600582015461205991612147565b81600b0154115b61207c5760405162461bcd60e51b815260040161036590612c0c565b61208d8261208861222a565b61222e565b5050565b61209961222a565b6000546001600160a01b039081169116146120c65760405162461bcd60e51b815260040161036590612f01565b6001600160a01b0381166120ec5760405162461bcd60e51b815260040161036590612b8f565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828201838110156120195760405162461bcd60e51b815260040161036590612bd5565b60008261217b57506000610529565b8282028284828161218857fe5b04146120195760405162461bcd60e51b815260040161036590612e79565b600061201983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612526565b600061201983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061255d565b3390565b600854604051631648d99360e31b81526000916001600160a01b03169063b246cc989061225f908590600401612981565b60206040518083038186803b15801561227757600080fd5b505afa15801561228b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122af919061294e565b6001600160a01b03808516600081815260036020908152604080832094881680845294825280832084845260068352818420805461ffff908116808752838652848720548888526001875285882099885298865284872090875285528386208054908790558254821687529285528386208690559585526002845282852088865284528285209054909516845293909152902054929350909161235290826121e8565b6001600160a01b03861660008181526002602090815260408083208884528252808320848452600683528184205461ffff168452909152908190209290925590516301cd910960e51b81526339b22120906123b390879086906004016129d3565b602060405180830381600087803b1580156123cd57600080fd5b505af11580156123e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612405919061292e565b61240e57600080fd5b6001600160a01b0380861660009081526005602052604090819020600c0154905163a9059cbb60e01b815291169063a9059cbb9061245290879085906004016129d3565b602060405180830381600087803b15801561246c57600080fd5b505af1158015612480573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a4919061292e565b6124ad57600080fd5b6001600160a01b038516600090815260056020819052604090912001546124d490826121e8565b6001600160a01b038616600081815260056020819052604091829020019290925590517fbfed30d9eb2d70c87ac13dffb355266c8508938ab8c9492dbd984b148ccfe8a3906114ad90879085906129d3565b600081836125475760405162461bcd60e51b81526004016103659190612a9b565b50600083858161255357fe5b0495945050505050565b600081848411156125815760405162461bcd60e51b81526004016103659190612a9b565b505050900390565b60405180610220016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000151581525090565b80356001600160a01b038116811461052957600080fd5b600082601f830112612651578081fd5b813561266461265f826132a2565b61327b565b81815291506020808301908481018184028601820187101561268557600080fd5b60005b848110156126ac5761269a888361262a565b84529282019290820190600101612688565b505050505092915050565b6000602082840312156126c8578081fd5b612019838361262a565b600080604083850312156126e4578081fd5b6126ee848461262a565b91506126fd846020850161262a565b90509250929050565b60008060408385031215612718578182fd5b612722848461262a565b9150602083013567ffffffffffffffff81111561273d578182fd5b61274985828601612641565b9150509250929050565b600080600060608486031215612767578081fd5b8335612772816132c2565b925060208481013567ffffffffffffffff8082111561278f578384fd5b61279b88838901612641565b945060408701359150808211156127b0578384fd5b508501601f810187136127c1578283fd5b80356127cf61265f826132a2565b81815283810190838501858402850186018b10156127eb578687fd5b8694505b8385101561280d5780358352600194909401939185019185016127ef565b5080955050505050509250925092565b6000808284036101c0811215612831578283fd5b833561283c816132c2565b92506101a0601f198201811315612851578283fd5b61285a8161327b565b91506020850135825260408501356020830152606085013560408301526080850135606083015260a0850135608083015260c085013560a083015260e085013560c08301526101008086013560e0840152610120808701358285015261014091506128c78883890161262a565b908401526101606128da8888830161262a565b8285015261018091506128ef8883890161262a565b90840152940135938101939093525092909150565b60008060408385031215612916578182fd5b612920848461262a565b946020939093013593505050565b60006020828403121561293f578081fd5b81518015158114612019578182fd5b60006020828403121561295f578081fd5b5051919050565b815260200190565b6001600160a01b03169052565b15159052565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039390931683526020830191909152604082015260600190565b604080825283519082018190526000906020906060840190828701845b82811015612a4d57612a3d84835161296e565b9284019290840190600101612a2a565b50505083810382850152808551612a6481846131f2565b91508387019250845b81811015612a8e57612a80838551612966565b938501939250600101612a6d565b5090979650505050505050565b6000602080835283518082850152825b81811015612ac757858101830151858201604001528201612aab565b81811115612ad85783604083870101525b50601f01601f1916929092016040019392505050565b60208082526035908201527f496e697469616c496e766573746d656e743a2053746172742074696d65206d756040820152747374206265206265666f726520656e642074696d6560581b606082015260800190565b6020808252602c908201527f496e697469616c496e766573746d656e743a2043616e206f6e6c79206d696e7460408201526b20647572696e672073616c6560a01b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252602f908201527f496e697469616c496e766573746d656e743a20536f667420636170206d75737460408201526e081b9bdd081899481c995858da1959608a1b606082015260800190565b60208082526036908201527f496e697469616c496e766573746d656e743a20496e766573746d656e74206d75604082015275737420737461727420696e207468652066757475726560501b606082015260800190565b60208082526044908201527f496e697469616c496e766573746d656e743a20596f75206e65656420746f207760408201527f61697420666f7220696e697469616c20696e766573746d656e7420746f2066696060820152630dcd2e6d60e31b608082015260a00190565b60208082526027908201527f496e697469616c496e766573746d656e743a20596f75206e65656420746f2062604082015266329030b236b4b760c91b606082015260800190565b60208082526037908201527f496e697469616c20696e766573746d656e743a204f66666572696e6720616c7260408201527f656164792073657420616e642069742073746172746564000000000000000000606082015260800190565b60208082526037908201527f496e697469616c496e766573746d656e743a20596f75206e65656420746f206860408201527f6176652073797374656d2061646d696e20726967687473000000000000000000606082015260800190565b60208082526038908201527f496e697469616c496e766573746d656e743a20596f75206e65656420746f206360408201527f6f6c6c65637420696e766573746d656e74732066697273740000000000000000606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526027908201527f496e697469616c496e766573746d656e743a20536f667420636170206e6f74206040820152661c995858da195960ca1b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602a908201527f496e697469616c496e766573746d656e743a20596f75206e65656420746f20696040820152696e76657374206c65737360b01b606082015260800190565b60208082526028908201527f496e697469616c496e766573746d656e743a20536f66742063617020736574206040820152670e8dede40d0d2ced60c31b606082015260800190565b60208082526032908201527f496e697469616c496e766573746d656e743a20546f6f206d616e7920746f6b656040820152711b9cc81ddbdd5b19081899481b5a5b9d195960721b606082015260800190565b6020808252602a908201527f496e697469616c496e766573746d656e743a20596f75206e65656420746f20696040820152696e76657374206d6f726560b01b606082015260800190565b60208082526038908201527f496e697469616c20696e766573746d656e743a20596f75206e65656420746f2060408201527f62652061626c6520746f20656469742070726f70657274790000000000000000606082015260800190565b60208082526029908201527f496e697469616c496e766573746d656e743a204f66666572696e67206973206e6040820152686f742061637469766560b81b606082015260800190565b600061022082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e0830152610100808401518184015250610120808401518184015250610140808401518184015250610160808401518184015250610180808401516131a08285018261296e565b50506101a0808401516131b58285018261296e565b50506101c0808401516131ca8285018261296e565b50506101e08381015190830152610200808401516131ea8285018261297b565b505092915050565b90815260200190565b918252602082015260400190565b9d8e5260208e019c909c5260408d019a909a5260608c019890985260808b019690965260a08a019490945260c089019290925260e08801526101008701526101208601526001600160a01b03908116610140860152908116610160850152166101808301526101a08201526101c00190565b60405181810167ffffffffffffffff8111828210171561329a57600080fd5b604052919050565b600067ffffffffffffffff8211156132b8578081fd5b5060209081020190565b6001600160a01b03811681146132d757600080fd5b5056fea26469706673582212208d3b192464f063698685395204ebd4fb425f5005036ccbe7a9334501f67a25d064736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000008c2a858fe7b2bf155247c7f528c6ca7b186197b500000000000000000000000013344d0cb96b17df81c4171ce47e14ff6c1975f7
-----Decoded View---------------
Arg [0] : dataProxy (address): 0x8C2A858FE7b2bf155247C7F528c6CA7B186197B5
Arg [1] : users (address): 0x13344D0Cb96b17dF81C4171Ce47E14ff6c1975f7
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000008c2a858fe7b2bf155247c7f528c6ca7b186197b5
Arg [1] : 00000000000000000000000013344d0cb96b17df81c4171ce47e14ff6c1975f7
Deployed Bytecode Sourcemap
1190:17051:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15344:784;;;;;;:::i;:::-;;:::i;:::-;;16496:137;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8632:1102;;;;;;:::i;:::-;;:::i;10004:997::-;;;;;;:::i;:::-;;:::i;17503:290::-;;;;;;:::i;:::-;;:::i;16241:151::-;;;;;;:::i;:::-;;:::i;1684:145:2:-;;;:::i;16757:122:1:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;14663:493::-;;;;;;:::i;:::-;;:::i;13564:513::-;;;;;;:::i;:::-;;:::i;4343:1869::-;;;;;;:::i;:::-;;:::i;1061:77:2:-;;;:::i;:::-;;;;;;;:::i;4089:84:1:-;;;;;;:::i;:::-;;:::i;3983:100::-;;;;;;:::i;:::-;;:::i;17093:193::-;;;;;;:::i;:::-;;:::i;11211:1040::-;;;;;;:::i;:::-;;:::i;6406:2080::-;;;;;;:::i;:::-;;:::i;17999:240::-;;;;;;:::i;:::-;;:::i;14194:350::-;;;;;;:::i;:::-;;:::i;1978:240:2:-;;;;;;:::i;:::-;;:::i;15344:784:1:-;15456:10;;15423:77;;-1:-1:-1;;;15423:77:1;;-1:-1:-1;;;;;15456:10:1;;;;15423:65;;:77;;15489:10;;15423:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15415:145;;;;-1:-1:-1;;;15415:145:1;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;15598:20:1;;15570:25;15598:20;;;:10;:20;;;;;15636:16;;;;15656:15;-1:-1:-1;15636:35:1;;;:113;;-1:-1:-1;15723:25:1;;;;15694:24;;;;:55;;:28;:55::i;:::-;15675:8;:16;;;:74;15636:113;15628:173;;;;-1:-1:-1;;;15628:173:1;;;;;;;:::i;:::-;-1:-1:-1;;;;;15852:20:1;;;;;;;:10;:20;;;;;;;;;:36;;;15907:24;;;;15819:113;;-1:-1:-1;;;15819:113:1;;15852:36;;;15819:79;;:113;;15899:6;;15907:24;15819:113;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15811:122;;;;;;-1:-1:-1;;;;;;;15943:20:1;15982:1;15943:20;;;:10;:20;;;;;;;;:36;;;:40;;;15993:37;;;;:41;;;16082:35;;;;;;;;;;;;:39;16044:77;-1:-1:-1;;16044:77:1;;;;;;15344:784::o;16496:137::-;16552:7;16611:8;-1:-1:-1;;;;;16578:46:1;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16571:55;16496:137;-1:-1:-1;;16496:137:1:o;8632:1102::-;-1:-1:-1;;;;;8723:20:1;;8695:25;8723:20;;;:10;:20;;;;;;;;8810:25;;;;8781:24;;;;8723:20;;8781:55;;:24;:28;:55::i;:::-;8761:8;:16;;;:75;;8753:127;;;;-1:-1:-1;;;8753:127:1;;;;;;;:::i;:::-;8917:15;8898:8;:16;;;:34;:82;;;;8963:17;8971:8;8963:7;:17::i;:::-;8936:23;8950:8;8936:13;:23::i;:::-;:44;8898:82;8890:163;;;;-1:-1:-1;;;8890:163:1;;;;;;;:::i;:::-;9083:24;;;;;9063:17;9117:28;;;;9155;;;:35;;-1:-1:-1;;9155:35:1;-1:-1:-1;9155:35:1;;;9228:12;;;;9083:24;;9063:17;9214:38;;9246:5;;9214:27;;9083:24;;9214:13;:27::i;:::-;:31;;:38::i;:::-;9200:52;-1:-1:-1;9274:18:1;:9;9200:52;9274:13;:18::i;:::-;-1:-1:-1;;;;;9340:35:1;;;;;;;:25;:35;;;;;;;;;;;;;;;:39;9302:77;-1:-1:-1;;9302:77:1;;;;;;9430:10;:20;;;;;;;:36;;;9477:18;;;;9397:110;;-1:-1:-1;;;9397:110:1;;9262:30;;-1:-1:-1;9430:36:1;;;9397:79;;:110;;9477:18;;9262:30;;9397:110;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9389:119;;;;;;9522:7;;9518:154;;-1:-1:-1;;;;;9586:20:1;;;;;;;:10;:20;;;;;;;:36;;;9633:21;;;;9553:107;;-1:-1:-1;;;9553:107:1;;9586:36;;;;9553:79;;:107;;9633:21;;;9656:3;;9553:107;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9545:116;;;;;;9702:8;-1:-1:-1;;;;;9686:41:1;;9712:9;9723:3;9686:41;;;;;;;:::i;:::-;;;;;;;;8632:1102;;;;:::o;10004:997::-;10153:10;;-1:-1:-1;;;;;10153:10:1;10120:64;10185:12;:10;:12::i;:::-;10199:8;10120:88;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10112:140;;;;-1:-1:-1;;;10112:140:1;;;;;;;:::i;:::-;-1:-1:-1;;;;;10290:20:1;;10262:25;10290:20;;;:10;:20;;;;;10328:21;;10353:15;-1:-1:-1;10328:40:1;;;:79;;;10391:8;:16;;;10372:15;:35;;10328:79;10320:136;;;;-1:-1:-1;;;10320:136:1;;;;;;;:::i;:::-;10474:65;;-1:-1:-1;;;10474:65:1;;-1:-1:-1;;;;;10474:47:1;;;;;:65;;10522:7;;10531;;10474:65;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10466:74;;;;;;10555:9;10550:445;10574:7;:14;10570:1;:18;10550:445;;;10609:14;10626:7;10634:1;10626:10;;;;;;;;;;;;;;10609:27;;10726:89;10804:7;10812:1;10804:10;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10726:28:1;;;;;;;:18;:28;;;;;;:36;;;;;;;;;;;10763:35;;;:25;:35;;;;;;;;10726:73;;;;;;;;;:77;:89::i;:::-;-1:-1:-1;;;;;10650:28:1;;;;;;;:18;:28;;;;;;;;:36;;;;;;;;;;;10687:35;;;:25;:35;;;;;;;;10650:73;;;;;;;;;:165;;;;10865:14;;;;10850:10;;:39;;10885:3;;10850:30;;10865:14;10850:7;;10858:1;;10850:10;;;;;;;;;;;;:14;;:30;;;;:::i;:39::-;10943:25;;;;10829:60;;-1:-1:-1;10943:41:1;;10829:60;10943:29;:41::i;:::-;-1:-1:-1;;;;;10903:20:1;;;;;;:10;:20;;;;;:37;;:81;-1:-1:-1;;10590:3:1;;10550:445;;;;10004:997;;;;:::o;17503:290::-;17658:6;;17625:71;;-1:-1:-1;;;17625:71:1;;17591:7;;;;-1:-1:-1;;;;;17658:6:1;;;;17625:63;;:71;;17689:6;;17625:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;17713:30:1;;;;;;:20;:30;;;;;;;;:36;;;;;;;;;17750:35;;;:25;:35;;;;;;;;17713:73;;;;;;;;;-1:-1:-1;;17503:290:1;;;;:::o;16241:151::-;16303:7;16362:8;-1:-1:-1;;;;;16329:54:1;;:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1684:145:2;1275:12;:10;:12::i;:::-;1265:6;;-1:-1:-1;;;;;1265:6:2;;;:22;;;1257:67;;;;-1:-1:-1;;;1257:67:2;;;;;;;:::i;:::-;1790:1:::1;1774:6:::0;;1753:40:::1;::::0;-1:-1:-1;;;;;1774:6:2;;::::1;::::0;1753:40:::1;::::0;1790:1;;1753:40:::1;1820:1;1803:19:::0;;-1:-1:-1;;;;;;1803:19:2::1;::::0;;1684:145::o;16757:122:1:-;16818:15;;:::i;:::-;-1:-1:-1;;;;;;16852:20:1;;;;;;;:10;:20;;;;;;;;;16845:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16757:122::o;14663:493::-;14763:10;;14730:77;;-1:-1:-1;;;14730:77:1;;-1:-1:-1;;;;;14763:10:1;;;;14730:65;;:77;;14796:10;;14730:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14722:145;;;;-1:-1:-1;;;14722:145:1;;;;;;;:::i;:::-;-1:-1:-1;;;;;14877:20:1;;;;;;:10;:20;;;;;;14913:15;14877:51;;;14938:31;;;:49;;;14997:30;;;:48;;;15055:28;;;;:46;15116:33;;;14877:20;15116:33;14663:493;:::o;13564:513::-;2900:10;;2867:77;;-1:-1:-1;;;2867:77:1;;13655:10;;13667:8;;-1:-1:-1;;;;;2900:10:1;;;;2867:60;;:77;;13655:10;;13667:8;;2867:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2859:146;;;;-1:-1:-1;;;2859:146:1;;;;;;;:::i;:::-;-1:-1:-1;;;;;13715:20:1;::::1;13687:25;13715:20:::0;;;:10:::1;:20;::::0;;;;13753:16:::1;::::0;::::1;::::0;13773:15:::1;-1:-1:-1::0;13753:35:1;::::1;::::0;:113:::1;;-1:-1:-1::0;13840:25:1::1;::::0;::::1;::::0;13811:24:::1;::::0;::::1;::::0;:55:::1;::::0;:28:::1;:55::i;:::-;13792:8;:16;;;:74;13753:113;13745:173;;;;-1:-1:-1::0;;;13745:173:1::1;;;;;;;:::i;:::-;13933:6;13928:143;13949:7;:14;13945:1;:18;13928:143;;;13984:14;14001:7;14009:1;14001:10;;;;;;;;;;;;;;13984:27;;14025:35;14043:8;14053:6;14025:17;:35::i;:::-;-1:-1:-1::0;13965:3:1::1;;13928:143;;;;3015:1;13564:513:::0;;;;:::o;4343:1869::-;4442:12;:10;:12::i;:::-;2900:10;;2867:77;;-1:-1:-1;;;2867:77:1;;4456:8;;-1:-1:-1;;;;;2900:10:1;;2867:60;;:77;;2928:5;;4456:8;;2867:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2859:146;;;;-1:-1:-1;;;2859:146:1;;;;;;;:::i;:::-;4556:46:::1;4578:23;4592:8;4578:13;:23::i;:::-;4556:17;4564:8;4556:7;:17::i;:::-;:21:::0;::::1;:46::i;:::-;4484:68;4544:7;4484:55;4521:11;:17;;;4484:32;4508:7;4484:11;:19;;;:23;;:32;;;;:::i;:68::-;:118;;4476:171;;;;-1:-1:-1::0;;;4476:171:1::1;;;;;;;:::i;:::-;4665:24:::0;;4693:15:::1;-1:-1:-1::0;4665:43:1::1;4657:110;;;;-1:-1:-1::0;;;4657:110:1::1;;;;;;;:::i;:::-;4813:22;::::0;::::1;::::0;4785:24;;:50:::1;::::0;::::1;::::0;:110:::1;;;4876:11;:19;;;4840:11;:22;;;4865:6;4840:31;4839:56;;4785:110;4777:176;;;;-1:-1:-1::0;;;4777:176:1::1;;;;;;;:::i;:::-;4963:24;;:::i;:::-;-1:-1:-1::0;;;;;;4990:20:1;;::::1;;::::0;;;:10:::1;:20;::::0;;;;;;;;4963:47;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;;;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;;;;::::1;;::::0;::::1;;;;::::0;;;;;5028:26;;:69:::1;;-1:-1:-1::0;5058:21:1;;5082:15:::1;-1:-1:-1::0;5028:69:1::1;:107;;;;5120:15;5101:8;:16;;;:34;5028:107;:139;;;;5139:8;:28;;;5028:139;5020:207;;;;-1:-1:-1::0;;;5020:207:1::1;;;;;;;:::i;:::-;5246:24;::::0;::::1;::::0;:29;:63;::::1;;;-1:-1:-1::0;5279:25:1::1;::::0;::::1;::::0;:30;5246:63:::1;5245:97;;;;5314:8;:28;;;5245:97;5237:166;;;;-1:-1:-1::0;;;5237:166:1::1;;;;;;;:::i;:::-;5424:382;;;;;;;;5433:11;:24;;;5424:382;;;;5459:11;:22;;;5424:382;;;;5483:11;:22;;;5508:6;5483:31;5424:382;;;;5516:11;:19;;;5424:382;;;;5537:11;:17;;;5424:382;;;;5556:1;5424:382;;;;5559:1;5424:382;;;;5562:11;:32;;;5424:382;;;;5596:11;:32;;;5424:382;;;;5630:11;:25;;;5424:382;;;;5657:11;:25;;;5424:382;;;;5684:11;:19;;;5424:382;;;;5705:11;:27;;;-1:-1:-1::0;;;;;5424:382:1::1;;;;;5734:11;:21;;;-1:-1:-1::0;;;;;5424:382:1::1;;;;;5757:11;:24;;;-1:-1:-1::0;;;;;5424:382:1::1;;;;;5783:11;:15;;;5424:382;;;;5800:5;5424:382;;;;::::0;5413:393:::1;;5839:8;5816:10;:20;5827:8;-1:-1:-1::0;;;;;5816:20:1::1;-1:-1:-1::0;;;;;5816:20:1::1;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;5816:31:1::1;;;;;-1:-1:-1::0;;;;;5816:31:1::1;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;5816:31:1::1;;;;;-1:-1:-1::0;;;;;5816:31:1::1;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;5816:31:1::1;;;;;-1:-1:-1::0;;;;;5816:31:1::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5875:8;-1:-1:-1::0;;;;;5862:343:1::1;;5885:8;:14;;;5901:8;:29;;;5932:8;:29;;;5963:8;:22;;;5987:8;:22;;;6011:8;:16;;;6029:8;:21;;;6052:8;:19;;;6073:8;:21;;;6097:6;6073:30;6105:8;:16;;;6123:8;:24;;;6149:8;:18;;;6169:8;:21;;;6192:8;:12;;;5862:343;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;3015:1;4343:1869:::0;;;;:::o;1061:77:2:-;1099:7;1125:6;-1:-1:-1;;;;;1125:6:2;1061:77;:::o;4089:84:1:-;1275:12:2;:10;:12::i;:::-;1265:6;;-1:-1:-1;;;;;1265:6:2;;;:22;;;1257:67;;;;-1:-1:-1;;;1257:67:2;;;;;;;:::i;:::-;4152:6:1::1;:14:::0;;-1:-1:-1;;;;;;4152:14:1::1;-1:-1:-1::0;;;;;4152:14:1;;;::::1;::::0;;;::::1;::::0;;4089:84::o;3983:100::-;1275:12:2;:10;:12::i;:::-;1265:6;;-1:-1:-1;;;;;1265:6:2;;;:22;;;1257:67;;;;-1:-1:-1;;;1257:67:2;;;;;;;:::i;:::-;4054:10:1::1;:22:::0;;-1:-1:-1;;;;;;4054:22:1::1;-1:-1:-1::0;;;;;4054:22:1;;;::::1;::::0;;;::::1;::::0;;3983:100::o;17093:193::-;-1:-1:-1;;;;;17209:25:1;;;17183:7;17209:25;;;:15;:25;;;;;;;;:33;;;;;;;;;;;;17243:35;;;:25;:35;;;;;;;;17209:70;;;;;;;17093:193::o;11211:1040::-;2900:10;;2867:77;;-1:-1:-1;;;2867:77:1;;11309:10;;11321:8;;-1:-1:-1;;;;;2900:10:1;;;;2867:60;;:77;;11309:10;;11321:8;;2867:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2859:146;;;;-1:-1:-1;;;2859:146:1;;;;;;;:::i;:::-;-1:-1:-1;;;;;11369:20:1;::::1;11341:25;11369:20:::0;;;:10:::1;:20;::::0;;;;11407:16:::1;::::0;::::1;::::0;11427:15:::1;-1:-1:-1::0;11407:35:1;::::1;::::0;:113:::1;;-1:-1:-1::0;11494:25:1::1;::::0;::::1;::::0;11465:24:::1;::::0;::::1;::::0;:55:::1;::::0;:28:::1;:55::i;:::-;11446:8;:16;;;:74;11407:113;11399:173;;;;-1:-1:-1::0;;;11399:173:1::1;;;;;;;:::i;:::-;11587:6;11582:663;11603:7;:14;11599:1;:18;11582:663;;;11638:14;11655:7;11663:1;11655:10;;;;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;11701:28:1;;::::1;11679:19;11701:28:::0;;;:18:::1;:28:::0;;;;;;;:36;;::::1;::::0;;;;;;;;11738:35;;;:25:::1;:35:::0;;;;;;::::1;;11701:73:::0;;;;;;;;;;11829:14;;::::1;::::0;11655:10;;-1:-1:-1;11701:73:1;11679:19;11813:40:::1;::::0;11849:3:::1;::::0;11813:31:::1;::::0;11701:73;;11813:15:::1;:31::i;:40::-;-1:-1:-1::0;;;;;11867:28:1;;::::1;11943:1;11867:28:::0;;;:18:::1;:28;::::0;;;;;;;:36;;::::1;::::0;;;;;;;;11904:35;;;:25:::1;:35:::0;;;;;;::::1;;11867:73:::0;;;;;;;:77;;;;11967:76;;-1:-1:-1;;;11967:76:1;;11788:65;;-1:-1:-1;11867:28:1;11967:55:::1;::::0;:76:::1;::::0;11896:6;;12031:11;;11967:76:::1;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11959:85;;;::::0;::::1;;-1:-1:-1::0;;;;;12099:20:1;::::1;;::::0;;;:10:::1;:20;::::0;;;;:37:::1;;::::0;:57:::1;::::0;12141:14;12099:41:::1;:57::i;:::-;-1:-1:-1::0;;;;;12059:20:1;::::1;;::::0;;;:10:::1;:20;::::0;;;;;;:37:::1;;:97:::0;;;;12175:59;;::::1;::::0;::::1;::::0;12211:6;;12219:14;;12175:59:::1;:::i;:::-;;;;;;;;-1:-1:-1::0;;;11619:3:1::1;;11582:663;;6406:2080:::0;6473:24;;:::i;:::-;-1:-1:-1;;;;;;6500:20:1;;;;;;;:10;:20;;;;;;;;6473:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6578:6;;6473:47;;6578:6;6545:63;6609:12;:10;:12::i;:::-;6545:77;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6530:92;;6662:15;6640:8;:18;;;:37;;:76;;;;;6701:15;6681:8;:16;;;:35;;6640:76;6632:130;;;;-1:-1:-1;;;6632:130:1;;;;;;;:::i;:::-;6790:8;:22;;;6780:6;:32;;6772:87;;;;-1:-1:-1;;;6772:87:1;;;;;;;:::i;:::-;6966:22;;;;-1:-1:-1;;;;;6877:30:1;;;;;;:20;:30;;;;;;;;:36;;;;;;;;6914:35;;;:25;:35;;;;;;;;6877:73;;;;;;;:85;;6955:6;6877:77;:85::i;:::-;:111;;6869:166;;;;-1:-1:-1;;;6869:166:1;;;;;;;:::i;:::-;7045:11;7092:8;-1:-1:-1;;;;;7059:46:1;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7045:62;;7117:18;7138:52;7182:7;7138:39;7162:8;:14;;;7138:19;7149:7;7138:6;:10;;:19;;;;:::i;:52::-;7117:73;;7200:21;7257:8;-1:-1:-1;;;;;7224:54:1;;:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7200:80;-1:-1:-1;7332:3:1;7299:29;7200:80;7317:10;7299:17;:29::i;:::-;:36;;7291:99;;;;-1:-1:-1;;;7291:99:1;;;;;;;:::i;:::-;7439:24;;;;:36;;7468:6;7439:28;:36::i;:::-;-1:-1:-1;;;;;7400:20:1;;;;;;;:10;:20;;;;;;;;:36;:75;;;;7527:24;;;;7494:71;;7566:12;:10;:12::i;:::-;7588:4;7595:6;7494:108;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7486:117;;;;;;7641:16;;;7655:1;7641:16;;;;;;;;;7614:24;;7641:16;;;;;;;;;;;-1:-1:-1;7641:16:1;7614:43;;7680:10;7667:7;7675:1;7667:10;;;;;;;;;;;;;;;;;:23;7728:16;;;7742:1;7728:16;;;;;;;;;7700:25;;7728:16;;;;;;;;;;;;-1:-1:-1;7728:16:1;7700:44;;7768:12;:10;:12::i;:::-;7754:8;7763:1;7754:11;;;;;;;;-1:-1:-1;;;;;7754:26:1;;;:11;;;;;;;;;:26;7798:66;;-1:-1:-1;;;7798:66:1;;:47;;;;;;:66;;7846:8;;7856:7;;7798:66;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7790:75;;;;;;-1:-1:-1;;;;;7954:25:1;;;;;;:15;:25;;;;;:88;;8035:6;;7954:25;7980:12;:10;:12::i;:::-;-1:-1:-1;;;;;7954:39:1;;;;;;;;;;;;;;;;;-1:-1:-1;7954:39:1;;;7994:35;;;;;:25;:35;;;;;;;;7954:76;;;;;;;;:80;:88::i;:::-;-1:-1:-1;;;;;7875:25:1;;;;;;:15;:25;;;;;;7901:12;:10;:12::i;:::-;-1:-1:-1;;;;;7875:39:1;;;;;;;;;;;;;;;;;-1:-1:-1;7875:39:1;;;7915:35;;;;;;:25;:35;;;;;;;;7875:76;;;;;;;;:167;;;;8127:21;;:11;:21;;;;;:88;;8204:10;;8127:21;8149:12;:10;:12::i;8127:88::-;-1:-1:-1;;;;;8052:21:1;;;;;;:11;:21;;;;;;8074:12;:10;:12::i;:::-;-1:-1:-1;;;;;8052:35:1;;;;;;;;;;;;;;;;;-1:-1:-1;8052:35:1;;;8088;;;;;;:25;:35;;;;;;;;;;;8052:72;;;;;;;;:163;;;;8301:30;;:20;:30;;;;;:36;;;;;;;;8338:35;;;;;8301:73;;;;;;;;;:85;;8379:6;8301:77;:85::i;:::-;-1:-1:-1;;;;;8225:30:1;;;;;;:20;:30;;;;;;;;:36;;;;;;;;8262:35;;;:25;:35;;;;;;;;8225:73;;;;;;:161;8420:12;:10;:12::i;:::-;-1:-1:-1;;;;;8401:78:1;8410:8;-1:-1:-1;;;;;8401:78:1;;8434:8;:24;;;8460:6;8468:10;8401:78;;;;;;;;:::i;:::-;;;;;;;;6406:2080;;;;;;;;;:::o;17999:240::-;-1:-1:-1;;;;;18196:20:1;;;18092:7;18196:20;;;:10;:20;;;;;;;;:26;;;;;18118:28;;;;;;:36;;;;;;;;;;;18155:35;;;:25;:35;;;;;;;;18118:73;;;;;;;;;18092:7;;18118:114;;18228:3;;18118:105;;:73;:77;:105::i;:114::-;18111:121;17999:240;-1:-1:-1;;;17999:240:1:o;14194:350::-;-1:-1:-1;;;;;14284:20:1;;14256:25;14284:20;;;:10;:20;;;;;14322:16;;;;14341:15;-1:-1:-1;14322:112:1;;;;-1:-1:-1;14408:25:1;;;;14379:24;;;;:55;;:28;:55::i;:::-;14360:8;:16;;;:74;14322:112;14314:172;;;;-1:-1:-1;;;14314:172:1;;;;;;;:::i;:::-;14496:41;14514:8;14524:12;:10;:12::i;:::-;14496:17;:41::i;:::-;14194:350;;:::o;1978:240:2:-;1275:12;:10;:12::i;:::-;1265:6;;-1:-1:-1;;;;;1265:6:2;;;:22;;;1257:67;;;;-1:-1:-1;;;1257:67:2;;;;;;;:::i;:::-;-1:-1:-1;;;;;2066:22:2;::::1;2058:73;;;;-1:-1:-1::0;;;2058:73:2::1;;;;;;;:::i;:::-;2167:6;::::0;;2146:38:::1;::::0;-1:-1:-1;;;;;2146:38:2;;::::1;::::0;2167:6;::::1;::::0;2146:38:::1;::::0;::::1;2194:6;:17:::0;;-1:-1:-1;;;;;;2194:17:2::1;-1:-1:-1::0;;;;;2194:17:2;;;::::1;::::0;;;::::1;::::0;;1978:240::o;874:176:3:-;932:7;963:5;;;986:6;;;;978:46;;;;-1:-1:-1;;;978:46:3;;;;;;;:::i;2180:459::-;2238:7;2479:6;2475:45;;-1:-1:-1;2508:1:3;2501:8;;2475:45;2542:5;;;2546:1;2542;:5;:1;2565:5;;;;;:10;2557:56;;;;-1:-1:-1;;;2557:56:3;;;;;;;:::i;3101:130::-;3159:7;3185:39;3189:1;3192;3185:39;;;;;;;;;;;;;;;;;:3;:39::i;1321:134::-;1379:7;1405:43;1409:1;1412;1405:43;;;;;;;;;;;;;;;;;:3;:43::i;590:104:0:-;677:10;590:104;:::o;12257:1109:1:-;12384:6;;12351:71;;-1:-1:-1;;;12351:71:1;;12336:12;;-1:-1:-1;;;;;12384:6:1;;12351:63;;:71;;12415:6;;12351:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;12454:21:1;;;12432:19;12454:21;;;:11;:21;;;;;;;;:29;;;;;;;;;;;;12484:35;;;:25;:35;;;;;;;;;;;12454:66;;;;;;;;;;12555:25;;;12484:35;12555:25;;;;;:33;;;;;;;;;:70;;;;;;;;;;12635:74;;;;12749:35;;;;12719:66;;;;;;;;:70;;;12875:30;;;:20;:30;;;;;:36;;;;;;;;12912:35;;;;;12875:73;;;;;;;;;12336:86;;-1:-1:-1;12454:66:1;;12875:93;;12555:70;12875:77;:93::i;:::-;-1:-1:-1;;;;;12799:30:1;;;;;;:20;:30;;;;;;;;:36;;;;;;;;12836:35;;;:25;:35;;;;;;;;12799:73;;;;;;;;;:169;;;;12987:76;;-1:-1:-1;;;12987:76:1;;:55;;:76;;13043:6;;13051:11;;12987:76;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12979:85;;;;;;-1:-1:-1;;;;;13115:20:1;;;;;;;:10;:20;;;;;;;:36;;;13082:103;;-1:-1:-1;;;13082:103:1;;13115:36;;;13082:79;;:103;;13162:6;;13170:14;;13082:103;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13074:112;;;;;;-1:-1:-1;;;;;13236:20:1;;;;;;:10;:20;;;;;;;;:36;;:56;;13277:14;13236:40;:56::i;:::-;-1:-1:-1;;;;;13197:20:1;;;;;;:10;:20;;;;;;;;;:36;:95;;;;13307:52;;;;;;13336:6;;13344:14;;13307:52;:::i;3713:272:3:-;3799:7;3833:12;3826:5;3818:28;;;;-1:-1:-1;;;3818:28:3;;;;;;;;:::i;:::-;;3856:9;3872:1;3868;:5;;;;;;;3713:272;-1:-1:-1;;;;;3713:272:3:o;1746:187::-;1832:7;1867:12;1859:6;;;;1851:29;;;;-1:-1:-1;;;1851:29:3;;;;;;;;:::i;:::-;-1:-1:-1;;;1902:5:3;;;1746:187::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5:130::-;72:20;;-1:-1;;;;;38789:54;;39754:35;;39744:2;;39803:1;;39793:12;160:707;;277:3;270:4;262:6;258:17;254:27;244:2;;-1:-1;;285:12;244:2;332:6;319:20;354:80;369:64;426:6;369:64;:::i;:::-;354:80;:::i;:::-;462:21;;;345:89;-1:-1;506:4;519:14;;;;494:17;;;608;;;599:27;;;;596:36;-1:-1;593:2;;;645:1;;635:12;593:2;670:1;655:206;680:6;677:1;674:13;655:206;;;760:37;793:3;781:10;760:37;:::i;:::-;748:50;;812:14;;;;840;;;;702:1;695:9;655:206;;;659:14;;;;;237:630;;;;:::o;4391:241::-;;4495:2;4483:9;4474:7;4470:23;4466:32;4463:2;;;-1:-1;;4501:12;4463:2;4563:53;4608:7;4584:22;4563:53;:::i;4639:366::-;;;4760:2;4748:9;4739:7;4735:23;4731:32;4728:2;;;-1:-1;;4766:12;4728:2;4828:53;4873:7;4849:22;4828:53;:::i;:::-;4818:63;;4936:53;4981:7;4918:2;4961:9;4957:22;4936:53;:::i;:::-;4926:63;;4722:283;;;;;:::o;5012:502::-;;;5158:2;5146:9;5137:7;5133:23;5129:32;5126:2;;;-1:-1;;5164:12;5126:2;5226:53;5271:7;5247:22;5226:53;:::i;:::-;5216:63;;5344:2;5333:9;5329:18;5316:32;5368:18;5360:6;5357:30;5354:2;;;-1:-1;;5390:12;5354:2;5420:78;5490:7;5481:6;5470:9;5466:22;5420:78;:::i;:::-;5410:88;;;5120:394;;;;;:::o;5521:763::-;;;;5709:2;5697:9;5688:7;5684:23;5680:32;5677:2;;;-1:-1;;5715:12;5677:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;5767:63;-1:-1;5895:2;5880:18;;;5867:32;5919:18;5908:30;;;5905:2;;;-1:-1;;5941:12;5905:2;5971:78;6041:7;6032:6;6021:9;6017:22;5971:78;:::i;:::-;5961:88;;6114:2;6103:9;6099:18;6086:32;6072:46;;5919:18;6130:6;6127:30;6124:2;;;-1:-1;;6160:12;6124:2;-1:-1;6236:22;;1003:4;991:17;;987:27;-1:-1;977:2;;-1:-1;;1018:12;977:2;1065:6;1052:20;1087:80;1102:64;1159:6;1102:64;:::i;1087:80::-;1195:21;;;1252:14;;;;1227:17;;;1341;;;1332:27;;;;1329:36;-1:-1;1326:2;;;-1:-1;;1368:12;1326:2;-1:-1;1394:10;;1388:206;1413:6;1410:1;1407:13;1388:206;;;4180:20;;1481:50;;1435:1;1428:9;;;;;1545:14;;;;1573;;1388:206;;;1392:14;6180:88;;;;;;;;5671:613;;;;;:::o;6291:423::-;;;6428:9;6419:7;6415:23;6440:3;6415:23;6411:33;6408:2;;;-1:-1;;6447:12;6408:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;6499:63;-1:-1;2052:6;-1:-1;;2031:19;;2027:32;-1:-1;2024:2;;;-1:-1;;2062:12;2024:2;2090:22;2052:6;2090:22;:::i;:::-;2081:31;;6599:2;6670:9;6666:22;4180:20;2184:16;2177:75;2373:22;6670:9;2373:22;4180:20;6599:2;2338:5;2334:16;2327:75;2520:22;6670:9;2520:22;4180:20;2373:22;2485:5;2481:16;2474:75;2665:22;6670:9;2665:22;4180:20;2520:22;2630:5;2626:16;2619:75;2826:22;6670:9;2826:22;4180:20;2665:22;2791:5;2787:16;2780:75;2987:22;6670:9;2987:22;4180:20;2826:22;2952:5;2948:16;2941:75;3141:22;6670:9;3141:22;4180:20;2987:22;3106:5;3102:16;3095:75;3295:22;;6670:9;3295:22;4180:20;3141:22;3260:5;3256:16;3249:75;3445:22;;6670:9;3445:22;4180:20;3295:22;3408:5;3404:18;3397:77;3603:22;;;3582:49;3627:3;3603:22;6670:9;3603:22;3582:49;:::i;:::-;3562:18;;;3555:77;3755:22;3734:49;3779:3;3755:22;;;3734:49;:::i;:::-;3603:22;3718:5;3714:18;3707:77;3910:22;;;3889:49;3934:3;3910:22;6670:9;3910:22;3889:49;:::i;:::-;3869:18;;;3862:77;4056:22;;4180:20;4015:18;;;4008:77;;;;-1:-1;6402:312;3873:5;;-1:-1;6402:312::o;6721:366::-;;;6842:2;6830:9;6821:7;6817:23;6813:32;6810:2;;;-1:-1;;6848:12;6810:2;6910:53;6955:7;6931:22;6910:53;:::i;:::-;6900:63;7000:2;7039:22;;;;4180:20;;-1:-1;;;6804:283::o;7094:257::-;;7206:2;7194:9;7185:7;7181:23;7177:32;7174:2;;;-1:-1;;7212:12;7174:2;1689:6;1683:13;39900:5;38622:13;38615:21;39878:5;39875:32;39865:2;;-1:-1;;39911:12;7358:263;;7473:2;7461:9;7452:7;7448:23;7444:32;7441:2;;;-1:-1;;7479:12;7441:2;-1:-1;1821:13;;7435:186;-1:-1;7435:186::o;8081:173::-;21464:37;;8243:4;8234:14;;8161:93::o;8411:103::-;-1:-1;;;;;38789:54;8472:37;;8466:48::o;10099:94::-;38622:13;38615:21;10154:34;;10148:45::o;21633:222::-;-1:-1;;;;;38789:54;;;;8472:37;;21760:2;21745:18;;21731:124::o;22107:349::-;-1:-1;;;;;38789:54;;;8341:58;;38789:54;;22442:2;22427:18;;8472:37;22270:2;22255:18;;22241:215::o;22463:460::-;-1:-1;;;;;38789:54;;;8341:58;;38789:54;;;;22826:2;22811:18;;8472:37;22909:2;22894:18;;21464:37;;;;22654:2;22639:18;;22625:298::o;23270:333::-;-1:-1;;;;;38789:54;;;;8472:37;;23589:2;23574:18;;21464:37;23425:2;23410:18;;23396:207::o;23610:444::-;-1:-1;;;;;38789:54;;;;8472:37;;23957:2;23942:18;;21464:37;;;;24040:2;24025:18;;21464:37;23793:2;23778:18;;23764:290::o;24061:629::-;24316:2;24330:47;;;37368:12;;24301:18;;;38031:19;;;24061:629;;38080:4;;38071:14;;;;37064;;;24061:629;9080:260;9105:6;9102:1;9099:13;9080:260;;;7986:46;8028:3;9172:6;9166:13;7986:46;:::i;:::-;8052:14;;;;37771;;;;9127:1;9120:9;9080:260;;;9084:14;;;24547:9;24541:4;24537:20;38080:4;24521:9;24517:18;24510:48;24572:108;9594:5;37368:12;9613:86;9692:6;9687:3;9613:86;:::i;:::-;9606:93;;38080:4;9770:5;37064:14;9782:21;;-1:-1;9809:260;9834:6;9831:1;9828:13;9809:260;;;9922:63;9981:3;9901:6;9895:13;9922:63;:::i;:::-;37771:14;;;;9915:70;-1:-1;9127:1;9849:9;9809:260;;;-1:-1;24564:116;;24287:403;-1:-1;;;;;;;24287:403::o;24697:310::-;;24844:2;;24865:17;24858:47;10345:5;37368:12;38043:6;24844:2;24833:9;24829:18;38031:19;-1:-1;39386:101;39400:6;39397:1;39394:13;39386:101;;;39467:11;;;;;39461:18;39448:11;;;38071:14;39448:11;39441:39;39415:10;;39386:101;;;39502:6;39499:1;39496:13;39493:2;;;-1:-1;38071:14;39558:6;24833:9;39549:16;;39542:27;39493:2;-1:-1;2031:19;39658:14;-1:-1;;39654:28;10503:39;;;;38071:14;10503:39;;24815:192;-1:-1;;;24815:192::o;25014:416::-;25214:2;25228:47;;;10779:2;25199:18;;;38031:19;10815:34;38071:14;;;10795:55;-1:-1;;;10870:12;;;10863:45;10927:12;;;25185:245::o;25437:416::-;25637:2;25651:47;;;11178:2;25622:18;;;38031:19;11214:34;38071:14;;;11194:55;-1:-1;;;11269:12;;;11262:36;11317:12;;;25608:245::o;25860:416::-;26060:2;26074:47;;;11568:2;26045:18;;;38031:19;11604:34;38071:14;;;11584:55;-1:-1;;;11659:12;;;11652:30;11701:12;;;26031:245::o;26283:416::-;26483:2;26497:47;;;11952:2;26468:18;;;38031:19;11988:29;38071:14;;;11968:50;12037:12;;;26454:245::o;26706:416::-;26906:2;26920:47;;;12288:2;26891:18;;;38031:19;12324:34;38071:14;;;12304:55;-1:-1;;;12379:12;;;12372:39;12430:12;;;26877:245::o;27129:416::-;27329:2;27343:47;;;12681:2;27314:18;;;38031:19;12717:34;38071:14;;;12697:55;-1:-1;;;12772:12;;;12765:46;12830:12;;;27300:245::o;27552:416::-;27752:2;27766:47;;;13081:2;27737:18;;;38031:19;13117:34;38071:14;;;13097:55;13186:34;13172:12;;;13165:56;-1:-1;;;13241:12;;;13234:28;13281:12;;;27723:245::o;27975:416::-;28175:2;28189:47;;;13532:2;28160:18;;;38031:19;13568:34;38071:14;;;13548:55;-1:-1;;;13623:12;;;13616:31;13666:12;;;28146:245::o;28398:416::-;28598:2;28612:47;;;13917:2;28583:18;;;38031:19;13953:34;38071:14;;;13933:55;14022:25;14008:12;;;14001:47;14067:12;;;28569:245::o;28821:416::-;29021:2;29035:47;;;14318:2;29006:18;;;38031:19;14354:34;38071:14;;;14334:55;14423:25;14409:12;;;14402:47;14468:12;;;28992:245::o;29244:416::-;29444:2;29458:47;;;14719:2;29429:18;;;38031:19;14755:34;38071:14;;;14735:55;14824:26;14810:12;;;14803:48;14870:12;;;29415:245::o;29667:416::-;29867:2;29881:47;;;15121:2;29852:18;;;38031:19;15157:34;38071:14;;;15137:55;-1:-1;;;15212:12;;;15205:25;15249:12;;;29838:245::o;30090:416::-;30290:2;30304:47;;;15500:2;30275:18;;;38031:19;15536:34;38071:14;;;15516:55;-1:-1;;;15591:12;;;15584:31;15634:12;;;30261:245::o;30513:416::-;30713:2;30727:47;;;30698:18;;;38031:19;15921:34;38071:14;;;15901:55;15975:12;;;30684:245::o;30936:416::-;31136:2;31150:47;;;16226:2;31121:18;;;38031:19;16262:34;38071:14;;;16242:55;-1:-1;;;16317:12;;;16310:34;16363:12;;;31107:245::o;31359:416::-;31559:2;31573:47;;;16614:2;31544:18;;;38031:19;16650:34;38071:14;;;16630:55;-1:-1;;;16705:12;;;16698:32;16749:12;;;31530:245::o;31782:416::-;31982:2;31996:47;;;17000:2;31967:18;;;38031:19;17036:34;38071:14;;;17016:55;-1:-1;;;17091:12;;;17084:42;17145:12;;;31953:245::o;32205:416::-;32405:2;32419:47;;;17396:2;32390:18;;;38031:19;17432:34;38071:14;;;17412:55;-1:-1;;;17487:12;;;17480:34;17533:12;;;32376:245::o;32628:416::-;32828:2;32842:47;;;17784:2;32813:18;;;38031:19;17820:34;38071:14;;;17800:55;17889:26;17875:12;;;17868:48;17935:12;;;32799:245::o;33051:416::-;33251:2;33265:47;;;18186:2;33236:18;;;38031:19;18222:34;38071:14;;;18202:55;-1:-1;;;18277:12;;;18270:33;18322:12;;;33222:245::o;33474:323::-;;33651:3;33640:9;33636:19;33628:27;;18666:16;18660:23;21471:3;21464:37;18837:4;18830:5;18826:16;18820:23;18837:4;18901:3;18897:14;21464:37;18996:4;18989:5;18985:16;18979:23;18996:4;19060:3;19056:14;21464:37;19153:4;19146:5;19142:16;19136:23;19153:4;19217:3;19213:14;21464:37;19308:4;19301:5;19297:16;19291:23;19308:4;19372:3;19368:14;21464:37;19473:4;19466:5;19462:16;19456:23;19473:4;19537:3;19533:14;21464:37;19639:4;19632:5;19628:16;19622:23;19639:4;19703:3;19699:14;21464:37;19809:4;19802:5;19798:16;19792:23;19809:4;19873:3;19869:14;21464:37;19979:6;;19972:5;19968:18;19962:25;19979:6;20045:3;20041:16;21464:37;;20146:6;;20139:5;20135:18;20129:25;20146:6;20212:3;20208:16;21464:37;;20313:6;;20306:5;20302:18;20296:25;20313:6;20379:3;20375:16;21464:37;;20474:6;;20467:5;20463:18;20457:25;20474:6;20540:3;20536:16;21464:37;;20643:6;;20636:5;20632:18;20626:25;20657:65;20643:6;20709:3;20705:16;20691:12;20657:65;:::i;:::-;;;20806:6;;20799:5;20795:18;20789:25;20820:65;20806:6;20872:3;20868:16;20854:12;20820:65;:::i;:::-;;;20972:6;;20965:5;20961:18;20955:25;20986:65;20972:6;21038:3;21034:16;21020:12;20986:65;:::i;:::-;-1:-1;;21129:6;21118:18;;;21112:25;21191:16;;;21464:37;21302:6;21291:18;;;21285:25;21316:59;21358:16;;;21285:25;21316:59;:::i;:::-;;;33622:175;;;;:::o;33804:222::-;21464:37;;;33931:2;33916:18;;33902:124::o;34033:333::-;21464:37;;;34352:2;34337:18;;21464:37;34188:2;34173:18;;34159:207::o;34373:1684::-;21464:37;;;35033:2;35018:18;;21464:37;;;;35116:2;35101:18;;21464:37;;;;35199:2;35184:18;;21464:37;;;;35282:3;35267:19;;21464:37;;;;35366:3;35351:19;;21464:37;;;;35450:3;35435:19;;21464:37;;;;35534:3;35519:19;;21464:37;35618:3;35603:19;;21464:37;35702:3;35687:19;;21464:37;-1:-1;;;;;38789:54;;;35787:3;35772:19;;8472:37;38789:54;;;35872:3;35857:19;;8472:37;38789:54;35957:3;35942:19;;8472:37;36042:3;36027:19;;21464:37;34868:3;34853:19;;34839:1218::o;36064:256::-;36126:2;36120:9;36152:17;;;36227:18;36212:34;;36248:22;;;36209:62;36206:2;;;36284:1;;36274:12;36206:2;36126;36293:22;36104:216;;-1:-1;36104:216::o;36327:304::-;;36486:18;36478:6;36475:30;36472:2;;;-1:-1;;36508:12;36472:2;-1:-1;36553:4;36541:17;;;36606:15;;36409:222::o;39695:117::-;-1:-1;;;;;38789:54;;39754:35;;39744:2;;39803:1;;39793:12;39744:2;39738:74;:::o
Swarm Source
ipfs://8d3b192464f063698685395204ebd4fb425f5005036ccbe7a9334501f67a25d0
Loading...
Loading
Loading...
Loading
Net Worth in USD
$1,053.16
Net Worth in ETH
0.512372
Token Allocations
DAI
100.00%
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $1 | 1,053.1617 | $1,053.16 |
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.