Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0.001300000000000003 ETH
Eth Value
$3.28 (@ $2,521.79/ETH)Token Holdings
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 8 from a total of 8 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Sell | 16783248 | 604 days ago | IN | 0 ETH | 0.00672736 | ||||
Sell | 16651172 | 622 days ago | IN | 0 ETH | 0.01252985 | ||||
Buy | 16590689 | 631 days ago | IN | 0.240316 ETH | 0.0076522 | ||||
Sell | 16450421 | 650 days ago | IN | 0 ETH | 0.01066702 | ||||
Buy | 16428652 | 653 days ago | IN | 18.936895 ETH | 0.01059726 | ||||
Buy | 16392493 | 658 days ago | IN | 0.12471 ETH | 0.01565107 | ||||
Buy | 16366369 | 662 days ago | IN | 0.007118 ETH | 0.00885891 | ||||
0x60806040 | 16366203 | 662 days ago | IN | 0 ETH | 0.06388726 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
16783248 | 604 days ago | 0.21299201 ETH | ||||
16783248 | 604 days ago | 0.00434677 ETH | ||||
16783248 | 604 days ago | 0.00000402 ETH | ||||
16783248 | 604 days ago | 0.11424641 ETH | ||||
16783248 | 604 days ago | 0.05368834 ETH | ||||
16651172 | 622 days ago | 0.09700078 ETH | ||||
16651172 | 622 days ago | 0.0019796 ETH | ||||
16651172 | 622 days ago | 0.0000019 ETH | ||||
16651172 | 622 days ago | 0.04960896 ETH | ||||
16651172 | 622 days ago | 0.02596952 ETH | ||||
16590689 | 631 days ago | 0.00064997 ETH | ||||
16590689 | 631 days ago | 0.00114002 ETH | ||||
16590689 | 631 days ago | 0.11448211 ETH | ||||
16590689 | 631 days ago | 0.00053369 ETH | ||||
16590689 | 631 days ago | 0.05353221 ETH | ||||
16590689 | 631 days ago | 0.00021552 ETH | ||||
16590689 | 631 days ago | 0.0217679 ETH | ||||
16590689 | 631 days ago | 0.00237303 ETH | ||||
16450421 | 650 days ago | 16.47785117 ETH | ||||
16450421 | 650 days ago | 0.33628267 ETH | ||||
16450421 | 650 days ago | 0.00026318 ETH | ||||
16450421 | 650 days ago | 8.99704654 ETH | ||||
16450421 | 650 days ago | 3.96752412 ETH | ||||
16428652 | 653 days ago | 0.0590691 ETH | ||||
16428652 | 653 days ago | 0.12639595 ETH |
Loading...
Loading
Contract Name:
Tetraguard
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-01-09 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } pragma solidity ^0.8.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 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) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } pragma solidity 0.8.11; interface IQuadron is IERC20 { function buy(uint256 minTokensRequested) external payable; function sell(uint256 amount) external; function quoteAvgPriceForTokens(uint256 amount) external view returns (uint256); function addApprovedToken(address newToken) external; } pragma solidity 0.8.11; interface ITetraguard is IERC20 { function upgradeToken(uint256 amount, address tokenHolder) external returns (uint256); } pragma solidity 0.8.11; /** @title Tetraguard Contract. */ contract Tetraguard is ITetraguard, ERC20 { // Declare uniswap V2 router. External but trusted contract maintained by Uniswap.org IUniswapV2Router02 private uniswapRouter; // Declare Quadron Token interface IQuadron private qToken; // -- Declare addresses for uniswap router, uniswap pairs, and reserve contract -- address private UNISWAP_ROUTER_ADDRESS; // 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; address private PAXG; // 0x45804880De22913dAFE09f4980848ECE6EcbAf78; address private WBTC; // 0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599; address private RESERVE; address private UPGRADE_TOKEN; // -- Ratios of coins -- uint32 private constant R_WBTC = 1; uint32 private constant R_ETH = 13; uint32 private constant R_PAXG = 26; uint32 private constant R_RESERVE = 23632; // -- Constants-- // maximum buy order size (ether) uint256 internal constant MAX_BUY_ORDER = 2000 ether; // maximum sell order size (Tetraguard) uint256 internal constant MAX_SELL_ORDER = 400e3 * 1e18; // -- Declare state variables -- address private owner; // Contract owner /** @dev Tetraguard Token Constructor * @param _quadron Address of Quadron * @param _paxg Address of PAXG * @param _wbtc Address of WBTC * @param _uniswapRouter Address of Uniswap V2 Router */ constructor(address _quadron, address _paxg, address _wbtc, address _uniswapRouter) ERC20("Tetraguard", "TETRA") { // Instantiate uniswap router uniswapRouter = IUniswapV2Router02(_uniswapRouter); // Instantiate quadron qToken = IQuadron(_quadron); // Assign contract owner owner = address(msg.sender); UNISWAP_ROUTER_ADDRESS = _uniswapRouter; PAXG = _paxg; WBTC = _wbtc; RESERVE = _quadron; UPGRADE_TOKEN = msg.sender; // Initially, set the upgrade token address to the owner } /** @dev Exchanges sent Ether for Tetraguard tokens, which represents a basket of tokens * @param deadline Deadline after which the transaction will revert if not processed * @param priceWBTC Max price (in wei) for one unit of wbtc * @param pricePAXG Max price (in wei) for one unit of paxg */ function buy(uint256 deadline, uint256 priceWBTC, uint256 pricePAXG) external payable { require(deadline >= block.timestamp, "Deadline expired"); require(msg.value <= MAX_BUY_ORDER, "Buy exceeded the maximum purchase amount"); uint256 PriceOfBase; uint256 PriceOfBaseWBTC; uint256 PriceOfBasePAXG; uint256 PriceOfBaseEth; uint256 PriceOfReserve; uint256 balance = address(this).balance; // This is the lowest price (in WEI) of one unit of Tetraguard (1e-4 Tetraguard) (PriceOfBase, PriceOfBaseWBTC, PriceOfBasePAXG, PriceOfBaseEth, PriceOfReserve) = getPriceOfBase(); // Now calculate how many units of Tetraguard we can purchase require(baseTokensToMint(PriceOfBase) >= 1, "Not enough Ether to purchase .0001 Tetraguard"); require(1e4 * PriceOfBaseWBTC / R_WBTC <= priceWBTC, "Maximum wbtc price exceeded."); require(1e4 * PriceOfBasePAXG / R_PAXG <= pricePAXG, "Maximum paxg price exceeded."); // Transfer 1% of the Base Price to quadron payable(RESERVE).transfer(PriceOfBase * baseTokensToMint(PriceOfBase) * 1 / 100); // 101/100 send 1% more in case of underflow qToken.buy{value: baseTokensToMint(PriceOfBase) * PriceOfReserve * 101 / 100}(reserveTokensToMint(baseTokensToMint(PriceOfBase))); // Purchase WBTC // 1e4 accounts for 8 decimal places of WBTC, and that minimum purchase by this contract is 1e-4 uniswapRouter.swapETHForExactTokens{ value: (baseTokensToMint(PriceOfBase) * PriceOfBaseWBTC * 101 / 100) }(baseTokensToMint(PriceOfBase) * R_WBTC * 1e4, getPathForETHtoToken(WBTC), address(this), deadline); // Purchase PAXG // (10000 / 9998) to account for the PAXG 0.02% fee uniswapRouter.swapETHForExactTokens{ value: (baseTokensToMint(PriceOfBase) * PriceOfBasePAXG * 101 / 100) }(baseTokensToMint(PriceOfBase) * R_PAXG * 1e14 * 10000 / 9998, getPathForETHtoToken(PAXG), address(this), deadline); balance = msg.value - (balance - address(this).balance); // amount of eth left in this transaction // Mint the Tetraguard Token (basket of coins) _mint(msg.sender, baseTokensToMint(PriceOfBase) * 1e14); // Refund any leftover ETH that the contract has to the user, minus amount kept for basket. // This takes care of the ether portion of the basket, as well (bool successRefund,) = msg.sender.call{ value: (balance - amountEthInCoin(baseTokensToMint(PriceOfBase), PriceOfBaseEth)) }(""); require(successRefund, "Refund failed"); } /** @dev Exchanges your Tetraguard Tokens for Ether, by unwrapping the basket * of tokens and selling at market price * @param amount Amount of Tetraguard Token to exchange for Ether * @param deadline Deadline after which the transaction will revert if not processed * @param priceWBTC Min price (in wei) for one unit of wbtc * @param pricePAXG Min price (in wei) for one unit of paxg */ function sell(uint256 amount, uint256 deadline, uint256 priceWBTC, uint256 pricePAXG) external payable { require(balanceOf(msg.sender) >= amount, "Insufficient Tetraguard to sell"); require(deadline >= block.timestamp, "Deadline expired"); require(amount <= MAX_SELL_ORDER, "Sell exceeded maximum sale amount"); bool success; uint256 amountBaseToken = (amount / 1e14) * 1e14; // Get floor. Mimimum amount of Tetraguard Tokens to transact is .0001 require(amountBaseToken >= 1e14, "The minimum sale amount is .0001 token"); uint256 MinProceedsWBTC; uint256 MinProceedsPAXG; (MinProceedsWBTC, MinProceedsPAXG) = estimateProceeds(amountBaseToken); require(1e18 * MinProceedsWBTC / (amountBaseToken * R_WBTC) >= priceWBTC, "Minimum wbtc price not met."); require(1e18 * MinProceedsPAXG / (amountBaseToken * R_PAXG) >= pricePAXG, "Minimum paxg price not met."); uint256 coinValueStart = address(this).balance; // Swap PAXG and WBTC back to ETH require(IERC20(WBTC).approve(address(UNISWAP_ROUTER_ADDRESS), amountBaseToken * R_WBTC / 1e10), 'Approve failed'); uniswapRouter.swapExactTokensForETH(amountBaseToken * R_WBTC / 1e10, MinProceedsWBTC, getPathFoqTokentoETH(WBTC), address(this), deadline); // 1e10 accounts for 8 decimal places of WBTC, and that minimum purchase by this contract is 1e-4 require(IERC20(PAXG).approve(address(UNISWAP_ROUTER_ADDRESS), amountBaseToken * R_PAXG), 'Approve failed'); uniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(amountBaseToken * R_PAXG, MinProceedsPAXG, getPathFoqTokentoETH(PAXG), address(this), deadline); // Sell Quadrons qToken.sell(amountBaseToken * R_RESERVE); uint coinValueEnd = address(this).balance; uint proceedsFromSwap = coinValueEnd - coinValueStart + (amountBaseToken * R_ETH); // Transfer 2% transaction fee payable(RESERVE).transfer(proceedsFromSwap * 2 / 100); // transfer 2% fee to the Quadron _burn(msg.sender, amountBaseToken); // Transfer sale of Tetraguard Tokens (success,) = msg.sender.call{ value: (proceedsFromSwap * 98 / 100)}(""); require(success, "Payment failed"); } /** @dev reserveTokensToMint calculates the number of Quadrons to mint * @param tetraguardTokensToMint is the amount of base tokens */ function reserveTokensToMint(uint256 tetraguardTokensToMint) internal pure returns (uint256) { return tetraguardTokensToMint * R_RESERVE * 1e14; } /** @dev baseTokensToMint calculates the number of quadrons to mint * @param priceOfBase is the price of the base token in the basket */ function baseTokensToMint(uint256 priceOfBase) internal view returns (uint256) { require(priceOfBase > 0, "The price of base token must be greater than zero"); return msg.value / (101 * priceOfBase / 100); // 1.01 represents the 1% Tetraguard fee } /** @dev getPriceOfBase calculates the price (in wei) of the smallest tradable unit of Tetraguard. The smallest * tradable unit is .0001 Token (1e14). */ function getPriceOfBase() internal view returns (uint256, uint256, uint256, uint256, uint256) { // We need to find the average cost of each token, assuming we would trade the entire msg.value. // This is done to ensure there is sufficient liquidity for the swap. // Assumes 0.0001 token will cost at least 0.0001 Eth (1e14 wei) require(msg.value >= 1e14, "Insufficient ether sent to purchase 0.0001 token"); // Get the amount of tokens received in exchange for msg.value uint256 PAXGtoETH = uniswapRouter.getAmountsOut(msg.value, getPathForETHtoToken(PAXG))[1]; uint256 WBTCtoETH = uniswapRouter.getAmountsOut(msg.value, getPathForETHtoToken(WBTC))[1]; uint256 PriceOfBasePAXG; uint256 PriceOfBaseWBTC; uint256 PriceOfBaseEth = 1e14; // base price of Eth //*** Handle 3 scenarios in the event of future price changes: // 1) getAmountsOut < msg.value // This happens when price of the token is less than 1 Eth. // 2) getAmountsOut returns 0 // This happens when price of token is much greater than msg.value // 3) getAmountsOut returns 1 // This happens when the price of the token is very similar to msg.value // Process PAXG // Calculate the average price (wei) for 0.0001 tokens require(PAXGtoETH > 0, "The price of PAXG is too high for this amount of Eth."); PriceOfBasePAXG = 1e14 * msg.value / PAXGtoETH; require(PriceOfBasePAXG > 0, "The price of PAXG has dropped too low to trade."); // Process WBTC // Calculate the average price (wei) for 0.0001 tokens require(WBTCtoETH > 0, "The price of WBTC is too high for this amount of Eth."); PriceOfBaseWBTC = 1e4 * msg.value / WBTCtoETH; // 1e4 is required to scale WBTC, since it uses a fewer decimals than Eth. require(PriceOfBaseWBTC > 0, "The price of WBTC has dropped to low to trade."); // Process Quadron uint256 PriceOfReserveEth = qToken.quoteAvgPriceForTokens(msg.value); // Apply ratios of coins PriceOfBasePAXG = R_PAXG * PriceOfBasePAXG * 10000 / 9998; // (10000 / 9998) to account for the PAXG 0.02% fee; PriceOfBaseEth = R_ETH * PriceOfBaseEth; PriceOfBaseWBTC = R_WBTC * PriceOfBaseWBTC; PriceOfReserveEth = R_RESERVE * PriceOfReserveEth / 1e4; // Scale to 0.0001 quadrons // This is the lowest price (in WEI) of one unit of Tetraguard return (PriceOfBaseWBTC + PriceOfBasePAXG + PriceOfBaseEth + PriceOfReserveEth, PriceOfBaseWBTC, PriceOfBasePAXG, PriceOfBaseEth, PriceOfReserveEth); } /** @dev estimateProceeds calculates the price (in wei) of the sale proceeds * @param amount Amount of Tetraguard Token to exchange for Ether */ function estimateProceeds(uint256 amount) internal view returns (uint256, uint256) { // Get the amount of eth received uint256 PAXGtoETH = uniswapRouter.getAmountsOut(amount * R_PAXG, getPathFoqTokentoETH(PAXG))[1]; uint256 WBTCtoETH = uniswapRouter.getAmountsOut(amount * R_WBTC / 1e10, getPathFoqTokentoETH(WBTC))[1]; uint256 PriceOfBasePAXG; uint256 PriceOfBaseWBTC; // (10000 / 9998) to account for the PAXG 0.02% fee PriceOfBasePAXG = PAXGtoETH * 9998 / 10000; PriceOfBaseWBTC = WBTCtoETH; // This is the lowest price (in WEI) for the amount of Tetraguard return (PriceOfBaseWBTC, PriceOfBasePAXG); } function getPathForETHtoToken(address tokenAddress) private view returns (address[] memory) { address[] memory path = new address[](2); path[0] = uniswapRouter.WETH(); path[1] = tokenAddress; return path; } function getPathFoqTokentoETH(address tokenAddress) private view returns (address[] memory) { address[] memory path = new address[](2); path[0] = tokenAddress; path[1] = uniswapRouter.WETH(); return path; } /** @dev amountEthInCoin multiplies the tokens to mint by the base price of Eth * @param tokensToMint number of Tetraguard tokens to mint * @param priceOfBaseEth the price of eth * @return tokensToMint * priceOfBaseEth */ function amountEthInCoin(uint tokensToMint, uint priceOfBaseEth) private pure returns (uint) { // Calculate the amount of Ether in the coin return tokensToMint * priceOfBaseEth; } /** @dev Sets the address of the upgrade token * @param tokenAddress Address of the new token */ function setUpgradeToken(address tokenAddress) external isOwner { UPGRADE_TOKEN = tokenAddress; qToken.addApprovedToken(tokenAddress); } /** @dev Exchanges Tetraguard tokens for the upgraded token. This is an opt-in process. * @param amount Amount of Tetraguard tokens to upgrade * @return Unwrapped ether (wei) */ function upgradeToken(uint256 amount, address tokenHolder) external override returns (uint256) { require(UPGRADE_TOKEN != address(0)); require(msg.sender == UPGRADE_TOKEN, "Not authorized to upgrade"); require(balanceOf(tokenHolder) >= amount, "Insufficient Tetraguard to upgrade"); require(amount > 0, "Amount must be greater than zero"); _burn(tokenHolder, amount); // burn the old token // Transfer PAXG, WBTC, Quadron require(IERC20(WBTC).transfer(address(msg.sender), amount * R_WBTC / 1e10), "WBTC transfer failed"); require(IERC20(PAXG).transfer(msg.sender, amount * R_PAXG), "WBTC transfer failed"); require(qToken.transfer(msg.sender, amount * R_RESERVE), "Quadron transfer failed"); // Transfer Ether (bool success,) = msg.sender.call{ value: (amount * R_ETH)}(""); require(success, "Transfer Tetraguard ether failed."); return (amount * R_ETH); } receive() external payable { } fallback() external payable { } // @dev Modifier to allow a function callable only by the owner. modifier isOwner() { require(msg.sender == owner); _; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_quadron","type":"address"},{"internalType":"address","name":"_paxg","type":"address"},{"internalType":"address","name":"_wbtc","type":"address"},{"internalType":"address","name":"_uniswapRouter","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint256","name":"priceWBTC","type":"uint256"},{"internalType":"uint256","name":"pricePAXG","type":"uint256"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint256","name":"priceWBTC","type":"uint256"},{"internalType":"uint256","name":"pricePAXG","type":"uint256"}],"name":"sell","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"setUpgradeToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"tokenHolder","type":"address"}],"name":"upgradeToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162002c6138038062002c618339810160408190526200003491620001e6565b604080518082018252600a81526915195d1c9859dd585c9960b21b602080830191825283518085019094526005845264544554524160d81b908401528151919291620000839160039162000123565b5080516200009990600490602084019062000123565b5050600580546001600160a01b03199081166001600160a01b039485169081179092556006805482169785169788179055600c805433908316811790915560078054831690931790925560088054821696851696909617909555600980548616949093169390931790915550600a80548316909317909255600b8054909116909117905562000280565b828054620001319062000243565b90600052602060002090601f016020900481019282620001555760008555620001a0565b82601f106200017057805160ff1916838001178555620001a0565b82800160010185558215620001a0579182015b82811115620001a057825182559160200191906001019062000183565b50620001ae929150620001b2565b5090565b5b80821115620001ae5760008155600101620001b3565b80516001600160a01b0381168114620001e157600080fd5b919050565b60008060008060808587031215620001fd57600080fd5b6200020885620001c9565b93506200021860208601620001c9565b92506200022860408601620001c9565b91506200023860608601620001c9565b905092959194509250565b600181811c908216806200025857607f821691505b602082108114156200027a57634e487b7160e01b600052602260045260246000fd5b50919050565b6129d180620002906000396000f3fe6080604052600436106100e05760003560e01c806340993b2611610084578063a9059cbb11610056578063a9059cbb14610250578063bb5cc86514610270578063cbf9d06b14610290578063dd62ed3e146102b057005b806340993b26146101d257806370a08231146101e557806395d89b411461021b578063a457c2d71461023057005b806323b872dd116100bd57806323b872dd14610163578063313ce567146101835780633620875e1461019f57806339509351146101b257005b806306fdde03146100e9578063095ea7b31461011457806318160ddd1461014457005b366100e757005b005b3480156100f557600080fd5b506100fe6102f6565b60405161010b9190612517565b60405180910390f35b34801561012057600080fd5b5061013461012f366004612584565b610388565b604051901515815260200161010b565b34801561015057600080fd5b506002545b60405190815260200161010b565b34801561016f57600080fd5b5061013461017e3660046125b0565b61039e565b34801561018f57600080fd5b506040516012815260200161010b565b6100e76101ad3660046125f1565b61044d565b3480156101be57600080fd5b506101346101cd366004612584565b610b5a565b6100e76101e0366004612623565b610b96565b3480156101f157600080fd5b5061015561020036600461264f565b6001600160a01b031660009081526020819052604090205490565b34801561022757600080fd5b506100fe611155565b34801561023c57600080fd5b5061013461024b366004612584565b611164565b34801561025c57600080fd5b5061013461026b366004612584565b6111fd565b34801561027c57600080fd5b5061015561028b36600461266c565b61120a565b34801561029c57600080fd5b506100e76102ab36600461264f565b611693565b3480156102bc57600080fd5b506101556102cb36600461269c565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b606060038054610305906126ca565b80601f0160208091040260200160405190810160405280929190818152602001828054610331906126ca565b801561037e5780601f106103535761010080835404028352916020019161037e565b820191906000526020600020905b81548152906001019060200180831161036157829003601f168201915b5050505050905090565b6000610395338484611723565b50600192915050565b60006103ab848484611848565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156104355760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6104428533858403611723565b506001949350505050565b336000908152602081905260409020548411156104ac5760405162461bcd60e51b815260206004820152601f60248201527f496e73756666696369656e74205465747261677561726420746f2073656c6c00604482015260640161042c565b428310156104ef5760405162461bcd60e51b815260206004820152601060248201526f111958591b1a5b9948195e1c1a5c995960821b604482015260640161042c565b6954b40b1f852bda0000008411156105535760405162461bcd60e51b815260206004820152602160248201527f53656c6c206578636565646564206d6178696d756d2073616c6520616d6f756e6044820152601d60fa1b606482015260840161042c565b600080610566655af3107a40008761271b565b61057690655af3107a400061273d565b9050655af3107a40008110156105dd5760405162461bcd60e51b815260206004820152602660248201527f546865206d696e696d756d2073616c6520616d6f756e74206973202e30303031604482015265103a37b5b2b760d11b606482015260840161042c565b6000806105e983611a17565b9092509050856105fa60018561273d565b61060c84670de0b6b3a764000061273d565b610616919061271b565b10156106645760405162461bcd60e51b815260206004820152601b60248201527f4d696e696d756d2077627463207072696365206e6f74206d65742e0000000000604482015260640161042c565b84610670601a8561273d565b61068283670de0b6b3a764000061273d565b61068c919061271b565b10156106da5760405162461bcd60e51b815260206004820152601b60248201527f4d696e696d756d2070617867207072696365206e6f74206d65742e0000000000604482015260640161042c565b60095460075447916001600160a01b039081169163095ea7b391166402540be40061070660018961273d565b610710919061271b565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af115801561075b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077f919061275c565b6107bc5760405162461bcd60e51b815260206004820152600e60248201526d105c1c1c9bdd994819985a5b195960921b604482015260640161042c565b6005546001600160a01b03166318cbafe56402540be4006107de60018861273d565b6107e8919061271b565b60095486906107ff906001600160a01b0316611bbf565b308d6040518663ffffffff1660e01b81526004016108219594939291906127c2565b6000604051808303816000875af1158015610840573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108689190810190612814565b506008546007546001600160a01b039182169163095ea7b3911661088d601a8861273d565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156108d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fc919061275c565b6109395760405162461bcd60e51b815260206004820152600e60248201526d105c1c1c9bdd994819985a5b195960921b604482015260640161042c565b6005546001600160a01b031663791ac947610955601a8761273d565b600854859061096c906001600160a01b0316611bbf565b308d6040518663ffffffff1660e01b815260040161098e9594939291906127c2565b600060405180830381600087803b1580156109a857600080fd5b505af11580156109bc573d6000803e3d6000fd5b50506006546001600160a01b0316915063e4849b3290506109df615c508761273d565b6040518263ffffffff1660e01b81526004016109fd91815260200190565b600060405180830381600087803b158015610a1757600080fd5b505af1158015610a2b573d6000803e3d6000fd5b5047925060009150610a409050600d8761273d565b610a4a84846128d2565b610a5491906128e9565b600a549091506001600160a01b03166108fc6064610a7384600261273d565b610a7d919061271b565b6040518115909202916000818181858888f19350505050158015610aa5573d6000803e3d6000fd5b50610ab03387611ca6565b336064610abe83606261273d565b610ac8919061271b565b604051600081818185875af1925050503d8060008114610b04576040519150601f19603f3d011682016040523d82523d6000602084013e610b09565b606091505b50508097505086610b4d5760405162461bcd60e51b815260206004820152600e60248201526d14185e5b595b9d0819985a5b195960921b604482015260640161042c565b5050505050505050505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610395918590610b919086906128e9565b611723565b42831015610bd95760405162461bcd60e51b815260206004820152601060248201526f111958591b1a5b9948195e1c1a5c995960821b604482015260640161042c565b686c6b935b8bbd400000341115610c435760405162461bcd60e51b815260206004820152602860248201527f42757920657863656564656420746865206d6178696d756d20707572636861736044820152671948185b5bdd5b9d60c21b606482015260840161042c565b60008080808047610c52611dec565b9399509197509550935091506001610c698761229c565b1015610ccd5760405162461bcd60e51b815260206004820152602d60248201527f4e6f7420656e6f75676820457468657220746f207075726368617365202e303060448201526c0c0c4815195d1c9859dd585c99609a1b606482015260840161042c565b876001610cdc8761271061273d565b610ce6919061271b565b1115610d345760405162461bcd60e51b815260206004820152601c60248201527f4d6178696d756d20776274632070726963652065786365656465642e00000000604482015260640161042c565b86601a610d438661271061273d565b610d4d919061271b565b1115610d9b5760405162461bcd60e51b815260206004820152601c60248201527f4d6178696d756d20706178672070726963652065786365656465642e00000000604482015260640161042c565b600a546001600160a01b03166108fc6064610db58961229c565b610dbf908a61273d565b610dca90600161273d565b610dd4919061271b565b6040518115909202916000818181858888f19350505050158015610dfc573d6000803e3d6000fd5b506006546001600160a01b031663d96a094a606484610e1a8a61229c565b610e24919061273d565b610e2f90606561273d565b610e39919061271b565b610e4a610e458a61229c565b61232e565b6040518363ffffffff1660e01b8152600401610e6891815260200190565b6000604051808303818588803b158015610e8157600080fd5b505af1158015610e95573d6000803e3d6000fd5b50506005546001600160a01b0316925063fb3bdb4191506064905087610eba8a61229c565b610ec4919061273d565b610ecf90606561273d565b610ed9919061271b565b6001610ee48a61229c565b610eee919061273d565b610efa9061271061273d565b600954610f0f906001600160a01b031661234c565b308e6040518663ffffffff1660e01b8152600401610f309493929190612901565b60006040518083038185885af1158015610f4e573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052610f779190810190612814565b506005546001600160a01b031663fb3bdb41606486610f958a61229c565b610f9f919061273d565b610faa90606561273d565b610fb4919061271b565b61270e601a610fc28b61229c565b610fcc919061273d565b610fdc90655af3107a400061273d565b610fe89061271061273d565b610ff2919061271b565b600854611007906001600160a01b031661234c565b308e6040518663ffffffff1660e01b81526004016110289493929190612901565b60006040518083038185885af1158015611046573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f1916820160405261106f9190810190612814565b5061107a47826128d2565b61108490346128d2565b90506110a8336110938861229c565b6110a390655af3107a400061273d565b612425565b6000336110bd6110b78961229c565b86612504565b6110c790846128d2565b604051600081818185875af1925050503d8060008114611103576040519150601f19603f3d011682016040523d82523d6000602084013e611108565b606091505b50509050806111495760405162461bcd60e51b815260206004820152600d60248201526c1499599d5b990819985a5b1959609a1b604482015260640161042c565b50505050505050505050565b606060048054610305906126ca565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156111e65760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161042c565b6111f33385858403611723565b5060019392505050565b6000610395338484611848565b600b546000906001600160a01b031661122257600080fd5b600b546001600160a01b0316331461127c5760405162461bcd60e51b815260206004820152601960248201527f4e6f7420617574686f72697a656420746f207570677261646500000000000000604482015260640161042c565b8261129c836001600160a01b031660009081526020819052604090205490565b10156112f55760405162461bcd60e51b815260206004820152602260248201527f496e73756666696369656e74205465747261677561726420746f207570677261604482015261646560f01b606482015260840161042c565b600083116113455760405162461bcd60e51b815260206004820181905260248201527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f604482015260640161042c565b61134f8284611ca6565b6009546001600160a01b031663a9059cbb336402540be40061137260018861273d565b61137c919061271b565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156113c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113eb919061275c565b61142e5760405162461bcd60e51b815260206004820152601460248201527315d09510c81d1c985b9cd9995c8819985a5b195960621b604482015260640161042c565b6008546001600160a01b031663a9059cbb3361144b601a8761273d565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611496573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ba919061275c565b6114fd5760405162461bcd60e51b815260206004820152601460248201527315d09510c81d1c985b9cd9995c8819985a5b195960621b604482015260640161042c565b6006546001600160a01b031663a9059cbb3361151b615c508761273d565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611566573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061158a919061275c565b6115d65760405162461bcd60e51b815260206004820152601760248201527f51756164726f6e207472616e73666572206661696c6564000000000000000000604482015260640161042c565b6000336115e4600d8661273d565b604051600081818185875af1925050503d8060008114611620576040519150601f19603f3d011682016040523d82523d6000602084013e611625565b606091505b50509050806116805760405162461bcd60e51b815260206004820152602160248201527f5472616e736665722054657472616775617264206574686572206661696c65646044820152601760f91b606482015260840161042c565b61168b600d8561273d565b949350505050565b600c546001600160a01b031633146116aa57600080fd5b600b80546001600160a01b0319166001600160a01b0383811691821790925560065460405163cd10534b60e01b815260048101929092529091169063cd10534b90602401600060405180830381600087803b15801561170857600080fd5b505af115801561171c573d6000803e3d6000fd5b5050505050565b6001600160a01b0383166117855760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161042c565b6001600160a01b0382166117e65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161042c565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166118ac5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161042c565b6001600160a01b03821661190e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161042c565b6001600160a01b038316600090815260208190526040902054818110156119865760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161042c565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906119bd9084906128e9565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a0991815260200190565b60405180910390a350505050565b600554600090819081906001600160a01b031663d06ca61f611a3a601a8761273d565b600854611a4f906001600160a01b0316611bbf565b6040518363ffffffff1660e01b8152600401611a6c929190612936565b600060405180830381865afa158015611a89573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611ab19190810190612814565b600181518110611ac357611ac361294f565b60209081029190910101516005549091506000906001600160a01b031663d06ca61f6402540be400611af660018961273d565b611b00919061271b565b600954611b15906001600160a01b0316611bbf565b6040518363ffffffff1660e01b8152600401611b32929190612936565b600060405180830381865afa158015611b4f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b779190810190612814565b600181518110611b8957611b8961294f565b602002602001015190506000806127108461270e611ba7919061273d565b611bb1919061271b565b929792965091945050505050565b604080516002808252606080830184529260009291906020830190803683370190505090508281600081518110611bf857611bf861294f565b6001600160a01b03928316602091820292909201810191909152600554604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611c51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c759190612965565b81600181518110611c8857611c8861294f565b6001600160a01b039092166020928302919091019091015292915050565b6001600160a01b038216611d065760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161042c565b6001600160a01b03821660009081526020819052604090205481811015611d7a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161042c565b6001600160a01b0383166000908152602081905260408120838303905560028054849290611da99084906128d2565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200161183b565b6000806000806000655af3107a4000341015611e635760405162461bcd60e51b815260206004820152603060248201527f496e73756666696369656e742065746865722073656e7420746f20707572636860448201526f30b9b290181718181818903a37b5b2b760811b606482015260840161042c565b6005546008546000916001600160a01b039081169163d06ca61f913491611e8a911661234c565b6040518363ffffffff1660e01b8152600401611ea7929190612936565b600060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611eec9190810190612814565b600181518110611efe57611efe61294f565b60209081029190910101516005546009549192506000916001600160a01b039182169163d06ca61f913491611f33911661234c565b6040518363ffffffff1660e01b8152600401611f50929190612936565b600060405180830381865afa158015611f6d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f959190810190612814565b600181518110611fa757611fa761294f565b602002602001015190506000806000655af3107a400090506000851161202d5760405162461bcd60e51b815260206004820152603560248201527f546865207072696365206f66205041584720697320746f6f206869676820666f60448201527439103a3434b99030b6b7bab73a1037b31022ba341760591b606482015260840161042c565b8461203e34655af3107a400061273d565b612048919061271b565b9250600083116120b25760405162461bcd60e51b815260206004820152602f60248201527f546865207072696365206f662050415847206861732064726f7070656420746f60448201526e37903637bb903a37903a3930b2329760891b606482015260840161042c565b600084116121205760405162461bcd60e51b815260206004820152603560248201527f546865207072696365206f66205742544320697320746f6f206869676820666f60448201527439103a3434b99030b6b7bab73a1037b31022ba341760591b606482015260840161042c565b8361212d3461271061273d565b612137919061271b565b9150600082116121a05760405162461bcd60e51b815260206004820152602e60248201527f546865207072696365206f662057425443206861732064726f7070656420746f60448201526d103637bb903a37903a3930b2329760911b606482015260840161042c565b600654604051633a102fa360e11b81523460048201526000916001600160a01b0316906374205f4690602401602060405180830381865afa1580156121e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061220d9190612982565b905061270e61221d85601a61273d565b6122299061271061273d565b612233919061271b565b935061224082600d61273d565b915061224d83600161273d565b925061271061225e82615c5061273d565b612268919061271b565b9050808261227686866128e9565b61228091906128e9565b61228a91906128e9565b9b929a50929850965090945092505050565b60008082116123075760405162461bcd60e51b815260206004820152603160248201527f546865207072696365206f66206261736520746f6b656e206d7573742062652060448201527067726561746572207468616e207a65726f60781b606482015260840161042c565b606461231483606561273d565b61231e919061271b565b612328903461271b565b92915050565b600061233c615c508361273d565b61232890655af3107a400061273d565b604080516002808252606080830184529260009291906020830190803683375050600554604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156123ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123de9190612965565b816000815181106123f1576123f161294f565b60200260200101906001600160a01b031690816001600160a01b0316815250508281600181518110611c8857611c8861294f565b6001600160a01b03821661247b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161042c565b806002600082825461248d91906128e9565b90915550506001600160a01b038216600090815260208190526040812080548392906124ba9084906128e9565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000612510828461273d565b9392505050565b600060208083528351808285015260005b8181101561254457858101830151858201604001528201612528565b81811115612556576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461258157600080fd5b50565b6000806040838503121561259757600080fd5b82356125a28161256c565b946020939093013593505050565b6000806000606084860312156125c557600080fd5b83356125d08161256c565b925060208401356125e08161256c565b929592945050506040919091013590565b6000806000806080858703121561260757600080fd5b5050823594602084013594506040840135936060013592509050565b60008060006060848603121561263857600080fd5b505081359360208301359350604090920135919050565b60006020828403121561266157600080fd5b81356125108161256c565b6000806040838503121561267f57600080fd5b8235915060208301356126918161256c565b809150509250929050565b600080604083850312156126af57600080fd5b82356126ba8161256c565b915060208301356126918161256c565b600181811c908216806126de57607f821691505b602082108114156126ff57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008261273857634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561275757612757612705565b500290565b60006020828403121561276e57600080fd5b8151801515811461251057600080fd5b600081518084526020808501945080840160005b838110156127b75781516001600160a01b031687529582019590820190600101612792565b509495945050505050565b85815284602082015260a0604082015260006127e160a083018661277e565b6001600160a01b0394909416606083015250608001529392505050565b634e487b7160e01b600052604160045260246000fd5b6000602080838503121561282757600080fd5b825167ffffffffffffffff8082111561283f57600080fd5b818501915085601f83011261285357600080fd5b815181811115612865576128656127fe565b8060051b604051601f19603f8301168101818110858211171561288a5761288a6127fe565b6040529182528482019250838101850191888311156128a857600080fd5b938501935b828510156128c6578451845293850193928501926128ad565b98975050505050505050565b6000828210156128e4576128e4612705565b500390565b600082198211156128fc576128fc612705565b500190565b84815260806020820152600061291a608083018661277e565b6001600160a01b03949094166040830152506060015292915050565b82815260406020820152600061168b604083018461277e565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561297757600080fd5b81516125108161256c565b60006020828403121561299457600080fd5b505191905056fea2646970667358221220a49d30bbbb7920a36f29c866ad93c0e3a78f89c10244143e3c781080d99f1b9564736f6c634300080b0033000000000000000000000000b6ef1d5955d5db7d62c0025c25aab1ba9ceb2a6200000000000000000000000045804880de22913dafe09f4980848ece6ecbaf780000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c5990000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Deployed Bytecode
0x6080604052600436106100e05760003560e01c806340993b2611610084578063a9059cbb11610056578063a9059cbb14610250578063bb5cc86514610270578063cbf9d06b14610290578063dd62ed3e146102b057005b806340993b26146101d257806370a08231146101e557806395d89b411461021b578063a457c2d71461023057005b806323b872dd116100bd57806323b872dd14610163578063313ce567146101835780633620875e1461019f57806339509351146101b257005b806306fdde03146100e9578063095ea7b31461011457806318160ddd1461014457005b366100e757005b005b3480156100f557600080fd5b506100fe6102f6565b60405161010b9190612517565b60405180910390f35b34801561012057600080fd5b5061013461012f366004612584565b610388565b604051901515815260200161010b565b34801561015057600080fd5b506002545b60405190815260200161010b565b34801561016f57600080fd5b5061013461017e3660046125b0565b61039e565b34801561018f57600080fd5b506040516012815260200161010b565b6100e76101ad3660046125f1565b61044d565b3480156101be57600080fd5b506101346101cd366004612584565b610b5a565b6100e76101e0366004612623565b610b96565b3480156101f157600080fd5b5061015561020036600461264f565b6001600160a01b031660009081526020819052604090205490565b34801561022757600080fd5b506100fe611155565b34801561023c57600080fd5b5061013461024b366004612584565b611164565b34801561025c57600080fd5b5061013461026b366004612584565b6111fd565b34801561027c57600080fd5b5061015561028b36600461266c565b61120a565b34801561029c57600080fd5b506100e76102ab36600461264f565b611693565b3480156102bc57600080fd5b506101556102cb36600461269c565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b606060038054610305906126ca565b80601f0160208091040260200160405190810160405280929190818152602001828054610331906126ca565b801561037e5780601f106103535761010080835404028352916020019161037e565b820191906000526020600020905b81548152906001019060200180831161036157829003601f168201915b5050505050905090565b6000610395338484611723565b50600192915050565b60006103ab848484611848565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156104355760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6104428533858403611723565b506001949350505050565b336000908152602081905260409020548411156104ac5760405162461bcd60e51b815260206004820152601f60248201527f496e73756666696369656e74205465747261677561726420746f2073656c6c00604482015260640161042c565b428310156104ef5760405162461bcd60e51b815260206004820152601060248201526f111958591b1a5b9948195e1c1a5c995960821b604482015260640161042c565b6954b40b1f852bda0000008411156105535760405162461bcd60e51b815260206004820152602160248201527f53656c6c206578636565646564206d6178696d756d2073616c6520616d6f756e6044820152601d60fa1b606482015260840161042c565b600080610566655af3107a40008761271b565b61057690655af3107a400061273d565b9050655af3107a40008110156105dd5760405162461bcd60e51b815260206004820152602660248201527f546865206d696e696d756d2073616c6520616d6f756e74206973202e30303031604482015265103a37b5b2b760d11b606482015260840161042c565b6000806105e983611a17565b9092509050856105fa60018561273d565b61060c84670de0b6b3a764000061273d565b610616919061271b565b10156106645760405162461bcd60e51b815260206004820152601b60248201527f4d696e696d756d2077627463207072696365206e6f74206d65742e0000000000604482015260640161042c565b84610670601a8561273d565b61068283670de0b6b3a764000061273d565b61068c919061271b565b10156106da5760405162461bcd60e51b815260206004820152601b60248201527f4d696e696d756d2070617867207072696365206e6f74206d65742e0000000000604482015260640161042c565b60095460075447916001600160a01b039081169163095ea7b391166402540be40061070660018961273d565b610710919061271b565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af115801561075b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077f919061275c565b6107bc5760405162461bcd60e51b815260206004820152600e60248201526d105c1c1c9bdd994819985a5b195960921b604482015260640161042c565b6005546001600160a01b03166318cbafe56402540be4006107de60018861273d565b6107e8919061271b565b60095486906107ff906001600160a01b0316611bbf565b308d6040518663ffffffff1660e01b81526004016108219594939291906127c2565b6000604051808303816000875af1158015610840573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108689190810190612814565b506008546007546001600160a01b039182169163095ea7b3911661088d601a8861273d565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156108d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fc919061275c565b6109395760405162461bcd60e51b815260206004820152600e60248201526d105c1c1c9bdd994819985a5b195960921b604482015260640161042c565b6005546001600160a01b031663791ac947610955601a8761273d565b600854859061096c906001600160a01b0316611bbf565b308d6040518663ffffffff1660e01b815260040161098e9594939291906127c2565b600060405180830381600087803b1580156109a857600080fd5b505af11580156109bc573d6000803e3d6000fd5b50506006546001600160a01b0316915063e4849b3290506109df615c508761273d565b6040518263ffffffff1660e01b81526004016109fd91815260200190565b600060405180830381600087803b158015610a1757600080fd5b505af1158015610a2b573d6000803e3d6000fd5b5047925060009150610a409050600d8761273d565b610a4a84846128d2565b610a5491906128e9565b600a549091506001600160a01b03166108fc6064610a7384600261273d565b610a7d919061271b565b6040518115909202916000818181858888f19350505050158015610aa5573d6000803e3d6000fd5b50610ab03387611ca6565b336064610abe83606261273d565b610ac8919061271b565b604051600081818185875af1925050503d8060008114610b04576040519150601f19603f3d011682016040523d82523d6000602084013e610b09565b606091505b50508097505086610b4d5760405162461bcd60e51b815260206004820152600e60248201526d14185e5b595b9d0819985a5b195960921b604482015260640161042c565b5050505050505050505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610395918590610b919086906128e9565b611723565b42831015610bd95760405162461bcd60e51b815260206004820152601060248201526f111958591b1a5b9948195e1c1a5c995960821b604482015260640161042c565b686c6b935b8bbd400000341115610c435760405162461bcd60e51b815260206004820152602860248201527f42757920657863656564656420746865206d6178696d756d20707572636861736044820152671948185b5bdd5b9d60c21b606482015260840161042c565b60008080808047610c52611dec565b9399509197509550935091506001610c698761229c565b1015610ccd5760405162461bcd60e51b815260206004820152602d60248201527f4e6f7420656e6f75676820457468657220746f207075726368617365202e303060448201526c0c0c4815195d1c9859dd585c99609a1b606482015260840161042c565b876001610cdc8761271061273d565b610ce6919061271b565b1115610d345760405162461bcd60e51b815260206004820152601c60248201527f4d6178696d756d20776274632070726963652065786365656465642e00000000604482015260640161042c565b86601a610d438661271061273d565b610d4d919061271b565b1115610d9b5760405162461bcd60e51b815260206004820152601c60248201527f4d6178696d756d20706178672070726963652065786365656465642e00000000604482015260640161042c565b600a546001600160a01b03166108fc6064610db58961229c565b610dbf908a61273d565b610dca90600161273d565b610dd4919061271b565b6040518115909202916000818181858888f19350505050158015610dfc573d6000803e3d6000fd5b506006546001600160a01b031663d96a094a606484610e1a8a61229c565b610e24919061273d565b610e2f90606561273d565b610e39919061271b565b610e4a610e458a61229c565b61232e565b6040518363ffffffff1660e01b8152600401610e6891815260200190565b6000604051808303818588803b158015610e8157600080fd5b505af1158015610e95573d6000803e3d6000fd5b50506005546001600160a01b0316925063fb3bdb4191506064905087610eba8a61229c565b610ec4919061273d565b610ecf90606561273d565b610ed9919061271b565b6001610ee48a61229c565b610eee919061273d565b610efa9061271061273d565b600954610f0f906001600160a01b031661234c565b308e6040518663ffffffff1660e01b8152600401610f309493929190612901565b60006040518083038185885af1158015610f4e573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052610f779190810190612814565b506005546001600160a01b031663fb3bdb41606486610f958a61229c565b610f9f919061273d565b610faa90606561273d565b610fb4919061271b565b61270e601a610fc28b61229c565b610fcc919061273d565b610fdc90655af3107a400061273d565b610fe89061271061273d565b610ff2919061271b565b600854611007906001600160a01b031661234c565b308e6040518663ffffffff1660e01b81526004016110289493929190612901565b60006040518083038185885af1158015611046573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f1916820160405261106f9190810190612814565b5061107a47826128d2565b61108490346128d2565b90506110a8336110938861229c565b6110a390655af3107a400061273d565b612425565b6000336110bd6110b78961229c565b86612504565b6110c790846128d2565b604051600081818185875af1925050503d8060008114611103576040519150601f19603f3d011682016040523d82523d6000602084013e611108565b606091505b50509050806111495760405162461bcd60e51b815260206004820152600d60248201526c1499599d5b990819985a5b1959609a1b604482015260640161042c565b50505050505050505050565b606060048054610305906126ca565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156111e65760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161042c565b6111f33385858403611723565b5060019392505050565b6000610395338484611848565b600b546000906001600160a01b031661122257600080fd5b600b546001600160a01b0316331461127c5760405162461bcd60e51b815260206004820152601960248201527f4e6f7420617574686f72697a656420746f207570677261646500000000000000604482015260640161042c565b8261129c836001600160a01b031660009081526020819052604090205490565b10156112f55760405162461bcd60e51b815260206004820152602260248201527f496e73756666696369656e74205465747261677561726420746f207570677261604482015261646560f01b606482015260840161042c565b600083116113455760405162461bcd60e51b815260206004820181905260248201527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f604482015260640161042c565b61134f8284611ca6565b6009546001600160a01b031663a9059cbb336402540be40061137260018861273d565b61137c919061271b565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156113c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113eb919061275c565b61142e5760405162461bcd60e51b815260206004820152601460248201527315d09510c81d1c985b9cd9995c8819985a5b195960621b604482015260640161042c565b6008546001600160a01b031663a9059cbb3361144b601a8761273d565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611496573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ba919061275c565b6114fd5760405162461bcd60e51b815260206004820152601460248201527315d09510c81d1c985b9cd9995c8819985a5b195960621b604482015260640161042c565b6006546001600160a01b031663a9059cbb3361151b615c508761273d565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611566573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061158a919061275c565b6115d65760405162461bcd60e51b815260206004820152601760248201527f51756164726f6e207472616e73666572206661696c6564000000000000000000604482015260640161042c565b6000336115e4600d8661273d565b604051600081818185875af1925050503d8060008114611620576040519150601f19603f3d011682016040523d82523d6000602084013e611625565b606091505b50509050806116805760405162461bcd60e51b815260206004820152602160248201527f5472616e736665722054657472616775617264206574686572206661696c65646044820152601760f91b606482015260840161042c565b61168b600d8561273d565b949350505050565b600c546001600160a01b031633146116aa57600080fd5b600b80546001600160a01b0319166001600160a01b0383811691821790925560065460405163cd10534b60e01b815260048101929092529091169063cd10534b90602401600060405180830381600087803b15801561170857600080fd5b505af115801561171c573d6000803e3d6000fd5b5050505050565b6001600160a01b0383166117855760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161042c565b6001600160a01b0382166117e65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161042c565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166118ac5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161042c565b6001600160a01b03821661190e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161042c565b6001600160a01b038316600090815260208190526040902054818110156119865760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161042c565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906119bd9084906128e9565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a0991815260200190565b60405180910390a350505050565b600554600090819081906001600160a01b031663d06ca61f611a3a601a8761273d565b600854611a4f906001600160a01b0316611bbf565b6040518363ffffffff1660e01b8152600401611a6c929190612936565b600060405180830381865afa158015611a89573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611ab19190810190612814565b600181518110611ac357611ac361294f565b60209081029190910101516005549091506000906001600160a01b031663d06ca61f6402540be400611af660018961273d565b611b00919061271b565b600954611b15906001600160a01b0316611bbf565b6040518363ffffffff1660e01b8152600401611b32929190612936565b600060405180830381865afa158015611b4f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b779190810190612814565b600181518110611b8957611b8961294f565b602002602001015190506000806127108461270e611ba7919061273d565b611bb1919061271b565b929792965091945050505050565b604080516002808252606080830184529260009291906020830190803683370190505090508281600081518110611bf857611bf861294f565b6001600160a01b03928316602091820292909201810191909152600554604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611c51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c759190612965565b81600181518110611c8857611c8861294f565b6001600160a01b039092166020928302919091019091015292915050565b6001600160a01b038216611d065760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161042c565b6001600160a01b03821660009081526020819052604090205481811015611d7a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161042c565b6001600160a01b0383166000908152602081905260408120838303905560028054849290611da99084906128d2565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200161183b565b6000806000806000655af3107a4000341015611e635760405162461bcd60e51b815260206004820152603060248201527f496e73756666696369656e742065746865722073656e7420746f20707572636860448201526f30b9b290181718181818903a37b5b2b760811b606482015260840161042c565b6005546008546000916001600160a01b039081169163d06ca61f913491611e8a911661234c565b6040518363ffffffff1660e01b8152600401611ea7929190612936565b600060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611eec9190810190612814565b600181518110611efe57611efe61294f565b60209081029190910101516005546009549192506000916001600160a01b039182169163d06ca61f913491611f33911661234c565b6040518363ffffffff1660e01b8152600401611f50929190612936565b600060405180830381865afa158015611f6d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f959190810190612814565b600181518110611fa757611fa761294f565b602002602001015190506000806000655af3107a400090506000851161202d5760405162461bcd60e51b815260206004820152603560248201527f546865207072696365206f66205041584720697320746f6f206869676820666f60448201527439103a3434b99030b6b7bab73a1037b31022ba341760591b606482015260840161042c565b8461203e34655af3107a400061273d565b612048919061271b565b9250600083116120b25760405162461bcd60e51b815260206004820152602f60248201527f546865207072696365206f662050415847206861732064726f7070656420746f60448201526e37903637bb903a37903a3930b2329760891b606482015260840161042c565b600084116121205760405162461bcd60e51b815260206004820152603560248201527f546865207072696365206f66205742544320697320746f6f206869676820666f60448201527439103a3434b99030b6b7bab73a1037b31022ba341760591b606482015260840161042c565b8361212d3461271061273d565b612137919061271b565b9150600082116121a05760405162461bcd60e51b815260206004820152602e60248201527f546865207072696365206f662057425443206861732064726f7070656420746f60448201526d103637bb903a37903a3930b2329760911b606482015260840161042c565b600654604051633a102fa360e11b81523460048201526000916001600160a01b0316906374205f4690602401602060405180830381865afa1580156121e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061220d9190612982565b905061270e61221d85601a61273d565b6122299061271061273d565b612233919061271b565b935061224082600d61273d565b915061224d83600161273d565b925061271061225e82615c5061273d565b612268919061271b565b9050808261227686866128e9565b61228091906128e9565b61228a91906128e9565b9b929a50929850965090945092505050565b60008082116123075760405162461bcd60e51b815260206004820152603160248201527f546865207072696365206f66206261736520746f6b656e206d7573742062652060448201527067726561746572207468616e207a65726f60781b606482015260840161042c565b606461231483606561273d565b61231e919061271b565b612328903461271b565b92915050565b600061233c615c508361273d565b61232890655af3107a400061273d565b604080516002808252606080830184529260009291906020830190803683375050600554604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156123ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123de9190612965565b816000815181106123f1576123f161294f565b60200260200101906001600160a01b031690816001600160a01b0316815250508281600181518110611c8857611c8861294f565b6001600160a01b03821661247b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161042c565b806002600082825461248d91906128e9565b90915550506001600160a01b038216600090815260208190526040812080548392906124ba9084906128e9565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000612510828461273d565b9392505050565b600060208083528351808285015260005b8181101561254457858101830151858201604001528201612528565b81811115612556576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461258157600080fd5b50565b6000806040838503121561259757600080fd5b82356125a28161256c565b946020939093013593505050565b6000806000606084860312156125c557600080fd5b83356125d08161256c565b925060208401356125e08161256c565b929592945050506040919091013590565b6000806000806080858703121561260757600080fd5b5050823594602084013594506040840135936060013592509050565b60008060006060848603121561263857600080fd5b505081359360208301359350604090920135919050565b60006020828403121561266157600080fd5b81356125108161256c565b6000806040838503121561267f57600080fd5b8235915060208301356126918161256c565b809150509250929050565b600080604083850312156126af57600080fd5b82356126ba8161256c565b915060208301356126918161256c565b600181811c908216806126de57607f821691505b602082108114156126ff57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008261273857634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561275757612757612705565b500290565b60006020828403121561276e57600080fd5b8151801515811461251057600080fd5b600081518084526020808501945080840160005b838110156127b75781516001600160a01b031687529582019590820190600101612792565b509495945050505050565b85815284602082015260a0604082015260006127e160a083018661277e565b6001600160a01b0394909416606083015250608001529392505050565b634e487b7160e01b600052604160045260246000fd5b6000602080838503121561282757600080fd5b825167ffffffffffffffff8082111561283f57600080fd5b818501915085601f83011261285357600080fd5b815181811115612865576128656127fe565b8060051b604051601f19603f8301168101818110858211171561288a5761288a6127fe565b6040529182528482019250838101850191888311156128a857600080fd5b938501935b828510156128c6578451845293850193928501926128ad565b98975050505050505050565b6000828210156128e4576128e4612705565b500390565b600082198211156128fc576128fc612705565b500190565b84815260806020820152600061291a608083018661277e565b6001600160a01b03949094166040830152506060015292915050565b82815260406020820152600061168b604083018461277e565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561297757600080fd5b81516125108161256c565b60006020828403121561299457600080fd5b505191905056fea2646970667358221220a49d30bbbb7920a36f29c866ad93c0e3a78f89c10244143e3c781080d99f1b9564736f6c634300080b0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000b6ef1d5955d5db7d62c0025c25aab1ba9ceb2a6200000000000000000000000045804880de22913dafe09f4980848ece6ecbaf780000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c5990000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
-----Decoded View---------------
Arg [0] : _quadron (address): 0xb6eF1d5955D5Db7d62C0025c25aab1Ba9ceb2a62
Arg [1] : _paxg (address): 0x45804880De22913dAFE09f4980848ECE6EcbAf78
Arg [2] : _wbtc (address): 0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599
Arg [3] : _uniswapRouter (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000b6ef1d5955d5db7d62c0025c25aab1ba9ceb2a62
Arg [1] : 00000000000000000000000045804880de22913dafe09f4980848ece6ecbaf78
Arg [2] : 0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599
Arg [3] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Deployed Bytecode Sourcemap
21600:15220:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6172:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8339:169;;;;;;;;;;-1:-1:-1;8339:169:0;;;;;:::i;:::-;;:::i;:::-;;;1237:14:1;;1230:22;1212:41;;1200:2;1185:18;8339:169:0;1072:187:1;7292:108:0;;;;;;;;;;-1:-1:-1;7380:12:0;;7292:108;;;1410:25:1;;;1398:2;1383:18;7292:108:0;1264:177:1;8990:492:0;;;;;;;;;;-1:-1:-1;8990:492:0;;;;;:::i;:::-;;:::i;7134:93::-;;;;;;;;;;-1:-1:-1;7134:93:0;;7217:2;2049:36:1;;2037:2;2022:18;7134:93:0;1907:184:1;27161:2358:0;;;;;;:::i;:::-;;:::i;9891:215::-;;;;;;;;;;-1:-1:-1;9891:215:0;;;;;:::i;:::-;;:::i;23965:2753::-;;;;;;:::i;:::-;;:::i;7463:127::-;;;;;;;;;;-1:-1:-1;7463:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;7564:18:0;7537:7;7564:18;;;;;;;;;;;;7463:127;6391:104;;;;;;;;;;;;;:::i;10609:413::-;;;;;;;;;;-1:-1:-1;10609:413:0;;;;;:::i;:::-;;:::i;7803:175::-;;;;;;;;;;-1:-1:-1;7803:175:0;;;;;:::i;:::-;;:::i;35579:985::-;;;;;;;;;;-1:-1:-1;35579:985:0;;;;;:::i;:::-;;:::i;35208:159::-;;;;;;;;;;-1:-1:-1;35208:159:0;;;;;:::i;:::-;;:::i;8041:151::-;;;;;;;;;;-1:-1:-1;8041:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;8157:18:0;;;8130:7;8157:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;8041:151;6172:100;6226:13;6259:5;6252:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6172:100;:::o;8339:169::-;8422:4;8439:39;4029:10;8462:7;8471:6;8439:8;:39::i;:::-;-1:-1:-1;8496:4:0;8339:169;;;;:::o;8990:492::-;9130:4;9147:36;9157:6;9165:9;9176:6;9147:9;:36::i;:::-;-1:-1:-1;;;;;9223:19:0;;9196:24;9223:19;;;:11;:19;;;;;;;;4029:10;9223:33;;;;;;;;9275:26;;;;9267:79;;;;-1:-1:-1;;;9267:79:0;;4359:2:1;9267:79:0;;;4341:21:1;4398:2;4378:18;;;4371:30;4437:34;4417:18;;;4410:62;-1:-1:-1;;;4488:18:1;;;4481:38;4536:19;;9267:79:0;;;;;;;;;9382:57;9391:6;4029:10;9432:6;9413:16;:25;9382:8;:57::i;:::-;-1:-1:-1;9470:4:0;;8990:492;-1:-1:-1;;;;8990:492:0:o;27161:2358::-;27293:10;7537:7;7564:18;;;;;;;;;;;27308:6;-1:-1:-1;27283:31:0;27275:75;;;;-1:-1:-1;;;27275:75:0;;4768:2:1;27275:75:0;;;4750:21:1;4807:2;4787:18;;;4780:30;4846:33;4826:18;;;4819:61;4897:18;;27275:75:0;4566:355:1;27275:75:0;27381:15;27369:8;:27;;27361:56;;;;-1:-1:-1;;;27361:56:0;;5128:2:1;27361:56:0;;;5110:21:1;5167:2;5147:18;;;5140:30;-1:-1:-1;;;5186:18:1;;;5179:46;5242:18;;27361:56:0;4926:340:1;27361:56:0;22673:12;27436:6;:24;;27428:70;;;;-1:-1:-1;;;27428:70:0;;5473:2:1;27428:70:0;;;5455:21:1;5512:2;5492:18;;;5485:30;5551:34;5531:18;;;5524:62;-1:-1:-1;;;5602:18:1;;;5595:31;5643:19;;27428:70:0;5271:397:1;27428:70:0;27511:12;;27563:13;27572:4;27563:6;:13;:::i;:::-;27562:22;;27580:4;27562:22;:::i;:::-;27536:48;;27695:4;27676:15;:23;;27668:74;;;;-1:-1:-1;;;27668:74:0;;6402:2:1;27668:74:0;;;6384:21:1;6441:2;6421:18;;;6414:30;6480:34;6460:18;;;6453:62;-1:-1:-1;;;6531:18:1;;;6524:36;6577:19;;27668:74:0;6200:402:1;27668:74:0;27755:23;27789;27870:33;27887:15;27870:16;:33::i;:::-;27833:70;;-1:-1:-1;27833:70:0;-1:-1:-1;27979:9:0;27950:24;22323:1;27950:15;:24;:::i;:::-;27924:22;27931:15;27924:4;:22;:::i;:::-;:51;;;;:::i;:::-;:64;;27916:104;;;;-1:-1:-1;;;27916:104:0;;6809:2:1;27916:104:0;;;6791:21:1;6848:2;6828:18;;;6821:30;6887:29;6867:18;;;6860:57;6934:18;;27916:104:0;6607:351:1;27916:104:0;28094:9;28065:24;22405:2;28065:15;:24;:::i;:::-;28039:22;28046:15;28039:4;:22;:::i;:::-;:51;;;;:::i;:::-;:64;;28031:104;;;;-1:-1:-1;;;28031:104:0;;7165:2:1;28031:104:0;;;7147:21:1;7204:2;7184:18;;;7177:30;7243:29;7223:18;;;7216:57;7290:18;;28031:104:0;6963:351:1;28031:104:0;28265:4;;28287:22;;28173:21;;-1:-1:-1;;;;;28265:4:0;;;;28258:20;;28287:22;28353:4;28326:24;28265:4;28326:15;:24;:::i;:::-;:31;;;;:::i;:::-;28258:100;;-1:-1:-1;;;;;;28258:100:0;;;;;;;-1:-1:-1;;;;;7511:32:1;;;28258:100:0;;;7493:51:1;7560:18;;;7553:34;7466:18;;28258:100:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28250:127;;;;-1:-1:-1;;;28250:127:0;;8082:2:1;28250:127:0;;;8064:21:1;8121:2;8101:18;;;8094:30;-1:-1:-1;;;8140:18:1;;;8133:44;8194:18;;28250:127:0;7880:338:1;28250:127:0;28388:13;;-1:-1:-1;;;;;28388:13:0;:35;28451:4;28424:24;28388:13;28424:15;:24;:::i;:::-;:31;;;;:::i;:::-;28495:4;;28457:15;;28474:26;;-1:-1:-1;;;;;28495:4:0;28474:20;:26::i;:::-;28510:4;28517:8;28388:138;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28388:138:0;;;;;;;;;;;;:::i;:::-;-1:-1:-1;28661:4:0;;28683:22;;-1:-1:-1;;;;;28661:4:0;;;;28654:20;;28683:22;28708:24;22405:2;28708:15;:24;:::i;:::-;28654:79;;-1:-1:-1;;;;;;28654:79:0;;;;;;;-1:-1:-1;;;;;7511:32:1;;;28654:79:0;;;7493:51:1;7560:18;;;7553:34;7466:18;;28654:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28646:106;;;;-1:-1:-1;;;28646:106:0;;8082:2:1;28646:106:0;;;8064:21:1;8121:2;8101:18;;;8094:30;-1:-1:-1;;;8140:18:1;;;8133:44;8194:18;;28646:106:0;7880:338:1;28646:106:0;28763:13;;-1:-1:-1;;;;;28763:13:0;:64;28828:24;22405:2;28828:15;:24;:::i;:::-;28892:4;;28854:15;;28871:26;;-1:-1:-1;;;;;28892:4:0;28871:20;:26::i;:::-;28907:4;28914:8;28763:160;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28962:6:0;;-1:-1:-1;;;;;28962:6:0;;-1:-1:-1;28962:11:0;;-1:-1:-1;28974:27:0;22450:5;28974:15;:27;:::i;:::-;28962:40;;;;;;;;;;;;;1410:25:1;;1398:2;1383:18;;1264:177;28962:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29035:21:0;;-1:-1:-1;29015:17:0;;-1:-1:-1;29124:23:0;;-1:-1:-1;22363:2:0;29124:15;:23;:::i;:::-;29091:29;29106:14;29091:12;:29;:::i;:::-;:57;;;;:::i;:::-;29209:7;;29067:81;;-1:-1:-1;;;;;;29209:7:0;29201:53;29250:3;29227:20;29067:81;29246:1;29227:20;:::i;:::-;:26;;;;:::i;:::-;29201:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29301:34;29307:10;29319:15;29301:5;:34::i;:::-;29408:10;29457:3;29433:21;:16;29452:2;29433:21;:::i;:::-;:27;;;;:::i;:::-;29408:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29395:71;;;;;29485:7;29477:34;;;;-1:-1:-1;;;29477:34:0;;11185:2:1;29477:34:0;;;11167:21:1;11224:2;11204:18;;;11197:30;-1:-1:-1;;;11243:18:1;;;11236:44;11297:18;;29477:34:0;10983:338:1;29477:34:0;27264:2255;;;;;;;27161:2358;;;;:::o;9891:215::-;4029:10;9979:4;10028:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;10028:34:0;;;;;;;;;;9979:4;;9996:80;;10019:7;;10028:47;;10065:10;;10028:47;:::i;:::-;9996:8;:80::i;23965:2753::-;24082:15;24070:8;:27;;24062:56;;;;-1:-1:-1;;;24062:56:0;;5128:2:1;24062:56:0;;;5110:21:1;5167:2;5147:18;;;5140:30;-1:-1:-1;;;5186:18:1;;;5179:46;5242:18;;24062:56:0;4926:340:1;24062:56:0;22568:10;24137:9;:26;;24129:79;;;;-1:-1:-1;;;24129:79:0;;11528:2:1;24129:79:0;;;11510:21:1;11567:2;11547:18;;;11540:30;11606:34;11586:18;;;11579:62;-1:-1:-1;;;11657:18:1;;;11650:38;11705:19;;24129:79:0;11326:404:1;24129:79:0;24229:19;;;;;24411:21;24617:16;:14;:16::i;:::-;24535:98;;-1:-1:-1;24535:98:0;;-1:-1:-1;24535:98:0;-1:-1:-1;24535:98:0;-1:-1:-1;24535:98:0;-1:-1:-1;24766:1:0;24733:29;24535:98;24733:16;:29::i;:::-;:34;;24725:92;;;;-1:-1:-1;;;24725:92:0;;11937:2:1;24725:92:0;;;11919:21:1;11976:2;11956:18;;;11949:30;12015:34;11995:18;;;11988:62;-1:-1:-1;;;12066:18:1;;;12059:43;12119:19;;24725:92:0;11735:409:1;24725:92:0;24879:9;22323:1;24845:21;24851:15;24845:3;:21;:::i;:::-;:30;;;;:::i;:::-;:43;;24837:84;;;;-1:-1:-1;;;24837:84:0;;12351:2:1;24837:84:0;;;12333:21:1;12390:2;12370:18;;;12363:30;12429;12409:18;;;12402:58;12477:18;;24837:84:0;12149:352:1;24837:84:0;24974:9;22405:2;24940:21;24946:15;24940:3;:21;:::i;:::-;:30;;;;:::i;:::-;:43;;24932:84;;;;-1:-1:-1;;;24932:84:0;;12708:2:1;24932:84:0;;;12690:21:1;12747:2;12727:18;;;12720:30;12786;12766:18;;;12759:58;12834:18;;24932:84:0;12506:352:1;24932:84:0;25090:7;;-1:-1:-1;;;;;25090:7:0;25082:80;25158:3;25122:29;25139:11;25122:16;:29::i;:::-;25108:43;;:11;:43;:::i;:::-;:47;;25154:1;25108:47;:::i;:::-;:53;;;;:::i;:::-;25082:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25229:6:0;;-1:-1:-1;;;;;25229:6:0;:10;25302:3;25279:14;25247:29;25264:11;25247:16;:29::i;:::-;:46;;;;:::i;:::-;:52;;25296:3;25247:52;:::i;:::-;:58;;;;:::i;:::-;25307:50;25327:29;25344:11;25327:16;:29::i;:::-;25307:19;:50::i;:::-;25229:129;;;;;;;;;;;;;1410:25:1;;1398:2;1383:18;;1264:177;25229:129:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25505:13:0;;-1:-1:-1;;;;;25505:13:0;;-1:-1:-1;25505:35:0;;-1:-1:-1;25620:3:0;;-1:-1:-1;25596:15:0;25564:29;25581:11;25564:16;:29::i;:::-;:47;;;;:::i;:::-;:53;;25614:3;25564:53;:::i;:::-;:59;;;;:::i;:::-;22323:1;25641:29;25658:11;25641:16;:29::i;:::-;:38;;;;:::i;:::-;:44;;25682:3;25641:44;:::i;:::-;25708:4;;25687:26;;-1:-1:-1;;;;;25708:4:0;25687:20;:26::i;:::-;25723:4;25730:8;25505:234;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25505:234:0;;;;;;;;;;;;:::i;:::-;-1:-1:-1;25841:13:0;;-1:-1:-1;;;;;25841:13:0;:35;25956:3;25932:15;25900:29;25917:11;25900:16;:29::i;:::-;:47;;;;:::i;:::-;:53;;25950:3;25900:53;:::i;:::-;:59;;;;:::i;:::-;26033:4;22405:2;25977:29;25994:11;25977:16;:29::i;:::-;:38;;;;:::i;:::-;:45;;26018:4;25977:45;:::i;:::-;:53;;26025:5;25977:53;:::i;:::-;:60;;;;:::i;:::-;26060:4;;26039:26;;-1:-1:-1;;;;;26060:4:0;26039:20;:26::i;:::-;26075:4;26082:8;25841:250;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25841:250:0;;;;;;;;;;;;:::i;:::-;-1:-1:-1;26127:31:0;26137:21;26127:7;:31;:::i;:::-;26114:45;;:9;:45;:::i;:::-;26104:55;;26279;26285:10;26297:29;26314:11;26297:16;:29::i;:::-;:36;;26329:4;26297:36;:::i;:::-;26279:5;:55::i;:::-;26525:18;26548:10;26583:62;26599:29;26616:11;26599:16;:29::i;:::-;26630:14;26583:15;:62::i;:::-;26573:72;;:7;:72;:::i;:::-;26548:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26524:128;;;26671:13;26663:39;;;;-1:-1:-1;;;26663:39:0;;13572:2:1;26663:39:0;;;13554:21:1;13611:2;13591:18;;;13584:30;-1:-1:-1;;;13630:18:1;;;13623:43;13683:18;;26663:39:0;13370:337:1;26663:39:0;24051:2667;;;;;;;23965:2753;;;:::o;6391:104::-;6447:13;6480:7;6473:14;;;;;:::i;10609:413::-;4029:10;10702:4;10746:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;10746:34:0;;;;;;;;;;10799:35;;;;10791:85;;;;-1:-1:-1;;;10791:85:0;;13914:2:1;10791:85:0;;;13896:21:1;13953:2;13933:18;;;13926:30;13992:34;13972:18;;;13965:62;-1:-1:-1;;;14043:18:1;;;14036:35;14088:19;;10791:85:0;13712:401:1;10791:85:0;10912:67;4029:10;10935:7;10963:15;10944:16;:34;10912:8;:67::i;:::-;-1:-1:-1;11010:4:0;;10609:413;-1:-1:-1;;;10609:413:0:o;7803:175::-;7889:4;7906:42;4029:10;7930:9;7941:6;7906:9;:42::i;35579:985::-;35693:13;;35665:7;;-1:-1:-1;;;;;35693:13:0;35685:36;;;;;;35754:13;;-1:-1:-1;;;;;35754:13:0;35740:10;:27;35732:65;;;;-1:-1:-1;;;35732:65:0;;14320:2:1;35732:65:0;;;14302:21:1;14359:2;14339:18;;;14332:30;14398:27;14378:18;;;14371:55;14443:18;;35732:65:0;14118:349:1;35732:65:0;35842:6;35816:22;35826:11;-1:-1:-1;;;;;7564:18:0;7537:7;7564:18;;;;;;;;;;;;7463:127;35816:22;:32;;35808:79;;;;-1:-1:-1;;;35808:79:0;;14674:2:1;35808:79:0;;;14656:21:1;14713:2;14693:18;;;14686:30;14752:34;14732:18;;;14725:62;-1:-1:-1;;;14803:18:1;;;14796:32;14845:19;;35808:79:0;14472:398:1;35808:79:0;35915:1;35906:6;:10;35898:55;;;;-1:-1:-1;;;35898:55:0;;15077:2:1;35898:55:0;;;15059:21:1;;;15096:18;;;15089:30;15155:34;15135:18;;;15128:62;15207:18;;35898:55:0;14875:356:1;35898:55:0;35964:26;35970:11;35983:6;35964:5;:26::i;:::-;36081:4;;-1:-1:-1;;;;;36081:4:0;36074:21;36104:10;36135:4;36117:15;36081:4;36117:6;:15;:::i;:::-;:22;;;;:::i;:::-;36074:66;;-1:-1:-1;;;;;;36074:66:0;;;;;;;-1:-1:-1;;;;;7511:32:1;;;36074:66:0;;;7493:51:1;7560:18;;;7553:34;7466:18;;36074:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36066:99;;;;-1:-1:-1;;;36066:99:0;;15438:2:1;36066:99:0;;;15420:21:1;15477:2;15457:18;;;15450:30;-1:-1:-1;;;15496:18:1;;;15489:50;15556:18;;36066:99:0;15236:344:1;36066:99:0;36191:4;;-1:-1:-1;;;;;36191:4:0;36184:21;36206:10;36218:15;22405:2;36218:6;:15;:::i;:::-;36184:50;;-1:-1:-1;;;;;;36184:50:0;;;;;;;-1:-1:-1;;;;;7511:32:1;;;36184:50:0;;;7493:51:1;7560:18;;;7553:34;7466:18;;36184:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36176:83;;;;-1:-1:-1;;;36176:83:0;;15438:2:1;36176:83:0;;;15420:21:1;15477:2;15457:18;;;15450:30;-1:-1:-1;;;15496:18:1;;;15489:50;15556:18;;36176:83:0;15236:344:1;36176:83:0;36278:6;;-1:-1:-1;;;;;36278:6:0;:15;36294:10;36306:18;22450:5;36306:6;:18;:::i;:::-;36278:47;;-1:-1:-1;;;;;;36278:47:0;;;;;;;-1:-1:-1;;;;;7511:32:1;;;36278:47:0;;;7493:51:1;7560:18;;;7553:34;7466:18;;36278:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36270:83;;;;-1:-1:-1;;;36270:83:0;;15787:2:1;36270:83:0;;;15769:21:1;15826:2;15806:18;;;15799:30;15865:25;15845:18;;;15838:53;15908:18;;36270:83:0;15585:347:1;36270:83:0;36394:12;36411:10;36436:14;22363:2;36436:6;:14;:::i;:::-;36411:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36393:63;;;36475:7;36467:53;;;;-1:-1:-1;;;36467:53:0;;16139:2:1;36467:53:0;;;16121:21:1;16178:2;16158:18;;;16151:30;16217:34;16197:18;;;16190:62;-1:-1:-1;;;16268:18:1;;;16261:31;16309:19;;36467:53:0;15937:397:1;36467:53:0;36541:14;22363:2;36541:6;:14;:::i;:::-;36533:23;35579:985;-1:-1:-1;;;;35579:985:0:o;35208:159::-;36791:5;;-1:-1:-1;;;;;36791:5:0;36777:10;:19;36769:28;;;;;;35283:13:::1;:28:::0;;-1:-1:-1;;;;;;35283:28:0::1;-1:-1:-1::0;;;;;35283:28:0;;::::1;::::0;;::::1;::::0;;;35322:6:::1;::::0;:37:::1;::::0;-1:-1:-1;;;35322:37:0;;::::1;::::0;::::1;16485:51:1::0;;;;35322:6:0;;::::1;::::0;:23:::1;::::0;16458:18:1;;35322:37:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;35208:159:::0;:::o;14293:380::-;-1:-1:-1;;;;;14429:19:0;;14421:68;;;;-1:-1:-1;;;14421:68:0;;16749:2:1;14421:68:0;;;16731:21:1;16788:2;16768:18;;;16761:30;16827:34;16807:18;;;16800:62;-1:-1:-1;;;16878:18:1;;;16871:34;16922:19;;14421:68:0;16547:400:1;14421:68:0;-1:-1:-1;;;;;14508:21:0;;14500:68;;;;-1:-1:-1;;;14500:68:0;;17154:2:1;14500:68:0;;;17136:21:1;17193:2;17173:18;;;17166:30;17232:34;17212:18;;;17205:62;-1:-1:-1;;;17283:18:1;;;17276:32;17325:19;;14500:68:0;16952:398:1;14500:68:0;-1:-1:-1;;;;;14581:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;14633:32;;1410:25:1;;;14633:32:0;;1383:18:1;14633:32:0;;;;;;;;14293:380;;;:::o;11512:733::-;-1:-1:-1;;;;;11652:20:0;;11644:70;;;;-1:-1:-1;;;11644:70:0;;17557:2:1;11644:70:0;;;17539:21:1;17596:2;17576:18;;;17569:30;17635:34;17615:18;;;17608:62;-1:-1:-1;;;17686:18:1;;;17679:35;17731:19;;11644:70:0;17355:401:1;11644:70:0;-1:-1:-1;;;;;11733:23:0;;11725:71;;;;-1:-1:-1;;;11725:71:0;;17963:2:1;11725:71:0;;;17945:21:1;18002:2;17982:18;;;17975:30;18041:34;18021:18;;;18014:62;-1:-1:-1;;;18092:18:1;;;18085:33;18135:19;;11725:71:0;17761:399:1;11725:71:0;-1:-1:-1;;;;;11893:17:0;;11869:21;11893:17;;;;;;;;;;;11929:23;;;;11921:74;;;;-1:-1:-1;;;11921:74:0;;18367:2:1;11921:74:0;;;18349:21:1;18406:2;18386:18;;;18379:30;18445:34;18425:18;;;18418:62;-1:-1:-1;;;18496:18:1;;;18489:36;18542:19;;11921:74:0;18165:402:1;11921:74:0;-1:-1:-1;;;;;12031:17:0;;;:9;:17;;;;;;;;;;;12051:22;;;12031:42;;12095:20;;;;;;;;:30;;12067:6;;12031:9;12095:30;;12067:6;;12095:30;:::i;:::-;;;;;;;;12160:9;-1:-1:-1;;;;;12143:35:0;12152:6;-1:-1:-1;;;;;12143:35:0;;12171:6;12143:35;;;;1410:25:1;;1398:2;1383:18;;1264:177;12143:35:0;;;;;;;;11633:612;11512:733;;;:::o;33373:706::-;33530:13;;33438:7;;;;;;-1:-1:-1;;;;;33530:13:0;:27;33558:15;22405:2;33558:6;:15;:::i;:::-;33596:4;;33575:26;;-1:-1:-1;;;;;33596:4:0;33575:20;:26::i;:::-;33530:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;33530:72:0;;;;;;;;;;;;:::i;:::-;33603:1;33530:75;;;;;;;;:::i;:::-;;;;;;;;;;;33636:13;;33530:75;;-1:-1:-1;33616:17:0;;-1:-1:-1;;;;;33636:13:0;:27;33682:4;33664:15;33636:13;33664:6;:15;:::i;:::-;:22;;;;:::i;:::-;33709:4;;33688:26;;-1:-1:-1;;;;;33709:4:0;33688:20;:26::i;:::-;33636:79;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;33636:79:0;;;;;;;;;;;;:::i;:::-;33716:1;33636:82;;;;;;;;:::i;:::-;;;;;;;33616:102;;33731:23;33765;33899:5;33880:9;33892:4;33880:16;;;;:::i;:::-;:24;;;;:::i;:::-;33933:9;;33862:42;;-1:-1:-1;33373:706:0;;-1:-1:-1;;;;;33373:706:0:o;34356:265::-;34483:16;;;34497:1;34483:16;;;34430;34483;;;;;34430;34459:21;;34483:16;34497:1;34483:16;;;;;;;;;;-1:-1:-1;34483:16:0;34459:40;;34520:12;34510:4;34515:1;34510:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;34510:22:0;;;:7;;;;;;;;;;:22;;;;34553:13;;:20;;;-1:-1:-1;;;34553:20:0;;;;:13;;;;;:18;;:20;;;;;34510:7;;34553:20;;;;;:13;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34543:4;34548:1;34543:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;34543:30:0;;;:7;;;;;;;;;;;:30;34609:4;34356:265;-1:-1:-1;;34356:265:0:o;13264:591::-;-1:-1:-1;;;;;13348:21:0;;13340:67;;;;-1:-1:-1;;;13340:67:0;;19499:2:1;13340:67:0;;;19481:21:1;19538:2;19518:18;;;19511:30;19577:34;19557:18;;;19550:62;-1:-1:-1;;;19628:18:1;;;19621:31;19669:19;;13340:67:0;19297:397:1;13340:67:0;-1:-1:-1;;;;;13507:18:0;;13482:22;13507:18;;;;;;;;;;;13544:24;;;;13536:71;;;;-1:-1:-1;;;13536:71:0;;19901:2:1;13536:71:0;;;19883:21:1;19940:2;19920:18;;;19913:30;19979:34;19959:18;;;19952:62;-1:-1:-1;;;20030:18:1;;;20023:32;20072:19;;13536:71:0;19699:398:1;13536:71:0;-1:-1:-1;;;;;13643:18:0;;:9;:18;;;;;;;;;;13664:23;;;13643:44;;13709:12;:22;;13681:6;;13643:9;13709:22;;13681:6;;13709:22;:::i;:::-;;;;-1:-1:-1;;13749:37:0;;1410:25:1;;;13775:1:0;;-1:-1:-1;;;;;13749:37:0;;;;;1398:2:1;1383:18;13749:37:0;1264:177:1;30460:2742:0;30509:7;30518;30527;30536;30545;30854:4;30841:9;:17;;30833:78;;;;-1:-1:-1;;;30833:78:0;;20304:2:1;30833:78:0;;;20286:21:1;20343:2;20323:18;;;20316:30;20382:34;20362:18;;;20355:62;-1:-1:-1;;;20433:18:1;;;20426:46;20489:19;;30833:78:0;20102:412:1;30833:78:0;31024:13;;31084:4;;31004:17;;-1:-1:-1;;;;;31024:13:0;;;;:27;;31052:9;;31063:26;;31084:4;31063:20;:26::i;:::-;31024:66;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31024:66:0;;;;;;;;;;;;:::i;:::-;31091:1;31024:69;;;;;;;;:::i;:::-;;;;;;;;;;;31124:13;;31184:4;;31024:69;;-1:-1:-1;31104:17:0;;-1:-1:-1;;;;;31124:13:0;;;;:27;;31152:9;;31163:26;;31184:4;31163:20;:26::i;:::-;31124:66;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31124:66:0;;;;;;;;;;;;:::i;:::-;31191:1;31124:69;;;;;;;;:::i;:::-;;;;;;;31104:89;;31206:23;31240;31274:22;31299:4;31274:29;;31875:1;31863:9;:13;31855:79;;;;-1:-1:-1;;;31855:79:0;;20721:2:1;31855:79:0;;;20703:21:1;20760:2;20740:18;;;20733:30;20799:34;20779:18;;;20772:62;-1:-1:-1;;;20850:18:1;;;20843:51;20911:19;;31855:79:0;20519:417:1;31855:79:0;31982:9;31963:16;31970:9;31963:4;:16;:::i;:::-;:28;;;;:::i;:::-;31945:46;;32028:1;32010:15;:19;32002:79;;;;-1:-1:-1;;;32002:79:0;;21143:2:1;32002:79:0;;;21125:21:1;21182:2;21162:18;;;21155:30;21221:34;21201:18;;;21194:62;-1:-1:-1;;;21272:18:1;;;21265:45;21327:19;;32002:79:0;20941:411:1;32002:79:0;32211:1;32199:9;:13;32191:79;;;;-1:-1:-1;;;32191:79:0;;21559:2:1;32191:79:0;;;21541:21:1;21598:2;21578:18;;;21571:30;21637:34;21617:18;;;21610:62;-1:-1:-1;;;21688:18:1;;;21681:51;21749:19;;32191:79:0;21357:417:1;32191:79:0;32317:9;32299:15;32305:9;32299:3;:15;:::i;:::-;:27;;;;:::i;:::-;32281:45;;32438:1;32420:15;:19;32412:78;;;;-1:-1:-1;;;32412:78:0;;21981:2:1;32412:78:0;;;21963:21:1;22020:2;22000:18;;;21993:30;22059:34;22039:18;;;22032:62;-1:-1:-1;;;22110:18:1;;;22103:44;22164:19;;32412:78:0;21779:410:1;32412:78:0;32567:6;;:40;;-1:-1:-1;;;32567:40:0;;32597:9;32567:40;;;1410:25:1;32539::0;;-1:-1:-1;;;;;32567:6:0;;:29;;1383:18:1;;32567:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32539:68;-1:-1:-1;32707:4:0;32672:24;32681:15;22405:2;32672:24;:::i;:::-;:32;;32699:5;32672:32;:::i;:::-;:39;;;;:::i;:::-;32654:57;-1:-1:-1;32792:22:0;32800:14;22363:2;32792:22;:::i;:::-;32775:39;-1:-1:-1;32843:24:0;32852:15;22323:1;32843:24;:::i;:::-;32825:42;-1:-1:-1;32930:3:0;32898:29;32910:17;22450:5;32898:29;:::i;:::-;:35;;;;:::i;:::-;32878:55;-1:-1:-1;32878:55:0;33090:14;33054:33;33072:15;33054;:33;:::i;:::-;:50;;;;:::i;:::-;:70;;;;:::i;:::-;33046:148;33126:15;;-1:-1:-1;33143:15:0;;-1:-1:-1;33143:15:0;-1:-1:-1;33126:15:0;;-1:-1:-1;30460:2742:0;-1:-1:-1;;;30460:2742:0:o;30003:272::-;30073:7;30115:1;30101:11;:15;30093:77;;;;-1:-1:-1;;;30093:77:0;;22585:2:1;30093:77:0;;;22567:21:1;22624:2;22604:18;;;22597:30;22663:34;22643:18;;;22636:62;-1:-1:-1;;;22714:18:1;;;22707:47;22771:19;;30093:77:0;22383:413:1;30093:77:0;30221:3;30201:17;30207:11;30201:3;:17;:::i;:::-;:23;;;;:::i;:::-;30188:37;;:9;:37;:::i;:::-;30181:44;30003:272;-1:-1:-1;;30003:272:0:o;29680:160::-;29764:7;29791:34;22450:5;29791:22;:34;:::i;:::-;:41;;29828:4;29791:41;:::i;34087:257::-;34214:16;;;34228:1;34214:16;;;34161;34214;;;;;34161;34190:21;;34214:16;34228:1;34214:16;;;;;;;;-1:-1:-1;;34251:13:0;;:20;;;-1:-1:-1;;;34251:20:0;;;;34190:40;;-1:-1:-1;;;;;;34251:13:0;;;;:18;;-1:-1:-1;34251:20:0;;;;;;;;;;;;;;:13;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34241:4;34246:1;34241:7;;;;;;;;:::i;:::-;;;;;;:30;-1:-1:-1;;;;;34241:30:0;;;-1:-1:-1;;;;;34241:30:0;;;;;34292:12;34282:4;34287:1;34282:7;;;;;;;;:::i;12532:399::-;-1:-1:-1;;;;;12616:21:0;;12608:65;;;;-1:-1:-1;;;12608:65:0;;23003:2:1;12608:65:0;;;22985:21:1;23042:2;23022:18;;;23015:30;23081:33;23061:18;;;23054:61;23132:18;;12608:65:0;22801:355:1;12608:65:0;12764:6;12748:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;12781:18:0;;:9;:18;;;;;;;;;;:28;;12803:6;;12781:9;:28;;12803:6;;12781:28;:::i;:::-;;;;-1:-1:-1;;12825:37:0;;1410:25:1;;;-1:-1:-1;;;;;12825:37:0;;;12842:1;;12825:37;;1398:2:1;1383:18;12825:37:0;;;;;;;12532:399;;:::o;34883:202::-;34970:4;35048:29;35063:14;35048:12;:29;:::i;:::-;35041:36;34883:202;-1:-1:-1;;;34883:202:0:o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;671:70;616:131;:::o;752:315::-;820:6;828;881:2;869:9;860:7;856:23;852:32;849:52;;;897:1;894;887:12;849:52;936:9;923:23;955:31;980:5;955:31;:::i;:::-;1005:5;1057:2;1042:18;;;;1029:32;;-1:-1:-1;;;752:315:1:o;1446:456::-;1523:6;1531;1539;1592:2;1580:9;1571:7;1567:23;1563:32;1560:52;;;1608:1;1605;1598:12;1560:52;1647:9;1634:23;1666:31;1691:5;1666:31;:::i;:::-;1716:5;-1:-1:-1;1773:2:1;1758:18;;1745:32;1786:33;1745:32;1786:33;:::i;:::-;1446:456;;1838:7;;-1:-1:-1;;;1892:2:1;1877:18;;;;1864:32;;1446:456::o;2096:385::-;2182:6;2190;2198;2206;2259:3;2247:9;2238:7;2234:23;2230:33;2227:53;;;2276:1;2273;2266:12;2227:53;-1:-1:-1;;2299:23:1;;;2369:2;2354:18;;2341:32;;-1:-1:-1;2420:2:1;2405:18;;2392:32;;2471:2;2456:18;2443:32;;-1:-1:-1;2096:385:1;-1:-1:-1;2096:385:1:o;2486:316::-;2563:6;2571;2579;2632:2;2620:9;2611:7;2607:23;2603:32;2600:52;;;2648:1;2645;2638:12;2600:52;-1:-1:-1;;2671:23:1;;;2741:2;2726:18;;2713:32;;-1:-1:-1;2792:2:1;2777:18;;;2764:32;;2486:316;-1:-1:-1;2486:316:1:o;2807:247::-;2866:6;2919:2;2907:9;2898:7;2894:23;2890:32;2887:52;;;2935:1;2932;2925:12;2887:52;2974:9;2961:23;2993:31;3018:5;2993:31;:::i;3059:315::-;3127:6;3135;3188:2;3176:9;3167:7;3163:23;3159:32;3156:52;;;3204:1;3201;3194:12;3156:52;3240:9;3227:23;3217:33;;3300:2;3289:9;3285:18;3272:32;3313:31;3338:5;3313:31;:::i;:::-;3363:5;3353:15;;;3059:315;;;;;:::o;3379:388::-;3447:6;3455;3508:2;3496:9;3487:7;3483:23;3479:32;3476:52;;;3524:1;3521;3514:12;3476:52;3563:9;3550:23;3582:31;3607:5;3582:31;:::i;:::-;3632:5;-1:-1:-1;3689:2:1;3674:18;;3661:32;3702:33;3661:32;3702:33;:::i;3772:380::-;3851:1;3847:12;;;;3894;;;3915:61;;3969:4;3961:6;3957:17;3947:27;;3915:61;4022:2;4014:6;4011:14;3991:18;3988:38;3985:161;;;4068:10;4063:3;4059:20;4056:1;4049:31;4103:4;4100:1;4093:15;4131:4;4128:1;4121:15;3985:161;;3772:380;;;:::o;5673:127::-;5734:10;5729:3;5725:20;5722:1;5715:31;5765:4;5762:1;5755:15;5789:4;5786:1;5779:15;5805:217;5845:1;5871;5861:132;;5915:10;5910:3;5906:20;5903:1;5896:31;5950:4;5947:1;5940:15;5978:4;5975:1;5968:15;5861:132;-1:-1:-1;6007:9:1;;5805:217::o;6027:168::-;6067:7;6133:1;6129;6125:6;6121:14;6118:1;6115:21;6110:1;6103:9;6096:17;6092:45;6089:71;;;6140:18;;:::i;:::-;-1:-1:-1;6180:9:1;;6027:168::o;7598:277::-;7665:6;7718:2;7706:9;7697:7;7693:23;7689:32;7686:52;;;7734:1;7731;7724:12;7686:52;7766:9;7760:16;7819:5;7812:13;7805:21;7798:5;7795:32;7785:60;;7841:1;7838;7831:12;8223:461;8276:3;8314:5;8308:12;8341:6;8336:3;8329:19;8367:4;8396:2;8391:3;8387:12;8380:19;;8433:2;8426:5;8422:14;8454:1;8464:195;8478:6;8475:1;8472:13;8464:195;;;8543:13;;-1:-1:-1;;;;;8539:39:1;8527:52;;8599:12;;;;8634:15;;;;8575:1;8493:9;8464:195;;;-1:-1:-1;8675:3:1;;8223:461;-1:-1:-1;;;;;8223:461:1:o;8689:574::-;8980:6;8969:9;8962:25;9023:6;9018:2;9007:9;9003:18;8996:34;9066:3;9061:2;9050:9;9046:18;9039:31;8943:4;9087:57;9139:3;9128:9;9124:19;9116:6;9087:57;:::i;:::-;-1:-1:-1;;;;;9180:32:1;;;;9175:2;9160:18;;9153:60;-1:-1:-1;9244:3:1;9229:19;9222:35;9079:65;8689:574;-1:-1:-1;;;8689:574:1:o;9268:127::-;9329:10;9324:3;9320:20;9317:1;9310:31;9360:4;9357:1;9350:15;9384:4;9381:1;9374:15;9400:1105;9495:6;9526:2;9569;9557:9;9548:7;9544:23;9540:32;9537:52;;;9585:1;9582;9575:12;9537:52;9618:9;9612:16;9647:18;9688:2;9680:6;9677:14;9674:34;;;9704:1;9701;9694:12;9674:34;9742:6;9731:9;9727:22;9717:32;;9787:7;9780:4;9776:2;9772:13;9768:27;9758:55;;9809:1;9806;9799:12;9758:55;9838:2;9832:9;9860:2;9856;9853:10;9850:36;;;9866:18;;:::i;:::-;9912:2;9909:1;9905:10;9944:2;9938:9;10007:2;10003:7;9998:2;9994;9990:11;9986:25;9978:6;9974:38;10062:6;10050:10;10047:22;10042:2;10030:10;10027:18;10024:46;10021:72;;;10073:18;;:::i;:::-;10109:2;10102:22;10159:18;;;10193:15;;;;-1:-1:-1;10235:11:1;;;10231:20;;;10263:19;;;10260:39;;;10295:1;10292;10285:12;10260:39;10319:11;;;;10339:135;10355:6;10350:3;10347:15;10339:135;;;10421:10;;10409:23;;10372:12;;;;10452;;;;10339:135;;;10493:6;9400:1105;-1:-1:-1;;;;;;;;9400:1105:1:o;10510:125::-;10550:4;10578:1;10575;10572:8;10569:34;;;10583:18;;:::i;:::-;-1:-1:-1;10620:9:1;;10510:125::o;10640:128::-;10680:3;10711:1;10707:6;10704:1;10701:13;10698:39;;;10717:18;;:::i;:::-;-1:-1:-1;10753:9:1;;10640:128::o;12863:502::-;13126:6;13115:9;13108:25;13169:3;13164:2;13153:9;13149:18;13142:31;13089:4;13190:57;13242:3;13231:9;13227:19;13219:6;13190:57;:::i;:::-;-1:-1:-1;;;;;13283:32:1;;;;13278:2;13263:18;;13256:60;-1:-1:-1;13347:2:1;13332:18;13325:34;13182:65;12863:502;-1:-1:-1;;12863:502:1:o;18572:332::-;18779:6;18768:9;18761:25;18822:2;18817;18806:9;18802:18;18795:30;18742:4;18842:56;18894:2;18883:9;18879:18;18871:6;18842:56;:::i;18909:127::-;18970:10;18965:3;18961:20;18958:1;18951:31;19001:4;18998:1;18991:15;19025:4;19022:1;19015:15;19041:251;19111:6;19164:2;19152:9;19143:7;19139:23;19135:32;19132:52;;;19180:1;19177;19170:12;19132:52;19212:9;19206:16;19231:31;19256:5;19231:31;:::i;22194:184::-;22264:6;22317:2;22305:9;22296:7;22292:23;22288:32;22285:52;;;22333:1;22330;22323:12;22285:52;-1:-1:-1;22356:16:1;;22194:184;-1:-1:-1;22194:184:1:o
Swarm Source
ipfs://a49d30bbbb7920a36f29c866ad93c0e3a78f89c10244143e3c781080d99f1b95
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.