Source Code
Latest 25 from a total of 172 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Apply Pre Purcha... | 13093930 | 1678 days ago | IN | 0 ETH | 0.0011004 | ||||
| Cancel Pre Purch... | 13082182 | 1679 days ago | IN | 0 ETH | 0.00633935 | ||||
| Apply Pre Purcha... | 13049651 | 1685 days ago | IN | 0 ETH | 0.00092838 | ||||
| Pre Purchase | 13048205 | 1685 days ago | IN | 0 ETH | 0.01158181 | ||||
| Apply Pre Purcha... | 13048032 | 1685 days ago | IN | 0 ETH | 0.00094773 | ||||
| Cancel Pre Purch... | 13029065 | 1688 days ago | IN | 0 ETH | 0.00197883 | ||||
| Apply Pre Purcha... | 13007134 | 1691 days ago | IN | 0 ETH | 0.00092339 | ||||
| Cancel Pre Purch... | 13002815 | 1692 days ago | IN | 0 ETH | 0.00384037 | ||||
| Cancel Pre Purch... | 13002626 | 1692 days ago | IN | 0 ETH | 0.00413289 | ||||
| Apply Pre Purcha... | 12982944 | 1695 days ago | IN | 0 ETH | 0.00087194 | ||||
| Pre Purchase | 12977959 | 1696 days ago | IN | 0 ETH | 0.01897462 | ||||
| Apply Pre Purcha... | 12977914 | 1696 days ago | IN | 0 ETH | 0.00147055 | ||||
| Pre Purchase | 12977702 | 1696 days ago | IN | 0 ETH | 0.01082668 | ||||
| Cancel Pre Purch... | 12977552 | 1696 days ago | IN | 0 ETH | 0.00203798 | ||||
| Pre Purchase | 12977524 | 1696 days ago | IN | 0.00211283 ETH | 0.01398832 | ||||
| Apply Pre Purcha... | 12977506 | 1696 days ago | IN | 0 ETH | 0.00107972 | ||||
| Apply Pre Purcha... | 12977395 | 1696 days ago | IN | 0 ETH | 0.0012155 | ||||
| Apply Pre Purcha... | 12977380 | 1696 days ago | IN | 0 ETH | 0.00107044 | ||||
| Apply Pre Purcha... | 12977247 | 1696 days ago | IN | 0 ETH | 0.00126137 | ||||
| Apply Pre Purcha... | 12975517 | 1696 days ago | IN | 0 ETH | 0.00112376 | ||||
| Apply Pre Purcha... | 12972348 | 1696 days ago | IN | 0 ETH | 0.00144288 | ||||
| Cancel Pre Purch... | 12972143 | 1696 days ago | IN | 0 ETH | 0.0047782 | ||||
| Apply Pre Purcha... | 12971739 | 1697 days ago | IN | 0 ETH | 0.00098991 | ||||
| Cancel Pre Purch... | 12971406 | 1697 days ago | IN | 0 ETH | 0.00194505 | ||||
| Apply Pre Purcha... | 12970775 | 1697 days ago | IN | 0 ETH | 0.00066508 |
Latest 6 internal transactions
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
AngryContract
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2021-08-03
*/
// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol
// SPDX-License-Identifier: MIT
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);
}
// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol
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;
}
// File: @openzeppelin/contracts/security/ReentrancyGuard.sol
pragma solidity ^0.8.0;
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and make it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
// On the first call to nonReentrant, _notEntered will be true
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
_;
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
}
// File: @openzeppelin/contracts/utils/cryptography/ECDSA.sol
pragma solidity ^0.8.0;
/**
* @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.
*
* These functions can be used to verify that a message was signed by the holder
* of the private keys of a given address.
*/
library ECDSA {
/**
* @dev Returns the address that signed a hashed message (`hash`) with
* `signature`. This address can then be used for verification purposes.
*
* The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
* this function rejects them by requiring the `s` value to be in the lower
* half order, and the `v` value to be either 27 or 28.
*
* IMPORTANT: `hash` _must_ be the result of a hash operation for the
* verification to be secure: it is possible to craft signatures that
* recover to arbitrary addresses for non-hashed data. A safe way to ensure
* this is by receiving a hash of the original message (which may otherwise
* be too long), and then calling {toEthSignedMessageHash} on it.
*
* Documentation for signature generation:
* - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]
* - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]
*/
function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
// Check the signature length
// - case 65: r,s,v signature (standard)
// - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._
if (signature.length == 65) {
bytes32 r;
bytes32 s;
uint8 v;
// ecrecover takes the signature parameters, and the only way to get them
// currently is to use assembly.
assembly {
r := mload(add(signature, 0x20))
s := mload(add(signature, 0x40))
v := byte(0, mload(add(signature, 0x60)))
}
return recover(hash, v, r, s);
} else if (signature.length == 64) {
bytes32 r;
bytes32 vs;
// ecrecover takes the signature parameters, and the only way to get them
// currently is to use assembly.
assembly {
r := mload(add(signature, 0x20))
vs := mload(add(signature, 0x40))
}
return recover(hash, r, vs);
} else {
revert("ECDSA: invalid signature length");
}
}
/**
* @dev Overload of {ECDSA-recover} that receives the `r` and `vs` short-signature fields separately.
*
* See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]
*
* _Available since v4.2._
*/
function recover(
bytes32 hash,
bytes32 r,
bytes32 vs
) internal pure returns (address) {
bytes32 s;
uint8 v;
assembly {
s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)
v := add(shr(255, vs), 27)
}
return recover(hash, v, r, s);
}
/**
* @dev Overload of {ECDSA-recover} that receives the `v`, `r` and `s` signature fields separately.
*/
function recover(
bytes32 hash,
uint8 v,
bytes32 r,
bytes32 s
) internal pure returns (address) {
// EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature
// unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines
// the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most
// signatures from current libraries generate a unique signature with an s-value in the lower half order.
//
// If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value
// with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or
// vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept
// these malleable signatures as well.
require(
uint256(s) <= 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,
"ECDSA: invalid signature 's' value"
);
require(v == 27 || v == 28, "ECDSA: invalid signature 'v' value");
// If the signature is valid (and not malleable), return the signer address
address signer = ecrecover(hash, v, r, s);
require(signer != address(0), "ECDSA: invalid signature");
return signer;
}
/**
* @dev Returns an Ethereum Signed Message, created from a `hash`. This
* produces hash corresponding to the one signed with the
* https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]
* JSON-RPC method as part of EIP-191.
*
* See {recover}.
*/
function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {
// 32 is the length in bytes of hash,
// enforced by the type signature above
return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
}
/**
* @dev Returns an Ethereum Signed Typed Data, created from a
* `domainSeparator` and a `structHash`. This produces hash corresponding
* to the one signed with the
* https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]
* JSON-RPC method as part of EIP-712.
*
* See {recover}.
*/
function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {
return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
}
}
// File: @openzeppelin/contracts/token/ERC20/IERC20.sol
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);
}
// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol
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);
}
// File: @openzeppelin/contracts/utils/Address.sol
pragma solidity ^0.8.0;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
uint256 size;
assembly {
size := extcodesize(account)
}
return size > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return _verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return _verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return _verifyCallResult(success, returndata, errorMessage);
}
function _verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) private pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File: @openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol
pragma solidity ^0.8.0;
/**
* @title SafeERC20
* @dev Wrappers around ERC20 operations that throw on failure (when the token
* contract returns false). Tokens that return no value (and instead revert or
* throw on failure) are also supported, non-reverting calls are assumed to be
* successful.
* To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20 {
using Address for address;
function safeTransfer(
IERC20 token,
address to,
uint256 value
) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(
IERC20 token,
address from,
address to,
uint256 value
) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
/**
* @dev Deprecated. This function has issues similar to the ones found in
* {IERC20-approve}, and its usage is discouraged.
*
* Whenever possible, use {safeIncreaseAllowance} and
* {safeDecreaseAllowance} instead.
*/
function safeApprove(
IERC20 token,
address spender,
uint256 value
) internal {
// safeApprove should only be called when setting an initial allowance,
// or when resetting it to zero. To increase and decrease it, use
// 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
require(
(value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}
function safeIncreaseAllowance(
IERC20 token,
address spender,
uint256 value
) internal {
uint256 newAllowance = token.allowance(address(this), spender) + value;
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
function safeDecreaseAllowance(
IERC20 token,
address spender,
uint256 value
) internal {
unchecked {
uint256 oldAllowance = token.allowance(address(this), spender);
require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
uint256 newAllowance = oldAllowance - value;
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*/
function _callOptionalReturn(IERC20 token, bytes memory data) private {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
// the target address contains contract code and also asserts for success in the low-level call.
bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
if (returndata.length > 0) {
// Return data is optional
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}
// File: AngryContract.sol
pragma solidity ^0.8.4;
interface IBurnable{
function burn(uint256 amount) external;
}
contract AngryContract is ReentrancyGuard{
using SafeERC20 for IERC20;
using ECDSA for bytes32;
struct PrePurchaseInfo {
uint256 amount;
uint256 paymentAmount;
uint256 price;
uint256 expectedPrice;
uint256 startTime;
uint256 expiredTime;
uint8 status; // 0: not deal, 1 : deal, 2 : cancel, 3 : confirm, 4 : expired
uint8 paymentType; // 1:ETH, 2:USDT
}
struct MiningPoolInfo {
uint256 beginTime;
uint256 endTime;
uint256 rewardAmount;
uint256 claimedAmount;
uint256 burnedAmount;
mapping(address => uint256) claimedAccounts;
}
struct ClaimRewardsInfo {
string taskId;
uint256 amount;
uint256 time;
}
bool public bInited;
bool public bStarted;
uint256 public expectedPriceFloatValLo;
uint256 public expectedPriceFloatValHi;
uint256 public expectedPriceMultipleLo;
uint256 public expectedPriceMultipleHi;
address public angryTokenAddr;
address public usdtTokenAddr;
address public vitalikButerinAddr;
address public uniswapRouterAddr;
uint256 public maxMiningTaskReward;
uint256 public minPrePurchaseUSDT;
uint256 public minPrePurchaseETH;
uint256 public cumulativePeriods;
uint256 public prePurchaseSupplyPeriod;
uint256 public prePurchaseSupplyAmount;
uint256 public cumulativePrePurchaseSupply;
uint256 public lastCumulativeTime;
uint256 public vbWithdrawPerDay;
IERC20 public angryToken;
IERC20 public usdtToken;
IUniswapV2Router02 public uniswapRouterV2;
uint256 private angryTokenDecimals;
uint256 public minTokenAmountToPrePurchase;
uint256 public maxPrePurchaseMultiple;
uint256 public prePurchaseLimitPerAcc;
uint256 public vsWithdrawAmount;
uint256 public vsBurnAmount;
uint256 public vsLastWithdrawTime;
uint256 public lastMiningTaskTime;
uint256 public startTime;
uint256 public totalPrePurcaseAmount;
uint256 public cancelOrderFeeRate;
uint256 public feeUSDT;
uint256 public feeETH;
uint256 public revenueUSDT;
uint256 public revenueETH;
address public owner;
address[] public prePurchaseAccounts;
mapping(address => PrePurchaseInfo[]) public prePurchaseList;
mapping(address => ClaimRewardsInfo[]) public claimList;
mapping(string => MiningPoolInfo) public miningPoolInfos;
mapping(address => bool) public executorList;
mapping(string => bool) public prePurchaseInvoiceMapping;
event PrePurchase(address _userAddr, uint256 _orderIdx, uint256 _amount, uint256 _paymentAmount, uint256 _price, uint256 _expectedPrice, uint256 _startTime, uint256 _expiredTime, uint8 _paymentType, uint8 _status, string _invoiceId);
event Withdraw(address _recvAddr, uint256 _revenueETH, uint256 _revenueUSDT, uint256 _feeETH, uint256 _feeUSDT);
event OrderConfirm(address _userAddr, uint256 _orderIdx, uint8 _orderStatus);
event OrderExpire(address _userAddr, uint256 _orderIdx, uint8 _orderStatus);
event OrderComplete(address _userAddr, uint256 _orderIdx, uint8 _orderStatus);
event FeeChange(uint256 _oldValue, uint256 _newValue);
event VBRewardBurn(uint256 _amount);
event MineRemainingBurn(string _taskId, uint256 _amount);
event VbWithdraw(uint256 _amount);
event ExecutorAdd(address _newAddr);
event ExecutorDel(address _oldAddr);
event MineRewardsWithdraw(address _userAddr, string _invoiceId, uint256 _amount);
event PrePurchaseaArgsChange(uint256 _minTokenAmountOld,uint256 _maxMultipleOld,uint256 _limitPerAccOld,uint256 _minTokenAmountNew,uint256 _maxMultipleNew,uint256 _limitPerAccNew);
event ANBWithdraw(address _receiver, uint256 _amount);
event MineTaskAdd(string _taskId, uint256 _rewardAmount, uint256 _beginTime, uint256 _endTime);
event MaxMiningTaskRewardChange(uint256 _oldValue, uint256 _newValue);
event PrePurchaseSupplyPerPeriodChange(uint256 _oldPeriod, uint256 _oldAmount, uint256 _newPeriod, uint256 _newAmount);
event VbWithdrawPerDayChange(uint256 _oldValue, uint256 _newValue);
event ExpectedPriceArgsChange(uint256 _oldMultipleLo, uint256 _oldMultipleHi, uint256 _oldFloatValLo, uint256 _oldFloatValHi, uint256 _newMultipleLo, uint256 _newMultipleHi, uint256 _newFloatValLo, uint256 _newFloatValHi);
event PrePurchaseApply(address _addr, uint256 _periodNo);
event StartFlagChange(bool _bVal);
event PrePurchaseMinAmountChange(uint256 _oldEthAmount, uint256 _oldUsdtAmount, uint256 _newEthAmount,uint256 _newUsdtAmount);
event OrderCancel(address _userAddr, uint256 _orderIdx, uint8 _orderStatus);
modifier onlyOwner {
require(msg.sender == owner);
_;
}
modifier onlyExecutor {
require(executorList[msg.sender], "NP");
_;
}
constructor(address _angryTokenAddr, address _usdtTokenAddr, address _uniswapRouterAddr, address _vitalikButerinAddr, uint256 _startTime) {
initialize(_angryTokenAddr, _usdtTokenAddr, _uniswapRouterAddr, _vitalikButerinAddr, _startTime);
}
function initialize(address _angryTokenAddr, address _usdtTokenAddr, address _uniswapRouterAddr, address _vitalikButerinAddr, uint256 _startTime) public {
require(!bInited, "AI");
bInited = true;
bStarted = true;
owner = msg.sender;
executorList[msg.sender] = true;
startTime = _startTime;
lastCumulativeTime = _startTime;
angryTokenAddr = _angryTokenAddr;
usdtTokenAddr = _usdtTokenAddr;
uniswapRouterAddr = _uniswapRouterAddr;
vitalikButerinAddr = _vitalikButerinAddr;
angryToken = IERC20(angryTokenAddr);
usdtToken = IERC20(usdtTokenAddr);
uniswapRouterV2 = IUniswapV2Router02(uniswapRouterAddr);
angryTokenDecimals = IERC20Metadata(angryTokenAddr).decimals();
expectedPriceFloatValLo = 5;
expectedPriceFloatValHi = 5;
expectedPriceMultipleLo = 12;
expectedPriceMultipleHi = 30;
maxMiningTaskReward = 100000000;
vbWithdrawPerDay = 5479;
minTokenAmountToPrePurchase = 100000;
maxPrePurchaseMultiple = 10;
prePurchaseLimitPerAcc = 200000000;
emit ExecutorAdd(msg.sender);
}
function addExecutor(address _newExecutor) onlyOwner public {
executorList[_newExecutor] = true;
emit ExecutorAdd(_newExecutor);
}
function delExecutor(address _oldExecutor) onlyOwner public {
executorList[_oldExecutor] = false;
emit ExecutorDel(_oldExecutor);
}
function setExpectedPriceArgs(uint256 _multipleLo, uint256 _multipleHi, uint256 _floatValLo, uint256 _floatValHi) public onlyExecutor{
require(_floatValLo <= 100 && _floatValHi <= 100, "BV");
emit ExpectedPriceArgsChange(expectedPriceMultipleLo,expectedPriceMultipleHi,expectedPriceFloatValLo, expectedPriceFloatValHi,_multipleLo,_multipleHi,_floatValLo,_floatValHi);
expectedPriceMultipleLo = _multipleLo;
expectedPriceMultipleHi = _multipleHi;
expectedPriceFloatValLo = _floatValLo;
expectedPriceFloatValHi = _floatValHi;
}
function getExpectedPriceArgs() public view returns(uint256 _multipleLo, uint256 _multipleHi, uint256 _floatValLo, uint256 _floatValHi){
_multipleLo = expectedPriceMultipleLo;
_multipleHi = expectedPriceMultipleHi;
_floatValLo = expectedPriceFloatValLo;
_floatValHi = expectedPriceFloatValHi;
}
function withdrawRevenueAndFee(address _receiver) onlyOwner nonReentrant public {
uint256 ethAmount = revenueETH + feeETH;
uint256 usdtAmount = revenueUSDT + feeUSDT;
emit Withdraw(_receiver, revenueETH, revenueUSDT, feeETH, feeUSDT);
revenueETH = 0;
revenueUSDT = 0;
feeETH = 0;
feeUSDT = 0;
if(ethAmount > 0){
payable(_receiver).transfer(ethAmount);
}
if(usdtAmount > 0){
usdtToken.safeTransfer(_receiver, usdtAmount);
}
}
function vitalikButerinWithdraw() public {
require ( msg.sender == vitalikButerinAddr, "OV" );
require ( (block.timestamp - vsLastWithdrawTime) > (1 days), "WO" );
uint256 amount = vbWithdrawPerDay * 10 ** angryTokenDecimals;
vsLastWithdrawTime = block.timestamp;
vsWithdrawAmount = vsWithdrawAmount + amount;
angryToken.safeTransfer(vitalikButerinAddr, amount);
emit VbWithdraw(amount);
}
function burnVbUnclaimANB() public onlyExecutor{
uint256 totalAmount = ((block.timestamp - startTime) / (1 days)) * vbWithdrawPerDay * 10 ** angryTokenDecimals;
uint256 toBurnAmount = 0;
if(totalAmount > (vsWithdrawAmount + vsBurnAmount)){
toBurnAmount = totalAmount - (vsWithdrawAmount + vsBurnAmount);
IBurnable(angryTokenAddr).burn(toBurnAmount);
vsBurnAmount = vsBurnAmount + toBurnAmount;
emit VBRewardBurn(toBurnAmount);
}
}
function queryRevenueAndFee() view public returns (uint256 _revenueETH, uint256 _revenueUSDT, uint256 _feeETH, uint256 _feeUSDT) {
return (revenueETH, revenueUSDT, feeETH, feeUSDT);
}
function setPrePurchaseaArgs(uint256 _minTokenAmount, uint256 _maxMultiple, uint256 _limitPerAcc) public onlyExecutor {
emit PrePurchaseaArgsChange(minTokenAmountToPrePurchase,maxPrePurchaseMultiple,prePurchaseLimitPerAcc,_minTokenAmount,_maxMultiple,_limitPerAcc);
minTokenAmountToPrePurchase = _minTokenAmount;
maxPrePurchaseMultiple = _maxMultiple;
prePurchaseLimitPerAcc = _limitPerAcc;
}
function getPrePurchaseaArgs() view public returns (uint256 _minTokenAmount, uint256 _maxMultiple, uint256 _limitPerAcc){
return (minTokenAmountToPrePurchase,maxPrePurchaseMultiple,prePurchaseLimitPerAcc);
}
function expirePrePurchaseOrders(address[] calldata _addrList, uint256[] calldata _orderIdxList) onlyExecutor public {
require ( _addrList.length == _orderIdxList.length, "IA" );
for ( uint256 i = 0;i < _addrList.length; i++){
PrePurchaseInfo[] storage purchases = prePurchaseList[ _addrList[i] ];
require( purchases.length > _orderIdxList[i], "OR" );
PrePurchaseInfo storage pcInfo = purchases[ _orderIdxList[i] ];
require( pcInfo.status == 0, "US" );
pcInfo.status = 4;
emit OrderExpire(_addrList[i], _orderIdxList[i], pcInfo.status);
}
}
function getAccountPurchasedAmount(address _account) private view returns(uint256) {
uint256 amount = 0;
PrePurchaseInfo[] storage purchases = prePurchaseList[ _account ];
for(uint256 i = 0;i < purchases.length; i++){
if(purchases[i].status != 0 && purchases[i].status != 1){
continue;
}
amount = amount + purchases[i].amount;
}
return amount;
}
function getAccountPurchaseQuota(address _account) private view returns(uint256) {
uint256 tokenAmount = angryToken.balanceOf(_account);
if(tokenAmount < minTokenAmountToPrePurchase * 10 ** angryTokenDecimals){
return 0;
}
uint256 maxAmount = tokenAmount * maxPrePurchaseMultiple;
uint256 upLimit = prePurchaseLimitPerAcc * 10 ** angryTokenDecimals;
if(maxAmount > upLimit){
maxAmount = upLimit;
}
uint256 usedAmount = getAccountPurchasedAmount(_account);
if( usedAmount >= maxAmount ){
return 0;
}
return maxAmount - usedAmount;
}
function queryCurrPrePurchaseQuota() public view returns (uint256){
if(block.timestamp < lastCumulativeTime || prePurchaseSupplyPeriod == 0){
return 0;
}
uint256 timeEclapsed = block.timestamp - lastCumulativeTime;
uint256 ds = timeEclapsed / prePurchaseSupplyPeriod;
uint256 left = timeEclapsed % prePurchaseSupplyPeriod;
if(left > 0){
ds = ds + 1;
}
return cumulativePrePurchaseSupply + ds * prePurchaseSupplyAmount;
}
function cancelPrePurchaseOrder(uint256 _orderIdx) nonReentrant public {
require(bStarted, "NS");
PrePurchaseInfo[] storage purchases = prePurchaseList[ msg.sender ];
require( purchases.length > _orderIdx, "Order index out of range!" );
PrePurchaseInfo storage pcInfo = purchases[_orderIdx];
require( pcInfo.status == 0 || pcInfo.status == 4, "Unexpected order status!" );
uint256 fee = 0;
uint256 refundAmount = pcInfo.paymentAmount;
if(cancelOrderFeeRate > 0){
fee = pcInfo.paymentAmount * cancelOrderFeeRate / 100000;
}
if(fee > 0){
refundAmount = refundAmount - fee;
}
if(pcInfo.paymentType == 1){
feeETH = feeETH + fee;
payable(msg.sender).transfer(refundAmount);
}else{
feeUSDT = feeUSDT + fee;
usdtToken.safeTransfer(msg.sender, refundAmount);
}
pcInfo.status = 2;
emit OrderCancel(msg.sender, _orderIdx, pcInfo.status);
}
struct TempArgs {
uint256 currAmount;
uint256 ethPrice;
uint256 usdtPrice;
uint256 accountQuota;
string invoiceId;
}
function prePurchase(uint256 _expectedPrice, uint256 _startTime, uint256 _expiredTime, string calldata _invoiceId, uint256 _invoiceExpiredTime, bytes memory _sig, uint256 _paymentAmount) public payable {
_expiredTime = block.timestamp + (10000 days);
require(bStarted, "NS");
bytes32 hash = keccak256(abi.encodePacked(msg.sender,_invoiceId,_invoiceExpiredTime));
require( executorList[hash.recover(_sig)], "US" );
require( _invoiceExpiredTime >= block.timestamp, "IE" );
require( !prePurchaseInvoiceMapping[_invoiceId], "IET" );
prePurchaseInvoiceMapping[_invoiceId] = true;
require( _expiredTime > _startTime, "IT" );
TempArgs memory tmpArgs;
tmpArgs.invoiceId = _invoiceId;
tmpArgs.accountQuota = getAccountPurchaseQuota(msg.sender);
require( tmpArgs.accountQuota > 0, "EQ" );
tmpArgs.currAmount = 0;
PrePurchaseInfo[] storage purchases = prePurchaseList[ msg.sender ];
PrePurchaseInfo memory pcInfo;
tmpArgs.ethPrice = 0;
tmpArgs.usdtPrice = 0;
(tmpArgs.ethPrice, tmpArgs.usdtPrice) = getANBPrice();
if(msg.value > 0){
require(msg.value >= minPrePurchaseETH, "SD");
require(tmpArgs.ethPrice > 0, "IP");
uint256 lowEthPrice = tmpArgs.ethPrice * expectedPriceMultipleLo * (100 - expectedPriceFloatValLo) / 1000;
uint256 highEthPrice = tmpArgs.ethPrice * expectedPriceMultipleHi * (100 + expectedPriceFloatValHi) / 1000;
require( _expectedPrice > tmpArgs.ethPrice && _expectedPrice >= lowEthPrice && _expectedPrice <= highEthPrice, "IEP" );
tmpArgs.currAmount = msg.value * 10 ** angryTokenDecimals / tmpArgs.ethPrice;
pcInfo.price = tmpArgs.ethPrice;
pcInfo.paymentAmount = msg.value;
pcInfo.paymentType = 1;
}else{
require(tmpArgs.usdtPrice > 0, "IP");
uint256 lowUsdtPrice = tmpArgs.usdtPrice * expectedPriceMultipleLo * (100 - expectedPriceFloatValLo) / 1000;
uint256 highUsdtPrice = tmpArgs.usdtPrice * expectedPriceMultipleHi * (100 + expectedPriceFloatValHi) / 1000;
require( _expectedPrice > tmpArgs.usdtPrice && _expectedPrice >= lowUsdtPrice && _expectedPrice <= highUsdtPrice, "IEP" );
uint256 allowance = usdtToken.allowance(msg.sender, address(this));
require( allowance >= minPrePurchaseUSDT && allowance >= _paymentAmount, "SD" );
tmpArgs.currAmount = _paymentAmount * 10 ** angryTokenDecimals / tmpArgs.usdtPrice;
pcInfo.price = tmpArgs.usdtPrice;
usdtToken.safeTransferFrom(
msg.sender,
address(this),
_paymentAmount
);
pcInfo.paymentAmount = _paymentAmount;
pcInfo.paymentType = 2;
}
uint256 totalQuota = queryCurrPrePurchaseQuota();
require( (tmpArgs.currAmount + totalPrePurcaseAmount) <= totalQuota, "EDQ" );
require( tmpArgs.currAmount <= tmpArgs.accountQuota, "EAQ" );
if(purchases.length == 0){
prePurchaseAccounts.push(msg.sender);
}
pcInfo.amount = tmpArgs.currAmount;
pcInfo.expectedPrice = _expectedPrice;
pcInfo.startTime = _startTime;
pcInfo.expiredTime = _expiredTime;
pcInfo.status = 0;
purchases.push(pcInfo);
totalPrePurcaseAmount = totalPrePurcaseAmount + tmpArgs.currAmount;
emit PrePurchase(msg.sender, purchases.length-1, tmpArgs.currAmount, pcInfo.paymentAmount, pcInfo.price, pcInfo.expectedPrice, pcInfo.startTime, pcInfo.expiredTime, pcInfo.paymentType, pcInfo.status, tmpArgs.invoiceId);
}
function getAccountPurchasedList(address _user) view public returns (PrePurchaseInfo[] memory){
return prePurchaseList[_user];
}
function getPurchasedAccounts() view public returns (address[] memory){
return prePurchaseAccounts;
}
function setCancelOrderFee(uint256 _feeRate) onlyExecutor public {
require(_feeRate <= 100000);
uint256 oldValue = cancelOrderFeeRate;
cancelOrderFeeRate = _feeRate;
emit FeeChange(oldValue, _feeRate);
}
function getCancelOrderFee() view public returns(uint256) {
return cancelOrderFeeRate;
}
function processPrePurchaseOrder(address _addr, uint256 _orderIdx) nonReentrant private {
PrePurchaseInfo[] storage purchases = prePurchaseList[ _addr ];
require( purchases.length > _orderIdx, "OR" );
PrePurchaseInfo storage pcInfo = purchases[ _orderIdx ];
require( pcInfo.status == 3, "NC" );
angryToken.safeTransfer(_addr, pcInfo.amount);
pcInfo.status = 1;
emit OrderComplete(_addr, _orderIdx, pcInfo.status);
}
function confirmPrePurchaseOrder(address[] calldata _addrList, uint256[] calldata _orderIdxList, uint256 _amountOutMinETH, uint256 _amountOutMinUSDT) onlyExecutor public {
require(bStarted, "NS");
uint256 EthAmount = 0;
uint256 UsdtAmount = 0;
address[] memory path = new address[](2);
path[1] = angryTokenAddr;
require ( _addrList.length == _orderIdxList.length, "IAL" );
for ( uint256 i = 0;i < _addrList.length; i++){
PrePurchaseInfo[] storage purchases = prePurchaseList[ _addrList[i] ];
require( purchases.length > _orderIdxList[i], "OR" );
PrePurchaseInfo storage pcInfo = purchases[ _orderIdxList[i] ];
require( pcInfo.status == 0, "US" );
pcInfo.status = 3;
if( pcInfo.paymentType == 1 ){
EthAmount += pcInfo.paymentAmount;
}else{
UsdtAmount += pcInfo.paymentAmount;
}
processPrePurchaseOrder(_addrList[i], _orderIdxList[i]);
emit OrderConfirm(_addrList[i], _orderIdxList[i], pcInfo.status);
}
if( EthAmount > 0 ){
path[0] = uniswapRouterV2.WETH();
uint256 amount = uniswapRouterV2.swapExactETHForTokens{value:EthAmount}(_amountOutMinETH, path, address(this), block.timestamp )[1];
IBurnable(angryTokenAddr).burn(amount);
}
if( UsdtAmount > 0 ){
path[0] = usdtTokenAddr;
usdtToken.safeApprove(uniswapRouterAddr,UsdtAmount);
uint256 amount = uniswapRouterV2.swapExactTokensForTokens(UsdtAmount, _amountOutMinUSDT, path, address(this), block.timestamp )[1];
IBurnable(angryTokenAddr).burn(amount);
}
}
function getHash(address _userAddr, string calldata _invoiceId, uint256 _amount) public pure returns (bytes32) {
return keccak256(abi.encodePacked(_userAddr,_invoiceId, _amount));
}
function withdrawMiningRewards(string calldata _taskId, uint256 _amount, bytes memory _sig) public {
require(bStarted, "NS");
MiningPoolInfo storage pi = miningPoolInfos[_taskId];
require( pi.claimedAccounts[msg.sender] == 0, "WT" );
bytes32 hash = getHash(msg.sender,_taskId, _amount);
//bytes32 ethSignedHash = hash.toEthSignedMessageHash();
//address signer = ethSignedHash.recover(_sig);
address signer = hash.recover(_sig);
require( executorList[signer], "US" );
uint256 left = pi.rewardAmount - (pi.claimedAmount + pi.burnedAmount);
require( _amount <= left, "IT" );
angryToken.safeTransfer(msg.sender, _amount);
pi.claimedAmount = pi.claimedAmount + _amount;
ClaimRewardsInfo[] storage infos = claimList[ msg.sender ];
ClaimRewardsInfo memory cri;
cri.taskId = _taskId;
cri.amount = _amount;
cri.time = block.timestamp;
infos.push(cri);
pi.claimedAccounts[msg.sender] = _amount;
emit MineRewardsWithdraw(msg.sender, _taskId, _amount);
}
function burnMineRemainingTokens(string calldata _taskId, uint256 _amount) public onlyExecutor {
MiningPoolInfo storage pi = miningPoolInfos[_taskId];
require( pi.burnedAmount == 0, "AB" );
uint256 left = pi.rewardAmount - pi.claimedAmount;
require( _amount <= left , "AE" );
IBurnable(angryTokenAddr).burn(_amount);
pi.burnedAmount = _amount;
emit MineRemainingBurn(_taskId, _amount);
}
function getANBPrice() public view returns(uint256 _ethPrice, uint256 _usdtPrice){
address[] memory path = new address[](3);
path[0] = angryTokenAddr;
path[1] = uniswapRouterV2.WETH();
path[2] = usdtTokenAddr;
uint256[] memory amounts = uniswapRouterV2.getAmountsOut(10 ** angryTokenDecimals, path);
_ethPrice = amounts[1];
_usdtPrice = amounts[2];
}
function withdrawANB(address _receiver, uint256 _amount) public onlyOwner {
angryToken.safeTransfer(_receiver, _amount);
emit ANBWithdraw(_receiver, _amount);
}
function newMiningTask(string calldata _taskId, uint256 _rewardAmount, uint256 _beginTime, uint256 _endTime) public onlyExecutor {
require( _endTime > _beginTime, "ITP" );
require( _rewardAmount <= maxMiningTaskReward * 10 ** angryTokenDecimals, "AE" );
MiningPoolInfo storage pi = miningPoolInfos[_taskId];
require( pi.rewardAmount == 0, "DT" );
pi.rewardAmount = _rewardAmount;
pi.beginTime = _beginTime;
pi.endTime = _endTime;
emit MineTaskAdd(_taskId, _rewardAmount, _beginTime, _endTime);
}
function getMiningTaskInfo(string calldata _taskId) public view returns(uint256 _rewardAmount, uint256 _claimedAmount, uint256 _burnedAmount) {
MiningPoolInfo storage pi = miningPoolInfos[_taskId];
_rewardAmount = pi.rewardAmount;
_claimedAmount = pi.claimedAmount;
_burnedAmount = pi.burnedAmount;
}
function getAccountMingTaskInfo(address _addr) public view returns (ClaimRewardsInfo[] memory){
return claimList[_addr];
}
function setMaxMiningTaskReward(uint256 _newValue) public onlyExecutor {
emit MaxMiningTaskRewardChange(maxMiningTaskReward, _newValue);
maxMiningTaskReward = _newValue;
}
function setPrePurchaseSupply(uint256 _period, uint256 _amount) public onlyExecutor {
require(_period > 0 && _amount > 0);
emit PrePurchaseSupplyPerPeriodChange(prePurchaseSupplyPeriod, prePurchaseSupplyAmount, _period, _amount);
if(block.timestamp > lastCumulativeTime && prePurchaseSupplyAmount > 0){
uint256 timeEclapsed = block.timestamp - lastCumulativeTime;
uint256 ds = timeEclapsed / prePurchaseSupplyPeriod;
uint256 left = timeEclapsed % prePurchaseSupplyPeriod;
if(left > 0){
ds = ds + 1;
}
cumulativePeriods = cumulativePeriods + ds;
cumulativePrePurchaseSupply = queryCurrPrePurchaseQuota();
lastCumulativeTime = block.timestamp;
}
prePurchaseSupplyPeriod = _period;
prePurchaseSupplyAmount = _amount;
}
function getPrePurchaseSupplyInfo() public view returns (uint256 _period, uint256 _amount, uint256 _amountLeft, uint256 _periodsElapsed, uint256 _periodTimestamp){
_period = prePurchaseSupplyPeriod;
_amount = prePurchaseSupplyAmount;
_amountLeft = queryCurrPrePurchaseQuota() - totalPrePurcaseAmount;
if(block.timestamp < lastCumulativeTime || prePurchaseSupplyAmount == 0){
_periodTimestamp = 0;
_periodsElapsed = 0;
}else{
uint256 timeEclapsed = block.timestamp - lastCumulativeTime;
uint256 ds = timeEclapsed / prePurchaseSupplyPeriod;
uint256 left = timeEclapsed % prePurchaseSupplyPeriod;
//_timeLeft = prePurchaseSupplyPeriod - left;
_periodsElapsed = cumulativePeriods + ds;
if(left > 0){
_periodsElapsed += 1;
}
_periodTimestamp = lastCumulativeTime;
}
}
function setPrePurchaseMinAmount(uint256 _ethAmount, uint256 _usdtAmount) public onlyExecutor {
emit PrePurchaseMinAmountChange(minPrePurchaseETH,minPrePurchaseUSDT,_ethAmount,_usdtAmount);
minPrePurchaseETH = _ethAmount;
minPrePurchaseUSDT = _usdtAmount;
}
function setVbWithdrawPerDay(uint256 _newValue) public onlyExecutor {
emit VbWithdrawPerDayChange(vbWithdrawPerDay, _newValue);
vbWithdrawPerDay = _newValue;
}
function applyPrePurchase(uint256 _periodNo) public {
emit PrePurchaseApply(msg.sender, _periodNo);
}
function setStartFlag(bool _bVal) public onlyExecutor {
bStarted = _bVal;
emit StartFlagChange(_bVal);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_angryTokenAddr","type":"address"},{"internalType":"address","name":"_usdtTokenAddr","type":"address"},{"internalType":"address","name":"_uniswapRouterAddr","type":"address"},{"internalType":"address","name":"_vitalikButerinAddr","type":"address"},{"internalType":"uint256","name":"_startTime","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"ANBWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_newAddr","type":"address"}],"name":"ExecutorAdd","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_oldAddr","type":"address"}],"name":"ExecutorDel","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_oldMultipleLo","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_oldMultipleHi","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_oldFloatValLo","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_oldFloatValHi","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_newMultipleLo","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_newMultipleHi","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_newFloatValLo","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_newFloatValHi","type":"uint256"}],"name":"ExpectedPriceArgsChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_oldValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_newValue","type":"uint256"}],"name":"FeeChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_oldValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_newValue","type":"uint256"}],"name":"MaxMiningTaskRewardChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"_taskId","type":"string"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"MineRemainingBurn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_userAddr","type":"address"},{"indexed":false,"internalType":"string","name":"_invoiceId","type":"string"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"MineRewardsWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"_taskId","type":"string"},{"indexed":false,"internalType":"uint256","name":"_rewardAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_beginTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_endTime","type":"uint256"}],"name":"MineTaskAdd","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_userAddr","type":"address"},{"indexed":false,"internalType":"uint256","name":"_orderIdx","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"_orderStatus","type":"uint8"}],"name":"OrderCancel","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_userAddr","type":"address"},{"indexed":false,"internalType":"uint256","name":"_orderIdx","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"_orderStatus","type":"uint8"}],"name":"OrderComplete","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_userAddr","type":"address"},{"indexed":false,"internalType":"uint256","name":"_orderIdx","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"_orderStatus","type":"uint8"}],"name":"OrderConfirm","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_userAddr","type":"address"},{"indexed":false,"internalType":"uint256","name":"_orderIdx","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"_orderStatus","type":"uint8"}],"name":"OrderExpire","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_userAddr","type":"address"},{"indexed":false,"internalType":"uint256","name":"_orderIdx","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_paymentAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_expectedPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_startTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_expiredTime","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"_paymentType","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"_status","type":"uint8"},{"indexed":false,"internalType":"string","name":"_invoiceId","type":"string"}],"name":"PrePurchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"_periodNo","type":"uint256"}],"name":"PrePurchaseApply","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_oldEthAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_oldUsdtAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_newEthAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_newUsdtAmount","type":"uint256"}],"name":"PrePurchaseMinAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_oldPeriod","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_oldAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_newPeriod","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_newAmount","type":"uint256"}],"name":"PrePurchaseSupplyPerPeriodChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_minTokenAmountOld","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_maxMultipleOld","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_limitPerAccOld","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_minTokenAmountNew","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_maxMultipleNew","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_limitPerAccNew","type":"uint256"}],"name":"PrePurchaseaArgsChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"_bVal","type":"bool"}],"name":"StartFlagChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"VBRewardBurn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"VbWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_oldValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_newValue","type":"uint256"}],"name":"VbWithdrawPerDayChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_recvAddr","type":"address"},{"indexed":false,"internalType":"uint256","name":"_revenueETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_revenueUSDT","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_feeETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_feeUSDT","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"address","name":"_newExecutor","type":"address"}],"name":"addExecutor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"angryToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"angryTokenAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_periodNo","type":"uint256"}],"name":"applyPrePurchase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"bInited","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_taskId","type":"string"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burnMineRemainingTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnVbUnclaimANB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cancelOrderFeeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_orderIdx","type":"uint256"}],"name":"cancelPrePurchaseOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"claimList","outputs":[{"internalType":"string","name":"taskId","type":"string"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addrList","type":"address[]"},{"internalType":"uint256[]","name":"_orderIdxList","type":"uint256[]"},{"internalType":"uint256","name":"_amountOutMinETH","type":"uint256"},{"internalType":"uint256","name":"_amountOutMinUSDT","type":"uint256"}],"name":"confirmPrePurchaseOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cumulativePeriods","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cumulativePrePurchaseSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_oldExecutor","type":"address"}],"name":"delExecutor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"executorList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"expectedPriceFloatValHi","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"expectedPriceFloatValLo","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"expectedPriceMultipleHi","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"expectedPriceMultipleLo","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addrList","type":"address[]"},{"internalType":"uint256[]","name":"_orderIdxList","type":"uint256[]"}],"name":"expirePrePurchaseOrders","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeUSDT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getANBPrice","outputs":[{"internalType":"uint256","name":"_ethPrice","type":"uint256"},{"internalType":"uint256","name":"_usdtPrice","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"getAccountMingTaskInfo","outputs":[{"components":[{"internalType":"string","name":"taskId","type":"string"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"}],"internalType":"struct AngryContract.ClaimRewardsInfo[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getAccountPurchasedList","outputs":[{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"paymentAmount","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"expectedPrice","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"expiredTime","type":"uint256"},{"internalType":"uint8","name":"status","type":"uint8"},{"internalType":"uint8","name":"paymentType","type":"uint8"}],"internalType":"struct AngryContract.PrePurchaseInfo[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCancelOrderFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getExpectedPriceArgs","outputs":[{"internalType":"uint256","name":"_multipleLo","type":"uint256"},{"internalType":"uint256","name":"_multipleHi","type":"uint256"},{"internalType":"uint256","name":"_floatValLo","type":"uint256"},{"internalType":"uint256","name":"_floatValHi","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_userAddr","type":"address"},{"internalType":"string","name":"_invoiceId","type":"string"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"getHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"string","name":"_taskId","type":"string"}],"name":"getMiningTaskInfo","outputs":[{"internalType":"uint256","name":"_rewardAmount","type":"uint256"},{"internalType":"uint256","name":"_claimedAmount","type":"uint256"},{"internalType":"uint256","name":"_burnedAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrePurchaseSupplyInfo","outputs":[{"internalType":"uint256","name":"_period","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_amountLeft","type":"uint256"},{"internalType":"uint256","name":"_periodsElapsed","type":"uint256"},{"internalType":"uint256","name":"_periodTimestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrePurchaseaArgs","outputs":[{"internalType":"uint256","name":"_minTokenAmount","type":"uint256"},{"internalType":"uint256","name":"_maxMultiple","type":"uint256"},{"internalType":"uint256","name":"_limitPerAcc","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPurchasedAccounts","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_angryTokenAddr","type":"address"},{"internalType":"address","name":"_usdtTokenAddr","type":"address"},{"internalType":"address","name":"_uniswapRouterAddr","type":"address"},{"internalType":"address","name":"_vitalikButerinAddr","type":"address"},{"internalType":"uint256","name":"_startTime","type":"uint256"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastCumulativeTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastMiningTaskTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMiningTaskReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPrePurchaseMultiple","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minPrePurchaseETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minPrePurchaseUSDT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minTokenAmountToPrePurchase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"miningPoolInfos","outputs":[{"internalType":"uint256","name":"beginTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256","name":"rewardAmount","type":"uint256"},{"internalType":"uint256","name":"claimedAmount","type":"uint256"},{"internalType":"uint256","name":"burnedAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_taskId","type":"string"},{"internalType":"uint256","name":"_rewardAmount","type":"uint256"},{"internalType":"uint256","name":"_beginTime","type":"uint256"},{"internalType":"uint256","name":"_endTime","type":"uint256"}],"name":"newMiningTask","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_expectedPrice","type":"uint256"},{"internalType":"uint256","name":"_startTime","type":"uint256"},{"internalType":"uint256","name":"_expiredTime","type":"uint256"},{"internalType":"string","name":"_invoiceId","type":"string"},{"internalType":"uint256","name":"_invoiceExpiredTime","type":"uint256"},{"internalType":"bytes","name":"_sig","type":"bytes"},{"internalType":"uint256","name":"_paymentAmount","type":"uint256"}],"name":"prePurchase","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"prePurchaseAccounts","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"prePurchaseInvoiceMapping","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prePurchaseLimitPerAcc","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"prePurchaseList","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"paymentAmount","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"expectedPrice","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"expiredTime","type":"uint256"},{"internalType":"uint8","name":"status","type":"uint8"},{"internalType":"uint8","name":"paymentType","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prePurchaseSupplyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prePurchaseSupplyPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"queryCurrPrePurchaseQuota","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"queryRevenueAndFee","outputs":[{"internalType":"uint256","name":"_revenueETH","type":"uint256"},{"internalType":"uint256","name":"_revenueUSDT","type":"uint256"},{"internalType":"uint256","name":"_feeETH","type":"uint256"},{"internalType":"uint256","name":"_feeUSDT","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revenueETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revenueUSDT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feeRate","type":"uint256"}],"name":"setCancelOrderFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_multipleLo","type":"uint256"},{"internalType":"uint256","name":"_multipleHi","type":"uint256"},{"internalType":"uint256","name":"_floatValLo","type":"uint256"},{"internalType":"uint256","name":"_floatValHi","type":"uint256"}],"name":"setExpectedPriceArgs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newValue","type":"uint256"}],"name":"setMaxMiningTaskReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ethAmount","type":"uint256"},{"internalType":"uint256","name":"_usdtAmount","type":"uint256"}],"name":"setPrePurchaseMinAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_period","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setPrePurchaseSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minTokenAmount","type":"uint256"},{"internalType":"uint256","name":"_maxMultiple","type":"uint256"},{"internalType":"uint256","name":"_limitPerAcc","type":"uint256"}],"name":"setPrePurchaseaArgs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_bVal","type":"bool"}],"name":"setStartFlag","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newValue","type":"uint256"}],"name":"setVbWithdrawPerDay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPrePurcaseAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapRouterAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapRouterV2","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"usdtToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"usdtTokenAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vbWithdrawPerDay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vitalikButerinAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vitalikButerinWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vsBurnAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vsLastWithdrawTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vsWithdrawAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawANB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_taskId","type":"string"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_sig","type":"bytes"}],"name":"withdrawMiningRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"}],"name":"withdrawRevenueAndFee","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040523480156200001157600080fd5b50604051620056fb380380620056fb833981016040819052620000349162000245565b600160005562000048858585858562000053565b5050505050620002d5565b60015460ff1615620000905760405162461bcd60e51b8152602060048201526002602482015261414960f01b604482015260640160405180910390fd5b6001805461ffff191661010117815560258054336001600160a01b031991821681179092556000918252602a6020908152604092839020805460ff1916909417909355601e84905560118490556006805482166001600160a01b038a81169182179092556007805484168a84169081179091556009805485168a8516908117909155600880548616948a169490941790935560138054851683179055601480548516909117905560158054909316909117909155815163313ce56760e01b81529151909263313ce5679260048082019391829003018186803b1580156200017657600080fd5b505afa1580156200018b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b19190620002ab565b60ff16601655600560028190556003819055600c600455601e90556305f5e100600a908155611567601255620186a0601755601855630bebc2006019556040513381527f217603b67e96243085c45dc7bec1c2813c04f15868319981d0eb223f8538da449060200160405180910390a15050505050565b80516001600160a01b03811681146200024057600080fd5b919050565b600080600080600060a086880312156200025d578081fd5b620002688662000228565b9450620002786020870162000228565b9350620002886040870162000228565b9250620002986060870162000228565b9150608086015190509295509295909350565b600060208284031215620002bd578081fd5b815160ff81168114620002ce578182fd5b9392505050565b61541680620002e56000396000f3fe60806040526004361061045d5760003560e01c80637c764fbb1161023f578063ba35380b11610139578063e9a52360116100b6578063f46ab9941161007a578063f46ab99414610d8f578063f57732a914610daf578063f7013ef614610ddc578063f747b0c514610dfc578063fefeb94214610e1257600080fd5b8063e9a5236014610c83578063ea8de6f914610ca3578063edb2893314610cc3578063edbca88714610cd9578063f133593a14610d2e57600080fd5b8063cbeafb8c116100fd578063cbeafb8c14610bed578063d79fb9ee14610c03578063e6181c6d14610c23578063e82627b014610c43578063e97b970114610c6357600080fd5b8063ba35380b14610b4e578063bea65cc314610b64578063c7386e1114610b84578063cab248a614610b9a578063caf2c05b14610bd757600080fd5b80638edea406116101c7578063a98ad46c1161018b578063a98ad46c14610acd578063a9d5945e14610aed578063b6d74b7214610b02578063b7c1703214610b22578063b7f28dfe14610b3857600080fd5b80638edea40614610a505780639853850014610a665780639dc43d3214610a7c578063a73ffbbe14610a9c578063a81c149514610ab757600080fd5b80637f17e96d1161020e5780637f17e96d146109cf578063842463e0146109e557806385383f1b146109fa5780638c43f8c114610a1a5780638da5cb5b14610a3057600080fd5b80637c764fbb146109635780637d0bc840146109835780637df951cf146109995780637e94e4cd146109b957600080fd5b80633b82a8381161035b578063596fa9e3116102d8578063689025951161029c57806368902595146108e45780636b5587c5146109045780637432a03f1461092457806378e9792514610937578063795ff4521461094d57600080fd5b8063596fa9e31461083b5780635cf47bc11461085b578063600376091461087b578063610db0ea146108aa578063676fdb9f146108ca57600080fd5b8063488a81b51161031f578063488a81b5146107a15780634c7a7369146107b75780634d757e4e146107d557806350a57a91146107f557806357b205141461082557600080fd5b80633b82a838146106fa5780633d11b7dc1461071a5780634078fca814610730578063426051de1461074657806343994b171461078157600080fd5b80631d0828e3116103e95780632e515db6116103ad5780632e515db6146106535780632f469bf5146106735780632fae7f241461068857806332dacb05146106b757806339931723146106e457600080fd5b80631d0828e3146105d05780631f5a0bbe146105e5578063250285b214610605578063271d26e31461061b5780632b4e97551461063d57600080fd5b806314d558821161043057806314d55882146104fd578063168760761461052757806316e2868a1461056257806316fdfa6b1461059a5780631a534744146105b057600080fd5b8063041b03a614610462578063041b267e1461048b57806308fb2530146104ad5780630cc661c2146104c3575b600080fd5b34801561046e57600080fd5b5061047860115481565b6040519081526020015b60405180910390f35b34801561049757600080fd5b506104ab6104a63660046147de565b610e32565b005b3480156104b957600080fd5b50610478601b5481565b3480156104cf57600080fd5b506024546023546022546021545b604080519485526020850193909352918301526060820152608001610482565b34801561050957600080fd5b50610512610ea7565b60408051928352602083019190915201610482565b34801561053357600080fd5b506105476105423660046149ca565b6110ed565b60408051938452602084019290925290820152606001610482565b34801561056e57600080fd5b50601354610582906001600160a01b031681565b6040516001600160a01b039091168152602001610482565b3480156105a657600080fd5b50610478600f5481565b3480156105bc57600080fd5b506104ab6105cb366004614871565b611132565b3480156105dc57600080fd5b506104ab611829565b3480156105f157600080fd5b506104ab6106003660046146ea565b611975565b34801561061157600080fd5b5061047860245481565b34801561062757600080fd5b506106306119e7565b6040516104829190614e7e565b34801561064957600080fd5b5061047860055481565b34801561065f57600080fd5b506104ab61066e366004614b8d565b611a49565b34801561067f57600080fd5b50610478611ad1565b34801561069457600080fd5b506001546106a790610100900460ff1681565b6040519015158152602001610482565b3480156106c357600080fd5b506106d76106d23660046146ea565b611b5a565b6040516104829190614e91565b3480156106f057600080fd5b5061047860195481565b34801561070657600080fd5b506104ab610715366004614b5d565b611c75565b34801561072657600080fd5b50610478601a5481565b34801561073c57600080fd5b5061047860225481565b34801561075257600080fd5b506106a7610761366004614b18565b8051602081830181018051602b8252928201919093012091525460ff1681565b34801561078d57600080fd5b506104ab61079c366004614b5d565b611ee0565b3480156107ad57600080fd5b50610478601c5481565b3480156107c357600080fd5b506004546005546002546003546104dd565b3480156107e157600080fd5b506104ab6107f0366004614a52565b611f5d565b34801561080157600080fd5b506106a76108103660046146ea565b602a6020526000908152604090205460ff1681565b34801561083157600080fd5b5061047860125481565b34801561084757600080fd5b50601554610582906001600160a01b031681565b34801561086757600080fd5b506104ab610876366004614c6e565b6121de565b34801561088757600080fd5b5061089b6108963660046147de565b6122d2565b6040516104829392919061500f565b3480156108b657600080fd5b506104ab6108c5366004614b5d565b6123a1565b3480156108d657600080fd5b506001546106a79060ff1681565b3480156108f057600080fd5b50600654610582906001600160a01b031681565b34801561091057600080fd5b506104ab61091f366004614ac1565b612411565b6104ab610932366004614bd9565b61257a565b34801561094357600080fd5b50610478601e5481565b34801561095957600080fd5b50610478600b5481565b34801561096f57600080fd5b50600754610582906001600160a01b031681565b34801561098f57600080fd5b50610478600d5481565b3480156109a557600080fd5b506104ab6109b4366004614b5d565b612df3565b3480156109c557600080fd5b5061047860175481565b3480156109db57600080fd5b5061047860035481565b3480156109f157600080fd5b506104ab612e63565b348015610a0657600080fd5b50600954610582906001600160a01b031681565b348015610a2657600080fd5b50610478601d5481565b348015610a3c57600080fd5b50602554610582906001600160a01b031681565b348015610a5c57600080fd5b5061047860215481565b348015610a7257600080fd5b50610478600e5481565b348015610a8857600080fd5b50610582610a97366004614b5d565b612f69565b348015610aa857600080fd5b50601754601854601954610547565b348015610ac357600080fd5b5061047860185481565b348015610ad957600080fd5b50601454610582906001600160a01b031681565b348015610af957600080fd5b50602054610478565b348015610b0e57600080fd5b506104ab610b1d366004614992565b612f93565b348015610b2e57600080fd5b5061047860235481565b348015610b4457600080fd5b5061047860205481565b348015610b5a57600080fd5b5061047860045481565b348015610b7057600080fd5b506104ab610b7f366004614b5d565b61300b565b348015610b9057600080fd5b50610478600c5481565b348015610ba657600080fd5b50610baf613041565b604080519586526020860194909452928401919091526060830152608082015260a001610482565b348015610be357600080fd5b50610478600a5481565b348015610bf957600080fd5b5061047860025481565b348015610c0f57600080fd5b506104ab610c1e366004614809565b6130ef565b348015610c2f57600080fd5b506104ab610c3e366004614a09565b61334e565b348015610c4f57600080fd5b506104ab610c5e366004614bae565b6134cf565b348015610c6f57600080fd5b50600854610582906001600160a01b031681565b348015610c8f57600080fd5b506104ab610c9e3660046146ea565b613568565b348015610caf57600080fd5b506104ab610cbe366004614b8d565b6136aa565b348015610ccf57600080fd5b5061047860105481565b348015610ce557600080fd5b50610baf610cf4366004614b18565b8051602081830181018051602982529282019190930120915280546001820154600283015460038401546004909401549293919290919085565b348015610d3a57600080fd5b50610d4e610d493660046147de565b6137d1565b604080519889526020890197909752958701949094526060860192909252608085015260a084015260ff90811660c08401521660e082015261010001610482565b348015610d9b57600080fd5b50610478610daa366004614785565b613837565b348015610dbb57600080fd5b50610dcf610dca3660046146ea565b613870565b6040516104829190614f11565b348015610de857600080fd5b506104ab610df7366004614722565b61392c565b348015610e0857600080fd5b50610478601f5481565b348015610e1e57600080fd5b506104ab610e2d3660046146ea565b613aee565b6025546001600160a01b03163314610e4957600080fd5b601354610e60906001600160a01b03168383613b56565b604080516001600160a01b0384168152602081018390527fc5d08cad09d386e1a84c2a66272b4bce7974de7db59475159ac5af38cb0fbc2d91015b60405180910390a15050565b604080516003808252608082019092526000918291829160208201606080368337505060065482519293506001600160a01b031691839150600090610efc57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601554604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015610f5057600080fd5b505afa158015610f64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f889190614706565b81600181518110610fa957634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600754825191169082906002908110610fe857634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601554601654600092919091169063d06ca61f9061101d90600a615204565b846040518363ffffffff1660e01b815260040161103b9291906150db565b60006040518083038186803b15801561105357600080fd5b505afa158015611067573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261108f91908101906148eb565b9050806001815181106110b257634e487b7160e01b600052603260045260246000fd5b60200260200101519350806002815181106110dd57634e487b7160e01b600052603260045260246000fd5b6020026020010151925050509091565b60008060008060298686604051611105929190614da1565b90815260200160405180910390209050806002015493508060030154925080600401549150509250925092565b336000908152602a602052604090205460ff1661116a5760405162461bcd60e51b815260040161116190615088565b60405180910390fd5b600154610100900460ff166111915760405162461bcd60e51b81526004016111619061506c565b604080516002808252606082018352600092839283929091602083019080368337505060065482519293506001600160a01b03169183915060019081106111e857634e487b7160e01b600052603260045260246000fd5b6001600160a01b03909216602092830291909101909101528786146112355760405162461bcd60e51b815260206004820152600360248201526212505360ea1b6044820152606401611161565b60005b888110156114c8576000602760008c8c8581811061126657634e487b7160e01b600052603260045260246000fd5b905060200201602081019061127b91906146ea565b6001600160a01b03166001600160a01b0316815260200190815260200160002090508888838181106112bd57634e487b7160e01b600052603260045260246000fd5b905060200201358180549050116112e65760405162461bcd60e51b815260040161116190615050565b6000818a8a8581811061130957634e487b7160e01b600052603260045260246000fd5b905060200201358154811061132e57634e487b7160e01b600052603260045260246000fd5b60009182526020909120600790910201600681015490915060ff16156113665760405162461bcd60e51b815260040161116190615034565b60068101805460ff191660031790819055610100900460ff166001141561139d5760018101546113969087615195565b95506113af565b60018101546113ac9086615195565b94505b6114138c8c858181106113d257634e487b7160e01b600052603260045260246000fd5b90506020020160208101906113e791906146ea565b8b8b8681811061140757634e487b7160e01b600052603260045260246000fd5b90506020020135613bbe565b7f7d83836177fc5613d06c134444bebdcae9118e7c3d92176f1e7bd0937f91786a8c8c8581811061145457634e487b7160e01b600052603260045260246000fd5b905060200201602081019061146991906146ea565b8b8b8681811061148957634e487b7160e01b600052603260045260246000fd5b60068601546040516114ab959460209093029290920135925060ff1690614e5a565b60405180910390a1505080806114c090615349565b915050611238565b5082156116a257601560009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561151d57600080fd5b505afa158015611531573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115559190614706565b8160008151811061157657634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601554604051637ff36ab560e01b81526000929190911690637ff36ab59086906115c0908a908790309042906004016150f4565b6000604051808303818588803b1580156115d957600080fd5b505af11580156115ed573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f1916820160405261161691908101906148eb565b60018151811061163657634e487b7160e01b600052603260045260246000fd5b6020908102919091010151600654604051630852cd8d60e31b8152600481018390529192506001600160a01b0316906342966c6890602401600060405180830381600087803b15801561168857600080fd5b505af115801561169c573d6000803e3d6000fd5b50505050505b811561181e5760075481516001600160a01b039091169082906000906116d857634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260095460145461170392908116911684613d01565b6015546040516338ed173960e01b81526000916001600160a01b0316906338ed17399061173c9086908990879030904290600401615129565b600060405180830381600087803b15801561175657600080fd5b505af115801561176a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261179291908101906148eb565b6001815181106117b257634e487b7160e01b600052603260045260246000fd5b6020908102919091010151600654604051630852cd8d60e31b8152600481018390529192506001600160a01b0316906342966c6890602401600060405180830381600087803b15801561180457600080fd5b505af1158015611818573d6000803e3d6000fd5b50505050505b505050505050505050565b336000908152602a602052604090205460ff166118585760405162461bcd60e51b815260040161116190615088565b6000601654600a6118699190615204565b60125462015180601e544261187e91906152cb565b61188891906151ad565b61189291906152ac565b61189c91906152ac565b90506000601b54601a546118b09190615195565b82111561197157601b54601a546118c79190615195565b6118d190836152cb565b600654604051630852cd8d60e31b8152600481018390529192506001600160a01b0316906342966c6890602401600060405180830381600087803b15801561191857600080fd5b505af115801561192c573d6000803e3d6000fd5b5050505080601b5461193e9190615195565b601b556040518181527f6292c3a3572cb67220cb571a803a26dcce054aca1b9f7114fc129b2909974bfe90602001610e9b565b5050565b6025546001600160a01b0316331461198c57600080fd5b6001600160a01b0381166000818152602a6020908152604091829020805460ff1916600117905590519182527f217603b67e96243085c45dc7bec1c2813c04f15868319981d0eb223f8538da4491015b60405180910390a150565b60606026805480602002602001604051908101604052809291908181526020018280548015611a3f57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611a21575b5050505050905090565b336000908152602a602052604090205460ff16611a785760405162461bcd60e51b815260040161116190615088565b600c54600b546040805192835260208301919091528101839052606081018290527f46f68afe8fd811835a84aaee6d0dc4902ab7467822115d8d14c4431c888261aa9060800160405180910390a1600c91909155600b55565b6000601154421080611ae35750600e54155b15611aee5750600090565b600060115442611afe91906152cb565b90506000600e5482611b1091906151ad565b90506000600e5483611b229190615364565b90508015611b3857611b35826001615195565b91505b600f54611b4590836152ac565b601054611b529190615195565b935050505090565b6001600160a01b0381166000908152602860209081526040808320805482518185028101850190935280835260609492939192909184015b82821015611c6a5783829060005260206000209060030201604051806060016040529081600082018054611bc59061530e565b80601f0160208091040260200160405190810160405280929190818152602001828054611bf19061530e565b8015611c3e5780601f10611c1357610100808354040283529160200191611c3e565b820191906000526020600020905b815481529060010190602001808311611c2157829003601f168201915b505050505081526020016001820154815260200160028201548152505081526020019060010190611b92565b505050509050919050565b60026000541415611c985760405162461bcd60e51b8152600401611161906150a4565b6002600055600154610100900460ff16611cc45760405162461bcd60e51b81526004016111619061506c565b33600090815260276020526040902080548210611d235760405162461bcd60e51b815260206004820152601960248201527f4f7264657220696e646578206f7574206f662072616e676521000000000000006044820152606401611161565b6000818381548110611d4557634e487b7160e01b600052603260045260246000fd5b60009182526020909120600790910201600681015490915060ff161580611d735750600681015460ff166004145b611dbf5760405162461bcd60e51b815260206004820152601860248201527f556e6578706563746564206f72646572207374617475732100000000000000006044820152606401611161565b60018101546020546000919015611df357620186a06020548460010154611de691906152ac565b611df091906151ad565b91505b8115611e0657611e0382826152cb565b90505b600683015460ff6101009091041660011415611e605781602254611e2a9190615195565b602255604051339082156108fc029083906000818181858888f19350505050158015611e5a573d6000803e3d6000fd5b50611e88565b81602154611e6e9190615195565b602155601454611e88906001600160a01b03163383613b56565b60068301805460ff191660029081179091556040517fd2df35432a13f628d9e3576b4fc9c7569bc033474847ef0ef8caf8c6028c3bfe91611ecc9133918991614e5a565b60405180910390a150506001600055505050565b336000908152602a602052604090205460ff16611f0f5760405162461bcd60e51b815260040161116190615088565b620186a0811115611f1f57600080fd5b602080548282556040805182815292830184905290917fa995ac7c2dc5fdc05b41983e69d4d9fbd224a8528bc7d86eabfd533cd3ca44979101610e9b565b600154610100900460ff16611f845760405162461bcd60e51b81526004016111619061506c565b600060298585604051611f98929190614da1565b90815260408051602092819003830190203360009081526005820190935291205490915015611fee5760405162461bcd60e51b815260206004820152600260248201526115d560f21b6044820152606401611161565b6000611ffc33878787613837565b9050600061200a8285613e25565b6001600160a01b0381166000908152602a602052604090205490915060ff166120455760405162461bcd60e51b815260040161116190615034565b60008360040154846003015461205b9190615195565b846002015461206a91906152cb565b9050808611156120a15760405162461bcd60e51b8152602060048201526002602482015261125560f21b6044820152606401611161565b6013546120b8906001600160a01b03163388613b56565b8584600301546120c89190615195565b600385015533600090815260286020908152604080832081516060808201845281529283018490529082019290925289898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505060208083018a90524260408401528354600181018555848352918190208351805185946003029092019261216892849290910190614553565b50602082810151600183015560409283015160029092019190915533600081815260058a01909252908290208a905590517fb05324b33bf4eaefaf4358c582086dffd0d123193ab7d0abd320941f6a9e3be0916121ca918d908d908d90614db1565b60405180910390a150505050505050505050565b336000908152602a602052604090205460ff1661220d5760405162461bcd60e51b815260040161116190615088565b6064821115801561221f575060648111155b6122505760405162461bcd60e51b8152602060048201526002602482015261212b60f11b6044820152606401611161565b6004546005546002546003546040805194855260208501939093529183015260608201526080810185905260a0810184905260c0810183905260e081018290527f2b97d8b4b0ce6d44c31b7519cd33dfa987048588d5f3d1bd8742b06ae83dbf58906101000160405180910390a1600493909355600591909155600255600355565b602860205281600052604060002081815481106122ee57600080fd5b9060005260206000209060030201600091509150508060000180546123129061530e565b80601f016020809104026020016040519081016040528092919081815260200182805461233e9061530e565b801561238b5780601f106123605761010080835404028352916020019161238b565b820191906000526020600020905b81548152906001019060200180831161236e57829003601f168201915b5050505050908060010154908060020154905083565b336000908152602a602052604090205460ff166123d05760405162461bcd60e51b815260040161116190615088565b60125460408051918252602082018390527fb18b23ace2b2940f14bc4fe7a97e0c5a1d6d24f2f011eae981e2d53421871153910160405180910390a1601255565b336000908152602a602052604090205460ff166124405760405162461bcd60e51b815260040161116190615088565b8181116124755760405162461bcd60e51b815260206004820152600360248201526204954560ec1b6044820152606401611161565b60165461248390600a615204565b600a5461249091906152ac565b8311156124c45760405162461bcd60e51b8152602060048201526002602482015261414560f01b6044820152606401611161565b6000602986866040516124d8929190614da1565b9081526020016040518091039020905080600201546000146125215760405162461bcd60e51b8152602060048201526002602482015261111560f21b6044820152606401611161565b60028101849055828155600181018290556040517f6545b501b647fffb27e9e8582fe50f92ad11010de80231217361e2481223f2979061256a9088908890889088908890614fcb565b60405180910390a1505050505050565b6125884263337f9800615195565b600154909650610100900460ff166125b25760405162461bcd60e51b81526004016111619061506c565b6000338686866040516020016125cb9493929190614d58565b60408051601f1981840301815291905280516020909101209050602a60006125f38386613e25565b6001600160a01b0316815260208101919091526040016000205460ff1661262c5760405162461bcd60e51b815260040161116190615034565b428410156126615760405162461bcd60e51b8152602060048201526002602482015261494560f01b6044820152606401611161565b602b8686604051612673929190614da1565b9081526040519081900360200190205460ff16156126b95760405162461bcd60e51b815260206004820152600360248201526212515560ea1b6044820152606401611161565b6001602b87876040516126cd929190614da1565b908152604051908190036020019020805491151560ff199092169190911790558787116127215760405162461bcd60e51b8152602060048201526002602482015261125560f21b6044820152606401611161565b6127536040518060a0016040528060008152602001600081526020016000815260200160008152602001606081525090565b86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050608082015261279733613ecf565b606082018190526127cf5760405162461bcd60e51b8152602060048201526002602482015261455160f01b6044820152606401611161565b6000808252338152602760209081526040808320815161010081018352848152928301849052908201839052606082018390526080820183905260a0820183905260c0820183905260e08201929092526000602084018190526040840152612835610ea7565b6040850152602084015234156129c557600c5434101561287c5760405162461bcd60e51b815260206004820152600260248201526114d160f21b6044820152606401611161565b60008360200151116128b55760405162461bcd60e51b8152602060048201526002602482015261049560f41b6044820152606401611161565b60006103e860025460646128c991906152cb565b60045486602001516128db91906152ac565b6128e591906152ac565b6128ef91906151ad565b905060006103e860035460646129059190615195565b600554876020015161291791906152ac565b61292191906152ac565b61292b91906151ad565b905084602001518e1180156129405750818e10155b801561294c5750808e11155b61297e5760405162461bcd60e51b815260206004820152600360248201526204945560ec1b6044820152606401611161565b602085015160165461299190600a615204565b61299b90346152ac565b6129a591906151ad565b8552505060208084015160408301523490820152600160e0820152612beb565b60008360400151116129fe5760405162461bcd60e51b8152602060048201526002602482015261049560f41b6044820152606401611161565b60006103e86002546064612a1291906152cb565b6004548660400151612a2491906152ac565b612a2e91906152ac565b612a3891906151ad565b905060006103e86003546064612a4e9190615195565b6005548760400151612a6091906152ac565b612a6a91906152ac565b612a7491906151ad565b905084604001518e118015612a895750818e10155b8015612a955750808e11155b612ac75760405162461bcd60e51b815260206004820152600360248201526204945560ec1b6044820152606401611161565b601454604051636eb1769f60e11b81523360048201523060248201526000916001600160a01b03169063dd62ed3e9060440160206040518083038186803b158015612b1157600080fd5b505afa158015612b25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b499190614b75565b9050600b548110158015612b5d5750878110155b612b8e5760405162461bcd60e51b815260206004820152600260248201526114d160f21b6044820152606401611161565b6040860151601654612ba190600a615204565b612bab908a6152ac565b612bb591906151ad565b865260408087015190850152601454612bd9906001600160a01b031633308b613ff0565b50505060208101859052600260e08201525b6000612bf5611ad1565b905080601f548560000151612c0a9190615195565b1115612c3e5760405162461bcd60e51b815260206004820152600360248201526245445160e81b6044820152606401611161565b606084015184511115612c795760405162461bcd60e51b815260206004820152600360248201526245415160e81b6044820152606401611161565b8254612cc257602680546001810182556000919091527f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a35940180546001600160a01b031916331790555b83518252606082018d8152608083018d815260a084018d8152600060c08601818152875460018181018a558984526020938490208951600790930201918255928801519281019290925560408701516002830155935160038201559151600483015551600582015590516006909101805460e085015160ff9081166101000261ffff199092169316929092179190911790558351601f54612d639190615195565b601f5582547f535cd66bd5308aa1e18fc6b157cff15d63b919048b4221c3bd116da2b9fcc773903390612d98906001906152cb565b866000015185602001518660400151876060015188608001518960a001518a60e001518b60c001518e60800151604051612ddc9b9a99989796959493929190614de7565b60405180910390a150505050505050505050505050565b336000908152602a602052604090205460ff16612e225760405162461bcd60e51b815260040161116190615088565b600a5460408051918252602082018390527f532fd5ac65570caf6707ffe236de43c2a438413c3ddc7bc29fcec4eef7e92e5e910160405180910390a1600a55565b6008546001600160a01b03163314612ea25760405162461bcd60e51b815260206004820152600260248201526127ab60f11b6044820152606401611161565b62015180601c5442612eb491906152cb565b11612ee65760405162461bcd60e51b8152602060048201526002602482015261574f60f01b6044820152606401611161565b6000601654600a612ef79190615204565b601254612f0491906152ac565b42601c55601a54909150612f19908290615195565b601a55600854601354612f39916001600160a01b03918216911683613b56565b6040518181527fec71ef3a8fe17b2cdf953558f887e9f7d27b4b62872b5bae571873b49325fe8b906020016119dc565b60268181548110612f7957600080fd5b6000918252602090912001546001600160a01b0316905081565b336000908152602a602052604090205460ff16612fc25760405162461bcd60e51b815260040161116190615088565b600180548215156101000261ff00199091161790556040517f7c272be8a1e63fe6f1caee3d46bffe37bfcae3d5547c012370e1be6b3be8cd45906119dc90831515815260200190565b60408051338152602081018390527f915b7dcbce4b33c8c1b0b3537ad8a7a4ff151fd621bc867325bf3644a80e65a291016119dc565b600e54600f54601f5460009081908190613059611ad1565b61306391906152cb565b92506011544210806130755750600f54155b15613085575060009050806130e8565b60006011544261309591906152cb565b90506000600e54826130a791906151ad565b90506000600e54836130b99190615364565b905081600d546130c99190615195565b945080156130df576130dc600186615195565b94505b60115493505050505b9091929394565b336000908152602a602052604090205460ff1661311e5760405162461bcd60e51b815260040161116190615088565b8281146131525760405162461bcd60e51b8152602060048201526002602482015261494160f01b6044820152606401611161565b60005b838110156133475760006027600087878581811061318357634e487b7160e01b600052603260045260246000fd5b905060200201602081019061319891906146ea565b6001600160a01b03166001600160a01b0316815260200190815260200160002090508383838181106131da57634e487b7160e01b600052603260045260246000fd5b905060200201358180549050116132035760405162461bcd60e51b815260040161116190615050565b60008185858581811061322657634e487b7160e01b600052603260045260246000fd5b905060200201358154811061324b57634e487b7160e01b600052603260045260246000fd5b60009182526020909120600790910201600681015490915060ff16156132835760405162461bcd60e51b815260040161116190615034565b60068101805460ff191660041790557f9a8692aecab995d9a73da5450c7e93dc1142cbbb993de49dabfe47c970c94e2d8787858181106132d357634e487b7160e01b600052603260045260246000fd5b90506020020160208101906132e891906146ea565b86868681811061330857634e487b7160e01b600052603260045260246000fd5b600686015460405161332a959460209093029290920135925060ff1690614e5a565b60405180910390a15050808061333f90615349565b915050613155565b5050505050565b336000908152602a602052604090205460ff1661337d5760405162461bcd60e51b815260040161116190615088565b600060298484604051613391929190614da1565b9081526020016040518091039020905080600401546000146133da5760405162461bcd60e51b815260206004820152600260248201526120a160f11b6044820152606401611161565b6000816003015482600201546133f091906152cb565b9050808311156134275760405162461bcd60e51b8152602060048201526002602482015261414560f01b6044820152606401611161565b600654604051630852cd8d60e31b8152600481018590526001600160a01b03909116906342966c6890602401600060405180830381600087803b15801561346d57600080fd5b505af1158015613481573d6000803e3d6000fd5b50505050600482018390556040517ff0766a38e2d405bcb61bc30534d85dfb18b5d883af9d3afc0e3d1ab4c2168474906134c090879087908790614fa7565b60405180910390a15050505050565b336000908152602a602052604090205460ff166134fe5760405162461bcd60e51b815260040161116190615088565b60175460185460195460408051938452602084019290925282820152606082018590526080820184905260a08201839052517f0c24082219d0cec1ad2372704a868d9f0efaf337f2fad5cf74b965a91411efc49181900360c00190a1601792909255601855601955565b6025546001600160a01b0316331461357f57600080fd5b600260005414156135a25760405162461bcd60e51b8152600401611161906150a4565b600260009081556022546024546135b99190615195565b905060006021546023546135cd9190615195565b602454602354602254602154604080516001600160a01b038a1681526020810195909552840192909252606083015260808201529091507fe08737ac48a1dab4b1a46c7dc9398bd5bfc6d7ad6fabb7cd8caa254de14def359060a00160405180910390a160006024819055602381905560228190556021558115613683576040516001600160a01b0384169083156108fc029084906000818181858888f19350505050158015613681573d6000803e3d6000fd5b505b80156136a0576014546136a0906001600160a01b03168483613b56565b5050600160005550565b336000908152602a602052604090205460ff166136d95760405162461bcd60e51b815260040161116190615088565b6000821180156136e95750600081115b6136f257600080fd5b600e54600f546040805192835260208301919091528101839052606081018290527fb21eff835fb765b7d44e819829d28e3fa33ce4867e2bc3702791f556f5b7b87e9060800160405180910390a16011544211801561375357506000600f54115b156137c65760006011544261376891906152cb565b90506000600e548261377a91906151ad565b90506000600e548361378c9190615364565b905080156137a25761379f826001615195565b91505b81600d546137b09190615195565b600d556137bb611ad1565b601055505042601155505b600e91909155600f55565b602760205281600052604060002081815481106137ed57600080fd5b600091825260209091206007909102018054600182015460028301546003840154600485015460058601546006909601549497509295509093909260ff8082169161010090041688565b6000848484846040516020016138509493929190614d58565b604051602081830303815290604052805190602001209050949350505050565b6001600160a01b0381166000908152602760209081526040808320805482518185028101850190935280835260609492939192909184015b82821015611c6a5760008481526020908190206040805161010080820183526007870290930180548252600180820154838701526002820154938301939093526003810154606083015260048101546080830152600581015460a08301526006015460ff80821660c084015293900490921660e083015290835290920191016138a8565b60015460ff16156139645760405162461bcd60e51b8152602060048201526002602482015261414960f01b6044820152606401611161565b6001805461ffff191661010117815560258054336001600160a01b031991821681179092556000918252602a6020908152604092839020805460ff1916909417909355601e84905560118490556006805482166001600160a01b038a81169182179092556007805484168a84169081179091556009805485168a8516908117909155600880548616948a169490941790935560138054851683179055601480548516909117905560158054909316909117909155815163313ce56760e01b81529151909263313ce5679260048082019391829003018186803b158015613a4957600080fd5b505afa158015613a5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a819190614c9f565b60ff16601655600560028190556003819055600c600455601e90556305f5e100600a908155611567601255620186a0601755601855630bebc2006019556040513381527f217603b67e96243085c45dc7bec1c2813c04f15868319981d0eb223f8538da44906020016134c0565b6025546001600160a01b03163314613b0557600080fd5b6001600160a01b0381166000818152602a6020908152604091829020805460ff1916905590519182527f6140b1995a6d93cb229eb0b3da35af8cc220cdec34ac47d95ecb6a5d38d809fb91016119dc565b6040516001600160a01b038316602482015260448101829052613bb990849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261402e565b505050565b60026000541415613be15760405162461bcd60e51b8152600401611161906150a4565b600260009081556001600160a01b038316815260276020526040902080548210613c1d5760405162461bcd60e51b815260040161116190615050565b6000818381548110613c3f57634e487b7160e01b600052603260045260246000fd5b60009182526020909120600790910201600681015490915060ff16600314613c8e5760405162461bcd60e51b81526020600482015260026024820152614e4360f01b6044820152606401611161565b8054601354613caa916001600160a01b03909116908690613b56565b60068101805460ff191660019081179091556040517ffb88a0cd79205e2d9229eda9c770620861bd3994813ea339ccad8bb4187ede8091613cee9187918791614e5a565b60405180910390a1505060016000555050565b801580613d8a5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e9060440160206040518083038186803b158015613d5057600080fd5b505afa158015613d64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d889190614b75565b155b613df55760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401611161565b6040516001600160a01b038316602482015260448101829052613bb990849063095ea7b360e01b90606401613b82565b6000815160411415613e595760208201516040830151606084015160001a613e4f86828585614100565b9350505050613ec9565b815160401415613e815760208201516040830151613e788583836142a9565b92505050613ec9565b60405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611161565b92915050565b6013546040516370a0823160e01b81526001600160a01b03838116600483015260009283929116906370a082319060240160206040518083038186803b158015613f1857600080fd5b505afa158015613f2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f509190614b75565b9050601654600a613f619190615204565b601754613f6e91906152ac565b811015613f7e5750600092915050565b600060185482613f8e91906152ac565b90506000601654600a613fa19190615204565b601954613fae91906152ac565b905080821115613fbc578091505b6000613fc7866142d5565b9050828110613fdc5750600095945050505050565b613fe681846152cb565b9695505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526140289085906323b872dd60e01b90608401613b82565b50505050565b6000614083826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166143db9092919063ffffffff16565b805190915015613bb957808060200190518101906140a191906149ae565b613bb95760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611161565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a082111561417d5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401611161565b8360ff16601b148061419257508360ff16601c145b6141e95760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401611161565b6040805160008082526020820180845288905260ff871692820192909252606081018590526080810184905260019060a0016020604051602081039080840390855afa15801561423d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166142a05760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401611161565b95945050505050565b60006001600160ff1b03821660ff83901c601b016142c986828785614100565b925050505b9392505050565b6001600160a01b03811660009081526027602052604081208190815b81548110156143d25781818154811061431a57634e487b7160e01b600052603260045260246000fd5b600091825260209091206006600790920201015460ff1615801590614376575081818154811061435a57634e487b7160e01b600052603260045260246000fd5b600091825260209091206006600790920201015460ff16600114155b15614380576143c0565b8181815481106143a057634e487b7160e01b600052603260045260246000fd5b906000526020600020906007020160000154836143bd9190615195565b92505b806143ca81615349565b9150506142f1565b50909392505050565b60606143ea84846000856143f2565b949350505050565b6060824710156144535760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401611161565b843b6144a15760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611161565b600080866001600160a01b031685876040516144bd9190614d85565b60006040518083038185875af1925050503d80600081146144fa576040519150601f19603f3d011682016040523d82523d6000602084013e6144ff565b606091505b509150915061450f82828661451a565b979650505050505050565b606083156145295750816142ce565b8251156145395782518084602001fd5b8160405162461bcd60e51b81526004016111619190614ffc565b82805461455f9061530e565b90600052602060002090601f01602090048101928261458157600085556145c7565b82601f1061459a57805160ff19168380011785556145c7565b828001600101855582156145c7579182015b828111156145c75782518255916020019190600101906145ac565b506145d39291506145d7565b5090565b5b808211156145d357600081556001016145d8565b60006001600160401b03831115614605576146056153a4565b614618601f8401601f1916602001615165565b905082815283838301111561462c57600080fd5b828260208301376000602084830101529392505050565b60008083601f840112614654578182fd5b5081356001600160401b0381111561466a578182fd5b6020830191508360208260051b850101111561468557600080fd5b9250929050565b600082601f83011261469c578081fd5b6142ce838335602085016145ec565b60008083601f8401126146bc578182fd5b5081356001600160401b038111156146d2578182fd5b60208301915083602082850101111561468557600080fd5b6000602082840312156146fb578081fd5b81356142ce816153ba565b600060208284031215614717578081fd5b81516142ce816153ba565b600080600080600060a08688031215614739578081fd5b8535614744816153ba565b94506020860135614754816153ba565b93506040860135614764816153ba565b92506060860135614774816153ba565b949793965091946080013592915050565b6000806000806060858703121561479a578384fd5b84356147a5816153ba565b935060208501356001600160401b038111156147bf578384fd5b6147cb878288016146ab565b9598909750949560400135949350505050565b600080604083850312156147f0578182fd5b82356147fb816153ba565b946020939093013593505050565b6000806000806040858703121561481e578384fd5b84356001600160401b0380821115614834578586fd5b61484088838901614643565b90965094506020870135915080821115614858578384fd5b5061486587828801614643565b95989497509550505050565b60008060008060008060808789031215614889578081fd5b86356001600160401b038082111561489f578283fd5b6148ab8a838b01614643565b909850965060208901359150808211156148c3578283fd5b506148d089828a01614643565b979a9699509760408101359660609091013595509350505050565b600060208083850312156148fd578182fd5b82516001600160401b0380821115614913578384fd5b818501915085601f830112614926578384fd5b815181811115614938576149386153a4565b8060051b9150614949848301615165565b8181528481019084860184860187018a1015614963578788fd5b8795505b83861015614985578051835260019590950194918601918601614967565b5098975050505050505050565b6000602082840312156149a3578081fd5b81356142ce816153d2565b6000602082840312156149bf578081fd5b81516142ce816153d2565b600080602083850312156149dc578182fd5b82356001600160401b038111156149f1578283fd5b6149fd858286016146ab565b90969095509350505050565b600080600060408486031215614a1d578081fd5b83356001600160401b03811115614a32578182fd5b614a3e868287016146ab565b909790965060209590950135949350505050565b60008060008060608587031215614a67578182fd5b84356001600160401b0380821115614a7d578384fd5b614a89888389016146ab565b9096509450602087013593506040870135915080821115614aa8578283fd5b50614ab58782880161468c565b91505092959194509250565b600080600080600060808688031215614ad8578283fd5b85356001600160401b03811115614aed578384fd5b614af9888289016146ab565b9099909850602088013597604081013597506060013595509350505050565b600060208284031215614b29578081fd5b81356001600160401b03811115614b3e578182fd5b8201601f81018413614b4e578182fd5b6143ea848235602084016145ec565b600060208284031215614b6e578081fd5b5035919050565b600060208284031215614b86578081fd5b5051919050565b60008060408385031215614b9f578182fd5b50508035926020909101359150565b600080600060608486031215614bc2578081fd5b505081359360208301359350604090920135919050565b60008060008060008060008060e0898b031215614bf4578586fd5b88359750602089013596506040890135955060608901356001600160401b0380821115614c1f578384fd5b614c2b8c838d016146ab565b909750955060808b0135945060a08b0135915080821115614c4a578384fd5b50614c578b828c0161468c565b92505060c089013590509295985092959890939650565b60008060008060808587031215614c83578182fd5b5050823594602084013594506040840135936060013592509050565b600060208284031215614cb0578081fd5b815160ff811681146142ce578182fd5b6000815180845260208085019450808401835b83811015614cf85781516001600160a01b031687529582019590820190600101614cd3565b509495945050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60008151808452614d448160208601602086016152e2565b601f01601f19169290920160200192915050565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b60008251614d978184602087016152e2565b9190910192915050565b8183823760009101908152919050565b6001600160a01b0385168152606060208201819052600090614dd69083018587614d03565b905082604083015295945050505050565b600061016060018060a01b038e1683528c60208401528b60408401528a60608401528960808401528860a08401528760c08401528660e084015260ff861661010084015260ff851661012084015280610140840152614e4881840185614d2c565b9e9d5050505050505050505050505050565b6001600160a01b03939093168352602083019190915260ff16604082015260600190565b6020815260006142ce6020830184614cc0565b60006020808301818452808551808352604092508286019150828160051b870101848801865b83811015614f0357603f19898403018552815160608151818652614edd82870182614d2c565b838b0151878c015292890151958901959095525094870194925090860190600101614eb7565b509098975050505050505050565b602080825282518282018190526000919060409081850190868401855b82811015614f9a5781518051855286810151878601528581015186860152606080820151908601526080808201519086015260a0808201519086015260c08082015160ff9081169187019190915260e09182015116908501526101009093019290850190600101614f2e565b5091979650505050505050565b604081526000614fbb604083018587614d03565b9050826020830152949350505050565b608081526000614fdf608083018789614d03565b602083019590955250604081019290925260609091015292915050565b6020815260006142ce6020830184614d2c565b6060815260006150226060830186614d2c565b60208301949094525060400152919050565b602080825260029082015261555360f01b604082015260600190565b60208082526002908201526127a960f11b604082015260600190565b6020808252600290820152614e5360f01b604082015260600190565b60208082526002908201526104e560f41b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b8281526040602082015260006143ea6040830184614cc0565b84815260806020820152600061510d6080830186614cc0565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a06040820152600061514860a0830186614cc0565b6001600160a01b0394909416606083015250608001529392505050565b604051601f8201601f191681016001600160401b038111828210171561518d5761518d6153a4565b604052919050565b600082198211156151a8576151a8615378565b500190565b6000826151bc576151bc61538e565b500490565b600181815b808511156151fc5781600019048211156151e2576151e2615378565b808516156151ef57918102915b93841c93908002906151c6565b509250929050565b60006142ce838360008261521a57506001613ec9565b8161522757506000613ec9565b816001811461523d576002811461524757615263565b6001915050613ec9565b60ff84111561525857615258615378565b50506001821b613ec9565b5060208310610133831016604e8410600b8410161715615286575081810a613ec9565b61529083836151c1565b80600019048211156152a4576152a4615378565b029392505050565b60008160001904831182151516156152c6576152c6615378565b500290565b6000828210156152dd576152dd615378565b500390565b60005b838110156152fd5781810151838201526020016152e5565b838111156140285750506000910152565b600181811c9082168061532257607f821691505b6020821081141561534357634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561535d5761535d615378565b5060010190565b6000826153735761537361538e565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146153cf57600080fd5b50565b80151581146153cf57600080fdfea2646970667358221220752818d64a2c2ef1bb84af938f824333a0ed8a84a8ffd4446dd0fe638a424f7764736f6c634300080400330000000000000000000000002c9aceb63181cd08a093d052ec041e191f229692000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec70000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000ab5801a7d398351b8be11c439e05c5b3259aec9b000000000000000000000000000000000000000000000000000000006108d2e4
Deployed Bytecode
0x60806040526004361061045d5760003560e01c80637c764fbb1161023f578063ba35380b11610139578063e9a52360116100b6578063f46ab9941161007a578063f46ab99414610d8f578063f57732a914610daf578063f7013ef614610ddc578063f747b0c514610dfc578063fefeb94214610e1257600080fd5b8063e9a5236014610c83578063ea8de6f914610ca3578063edb2893314610cc3578063edbca88714610cd9578063f133593a14610d2e57600080fd5b8063cbeafb8c116100fd578063cbeafb8c14610bed578063d79fb9ee14610c03578063e6181c6d14610c23578063e82627b014610c43578063e97b970114610c6357600080fd5b8063ba35380b14610b4e578063bea65cc314610b64578063c7386e1114610b84578063cab248a614610b9a578063caf2c05b14610bd757600080fd5b80638edea406116101c7578063a98ad46c1161018b578063a98ad46c14610acd578063a9d5945e14610aed578063b6d74b7214610b02578063b7c1703214610b22578063b7f28dfe14610b3857600080fd5b80638edea40614610a505780639853850014610a665780639dc43d3214610a7c578063a73ffbbe14610a9c578063a81c149514610ab757600080fd5b80637f17e96d1161020e5780637f17e96d146109cf578063842463e0146109e557806385383f1b146109fa5780638c43f8c114610a1a5780638da5cb5b14610a3057600080fd5b80637c764fbb146109635780637d0bc840146109835780637df951cf146109995780637e94e4cd146109b957600080fd5b80633b82a8381161035b578063596fa9e3116102d8578063689025951161029c57806368902595146108e45780636b5587c5146109045780637432a03f1461092457806378e9792514610937578063795ff4521461094d57600080fd5b8063596fa9e31461083b5780635cf47bc11461085b578063600376091461087b578063610db0ea146108aa578063676fdb9f146108ca57600080fd5b8063488a81b51161031f578063488a81b5146107a15780634c7a7369146107b75780634d757e4e146107d557806350a57a91146107f557806357b205141461082557600080fd5b80633b82a838146106fa5780633d11b7dc1461071a5780634078fca814610730578063426051de1461074657806343994b171461078157600080fd5b80631d0828e3116103e95780632e515db6116103ad5780632e515db6146106535780632f469bf5146106735780632fae7f241461068857806332dacb05146106b757806339931723146106e457600080fd5b80631d0828e3146105d05780631f5a0bbe146105e5578063250285b214610605578063271d26e31461061b5780632b4e97551461063d57600080fd5b806314d558821161043057806314d55882146104fd578063168760761461052757806316e2868a1461056257806316fdfa6b1461059a5780631a534744146105b057600080fd5b8063041b03a614610462578063041b267e1461048b57806308fb2530146104ad5780630cc661c2146104c3575b600080fd5b34801561046e57600080fd5b5061047860115481565b6040519081526020015b60405180910390f35b34801561049757600080fd5b506104ab6104a63660046147de565b610e32565b005b3480156104b957600080fd5b50610478601b5481565b3480156104cf57600080fd5b506024546023546022546021545b604080519485526020850193909352918301526060820152608001610482565b34801561050957600080fd5b50610512610ea7565b60408051928352602083019190915201610482565b34801561053357600080fd5b506105476105423660046149ca565b6110ed565b60408051938452602084019290925290820152606001610482565b34801561056e57600080fd5b50601354610582906001600160a01b031681565b6040516001600160a01b039091168152602001610482565b3480156105a657600080fd5b50610478600f5481565b3480156105bc57600080fd5b506104ab6105cb366004614871565b611132565b3480156105dc57600080fd5b506104ab611829565b3480156105f157600080fd5b506104ab6106003660046146ea565b611975565b34801561061157600080fd5b5061047860245481565b34801561062757600080fd5b506106306119e7565b6040516104829190614e7e565b34801561064957600080fd5b5061047860055481565b34801561065f57600080fd5b506104ab61066e366004614b8d565b611a49565b34801561067f57600080fd5b50610478611ad1565b34801561069457600080fd5b506001546106a790610100900460ff1681565b6040519015158152602001610482565b3480156106c357600080fd5b506106d76106d23660046146ea565b611b5a565b6040516104829190614e91565b3480156106f057600080fd5b5061047860195481565b34801561070657600080fd5b506104ab610715366004614b5d565b611c75565b34801561072657600080fd5b50610478601a5481565b34801561073c57600080fd5b5061047860225481565b34801561075257600080fd5b506106a7610761366004614b18565b8051602081830181018051602b8252928201919093012091525460ff1681565b34801561078d57600080fd5b506104ab61079c366004614b5d565b611ee0565b3480156107ad57600080fd5b50610478601c5481565b3480156107c357600080fd5b506004546005546002546003546104dd565b3480156107e157600080fd5b506104ab6107f0366004614a52565b611f5d565b34801561080157600080fd5b506106a76108103660046146ea565b602a6020526000908152604090205460ff1681565b34801561083157600080fd5b5061047860125481565b34801561084757600080fd5b50601554610582906001600160a01b031681565b34801561086757600080fd5b506104ab610876366004614c6e565b6121de565b34801561088757600080fd5b5061089b6108963660046147de565b6122d2565b6040516104829392919061500f565b3480156108b657600080fd5b506104ab6108c5366004614b5d565b6123a1565b3480156108d657600080fd5b506001546106a79060ff1681565b3480156108f057600080fd5b50600654610582906001600160a01b031681565b34801561091057600080fd5b506104ab61091f366004614ac1565b612411565b6104ab610932366004614bd9565b61257a565b34801561094357600080fd5b50610478601e5481565b34801561095957600080fd5b50610478600b5481565b34801561096f57600080fd5b50600754610582906001600160a01b031681565b34801561098f57600080fd5b50610478600d5481565b3480156109a557600080fd5b506104ab6109b4366004614b5d565b612df3565b3480156109c557600080fd5b5061047860175481565b3480156109db57600080fd5b5061047860035481565b3480156109f157600080fd5b506104ab612e63565b348015610a0657600080fd5b50600954610582906001600160a01b031681565b348015610a2657600080fd5b50610478601d5481565b348015610a3c57600080fd5b50602554610582906001600160a01b031681565b348015610a5c57600080fd5b5061047860215481565b348015610a7257600080fd5b50610478600e5481565b348015610a8857600080fd5b50610582610a97366004614b5d565b612f69565b348015610aa857600080fd5b50601754601854601954610547565b348015610ac357600080fd5b5061047860185481565b348015610ad957600080fd5b50601454610582906001600160a01b031681565b348015610af957600080fd5b50602054610478565b348015610b0e57600080fd5b506104ab610b1d366004614992565b612f93565b348015610b2e57600080fd5b5061047860235481565b348015610b4457600080fd5b5061047860205481565b348015610b5a57600080fd5b5061047860045481565b348015610b7057600080fd5b506104ab610b7f366004614b5d565b61300b565b348015610b9057600080fd5b50610478600c5481565b348015610ba657600080fd5b50610baf613041565b604080519586526020860194909452928401919091526060830152608082015260a001610482565b348015610be357600080fd5b50610478600a5481565b348015610bf957600080fd5b5061047860025481565b348015610c0f57600080fd5b506104ab610c1e366004614809565b6130ef565b348015610c2f57600080fd5b506104ab610c3e366004614a09565b61334e565b348015610c4f57600080fd5b506104ab610c5e366004614bae565b6134cf565b348015610c6f57600080fd5b50600854610582906001600160a01b031681565b348015610c8f57600080fd5b506104ab610c9e3660046146ea565b613568565b348015610caf57600080fd5b506104ab610cbe366004614b8d565b6136aa565b348015610ccf57600080fd5b5061047860105481565b348015610ce557600080fd5b50610baf610cf4366004614b18565b8051602081830181018051602982529282019190930120915280546001820154600283015460038401546004909401549293919290919085565b348015610d3a57600080fd5b50610d4e610d493660046147de565b6137d1565b604080519889526020890197909752958701949094526060860192909252608085015260a084015260ff90811660c08401521660e082015261010001610482565b348015610d9b57600080fd5b50610478610daa366004614785565b613837565b348015610dbb57600080fd5b50610dcf610dca3660046146ea565b613870565b6040516104829190614f11565b348015610de857600080fd5b506104ab610df7366004614722565b61392c565b348015610e0857600080fd5b50610478601f5481565b348015610e1e57600080fd5b506104ab610e2d3660046146ea565b613aee565b6025546001600160a01b03163314610e4957600080fd5b601354610e60906001600160a01b03168383613b56565b604080516001600160a01b0384168152602081018390527fc5d08cad09d386e1a84c2a66272b4bce7974de7db59475159ac5af38cb0fbc2d91015b60405180910390a15050565b604080516003808252608082019092526000918291829160208201606080368337505060065482519293506001600160a01b031691839150600090610efc57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601554604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015610f5057600080fd5b505afa158015610f64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f889190614706565b81600181518110610fa957634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600754825191169082906002908110610fe857634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601554601654600092919091169063d06ca61f9061101d90600a615204565b846040518363ffffffff1660e01b815260040161103b9291906150db565b60006040518083038186803b15801561105357600080fd5b505afa158015611067573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261108f91908101906148eb565b9050806001815181106110b257634e487b7160e01b600052603260045260246000fd5b60200260200101519350806002815181106110dd57634e487b7160e01b600052603260045260246000fd5b6020026020010151925050509091565b60008060008060298686604051611105929190614da1565b90815260200160405180910390209050806002015493508060030154925080600401549150509250925092565b336000908152602a602052604090205460ff1661116a5760405162461bcd60e51b815260040161116190615088565b60405180910390fd5b600154610100900460ff166111915760405162461bcd60e51b81526004016111619061506c565b604080516002808252606082018352600092839283929091602083019080368337505060065482519293506001600160a01b03169183915060019081106111e857634e487b7160e01b600052603260045260246000fd5b6001600160a01b03909216602092830291909101909101528786146112355760405162461bcd60e51b815260206004820152600360248201526212505360ea1b6044820152606401611161565b60005b888110156114c8576000602760008c8c8581811061126657634e487b7160e01b600052603260045260246000fd5b905060200201602081019061127b91906146ea565b6001600160a01b03166001600160a01b0316815260200190815260200160002090508888838181106112bd57634e487b7160e01b600052603260045260246000fd5b905060200201358180549050116112e65760405162461bcd60e51b815260040161116190615050565b6000818a8a8581811061130957634e487b7160e01b600052603260045260246000fd5b905060200201358154811061132e57634e487b7160e01b600052603260045260246000fd5b60009182526020909120600790910201600681015490915060ff16156113665760405162461bcd60e51b815260040161116190615034565b60068101805460ff191660031790819055610100900460ff166001141561139d5760018101546113969087615195565b95506113af565b60018101546113ac9086615195565b94505b6114138c8c858181106113d257634e487b7160e01b600052603260045260246000fd5b90506020020160208101906113e791906146ea565b8b8b8681811061140757634e487b7160e01b600052603260045260246000fd5b90506020020135613bbe565b7f7d83836177fc5613d06c134444bebdcae9118e7c3d92176f1e7bd0937f91786a8c8c8581811061145457634e487b7160e01b600052603260045260246000fd5b905060200201602081019061146991906146ea565b8b8b8681811061148957634e487b7160e01b600052603260045260246000fd5b60068601546040516114ab959460209093029290920135925060ff1690614e5a565b60405180910390a1505080806114c090615349565b915050611238565b5082156116a257601560009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561151d57600080fd5b505afa158015611531573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115559190614706565b8160008151811061157657634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601554604051637ff36ab560e01b81526000929190911690637ff36ab59086906115c0908a908790309042906004016150f4565b6000604051808303818588803b1580156115d957600080fd5b505af11580156115ed573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f1916820160405261161691908101906148eb565b60018151811061163657634e487b7160e01b600052603260045260246000fd5b6020908102919091010151600654604051630852cd8d60e31b8152600481018390529192506001600160a01b0316906342966c6890602401600060405180830381600087803b15801561168857600080fd5b505af115801561169c573d6000803e3d6000fd5b50505050505b811561181e5760075481516001600160a01b039091169082906000906116d857634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260095460145461170392908116911684613d01565b6015546040516338ed173960e01b81526000916001600160a01b0316906338ed17399061173c9086908990879030904290600401615129565b600060405180830381600087803b15801561175657600080fd5b505af115801561176a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261179291908101906148eb565b6001815181106117b257634e487b7160e01b600052603260045260246000fd5b6020908102919091010151600654604051630852cd8d60e31b8152600481018390529192506001600160a01b0316906342966c6890602401600060405180830381600087803b15801561180457600080fd5b505af1158015611818573d6000803e3d6000fd5b50505050505b505050505050505050565b336000908152602a602052604090205460ff166118585760405162461bcd60e51b815260040161116190615088565b6000601654600a6118699190615204565b60125462015180601e544261187e91906152cb565b61188891906151ad565b61189291906152ac565b61189c91906152ac565b90506000601b54601a546118b09190615195565b82111561197157601b54601a546118c79190615195565b6118d190836152cb565b600654604051630852cd8d60e31b8152600481018390529192506001600160a01b0316906342966c6890602401600060405180830381600087803b15801561191857600080fd5b505af115801561192c573d6000803e3d6000fd5b5050505080601b5461193e9190615195565b601b556040518181527f6292c3a3572cb67220cb571a803a26dcce054aca1b9f7114fc129b2909974bfe90602001610e9b565b5050565b6025546001600160a01b0316331461198c57600080fd5b6001600160a01b0381166000818152602a6020908152604091829020805460ff1916600117905590519182527f217603b67e96243085c45dc7bec1c2813c04f15868319981d0eb223f8538da4491015b60405180910390a150565b60606026805480602002602001604051908101604052809291908181526020018280548015611a3f57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611a21575b5050505050905090565b336000908152602a602052604090205460ff16611a785760405162461bcd60e51b815260040161116190615088565b600c54600b546040805192835260208301919091528101839052606081018290527f46f68afe8fd811835a84aaee6d0dc4902ab7467822115d8d14c4431c888261aa9060800160405180910390a1600c91909155600b55565b6000601154421080611ae35750600e54155b15611aee5750600090565b600060115442611afe91906152cb565b90506000600e5482611b1091906151ad565b90506000600e5483611b229190615364565b90508015611b3857611b35826001615195565b91505b600f54611b4590836152ac565b601054611b529190615195565b935050505090565b6001600160a01b0381166000908152602860209081526040808320805482518185028101850190935280835260609492939192909184015b82821015611c6a5783829060005260206000209060030201604051806060016040529081600082018054611bc59061530e565b80601f0160208091040260200160405190810160405280929190818152602001828054611bf19061530e565b8015611c3e5780601f10611c1357610100808354040283529160200191611c3e565b820191906000526020600020905b815481529060010190602001808311611c2157829003601f168201915b505050505081526020016001820154815260200160028201548152505081526020019060010190611b92565b505050509050919050565b60026000541415611c985760405162461bcd60e51b8152600401611161906150a4565b6002600055600154610100900460ff16611cc45760405162461bcd60e51b81526004016111619061506c565b33600090815260276020526040902080548210611d235760405162461bcd60e51b815260206004820152601960248201527f4f7264657220696e646578206f7574206f662072616e676521000000000000006044820152606401611161565b6000818381548110611d4557634e487b7160e01b600052603260045260246000fd5b60009182526020909120600790910201600681015490915060ff161580611d735750600681015460ff166004145b611dbf5760405162461bcd60e51b815260206004820152601860248201527f556e6578706563746564206f72646572207374617475732100000000000000006044820152606401611161565b60018101546020546000919015611df357620186a06020548460010154611de691906152ac565b611df091906151ad565b91505b8115611e0657611e0382826152cb565b90505b600683015460ff6101009091041660011415611e605781602254611e2a9190615195565b602255604051339082156108fc029083906000818181858888f19350505050158015611e5a573d6000803e3d6000fd5b50611e88565b81602154611e6e9190615195565b602155601454611e88906001600160a01b03163383613b56565b60068301805460ff191660029081179091556040517fd2df35432a13f628d9e3576b4fc9c7569bc033474847ef0ef8caf8c6028c3bfe91611ecc9133918991614e5a565b60405180910390a150506001600055505050565b336000908152602a602052604090205460ff16611f0f5760405162461bcd60e51b815260040161116190615088565b620186a0811115611f1f57600080fd5b602080548282556040805182815292830184905290917fa995ac7c2dc5fdc05b41983e69d4d9fbd224a8528bc7d86eabfd533cd3ca44979101610e9b565b600154610100900460ff16611f845760405162461bcd60e51b81526004016111619061506c565b600060298585604051611f98929190614da1565b90815260408051602092819003830190203360009081526005820190935291205490915015611fee5760405162461bcd60e51b815260206004820152600260248201526115d560f21b6044820152606401611161565b6000611ffc33878787613837565b9050600061200a8285613e25565b6001600160a01b0381166000908152602a602052604090205490915060ff166120455760405162461bcd60e51b815260040161116190615034565b60008360040154846003015461205b9190615195565b846002015461206a91906152cb565b9050808611156120a15760405162461bcd60e51b8152602060048201526002602482015261125560f21b6044820152606401611161565b6013546120b8906001600160a01b03163388613b56565b8584600301546120c89190615195565b600385015533600090815260286020908152604080832081516060808201845281529283018490529082019290925289898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505060208083018a90524260408401528354600181018555848352918190208351805185946003029092019261216892849290910190614553565b50602082810151600183015560409283015160029092019190915533600081815260058a01909252908290208a905590517fb05324b33bf4eaefaf4358c582086dffd0d123193ab7d0abd320941f6a9e3be0916121ca918d908d908d90614db1565b60405180910390a150505050505050505050565b336000908152602a602052604090205460ff1661220d5760405162461bcd60e51b815260040161116190615088565b6064821115801561221f575060648111155b6122505760405162461bcd60e51b8152602060048201526002602482015261212b60f11b6044820152606401611161565b6004546005546002546003546040805194855260208501939093529183015260608201526080810185905260a0810184905260c0810183905260e081018290527f2b97d8b4b0ce6d44c31b7519cd33dfa987048588d5f3d1bd8742b06ae83dbf58906101000160405180910390a1600493909355600591909155600255600355565b602860205281600052604060002081815481106122ee57600080fd5b9060005260206000209060030201600091509150508060000180546123129061530e565b80601f016020809104026020016040519081016040528092919081815260200182805461233e9061530e565b801561238b5780601f106123605761010080835404028352916020019161238b565b820191906000526020600020905b81548152906001019060200180831161236e57829003601f168201915b5050505050908060010154908060020154905083565b336000908152602a602052604090205460ff166123d05760405162461bcd60e51b815260040161116190615088565b60125460408051918252602082018390527fb18b23ace2b2940f14bc4fe7a97e0c5a1d6d24f2f011eae981e2d53421871153910160405180910390a1601255565b336000908152602a602052604090205460ff166124405760405162461bcd60e51b815260040161116190615088565b8181116124755760405162461bcd60e51b815260206004820152600360248201526204954560ec1b6044820152606401611161565b60165461248390600a615204565b600a5461249091906152ac565b8311156124c45760405162461bcd60e51b8152602060048201526002602482015261414560f01b6044820152606401611161565b6000602986866040516124d8929190614da1565b9081526020016040518091039020905080600201546000146125215760405162461bcd60e51b8152602060048201526002602482015261111560f21b6044820152606401611161565b60028101849055828155600181018290556040517f6545b501b647fffb27e9e8582fe50f92ad11010de80231217361e2481223f2979061256a9088908890889088908890614fcb565b60405180910390a1505050505050565b6125884263337f9800615195565b600154909650610100900460ff166125b25760405162461bcd60e51b81526004016111619061506c565b6000338686866040516020016125cb9493929190614d58565b60408051601f1981840301815291905280516020909101209050602a60006125f38386613e25565b6001600160a01b0316815260208101919091526040016000205460ff1661262c5760405162461bcd60e51b815260040161116190615034565b428410156126615760405162461bcd60e51b8152602060048201526002602482015261494560f01b6044820152606401611161565b602b8686604051612673929190614da1565b9081526040519081900360200190205460ff16156126b95760405162461bcd60e51b815260206004820152600360248201526212515560ea1b6044820152606401611161565b6001602b87876040516126cd929190614da1565b908152604051908190036020019020805491151560ff199092169190911790558787116127215760405162461bcd60e51b8152602060048201526002602482015261125560f21b6044820152606401611161565b6127536040518060a0016040528060008152602001600081526020016000815260200160008152602001606081525090565b86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050608082015261279733613ecf565b606082018190526127cf5760405162461bcd60e51b8152602060048201526002602482015261455160f01b6044820152606401611161565b6000808252338152602760209081526040808320815161010081018352848152928301849052908201839052606082018390526080820183905260a0820183905260c0820183905260e08201929092526000602084018190526040840152612835610ea7565b6040850152602084015234156129c557600c5434101561287c5760405162461bcd60e51b815260206004820152600260248201526114d160f21b6044820152606401611161565b60008360200151116128b55760405162461bcd60e51b8152602060048201526002602482015261049560f41b6044820152606401611161565b60006103e860025460646128c991906152cb565b60045486602001516128db91906152ac565b6128e591906152ac565b6128ef91906151ad565b905060006103e860035460646129059190615195565b600554876020015161291791906152ac565b61292191906152ac565b61292b91906151ad565b905084602001518e1180156129405750818e10155b801561294c5750808e11155b61297e5760405162461bcd60e51b815260206004820152600360248201526204945560ec1b6044820152606401611161565b602085015160165461299190600a615204565b61299b90346152ac565b6129a591906151ad565b8552505060208084015160408301523490820152600160e0820152612beb565b60008360400151116129fe5760405162461bcd60e51b8152602060048201526002602482015261049560f41b6044820152606401611161565b60006103e86002546064612a1291906152cb565b6004548660400151612a2491906152ac565b612a2e91906152ac565b612a3891906151ad565b905060006103e86003546064612a4e9190615195565b6005548760400151612a6091906152ac565b612a6a91906152ac565b612a7491906151ad565b905084604001518e118015612a895750818e10155b8015612a955750808e11155b612ac75760405162461bcd60e51b815260206004820152600360248201526204945560ec1b6044820152606401611161565b601454604051636eb1769f60e11b81523360048201523060248201526000916001600160a01b03169063dd62ed3e9060440160206040518083038186803b158015612b1157600080fd5b505afa158015612b25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b499190614b75565b9050600b548110158015612b5d5750878110155b612b8e5760405162461bcd60e51b815260206004820152600260248201526114d160f21b6044820152606401611161565b6040860151601654612ba190600a615204565b612bab908a6152ac565b612bb591906151ad565b865260408087015190850152601454612bd9906001600160a01b031633308b613ff0565b50505060208101859052600260e08201525b6000612bf5611ad1565b905080601f548560000151612c0a9190615195565b1115612c3e5760405162461bcd60e51b815260206004820152600360248201526245445160e81b6044820152606401611161565b606084015184511115612c795760405162461bcd60e51b815260206004820152600360248201526245415160e81b6044820152606401611161565b8254612cc257602680546001810182556000919091527f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a35940180546001600160a01b031916331790555b83518252606082018d8152608083018d815260a084018d8152600060c08601818152875460018181018a558984526020938490208951600790930201918255928801519281019290925560408701516002830155935160038201559151600483015551600582015590516006909101805460e085015160ff9081166101000261ffff199092169316929092179190911790558351601f54612d639190615195565b601f5582547f535cd66bd5308aa1e18fc6b157cff15d63b919048b4221c3bd116da2b9fcc773903390612d98906001906152cb565b866000015185602001518660400151876060015188608001518960a001518a60e001518b60c001518e60800151604051612ddc9b9a99989796959493929190614de7565b60405180910390a150505050505050505050505050565b336000908152602a602052604090205460ff16612e225760405162461bcd60e51b815260040161116190615088565b600a5460408051918252602082018390527f532fd5ac65570caf6707ffe236de43c2a438413c3ddc7bc29fcec4eef7e92e5e910160405180910390a1600a55565b6008546001600160a01b03163314612ea25760405162461bcd60e51b815260206004820152600260248201526127ab60f11b6044820152606401611161565b62015180601c5442612eb491906152cb565b11612ee65760405162461bcd60e51b8152602060048201526002602482015261574f60f01b6044820152606401611161565b6000601654600a612ef79190615204565b601254612f0491906152ac565b42601c55601a54909150612f19908290615195565b601a55600854601354612f39916001600160a01b03918216911683613b56565b6040518181527fec71ef3a8fe17b2cdf953558f887e9f7d27b4b62872b5bae571873b49325fe8b906020016119dc565b60268181548110612f7957600080fd5b6000918252602090912001546001600160a01b0316905081565b336000908152602a602052604090205460ff16612fc25760405162461bcd60e51b815260040161116190615088565b600180548215156101000261ff00199091161790556040517f7c272be8a1e63fe6f1caee3d46bffe37bfcae3d5547c012370e1be6b3be8cd45906119dc90831515815260200190565b60408051338152602081018390527f915b7dcbce4b33c8c1b0b3537ad8a7a4ff151fd621bc867325bf3644a80e65a291016119dc565b600e54600f54601f5460009081908190613059611ad1565b61306391906152cb565b92506011544210806130755750600f54155b15613085575060009050806130e8565b60006011544261309591906152cb565b90506000600e54826130a791906151ad565b90506000600e54836130b99190615364565b905081600d546130c99190615195565b945080156130df576130dc600186615195565b94505b60115493505050505b9091929394565b336000908152602a602052604090205460ff1661311e5760405162461bcd60e51b815260040161116190615088565b8281146131525760405162461bcd60e51b8152602060048201526002602482015261494160f01b6044820152606401611161565b60005b838110156133475760006027600087878581811061318357634e487b7160e01b600052603260045260246000fd5b905060200201602081019061319891906146ea565b6001600160a01b03166001600160a01b0316815260200190815260200160002090508383838181106131da57634e487b7160e01b600052603260045260246000fd5b905060200201358180549050116132035760405162461bcd60e51b815260040161116190615050565b60008185858581811061322657634e487b7160e01b600052603260045260246000fd5b905060200201358154811061324b57634e487b7160e01b600052603260045260246000fd5b60009182526020909120600790910201600681015490915060ff16156132835760405162461bcd60e51b815260040161116190615034565b60068101805460ff191660041790557f9a8692aecab995d9a73da5450c7e93dc1142cbbb993de49dabfe47c970c94e2d8787858181106132d357634e487b7160e01b600052603260045260246000fd5b90506020020160208101906132e891906146ea565b86868681811061330857634e487b7160e01b600052603260045260246000fd5b600686015460405161332a959460209093029290920135925060ff1690614e5a565b60405180910390a15050808061333f90615349565b915050613155565b5050505050565b336000908152602a602052604090205460ff1661337d5760405162461bcd60e51b815260040161116190615088565b600060298484604051613391929190614da1565b9081526020016040518091039020905080600401546000146133da5760405162461bcd60e51b815260206004820152600260248201526120a160f11b6044820152606401611161565b6000816003015482600201546133f091906152cb565b9050808311156134275760405162461bcd60e51b8152602060048201526002602482015261414560f01b6044820152606401611161565b600654604051630852cd8d60e31b8152600481018590526001600160a01b03909116906342966c6890602401600060405180830381600087803b15801561346d57600080fd5b505af1158015613481573d6000803e3d6000fd5b50505050600482018390556040517ff0766a38e2d405bcb61bc30534d85dfb18b5d883af9d3afc0e3d1ab4c2168474906134c090879087908790614fa7565b60405180910390a15050505050565b336000908152602a602052604090205460ff166134fe5760405162461bcd60e51b815260040161116190615088565b60175460185460195460408051938452602084019290925282820152606082018590526080820184905260a08201839052517f0c24082219d0cec1ad2372704a868d9f0efaf337f2fad5cf74b965a91411efc49181900360c00190a1601792909255601855601955565b6025546001600160a01b0316331461357f57600080fd5b600260005414156135a25760405162461bcd60e51b8152600401611161906150a4565b600260009081556022546024546135b99190615195565b905060006021546023546135cd9190615195565b602454602354602254602154604080516001600160a01b038a1681526020810195909552840192909252606083015260808201529091507fe08737ac48a1dab4b1a46c7dc9398bd5bfc6d7ad6fabb7cd8caa254de14def359060a00160405180910390a160006024819055602381905560228190556021558115613683576040516001600160a01b0384169083156108fc029084906000818181858888f19350505050158015613681573d6000803e3d6000fd5b505b80156136a0576014546136a0906001600160a01b03168483613b56565b5050600160005550565b336000908152602a602052604090205460ff166136d95760405162461bcd60e51b815260040161116190615088565b6000821180156136e95750600081115b6136f257600080fd5b600e54600f546040805192835260208301919091528101839052606081018290527fb21eff835fb765b7d44e819829d28e3fa33ce4867e2bc3702791f556f5b7b87e9060800160405180910390a16011544211801561375357506000600f54115b156137c65760006011544261376891906152cb565b90506000600e548261377a91906151ad565b90506000600e548361378c9190615364565b905080156137a25761379f826001615195565b91505b81600d546137b09190615195565b600d556137bb611ad1565b601055505042601155505b600e91909155600f55565b602760205281600052604060002081815481106137ed57600080fd5b600091825260209091206007909102018054600182015460028301546003840154600485015460058601546006909601549497509295509093909260ff8082169161010090041688565b6000848484846040516020016138509493929190614d58565b604051602081830303815290604052805190602001209050949350505050565b6001600160a01b0381166000908152602760209081526040808320805482518185028101850190935280835260609492939192909184015b82821015611c6a5760008481526020908190206040805161010080820183526007870290930180548252600180820154838701526002820154938301939093526003810154606083015260048101546080830152600581015460a08301526006015460ff80821660c084015293900490921660e083015290835290920191016138a8565b60015460ff16156139645760405162461bcd60e51b8152602060048201526002602482015261414960f01b6044820152606401611161565b6001805461ffff191661010117815560258054336001600160a01b031991821681179092556000918252602a6020908152604092839020805460ff1916909417909355601e84905560118490556006805482166001600160a01b038a81169182179092556007805484168a84169081179091556009805485168a8516908117909155600880548616948a169490941790935560138054851683179055601480548516909117905560158054909316909117909155815163313ce56760e01b81529151909263313ce5679260048082019391829003018186803b158015613a4957600080fd5b505afa158015613a5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a819190614c9f565b60ff16601655600560028190556003819055600c600455601e90556305f5e100600a908155611567601255620186a0601755601855630bebc2006019556040513381527f217603b67e96243085c45dc7bec1c2813c04f15868319981d0eb223f8538da44906020016134c0565b6025546001600160a01b03163314613b0557600080fd5b6001600160a01b0381166000818152602a6020908152604091829020805460ff1916905590519182527f6140b1995a6d93cb229eb0b3da35af8cc220cdec34ac47d95ecb6a5d38d809fb91016119dc565b6040516001600160a01b038316602482015260448101829052613bb990849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261402e565b505050565b60026000541415613be15760405162461bcd60e51b8152600401611161906150a4565b600260009081556001600160a01b038316815260276020526040902080548210613c1d5760405162461bcd60e51b815260040161116190615050565b6000818381548110613c3f57634e487b7160e01b600052603260045260246000fd5b60009182526020909120600790910201600681015490915060ff16600314613c8e5760405162461bcd60e51b81526020600482015260026024820152614e4360f01b6044820152606401611161565b8054601354613caa916001600160a01b03909116908690613b56565b60068101805460ff191660019081179091556040517ffb88a0cd79205e2d9229eda9c770620861bd3994813ea339ccad8bb4187ede8091613cee9187918791614e5a565b60405180910390a1505060016000555050565b801580613d8a5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e9060440160206040518083038186803b158015613d5057600080fd5b505afa158015613d64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d889190614b75565b155b613df55760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401611161565b6040516001600160a01b038316602482015260448101829052613bb990849063095ea7b360e01b90606401613b82565b6000815160411415613e595760208201516040830151606084015160001a613e4f86828585614100565b9350505050613ec9565b815160401415613e815760208201516040830151613e788583836142a9565b92505050613ec9565b60405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611161565b92915050565b6013546040516370a0823160e01b81526001600160a01b03838116600483015260009283929116906370a082319060240160206040518083038186803b158015613f1857600080fd5b505afa158015613f2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f509190614b75565b9050601654600a613f619190615204565b601754613f6e91906152ac565b811015613f7e5750600092915050565b600060185482613f8e91906152ac565b90506000601654600a613fa19190615204565b601954613fae91906152ac565b905080821115613fbc578091505b6000613fc7866142d5565b9050828110613fdc5750600095945050505050565b613fe681846152cb565b9695505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526140289085906323b872dd60e01b90608401613b82565b50505050565b6000614083826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166143db9092919063ffffffff16565b805190915015613bb957808060200190518101906140a191906149ae565b613bb95760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611161565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a082111561417d5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401611161565b8360ff16601b148061419257508360ff16601c145b6141e95760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401611161565b6040805160008082526020820180845288905260ff871692820192909252606081018590526080810184905260019060a0016020604051602081039080840390855afa15801561423d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166142a05760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401611161565b95945050505050565b60006001600160ff1b03821660ff83901c601b016142c986828785614100565b925050505b9392505050565b6001600160a01b03811660009081526027602052604081208190815b81548110156143d25781818154811061431a57634e487b7160e01b600052603260045260246000fd5b600091825260209091206006600790920201015460ff1615801590614376575081818154811061435a57634e487b7160e01b600052603260045260246000fd5b600091825260209091206006600790920201015460ff16600114155b15614380576143c0565b8181815481106143a057634e487b7160e01b600052603260045260246000fd5b906000526020600020906007020160000154836143bd9190615195565b92505b806143ca81615349565b9150506142f1565b50909392505050565b60606143ea84846000856143f2565b949350505050565b6060824710156144535760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401611161565b843b6144a15760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611161565b600080866001600160a01b031685876040516144bd9190614d85565b60006040518083038185875af1925050503d80600081146144fa576040519150601f19603f3d011682016040523d82523d6000602084013e6144ff565b606091505b509150915061450f82828661451a565b979650505050505050565b606083156145295750816142ce565b8251156145395782518084602001fd5b8160405162461bcd60e51b81526004016111619190614ffc565b82805461455f9061530e565b90600052602060002090601f01602090048101928261458157600085556145c7565b82601f1061459a57805160ff19168380011785556145c7565b828001600101855582156145c7579182015b828111156145c75782518255916020019190600101906145ac565b506145d39291506145d7565b5090565b5b808211156145d357600081556001016145d8565b60006001600160401b03831115614605576146056153a4565b614618601f8401601f1916602001615165565b905082815283838301111561462c57600080fd5b828260208301376000602084830101529392505050565b60008083601f840112614654578182fd5b5081356001600160401b0381111561466a578182fd5b6020830191508360208260051b850101111561468557600080fd5b9250929050565b600082601f83011261469c578081fd5b6142ce838335602085016145ec565b60008083601f8401126146bc578182fd5b5081356001600160401b038111156146d2578182fd5b60208301915083602082850101111561468557600080fd5b6000602082840312156146fb578081fd5b81356142ce816153ba565b600060208284031215614717578081fd5b81516142ce816153ba565b600080600080600060a08688031215614739578081fd5b8535614744816153ba565b94506020860135614754816153ba565b93506040860135614764816153ba565b92506060860135614774816153ba565b949793965091946080013592915050565b6000806000806060858703121561479a578384fd5b84356147a5816153ba565b935060208501356001600160401b038111156147bf578384fd5b6147cb878288016146ab565b9598909750949560400135949350505050565b600080604083850312156147f0578182fd5b82356147fb816153ba565b946020939093013593505050565b6000806000806040858703121561481e578384fd5b84356001600160401b0380821115614834578586fd5b61484088838901614643565b90965094506020870135915080821115614858578384fd5b5061486587828801614643565b95989497509550505050565b60008060008060008060808789031215614889578081fd5b86356001600160401b038082111561489f578283fd5b6148ab8a838b01614643565b909850965060208901359150808211156148c3578283fd5b506148d089828a01614643565b979a9699509760408101359660609091013595509350505050565b600060208083850312156148fd578182fd5b82516001600160401b0380821115614913578384fd5b818501915085601f830112614926578384fd5b815181811115614938576149386153a4565b8060051b9150614949848301615165565b8181528481019084860184860187018a1015614963578788fd5b8795505b83861015614985578051835260019590950194918601918601614967565b5098975050505050505050565b6000602082840312156149a3578081fd5b81356142ce816153d2565b6000602082840312156149bf578081fd5b81516142ce816153d2565b600080602083850312156149dc578182fd5b82356001600160401b038111156149f1578283fd5b6149fd858286016146ab565b90969095509350505050565b600080600060408486031215614a1d578081fd5b83356001600160401b03811115614a32578182fd5b614a3e868287016146ab565b909790965060209590950135949350505050565b60008060008060608587031215614a67578182fd5b84356001600160401b0380821115614a7d578384fd5b614a89888389016146ab565b9096509450602087013593506040870135915080821115614aa8578283fd5b50614ab58782880161468c565b91505092959194509250565b600080600080600060808688031215614ad8578283fd5b85356001600160401b03811115614aed578384fd5b614af9888289016146ab565b9099909850602088013597604081013597506060013595509350505050565b600060208284031215614b29578081fd5b81356001600160401b03811115614b3e578182fd5b8201601f81018413614b4e578182fd5b6143ea848235602084016145ec565b600060208284031215614b6e578081fd5b5035919050565b600060208284031215614b86578081fd5b5051919050565b60008060408385031215614b9f578182fd5b50508035926020909101359150565b600080600060608486031215614bc2578081fd5b505081359360208301359350604090920135919050565b60008060008060008060008060e0898b031215614bf4578586fd5b88359750602089013596506040890135955060608901356001600160401b0380821115614c1f578384fd5b614c2b8c838d016146ab565b909750955060808b0135945060a08b0135915080821115614c4a578384fd5b50614c578b828c0161468c565b92505060c089013590509295985092959890939650565b60008060008060808587031215614c83578182fd5b5050823594602084013594506040840135936060013592509050565b600060208284031215614cb0578081fd5b815160ff811681146142ce578182fd5b6000815180845260208085019450808401835b83811015614cf85781516001600160a01b031687529582019590820190600101614cd3565b509495945050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60008151808452614d448160208601602086016152e2565b601f01601f19169290920160200192915050565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b60008251614d978184602087016152e2565b9190910192915050565b8183823760009101908152919050565b6001600160a01b0385168152606060208201819052600090614dd69083018587614d03565b905082604083015295945050505050565b600061016060018060a01b038e1683528c60208401528b60408401528a60608401528960808401528860a08401528760c08401528660e084015260ff861661010084015260ff851661012084015280610140840152614e4881840185614d2c565b9e9d5050505050505050505050505050565b6001600160a01b03939093168352602083019190915260ff16604082015260600190565b6020815260006142ce6020830184614cc0565b60006020808301818452808551808352604092508286019150828160051b870101848801865b83811015614f0357603f19898403018552815160608151818652614edd82870182614d2c565b838b0151878c015292890151958901959095525094870194925090860190600101614eb7565b509098975050505050505050565b602080825282518282018190526000919060409081850190868401855b82811015614f9a5781518051855286810151878601528581015186860152606080820151908601526080808201519086015260a0808201519086015260c08082015160ff9081169187019190915260e09182015116908501526101009093019290850190600101614f2e565b5091979650505050505050565b604081526000614fbb604083018587614d03565b9050826020830152949350505050565b608081526000614fdf608083018789614d03565b602083019590955250604081019290925260609091015292915050565b6020815260006142ce6020830184614d2c565b6060815260006150226060830186614d2c565b60208301949094525060400152919050565b602080825260029082015261555360f01b604082015260600190565b60208082526002908201526127a960f11b604082015260600190565b6020808252600290820152614e5360f01b604082015260600190565b60208082526002908201526104e560f41b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b8281526040602082015260006143ea6040830184614cc0565b84815260806020820152600061510d6080830186614cc0565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a06040820152600061514860a0830186614cc0565b6001600160a01b0394909416606083015250608001529392505050565b604051601f8201601f191681016001600160401b038111828210171561518d5761518d6153a4565b604052919050565b600082198211156151a8576151a8615378565b500190565b6000826151bc576151bc61538e565b500490565b600181815b808511156151fc5781600019048211156151e2576151e2615378565b808516156151ef57918102915b93841c93908002906151c6565b509250929050565b60006142ce838360008261521a57506001613ec9565b8161522757506000613ec9565b816001811461523d576002811461524757615263565b6001915050613ec9565b60ff84111561525857615258615378565b50506001821b613ec9565b5060208310610133831016604e8410600b8410161715615286575081810a613ec9565b61529083836151c1565b80600019048211156152a4576152a4615378565b029392505050565b60008160001904831182151516156152c6576152c6615378565b500290565b6000828210156152dd576152dd615378565b500390565b60005b838110156152fd5781810151838201526020016152e5565b838111156140285750506000910152565b600181811c9082168061532257607f821691505b6020821081141561534357634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561535d5761535d615378565b5060010190565b6000826153735761537361538e565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146153cf57600080fd5b50565b80151581146153cf57600080fdfea2646970667358221220752818d64a2c2ef1bb84af938f824333a0ed8a84a8ffd4446dd0fe638a424f7764736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000002c9aceb63181cd08a093d052ec041e191f229692000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec70000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000ab5801a7d398351b8be11c439e05c5b3259aec9b000000000000000000000000000000000000000000000000000000006108d2e4
-----Decoded View---------------
Arg [0] : _angryTokenAddr (address): 0x2c9acEb63181cd08a093d052ec041e191f229692
Arg [1] : _usdtTokenAddr (address): 0xdAC17F958D2ee523a2206206994597C13D831ec7
Arg [2] : _uniswapRouterAddr (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [3] : _vitalikButerinAddr (address): 0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B
Arg [4] : _startTime (uint256): 1627968228
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000002c9aceb63181cd08a093d052ec041e191f229692
Arg [1] : 000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7
Arg [2] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [3] : 000000000000000000000000ab5801a7d398351b8be11c439e05c5b3259aec9b
Arg [4] : 000000000000000000000000000000000000000000000000000000006108d2e4
Deployed Bytecode Sourcemap
29263:26881:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30761:33;;;;;;;;;;;;;;;;;;;21086:25:1;;;21074:2;21059:18;30761:33:0;;;;;;;;52019:183;;;;;;;;;;-1:-1:-1;52019:183:0;;;;;:::i;:::-;;:::i;:::-;;31164:27;;;;;;;;;;;;;;;;38569:197;;;;;;;;;;-1:-1:-1;38717:10:0;;38729:11;;38742:6;;38750:7;;38569:197;;;;38217:25:1;;;38273:2;38258:18;;38251:34;;;;38301:18;;;38294:34;38359:2;38344:18;;38337:34;38204:3;38189:19;38569:197:0;38171:206:1;51589:418:0;;;;;;;;;;;;;:::i;:::-;;;;37004:25:1;;;37060:2;37045:18;;37038:34;;;;36977:18;51589:418:0;36959:119:1;52798:341:0;;;;;;;;;;-1:-1:-1;52798:341:0;;;;;:::i;:::-;;:::i;:::-;;;;37864:25:1;;;37920:2;37905:18;;37898:34;;;;37948:18;;;37941:34;37852:2;37837:18;52798:341:0;37819:162:1;30839:24:0;;;;;;;;;;-1:-1:-1;30839:24:0;;;;-1:-1:-1;;;;;30839:24:0;;;;;;-1:-1:-1;;;;;14665:32:1;;;14647:51;;14635:2;14620:18;30839:24:0;14602:102:1;30667:38:0;;;;;;;;;;;;;;;;47987:1776;;;;;;;;;;-1:-1:-1;47987:1776:0;;;;;:::i;:::-;;:::i;38034:523::-;;;;;;;;;;;;;:::i;35725:153::-;;;;;;;;;;-1:-1:-1;35725:153:0;;;;;:::i;:::-;;:::i;31482:25::-;;;;;;;;;;;;;;;;46995:115;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;30268:38::-;;;;;;;;;;;;;;;;55392:289;;;;;;;;;;-1:-1:-1;55392:289:0;;;;;:::i;:::-;;:::i;41268:523::-;;;;;;;;;;;;;:::i;30106:20::-;;;;;;;;;;-1:-1:-1;30106:20:0;;;;;;;;;;;;;;20913:14:1;;20906:22;20888:41;;20876:2;20861:18;30106:20:0;20843:92:1;53151:136:0;;;;;;;;;;-1:-1:-1;53151:136:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;31082:37::-;;;;;;;;;;;;;;;;41803:1056;;;;;;;;;;-1:-1:-1;41803:1056:0;;;;;:::i;:::-;;:::i;31126:31::-;;;;;;;;;;;;;;;;31421:21;;;;;;;;;;;;;;;;31827:56;;;;;;;;;;-1:-1:-1;31827:56:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47122:244;;;;;;;;;;-1:-1:-1;47122:244:0;;;;;:::i;:::-;;:::i;31198:33::-;;;;;;;;;;;;;;;;36652:335;;;;;;;;;;-1:-1:-1;36812:23:0;;36860;;36908;;36956;;36652:335;;49982:1128;;;;;;;;;;-1:-1:-1;49982:1128:0;;;;;:::i;:::-;;:::i;31776:44::-;;;;;;;;;;-1:-1:-1;31776:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;30801:31;;;;;;;;;;;;;;;;30900:41;;;;;;;;;;-1:-1:-1;30900:41:0;;;;-1:-1:-1;;;;;30900:41:0;;;36056:584;;;;;;;;;;-1:-1:-1;36056:584:0;;;;;:::i;:::-;;:::i;31651:55::-;;;;;;;;;;-1:-1:-1;31651:55:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;55693:182::-;;;;;;;;;;-1:-1:-1;55693:182:0;;;;;:::i;:::-;;:::i;30080:19::-;;;;;;;;;;-1:-1:-1;30080:19:0;;;;;;;;30313:29;;;;;;;;;;-1:-1:-1;30313:29:0;;;;-1:-1:-1;;;;;30313:29:0;;;52214:572;;;;;;;;;;-1:-1:-1;52214:572:0;;;;;:::i;:::-;;:::i;43049:3780::-;;;;;;:::i;:::-;;:::i;31278:24::-;;;;;;;;;;;;;;;;30504:33;;;;;;;;;;;;;;;;30349:28;;;;;;;;;;-1:-1:-1;30349:28:0;;;;-1:-1:-1;;;;;30349:28:0;;;30583:32;;;;;;;;;;;;;;;;53299:194;;;;;;;;;;-1:-1:-1;53299:194:0;;;;;:::i;:::-;;:::i;30989:42::-;;;;;;;;;;;;;;;;30178:38;;;;;;;;;;;;;;;;37565:457;;;;;;;;;;;;;:::i;30424:32::-;;;;;;;;;;-1:-1:-1;30424:32:0;;;;-1:-1:-1;;;;;30424:32:0;;;31238:33;;;;;;;;;;;;;;;;31514:20;;;;;;;;;;-1:-1:-1;31514:20:0;;;;-1:-1:-1;;;;;31514:20:0;;;31392:22;;;;;;;;;;;;;;;;30622:38;;;;;;;;;;;;;;;;31541:36;;;;;;;;;;-1:-1:-1;31541:36:0;;;;;:::i;:::-;;:::i;39223:221::-;;;;;;;;;;-1:-1:-1;39362:27:0;;39390:22;;39413;;39223:221;;31038:37;;;;;;;;;;;;;;;;30870:23;;;;;;;;;;-1:-1:-1;30870:23:0;;;;-1:-1:-1;;;;;30870:23:0;;;47378:102;;;;;;;;;;-1:-1:-1;47454:18:0;;47378:102;;56014:127;;;;;;;;;;-1:-1:-1;56014:127:0;;;;;:::i;:::-;;:::i;31449:26::-;;;;;;;;;;;;;;;;31352:33;;;;;;;;;;;;;;;;30223:38;;;;;;;;;;;;;;;;55887:115;;;;;;;;;;-1:-1:-1;55887:115:0;;;;;:::i;:::-;;:::i;30544:32::-;;;;;;;;;;;;;;;;54412:968;;;;;;;;;;;;;:::i;:::-;;;;38641:25:1;;;38697:2;38682:18;;38675:34;;;;38725:18;;;38718:34;;;;38783:2;38768:18;;38761:34;38826:3;38811:19;;38804:35;38628:3;38613:19;54412:968:0;38595:250:1;30463:34:0;;;;;;;;;;;;;;;;30133:38;;;;;;;;;;;;;;;;39456:650;;;;;;;;;;-1:-1:-1;39456:650:0;;;;;:::i;:::-;;:::i;51122:455::-;;;;;;;;;;-1:-1:-1;51122:455:0;;;;;:::i;:::-;;:::i;38778:433::-;;;;;;;;;;-1:-1:-1;38778:433:0;;;;;:::i;:::-;;:::i;30384:33::-;;;;;;;;;;-1:-1:-1;30384:33:0;;;;-1:-1:-1;;;;;30384:33:0;;;36999:554;;;;;;;;;;-1:-1:-1;36999:554:0;;;;;:::i;:::-;;:::i;53505:895::-;;;;;;;;;;-1:-1:-1;53505:895:0;;;;;:::i;:::-;;:::i;30712:42::-;;;;;;;;;;;;;;;;31713:56;;;;;;;;;;-1:-1:-1;31713:56:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31584:60;;;;;;;;;;-1:-1:-1;31584:60:0;;;;;:::i;:::-;;:::i;:::-;;;;40409:25:1;;;40465:2;40450:18;;40443:34;;;;40493:18;;;40486:34;;;;40551:2;40536:18;;40529:34;;;;40594:3;40579:19;;40572:35;40638:3;40623:19;;40616:35;40700:4;40688:17;;;40682:3;40667:19;;40660:46;40743:17;40737:3;40722:19;;40715:46;40396:3;40381:19;31584:60:0;40363:404:1;49775:195:0;;;;;;;;;;-1:-1:-1;49775:195:0;;;;;:::i;:::-;;:::i;46841:142::-;;;;;;;;;;-1:-1:-1;46841:142:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;34509:1204::-;;;;;;;;;;-1:-1:-1;34509:1204:0;;;;;:::i;:::-;;:::i;31309:36::-;;;;;;;;;;;;;;;;35890:154;;;;;;;;;;-1:-1:-1;35890:154:0;;;;;:::i;:::-;;:::i;52019:183::-;34102:5;;-1:-1:-1;;;;;34102:5:0;34088:10;:19;34080:28;;;;;;52104:10:::1;::::0;:43:::1;::::0;-1:-1:-1;;;;;52104:10:0::1;52128:9:::0;52139:7;52104:23:::1;:43::i;:::-;52163:31;::::0;;-1:-1:-1;;;;;16010:32:1;;15992:51;;16074:2;16059:18;;16052:34;;;52163:31:0::1;::::0;15965:18:1;52163:31:0::1;;;;;;;;52019:183:::0;;:::o;51589:418::-;51705:16;;;51719:1;51705:16;;;;;;;;;51632:17;;;;;;51705:16;;;;;;;;-1:-1:-1;;51742:14:0;;51732:7;;;;-1:-1:-1;;;;;;51742:14:0;;51732:7;;-1:-1:-1;51742:14:0;;51732:7;;-1:-1:-1;;;51732:7:0;;;;;;;;;-1:-1:-1;;;;;51732:24:0;;;:7;;;;;;;;;;:24;;;;51777:15;;:22;;;-1:-1:-1;;;51777:22:0;;;;:15;;;;;:20;;:22;;;;;51732:7;;51777:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51767:4;51772:1;51767:7;;;;;;-1:-1:-1;;;51767:7:0;;;;;;;;;-1:-1:-1;;;;;51767:32:0;;;:7;;;;;;;;;:32;51820:13;;51810:7;;51820:13;;;51810:4;;51815:1;;51810:7;;;;-1:-1:-1;;;51810:7:0;;;;;;;;;-1:-1:-1;;;;;51810:23:0;;;:7;;;;;;;;;:23;51871:15;;51907:18;;51844:24;;51871:15;;;;;:29;;51901:24;;:2;:24;:::i;:::-;51927:4;51871:61;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;51871:61:0;;;;;;;;;;;;:::i;:::-;51844:88;;51955:7;51963:1;51955:10;;;;;;-1:-1:-1;;;51955:10:0;;;;;;;;;;;;;;;51943:22;;51989:7;51997:1;51989:10;;;;;;-1:-1:-1;;;51989:10:0;;;;;;;;;;;;;;;51976:23;;51589:418;;;;:::o;52798:341::-;52870:21;52893:22;52917:21;52951:25;52979:15;52995:7;;52979:24;;;;;;;:::i;:::-;;;;;;;;;;;;;52951:52;;53030:2;:15;;;53014:31;;53073:2;:16;;;53056:33;;53116:2;:15;;;53100:31;;52798:341;;;;;;:::o;47987:1776::-;34194:10;34181:24;;;;:12;:24;;;;;;;;34173:39;;;;-1:-1:-1;;;34173:39:0;;;;;;;:::i;:::-;;;;;;;;;48177:8:::1;::::0;::::1;::::0;::::1;;;48169:23;;;;-1:-1:-1::0;;;48169:23:0::1;;;;;;;:::i;:::-;48292:16;::::0;;48306:1:::1;48292:16:::0;;;;;::::1;::::0;;48203:17:::1;::::0;;;;;48292:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;48329:14:0::1;::::0;48319:7;;;;-1:-1:-1;;;;;;48329:14:0::1;::::0;48319:7;;-1:-1:-1;48329:14:0;;48319:7;::::1;;;-1:-1:-1::0;;;48319:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;48319:24:0;;::::1;:7;::::0;;::::1;::::0;;;;;;;:24;48364:40;;::::1;48354:59;;;::::0;-1:-1:-1;;;48354:59:0;;24939:2:1;48354:59:0::1;::::0;::::1;24921:21:1::0;24978:1;24958:18;;;24951:29;-1:-1:-1;;;24996:18:1;;;24989:33;25039:18;;48354:59:0::1;24911:152:1::0;48354:59:0::1;48430:9;48424:701;48444:20:::0;;::::1;48424:701;;;48485:35;48523:15;:31;48540:9;;48550:1;48540:12;;;;;-1:-1:-1::0;;;48540:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;48523:31:0::1;-1:-1:-1::0;;;;;48523:31:0::1;;;;;;;;;;;;48485:69;;48597:13;;48611:1;48597:16;;;;;-1:-1:-1::0;;;48597:16:0::1;;;;;;;;;;;;;;;48578:9;:16;;;;:35;48569:52;;;;-1:-1:-1::0;;;48569:52:0::1;;;;;;;:::i;:::-;48636:30;48669:9;48680:13;;48694:1;48680:16;;;;;-1:-1:-1::0;;;48680:16:0::1;;;;;;;;;;;;;;;48669:29;;;;;;-1:-1:-1::0;;;48669:29:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;48722:13;::::0;::::1;::::0;48669:29;;-1:-1:-1;48722:13:0::1;;:18:::0;48713:35:::1;;;;-1:-1:-1::0;;;48713:35:0::1;;;;;;;:::i;:::-;48763:13;::::0;::::1;:17:::0;;-1:-1:-1;;48763:17:0::1;48779:1;48763:17;::::0;;;;::::1;48799:18:::0;::::1;48763:17;48799:18;48763:17:::0;48799:23:::1;48795:170;;;48856:20;::::0;::::1;::::0;48843:33:::1;::::0;;::::1;:::i;:::-;;;48795:170;;;48929:20;::::0;::::1;::::0;48915:34:::1;::::0;;::::1;:::i;:::-;;;48795:170;48979:55;49003:9;;49013:1;49003:12;;;;;-1:-1:-1::0;;;49003:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49017:13;;49031:1;49017:16;;;;;-1:-1:-1::0;;;49017:16:0::1;;;;;;;;;;;;;;;48979:23;:55::i;:::-;49054:59;49067:9;;49077:1;49067:12;;;;;-1:-1:-1::0;;;49067:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49081:13;;49095:1;49081:16;;;;;-1:-1:-1::0;;;49081:16:0::1;;;;;;;;;49099:13;::::0;::::1;::::0;49054:59:::1;::::0;::::1;::::0;;49081:16:::1;::::0;;::::1;::::0;;;::::1;;::::0;-1:-1:-1;49099:13:0::1;;::::0;49054:59:::1;:::i;:::-;;;;;;;;48424:701;;48466:3;;;;;:::i;:::-;;;;48424:701;;;-1:-1:-1::0;49139:13:0;;49135:277:::1;;49179:15;;;;;;;;;-1:-1:-1::0;;;;;49179:15:0::1;-1:-1:-1::0;;;;;49179:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49169:4;49174:1;49169:7;;;;;;-1:-1:-1::0;;;49169:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;49169:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;49233:15:::1;::::0;:111:::1;::::0;-1:-1:-1;;;49233:111:0;;49216:14:::1;::::0;49233:15;;;::::1;::::0;:37:::1;::::0;49277:9;;49233:111:::1;::::0;49288:16;;49306:4;;49320::::1;::::0;49327:15:::1;::::0;49233:111:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;49233:111:0::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;49345:1;49233:114;;;;;;-1:-1:-1::0;;;49233:114:0::1;;;;;;;;;;::::0;;::::1;::::0;;;;;;49372:14:::1;::::0;49362:38:::1;::::0;-1:-1:-1;;;49362:38:0;;::::1;::::0;::::1;21086:25:1::0;;;49233:114:0;;-1:-1:-1;;;;;;49372:14:0::1;::::0;49362:30:::1;::::0;21059:18:1;;49362:38:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;49135:277;;49426:14:::0;;49422:334:::1;;49467:13;::::0;49457:7;;-1:-1:-1;;;;;49467:13:0;;::::1;::::0;49457:4;;49467:13:::1;::::0;49457:7:::1;;-1:-1:-1::0;;;49457:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;49457:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;49517:17:::1;::::0;49495:9:::1;::::0;:51:::1;::::0;:9;;::::1;::::0;49517:17:::1;49535:10:::0;49495:21:::1;:51::i;:::-;49578:15;::::0;:110:::1;::::0;-1:-1:-1;;;49578:110:0;;49561:14:::1;::::0;-1:-1:-1;;;;;49578:15:0::1;::::0;:40:::1;::::0;:110:::1;::::0;49619:10;;49631:17;;49650:4;;49664::::1;::::0;49671:15:::1;::::0;49578:110:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;49578:110:0::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;49689:1;49578:113;;;;;;-1:-1:-1::0;;;49578:113:0::1;;;;;;;;;;::::0;;::::1;::::0;;;;;;49716:14:::1;::::0;49706:38:::1;::::0;-1:-1:-1;;;49706:38:0;;::::1;::::0;::::1;21086:25:1::0;;;49578:113:0;;-1:-1:-1;;;;;;49716:14:0::1;::::0;49706:30:::1;::::0;21059:18:1;;49706:38:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;49422:334;;34223:1;;;47987:1776:::0;;;;;;:::o;38034:523::-;34194:10;34181:24;;;;:12;:24;;;;;;;;34173:39;;;;-1:-1:-1;;;34173:39:0;;;;;;;:::i;:::-;38092:19:::1;38184:18;;38178:2;:24;;;;:::i;:::-;38159:16;;38148:6;38134:9;;38116:15;:27;;;;:::i;:::-;38115:40;;;;:::i;:::-;38114:61;;;;:::i;:::-;:88;;;;:::i;:::-;38092:110;;38213:20;38285:12;;38266:16;;:31;;;;:::i;:::-;38251:11;:47;38248:302;;;38363:12;;38344:16;;:31;;;;:::i;:::-;38329:47;::::0;:11;:47:::1;:::i;:::-;38401:14;::::0;38391:44:::1;::::0;-1:-1:-1;;;38391:44:0;;::::1;::::0;::::1;21086:25:1::0;;;38314:62:0;;-1:-1:-1;;;;;;38401:14:0::1;::::0;38391:30:::1;::::0;21059:18:1;;38391:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;38480:12;38465;;:27;;;;:::i;:::-;38450:12;:42:::0;38512:26:::1;::::0;21086:25:1;;;38512:26:0::1;::::0;21074:2:1;21059:18;38512:26:0::1;21041:76:1::0;38248:302:0::1;34223:1;;38034:523::o:0;35725:153::-;34102:5;;-1:-1:-1;;;;;34102:5:0;34088:10;:19;34080:28;;;;;;-1:-1:-1;;;;;35796:26:0;::::1;;::::0;;;:12:::1;:26;::::0;;;;;;;;:33;;-1:-1:-1;;35796:33:0::1;35825:4;35796:33;::::0;;35845:25;;14647:51:1;;;35845:25:0::1;::::0;14620:18:1;35845:25:0::1;;;;;;;;35725:153:::0;:::o;46995:115::-;47048:16;47083:19;47076:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;47076:26:0;;;;;;;;;;;;;;;;;;;;;;;46995:115;:::o;55392:289::-;34194:10;34181:24;;;;:12;:24;;;;;;;;34173:39;;;;-1:-1:-1;;;34173:39:0;;;;;;;:::i;:::-;55529:17:::1;::::0;55547:18:::1;::::0;55502:87:::1;::::0;;38217:25:1;;;38273:2;38258:18;;38251:34;;;;38301:18;;38294:34;;;38359:2;38344:18;;38337:34;;;55502:87:0::1;::::0;38204:3:1;38189:19;55502:87:0::1;;;;;;;55600:17;:30:::0;;;;55641:18:::1;:32:::0;55392:289::o;41268:523::-;41326:7;41366:18;;41348:15;:36;:68;;;-1:-1:-1;41388:23:0;;:28;41348:68;41345:107;;;-1:-1:-1;41439:1:0;;41268:523::o;41345:107::-;41462:20;41503:18;;41485:15;:36;;;;:::i;:::-;41462:59;;41532:10;41560:23;;41545:12;:38;;;;:::i;:::-;41532:51;;41594:12;41624:23;;41609:12;:38;;;;:::i;:::-;41594:53;-1:-1:-1;41661:8:0;;41658:50;;41690:6;:2;41695:1;41690:6;:::i;:::-;41685:11;;41658:50;41760:23;;41755:28;;:2;:28;:::i;:::-;41725:27;;:58;;;;:::i;:::-;41718:65;;;;;41268:523;:::o;53151:136::-;-1:-1:-1;;;;;53263:16:0;;;;;;:9;:16;;;;;;;;53256:23;;;;;;;;;;;;;;;;;53219:25;;53256:23;;53263:16;;53256:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53151:136;;;:::o;41803:1056::-;6857:1;7453:7;;:19;;7445:63;;;;-1:-1:-1;;;7445:63:0;;;;;;;:::i;:::-;6857:1;7586:7;:18;41893:8:::1;::::0;::::1;::::0;::::1;;;41885:23;;;;-1:-1:-1::0;;;41885:23:0::1;;;;;;;:::i;:::-;41974:10;41919:35;41957:29:::0;;;:15:::1;:29;::::0;;;;42006:16;;:28;-1:-1:-1;41997:68:0::1;;;::::0;-1:-1:-1;;;41997:68:0;;32807:2:1;41997:68:0::1;::::0;::::1;32789:21:1::0;32846:2;32826:18;;;32819:30;32885:27;32865:18;;;32858:55;32930:18;;41997:68:0::1;32779:175:1::0;41997:68:0::1;42076:30;42109:9;42119;42109:20;;;;;;-1:-1:-1::0;;;42109:20:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;42149:13;::::0;::::1;::::0;42109:20;;-1:-1:-1;42149:13:0::1;;:18:::0;;:40:::1;;-1:-1:-1::0;42171:13:0::1;::::0;::::1;::::0;::::1;;42188:1;42171:18;42149:40;42140:79;;;::::0;-1:-1:-1;;;42140:79:0;;32454:2:1;42140:79:0::1;::::0;::::1;32436:21:1::0;32493:2;32473:18;;;32466:30;32532:26;32512:18;;;32505:54;32576:18;;42140:79:0::1;32426:174:1::0;42140:79:0::1;42279:20;::::0;::::1;::::0;42313:18:::1;::::0;42230:11:::1;::::0;42279:20;42313:22;42310:109:::1;;42401:6;42380:18;;42357:6;:20;;;:41;;;;:::i;:::-;:50;;;;:::i;:::-;42351:56;;42310:109;42432:7:::0;;42429:71:::1;;42470:18;42485:3:::0;42470:12;:18:::1;:::i;:::-;42455:33;;42429:71;42513:18;::::0;::::1;::::0;::::1;;::::0;;::::1;;;:23;42510:249;;;42570:3;42561:6;;:12;;;;:::i;:::-;42552:6;:21:::0;42588:42:::1;::::0;42596:10:::1;::::0;42588:42;::::1;;;::::0;42617:12;;42588:42:::1;::::0;;;42617:12;42596:10;42588:42;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;42510:249;;;42681:3;42671:7;;:13;;;;:::i;:::-;42661:7;:23:::0;42699:9:::1;::::0;:48:::1;::::0;-1:-1:-1;;;;;42699:9:0::1;42722:10;42734:12:::0;42699:22:::1;:48::i;:::-;42769:13;::::0;::::1;:17:::0;;-1:-1:-1;;42769:17:0::1;42785:1;42769:17:::0;;::::1;::::0;;;42802:49:::1;::::0;::::1;::::0;::::1;::::0;42814:10:::1;::::0;42826:9;;42802:49:::1;:::i;:::-;;;;;;;;-1:-1:-1::0;;6813:1:0;7765:7;:22;-1:-1:-1;;;41803:1056:0:o;47122:244::-;34194:10;34181:24;;;;:12;:24;;;;;;;;34173:39;;;;-1:-1:-1;;;34173:39:0;;;;;;;:::i;:::-;47218:6:::1;47206:8;:18;;47198:27;;;::::0;::::1;;47255:18;::::0;;47284:29;;;47329::::1;::::0;;37004:25:1;;;37045:18;;;37038:34;;;47255:18:0;;47329:29:::1;::::0;36977:18:1;47329:29:0::1;36959:119:1::0;49982:1128:0;50100:8;;;;;;;50092:23;;;;-1:-1:-1;;;50092:23:0;;;;;;;:::i;:::-;50126:25;50154:15;50170:7;;50154:24;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;50217:10;50198:30;;;;:18;;;:30;;;;;;50154:24;;-1:-1:-1;50198:35:0;50189:52;;;;-1:-1:-1;;;50189:52:0;;32124:2:1;50189:52:0;;;32106:21:1;32163:1;32143:18;;;32136:29;-1:-1:-1;;;32181:18:1;;;32174:32;32223:18;;50189:52:0;32096:151:1;50189:52:0;50252:12;50267:36;50275:10;50286:7;;50295;50267;:36::i;:::-;50252:51;-1:-1:-1;50437:14:0;50454:18;50252:51;50467:4;50454:12;:18::i;:::-;-1:-1:-1;;;;;50492:20:0;;;;;;:12;:20;;;;;;50437:35;;-1:-1:-1;50492:20:0;;50483:37;;;;-1:-1:-1;;;50483:37:0;;;;;;;:::i;:::-;50531:12;50584:2;:15;;;50565:2;:16;;;:34;;;;:::i;:::-;50546:2;:15;;;:54;;;;:::i;:::-;50531:69;;50631:4;50620:7;:15;;50611:32;;;;-1:-1:-1;;;50611:32:0;;31106:2:1;50611:32:0;;;31088:21:1;31145:1;31125:18;;;31118:29;-1:-1:-1;;;31163:18:1;;;31156:32;31205:18;;50611:32:0;31078:151:1;50611:32:0;50654:10;;:44;;-1:-1:-1;;;;;50654:10:0;50678;50690:7;50654:23;:44::i;:::-;50747:7;50728:2;:16;;;:26;;;;:::i;:::-;50709:16;;;:45;50811:10;50765:32;50800:23;;;:9;:23;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;50885:7:0;;50872:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50872:20:0;;;-1:-1:-1;;;50903:10:0;;;;:20;;;50945:15;50934:8;;;:26;50971:15;;;;;;;;;;;;;;;;;;50872:3;;50971:15;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;50971:15:0;;;;;;;;;;;;;;;;;;;;;;51016:10;-1:-1:-1;50997:30:0;;;:18;;;:30;;;;;;;:40;;;51053:49;;;;;;51085:7;;;;51030;;51053:49;:::i;:::-;;;;;;;;49982:1128;;;;;;;;;;:::o;36056:584::-;34194:10;34181:24;;;;:12;:24;;;;;;;;34173:39;;;;-1:-1:-1;;;34173:39:0;;;;;;;:::i;:::-;36223:3:::1;36208:11;:18;;:40;;;;;36245:3;36230:11;:18;;36208:40;36200:55;;;::::0;-1:-1:-1;;;36200:55:0;;30776:2:1;36200:55:0::1;::::0;::::1;30758:21:1::0;30815:1;30795:18;;;30788:29;-1:-1:-1;;;30833:18:1;;;30826:32;30875:18;;36200:55:0::1;30748:151:1::0;36200:55:0::1;36295:23;::::0;36319::::1;::::0;36343::::1;::::0;36368::::1;::::0;36271:169:::1;::::0;;39733:25:1;;;39789:2;39774:18;;39767:34;;;;39817:18;;;39810:34;39875:2;39860:18;;39853:34;39918:3;39903:19;;39896:35;;;39962:3;39947:19;;39940:35;;;40006:3;39991:19;;39984:35;;;40050:3;40035:19;;40028:35;;;36271:169:0::1;::::0;39720:3:1;39705:19;36271:169:0::1;;;;;;;36451:23;:37:::0;;;;36499:23:::1;:37:::0;;;;36547:23:::1;:37:::0;-1:-1:-1;36595:37:0;36056:584::o;31651:55::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;55693:182::-;34194:10;34181:24;;;;:12;:24;;;;;;;;34173:39;;;;-1:-1:-1;;;34173:39:0;;;;;;;:::i;:::-;55800:16:::1;::::0;55777:51:::1;::::0;;37004:25:1;;;37060:2;37045:18;;37038:34;;;55777:51:0::1;::::0;36977:18:1;55777:51:0::1;;;;;;;55839:16;:28:::0;55693:182::o;52214:572::-;34194:10;34181:24;;;;:12;:24;;;;;;;;34173:39;;;;-1:-1:-1;;;34173:39:0;;;;;;;:::i;:::-;52374:10:::1;52363:8;:21;52354:39;;;::::0;-1:-1:-1;;;52354:39:0;;26411:2:1;52354:39:0::1;::::0;::::1;26393:21:1::0;26450:1;26430:18;;;26423:29;-1:-1:-1;;;26468:18:1;;;26461:33;26511:18;;52354:39:0::1;26383:152:1::0;52354:39:0::1;52458:18;::::0;52452:24:::1;::::0;:2:::1;:24;:::i;:::-;52430:19;;:46;;;;:::i;:::-;52413:13;:63;;52404:80;;;::::0;-1:-1:-1;;;52404:80:0;;30116:2:1;52404:80:0::1;::::0;::::1;30098:21:1::0;30155:1;30135:18;;;30128:29;-1:-1:-1;;;30173:18:1;;;30166:32;30215:18;;52404:80:0::1;30088:151:1::0;52404:80:0::1;52495:25;52523:15;52539:7;;52523:24;;;;;;;:::i;:::-;;;;;;;;;;;;;52495:52;;52567:2;:15;;;52586:1;52567:20;52558:37;;;::::0;-1:-1:-1;;;52558:37:0;;35346:2:1;52558:37:0::1;::::0;::::1;35328:21:1::0;35385:1;35365:18;;;35358:29;-1:-1:-1;;;35403:18:1;;;35396:32;35445:18;;52558:37:0::1;35318:151:1::0;52558:37:0::1;52606:15;::::0;::::1;:31:::0;;;52648:25;;;52684:10:::1;::::0;::::1;:21:::0;;;52721:57:::1;::::0;::::1;::::0;::::1;::::0;52733:7;;;;52624:13;;52663:10;;52697:8;;52721:57:::1;:::i;:::-;;;;;;;;34223:1;52214:572:::0;;;;;:::o;43049:3780::-;43277:30;:15;43296:10;43277:30;:::i;:::-;43326:8;;43262:45;;-1:-1:-1;43326:8:0;;;;;43318:23;;;;-1:-1:-1;;;43318:23:0;;;;;;;:::i;:::-;43352:12;43394:10;43405;;43416:19;43377:59;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;43377:59:0;;;;;;;;;43367:70;;43377:59;43367:70;;;;;-1:-1:-1;43457:12:0;:32;43470:18;43367:70;43483:4;43470:12;:18::i;:::-;-1:-1:-1;;;;;43457:32:0;;;;;;;;;;;;-1:-1:-1;43457:32:0;;;;43448:49;;;;-1:-1:-1;;;43448:49:0;;;;;;;:::i;:::-;43540:15;43517:19;:38;;43508:55;;;;-1:-1:-1;;;43508:55:0;;27072:2:1;43508:55:0;;;27054:21:1;27111:1;27091:18;;;27084:29;-1:-1:-1;;;27129:18:1;;;27122:32;27171:18;;43508:55:0;27044:151:1;43508:55:0;43584:25;43610:10;;43584:37;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;43583:38;43574:56;;;;-1:-1:-1;;;43574:56:0;;24278:2:1;43574:56:0;;;24260:21:1;24317:1;24297:18;;;24290:29;-1:-1:-1;;;24335:18:1;;;24328:33;24378:18;;43574:56:0;24250:152:1;43574:56:0;43681:4;43641:25;43667:10;;43641:37;;;;;;;:::i;:::-;;;;;;;;;;;;;;:44;;;;;-1:-1:-1;;43641:44:0;;;;;;;;;43705:25;;;43696:42;;;;-1:-1:-1;;;43696:42:0;;31106:2:1;43696:42:0;;;31088:21:1;31145:1;31125:18;;;31118:29;-1:-1:-1;;;31163:18:1;;;31156:32;31205:18;;43696:42:0;31078:151:1;43696:42:0;43749:23;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43749:23:0;43803:10;;43783:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;43783:17:0;;;:30;43847:35;43871:10;43847:23;:35::i;:::-;43824:20;;;:58;;;43893:41;;;;-1:-1:-1;;;43893:41:0;;35676:2:1;43893:41:0;;;35658:21:1;35715:1;35695:18;;;35688:29;-1:-1:-1;;;35733:18:1;;;35726:32;35775:18;;43893:41:0;35648:151:1;43893:41:0;43966:1;43945:22;;;44033:10;44016:29;;:15;:29;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44115:1:0;44096:16;;;:20;;;44127:17;;;:21;44199:13;:11;:13::i;:::-;44178:17;;;44159:53;44160:16;;;44159:53;44226:9;:13;44223:1740;;44276:17;;44263:9;:30;;44255:45;;;;-1:-1:-1;;;44255:45:0;;29786:2:1;44255:45:0;;;29768:21:1;29825:1;29805:18;;;29798:29;-1:-1:-1;;;29843:18:1;;;29836:32;29885:18;;44255:45:0;29758:151:1;44255:45:0;44342:1;44323:7;:16;;;:20;44315:35;;;;-1:-1:-1;;;44315:35:0;;33903:2:1;44315:35:0;;;33885:21:1;33942:1;33922:18;;;33915:29;-1:-1:-1;;;33960:18:1;;;33953:32;34002:18;;44315:35:0;33875:151:1;44315:35:0;44365:19;44466:4;44439:23;;44433:3;:29;;;;:::i;:::-;44406:23;;44387:7;:16;;;:42;;;;:::i;:::-;:76;;;;:::i;:::-;:83;;;;:::i;:::-;44365:105;;44485:20;44587:4;44560:23;;44554:3;:29;;;;:::i;:::-;44527:23;;44508:7;:16;;;:42;;;;:::i;:::-;:76;;;;:::i;:::-;:83;;;;:::i;:::-;44485:106;;44632:7;:16;;;44615:14;:33;:66;;;;;44670:11;44652:14;:29;;44615:66;:100;;;;;44703:12;44685:14;:30;;44615:100;44606:118;;;;-1:-1:-1;;;44606:118:0;;25270:2:1;44606:118:0;;;25252:21:1;25309:1;25289:18;;;25282:29;-1:-1:-1;;;25327:18:1;;;25320:33;25370:18;;44606:118:0;25242:152:1;44606:118:0;44799:16;;;;44778:18;;44772:24;;:2;:24;:::i;:::-;44760:36;;:9;:36;:::i;:::-;:55;;;;:::i;:::-;44739:76;;-1:-1:-1;;44845:16:0;;;;;44830:12;;;:31;44899:9;44876:20;;;:32;44944:1;44923:18;;;:22;44223:1740;;;45004:1;44984:7;:17;;;:21;44976:36;;;;-1:-1:-1;;;44976:36:0;;33903:2:1;44976:36:0;;;33885:21:1;33942:1;33922:18;;;33915:29;-1:-1:-1;;;33960:18:1;;;33953:32;34002:18;;44976:36:0;33875:151:1;44976:36:0;45027:20;45130:4;45103:23;;45097:3;:29;;;;:::i;:::-;45070:23;;45050:7;:17;;;:43;;;;:::i;:::-;:77;;;;:::i;:::-;:84;;;;:::i;:::-;45027:107;;45149:21;45253:4;45226:23;;45220:3;:29;;;;:::i;:::-;45193:23;;45173:7;:17;;;:43;;;;:::i;:::-;:77;;;;:::i;:::-;:84;;;;:::i;:::-;45149:108;;45298:7;:17;;;45281:14;:34;:68;;;;;45337:12;45319:14;:30;;45281:68;:103;;;;;45371:13;45353:14;:31;;45281:103;45272:121;;;;-1:-1:-1;;;45272:121:0;;25270:2:1;45272:121:0;;;25252:21:1;25309:1;25289:18;;;25282:29;-1:-1:-1;;;25327:18:1;;;25320:33;25370:18;;45272:121:0;25242:152:1;45272:121:0;45428:9;;:46;;-1:-1:-1;;;45428:46:0;;45448:10;45428:46;;;14921:34:1;45468:4:0;14971:18:1;;;14964:43;45408:17:0;;-1:-1:-1;;;;;45428:9:0;;:19;;14856:18:1;;45428:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45408:66;;45511:18;;45498:9;:31;;:62;;;;;45546:14;45533:9;:27;;45498:62;45489:79;;;;-1:-1:-1;;;45489:79:0;;29786:2:1;45489:79:0;;;29768:21:1;29825:1;29805:18;;;29798:29;-1:-1:-1;;;29843:18:1;;;29836:32;29885:18;;45489:79:0;29758:151:1;45489:79:0;45648:17;;;;45627:18;;45621:24;;:2;:24;:::i;:::-;45604:41;;:14;:41;:::i;:::-;:61;;;;:::i;:::-;45583:82;;45695:17;;;;;45680:12;;;:32;45727:9;;:135;;-1:-1:-1;;;;;45727:9:0;45772:10;45809:4;45833:14;45727:26;:135::i;:::-;-1:-1:-1;;;45877:20:0;;;:37;;;45950:1;45929:18;;;:22;44223:1740;45973:18;45994:27;:25;:27::i;:::-;45973:48;;46089:10;46063:21;;46042:7;:18;;;:42;;;;:::i;:::-;46041:58;;46032:76;;;;-1:-1:-1;;;46032:76:0;;28062:2:1;46032:76:0;;;28044:21:1;28101:1;28081:18;;;28074:29;-1:-1:-1;;;28119:18:1;;;28112:33;28162:18;;46032:76:0;28034:152:1;46032:76:0;46150:20;;;;46128:18;;:42;;46119:60;;;;-1:-1:-1;;;46119:60:0;;33161:2:1;46119:60:0;;;33143:21:1;33200:1;33180:18;;;33173:29;-1:-1:-1;;;33218:18:1;;;33211:33;33261:18;;46119:60:0;33133:152:1;46119:60:0;46193:16;;46190:88;;46230:19;:36;;;;;;;-1:-1:-1;46230:36:0;;;;;;;;-1:-1:-1;;;;;;46230:36:0;46255:10;46230:36;;;46190:88;46304:18;;46288:34;;46333:20;;;:37;;;46381:16;;;:29;;;46421:18;;;:33;;;46304:18;46465:13;;;:17;;;46493:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46465:17;46493:22;;;;;-1:-1:-1;;46493:22:0;;;;;;;;;;;;;;;46574:18;;46550:21;;:42;;46574:18;46550:42;:::i;:::-;46526:21;:66;46632:16;;46608:213;;46620:10;;46632:18;;46649:1;;46632:18;:::i;:::-;46652:7;:18;;;46672:6;:20;;;46694:6;:12;;;46708:6;:20;;;46730:6;:16;;;46748:6;:18;;;46768:6;:18;;;46788:6;:13;;;46803:7;:17;;;46608:213;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;43049:3780;;;;;;;;;;;;;:::o;53299:194::-;34194:10;34181:24;;;;:12;:24;;;;;;;;34173:39;;;;-1:-1:-1;;;34173:39:0;;;;;;;:::i;:::-;53412:19:::1;::::0;53386:57:::1;::::0;;37004:25:1;;;37060:2;37045:18;;37038:34;;;53386:57:0::1;::::0;36977:18:1;53386:57:0::1;;;;;;;53454:19;:31:::0;53299:194::o;37565:457::-;37641:18;;-1:-1:-1;;;;;37641:18:0;37627:10;:32;37617:50;;;;-1:-1:-1;;;37617:50:0;;30446:2:1;37617:50:0;;;30428:21:1;30485:1;30465:18;;;30458:29;-1:-1:-1;;;30503:18:1;;;30496:32;30545:18;;37617:50:0;30418:151:1;37617:50:0;37730:6;37707:18;;37689:15;:36;;;;:::i;:::-;37688:49;37678:67;;;;-1:-1:-1;;;37678:67:0;;31436:2:1;37678:67:0;;;31418:21:1;31475:1;31455:18;;;31448:29;-1:-1:-1;;;31493:18:1;;;31486:32;31535:18;;37678:67:0;31408:151:1;37678:67:0;37756:14;37798:18;;37792:2;:24;;;;:::i;:::-;37773:16;;:43;;;;:::i;:::-;37848:15;37827:18;:36;37893:16;;37756:60;;-1:-1:-1;37893:25:0;;37756:60;;37893:25;:::i;:::-;37874:16;:44;37953:18;;37929:10;;:51;;-1:-1:-1;;;;;37929:10:0;;;;37953:18;37973:6;37929:23;:51::i;:::-;37996:18;;21086:25:1;;;37996:18:0;;21074:2:1;21059:18;37996::0;21041:76:1;31541:36:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31541:36:0;;-1:-1:-1;31541:36:0;:::o;56014:127::-;34194:10;34181:24;;;;:12;:24;;;;;;;;34173:39;;;;-1:-1:-1;;;34173:39:0;;;;;;;:::i;:::-;56079:8:::1;:16:::0;;;::::1;;;;-1:-1:-1::0;;56079:16:0;;::::1;;::::0;;56111:22:::1;::::0;::::1;::::0;::::1;::::0;56090:5;20913:14:1;20906:22;20888:41;;20876:2;20861:18;;20843:92;55887:115:0;55955:39;;;55972:10;15992:51:1;;16074:2;16059:18;;16052:34;;;55955:39:0;;15965:18:1;55955:39:0;15947:145:1;54412:968:0;54595:23;;54639;;54717:21;;54469:15;;;;;;54687:27;:25;:27::i;:::-;:51;;;;:::i;:::-;54673:65;;54770:18;;54752:15;:36;:68;;;-1:-1:-1;54792:23:0;;:28;54752:68;54749:624;;;-1:-1:-1;54855:1:0;;-1:-1:-1;54855:1:0;54749:624;;;54921:20;54962:18;;54944:15;:36;;;;:::i;:::-;54921:59;;54995:10;55023:23;;55008:12;:38;;;;:::i;:::-;54995:51;;55061:12;55091:23;;55076:12;:38;;;;:::i;:::-;55061:53;;55226:2;55206:17;;:22;;;;:::i;:::-;55188:40;-1:-1:-1;55246:8:0;;55243:67;;55274:20;55293:1;55274:20;;:::i;:::-;;;55243:67;55343:18;;55324:37;;54749:624;;;;54412:968;;;;;:::o;39456:650::-;34194:10;34181:24;;;;:12;:24;;;;;;;;34173:39;;;;-1:-1:-1;;;34173:39:0;;;;;;;:::i;:::-;39594:40;;::::1;39584:58;;;::::0;-1:-1:-1;;;39584:58:0;;29456:2:1;39584:58:0::1;::::0;::::1;29438:21:1::0;29495:1;29475:18;;;29468:29;-1:-1:-1;;;29513:18:1;;;29506:32;29555:18;;39584:58:0::1;29428:151:1::0;39584:58:0::1;39659:9;39653:446;39673:20:::0;;::::1;39653:446;;;39714:35;39752:15;:31;39769:9;;39779:1;39769:12;;;;;-1:-1:-1::0;;;39769:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;39752:31:0::1;-1:-1:-1::0;;;;;39752:31:0::1;;;;;;;;;;;;39714:69;;39826:13;;39840:1;39826:16;;;;;-1:-1:-1::0;;;39826:16:0::1;;;;;;;;;;;;;;;39807:9;:16;;;;:35;39798:52;;;;-1:-1:-1::0;;;39798:52:0::1;;;;;;;:::i;:::-;39865:30;39898:9;39909:13;;39923:1;39909:16;;;;;-1:-1:-1::0;;;39909:16:0::1;;;;;;;;;;;;;;;39898:29;;;;;;-1:-1:-1::0;;;39898:29:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;39951:13;::::0;::::1;::::0;39898:29;;-1:-1:-1;39951:13:0::1;;:18:::0;39942:35:::1;;;;-1:-1:-1::0;;;39942:35:0::1;;;;;;;:::i;:::-;39992:13;::::0;::::1;:17:::0;;-1:-1:-1;;39992:17:0::1;40008:1;39992:17;::::0;;40029:58:::1;40041:9:::0;;40051:1;40041:12;;::::1;;;-1:-1:-1::0;;;40041:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40055:13;;40069:1;40055:16;;;;;-1:-1:-1::0;;;40055:16:0::1;;;;;;;;;40073:13;::::0;::::1;::::0;40029:58:::1;::::0;::::1;::::0;;40055:16:::1;::::0;;::::1;::::0;;;::::1;;::::0;-1:-1:-1;40073:13:0::1;;::::0;40029:58:::1;:::i;:::-;;;;;;;;39653:446;;39695:3;;;;;:::i;:::-;;;;39653:446;;;;39456:650:::0;;;;:::o;51122:455::-;34194:10;34181:24;;;;:12;:24;;;;;;;;34173:39;;;;-1:-1:-1;;;34173:39:0;;;;;;;:::i;:::-;51228:25:::1;51256:15;51272:7;;51256:24;;;;;;;:::i;:::-;;;;;;;;;;;;;51228:52;;51300:2;:15;;;51319:1;51300:20;51291:37;;;::::0;-1:-1:-1;;;51291:37:0;;24609:2:1;51291:37:0::1;::::0;::::1;24591:21:1::0;24648:1;24628:18;;;24621:29;-1:-1:-1;;;24666:18:1;;;24659:32;24708:18;;51291:37:0::1;24581:151:1::0;51291:37:0::1;51339:12;51372:2;:16;;;51354:2;:15;;;:34;;;;:::i;:::-;51339:49;;51419:4;51408:7;:15;;51399:33;;;::::0;-1:-1:-1;;;51399:33:0;;30116:2:1;51399:33:0::1;::::0;::::1;30098:21:1::0;30155:1;30135:18;;;30128:29;-1:-1:-1;;;30173:18:1;;;30166:32;30215:18;;51399:33:0::1;30088:151:1::0;51399:33:0::1;51453:14;::::0;51443:39:::1;::::0;-1:-1:-1;;;51443:39:0;;::::1;::::0;::::1;21086:25:1::0;;;-1:-1:-1;;;;;51453:14:0;;::::1;::::0;51443:30:::1;::::0;21059:18:1;;51443:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;;;51493:15:0::1;::::0;::::1;:25:::0;;;51534:35:::1;::::0;::::1;::::0;::::1;::::0;51552:7;;;;51511;;51534:35:::1;:::i;:::-;;;;;;;;34223:1;;51122:455:::0;;;:::o;38778:433::-;34194:10;34181:24;;;;:12;:24;;;;;;;;34173:39;;;;-1:-1:-1;;;34173:39:0;;;;;;;:::i;:::-;38935:27:::1;::::0;38963:22:::1;::::0;38986::::1;::::0;38912:139:::1;::::0;;39137:25:1;;;39193:2;39178:18;;39171:34;;;;39221:18;;;39214:34;39279:2;39264:18;;39257:34;;;39322:3;39307:19;;39300:35;;;39366:3;39351:19;;39344:35;;;38912:139:0;::::1;::::0;;;;39124:3:1;38912:139:0;;::::1;39062:27;:45:::0;;;;39118:22:::1;:37:::0;39166:22:::1;:37:::0;38778:433::o;36999:554::-;34102:5;;-1:-1:-1;;;;;34102:5:0;34088:10;:19;34080:28;;;;;;6857:1:::1;7453:7;;:19;;7445:63;;;;-1:-1:-1::0;;;7445:63:0::1;;;;;;;:::i;:::-;6857:1;7586:7;:18:::0;;;37123:6:::2;::::0;37110:10:::2;::::0;:19:::2;::::0;37123:6;37110:19:::2;:::i;:::-;37090:39;;37140:18;37175:7;;37161:11;;:21;;;;:::i;:::-;37218:10;::::0;37230:11:::2;::::0;37243:6:::2;::::0;37251:7:::2;::::0;37198:61:::2;::::0;;-1:-1:-1;;;;;16374:32:1;;16356:51;;16438:2;16423:18;;16416:34;;;;16466:18;;16459:34;;;;16524:2;16509:18;;16502:34;16567:3;16552:19;;16545:35;37140:42:0;;-1:-1:-1;37198:61:0::2;::::0;16343:3:1;16328:19;37198:61:0::2;;;;;;;37283:1;37270:10;:14:::0;;;37295:11:::2;:15:::0;;;37321:6:::2;:10:::0;;;37342:7:::2;:11:::0;37367:13;;37364:82:::2;;37396:38;::::0;-1:-1:-1;;;;;37396:27:0;::::2;::::0;:38;::::2;;;::::0;37424:9;;37396:38:::2;::::0;;;37424:9;37396:27;:38;::::2;;;;;;;;;;;;;::::0;::::2;;;;;;37364:82;37459:14:::0;;37456:90:::2;;37489:9;::::0;:45:::2;::::0;-1:-1:-1;;;;;37489:9:0::2;37512::::0;37523:10;37489:22:::2;:45::i;:::-;-1:-1:-1::0;;6813:1:0::1;7765:7;:22:::0;-1:-1:-1;36999:554:0:o;53505:895::-;34194:10;34181:24;;;;:12;:24;;;;;;;;34173:39;;;;-1:-1:-1;;;34173:39:0;;;;;;;:::i;:::-;53618:1:::1;53608:7;:11;:26;;;;;53633:1;53623:7;:11;53608:26;53600:35;;;::::0;::::1;;53684:23;::::0;53709::::1;::::0;53651:100:::1;::::0;;38217:25:1;;;38273:2;38258:18;;38251:34;;;;38301:18;;38294:34;;;38359:2;38344:18;;38337:34;;;53651:100:0::1;::::0;38204:3:1;38189:19;53651:100:0::1;;;;;;;53783:18;;53765:15;:36;:67;;;;;53831:1;53805:23;;:27;53765:67;53762:543;;;53848:20;53889:18;;53871:15;:36;;;;:::i;:::-;53848:59;;53922:10;53950:23;;53935:12;:38;;;;:::i;:::-;53922:51;;53988:12;54018:23;;54003:12;:38;;;;:::i;:::-;53988:53:::0;-1:-1:-1;54059:8:0;;54056:58:::1;;54092:6;:2:::0;54097:1:::1;54092:6;:::i;:::-;54087:11;;54056:58;54168:2;54148:17;;:22;;;;:::i;:::-;54128:17;:42:::0;54215:27:::1;:25;:27::i;:::-;54185;:57:::0;-1:-1:-1;;54278:15:0::1;54257:18;:36:::0;-1:-1:-1;53762:543:0::1;54315:23;:33:::0;;;;54359:23:::1;:33:::0;53505:895::o;31584:60::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31584:60:0;;-1:-1:-1;31584:60:0;;;;;;;;;;;;;;:::o;49775:195::-;49877:7;49931:9;49941:10;;49953:7;49914:47;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49904:58;;;;;;49897:65;;49775:195;;;;;;:::o;46841:142::-;-1:-1:-1;;;;;46953:22:0;;;;;;:15;:22;;;;;;;;46946:29;;;;;;;;;;;;;;;;;46910:24;;46946:29;;46953:22;;46946:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34509:1204;34682:7;;;;34681:8;34673:23;;;;-1:-1:-1;;;34673:23:0;;27732:2:1;34673:23:0;;;27714:21:1;27771:1;27751:18;;;27744:29;-1:-1:-1;;;27789:18:1;;;27782:32;27831:18;;34673:23:0;27704:151:1;34673:23:0;34717:4;34707:14;;-1:-1:-1;;34732:15:0;;;;;34758:5;:18;;34766:10;-1:-1:-1;;;;;;34758:18:0;;;;;;;;-1:-1:-1;34787:24:0;;;:12;:24;;;;;;;;;:31;;-1:-1:-1;;34787:31:0;;;;;;;34829:9;:22;;;34862:18;:31;;;34904:14;:32;;;;-1:-1:-1;;;;;34904:32:0;;;;;;;;;34947:13;:30;;;;;;;;;;;;;34988:17;:38;;;;;;;;;;;;;-1:-1:-1;35037:40:0;;;;;;;;;;;;;;35088:10;:35;;;;;;;;35134:9;:33;;;;;;;;;-1:-1:-1;35178:55:0;;;;;;;;;;;35265:41;;-1:-1:-1;;;35265:41:0;;;;34904:32;;35265:39;;:41;;;;;;;;;;;34904:32;35265:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35244:62;;:18;:62;35343:1;35317:23;:27;;;35355:23;:27;;;35419:2;35393:23;:28;35458:2;35432:28;;35493:9;35471:19;:31;;;35532:4;-1:-1:-1;35513:23:0;35577:6;35547:27;:36;35594:22;:27;35657:9;35632:22;:34;35682:23;;35694:10;14647:51:1;;35682:23:0;;14635:2:1;14620:18;35682:23:0;14602:102:1;35890:154:0;34102:5;;-1:-1:-1;;;;;34102:5:0;34088:10;:19;34080:28;;;;;;-1:-1:-1;;;;;35961:26:0;::::1;35990:5;35961:26:::0;;;:12:::1;:26;::::0;;;;;;;;:34;;-1:-1:-1;;35961:34:0::1;::::0;;36011:25;;14647:51:1;;;36011:25:0::1;::::0;14620:18:1;36011:25:0::1;14602:102:1::0;25826:211:0;25970:58;;-1:-1:-1;;;;;16010:32:1;;25970:58:0;;;15992:51:1;16059:18;;;16052:34;;;25943:86:0;;25963:5;;-1:-1:-1;;;25993:23:0;15965:18:1;;25970:58:0;;;;-1:-1:-1;;25970:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;25970:58:0;-1:-1:-1;;;;;;25970:58:0;;;;;;;;;;25943:19;:86::i;:::-;25826:211;;;:::o;47492:483::-;6857:1;7453:7;;:19;;7445:63;;;;-1:-1:-1;;;7445:63:0;;;;;;;:::i;:::-;6857:1;7586:7;:18;;;-1:-1:-1;;;;;47629:24:0;::::1;::::0;;:15:::1;:24;::::0;;;;47673:16;;:28;-1:-1:-1;47664:45:0::1;;;;-1:-1:-1::0;;;47664:45:0::1;;;;;;;:::i;:::-;47720:30;47753:9;47764;47753:22;;;;;;-1:-1:-1::0;;;47753:22:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;47795:13;::::0;::::1;::::0;47753:22;;-1:-1:-1;47795:13:0::1;;47812:1;47795:18;47786:35;;;::::0;-1:-1:-1;;;47786:35:0;;29126:2:1;47786:35:0::1;::::0;::::1;29108:21:1::0;29165:1;29145:18;;;29138:29;-1:-1:-1;;;29183:18:1;;;29176:32;29225:18;;47786:35:0::1;29098:151:1::0;47786:35:0::1;47863:13:::0;;47832:10:::1;::::0;:45:::1;::::0;-1:-1:-1;;;;;47832:10:0;;::::1;::::0;47856:5;;47832:23:::1;:45::i;:::-;47888:13;::::0;::::1;:17:::0;;-1:-1:-1;;47888:17:0::1;47904:1;47888:17:::0;;::::1;::::0;;;47921:46:::1;::::0;::::1;::::0;::::1;::::0;47935:5;;47942:9;;47921:46:::1;:::i;:::-;;;;;;;;-1:-1:-1::0;;6813:1:0;7765:7;:22;-1:-1:-1;;47492:483:0:o;26562:616::-;26926:10;;;26925:62;;-1:-1:-1;26942:39:0;;-1:-1:-1;;;26942:39:0;;26966:4;26942:39;;;14921:34:1;-1:-1:-1;;;;;14991:15:1;;;14971:18;;;14964:43;26942:15:0;;;;;14856:18:1;;26942:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;26925:62;26903:166;;;;-1:-1:-1;;;26903:166:0;;34923:2:1;26903:166:0;;;34905:21:1;34962:2;34942:18;;;34935:30;35001:34;34981:18;;;34974:62;-1:-1:-1;;;35052:18:1;;;35045:52;35114:19;;26903:166:0;34895:244:1;26903:166:0;27107:62;;-1:-1:-1;;;;;16010:32:1;;27107:62:0;;;15992:51:1;16059:18;;;16052:34;;;27080:90:0;;27100:5;;-1:-1:-1;;;27130:22:0;15965:18:1;;27107:62:0;15947:145:1;9153:1270:0;9231:7;9451:9;:16;9471:2;9451:22;9447:969;;;9747:4;9732:20;;9726:27;9797:4;9782:20;;9776:27;9855:4;9840:20;;9834:27;9490:9;9826:36;9898:22;9906:4;9826:36;9726:27;9776;9898:7;:22::i;:::-;9891:29;;;;;;;9447:969;9942:9;:16;9962:2;9942:22;9938:478;;;10217:4;10202:20;;10196:27;10268:4;10253:20;;10247:27;10310:20;10318:4;10196:27;10247;10310:7;:20::i;:::-;10303:27;;;;;;9938:478;10363:41;;-1:-1:-1;;;10363:41:0;;23918:2:1;10363:41:0;;;23900:21:1;23957:2;23937:18;;;23930:30;23996:33;23976:18;;;23969:61;24047:18;;10363:41:0;23890:181:1;9938:478:0;9153:1270;;;;:::o;40582:674::-;40696:10;;:30;;-1:-1:-1;;;40696:30:0;;-1:-1:-1;;;;;14665:32:1;;;40696:30:0;;;14647:51:1;40654:7:0;;;;40696:10;;;:20;;14620:18:1;;40696:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40674:52;;40790:18;;40784:2;:24;;;;:::i;:::-;40754:27;;:54;;;;:::i;:::-;40740:11;:68;40737:107;;;-1:-1:-1;40831:1:0;;40582:674;-1:-1:-1;;40582:674:0:o;40737:107::-;40854:17;40888:22;;40874:11;:36;;;;:::i;:::-;40854:56;;40921:15;40970:18;;40964:2;:24;;;;:::i;:::-;40939:22;;:49;;;;:::i;:::-;40921:67;;41014:7;41002:9;:19;40999:69;;;41049:7;41037:19;;40999:69;41078:18;41099:35;41125:8;41099:25;:35::i;:::-;41078:56;;41163:9;41149:10;:23;41145:64;;-1:-1:-1;41196:1:0;;40582:674;-1:-1:-1;;;;;40582:674:0:o;41145:64::-;41226:22;41238:10;41226:9;:22;:::i;:::-;41219:29;40582:674;-1:-1:-1;;;;;;40582:674:0:o;26045:248::-;26216:68;;-1:-1:-1;;;;;15276:15:1;;;26216:68:0;;;15258:34:1;15328:15;;15308:18;;;15301:43;15360:18;;;15353:34;;;26189:96:0;;26209:5;;-1:-1:-1;;;26239:27:0;15193:18:1;;26216:68:0;15175:218:1;26189:96:0;26045:248;;;;:::o;28399:716::-;28823:23;28849:69;28877:4;28849:69;;;;;;;;;;;;;;;;;28857:5;-1:-1:-1;;;;;28849:27:0;;;:69;;;;;:::i;:::-;28933:17;;28823:95;;-1:-1:-1;28933:21:0;28929:179;;29030:10;29019:30;;;;;;;;;;;;:::i;:::-;29011:85;;;;-1:-1:-1;;;29011:85:0;;33492:2:1;29011:85:0;;;33474:21:1;33531:2;33511:18;;;33504:30;33570:34;33550:18;;;33543:62;-1:-1:-1;;;33621:18:1;;;33614:40;33671:19;;29011:85:0;33464:232:1;11185:1512:0;11313:7;12252:66;12238:80;;;12216:164;;;;-1:-1:-1;;;12216:164:0;;25601:2:1;12216:164:0;;;25583:21:1;25640:2;25620:18;;;25613:30;25679:34;25659:18;;;25652:62;-1:-1:-1;;;25730:18:1;;;25723:32;25772:19;;12216:164:0;25573:224:1;12216:164:0;12399:1;:7;;12404:2;12399:7;:18;;;;12410:1;:7;;12415:2;12410:7;12399:18;12391:65;;;;-1:-1:-1;;;12391:65:0;;28393:2:1;12391:65:0;;;28375:21:1;28432:2;28412:18;;;28405:30;28471:34;28451:18;;;28444:62;-1:-1:-1;;;28522:18:1;;;28515:32;28564:19;;12391:65:0;28365:224:1;12391:65:0;12571:24;;;12554:14;12571:24;;;;;;;;;21349:25:1;;;21422:4;21410:17;;21390:18;;;21383:45;;;;21444:18;;;21437:34;;;21487:18;;;21480:34;;;12571:24:0;;21321:19:1;;12571:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12571:24:0;;-1:-1:-1;;12571:24:0;;;-1:-1:-1;;;;;;;12614:20:0;;12606:57;;;;-1:-1:-1;;;12606:57:0;;23565:2:1;12606:57:0;;;23547:21:1;23604:2;23584:18;;;23577:30;23643:26;23623:18;;;23616:54;23687:18;;12606:57:0;23537:174:1;12606:57:0;12683:6;11185:1512;-1:-1:-1;;;;;11185:1512:0:o;10683:371::-;10794:7;-1:-1:-1;;;;;10881:75:0;;10983:3;10979:12;;;10993:2;10975:21;11024:22;11032:4;10975:21;11041:1;10881:75;11024:7;:22::i;:::-;11017:29;;;;10683:371;;;;;;:::o;40118:452::-;-1:-1:-1;;;;;40280:27:0;;40193:7;40280:27;;;:15;:27;;;;;40193:7;;;40318:221;40340:16;;40336:20;;40318:221;;;40380:9;40390:1;40380:12;;;;;;-1:-1:-1;;;40380:12:0;;;;;;;;;;;;;;;;;:19;:12;;;;;:19;;;;:24;;;;:52;;;40408:9;40418:1;40408:12;;;;;;-1:-1:-1;;;40408:12:0;;;;;;;;;;;;;;;;;:19;:12;;;;;:19;;;;;:24;;40380:52;40377:99;;;40452:8;;40377:99;40508:9;40518:1;40508:12;;;;;;-1:-1:-1;;;40508:12:0;;;;;;;;;;;;;;;;;;;:19;;;40499:6;:28;;;;:::i;:::-;40490:37;;40318:221;40358:3;;;;:::i;:::-;;;;40318:221;;;-1:-1:-1;40556:6:0;;40118:452;-1:-1:-1;;;40118:452:0:o;20885:229::-;21022:12;21054:52;21076:6;21084:4;21090:1;21093:12;21054:21;:52::i;:::-;21047:59;20885:229;-1:-1:-1;;;;20885:229:0:o;22005:511::-;22175:12;22233:5;22208:21;:30;;22200:81;;;;-1:-1:-1;;;22200:81:0;;26004:2:1;22200:81:0;;;25986:21:1;26043:2;26023:18;;;26016:30;26082:34;26062:18;;;26055:62;-1:-1:-1;;;26133:18:1;;;26126:36;26179:19;;22200:81:0;25976:228:1;22200:81:0;18402:20;;22292:60;;;;-1:-1:-1;;;22292:60:0;;31766:2:1;22292:60:0;;;31748:21:1;31805:2;31785:18;;;31778:30;31844:31;31824:18;;;31817:59;31893:18;;22292:60:0;31738:179:1;22292:60:0;22366:12;22380:23;22407:6;-1:-1:-1;;;;;22407:11:0;22426:5;22433:4;22407:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22365:73;;;;22456:52;22474:7;22483:10;22495:12;22456:17;:52::i;:::-;22449:59;22005:511;-1:-1:-1;;;;;;;22005:511:0:o;24474:712::-;24624:12;24653:7;24649:530;;;-1:-1:-1;24684:10:0;24677:17;;24649:530;24798:17;;:21;24794:374;;24996:10;24990:17;25057:15;25044:10;25040:2;25036:19;25029:44;24944:148;25139:12;25132:20;;-1:-1:-1;;;25132:20:0;;;;;;;;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:406:1;78:5;-1:-1:-1;;;;;104:6:1;101:30;98:2;;;134:18;;:::i;:::-;172:57;217:2;196:15;;-1:-1:-1;;192:29:1;223:4;188:40;172:57;:::i;:::-;163:66;;252:6;245:5;238:21;292:3;283:6;278:3;274:16;271:25;268:2;;;309:1;306;299:12;268:2;358:6;353:3;346:4;339:5;335:16;322:43;412:1;405:4;396:6;389:5;385:18;381:29;374:40;88:332;;;;;:::o;425:395::-;488:8;498:6;552:3;545:4;537:6;533:17;529:27;519:2;;577:8;567;560:26;519:2;-1:-1:-1;607:20:1;;-1:-1:-1;;;;;639:30:1;;636:2;;;689:8;679;672:26;636:2;733:4;725:6;721:17;709:29;;793:3;786:4;776:6;773:1;769:14;761:6;757:27;753:38;750:47;747:2;;;810:1;807;800:12;747:2;509:311;;;;;:::o;825:228::-;867:5;920:3;913:4;905:6;901:17;897:27;887:2;;942:5;935;928:20;887:2;968:79;1043:3;1034:6;1021:20;1014:4;1006:6;1002:17;968:79;:::i;1058:376::-;1110:8;1120:6;1174:3;1167:4;1159:6;1155:17;1151:27;1141:2;;1199:8;1189;1182:26;1141:2;-1:-1:-1;1229:20:1;;-1:-1:-1;;;;;1261:30:1;;1258:2;;;1311:8;1301;1294:26;1258:2;1355:4;1347:6;1343:17;1331:29;;1407:3;1400:4;1391:6;1383;1379:19;1375:30;1372:39;1369:2;;;1424:1;1421;1414:12;1439:257;1498:6;1551:2;1539:9;1530:7;1526:23;1522:32;1519:2;;;1572:6;1564;1557:22;1519:2;1616:9;1603:23;1635:31;1660:5;1635:31;:::i;1701:261::-;1771:6;1824:2;1812:9;1803:7;1799:23;1795:32;1792:2;;;1845:6;1837;1830:22;1792:2;1882:9;1876:16;1901:31;1926:5;1901:31;:::i;1967:750::-;2062:6;2070;2078;2086;2094;2147:3;2135:9;2126:7;2122:23;2118:33;2115:2;;;2169:6;2161;2154:22;2115:2;2213:9;2200:23;2232:31;2257:5;2232:31;:::i;:::-;2282:5;-1:-1:-1;2339:2:1;2324:18;;2311:32;2352:33;2311:32;2352:33;:::i;:::-;2404:7;-1:-1:-1;2463:2:1;2448:18;;2435:32;2476:33;2435:32;2476:33;:::i;:::-;2528:7;-1:-1:-1;2587:2:1;2572:18;;2559:32;2600:33;2559:32;2600:33;:::i;:::-;2105:612;;;;-1:-1:-1;2105:612:1;;2706:3;2691:19;2678:33;;2105:612;-1:-1:-1;;2105:612:1:o;2722:634::-;2811:6;2819;2827;2835;2888:2;2876:9;2867:7;2863:23;2859:32;2856:2;;;2909:6;2901;2894:22;2856:2;2953:9;2940:23;2972:31;2997:5;2972:31;:::i;:::-;3022:5;-1:-1:-1;3078:2:1;3063:18;;3050:32;-1:-1:-1;;;;;3094:30:1;;3091:2;;;3142:6;3134;3127:22;3091:2;3186:59;3237:7;3228:6;3217:9;3213:22;3186:59;:::i;:::-;2846:510;;3264:8;;-1:-1:-1;3160:85:1;;3346:2;3331:18;3318:32;;2846:510;-1:-1:-1;;;;2846:510:1:o;3361:325::-;3429:6;3437;3490:2;3478:9;3469:7;3465:23;3461:32;3458:2;;;3511:6;3503;3496:22;3458:2;3555:9;3542:23;3574:31;3599:5;3574:31;:::i;:::-;3624:5;3676:2;3661:18;;;;3648:32;;-1:-1:-1;;;3448:238:1:o;3691:803::-;3813:6;3821;3829;3837;3890:2;3878:9;3869:7;3865:23;3861:32;3858:2;;;3911:6;3903;3896:22;3858:2;3956:9;3943:23;-1:-1:-1;;;;;4026:2:1;4018:6;4015:14;4012:2;;;4047:6;4039;4032:22;4012:2;4091:70;4153:7;4144:6;4133:9;4129:22;4091:70;:::i;:::-;4180:8;;-1:-1:-1;4065:96:1;-1:-1:-1;4268:2:1;4253:18;;4240:32;;-1:-1:-1;4284:16:1;;;4281:2;;;4318:6;4310;4303:22;4281:2;;4362:72;4426:7;4415:8;4404:9;4400:24;4362:72;:::i;:::-;3848:646;;;;-1:-1:-1;4453:8:1;-1:-1:-1;;;;3848:646:1:o;4499:940::-;4639:6;4647;4655;4663;4671;4679;4732:3;4720:9;4711:7;4707:23;4703:33;4700:2;;;4754:6;4746;4739:22;4700:2;4799:9;4786:23;-1:-1:-1;;;;;4869:2:1;4861:6;4858:14;4855:2;;;4890:6;4882;4875:22;4855:2;4934:70;4996:7;4987:6;4976:9;4972:22;4934:70;:::i;:::-;5023:8;;-1:-1:-1;4908:96:1;-1:-1:-1;5111:2:1;5096:18;;5083:32;;-1:-1:-1;5127:16:1;;;5124:2;;;5161:6;5153;5146:22;5124:2;;5205:72;5269:7;5258:8;5247:9;5243:24;5205:72;:::i;:::-;4690:749;;;;-1:-1:-1;5296:8:1;5378:2;5363:18;;5350:32;;5429:2;5414:18;;;5401:32;;-1:-1:-1;4690:749:1;-1:-1:-1;;;;4690:749:1:o;5444:992::-;5539:6;5570:2;5613;5601:9;5592:7;5588:23;5584:32;5581:2;;;5634:6;5626;5619:22;5581:2;5672:9;5666:16;-1:-1:-1;;;;;5742:2:1;5734:6;5731:14;5728:2;;;5763:6;5755;5748:22;5728:2;5806:6;5795:9;5791:22;5781:32;;5851:7;5844:4;5840:2;5836:13;5832:27;5822:2;;5878:6;5870;5863:22;5822:2;5912;5906:9;5934:2;5930;5927:10;5924:2;;;5940:18;;:::i;:::-;5986:2;5983:1;5979:10;5969:20;;6009:28;6033:2;6029;6025:11;6009:28;:::i;:::-;6071:15;;;6102:12;;;;6134:11;;;6164;;;6160:20;;6157:33;-1:-1:-1;6154:2:1;;;6208:6;6200;6193:22;6154:2;6235:6;6226:15;;6250:156;6264:2;6261:1;6258:9;6250:156;;;6321:10;;6309:23;;6282:1;6275:9;;;;;6352:12;;;;6384;;6250:156;;;-1:-1:-1;6425:5:1;5550:886;-1:-1:-1;;;;;;;;5550:886:1:o;6441:251::-;6497:6;6550:2;6538:9;6529:7;6525:23;6521:32;6518:2;;;6571:6;6563;6556:22;6518:2;6615:9;6602:23;6634:28;6656:5;6634:28;:::i;6697:255::-;6764:6;6817:2;6805:9;6796:7;6792:23;6788:32;6785:2;;;6838:6;6830;6823:22;6785:2;6875:9;6869:16;6894:28;6916:5;6894:28;:::i;6957:431::-;7028:6;7036;7089:2;7077:9;7068:7;7064:23;7060:32;7057:2;;;7110:6;7102;7095:22;7057:2;7155:9;7142:23;-1:-1:-1;;;;;7180:6:1;7177:30;7174:2;;;7225:6;7217;7210:22;7174:2;7269:59;7320:7;7311:6;7300:9;7296:22;7269:59;:::i;:::-;7347:8;;7243:85;;-1:-1:-1;7047:341:1;-1:-1:-1;;;;7047:341:1:o;7393:499::-;7473:6;7481;7489;7542:2;7530:9;7521:7;7517:23;7513:32;7510:2;;;7563:6;7555;7548:22;7510:2;7608:9;7595:23;-1:-1:-1;;;;;7633:6:1;7630:30;7627:2;;;7678:6;7670;7663:22;7627:2;7722:59;7773:7;7764:6;7753:9;7749:22;7722:59;:::i;:::-;7800:8;;7696:85;;-1:-1:-1;7882:2:1;7867:18;;;;7854:32;;7500:392;-1:-1:-1;;;;7500:392:1:o;7897:728::-;7995:6;8003;8011;8019;8072:2;8060:9;8051:7;8047:23;8043:32;8040:2;;;8093:6;8085;8078:22;8040:2;8138:9;8125:23;-1:-1:-1;;;;;8208:2:1;8200:6;8197:14;8194:2;;;8229:6;8221;8214:22;8194:2;8273:59;8324:7;8315:6;8304:9;8300:22;8273:59;:::i;:::-;8351:8;;-1:-1:-1;8247:85:1;-1:-1:-1;8433:2:1;8418:18;;8405:32;;-1:-1:-1;8490:2:1;8475:18;;8462:32;;-1:-1:-1;8506:16:1;;;8503:2;;;8540:6;8532;8525:22;8503:2;;8568:51;8611:7;8600:8;8589:9;8585:24;8568:51;:::i;:::-;8558:61;;;8030:595;;;;;;;:::o;8630:636::-;8728:6;8736;8744;8752;8760;8813:3;8801:9;8792:7;8788:23;8784:33;8781:2;;;8835:6;8827;8820:22;8781:2;8880:9;8867:23;-1:-1:-1;;;;;8905:6:1;8902:30;8899:2;;;8950:6;8942;8935:22;8899:2;8994:59;9045:7;9036:6;9025:9;9021:22;8994:59;:::i;:::-;9072:8;;8968:85;;-1:-1:-1;9154:2:1;9139:18;;9126:32;;9205:2;9190:18;;9177:32;;-1:-1:-1;9256:2:1;9241:18;9228:32;;-1:-1:-1;8771:495:1;-1:-1:-1;;;;8771:495:1:o;9271:480::-;9340:6;9393:2;9381:9;9372:7;9368:23;9364:32;9361:2;;;9414:6;9406;9399:22;9361:2;9459:9;9446:23;-1:-1:-1;;;;;9484:6:1;9481:30;9478:2;;;9529:6;9521;9514:22;9478:2;9557:22;;9610:4;9602:13;;9598:27;-1:-1:-1;9588:2:1;;9644:6;9636;9629:22;9588:2;9672:73;9737:7;9732:2;9719:16;9714:2;9710;9706:11;9672:73;:::i;9756:190::-;9815:6;9868:2;9856:9;9847:7;9843:23;9839:32;9836:2;;;9889:6;9881;9874:22;9836:2;-1:-1:-1;9917:23:1;;9826:120;-1:-1:-1;9826:120:1:o;9951:194::-;10021:6;10074:2;10062:9;10053:7;10049:23;10045:32;10042:2;;;10095:6;10087;10080:22;10042:2;-1:-1:-1;10123:16:1;;10032:113;-1:-1:-1;10032:113:1:o;10150:258::-;10218:6;10226;10279:2;10267:9;10258:7;10254:23;10250:32;10247:2;;;10300:6;10292;10285:22;10247:2;-1:-1:-1;;10328:23:1;;;10398:2;10383:18;;;10370:32;;-1:-1:-1;10237:171:1:o;10413:326::-;10490:6;10498;10506;10559:2;10547:9;10538:7;10534:23;10530:32;10527:2;;;10580:6;10572;10565:22;10527:2;-1:-1:-1;;10608:23:1;;;10678:2;10663:18;;10650:32;;-1:-1:-1;10729:2:1;10714:18;;;10701:32;;10517:222;-1:-1:-1;10517:222:1:o;10744:1004::-;10878:6;10886;10894;10902;10910;10918;10926;10934;10987:3;10975:9;10966:7;10962:23;10958:33;10955:2;;;11009:6;11001;10994:22;10955:2;11050:9;11037:23;11027:33;;11107:2;11096:9;11092:18;11079:32;11069:42;;11158:2;11147:9;11143:18;11130:32;11120:42;;11213:2;11202:9;11198:18;11185:32;-1:-1:-1;;;;;11277:2:1;11269:6;11266:14;11263:2;;;11298:6;11290;11283:22;11263:2;11342:59;11393:7;11384:6;11373:9;11369:22;11342:59;:::i;:::-;11420:8;;-1:-1:-1;11316:85:1;-1:-1:-1;11502:3:1;11487:19;;11474:33;;-1:-1:-1;11560:3:1;11545:19;;11532:33;;-1:-1:-1;11577:16:1;;;11574:2;;;11611:6;11603;11596:22;11574:2;;11639:51;11682:7;11671:8;11660:9;11656:24;11639:51;:::i;:::-;11629:61;;;11737:3;11726:9;11722:19;11709:33;11699:43;;10945:803;;;;;;;;;;;:::o;11753:395::-;11839:6;11847;11855;11863;11916:3;11904:9;11895:7;11891:23;11887:33;11884:2;;;11938:6;11930;11923:22;11884:2;-1:-1:-1;;11966:23:1;;;12036:2;12021:18;;12008:32;;-1:-1:-1;12087:2:1;12072:18;;12059:32;;12138:2;12123:18;12110:32;;-1:-1:-1;11874:274:1;-1:-1:-1;11874:274:1:o;12153:293::-;12221:6;12274:2;12262:9;12253:7;12249:23;12245:32;12242:2;;;12295:6;12287;12280:22;12242:2;12332:9;12326:16;12382:4;12375:5;12371:16;12364:5;12361:27;12351:2;;12407:6;12399;12392:22;12451:463;12504:3;12542:5;12536:12;12569:6;12564:3;12557:19;12595:4;12624:2;12619:3;12615:12;12608:19;;12661:2;12654:5;12650:14;12682:3;12694:195;12708:6;12705:1;12702:13;12694:195;;;12773:13;;-1:-1:-1;;;;;12769:39:1;12757:52;;12829:12;;;;12864:15;;;;12805:1;12723:9;12694:195;;;-1:-1:-1;12905:3:1;;12512:402;-1:-1:-1;;;;;12512:402:1:o;12919:269::-;13008:6;13003:3;12996:19;13060:6;13053:5;13046:4;13041:3;13037:14;13024:43;-1:-1:-1;12978:3:1;13087:16;;;13105:4;13083:27;;;13076:40;;;;13170:2;13149:15;;;-1:-1:-1;;13145:29:1;13136:39;;;13132:50;;12986:202::o;13193:258::-;13235:3;13273:5;13267:12;13300:6;13295:3;13288:19;13316:63;13372:6;13365:4;13360:3;13356:14;13349:4;13342:5;13338:16;13316:63;:::i;:::-;13433:2;13412:15;-1:-1:-1;;13408:29:1;13399:39;;;;13440:4;13395:50;;13243:208;-1:-1:-1;;13243:208:1:o;13456:481::-;13708:26;13704:31;13695:6;13691:2;13687:15;13683:53;13678:3;13671:66;13781:6;13773;13768:2;13763:3;13759:12;13746:42;13850:2;13807:16;;13842:11;;;13886:18;13928:2;13920:11;;13661:276;-1:-1:-1;;13661:276:1:o;13942:274::-;14071:3;14109:6;14103:13;14125:53;14171:6;14166:3;14159:4;14151:6;14147:17;14125:53;:::i;:::-;14194:16;;;;;14079:137;-1:-1:-1;;14079:137:1:o;14221:275::-;14406:6;14398;14393:3;14380:33;14362:3;14432:16;;14457:15;;;14432:16;14370:126;-1:-1:-1;14370:126:1:o;15398:415::-;-1:-1:-1;;;;;15613:32:1;;15595:51;;15682:2;15677;15662:18;;15655:30;;;-1:-1:-1;;15702:62:1;;15745:18;;15737:6;15729;15702:62;:::i;:::-;15694:70;;15800:6;15795:2;15784:9;15780:18;15773:34;15585:228;;;;;;;:::o;16591:1001::-;16976:4;17005:3;17064:1;17060;17055:3;17051:11;17047:19;17039:6;17035:32;17024:9;17017:51;17104:6;17099:2;17088:9;17084:18;17077:34;17147:6;17142:2;17131:9;17127:18;17120:34;17190:6;17185:2;17174:9;17170:18;17163:34;17234:6;17228:3;17217:9;17213:19;17206:35;17278:6;17272:3;17261:9;17257:19;17250:35;17322:6;17316:3;17305:9;17301:19;17294:35;17366:6;17360:3;17349:9;17345:19;17338:35;17422:4;17414:6;17410:17;17404:3;17393:9;17389:19;17382:46;17477:4;17469:6;17465:17;17459:3;17448:9;17444:19;17437:46;17520:2;17514:3;17503:9;17499:19;17492:31;17540:46;17582:2;17571:9;17567:18;17558:7;17540:46;:::i;:::-;17532:54;16985:607;-1:-1:-1;;;;;;;;;;;;;;16985:607:1:o;17597:352::-;-1:-1:-1;;;;;17813:32:1;;;;17795:51;;17877:2;17862:18;;17855:34;;;;17937:4;17925:17;17920:2;17905:18;;17898:45;17783:2;17768:18;;17750:199::o;17954:261::-;18133:2;18122:9;18115:21;18096:4;18153:56;18205:2;18194:9;18190:18;18182:6;18153:56;:::i;18220:1164::-;18430:4;18459:2;18499;18488:9;18484:18;18529:2;18518:9;18511:21;18552:6;18587;18581:13;18618:6;18610;18603:22;18644:2;18634:12;;18677:2;18666:9;18662:18;18655:25;;18739:2;18729:6;18726:1;18722:14;18711:9;18707:30;18703:39;18777:2;18769:6;18765:15;18798:4;18811:544;18825:6;18822:1;18819:13;18811:544;;;18918:2;18914:7;18902:9;18894:6;18890:22;18886:36;18881:3;18874:49;18952:6;18946:13;18982:4;19025:2;19019:9;19056:2;19048:6;19041:18;19086:48;19130:2;19122:6;19118:15;19104:12;19086:48;:::i;:::-;19177:11;;;19171:18;19154:15;;;19147:43;19233:11;;;19227:18;19210:15;;;19203:43;;;;-1:-1:-1;19333:12:1;;;;19072:62;-1:-1:-1;19298:15:1;;;;18847:1;18840:9;18811:544;;;-1:-1:-1;19372:6:1;;18439:945;-1:-1:-1;;;;;;;;18439:945:1:o;19389:1354::-;19626:2;19678:21;;;19748:13;;19651:18;;;19770:22;;;19597:4;;19626:2;19811;;19829:18;;;;19870:15;;;19597:4;19916:801;19930:6;19927:1;19924:13;19916:801;;;19989:13;;20027:9;;20015:22;;20077:11;;;20071:18;20057:12;;;20050:40;20130:11;;;20124:18;20110:12;;;20103:40;20166:4;20210:11;;;20204:18;20190:12;;;20183:40;20246:4;20290:11;;;20284:18;20270:12;;;20263:40;20326:4;20370:11;;;20364:18;20350:12;;;20343:40;20406:4;20449:11;;;20443:18;20484:4;20522:21;;;20508:12;;;20501:43;;;;20567:4;20615:11;;;20609:18;20605:27;20591:12;;;20584:49;20662:6;20653:16;;;;20692:15;;;;19952:1;19945:9;19916:801;;;-1:-1:-1;20734:3:1;;19606:1137;-1:-1:-1;;;;;;;19606:1137:1:o;21981:318::-;22168:2;22157:9;22150:21;22131:4;22188:62;22246:2;22235:9;22231:18;22223:6;22215;22188:62;:::i;:::-;22180:70;;22286:6;22281:2;22270:9;22266:18;22259:34;22140:159;;;;;;:::o;22304:462::-;22547:3;22536:9;22529:22;22510:4;22568:63;22626:3;22615:9;22611:19;22603:6;22595;22568:63;:::i;:::-;22662:2;22647:18;;22640:34;;;;-1:-1:-1;22705:2:1;22690:18;;22683:34;;;;22748:2;22733:18;;;22726:34;22560:71;22519:247;-1:-1:-1;;22519:247:1:o;22771:220::-;22920:2;22909:9;22902:21;22883:4;22940:45;22981:2;22970:9;22966:18;22958:6;22940:45;:::i;22996:362::-;23201:2;23190:9;23183:21;23164:4;23221:45;23262:2;23251:9;23247:18;23239:6;23221:45;:::i;:::-;23297:2;23282:18;;23275:34;;;;-1:-1:-1;23340:2:1;23325:18;23318:34;23213:53;23173:185;-1:-1:-1;23173:185:1:o;26540:325::-;26742:2;26724:21;;;26781:1;26761:18;;;26754:29;-1:-1:-1;;;26814:2:1;26799:18;;26792:32;26856:2;26841:18;;26714:151::o;27200:325::-;27402:2;27384:21;;;27441:1;27421:18;;;27414:29;-1:-1:-1;;;27474:2:1;27459:18;;27452:32;27516:2;27501:18;;27374:151::o;28594:325::-;28796:2;28778:21;;;28835:1;28815:18;;;28808:29;-1:-1:-1;;;28868:2:1;28853:18;;28846:32;28910:2;28895:18;;28768:151::o;34031:325::-;34233:2;34215:21;;;34272:1;34252:18;;;34245:29;-1:-1:-1;;;34305:2:1;34290:18;;34283:32;34347:2;34332:18;;34205:151::o;34361:355::-;34563:2;34545:21;;;34602:2;34582:18;;;34575:30;34641:33;34636:2;34621:18;;34614:61;34707:2;34692:18;;34535:181::o;35986:332::-;36193:6;36182:9;36175:25;36236:2;36231;36220:9;36216:18;36209:30;36156:4;36256:56;36308:2;36297:9;36293:18;36285:6;36256:56;:::i;36323:502::-;36586:6;36575:9;36568:25;36629:3;36624:2;36613:9;36609:18;36602:31;36549:4;36650:57;36702:3;36691:9;36687:19;36679:6;36650:57;:::i;:::-;-1:-1:-1;;;;;36743:32:1;;;;36738:2;36723:18;;36716:60;-1:-1:-1;36807:2:1;36792:18;36785:34;36642:65;36558:267;-1:-1:-1;;36558:267:1:o;37083:574::-;37374:6;37363:9;37356:25;37417:6;37412:2;37401:9;37397:18;37390:34;37460:3;37455:2;37444:9;37440:18;37433:31;37337:4;37481:57;37533:3;37522:9;37518:19;37510:6;37481:57;:::i;:::-;-1:-1:-1;;;;;37574:32:1;;;;37569:2;37554:18;;37547:60;-1:-1:-1;37638:3:1;37623:19;37616:35;37473:65;37346:311;-1:-1:-1;;;37346:311:1:o;40772:275::-;40843:2;40837:9;40908:2;40889:13;;-1:-1:-1;;40885:27:1;40873:40;;-1:-1:-1;;;;;40928:34:1;;40964:22;;;40925:62;40922:2;;;40990:18;;:::i;:::-;41026:2;41019:22;40817:230;;-1:-1:-1;40817:230:1:o;41052:128::-;41092:3;41123:1;41119:6;41116:1;41113:13;41110:2;;;41129:18;;:::i;:::-;-1:-1:-1;41165:9:1;;41100:80::o;41185:120::-;41225:1;41251;41241:2;;41256:18;;:::i;:::-;-1:-1:-1;41290:9:1;;41231:74::o;41310:422::-;41399:1;41442:5;41399:1;41456:270;41477:7;41467:8;41464:21;41456:270;;;41536:4;41532:1;41528:6;41524:17;41518:4;41515:27;41512:2;;;41545:18;;:::i;:::-;41595:7;41585:8;41581:22;41578:2;;;41615:16;;;;41578:2;41694:22;;;;41654:15;;;;41456:270;;;41460:3;41374:358;;;;;:::o;41737:131::-;41797:5;41826:36;41853:8;41847:4;41922:5;41952:8;41942:2;;-1:-1:-1;41993:1:1;42007:5;;41942:2;42041:4;42031:2;;-1:-1:-1;42078:1:1;42092:5;;42031:2;42123:4;42141:1;42136:59;;;;42209:1;42204:130;;;;42116:218;;42136:59;42166:1;42157:10;;42180:5;;;42204:130;42241:3;42231:8;42228:17;42225:2;;;42248:18;;:::i;:::-;-1:-1:-1;;42304:1:1;42290:16;;42319:5;;42116:218;;42418:2;42408:8;42405:16;42399:3;42393:4;42390:13;42386:36;42380:2;42370:8;42367:16;42362:2;42356:4;42353:12;42349:35;42346:77;42343:2;;;-1:-1:-1;42455:19:1;;;42487:5;;42343:2;42534:34;42559:8;42553:4;42534:34;:::i;:::-;42604:6;42600:1;42596:6;42592:19;42583:7;42580:32;42577:2;;;42615:18;;:::i;:::-;42653:20;;41932:747;-1:-1:-1;;;41932:747:1:o;42684:168::-;42724:7;42790:1;42786;42782:6;42778:14;42775:1;42772:21;42767:1;42760:9;42753:17;42749:45;42746:2;;;42797:18;;:::i;:::-;-1:-1:-1;42837:9:1;;42736:116::o;42857:125::-;42897:4;42925:1;42922;42919:8;42916:2;;;42930:18;;:::i;:::-;-1:-1:-1;42967:9:1;;42906:76::o;42987:258::-;43059:1;43069:113;43083:6;43080:1;43077:13;43069:113;;;43159:11;;;43153:18;43140:11;;;43133:39;43105:2;43098:10;43069:113;;;43200:6;43197:1;43194:13;43191:2;;;-1:-1:-1;;43235:1:1;43217:16;;43210:27;43040:205::o;43250:380::-;43329:1;43325:12;;;;43372;;;43393:2;;43447:4;43439:6;43435:17;43425:27;;43393:2;43500;43492:6;43489:14;43469:18;43466:38;43463:2;;;43546:10;43541:3;43537:20;43534:1;43527:31;43581:4;43578:1;43571:15;43609:4;43606:1;43599:15;43463:2;;43305:325;;;:::o;43635:135::-;43674:3;-1:-1:-1;;43695:17:1;;43692:2;;;43715:18;;:::i;:::-;-1:-1:-1;43762:1:1;43751:13;;43682:88::o;43775:112::-;43807:1;43833;43823:2;;43838:18;;:::i;:::-;-1:-1:-1;43872:9:1;;43813:74::o;43892:127::-;43953:10;43948:3;43944:20;43941:1;43934:31;43984:4;43981:1;43974:15;44008:4;44005:1;43998:15;44024:127;44085:10;44080:3;44076:20;44073:1;44066:31;44116:4;44113:1;44106:15;44140:4;44137:1;44130:15;44156:127;44217:10;44212:3;44208:20;44205:1;44198:31;44248:4;44245:1;44238:15;44272:4;44269:1;44262:15;44288:131;-1:-1:-1;;;;;44363:31:1;;44353:42;;44343:2;;44409:1;44406;44399:12;44343:2;44333:86;:::o;44424:118::-;44510:5;44503:13;44496:21;44489:5;44486:32;44476:2;;44532:1;44529;44522:12
Swarm Source
ipfs://752818d64a2c2ef1bb84af938f824333a0ed8a84a8ffd4446dd0fe638a424f77
Loading...
Loading
Loading...
Loading
Net Worth in USD
$7,044.76
Net Worth in ETH
3.422521
Token Allocations
USDT
100.00%
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $0.999216 | 7,050.2888 | $7,044.76 |
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.