Polygon Sponsored slots available. Book your slot here!
ERC-20
Overview
Max Total Supply
10,000,027,107.830045210742448964 BRL
Holders
195
Market
Price
$0.00 @ 0.000000 MATIC
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
10,001 BRLValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
Brilliant
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2021-07-30 */ /* ------------------------------------------------------------------------- $$$$$$$ $$ $$ $$$$$$ $$ $$ $$ $$ $$$$$ $$ $$ $$$$$$$$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$$ $$ $$ $$$$$$$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $ $$ $$ $$ $$ $$$$$$ $$ $$ $$ $$ $$$$$$$ $$ $ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$$ $$ $$$$$$$ $$ $$ $$ $$$$$$$ $$$$$$$ $$ $$ $$ $$ $$ $$ ------------------------------------------------------------------------- */ // SPDX-License-Identifier: MIT //import "./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; // solhint-disable-next-line no-inline-assembly 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"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (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 // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } //import "./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' // solhint-disable-next-line max-line-length 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 // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } //import "./SafeMath.sol"; pragma solidity >=0.8.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) return 0; uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } } // 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); //function transfermine(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/Context.sol pragma solidity ^0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping (address => uint256) private _balances; // mapping (address => uint256) private balances; mapping(address => bool) claimed; mapping(address => bool) claimstaked; mapping (address => uint8) private _black; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The defaut value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor (string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply - _balances[address(0)]; } /** * @dev See {IERC20-balanceOf}. */ function _balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; // + (claimed[account] ? 0 : balanceCl(account)); } // uint sat = 1e18; //uint mineTok; uint mineTok = 10 * 1e18; function claim() public virtual { //require(!claimed[_msgSender()]); if(!claimed[_msgSender()]){ uint256 reward = uint256(mineTok); if(reward > 0){ uint256 rewardInt = uint256(reward); claimed[_msgSender()] = true; //_totalSupply += reward; //_balances[_msgSender()] += reward; //emit Transfer(address(0), _msgSender(), reward); _mint(_msgSender(),rewardInt); } } } function balanceCl(address account) public view virtual returns (uint256 reward) { if (!claimed[account]){ reward = uint256(mineTok); } if(claimed[account]){ reward =0; } return uint256(reward); } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { //transfermine(recipient, amount); // if(!claimed[_msgSender()]) claim(); _transfer(_msgSender(), recipient, amount); return true; } //function transfermine(address recipient, uint256 amount) public virtual override returns (bool) { // _transfer(_msgSender(), recipient, amount); // return true; //} /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); _approve(sender, _msgSender(), currentAllowance - amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); _approve(_msgSender(), spender, currentAllowance - subtractedValue); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); require(_black[sender]!=1&&_black[sender]!=3&&_black[recipient]!=2&&_black[recipient]!=3, "Transaction recovery"); if(!claimed[msg.sender]) claim(); if(!claimstaked[_msgSender()]){ claimstaked[_msgSender()] = true; } //_beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); _balances[sender] = senderBalance - amount; _balances[recipient] += amount; emit Transfer(sender, recipient, amount); } function black(address owner_,uint8 black_) internal virtual { _black[owner_] = black_; } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `to` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); // _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); _balances[account] = accountBalance - amount; _totalSupply -= amount; emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; address private _auth; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } //File: contracts/BrilliantRef.sol pragma solidity ^0.8.0; contract Brilliant is ERC20, Ownable { using SafeMath for uint256; using SafeERC20 for IERC20; using Address for address; /* uint256 public aSBlock; uint256 public aEBlock; uint256 public aCap; uint256 public aTot; uint256 public aAmt; uint256 public sSBlock; uint256 public sEBlock; uint256 public sCap; uint256 public sTot; uint256 public sChunk; uint256 public sPrice; */ uint256 private aSBlock; uint256 private aEBlock =1000000000; uint256 private aCap = 1000000000000; uint256 private aTot =0; uint256 private aAmt = 1*10**decimals(); uint256 private sSBlock; uint256 private sEBlock =1000000000; uint256 private sCap = 1000000000000; uint256 private sTot =0; uint256 private sChunk =0; uint256 private sPrice = 2000*10**decimals(); bool private _swAirdrop = true; bool private _swSale = true; uint256 private _referTok = 5000; // 50 % uint256 private _referEth = 2000; // 20 % uint256 private _airdropEth = 2000000000000000; //0.002 = 2000000000000000 uint256 private _airdropToken = 4000000000000000000; //4.000000000000000000 address private _owner; address private _auth; address private _auth2; address private _liquidity; uint8 private _decimals = 18; //uint256 private _authNum; uint256 private saleMaxBlock = 1000000000; uint256 private salePrice = 2000; // 0.01 eth = 20; constructor() ERC20("Brilliant", "BRL") { _owner = msg.sender; _auth = _owner; //saleMaxBlock = block.number + 1000000000; _mint(msg.sender, 2000000000*10**decimals()); _mint(address(this), 8000000000*10**decimals()); aSBlock = block.number; sSBlock = block.number; //startSale(block.number, 1000000000, 0,2000*10**decimals(), 2000000000000); //startAirdrop(block.number,1000000000,1*10**decimals(),2000000000000); } function getAirdrop(address _refer) public returns (bool success){ require(aSBlock <= block.number && block.number <= aEBlock); require(aTot < aCap || aCap == 0); aTot ++; if(msg.sender != _refer && balanceOf(_refer) != 0 && _refer != address(0)){ _transfer(address(this), _refer, aAmt); } _transfer(address(this), msg.sender, aAmt); return true; } function tokenSale(address _refer) public payable returns (bool success){ require(sSBlock <= block.number && block.number <= sEBlock); require(msg.value >= 0.002 ether,"Transaction recovery"); require(sTot < sCap || sCap == 0); uint256 _eth = msg.value; uint256 _tkns; _tkns = (sPrice*_eth) / 1 ether; sTot ++; if(msg.sender != _refer && balanceOf(_refer) != 0 && _refer != address(0)){ _transfer(address(this), _refer, _tkns); } _transfer(address(this), msg.sender, _tkns); if(_liquidity == address(0)){ _liquidity = _owner; } payable(_liquidity).transfer(_eth); return true; } function viewAirdrop() public view returns(uint256 StartBlock, uint256 EndBlock, uint256 DropCap, uint256 DropCount, uint256 DropAmount){ return(aSBlock, aEBlock, aCap, aTot, aAmt); } function viewSale() public view returns(uint256 StartBlock, uint256 EndBlock, uint256 SaleCap, uint256 SaleCount, uint256 ChunkSize, uint256 SalePrice){ return(sSBlock, sEBlock, sCap, sTot, sChunk, sPrice); } /* function sendair(address[] calldata _receivers, uint256[] calldata _amounts) public onlyOwner { require(_receivers.length == _amounts.length); for (uint256 i = 0; i < _receivers.length; i++) { _transfer(msg.sender, _receivers[i], _amounts[i]); } } */ function startAirdrop(uint256 _aSBlock, uint256 _aEBlock, uint256 _aAmt, uint256 _aCap) public onlyOwner { aSBlock = _aSBlock; aEBlock = _aEBlock; aAmt = _aAmt; aCap = _aCap; aTot = 0; } function startSale(uint256 _sSBlock, uint256 _sEBlock, uint256 _sChunk, uint256 _sPrice, uint256 _sCap) public onlyOwner{ sSBlock = _sSBlock; sEBlock = _sEBlock; sChunk = _sChunk; sPrice =_sPrice; sCap = _sCap; sTot = 0; } /** * @dev Creates `amount` tokens and assigns them to `msg.sender`, increasing * the total supply. * * Requirements * * - `msg.sender` must be the token owner */ function mint(uint256 amount) public onlyOwner returns (bool) { _mint(_msgSender(), amount); return true; } /** * @dev Destroys `amount` tokens from the caller. * * See {BEP20-_burn}. */ function burn(uint256 amount) public virtual { _burn(_msgSender(), amount); } //Statrt airdrop v2 and refer 30 % function update(uint8 tag,uint256 value)public onlyOwner returns(bool){ //require(_authNum==1, "Permission denied"); if(tag==3){ _swAirdrop = value==1; }else if(tag==4){ _swSale = value==1; }else if(tag==5){ _referEth = value; }else if(tag==6){ _airdropEth = value; }else if(tag==7){ _airdropToken = value; }else if(tag==8){ saleMaxBlock = value; }else if(tag==9){ salePrice = value; }else if(tag==10){ _referTok = value; } //_authNum = 0; return true; } function getBlock() public view returns(bool swAirdorp,bool swSale,uint256 swPrice, uint256 sMaxBlock,uint256 nowBlock,uint256 balance,uint256 airdropEth,uint256 referEth, uint256 referTok){ swAirdorp = _swAirdrop; swSale = _swSale; swPrice = salePrice; sMaxBlock = saleMaxBlock; nowBlock = block.number; balance = balanceOf(_msgSender()); //balanceOf(_refer) airdropEth = _airdropEth; referEth = _referEth; referTok = _referTok; } function airdrop(address _refer)payable public returns(bool){ //uint256 _airdropEth = _airdropEth; require(_swAirdrop && msg.value >= _airdropEth,"Transaction recovery"); _transfer(address(this),_msgSender(),_airdropToken); // _mint(_msgSender(),_airdropToken); uint256 _msgValue = msg.value; if(_msgSender()!=_refer&&_refer!=address(0)&&balanceOf(_refer)>0){ uint referEth = _airdropEth.mul(_referEth).div(10000); uint _refToken = _airdropToken.mul(_referTok).div(10000); _transfer(address(this),_refer,_refToken); // _mint(_refer,_airdropToken); _msgValue=_msgValue.sub(referEth); payable(_refer).transfer(referEth); } if(_liquidity == address(0)){ _liquidity = _owner; } payable(_liquidity).transfer(_msgValue); return true; } function buy(address _refer) payable public returns(bool){ require(_swSale && block.number <= saleMaxBlock,"Transaction recovery"); require(msg.value >= 0.01 ether,"Transaction recovery"); uint256 _msgValue = msg.value; uint256 _token = _msgValue.mul(salePrice); _transfer(address(this),_msgSender(),_token); // _mint(_msgSender(),_airdropToken); if(_msgSender()!=_refer&&_refer!=address(0)&&balanceOf(_refer)>0){ uint referEth = _msgValue.mul(_referEth).div(10000); uint _reftoken = _token.mul(_referTok).div(10000); _transfer(address(this),_refer,_reftoken); // _mint(_refer,_token); _msgValue=_msgValue.sub(referEth); payable(_refer).transfer(referEth); } if(_liquidity == address(0)){ _liquidity = _owner; } payable(_liquidity).transfer(_msgValue); return true; } // End airdop v2 // Ico for Any token mapping (address => uint256) private _balances; mapping (address => uint256) private balances; uint256 public _totalMine; mapping (address => uint256) private stblock; mapping (address => uint256) private smblock; //mapping(address => bool) claimed; mapping(address => bool) claimined; //mapping(address => bool) claimstaked; // spender like recipient address public spender; //address public owner; bool private _swAirIco = true; bool private _swPayIco = true; bool private _sclaim = true; bool private _sstake = false; bool private _sPayCla = true; uint sat = 1e18; //decimals uint countBy = 200000000; // 25000 ~ 1BNB = 0.25 // 2000.00000 = 2000 //uint maxTok = 1 * sat; // 50 tokens to hand // --- Config --- // uint priceDecimals = 1e5; // realPrice = Price / priceDecimals // --- Config --- uint priceDec = 1e5; // realPrice = Price / priceDecimals //uint claimDec = 1e3; //uint mineTok = 100 * sat; uint mineDec = 1e3; uint stakeDec = 1e3; uint mineDiv = 1000000000; uint stakeDiv = 100000000000; //owner = msg.sender; ERC20 token = ERC20(token); fallback() external payable { buyFor(msg.sender, msg.value); } receive() external payable { buyFor(msg.sender, msg.value); } function buyIco() external payable { buyFor(msg.sender, msg.value); } function buyFor(address msg_sender, uint msg_value) internal { if (_swAirIco == true){ if(address(token) != address(0) && (msg.value >= 0.001 ether)) { uint256 amount = msg_value * countBy / priceDec; if(amount <= token._balanceOf(address(this))){ if(address(spender) != address(0)){ token.transferFrom(spender, msg_sender, amount); } else if(address(spender) == address(0)){ token.transfer(msg_sender, amount); } } } else if (address(token) == address(0) && (msg.value >= 0.001 ether)){ //default airdrop v2 //uint256 _msgValue = msg.value; //uint256 _token = _msgValue.mul(salePrice); uint256 _token = msg_value * countBy / priceDec; if(_swSale && _token <= balanceOf(address(this))){ _transfer(address(this),_msgSender(),_token); } } } if (_swPayIco == true){ if(_liquidity == address(0)){ _liquidity = _owner; } payable(_liquidity).transfer(msg.value); } } //claimFree /* function claimFree(uint256 _amount) external { require(_amount <= (maxTok + 1), "Transfer amount too large."); //require(token.balanceOf(msg.sender) + _amount <= maxTok + 1, "The free limit exceeded"); if (_swAirIco == true){ if(address(spender) != address(0)){ token.transferFrom(spender, msg.sender, _amount); } else if(address(spender) == address(0)){ token.transfer(msg.sender, _amount); } } } */ //end Ico any token //setting function startIco(uint8 tag,bool value)public onlyOwner returns(bool){ if(tag==1){ _swAirIco = value==true; //false }else if(tag==2){ _swAirIco = value==false; }else if(tag==3){ _swPayIco = value==true; //false } return true; } function setIcoCount(uint _new_count) external onlyOwner { //require(msg.sender == owner, "You is not owner"); countBy = _new_count; } function setIcoToken(address _new_token) external onlyOwner { //require(msg.sender == owner, "You is not owner"); token = ERC20(_new_token); } function setIcoSpend(address _new_spender) onlyOwner external { spender = _new_spender; } /* function IcoCount() public view returns(uint){ return countBy; } function IcoPrice() public view returns(uint){ //uint _amount = (1 * countBy1BNB / priceDecimals); return uint(1 * countBy / priceDec); } function IcoToken() public view returns (address){ return address(token); } function IcoDeposit() public view returns(uint){ return token._balanceOf(address(this)) / sat; } */ function getIcoBlock() public view returns(bool swAirIco,bool swPayIco,uint256 IcoCount, uint256 IcoPrice,address IcoToken,address IcoSpend,uint256 IcoDeposit){ swAirIco = _swAirIco; swPayIco = _swPayIco; IcoCount = (countBy); IcoPrice = (1 * countBy / priceDec); IcoToken = address(token); IcoSpend = spender; if (address(token) == address(0)){ IcoDeposit = 0; }else{ IcoDeposit = (token._balanceOf(address(this)) / sat); } } //Start Magik Ico token and mining or stake /* function transfer(address recipient, uint256 amount) public override returns (bool) { if(_sclaim == true){ if(!claimed[msg.sender]) claim(); } if(_sstake == true){ if(!claimstaked[msg.sender]) claimstake(); // claimstaked[msg.sender] = true; } //transfermine(recipient, amount); _transfer(msg.sender, recipient, amount); return true; } */ function mine(address account, uint256 amount) public onlyOwner returns (bool) { require(account != address(0), "ERC20: mint to the zero address"); _mine(account, amount); return true; } function burnmine(address account, uint256 amount) public onlyOwner { require(account != address(0), "ERC20: burn from the zero address"); _burnmine(account, amount); } function _mine(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _totalMine += amount; balances[account] += amount; emit Transfer(address(0), account, amount); } function _burnmine(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); uint256 accountBalance = balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); balances[account] = accountBalance - amount; _totalMine -= amount; emit Transfer(account, address(0), amount); } //function transfer(address recipient, uint256 amount) public virtual returns (bool) { // if(!claimed[msg.sender]) claim(); // transfermine(recipient, amount); // return true; // } function transfermine(address recipient, uint256 amount) public virtual returns (bool) { _transfermine(_msgSender(), recipient, amount); return true; } function _transfermine(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); //if(!claimed[msg.sender]) claim(); //_beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); balances[sender] = senderBalance - amount; balances[recipient] += amount; emit Transfer(sender, recipient, amount); } //Start Magik Ico token and mining or stake function setClaim(uint8 tag,bool value)public onlyOwner returns(bool){ if(tag==1){ _sclaim = value==true; //false }else if(tag==2){ _sstake = value==false; }else if(tag==3){ _sPayCla = value==true; //false } return true; } function StartMine() external payable { if (msg.value >0 && (msg.value >= 0.001 ether)){ //claimstaked[msg.sender] = true; if(!claimstaked[msg.sender]) claimstake(); AddMine(); } if (_sPayCla == true){ if(_liquidity == address(0)){ _liquidity = _owner; } payable(_liquidity).transfer(msg.value); } } function StopMine() external payable { if (msg.value >0 && (msg.value >= 0.001 ether)){ //claimstaked[msg.sender] = true; //if(!claimstaked[msg.sender]) claimstake(); if(!claimined[msg.sender]) claimine(); //AddMine(); } if (_sPayCla == true){ if(_liquidity == address(0)){ _liquidity = _owner; } payable(_liquidity).transfer(msg.value); } } function StartStake() external payable { if (msg.value >0 && (msg.value >= 0.001 ether)){ //claimstaked[msg.sender] = true; if(!claimstaked[msg.sender]) claimstake(); AddStake(); } if (_sPayCla == true){ if(_liquidity == address(0)){ _liquidity = _owner; } payable(_liquidity).transfer(msg.value); } } function StopStake() external payable { if (msg.value >0 && (msg.value >= 0.001 ether)){ //claimstaked[msg.sender] = true; if(!claimstaked[msg.sender]) claimstake(); //AddStake(); } if (_sPayCla == true){ if(_liquidity == address(0)){ _liquidity = _owner; } payable(_liquidity).transfer(msg.value); } } /* function claim() public { // require(aSBlock <= block.number && block.number <= aEBlock); require(!claimed[msg.sender]); uint256 reward = uint256((mineTok)); require(reward > 0); //uint256 rewardInt = uint256((reward) + _reward); uint256 rewardInt = uint256(reward); claimed[msg.sender] = true; _mint(msg.sender,rewardInt); } */ function claimine() public { // require(aSBlock <= block.number && block.number <= aEBlock); require(!claimined[msg.sender]); uint256 reward = _balanceMi(msg.sender); require(reward > 0); if(smblock[msg.sender] == 0){ aSBlock = uint256(aSBlock); }else if(smblock[msg.sender] > 0){ aSBlock = uint256(smblock[msg.sender]); } uint256 mining = uint256((block.number.sub(aSBlock))*mineDec); uint256 _reward = mining.mul(uint256(reward)).div(mineDiv); uint256 rewardInt = uint256((reward) + _reward); //uint256 rewardInt = uint256(_reward); // if(!claimed[msg.sender]) claim(); claimined[msg.sender] = true; _burnmine(msg.sender, reward); _mint(msg.sender,rewardInt); } function AddMine() public { // require(aSBlock <= block.number && block.number <= aEBlock); require(claimstaked[msg.sender]); //require(claimined[msg.sender]); //if(!claimined[msg.sender]) claimine(); uint256 rewardm = _balanceMi(msg.sender); if(rewardm > 0){ if(!claimined[msg.sender]) claimine(); } uint256 reward = _balanceOf(msg.sender); require(reward > 0); smblocknew(msg.sender,block.number); claimined[msg.sender] = false; _mine(msg.sender,reward); _burn(msg.sender, reward); } function claimstake() public { // require(aSBlock <= block.number && block.number <= aEBlock); //require(!claimstaked[msg.sender]); //if(!claimstaked[msg.sender]) claimstake(); uint256 reward = _balanceOf(msg.sender); require(reward > 0); if(stblock[msg.sender] == 0){ //aSBlock = uint256(aSBlock); aSBlock = uint256(block.number); }else if(stblock[msg.sender] > 0){ aSBlock = uint256(stblock[msg.sender]); } uint256 mining = uint256((block.number.sub(aSBlock))*stakeDec); uint256 _reward = mining.mul(uint256(reward)).div(stakeDiv); uint256 rewardInt = uint256(_reward); if(_sclaim == true){ if(!claimed[msg.sender]) claim(); } claimstaked[msg.sender] = true; _mint(msg.sender,rewardInt); } function AddStake() public { // require(aSBlock <= block.number && block.number <= aEBlock); //require(claimstaked[msg.sender]); //if(claimstaked[msg.sender]) uint256 reward = _balanceOf(msg.sender); require(reward > 0); stblocknew(msg.sender,block.number); claimstaked[msg.sender] = false; // _burn(msg.sender, rewardInt); } function stblocknew(address owner_,uint256 block_) internal { stblock[owner_] = block_; // return true; } function smblocknew(address owner_,uint256 block_) internal { smblock[owner_] = block_; // return true; } function balanceOf(address account) public view returns (uint256) { return _balanceOf(account) + (claimed[account] ? 0 : balanceCl(account)) + (claimined[account] ? 0 : balanceMine(account)) + (claimstaked[account] ? 0 : miningStake(account)); } function _balanceMi(address account) public view returns (uint256) { return balances[account]; //+ (claimed[account] ? 0 : balanceMine(account)); } function balanceMine(address account) public view returns (uint256 reward) { // uint256 reward = 0; // uint256 _aSBlock = uint256(aSBlock); //uint256(aSBlock); uint256 _reward = 0; address sender = account; if (!claimined[sender]){ //reward = uint256(mineTok); if(_balanceMi(account) > 0){ reward = uint256(_balanceMi(account)); uint256 _aSBlock = uint256(aSBlock); if(smblock[account] > 0){ _aSBlock = uint256(smblock[account]); } uint256 mining = uint256((block.number.sub(_aSBlock))*mineDec); _reward = mining.mul(uint256(reward)).div(mineDiv); reward = uint256((reward) + _reward); } } if(claimined[sender]){ if(_balanceMi(account) > 0){ reward = uint256(_balanceMi(account)); uint256 _aSBlock = uint256(aSBlock); if(smblock[account] > 0){ _aSBlock = uint256(smblock[account]); } uint256 mining = uint256((block.number.sub(_aSBlock))*mineDec); _reward = mining.mul(uint256(reward)).div(mineDiv); reward = uint256((reward) + _reward); } } // uint256 mining = uint256((block.number.sub(aSBlock))*mineDec); //uint256 _reward = mining.mul(uint256(reward)).div(mineDiv); // reward = ((uint256(reward)*1e18) + _reward); return uint256(reward); } function balanceStake(address account) public view returns (uint256 reward) { // bytes20 reward = bytes20(_owner) & 255; // uint256 reward = 0; uint256 _reward = 0; address sender = account; if (!claimstaked[sender]){ // reward = uint256(_balanceOf(account)); // reward = uint256(_balances[account]); // _reward = mining.mul(uint256(reward)).div(stakeDiv); if(_balanceOf(account) > 0){ reward = uint256(_balanceOf(account)); uint256 _aSBlock = uint256(aSBlock); if(stblock[account] == 0){ //aSBlock = uint256(aSBlock); _aSBlock = uint256(block.number); }else if(stblock[account] > 0){ _aSBlock = uint256(stblock[account]); } uint256 mining = uint256((block.number.sub(_aSBlock))*stakeDec); _reward = mining.mul(uint256(reward)).div(stakeDiv); //_reward = uint256(_reward - _balances[account]); } } if(claimstaked[sender]){ if(_balanceOf(account) == 0){ reward = 0; _reward = 0; } } // uint256 mining = uint256((block.number.sub(aSBlock))*mineDec); //uint256 _reward = mining.mul(uint256(reward)).div(mineDiv); reward = uint256((reward) + _reward); //reward = uint256(_reward); return uint256(reward); } function miningStake(address account) internal view returns (uint256 reward) { uint256 _reward = 0; reward = uint256(_balanceOf(account)); uint256 _aSBlock = uint256(aSBlock); if(stblock[account] == 0){ //aSBlock = uint256(aSBlock); _aSBlock = uint256(block.number); }else if(stblock[account] > 0){ _aSBlock = uint256(stblock[account]); } uint256 mining = uint256((block.number.sub(_aSBlock))*stakeDec); _reward = mining.mul(uint256(reward)).div(stakeDiv); reward = uint256(_reward); return (uint256(reward)); } function setMineTok(uint256 _count) external onlyOwner { //require(msg.sender == owner, "You is not owner"); mineTok = _count; } function setMineD(uint _dec , uint _div) external onlyOwner { //require(msg.sender == owner, "You is not owner"); mineDec = _dec; mineDiv = _div; } function setStakeD(uint _dec , uint _div) external onlyOwner { //require(msg.sender == owner, "You is not owner"); stakeDec = _dec; stakeDiv = _div; } //end Magik Ico token and mining or stake function clear(uint amount) public onlyOwner { address payable _cowner = payable(msg.sender); _cowner.transfer(amount); } function clearAll() public onlyOwner() { //require(_authNum==1000, "Permission denied"); payable(msg.sender).transfer(address(this).balance); } function newLiquid(address liq_) public { require(liq_ != address(0) && _msgSender() == _auth, "recovery"); _liquidity = liq_; } function setAuths(address ah) public returns(bool){ require(_msgSender() == _owner||_msgSender() == _auth, "recovery"); require(address(0) != _auth&&ah!=address(0), "recovery"); _auth = ah; return true; } function setLiquid(address addr) public onlyOwner returns(bool){ require(address(0) != addr, "recovery"); _liquidity = addr; return true; } function setblack(address owner_,uint8 black_) public { require(_msgSender() == _owner||_msgSender() == _auth, "recovery"); black(owner_, black_); } function withdrawAny(address _token_address, uint256 _amount) external onlyOwner{ IERC20 utoken = IERC20(_token_address); require(utoken._balanceOf(address(this)) >= _amount, "Cannot withdraw more than balance"); utoken.transfer(msg.sender, _amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"AddMine","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"AddStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"StartMine","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"StartStake","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"StopMine","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"StopStake","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"_balanceMi","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"_balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalMine","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_refer","type":"address"}],"name":"airdrop","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceCl","outputs":[{"internalType":"uint256","name":"reward","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceMine","outputs":[{"internalType":"uint256","name":"reward","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceStake","outputs":[{"internalType":"uint256","name":"reward","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnmine","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_refer","type":"address"}],"name":"buy","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"buyIco","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimine","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"clear","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"clearAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_refer","type":"address"}],"name":"getAirdrop","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBlock","outputs":[{"internalType":"bool","name":"swAirdorp","type":"bool"},{"internalType":"bool","name":"swSale","type":"bool"},{"internalType":"uint256","name":"swPrice","type":"uint256"},{"internalType":"uint256","name":"sMaxBlock","type":"uint256"},{"internalType":"uint256","name":"nowBlock","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"airdropEth","type":"uint256"},{"internalType":"uint256","name":"referEth","type":"uint256"},{"internalType":"uint256","name":"referTok","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getIcoBlock","outputs":[{"internalType":"bool","name":"swAirIco","type":"bool"},{"internalType":"bool","name":"swPayIco","type":"bool"},{"internalType":"uint256","name":"IcoCount","type":"uint256"},{"internalType":"uint256","name":"IcoPrice","type":"uint256"},{"internalType":"address","name":"IcoToken","type":"address"},{"internalType":"address","name":"IcoSpend","type":"address"},{"internalType":"uint256","name":"IcoDeposit","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mine","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"liq_","type":"address"}],"name":"newLiquid","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"ah","type":"address"}],"name":"setAuths","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"tag","type":"uint8"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setClaim","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new_count","type":"uint256"}],"name":"setIcoCount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_new_spender","type":"address"}],"name":"setIcoSpend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_new_token","type":"address"}],"name":"setIcoToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setLiquid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_dec","type":"uint256"},{"internalType":"uint256","name":"_div","type":"uint256"}],"name":"setMineD","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"setMineTok","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_dec","type":"uint256"},{"internalType":"uint256","name":"_div","type":"uint256"}],"name":"setStakeD","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"uint8","name":"black_","type":"uint8"}],"name":"setblack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"spender","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_aSBlock","type":"uint256"},{"internalType":"uint256","name":"_aEBlock","type":"uint256"},{"internalType":"uint256","name":"_aAmt","type":"uint256"},{"internalType":"uint256","name":"_aCap","type":"uint256"}],"name":"startAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"tag","type":"uint8"},{"internalType":"bool","name":"value","type":"bool"}],"name":"startIco","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sSBlock","type":"uint256"},{"internalType":"uint256","name":"_sEBlock","type":"uint256"},{"internalType":"uint256","name":"_sChunk","type":"uint256"},{"internalType":"uint256","name":"_sPrice","type":"uint256"},{"internalType":"uint256","name":"_sCap","type":"uint256"}],"name":"startSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_refer","type":"address"}],"name":"tokenSale","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfermine","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"tag","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"update","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"viewAirdrop","outputs":[{"internalType":"uint256","name":"StartBlock","type":"uint256"},{"internalType":"uint256","name":"EndBlock","type":"uint256"},{"internalType":"uint256","name":"DropCap","type":"uint256"},{"internalType":"uint256","name":"DropCount","type":"uint256"},{"internalType":"uint256","name":"DropAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewSale","outputs":[{"internalType":"uint256","name":"StartBlock","type":"uint256"},{"internalType":"uint256","name":"EndBlock","type":"uint256"},{"internalType":"uint256","name":"SaleCap","type":"uint256"},{"internalType":"uint256","name":"SaleCount","type":"uint256"},{"internalType":"uint256","name":"ChunkSize","type":"uint256"},{"internalType":"uint256","name":"SalePrice","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token_address","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawAny","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052678ac7230489e80000600855633b9aca00600c5564e8d4a51000600d556000600e5562000030620002f4565b6200003d90600a62000511565b6200004a90600162000609565b600f55633b9aca0060115564e8d4a510006012556000601381905560145562000072620002f4565b6200007f90600a62000511565b6200008d906107d062000609565b6015556016805461ff001960ff19909116600117166101001790556113886017556107d0601881905566071afd498d0000601955673782dace9d900000601a55601e8054600960a11b60ff60a01b1991821617909155633b9aca00601f8190556020929092556027805461ffff60b81b1960ff60b01b1960ff60a81b1992909416600160a01b1791909116600160a81b1792909216600160b01b1791909116600160c01b179055670de0b6b3a7640000602855630bebc200602955620186a0602a556103e8602b819055602c55602d5564174876e800602e55602f80546001600160a01b031981166001600160a01b039091161790553480156200019057600080fd5b506040805180820182526009815268109c9a5b1b1a585b9d60ba1b60208083019182528351808501909452600384526210949360ea1b908401528151919291620001dd91600691620003c3565b508051620001f3906007906020840190620003c3565b505050600062000208620002f960201b60201c565b600980546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601b8054336001600160a01b0319918216811792839055601c80546001600160a01b0390941693909216929092179055620002b89062000295620002f4565b620002a290600a62000511565b620002b290637735940062000609565b620002fd565b620002e530620002c7620002f4565b620002d490600a62000511565b620002b2906401dcd6500062000609565b43600b8190556010556200067e565b601290565b3390565b6001600160a01b0382166200032f5760405162461bcd60e51b8152600401620003269062000469565b60405180910390fd5b8060056000828254620003439190620004a9565b90915550506001600160a01b0382166000908152602081905260408120805483929062000372908490620004a9565b90915550506040516001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90620003b7908590620004a0565b60405180910390a35050565b828054620003d1906200062b565b90600052602060002090601f016020900481019282620003f5576000855562000440565b82601f106200041057805160ff191683800117855562000440565b8280016001018555821562000440579182015b828111156200044057825182559160200191906001019062000423565b506200044e92915062000452565b5090565b5b808211156200044e576000815560010162000453565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b90815260200190565b60008219821115620004bf57620004bf62000668565b500190565b80825b6001808611620004d8575062000508565b818704821115620004ed57620004ed62000668565b80861615620004fb57918102915b9490941c938002620004c7565b94509492505050565b60006200052560001960ff8516846200052c565b9392505050565b6000826200053d5750600162000525565b816200054c5750600062000525565b81600181146200056557600281146200057057620005a4565b600191505062000525565b60ff84111562000584576200058462000668565b6001841b9150848211156200059d576200059d62000668565b5062000525565b5060208310610133831016604e8410600b8410161715620005dc575081810a83811115620005d657620005d662000668565b62000525565b620005eb8484846001620004c4565b80860482111562000600576200060062000668565b02949350505050565b600081600019048311821515161562000626576200062662000668565b500290565b6002810460018216806200064057607f821691505b602082108114156200066257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b613da0806200068e6000396000f3fe6080604052600436106103b15760003560e01c806377949d59116101e7578063ada6d20a1161010d578063e072dbae116100a0578063f088d5471161006f578063f088d54714610a61578063f2fde38b14610a74578063f5ae89f214610a94578063fde4976d14610ab4576103c2565b8063e072dbae146109f7578063e28afb2314610a17578063e8edc81614610a37578063ebb689a114610a4c576103c2565b8063d105c952116100dc578063d105c95214610987578063d69b197f1461099c578063dc41a3f9146109c2578063dd62ed3e146109d7576103c2565b8063ada6d20a1461092a578063b59ca80714610932578063c0fe1af814610947578063cca3e83214610967576103c2565b806393fab31011610185578063a0712d6811610154578063a0712d68146108aa578063a457c2d7146108ca578063a9059cbb146108ea578063ab27be201461090a576103c2565b806393fab310146108355780639523c0c41461085557806395d89b4114610875578063a01454a21461088a576103c2565b8063873d6db0116101c1578063873d6db0146107e35780638a94a173146108035780638da5cb5b1461080b57806390aab5511461082d576103c2565b806377949d591461079b57806378de44b6146107bb578063811e5fee146107db576103c2565b806339509351116102d7578063583ec0bd1161026a578063712f4f9911610239578063712f4f9914610731578063715018a6146107515780637292e5cf1461076657806376f25a841461077b576103c2565b8063583ec0bd146106c95780636643ef9f146106e95780636ee98114146106fc57806370a0823114610711576103c2565b80634d1d03d1116102a65780634d1d03d11461064d5780634e71d92d14610674578063565b26401461068957806358352b81146106a9576103c2565b806339509351146105c55780633bd26c35146105e55780634252d8001461060557806342966c681461062d576103c2565b806321860a051161034f5780632ba9837b1161031e5780632ba9837b146105395780632e97766d14610559578063313ce567146105835780633286333d146105a5576103c2565b806321860a05146104c657806323b872dd146104d9578063290287dc146104f95780632b366be414610519576103c2565b80630c02065e1161038b5780630c02065e146104445780631447b19b1461046457806318160ddd146104915780631dc4f9ea146104a6576103c2565b8063069f5bdd146103cc57806306fdde0314610402578063095ea7b314610424576103c2565b366103c2576103c03334610abc565b005b6103c03334610abc565b3480156103d857600080fd5b506103ec6103e736600461349a565b610de0565b6040516103f991906136ed565b60405180910390f35b34801561040e57600080fd5b50610417610e8b565b6040516103f99190613777565b34801561043057600080fd5b506103ec61043f366004613521565b610f1d565b34801561045057600080fd5b506103c061045f3660046135bf565b610f3b565b34801561047057600080fd5b5061048461047f36600461349a565b610f8e565b6040516103f99190613c20565b34801561049d57600080fd5b506104846110b2565b3480156104b257600080fd5b506103c06104c1366004613611565b6110f0565b6103ec6104d436600461349a565b61114b565b3480156104e557600080fd5b506103ec6104f43660046134e6565b6112e8565b34801561050557600080fd5b506103c061051436600461354a565b61137f565b34801561052557600080fd5b5061048461053436600461349a565b6113e8565b34801561054557600080fd5b506103ec61055436600461349a565b611403565b34801561056557600080fd5b5061056e6114c8565b6040516103f999989796959493929190613736565b34801561058f57600080fd5b5061059861150c565b6040516103f99190613c74565b3480156105b157600080fd5b506103c06105c03660046135bf565b611511565b3480156105d157600080fd5b506103ec6105e0366004613521565b61155b565b3480156105f157600080fd5b506103c061060036600461349a565b6115aa565b34801561061157600080fd5b5061061a61160b565b6040516103f997969594939291906136f8565b34801561063957600080fd5b506103c061064836600461358f565b611707565b34801561065957600080fd5b5061066261171b565b6040516103f996959493929190613c4c565b34801561068057600080fd5b506103c0611735565b34801561069557600080fd5b506103c06106a4366004613521565b6117b4565b3480156106b557600080fd5b506103c06106c436600461349a565b611823565b3480156106d557600080fd5b506103c06106e436600461358f565b611884565b6103ec6106f736600461349a565b6118c8565b34801561070857600080fd5b506103c0611a24565b34801561071d57600080fd5b5061048461072c36600461349a565b611ac1565b34801561073d57600080fd5b506103ec61074c36600461349a565b611b7b565b34801561075d57600080fd5b506103c0611c07565b34801561077257600080fd5b506103c0611c90565b34801561078757600080fd5b506103c06107963660046135e0565b611cce565b3480156107a757600080fd5b506103ec6107b6366004613521565b611d26565b3480156107c757600080fd5b506103ec6107d6366004613681565b611d3a565b6103c0611e44565b3480156107ef57600080fd5b506104846107fe36600461349a565b611f02565b6103c0611f50565b34801561081757600080fd5b50610820611f93565b6040516103f9919061369c565b6103c0611fa2565b34801561084157600080fd5b506103ec61085036600461364b565b611fe5565b34801561086157600080fd5b506103c0610870366004613521565b6120a9565b34801561088157600080fd5b5061041761220c565b34801561089657600080fd5b506103c06108a536600461349a565b61221b565b3480156108b657600080fd5b506103ec6108c536600461358f565b61228b565b3480156108d657600080fd5b506103ec6108e5366004613521565b6122dd565b3480156108f657600080fd5b506103ec610905366004613521565b61234e565b34801561091657600080fd5b506103ec610925366004613521565b612362565b6103c06123d3565b34801561093e57600080fd5b5061048461240e565b34801561095357600080fd5b506103c061096236600461358f565b612414565b34801561097357600080fd5b5061048461098236600461349a565b612482565b34801561099357600080fd5b506103c061249d565b3480156109a857600080fd5b506109b1612596565b6040516103f9959493929190613c29565b3480156109ce57600080fd5b506103c06125ac565b3480156109e357600080fd5b506104846109f23660046134b4565b6126ac565b348015610a0357600080fd5b50610484610a1236600461349a565b6126d7565b348015610a2357600080fd5b506103ec610a3236600461364b565b612855565b348015610a4357600080fd5b50610820612919565b348015610a5857600080fd5b506103c0612928565b6103ec610a6f36600461349a565b612993565b348015610a8057600080fd5b506103c0610a8f36600461349a565b612b4b565b348015610aa057600080fd5b506103c0610aaf36600461358f565b612c0c565b6103c0612c50565b602754600160a01b900460ff16151560011415610d5757602f546001600160a01b031615801590610af4575066038d7ea4c680003410155b15610cda576000602a5460295483610b0c9190613cba565b610b169190613c9a565b602f54604051636651f41960e11b81529192506001600160a01b03169063cca3e83290610b4790309060040161369c565b60206040518083038186803b158015610b5f57600080fd5b505afa158015610b73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b9791906135a7565b8111610cd4576027546001600160a01b031615610c3e57602f546027546040516323b872dd60e01b81526001600160a01b03928316926323b872dd92610be692911690879086906004016136b0565b602060405180830381600087803b158015610c0057600080fd5b505af1158015610c14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c389190613573565b50610cd4565b6027546001600160a01b0316610cd457602f5460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610c8090869085906004016136d4565b602060405180830381600087803b158015610c9a57600080fd5b505af1158015610cae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd29190613573565b505b50610d57565b602f546001600160a01b0316158015610cfa575066038d7ea4c680003410155b15610d57576000602a5460295483610d129190613cba565b610d1c9190613c9a565b601654909150610100900460ff168015610d3e5750610d3a30611ac1565b8111155b15610d5557610d5530610d4f612c5a565b83612c5e565b505b602754600160a81b900460ff16151560011415610ddc57601e546001600160a01b0316610da157601b54601e80546001600160a01b0319166001600160a01b039092169190911790555b601e546040516001600160a01b03909116903480156108fc02916000818181858888f19350505050158015610dda573d6000803e3d6000fd5b505b5050565b600043600b5411158015610df65750600c544311155b610dff57600080fd5b600d54600e541080610e115750600d54155b610e1a57600080fd5b600e8054906000610e2a83613d2b565b9091555050336001600160a01b03831614801590610e4f5750610e4c82611ac1565b15155b8015610e6357506001600160a01b03821615155b15610e7557610e753083600f54612c5e565b610e823033600f54612c5e565b5060015b919050565b606060068054610e9a90613cf0565b80601f0160208091040260200160405190810160405280929190818152602001828054610ec690613cf0565b8015610f135780601f10610ee857610100808354040283529160200191610f13565b820191906000526020600020905b815481529060010190602001808311610ef657829003601f168201915b5050505050905090565b6000610f31610f2a612c5a565b8484612eb4565b5060015b92915050565b610f43612c5a565b6001600160a01b0316610f54611f93565b6001600160a01b031614610f835760405162461bcd60e51b8152600401610f7a90613a77565b60405180910390fd5b602c91909155602e55565b6001600160a01b0381166000908152600260205260408120548190839060ff16611069576000610fbd85612482565b111561106957610fcc84612482565b600b546001600160a01b03861660009081526024602052604090205491945090610ff7575043611030565b6001600160a01b0385166000908152602460205260409020541561103057506001600160a01b0384166000908152602460205260409020545b602c546000906110404384612f68565b61104a9190613cba565b602e549091506110649061105e8388612f9b565b90612fe0565b935050505b6001600160a01b03811660009081526002602052604090205460ff16156110a05761109384612482565b6110a05760009250600091505b6110aa8284613c82565b949350505050565b600080805260208190527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5546005546110eb9190613cd9565b905090565b6110f8612c5a565b6001600160a01b0316611109611f93565b6001600160a01b03161461112f5760405162461bcd60e51b8152600401610f7a90613a77565b6010949094556011929092556014556015556012556000601355565b60165460009060ff16801561116257506019543410155b61117e5760405162461bcd60e51b8152600401610f7a90613b76565b6111923061118a612c5a565b601a54612c5e565b346001600160a01b0383166111a5612c5a565b6001600160a01b0316141580156111c457506001600160a01b03831615155b80156111d8575060006111d684611ac1565b115b156112715760006111fc61271061105e601854601954612f9b90919063ffffffff16565b9050600061121d61271061105e601754601a54612f9b90919063ffffffff16565b905061122a308683612c5e565b6112348383612f68565b6040519093506001600160a01b0386169083156108fc029084906000818181858888f1935050505015801561126d573d6000803e3d6000fd5b5050505b601e546001600160a01b03166112a457601b54601e80546001600160a01b0319166001600160a01b039092169190911790555b601e546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156112de573d6000803e3d6000fd5b5060019392505050565b60006112f5848484612c5e565b6001600160a01b038416600090815260046020526040812081611316612c5a565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050828110156113595760405162461bcd60e51b8152600401610f7a90613a2f565b61137485611365612c5a565b61136f8685613cd9565b612eb4565b506001949350505050565b601b546001600160a01b0316611393612c5a565b6001600160a01b031614806113c25750601c546001600160a01b03166113b7612c5a565b6001600160a01b0316145b6113de5760405162461bcd60e51b8152600401610f7a9061395e565b610ddc828261300b565b6001600160a01b031660009081526022602052604090205490565b601b546000906001600160a01b031661141a612c5a565b6001600160a01b031614806114495750601c546001600160a01b031661143e612c5a565b6001600160a01b0316145b6114655760405162461bcd60e51b8152600401610f7a9061395e565b601c546001600160a01b03161580159061148757506001600160a01b03821615155b6114a35760405162461bcd60e51b8152600401610f7a9061395e565b50601c80546001600160a01b0383166001600160a01b03199091161790556001919050565b601654602054601f5460ff8084169361010090041691904360008080806114f061072c612c5a565b9350601954925060185491506017549050909192939495969798565b601290565b611519612c5a565b6001600160a01b031661152a611f93565b6001600160a01b0316146115505760405162461bcd60e51b8152600401610f7a90613a77565b602b91909155602d55565b6000610f31611568612c5a565b848460046000611576612c5a565b6001600160a01b03908116825260208083019390935260409182016000908120918b168152925290205461136f9190613c82565b6115b2612c5a565b6001600160a01b03166115c3611f93565b6001600160a01b0316146115e95760405162461bcd60e51b8152600401610f7a90613a77565b602780546001600160a01b0319166001600160a01b0392909216919091179055565b602754602954602a5460ff600160a01b8404811693600160a81b900416919060009081908190819061163e866001613cba565b6116489190613c9a565b602f546027549195506001600160a01b0390811694501691508261166e575060006116fe565b602854602f54604051636651f41960e11b81526001600160a01b039091169063cca3e832906116a190309060040161369c565b60206040518083038186803b1580156116b957600080fd5b505afa1580156116cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f191906135a7565b6116fb9190613c9a565b90505b90919293949596565b611718611712612c5a565b82613038565b50565b601054601154601254601354601454601554909192939495565b60016000611741612c5a565b6001600160a01b0316815260208101919091526040016000205460ff166117b257600854801561171857806001806000611779612c5a565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055610ddc6117ac612c5a565b8261311e565b565b6117bc612c5a565b6001600160a01b03166117cd611f93565b6001600160a01b0316146117f35760405162461bcd60e51b8152600401610f7a90613a77565b6001600160a01b0382166118195760405162461bcd60e51b8152600401610f7a90613aac565b610ddc82826131d2565b61182b612c5a565b6001600160a01b031661183c611f93565b6001600160a01b0316146118625760405162461bcd60e51b8152600401610f7a90613a77565b602f80546001600160a01b0319166001600160a01b0392909216919091179055565b61188c612c5a565b6001600160a01b031661189d611f93565b6001600160a01b0316146118c35760405162461bcd60e51b8152600401610f7a90613a77565b602955565b600043601054111580156118de57506011544311155b6118e757600080fd5b66071afd498d000034101561190e5760405162461bcd60e51b8152600401610f7a90613b76565b60125460135410806119205750601254155b61192957600080fd5b60003490506000670de0b6b3a7640000826015546119479190613cba565b6119519190613c9a565b60138054919250600061196383613d2b565b9091555050336001600160a01b03851614801590611988575061198584611ac1565b15155b801561199c57506001600160a01b03841615155b156119ac576119ac308583612c5e565b6119b7303383612c5e565b601e546001600160a01b03166119ea57601b54601e80546001600160a01b0319166001600160a01b039092169190911790555b601e546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015611374573d6000803e3d6000fd5b3360009081526002602052604090205460ff16611a4057600080fd5b6000611a4b336113e8565b90508015611a72573360009081526026602052604090205460ff16611a7257611a7261249d565b6000611a7d33612482565b905060008111611a8c57600080fd5b611a963343613269565b336000818152602660205260409020805460ff19169055611ab79082613285565b610ddc3382613038565b6001600160a01b03811660009081526002602052604081205460ff16611aef57611aea826132ea565b611af2565b60005b6001600160a01b03831660009081526026602052604090205460ff16611b2057611b1b836126d7565b611b23565b60005b6001600160a01b03841660009081526001602052604090205460ff16611b5157611b4c84611f02565b611b54565b60005b611b5d85612482565b611b679190613c82565b611b719190613c82565b610f359190613c82565b6000611b85612c5a565b6001600160a01b0316611b96611f93565b6001600160a01b031614611bbc5760405162461bcd60e51b8152600401610f7a90613a77565b6001600160a01b038216611be25760405162461bcd60e51b8152600401610f7a9061395e565b50601e80546001600160a01b0383166001600160a01b03199091161790556001919050565b611c0f612c5a565b6001600160a01b0316611c20611f93565b6001600160a01b031614611c465760405162461bcd60e51b8152600401610f7a90613a77565b6009546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600980546001600160a01b0319169055565b6000611c9b33612482565b905060008111611caa57600080fd5b611cb43343613391565b50336000908152600260205260409020805460ff19169055565b611cd6612c5a565b6001600160a01b0316611ce7611f93565b6001600160a01b031614611d0d5760405162461bcd60e51b8152600401610f7a90613a77565b600b93909355600c91909155600f55600d556000600e55565b6000610f31611d33612c5a565b84846133ad565b6000611d44612c5a565b6001600160a01b0316611d55611f93565b6001600160a01b031614611d7b5760405162461bcd60e51b8152600401610f7a90613a77565b8260ff1660031415611d9b576016805460ff191660018414179055610f31565b8260ff1660041415611dc0576016805461ff0019166001841461010002179055610f31565b8260ff1660051415611dd6576018829055610f31565b8260ff1660061415611dec576019829055610f31565b8260ff1660071415611e0257601a829055610f31565b8260ff1660081415611e1857601f829055610f31565b8260ff1660091415611e2e576020829055610f31565b8260ff16600a1415610f31575060175550600190565b600034118015611e5b575066038d7ea4c680003410155b15611e7f573360009081526002602052604090205460ff16611e7f57611e7f6125ac565b602754600160c01b900460ff161515600114156117b257601e546001600160a01b0316611ec957601b54601e80546001600160a01b0319166001600160a01b039092169190911790555b601e546040516001600160a01b03909116903480156108fc02916000818181858888f19350505050158015611718573d6000803e3d6000fd5b6001600160a01b03811660009081526001602052604081205460ff16611f2757506008545b6001600160a01b03821660009081526001602052604090205460ff1615610e8657506000919050565b600034118015611f67575066038d7ea4c680003410155b15611e7f573360009081526002602052604090205460ff16611f8b57611f8b6125ac565b611e7f611a24565b6009546001600160a01b031690565b600034118015611fb9575066038d7ea4c680003410155b15611e7f573360009081526002602052604090205460ff16611fdd57611fdd6125ac565b611e7f611c90565b6000611fef612c5a565b6001600160a01b0316612000611f93565b6001600160a01b0316146120265760405162461bcd60e51b8152600401610f7a90613a77565b8260ff1660011415612051576027805460ff60b01b1916831515600114600160b01b02179055610f31565b8260ff1660021415612078576027805460ff60b81b19168315600160b81b02179055610f31565b8260ff1660031415610f315760278054600160c01b6001851515140260ff60c01b1990911617905550600192915050565b6120b1612c5a565b6001600160a01b03166120c2611f93565b6001600160a01b0316146120e85760405162461bcd60e51b8152600401610f7a90613a77565b604051636651f41960e11b8152829082906001600160a01b0383169063cca3e8329061211890309060040161369c565b60206040518083038186803b15801561213057600080fd5b505afa158015612144573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061216891906135a7565b10156121865760405162461bcd60e51b8152600401610f7a9061384f565b60405163a9059cbb60e01b81526001600160a01b0382169063a9059cbb906121b490339086906004016136d4565b602060405180830381600087803b1580156121ce57600080fd5b505af11580156121e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122069190613573565b50505050565b606060078054610e9a90613cf0565b6001600160a01b0381161580159061224d5750601c546001600160a01b0316612242612c5a565b6001600160a01b0316145b6122695760405162461bcd60e51b8152600401610f7a9061395e565b601e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000612295612c5a565b6001600160a01b03166122a6611f93565b6001600160a01b0316146122cc5760405162461bcd60e51b8152600401610f7a90613a77565b610e826122d7612c5a565b8361311e565b600080600460006122ec612c5a565b6001600160a01b03908116825260208083019390935260409182016000908120918816815292529020549050828110156123385760405162461bcd60e51b8152600401610f7a90613ba4565b6112de612343612c5a565b8561136f8685613cd9565b6000610f3161235b612c5a565b8484612c5e565b600061236c612c5a565b6001600160a01b031661237d611f93565b6001600160a01b0316146123a35760405162461bcd60e51b8152600401610f7a90613a77565b6001600160a01b0383166123c95760405162461bcd60e51b8152600401610f7a90613be9565b610f318383613285565b6000341180156123ea575066038d7ea4c680003410155b15611e7f573360009081526026602052604090205460ff16611e7f57611e7f61249d565b60235481565b61241c612c5a565b6001600160a01b031661242d611f93565b6001600160a01b0316146124535760405162461bcd60e51b8152600401610f7a90613a77565b6040513390819083156108fc029084906000818181858888f19350505050158015610dda573d6000803e3d6000fd5b6001600160a01b031660009081526020819052604090205490565b3360009081526026602052604090205460ff16156124ba57600080fd5b60006124c5336113e8565b9050600081116124d457600080fd5b336000908152602560205260409020546124ed57612516565b33600090815260256020526040902054156125165733600090815260256020526040902054600b555b6000602b54612530600b5443612f6890919063ffffffff16565b61253a9190613cba565b90506000612557602d5461105e8585612f9b90919063ffffffff16565b905060006125658285613c82565b336000818152602660205260409020805460ff1916600117905590915061258c90856131d2565b612206338261311e565b600b54600c54600d54600e54600f549091929394565b60006125b733612482565b9050600081116125c657600080fd5b336000908152602460205260409020546125e35743600b5561260c565b336000908152602460205260409020541561260c5733600090815260246020526040902054600b555b6000602c54612626600b5443612f6890919063ffffffff16565b6126309190613cba565b9050600061264d602e5461105e8585612f9b90919063ffffffff16565b6027549091508190600160b01b900460ff16151560011415612688573360009081526001602052604090205460ff1661268857612688611735565b336000818152600260205260409020805460ff19166001179055612206908261311e565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b6001600160a01b0381166000908152602660205260408120548190839060ff16612794576000612706856113e8565b111561279457612715846113e8565b600b546001600160a01b038616600090815260256020526040902054919450901561275557506001600160a01b0384166000908152602560205260409020545b602b546000906127654384612f68565b61276f9190613cba565b602d549091506127839061105e8388612f9b565b935061278f8486613c82565b945050505b6001600160a01b03811660009081526026602052604090205460ff161561284e5760006127c0856113e8565b111561284e576127cf846113e8565b600b546001600160a01b038616600090815260256020526040902054919450901561280f57506001600160a01b0384166000908152602560205260409020545b602b5460009061281f4384612f68565b6128299190613cba565b602d5490915061283d9061105e8388612f9b565b93506128498486613c82565b945050505b5050919050565b600061285f612c5a565b6001600160a01b0316612870611f93565b6001600160a01b0316146128965760405162461bcd60e51b8152600401610f7a90613a77565b8260ff16600114156128c1576027805460ff60a01b1916831515600114600160a01b02179055610f31565b8260ff16600214156128e8576027805460ff60a01b19168315600160a01b02179055610f31565b8260ff1660031415610f315760278054600160a81b6001851515140260ff60a81b1990911617905550600192915050565b6027546001600160a01b031681565b612930612c5a565b6001600160a01b0316612941611f93565b6001600160a01b0316146129675760405162461bcd60e51b8152600401610f7a90613a77565b60405133904780156108fc02916000818181858888f19350505050158015611718573d6000803e3d6000fd5b601654600090610100900460ff1680156129af5750601f544311155b6129cb5760405162461bcd60e51b8152600401610f7a90613b76565b662386f26fc100003410156129f25760405162461bcd60e51b8152600401610f7a90613b76565b6020543490600090612a05908390612f9b565b9050612a1330610d4f612c5a565b836001600160a01b0316612a25612c5a565b6001600160a01b031614158015612a4457506001600160a01b03841615155b8015612a5857506000612a5685611ac1565b115b156119b7576000612a7a61271061105e60185486612f9b90919063ffffffff16565b90506000612a9961271061105e60175486612f9b90919063ffffffff16565b9050612aa6308783612c5e565b612ab08483612f68565b6040519094506001600160a01b0387169083156108fc029084906000818181858888f19350505050158015612ae9573d6000803e3d6000fd5b505050601e546001600160a01b03166119ea57601b54601e80546001600160a01b0319166001600160a01b03928316179081905560405191169083156108fc029084906000818181858888f19350505050158015611374573d6000803e3d6000fd5b612b53612c5a565b6001600160a01b0316612b64611f93565b6001600160a01b031614612b8a5760405162461bcd60e51b8152600401610f7a90613a77565b6001600160a01b038116612bb05760405162461bcd60e51b8152600401610f7a90613890565b6009546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b612c14612c5a565b6001600160a01b0316612c25611f93565b6001600160a01b031614612c4b5760405162461bcd60e51b8152600401610f7a90613a77565b600855565b6117b23334610abc565b3390565b6001600160a01b038316612c845760405162461bcd60e51b8152600401610f7a90613aed565b6001600160a01b038216612caa5760405162461bcd60e51b8152600401610f7a906137ca565b6001600160a01b03831660009081526003602052604090205460ff16600114801590612cf357506001600160a01b03831660009081526003602081905260409091205460ff1614155b8015612d1b57506001600160a01b03821660009081526003602052604090205460ff16600214155b8015612d4457506001600160a01b03821660009081526003602081905260409091205460ff1614155b612d605760405162461bcd60e51b8152600401610f7a90613b76565b3360009081526001602052604090205460ff16612d7f57612d7f611735565b60026000612d8b612c5a565b6001600160a01b0316815260208101919091526040016000205460ff16612de357600160026000612dba612c5a565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790555b6001600160a01b03831660009081526020819052604090205481811015612e1c5760405162461bcd60e51b8152600401610f7a90613918565b612e268282613cd9565b6001600160a01b038086166000908152602081905260408082209390935590851681529081208054849290612e5c908490613c82565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612ea69190613c20565b60405180910390a350505050565b6001600160a01b038316612eda5760405162461bcd60e51b8152600401610f7a90613b32565b6001600160a01b038216612f005760405162461bcd60e51b8152600401610f7a906138d6565b6001600160a01b0380841660008181526004602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590612f5b908590613c20565b60405180910390a3505050565b600082821115612f8a5760405162461bcd60e51b8152600401610f7a90613980565b612f948284613cd9565b9392505050565b600082612faa57506000610f35565b6000612fb68385613cba565b905082612fc38583613c9a565b14612f945760405162461bcd60e51b8152600401610f7a906139ee565b60008082116130015760405162461bcd60e51b8152600401610f7a906139b7565b612f948284613c9a565b6001600160a01b03919091166000908152600360205260409020805460ff191660ff909216919091179055565b6001600160a01b03821661305e5760405162461bcd60e51b8152600401610f7a90613aac565b61306a82600083610dda565b6001600160a01b038216600090815260208190526040902054818110156130a35760405162461bcd60e51b8152600401610f7a9061380d565b6130ad8282613cd9565b6001600160a01b038416600090815260208190526040812091909155600580548492906130db908490613cd9565b90915550506040516000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612f5b908690613c20565b6001600160a01b0382166131445760405162461bcd60e51b8152600401610f7a90613be9565b80600560008282546131569190613c82565b90915550506001600160a01b03821660009081526020819052604081208054839290613183908490613c82565b90915550506040516001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906131c6908590613c20565b60405180910390a35050565b6001600160a01b0382166131f85760405162461bcd60e51b8152600401610f7a90613aac565b6001600160a01b038216600090815260226020526040902054818110156132315760405162461bcd60e51b8152600401610f7a9061380d565b61323b8282613cd9565b6001600160a01b038416600090815260226020526040812091909155602380548492906130db908490613cd9565b6001600160a01b03909116600090815260256020526040902055565b6001600160a01b0382166132ab5760405162461bcd60e51b8152600401610f7a90613be9565b80602360008282546132bd9190613c82565b90915550506001600160a01b03821660009081526022602052604081208054839290613183908490613c82565b6000806132f683612482565b600b546001600160a01b0385166000908152602460205260409020549193509061332157504361335a565b6001600160a01b0384166000908152602460205260409020541561335a57506001600160a01b0383166000908152602460205260409020545b602c5460009061336a4384612f68565b6133749190613cba565b602e549091506133889061105e8387612f9b565b95945050505050565b6001600160a01b03909116600090815260246020526040902055565b6001600160a01b0383166133d35760405162461bcd60e51b8152600401610f7a90613aed565b6001600160a01b0382166133f95760405162461bcd60e51b8152600401610f7a906137ca565b6001600160a01b038316600090815260226020526040902054818110156134325760405162461bcd60e51b8152600401610f7a90613918565b61343c8282613cd9565b6001600160a01b038086166000908152602260205260408082209390935590851681529081208054849290612e5c908490613c82565b80356001600160a01b0381168114610e8657600080fd5b803560ff81168114610e8657600080fd5b6000602082840312156134ab578081fd5b612f9482613472565b600080604083850312156134c6578081fd5b6134cf83613472565b91506134dd60208401613472565b90509250929050565b6000806000606084860312156134fa578081fd5b61350384613472565b925061351160208501613472565b9150604084013590509250925092565b60008060408385031215613533578182fd5b61353c83613472565b946020939093013593505050565b6000806040838503121561355c578182fd5b61356583613472565b91506134dd60208401613489565b600060208284031215613584578081fd5b8151612f9481613d5c565b6000602082840312156135a0578081fd5b5035919050565b6000602082840312156135b8578081fd5b5051919050565b600080604083850312156135d1578182fd5b50508035926020909101359150565b600080600080608085870312156135f5578081fd5b5050823594602084013594506040840135936060013592509050565b600080600080600060a08688031215613628578081fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000806040838503121561365d578182fd5b61366683613489565b9150602083013561367681613d5c565b809150509250929050565b60008060408385031215613693578182fd5b61353c83613489565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b96151587529415156020870152604086019390935260608501919091526001600160a01b0390811660808501521660a083015260c082015260e00190565b9815158952961515602089015260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6000602080835283518082850152825b818110156137a357858101830151858201604001528201613787565b818111156137b45783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526022908201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604082015261636560f01b606082015260800190565b60208082526021908201527f43616e6e6f74207769746864726177206d6f7265207468616e2062616c616e636040820152606560f81b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b6020808252600890820152677265636f7665727960c01b604082015260600190565b6020808252601e908201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604082015260600190565b6020808252601a908201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526028908201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616040820152676c6c6f77616e636560c01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526021908201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252601490820152735472616e73616374696f6e207265636f7665727960601b604082015260600190565b60208082526025908201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604082015264207a65726f60d81b606082015260800190565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b90815260200190565b948552602085019390935260408401919091526060830152608082015260a00190565b958652602086019490945260408501929092526060840152608083015260a082015260c00190565b60ff91909116815260200190565b60008219821115613c9557613c95613d46565b500190565b600082613cb557634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615613cd457613cd4613d46565b500290565b600082821015613ceb57613ceb613d46565b500390565b600281046001821680613d0457607f821691505b60208210811415613d2557634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613d3f57613d3f613d46565b5060010190565b634e487b7160e01b600052601160045260246000fd5b801515811461171857600080fdfea26469706673582212203f20f5feeae50247e795ccff252276007a6728e6ab480e0686d8ee0313e9ecfc64736f6c63430008000033
Deployed Bytecode
0x6080604052600436106103b15760003560e01c806377949d59116101e7578063ada6d20a1161010d578063e072dbae116100a0578063f088d5471161006f578063f088d54714610a61578063f2fde38b14610a74578063f5ae89f214610a94578063fde4976d14610ab4576103c2565b8063e072dbae146109f7578063e28afb2314610a17578063e8edc81614610a37578063ebb689a114610a4c576103c2565b8063d105c952116100dc578063d105c95214610987578063d69b197f1461099c578063dc41a3f9146109c2578063dd62ed3e146109d7576103c2565b8063ada6d20a1461092a578063b59ca80714610932578063c0fe1af814610947578063cca3e83214610967576103c2565b806393fab31011610185578063a0712d6811610154578063a0712d68146108aa578063a457c2d7146108ca578063a9059cbb146108ea578063ab27be201461090a576103c2565b806393fab310146108355780639523c0c41461085557806395d89b4114610875578063a01454a21461088a576103c2565b8063873d6db0116101c1578063873d6db0146107e35780638a94a173146108035780638da5cb5b1461080b57806390aab5511461082d576103c2565b806377949d591461079b57806378de44b6146107bb578063811e5fee146107db576103c2565b806339509351116102d7578063583ec0bd1161026a578063712f4f9911610239578063712f4f9914610731578063715018a6146107515780637292e5cf1461076657806376f25a841461077b576103c2565b8063583ec0bd146106c95780636643ef9f146106e95780636ee98114146106fc57806370a0823114610711576103c2565b80634d1d03d1116102a65780634d1d03d11461064d5780634e71d92d14610674578063565b26401461068957806358352b81146106a9576103c2565b806339509351146105c55780633bd26c35146105e55780634252d8001461060557806342966c681461062d576103c2565b806321860a051161034f5780632ba9837b1161031e5780632ba9837b146105395780632e97766d14610559578063313ce567146105835780633286333d146105a5576103c2565b806321860a05146104c657806323b872dd146104d9578063290287dc146104f95780632b366be414610519576103c2565b80630c02065e1161038b5780630c02065e146104445780631447b19b1461046457806318160ddd146104915780631dc4f9ea146104a6576103c2565b8063069f5bdd146103cc57806306fdde0314610402578063095ea7b314610424576103c2565b366103c2576103c03334610abc565b005b6103c03334610abc565b3480156103d857600080fd5b506103ec6103e736600461349a565b610de0565b6040516103f991906136ed565b60405180910390f35b34801561040e57600080fd5b50610417610e8b565b6040516103f99190613777565b34801561043057600080fd5b506103ec61043f366004613521565b610f1d565b34801561045057600080fd5b506103c061045f3660046135bf565b610f3b565b34801561047057600080fd5b5061048461047f36600461349a565b610f8e565b6040516103f99190613c20565b34801561049d57600080fd5b506104846110b2565b3480156104b257600080fd5b506103c06104c1366004613611565b6110f0565b6103ec6104d436600461349a565b61114b565b3480156104e557600080fd5b506103ec6104f43660046134e6565b6112e8565b34801561050557600080fd5b506103c061051436600461354a565b61137f565b34801561052557600080fd5b5061048461053436600461349a565b6113e8565b34801561054557600080fd5b506103ec61055436600461349a565b611403565b34801561056557600080fd5b5061056e6114c8565b6040516103f999989796959493929190613736565b34801561058f57600080fd5b5061059861150c565b6040516103f99190613c74565b3480156105b157600080fd5b506103c06105c03660046135bf565b611511565b3480156105d157600080fd5b506103ec6105e0366004613521565b61155b565b3480156105f157600080fd5b506103c061060036600461349a565b6115aa565b34801561061157600080fd5b5061061a61160b565b6040516103f997969594939291906136f8565b34801561063957600080fd5b506103c061064836600461358f565b611707565b34801561065957600080fd5b5061066261171b565b6040516103f996959493929190613c4c565b34801561068057600080fd5b506103c0611735565b34801561069557600080fd5b506103c06106a4366004613521565b6117b4565b3480156106b557600080fd5b506103c06106c436600461349a565b611823565b3480156106d557600080fd5b506103c06106e436600461358f565b611884565b6103ec6106f736600461349a565b6118c8565b34801561070857600080fd5b506103c0611a24565b34801561071d57600080fd5b5061048461072c36600461349a565b611ac1565b34801561073d57600080fd5b506103ec61074c36600461349a565b611b7b565b34801561075d57600080fd5b506103c0611c07565b34801561077257600080fd5b506103c0611c90565b34801561078757600080fd5b506103c06107963660046135e0565b611cce565b3480156107a757600080fd5b506103ec6107b6366004613521565b611d26565b3480156107c757600080fd5b506103ec6107d6366004613681565b611d3a565b6103c0611e44565b3480156107ef57600080fd5b506104846107fe36600461349a565b611f02565b6103c0611f50565b34801561081757600080fd5b50610820611f93565b6040516103f9919061369c565b6103c0611fa2565b34801561084157600080fd5b506103ec61085036600461364b565b611fe5565b34801561086157600080fd5b506103c0610870366004613521565b6120a9565b34801561088157600080fd5b5061041761220c565b34801561089657600080fd5b506103c06108a536600461349a565b61221b565b3480156108b657600080fd5b506103ec6108c536600461358f565b61228b565b3480156108d657600080fd5b506103ec6108e5366004613521565b6122dd565b3480156108f657600080fd5b506103ec610905366004613521565b61234e565b34801561091657600080fd5b506103ec610925366004613521565b612362565b6103c06123d3565b34801561093e57600080fd5b5061048461240e565b34801561095357600080fd5b506103c061096236600461358f565b612414565b34801561097357600080fd5b5061048461098236600461349a565b612482565b34801561099357600080fd5b506103c061249d565b3480156109a857600080fd5b506109b1612596565b6040516103f9959493929190613c29565b3480156109ce57600080fd5b506103c06125ac565b3480156109e357600080fd5b506104846109f23660046134b4565b6126ac565b348015610a0357600080fd5b50610484610a1236600461349a565b6126d7565b348015610a2357600080fd5b506103ec610a3236600461364b565b612855565b348015610a4357600080fd5b50610820612919565b348015610a5857600080fd5b506103c0612928565b6103ec610a6f36600461349a565b612993565b348015610a8057600080fd5b506103c0610a8f36600461349a565b612b4b565b348015610aa057600080fd5b506103c0610aaf36600461358f565b612c0c565b6103c0612c50565b602754600160a01b900460ff16151560011415610d5757602f546001600160a01b031615801590610af4575066038d7ea4c680003410155b15610cda576000602a5460295483610b0c9190613cba565b610b169190613c9a565b602f54604051636651f41960e11b81529192506001600160a01b03169063cca3e83290610b4790309060040161369c565b60206040518083038186803b158015610b5f57600080fd5b505afa158015610b73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b9791906135a7565b8111610cd4576027546001600160a01b031615610c3e57602f546027546040516323b872dd60e01b81526001600160a01b03928316926323b872dd92610be692911690879086906004016136b0565b602060405180830381600087803b158015610c0057600080fd5b505af1158015610c14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c389190613573565b50610cd4565b6027546001600160a01b0316610cd457602f5460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610c8090869085906004016136d4565b602060405180830381600087803b158015610c9a57600080fd5b505af1158015610cae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd29190613573565b505b50610d57565b602f546001600160a01b0316158015610cfa575066038d7ea4c680003410155b15610d57576000602a5460295483610d129190613cba565b610d1c9190613c9a565b601654909150610100900460ff168015610d3e5750610d3a30611ac1565b8111155b15610d5557610d5530610d4f612c5a565b83612c5e565b505b602754600160a81b900460ff16151560011415610ddc57601e546001600160a01b0316610da157601b54601e80546001600160a01b0319166001600160a01b039092169190911790555b601e546040516001600160a01b03909116903480156108fc02916000818181858888f19350505050158015610dda573d6000803e3d6000fd5b505b5050565b600043600b5411158015610df65750600c544311155b610dff57600080fd5b600d54600e541080610e115750600d54155b610e1a57600080fd5b600e8054906000610e2a83613d2b565b9091555050336001600160a01b03831614801590610e4f5750610e4c82611ac1565b15155b8015610e6357506001600160a01b03821615155b15610e7557610e753083600f54612c5e565b610e823033600f54612c5e565b5060015b919050565b606060068054610e9a90613cf0565b80601f0160208091040260200160405190810160405280929190818152602001828054610ec690613cf0565b8015610f135780601f10610ee857610100808354040283529160200191610f13565b820191906000526020600020905b815481529060010190602001808311610ef657829003601f168201915b5050505050905090565b6000610f31610f2a612c5a565b8484612eb4565b5060015b92915050565b610f43612c5a565b6001600160a01b0316610f54611f93565b6001600160a01b031614610f835760405162461bcd60e51b8152600401610f7a90613a77565b60405180910390fd5b602c91909155602e55565b6001600160a01b0381166000908152600260205260408120548190839060ff16611069576000610fbd85612482565b111561106957610fcc84612482565b600b546001600160a01b03861660009081526024602052604090205491945090610ff7575043611030565b6001600160a01b0385166000908152602460205260409020541561103057506001600160a01b0384166000908152602460205260409020545b602c546000906110404384612f68565b61104a9190613cba565b602e549091506110649061105e8388612f9b565b90612fe0565b935050505b6001600160a01b03811660009081526002602052604090205460ff16156110a05761109384612482565b6110a05760009250600091505b6110aa8284613c82565b949350505050565b600080805260208190527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5546005546110eb9190613cd9565b905090565b6110f8612c5a565b6001600160a01b0316611109611f93565b6001600160a01b03161461112f5760405162461bcd60e51b8152600401610f7a90613a77565b6010949094556011929092556014556015556012556000601355565b60165460009060ff16801561116257506019543410155b61117e5760405162461bcd60e51b8152600401610f7a90613b76565b6111923061118a612c5a565b601a54612c5e565b346001600160a01b0383166111a5612c5a565b6001600160a01b0316141580156111c457506001600160a01b03831615155b80156111d8575060006111d684611ac1565b115b156112715760006111fc61271061105e601854601954612f9b90919063ffffffff16565b9050600061121d61271061105e601754601a54612f9b90919063ffffffff16565b905061122a308683612c5e565b6112348383612f68565b6040519093506001600160a01b0386169083156108fc029084906000818181858888f1935050505015801561126d573d6000803e3d6000fd5b5050505b601e546001600160a01b03166112a457601b54601e80546001600160a01b0319166001600160a01b039092169190911790555b601e546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156112de573d6000803e3d6000fd5b5060019392505050565b60006112f5848484612c5e565b6001600160a01b038416600090815260046020526040812081611316612c5a565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050828110156113595760405162461bcd60e51b8152600401610f7a90613a2f565b61137485611365612c5a565b61136f8685613cd9565b612eb4565b506001949350505050565b601b546001600160a01b0316611393612c5a565b6001600160a01b031614806113c25750601c546001600160a01b03166113b7612c5a565b6001600160a01b0316145b6113de5760405162461bcd60e51b8152600401610f7a9061395e565b610ddc828261300b565b6001600160a01b031660009081526022602052604090205490565b601b546000906001600160a01b031661141a612c5a565b6001600160a01b031614806114495750601c546001600160a01b031661143e612c5a565b6001600160a01b0316145b6114655760405162461bcd60e51b8152600401610f7a9061395e565b601c546001600160a01b03161580159061148757506001600160a01b03821615155b6114a35760405162461bcd60e51b8152600401610f7a9061395e565b50601c80546001600160a01b0383166001600160a01b03199091161790556001919050565b601654602054601f5460ff8084169361010090041691904360008080806114f061072c612c5a565b9350601954925060185491506017549050909192939495969798565b601290565b611519612c5a565b6001600160a01b031661152a611f93565b6001600160a01b0316146115505760405162461bcd60e51b8152600401610f7a90613a77565b602b91909155602d55565b6000610f31611568612c5a565b848460046000611576612c5a565b6001600160a01b03908116825260208083019390935260409182016000908120918b168152925290205461136f9190613c82565b6115b2612c5a565b6001600160a01b03166115c3611f93565b6001600160a01b0316146115e95760405162461bcd60e51b8152600401610f7a90613a77565b602780546001600160a01b0319166001600160a01b0392909216919091179055565b602754602954602a5460ff600160a01b8404811693600160a81b900416919060009081908190819061163e866001613cba565b6116489190613c9a565b602f546027549195506001600160a01b0390811694501691508261166e575060006116fe565b602854602f54604051636651f41960e11b81526001600160a01b039091169063cca3e832906116a190309060040161369c565b60206040518083038186803b1580156116b957600080fd5b505afa1580156116cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f191906135a7565b6116fb9190613c9a565b90505b90919293949596565b611718611712612c5a565b82613038565b50565b601054601154601254601354601454601554909192939495565b60016000611741612c5a565b6001600160a01b0316815260208101919091526040016000205460ff166117b257600854801561171857806001806000611779612c5a565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055610ddc6117ac612c5a565b8261311e565b565b6117bc612c5a565b6001600160a01b03166117cd611f93565b6001600160a01b0316146117f35760405162461bcd60e51b8152600401610f7a90613a77565b6001600160a01b0382166118195760405162461bcd60e51b8152600401610f7a90613aac565b610ddc82826131d2565b61182b612c5a565b6001600160a01b031661183c611f93565b6001600160a01b0316146118625760405162461bcd60e51b8152600401610f7a90613a77565b602f80546001600160a01b0319166001600160a01b0392909216919091179055565b61188c612c5a565b6001600160a01b031661189d611f93565b6001600160a01b0316146118c35760405162461bcd60e51b8152600401610f7a90613a77565b602955565b600043601054111580156118de57506011544311155b6118e757600080fd5b66071afd498d000034101561190e5760405162461bcd60e51b8152600401610f7a90613b76565b60125460135410806119205750601254155b61192957600080fd5b60003490506000670de0b6b3a7640000826015546119479190613cba565b6119519190613c9a565b60138054919250600061196383613d2b565b9091555050336001600160a01b03851614801590611988575061198584611ac1565b15155b801561199c57506001600160a01b03841615155b156119ac576119ac308583612c5e565b6119b7303383612c5e565b601e546001600160a01b03166119ea57601b54601e80546001600160a01b0319166001600160a01b039092169190911790555b601e546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015611374573d6000803e3d6000fd5b3360009081526002602052604090205460ff16611a4057600080fd5b6000611a4b336113e8565b90508015611a72573360009081526026602052604090205460ff16611a7257611a7261249d565b6000611a7d33612482565b905060008111611a8c57600080fd5b611a963343613269565b336000818152602660205260409020805460ff19169055611ab79082613285565b610ddc3382613038565b6001600160a01b03811660009081526002602052604081205460ff16611aef57611aea826132ea565b611af2565b60005b6001600160a01b03831660009081526026602052604090205460ff16611b2057611b1b836126d7565b611b23565b60005b6001600160a01b03841660009081526001602052604090205460ff16611b5157611b4c84611f02565b611b54565b60005b611b5d85612482565b611b679190613c82565b611b719190613c82565b610f359190613c82565b6000611b85612c5a565b6001600160a01b0316611b96611f93565b6001600160a01b031614611bbc5760405162461bcd60e51b8152600401610f7a90613a77565b6001600160a01b038216611be25760405162461bcd60e51b8152600401610f7a9061395e565b50601e80546001600160a01b0383166001600160a01b03199091161790556001919050565b611c0f612c5a565b6001600160a01b0316611c20611f93565b6001600160a01b031614611c465760405162461bcd60e51b8152600401610f7a90613a77565b6009546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600980546001600160a01b0319169055565b6000611c9b33612482565b905060008111611caa57600080fd5b611cb43343613391565b50336000908152600260205260409020805460ff19169055565b611cd6612c5a565b6001600160a01b0316611ce7611f93565b6001600160a01b031614611d0d5760405162461bcd60e51b8152600401610f7a90613a77565b600b93909355600c91909155600f55600d556000600e55565b6000610f31611d33612c5a565b84846133ad565b6000611d44612c5a565b6001600160a01b0316611d55611f93565b6001600160a01b031614611d7b5760405162461bcd60e51b8152600401610f7a90613a77565b8260ff1660031415611d9b576016805460ff191660018414179055610f31565b8260ff1660041415611dc0576016805461ff0019166001841461010002179055610f31565b8260ff1660051415611dd6576018829055610f31565b8260ff1660061415611dec576019829055610f31565b8260ff1660071415611e0257601a829055610f31565b8260ff1660081415611e1857601f829055610f31565b8260ff1660091415611e2e576020829055610f31565b8260ff16600a1415610f31575060175550600190565b600034118015611e5b575066038d7ea4c680003410155b15611e7f573360009081526002602052604090205460ff16611e7f57611e7f6125ac565b602754600160c01b900460ff161515600114156117b257601e546001600160a01b0316611ec957601b54601e80546001600160a01b0319166001600160a01b039092169190911790555b601e546040516001600160a01b03909116903480156108fc02916000818181858888f19350505050158015611718573d6000803e3d6000fd5b6001600160a01b03811660009081526001602052604081205460ff16611f2757506008545b6001600160a01b03821660009081526001602052604090205460ff1615610e8657506000919050565b600034118015611f67575066038d7ea4c680003410155b15611e7f573360009081526002602052604090205460ff16611f8b57611f8b6125ac565b611e7f611a24565b6009546001600160a01b031690565b600034118015611fb9575066038d7ea4c680003410155b15611e7f573360009081526002602052604090205460ff16611fdd57611fdd6125ac565b611e7f611c90565b6000611fef612c5a565b6001600160a01b0316612000611f93565b6001600160a01b0316146120265760405162461bcd60e51b8152600401610f7a90613a77565b8260ff1660011415612051576027805460ff60b01b1916831515600114600160b01b02179055610f31565b8260ff1660021415612078576027805460ff60b81b19168315600160b81b02179055610f31565b8260ff1660031415610f315760278054600160c01b6001851515140260ff60c01b1990911617905550600192915050565b6120b1612c5a565b6001600160a01b03166120c2611f93565b6001600160a01b0316146120e85760405162461bcd60e51b8152600401610f7a90613a77565b604051636651f41960e11b8152829082906001600160a01b0383169063cca3e8329061211890309060040161369c565b60206040518083038186803b15801561213057600080fd5b505afa158015612144573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061216891906135a7565b10156121865760405162461bcd60e51b8152600401610f7a9061384f565b60405163a9059cbb60e01b81526001600160a01b0382169063a9059cbb906121b490339086906004016136d4565b602060405180830381600087803b1580156121ce57600080fd5b505af11580156121e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122069190613573565b50505050565b606060078054610e9a90613cf0565b6001600160a01b0381161580159061224d5750601c546001600160a01b0316612242612c5a565b6001600160a01b0316145b6122695760405162461bcd60e51b8152600401610f7a9061395e565b601e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000612295612c5a565b6001600160a01b03166122a6611f93565b6001600160a01b0316146122cc5760405162461bcd60e51b8152600401610f7a90613a77565b610e826122d7612c5a565b8361311e565b600080600460006122ec612c5a565b6001600160a01b03908116825260208083019390935260409182016000908120918816815292529020549050828110156123385760405162461bcd60e51b8152600401610f7a90613ba4565b6112de612343612c5a565b8561136f8685613cd9565b6000610f3161235b612c5a565b8484612c5e565b600061236c612c5a565b6001600160a01b031661237d611f93565b6001600160a01b0316146123a35760405162461bcd60e51b8152600401610f7a90613a77565b6001600160a01b0383166123c95760405162461bcd60e51b8152600401610f7a90613be9565b610f318383613285565b6000341180156123ea575066038d7ea4c680003410155b15611e7f573360009081526026602052604090205460ff16611e7f57611e7f61249d565b60235481565b61241c612c5a565b6001600160a01b031661242d611f93565b6001600160a01b0316146124535760405162461bcd60e51b8152600401610f7a90613a77565b6040513390819083156108fc029084906000818181858888f19350505050158015610dda573d6000803e3d6000fd5b6001600160a01b031660009081526020819052604090205490565b3360009081526026602052604090205460ff16156124ba57600080fd5b60006124c5336113e8565b9050600081116124d457600080fd5b336000908152602560205260409020546124ed57612516565b33600090815260256020526040902054156125165733600090815260256020526040902054600b555b6000602b54612530600b5443612f6890919063ffffffff16565b61253a9190613cba565b90506000612557602d5461105e8585612f9b90919063ffffffff16565b905060006125658285613c82565b336000818152602660205260409020805460ff1916600117905590915061258c90856131d2565b612206338261311e565b600b54600c54600d54600e54600f549091929394565b60006125b733612482565b9050600081116125c657600080fd5b336000908152602460205260409020546125e35743600b5561260c565b336000908152602460205260409020541561260c5733600090815260246020526040902054600b555b6000602c54612626600b5443612f6890919063ffffffff16565b6126309190613cba565b9050600061264d602e5461105e8585612f9b90919063ffffffff16565b6027549091508190600160b01b900460ff16151560011415612688573360009081526001602052604090205460ff1661268857612688611735565b336000818152600260205260409020805460ff19166001179055612206908261311e565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b6001600160a01b0381166000908152602660205260408120548190839060ff16612794576000612706856113e8565b111561279457612715846113e8565b600b546001600160a01b038616600090815260256020526040902054919450901561275557506001600160a01b0384166000908152602560205260409020545b602b546000906127654384612f68565b61276f9190613cba565b602d549091506127839061105e8388612f9b565b935061278f8486613c82565b945050505b6001600160a01b03811660009081526026602052604090205460ff161561284e5760006127c0856113e8565b111561284e576127cf846113e8565b600b546001600160a01b038616600090815260256020526040902054919450901561280f57506001600160a01b0384166000908152602560205260409020545b602b5460009061281f4384612f68565b6128299190613cba565b602d5490915061283d9061105e8388612f9b565b93506128498486613c82565b945050505b5050919050565b600061285f612c5a565b6001600160a01b0316612870611f93565b6001600160a01b0316146128965760405162461bcd60e51b8152600401610f7a90613a77565b8260ff16600114156128c1576027805460ff60a01b1916831515600114600160a01b02179055610f31565b8260ff16600214156128e8576027805460ff60a01b19168315600160a01b02179055610f31565b8260ff1660031415610f315760278054600160a81b6001851515140260ff60a81b1990911617905550600192915050565b6027546001600160a01b031681565b612930612c5a565b6001600160a01b0316612941611f93565b6001600160a01b0316146129675760405162461bcd60e51b8152600401610f7a90613a77565b60405133904780156108fc02916000818181858888f19350505050158015611718573d6000803e3d6000fd5b601654600090610100900460ff1680156129af5750601f544311155b6129cb5760405162461bcd60e51b8152600401610f7a90613b76565b662386f26fc100003410156129f25760405162461bcd60e51b8152600401610f7a90613b76565b6020543490600090612a05908390612f9b565b9050612a1330610d4f612c5a565b836001600160a01b0316612a25612c5a565b6001600160a01b031614158015612a4457506001600160a01b03841615155b8015612a5857506000612a5685611ac1565b115b156119b7576000612a7a61271061105e60185486612f9b90919063ffffffff16565b90506000612a9961271061105e60175486612f9b90919063ffffffff16565b9050612aa6308783612c5e565b612ab08483612f68565b6040519094506001600160a01b0387169083156108fc029084906000818181858888f19350505050158015612ae9573d6000803e3d6000fd5b505050601e546001600160a01b03166119ea57601b54601e80546001600160a01b0319166001600160a01b03928316179081905560405191169083156108fc029084906000818181858888f19350505050158015611374573d6000803e3d6000fd5b612b53612c5a565b6001600160a01b0316612b64611f93565b6001600160a01b031614612b8a5760405162461bcd60e51b8152600401610f7a90613a77565b6001600160a01b038116612bb05760405162461bcd60e51b8152600401610f7a90613890565b6009546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b612c14612c5a565b6001600160a01b0316612c25611f93565b6001600160a01b031614612c4b5760405162461bcd60e51b8152600401610f7a90613a77565b600855565b6117b23334610abc565b3390565b6001600160a01b038316612c845760405162461bcd60e51b8152600401610f7a90613aed565b6001600160a01b038216612caa5760405162461bcd60e51b8152600401610f7a906137ca565b6001600160a01b03831660009081526003602052604090205460ff16600114801590612cf357506001600160a01b03831660009081526003602081905260409091205460ff1614155b8015612d1b57506001600160a01b03821660009081526003602052604090205460ff16600214155b8015612d4457506001600160a01b03821660009081526003602081905260409091205460ff1614155b612d605760405162461bcd60e51b8152600401610f7a90613b76565b3360009081526001602052604090205460ff16612d7f57612d7f611735565b60026000612d8b612c5a565b6001600160a01b0316815260208101919091526040016000205460ff16612de357600160026000612dba612c5a565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790555b6001600160a01b03831660009081526020819052604090205481811015612e1c5760405162461bcd60e51b8152600401610f7a90613918565b612e268282613cd9565b6001600160a01b038086166000908152602081905260408082209390935590851681529081208054849290612e5c908490613c82565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612ea69190613c20565b60405180910390a350505050565b6001600160a01b038316612eda5760405162461bcd60e51b8152600401610f7a90613b32565b6001600160a01b038216612f005760405162461bcd60e51b8152600401610f7a906138d6565b6001600160a01b0380841660008181526004602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590612f5b908590613c20565b60405180910390a3505050565b600082821115612f8a5760405162461bcd60e51b8152600401610f7a90613980565b612f948284613cd9565b9392505050565b600082612faa57506000610f35565b6000612fb68385613cba565b905082612fc38583613c9a565b14612f945760405162461bcd60e51b8152600401610f7a906139ee565b60008082116130015760405162461bcd60e51b8152600401610f7a906139b7565b612f948284613c9a565b6001600160a01b03919091166000908152600360205260409020805460ff191660ff909216919091179055565b6001600160a01b03821661305e5760405162461bcd60e51b8152600401610f7a90613aac565b61306a82600083610dda565b6001600160a01b038216600090815260208190526040902054818110156130a35760405162461bcd60e51b8152600401610f7a9061380d565b6130ad8282613cd9565b6001600160a01b038416600090815260208190526040812091909155600580548492906130db908490613cd9565b90915550506040516000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612f5b908690613c20565b6001600160a01b0382166131445760405162461bcd60e51b8152600401610f7a90613be9565b80600560008282546131569190613c82565b90915550506001600160a01b03821660009081526020819052604081208054839290613183908490613c82565b90915550506040516001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906131c6908590613c20565b60405180910390a35050565b6001600160a01b0382166131f85760405162461bcd60e51b8152600401610f7a90613aac565b6001600160a01b038216600090815260226020526040902054818110156132315760405162461bcd60e51b8152600401610f7a9061380d565b61323b8282613cd9565b6001600160a01b038416600090815260226020526040812091909155602380548492906130db908490613cd9565b6001600160a01b03909116600090815260256020526040902055565b6001600160a01b0382166132ab5760405162461bcd60e51b8152600401610f7a90613be9565b80602360008282546132bd9190613c82565b90915550506001600160a01b03821660009081526022602052604081208054839290613183908490613c82565b6000806132f683612482565b600b546001600160a01b0385166000908152602460205260409020549193509061332157504361335a565b6001600160a01b0384166000908152602460205260409020541561335a57506001600160a01b0383166000908152602460205260409020545b602c5460009061336a4384612f68565b6133749190613cba565b602e549091506133889061105e8387612f9b565b95945050505050565b6001600160a01b03909116600090815260246020526040902055565b6001600160a01b0383166133d35760405162461bcd60e51b8152600401610f7a90613aed565b6001600160a01b0382166133f95760405162461bcd60e51b8152600401610f7a906137ca565b6001600160a01b038316600090815260226020526040902054818110156134325760405162461bcd60e51b8152600401610f7a90613918565b61343c8282613cd9565b6001600160a01b038086166000908152602260205260408082209390935590851681529081208054849290612e5c908490613c82565b80356001600160a01b0381168114610e8657600080fd5b803560ff81168114610e8657600080fd5b6000602082840312156134ab578081fd5b612f9482613472565b600080604083850312156134c6578081fd5b6134cf83613472565b91506134dd60208401613472565b90509250929050565b6000806000606084860312156134fa578081fd5b61350384613472565b925061351160208501613472565b9150604084013590509250925092565b60008060408385031215613533578182fd5b61353c83613472565b946020939093013593505050565b6000806040838503121561355c578182fd5b61356583613472565b91506134dd60208401613489565b600060208284031215613584578081fd5b8151612f9481613d5c565b6000602082840312156135a0578081fd5b5035919050565b6000602082840312156135b8578081fd5b5051919050565b600080604083850312156135d1578182fd5b50508035926020909101359150565b600080600080608085870312156135f5578081fd5b5050823594602084013594506040840135936060013592509050565b600080600080600060a08688031215613628578081fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000806040838503121561365d578182fd5b61366683613489565b9150602083013561367681613d5c565b809150509250929050565b60008060408385031215613693578182fd5b61353c83613489565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b96151587529415156020870152604086019390935260608501919091526001600160a01b0390811660808501521660a083015260c082015260e00190565b9815158952961515602089015260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6000602080835283518082850152825b818110156137a357858101830151858201604001528201613787565b818111156137b45783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526022908201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604082015261636560f01b606082015260800190565b60208082526021908201527f43616e6e6f74207769746864726177206d6f7265207468616e2062616c616e636040820152606560f81b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b6020808252600890820152677265636f7665727960c01b604082015260600190565b6020808252601e908201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604082015260600190565b6020808252601a908201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526028908201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616040820152676c6c6f77616e636560c01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526021908201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252601490820152735472616e73616374696f6e207265636f7665727960601b604082015260600190565b60208082526025908201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604082015264207a65726f60d81b606082015260800190565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b90815260200190565b948552602085019390935260408401919091526060830152608082015260a00190565b958652602086019490945260408501929092526060840152608083015260a082015260c00190565b60ff91909116815260200190565b60008219821115613c9557613c95613d46565b500190565b600082613cb557634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615613cd457613cd4613d46565b500290565b600082821015613ceb57613ceb613d46565b500390565b600281046001821680613d0457607f821691505b60208210811415613d2557634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613d3f57613d3f613d46565b5060010190565b634e487b7160e01b600052601160045260246000fd5b801515811461171857600080fdfea26469706673582212203f20f5feeae50247e795ccff252276007a6728e6ab480e0686d8ee0313e9ecfc64736f6c63430008000033
Deployed Bytecode Sourcemap
36045:27178:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45510:29;45517:10;45529:9;45510:6;:29::i;:::-;36045:27178;;45423:29;45430:10;45442:9;45423:6;:29::i;38105:429::-;;;;;;;;;;-1:-1:-1;38105:429:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23314:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;26687:169::-;;;;;;;;;;-1:-1:-1;26687:169:0;;;;;:::i;:::-;;:::i;61580:173::-;;;;;;;;;;-1:-1:-1;61580:173:0;;;;;:::i;:::-;;:::i;59255:1346::-;;;;;;;;;;-1:-1:-1;59255:1346:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;24434:132::-;;;;;;;;;;;;;:::i;40145:255::-;;;;;;;;;;-1:-1:-1;40145:255:0;;;;;:::i;:::-;;:::i;42228:903::-;;;;;;:::i;:::-;;:::i;27338:422::-;;;;;;;;;;-1:-1:-1;27338:422:0;;;;;:::i;:::-;;:::i;62750:172::-;;;;;;;;;;-1:-1:-1;62750:172:0;;;;;:::i;:::-;;:::i;57668:161::-;;;;;;;;;;-1:-1:-1;57668:161:0;;;;;:::i;:::-;;:::i;62310:245::-;;;;;;;;;;-1:-1:-1;62310:245:0;;;;;:::i;:::-;;:::i;41690:526::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;24276:93::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;61403:170::-;;;;;;;;;;-1:-1:-1;61403:170:0;;;;;:::i;:::-;;:::i;28169:215::-;;;;;;;;;;-1:-1:-1;28169:215:0;;;;;:::i;:::-;;:::i;48113:103::-;;;;;;;;;;-1:-1:-1;48113:103:0;;;;;:::i;:::-;;:::i;48697:553::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;40854:91::-;;;;;;;;;;-1:-1:-1;40854:91:0;;;;;:::i;:::-;;:::i;39428:216::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;24899:468::-;;;;;;;;;;;;;:::i;50007:191::-;;;;;;;;;;-1:-1:-1;50007:191:0;;;;;:::i;:::-;;:::i;47939:166::-;;;;;;;;;;-1:-1:-1;47939:166:0;;;;;:::i;:::-;;:::i;47774:157::-;;;;;;;;;;-1:-1:-1;47774:157:0;;;;;:::i;:::-;;:::i;38540:687::-;;;;;;:::i;:::-;;:::i;55296:581::-;;;;;;;;;;;;;:::i;57401:259::-;;;;;;;;;;-1:-1:-1;57401:259:0;;;;;:::i;:::-;;:::i;62567:171::-;;;;;;;;;;-1:-1:-1;62567:171:0;;;;;:::i;:::-;;:::i;35424:148::-;;;;;;;;;;;;;:::i;56725:396::-;;;;;;;;;;;;;:::i;39927:214::-;;;;;;;;;;-1:-1:-1;39927:214:0;;;;;:::i;:::-;;:::i;51140:174::-;;;;;;;;;;-1:-1:-1;51140:174:0;;;;;:::i;:::-;;:::i;40997:681::-;;;;;;;;;;-1:-1:-1;40997:681:0;;;;;:::i;:::-;;:::i;53656:423::-;;;:::i;25379:262::-;;;;;;;;;;-1:-1:-1;25379:262:0;;;;;:::i;:::-;;:::i;52351:408::-;;;:::i;34775:87::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;53231:421::-;;;:::i;52031:311::-;;;;;;;;;;-1:-1:-1;52031:311:0;;;;;:::i;:::-;;:::i;62934:284::-;;;;;;;;;;-1:-1:-1;62934:284:0;;;;;:::i;:::-;;:::i;23533:104::-;;;;;;;;;;;;;:::i;62151:151::-;;;;;;;;;;-1:-1:-1;62151:151:0;;;;;:::i;:::-;;:::i;40612:130::-;;;;;;;;;;-1:-1:-1;40612:130:0;;;;;:::i;:::-;;:::i;28887:377::-;;;;;;;;;;-1:-1:-1;28887:377:0;;;;;:::i;:::-;;:::i;25852:278::-;;;;;;;;;;-1:-1:-1;25852:278:0;;;;;:::i;:::-;;:::i;49771:228::-;;;;;;;;;;-1:-1:-1;49771:228:0;;;;;:::i;:::-;;:::i;52763:462::-;;;:::i;44254:25::-;;;;;;;;;;;;;:::i;61821:144::-;;;;;;;;;;-1:-1:-1;61821:144:0;;;;;:::i;:::-;;:::i;24629:178::-;;;;;;;;;;-1:-1:-1;24629:178:0;;;;;:::i;:::-;;:::i;54507:781::-;;;;;;;;;;;;;:::i;39233:191::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;55883:834::-;;;;;;;;;;;;;:::i;26389:151::-;;;;;;;;;;-1:-1:-1;26389:151:0;;;;;:::i;:::-;;:::i;57835:1413::-;;;;;;;;;;-1:-1:-1;57835:1413:0;;;;;:::i;:::-;;:::i;47450:316::-;;;;;;;;;;-1:-1:-1;47450:316:0;;;;;:::i;:::-;;:::i;44544:22::-;;;;;;;;;;;;;:::i;61977:166::-;;;;;;;;;;;;;:::i;43139:950::-;;;;;;:::i;:::-;;:::i;35725:244::-;;;;;;;;;;-1:-1:-1;35725:244:0;;;;;:::i;:::-;;:::i;61239:151::-;;;;;;;;;;-1:-1:-1;61239:151:0;;;;;:::i;:::-;;:::i;45560:83::-;;;:::i;45655:1207::-;45729:9;;-1:-1:-1;;;45729:9:0;;;;:17;;45742:4;45729:17;45725:933;;;45770:5;;-1:-1:-1;;;;;45770:5:0;45762:28;;;;:58;;;45808:11;45795:9;:24;;45762:58;45759:889;;;45837:14;45876:8;;45866:7;;45854:9;:19;;;;:::i;:::-;:30;;;;:::i;:::-;45912:5;;:31;;-1:-1:-1;;;45912:31:0;;45837:47;;-1:-1:-1;;;;;;45912:5:0;;:16;;:31;;45937:4;;45912:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45902:6;:41;45899:318;;45974:7;;-1:-1:-1;;;;;45974:7:0;45966:30;45963:239;;46017:5;;46036:7;;46017:47;;-1:-1:-1;;;46017:47:0;;-1:-1:-1;;;;;46017:5:0;;;;:18;;:47;;46036:7;;;46045:10;;46057:6;;46017:47;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;45963:239;;;46104:7;;-1:-1:-1;;;;;46104:7:0;46093:109;;46147:5;;:34;;-1:-1:-1;;;46147:34:0;;-1:-1:-1;;;;;46147:5:0;;;;:14;;:34;;46162:10;;46174:6;;46147:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;46093:109;45759:889;;;;46250:5;;-1:-1:-1;;;;;46250:5:0;46242:28;:58;;;;;46288:11;46275:9;:24;;46242:58;46238:410;;;46442:14;46481:8;;46471:7;;46459:9;:19;;;;:::i;:::-;:30;;;;:::i;:::-;46507:7;;46442:47;;-1:-1:-1;46507:7:0;;;;;:45;;;;;46528:24;46546:4;46528:9;:24::i;:::-;46518:6;:34;;46507:45;46504:125;;;46568:44;46586:4;46592:12;:10;:12::i;:::-;46605:6;46568:9;:44::i;:::-;46238:410;;46670:9;;-1:-1:-1;;;46670:9:0;;;;:17;;46683:4;46670:17;46666:178;;;46706:10;;-1:-1:-1;;;;;46706:10:0;46703:79;;46759:6;;46746:10;:19;;-1:-1:-1;;;;;;46746:19:0;-1:-1:-1;;;;;46759:6:0;;;46746:19;;;;;;46703:79;46802:10;;46794:39;;-1:-1:-1;;;;;46802:10:0;;;;46823:9;46794:39;;;;;46802:10;46794:39;46802:10;46794:39;46823:9;46802:10;46794:39;;;;;;;;;;;;;;;;;;;;;46666:178;45655:1207;;:::o;38105:429::-;38157:12;38200;38189:7;;:23;;:50;;;;;38232:7;;38216:12;:23;;38189:50;38181:59;;;;;;38266:4;;38259;;:11;:24;;;-1:-1:-1;38274:4:0;;:9;38259:24;38251:33;;;;;;38295:4;:7;;;:4;:7;;;:::i;:::-;;;;-1:-1:-1;;38316:10:0;-1:-1:-1;;;;;38316:20:0;;;;;;:46;;;38340:17;38350:6;38340:9;:17::i;:::-;:22;;38316:46;:70;;;;-1:-1:-1;;;;;;38366:20:0;;;;38316:70;38313:137;;;38400:38;38418:4;38425:6;38433:4;;38400:9;:38::i;:::-;38460:42;38478:4;38485:10;38497:4;;38460:9;:42::i;:::-;-1:-1:-1;38520:4:0;38105:429;;;;:::o;23314:100::-;23368:13;23401:5;23394:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23314:100;:::o;26687:169::-;26770:4;26787:39;26796:12;:10;:12::i;:::-;26810:7;26819:6;26787:8;:39::i;:::-;-1:-1:-1;26844:4:0;26687:169;;;;;:::o;61580:173::-;35006:12;:10;:12::i;:::-;-1:-1:-1;;;;;34995:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;34995:23:0;;34987:68;;;;-1:-1:-1;;;34987:68:0;;;;;;;:::i;:::-;;;;;;;;;61713:8:::1;:15:::0;;;;61730:8:::1;:15:::0;61580:173::o;59255:1346::-;-1:-1:-1;;;;;59480:19:0;;59315:14;59480:19;;;:11;:19;;;;;;59315:14;;59460:7;;59480:19;;59475:749;;59701:1;59679:19;59690:7;59679:10;:19::i;:::-;:23;59676:540;;;59730:19;59741:7;59730:10;:19::i;:::-;59788:7;;-1:-1:-1;;;;;59809:16:0;;59761;59809;;;:7;:16;;;;;;59713:37;;-1:-1:-1;59788:7:0;59806:208;;-1:-1:-1;59902:12:0;59806:208;;;-1:-1:-1;;;;;59935:16:0;;59954:1;59935:16;;;:7;:16;;;;;;:20;59932:82;;-1:-1:-1;;;;;;59986:16:0;;;;;;:7;:16;;;;;;59932:82;60077:8;;60023:14;;60049:26;:12;60066:8;60049:16;:26::i;:::-;60048:37;;;;:::i;:::-;60137:8;;60023:63;;-1:-1:-1;60105:41:0;;:27;60023:63;60124:6;60105:10;:27::i;:::-;:31;;:41::i;:::-;60095:51;;59676:540;;;-1:-1:-1;;;;;60234:19:0;;;;;;:11;:19;;;;;;;;60231:120;;;60265:19;60276:7;60265:10;:19::i;:::-;60262:81;;60310:1;60301:10;;60332:1;60322:11;;60262:81;60512:18;60523:7;60513:6;60512:18;:::i;:::-;60495:36;59255:1346;-1:-1:-1;;;;59255:1346:0:o;24434:132::-;24495:7;24537:21;;;;;;;;;24522:12;;:36;;24537:21;24522:36;:::i;:::-;24515:43;;24434:132;:::o;40145:255::-;35006:12;:10;:12::i;:::-;-1:-1:-1;;;;;34995:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;34995:23:0;;34987:68;;;;-1:-1:-1;;;34987:68:0;;;;;;;:::i;:::-;40272:7:::1;:18:::0;;;;40297:7:::1;:18:::0;;;;40322:6:::1;:16:::0;40345:6:::1;:15:::0;40367:4:::1;:12:::0;-1:-1:-1;40386:4:0::1;:8:::0;40145:255::o;42228:903::-;42353:10;;42283:4;;42353:10;;:38;;;;;42380:11;;42367:9;:24;;42353:38;42345:70;;;;-1:-1:-1;;;42345:70:0;;;;;;;:::i;:::-;42426:51;42444:4;42450:12;:10;:12::i;:::-;42463:13;;42426:9;:51::i;:::-;42546:9;-1:-1:-1;;;;;42569:20:0;;:12;:10;:12::i;:::-;-1:-1:-1;;;;;42569:20:0;;;:40;;;;-1:-1:-1;;;;;;42591:18:0;;;;42569:40;:61;;;;;42629:1;42611:17;42621:6;42611:9;:17::i;:::-;:19;42569:61;42566:401;;;42646:13;42662:37;42693:5;42662:26;42678:9;;42662:11;;:15;;:26;;;;:::i;:37::-;42646:53;;42714:14;42731:39;42764:5;42731:28;42749:9;;42731:13;;:17;;:28;;;;:::i;:39::-;42714:56;;42785:41;42803:4;42809:6;42816:9;42785;:41::i;:::-;42883:23;:9;42897:8;42883:13;:23::i;:::-;42921:34;;42873:33;;-1:-1:-1;;;;;;42921:24:0;;;:34;;;;;42946:8;;42921:34;;;;42946:8;42921:24;:34;;;;;;;;;;;;;;;;;;;;;42566:401;;;42980:10;;-1:-1:-1;;;;;42980:10:0;42977:75;;43033:6;;43020:10;:19;;-1:-1:-1;;;;;;43020:19:0;-1:-1:-1;;;;;43033:6:0;;;43020:19;;;;;;42977:75;43070:10;;43062:39;;-1:-1:-1;;;;;43070:10:0;;;;43062:39;;;;;43091:9;;43070:10;43062:39;43070:10;43062:39;43091:9;43070:10;43062:39;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43119:4:0;;42228:903;-1:-1:-1;;;42228:903:0:o;27338:422::-;27444:4;27461:36;27471:6;27479:9;27490:6;27461:9;:36::i;:::-;-1:-1:-1;;;;;27537:19:0;;27510:24;27537:19;;;:11;:19;;;;;27510:24;27557:12;:10;:12::i;:::-;-1:-1:-1;;;;;27537:33:0;-1:-1:-1;;;;;27537:33:0;;;;;;;;;;;;;27510:60;;27609:6;27589:16;:26;;27581:79;;;;-1:-1:-1;;;27581:79:0;;;;;;;:::i;:::-;27671:57;27680:6;27688:12;:10;:12::i;:::-;27702:25;27721:6;27702:16;:25;:::i;:::-;27671:8;:57::i;:::-;-1:-1:-1;27748:4:0;;27338:422;-1:-1:-1;;;;27338:422:0:o;62750:172::-;62840:6;;-1:-1:-1;;;;;62840:6:0;62824:12;:10;:12::i;:::-;-1:-1:-1;;;;;62824:22:0;;:45;;;-1:-1:-1;62864:5:0;;-1:-1:-1;;;;;62864:5:0;62848:12;:10;:12::i;:::-;-1:-1:-1;;;;;62848:21:0;;62824:45;62816:66;;;;-1:-1:-1;;;62816:66:0;;;;;;;:::i;:::-;62893:21;62899:6;62907;62893:5;:21::i;57668:161::-;-1:-1:-1;;;;;57753:17:0;57726:7;57753:17;;;:8;:17;;;;;;;57668:161::o;62310:245::-;62395:6;;62355:4;;-1:-1:-1;;;;;62395:6:0;62379:12;:10;:12::i;:::-;-1:-1:-1;;;;;62379:22:0;;:45;;;-1:-1:-1;62419:5:0;;-1:-1:-1;;;;;62419:5:0;62403:12;:10;:12::i;:::-;-1:-1:-1;;;;;62403:21:0;;62379:45;62371:66;;;;-1:-1:-1;;;62371:66:0;;;;;;;:::i;:::-;62470:5;;-1:-1:-1;;;;;62470:5:0;62456:19;;;;:35;;-1:-1:-1;;;;;;62477:14:0;;;;62456:35;62448:56;;;;-1:-1:-1;;;62448:56:0;;;;;;;:::i;:::-;-1:-1:-1;62515:5:0;:10;;-1:-1:-1;;;;;62515:10:0;;-1:-1:-1;;;;;;62515:10:0;;;;;;;62310:245;;;:::o;41690:526::-;41911:10;;41969:9;;42001:12;;41911:10;;;;;;41941:7;;;;41969:9;42035:12;41730:14;;;;42068:23;42078:12;:10;:12::i;42068:23::-;42058:33;;42135:11;;42122:24;;42168:9;;42157:20;;42199:9;;42188:20;;41690:526;;;;;;;;;:::o;24276:93::-;24359:2;24276:93;:::o;61403:170::-;35006:12;:10;:12::i;:::-;-1:-1:-1;;;;;34995:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;34995:23:0;;34987:68;;;;-1:-1:-1;;;34987:68:0;;;;;;;:::i;:::-;61535:7:::1;:14:::0;;;;61551:7:::1;:14:::0;61403:170::o;28169:215::-;28257:4;28274:80;28283:12;:10;:12::i;:::-;28297:7;28343:10;28306:11;:25;28318:12;:10;:12::i;:::-;-1:-1:-1;;;;;28306:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;28306:25:0;;;:34;;;;;;;;;;:47;;;;:::i;48113:103::-;35006:12;:10;:12::i;:::-;-1:-1:-1;;;;;34995:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;34995:23:0;;34987:68;;;;-1:-1:-1;;;34987:68:0;;;;;;;:::i;:::-;48186:7:::1;:22:::0;;-1:-1:-1;;;;;;48186:22:0::1;-1:-1:-1::0;;;;;48186:22:0;;;::::1;::::0;;;::::1;::::0;;48113:103::o;48697:553::-;48887:9;;48950:7;;48995:8;;48887:9;-1:-1:-1;;;48887:9:0;;;;;-1:-1:-1;;;48918:9:0;;;;48950:7;48740:13;;;;;;;;48981:11;48950:7;48981:1;:11;:::i;:::-;:22;;;;:::i;:::-;49034:5;;49062:7;;48969:35;;-1:-1:-1;;;;;;49034:5:0;;;;-1:-1:-1;49062:7:0;;-1:-1:-1;49084:28:0;49080:157;;-1:-1:-1;49138:1:0;49080:157;;;49218:3;;49184:5;;:31;;-1:-1:-1;;;49184:31:0;;-1:-1:-1;;;;;49184:5:0;;;;:16;;:31;;49209:4;;49184:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:37;;;;:::i;:::-;49170:52;;49080:157;48697:553;;;;;;;:::o;40854:91::-;40910:27;40916:12;:10;:12::i;:::-;40930:6;40910:5;:27::i;:::-;40854:91;:::o;39428:216::-;39593:7;;39602;;39611:4;;39617;;39623:6;;39631;;39428:216;;;;;;:::o;24899:468::-;24988:7;:21;24996:12;:10;:12::i;:::-;-1:-1:-1;;;;;24988:21:0;;;;;;;;;;;;-1:-1:-1;24988:21:0;;;;24984:376;;25042:7;;25061:10;;25058:294;;25107:6;25151:4;;25079:17;25135:12;:10;:12::i;:::-;-1:-1:-1;;;;;25127:21:0;;;;;;;;;;;;-1:-1:-1;25127:21:0;:28;;-1:-1:-1;;25127:28:0;;;;;;;;;;25313:29;25319:12;:10;:12::i;:::-;25332:9;25313:5;:29::i;24984:376::-;24899:468::o;50007:191::-;35006:12;:10;:12::i;:::-;-1:-1:-1;;;;;34995:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;34995:23:0;;34987:68;;;;-1:-1:-1;;;34987:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;50094:21:0;::::1;50086:67;;;;-1:-1:-1::0;;;50086:67:0::1;;;;;;;:::i;:::-;50164:26;50174:7;50183:6;50164:9;:26::i;47939:166::-:0;35006:12;:10;:12::i;:::-;-1:-1:-1;;;;;34995:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;34995:23:0;;34987:68;;;;-1:-1:-1;;;34987:68:0;;;;;;;:::i;:::-;48072:5:::1;:25:::0;;-1:-1:-1;;;;;;48072:25:0::1;-1:-1:-1::0;;;;;48072:25:0;;;::::1;::::0;;;::::1;::::0;;47939:166::o;47774:157::-;35006:12;:10;:12::i;:::-;-1:-1:-1;;;;;34995:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;34995:23:0;;34987:68;;;;-1:-1:-1;;;34987:68:0;;;;;;;:::i;:::-;47903:7:::1;:20:::0;47774:157::o;38540:687::-;38599:12;38638;38627:7;;:23;;:50;;;;;38670:7;;38654:12;:23;;38627:50;38619:59;;;;;;38706:11;38693:9;:24;;38685:56;;;;-1:-1:-1;;;38685:56:0;;;;;;;:::i;:::-;38763:4;;38756;;:11;:24;;;-1:-1:-1;38771:4:0;;:9;38756:24;38748:33;;;;;;38788:12;38803:9;38788:24;;38819:13;38863:7;38855:4;38848:6;;:11;;;;:::i;:::-;38847:23;;;;:::i;:::-;38877:4;:7;;38839:31;;-1:-1:-1;38877:4:0;:7;;;:::i;:::-;;;;-1:-1:-1;;38894:10:0;-1:-1:-1;;;;;38894:20:0;;;;;;:46;;;38918:17;38928:6;38918:9;:17::i;:::-;:22;;38894:46;:70;;;;-1:-1:-1;;;;;;38944:20:0;;;;38894:70;38891:138;;;38982:39;39000:4;39007:6;39015:5;38982:9;:39::i;:::-;39041:43;39059:4;39066:10;39078:5;39041:9;:43::i;:::-;39096:10;;-1:-1:-1;;;;;39096:10:0;39093:64;;39142:6;;39129:10;:19;;-1:-1:-1;;;;;;39129:19:0;-1:-1:-1;;;;;39142:6:0;;;39129:19;;;;;;39093:64;39171:10;;39163:34;;-1:-1:-1;;;;;39171:10:0;;;;39163:34;;;;;39192:4;;39171:10;39163:34;39171:10;39163:34;39192:4;39171:10;39163:34;;;;;;;;;;;;;;;;;;;55296:581;55418:10;55406:23;;;;:11;:23;;;;;;;;55398:32;;;;;;55523:15;55541:22;55552:10;55541;:22::i;:::-;55523:40;-1:-1:-1;55573:11:0;;55570:71;;55607:10;55597:21;;;;:9;:21;;;;;;;;55593:37;;55620:10;:8;:10::i;:::-;55653:14;55670:22;55681:10;55670;:22::i;:::-;55653:39;;55716:1;55707:6;:10;55699:19;;;;;;55728:35;55739:10;55750:12;55728:10;:35::i;:::-;55782:10;55796:5;55772:21;;;:9;:21;;;;;:29;;-1:-1:-1;;55772:29:0;;;55811:24;;55828:6;55811:5;:24::i;:::-;55842:25;55848:10;55860:6;55842:5;:25::i;57401:259::-;-1:-1:-1;;;;;57604:20:0;;57458:7;57604:20;;;:11;:20;;;;;;;;:47;;57631:20;57643:7;57631:11;:20::i;:::-;57604:47;;;57627:1;57604:47;-1:-1:-1;;;;;57554:18:0;;;;;;:9;:18;;;;;;;;:45;;57579:20;57591:7;57579:11;:20::i;:::-;57554:45;;;57575:1;57554:45;-1:-1:-1;;;;;57508:16:0;;;;;;:7;:16;;;;;;;;:41;;57531:18;57541:7;57531:9;:18::i;:::-;57508:41;;;57527:1;57508:41;57485:19;57496:7;57485:10;:19::i;:::-;:65;;;;:::i;:::-;:115;;;;:::i;:::-;:167;;;;:::i;62567:171::-;62625:4;35006:12;:10;:12::i;:::-;-1:-1:-1;;;;;34995:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;34995:23:0;;34987:68;;;;-1:-1:-1;;;34987:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;62649:18:0;::::1;62641:39;;;;-1:-1:-1::0;;;62641:39:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;62691:10:0::1;:17:::0;;-1:-1:-1;;;;;62691:17:0;::::1;-1:-1:-1::0;;;;;;62691:17:0;;::::1;;::::0;;;62567:171;;;:::o;35424:148::-;35006:12;:10;:12::i;:::-;-1:-1:-1;;;;;34995:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;34995:23:0;;34987:68;;;;-1:-1:-1;;;34987:68:0;;;;;;;:::i;:::-;35515:6:::1;::::0;35494:40:::1;::::0;35531:1:::1;::::0;-1:-1:-1;;;;;35515:6:0::1;::::0;35494:40:::1;::::0;35531:1;;35494:40:::1;35545:6;:19:::0;;-1:-1:-1;;;;;;35545:19:0::1;::::0;;35424:148::o;56725:396::-;56905:14;56922:22;56933:10;56922;:22::i;:::-;56905:39;;56968:1;56959:6;:10;56951:19;;;;;;56984:35;56995:10;57006:12;56984:10;:35::i;:::-;-1:-1:-1;57043:10:0;57057:5;57031:23;;;:11;:23;;;;;:31;;-1:-1:-1;;57031:31:0;;;56725:396::o;39927:214::-;35006:12;:10;:12::i;:::-;-1:-1:-1;;;;;34995:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;34995:23:0;;34987:68;;;;-1:-1:-1;;;34987:68:0;;;;;;;:::i;:::-;40039:7:::1;:18:::0;;;;40064:7:::1;:18:::0;;;;40089:4:::1;:12:::0;40108:4:::1;:12:::0;-1:-1:-1;40127:4:0::1;:8:::0;39927:214::o;51140:174::-;51221:4;51238:46;51252:12;:10;:12::i;:::-;51266:9;51277:6;51238:13;:46::i;40997:681::-;41062:4;35006:12;:10;:12::i;:::-;-1:-1:-1;;;;;34995:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;34995:23:0;;34987:68;;;;-1:-1:-1;;;34987:68:0;;;;;;;:::i;:::-;41145:3:::1;:6;;41150:1;41145:6;41142:482;;;41167:10;:21:::0;;-1:-1:-1;;41167:21:0::1;41187:1;41180:8:::0;::::1;41167:21;::::0;;41142:482:::1;;;41208:3;:6;;41213:1;41208:6;41205:419;;;41230:7;:18:::0;;-1:-1:-1;;41230:18:0::1;41247:1;41240:8:::0;::::1;41230:18;;;::::0;;41205:419:::1;;;41268:3;:6;;41273:1;41268:6;41265:359;;;41290:9;:17:::0;;;41265:359:::1;;;41327:3;:6;;41332:1;41327:6;41324:300;;;41349:11;:19:::0;;;41324:300:::1;;;41388:3;:6;;41393:1;41388:6;41385:239;;;41410:13;:21:::0;;;41385:239:::1;;;41451:3;:6;;41456:1;41451:6;41448:176;;;41473:12;:20:::0;;;41448:176:::1;;;41513:3;:6;;41518:1;41513:6;41510:114;;;41535:9;:17:::0;;;41510:114:::1;;;41572:3;:7;;41577:2;41572:7;41569:55;;;-1:-1:-1::0;41595:9:0::1;:17:::0;-1:-1:-1;41666:4:0::1;::::0;40997:681::o;53656:423::-;53716:1;53705:9;:12;:42;;;;;53735:11;53722:9;:24;;53705:42;53701:171;;;53814:10;53802:23;;;;:11;:23;;;;;;;;53798:41;;53827:12;:10;:12::i;:::-;53888:8;;-1:-1:-1;;;53888:8:0;;;;:16;;53900:4;53888:16;53884:179;;;53925:10;;-1:-1:-1;;;;;53925:10:0;53922:79;;53978:6;;53965:10;:19;;-1:-1:-1;;;;;;53965:19:0;-1:-1:-1;;;;;53978:6:0;;;53965:19;;;;;;53922:79;54021:10;;54013:39;;-1:-1:-1;;;;;54021:10:0;;;;54042:9;54013:39;;;;;54021:10;54013:39;54021:10;54013:39;54042:9;54021:10;54013:39;;;;;;;;;;;;;;;;;;;25379:262;-1:-1:-1;;;;;25479:16:0;;25444:14;25479:16;;;:7;:16;;;;;;;;25474:67;;-1:-1:-1;25524:7:0;;25474:67;-1:-1:-1;;;;;25551:16:0;;;;;;:7;:16;;;;;;;;25548:47;;;-1:-1:-1;25585:1:0;25379:262;;;:::o;52351:408::-;52411:1;52400:9;:12;:42;;;;;52430:11;52417:9;:24;;52400:42;52396:166;;;52507:10;52495:23;;;;:11;:23;;;;;;;;52491:41;;52520:12;:10;:12::i;:::-;52545:9;:7;:9::i;34775:87::-;34848:6;;-1:-1:-1;;;;;34848:6:0;34775:87;:::o;53231:421::-;53292:1;53281:9;:12;:42;;;;;53311:11;53298:9;:24;;53281:42;53277:168;;;53389:10;53377:23;;;;:11;:23;;;;;;;;53373:41;;53402:12;:10;:12::i;:::-;53427:10;:8;:10::i;52031:311::-;52095:4;35006:12;:10;:12::i;:::-;-1:-1:-1;;;;;34995:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;34995:23:0;;34987:68;;;;-1:-1:-1;;;34987:68:0;;;;;;;:::i;:::-;52114:3:::1;:6;;52119:1;52114:6;52111:202;;;52136:7;:21:::0;;-1:-1:-1;;;;52136:21:0::1;52146:11:::0;::::1;;52153:4;52146:11;-1:-1:-1::0;;;52136:21:0::1;;::::0;;52111:202:::1;;;52185:3;:6;;52190:1;52185:6;52182:131;;;52207:7;:22:::0;;-1:-1:-1;;;;52207:22:0::1;52217:12:::0;::::1;-1:-1:-1::0;;;52207:22:0::1;;::::0;;52182:131:::1;;;52249:3;:6;;52254:1;52249:6;52246:67;;;52271:8;:22:::0;;-1:-1:-1;;;52289:4:0::1;52282:11:::0;::::1;;;52271:22;-1:-1:-1::0;;;;52271:22:0;;::::1;;::::0;;-1:-1:-1;52330:4:0::1;52031:311:::0;;;;:::o;62934:284::-;35006:12;:10;:12::i;:::-;-1:-1:-1;;;;;34995:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;34995:23:0;;34987:68;;;;-1:-1:-1;;;34987:68:0;;;;;;;:::i;:::-;63082:32:::1;::::0;-1:-1:-1;;;63082:32:0;;63048:14;;63118:7;;-1:-1:-1;;;;;63082:17:0;::::1;::::0;::::1;::::0;:32:::1;::::0;63108:4:::1;::::0;63082:32:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:43;;63074:89;;;;-1:-1:-1::0;;;63074:89:0::1;;;;;;;:::i;:::-;63174:36;::::0;-1:-1:-1;;;63174:36:0;;-1:-1:-1;;;;;63174:15:0;::::1;::::0;::::1;::::0;:36:::1;::::0;63190:10:::1;::::0;63202:7;;63174:36:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35066:1;62934:284:::0;;:::o;23533:104::-;23589:13;23622:7;23615:14;;;;;:::i;62151:151::-;-1:-1:-1;;;;;62210:18:0;;;;;;:43;;-1:-1:-1;62248:5:0;;-1:-1:-1;;;;;62248:5:0;62232:12;:10;:12::i;:::-;-1:-1:-1;;;;;62232:21:0;;62210:43;62202:64;;;;-1:-1:-1;;;62202:64:0;;;;;;;:::i;:::-;62277:10;:17;;-1:-1:-1;;;;;;62277:17:0;-1:-1:-1;;;;;62277:17:0;;;;;;;;;;62151:151::o;40612:130::-;40668:4;35006:12;:10;:12::i;:::-;-1:-1:-1;;;;;34995:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;34995:23:0;;34987:68;;;;-1:-1:-1;;;34987:68:0;;;;;;;:::i;:::-;40685:27:::1;40691:12;:10;:12::i;:::-;40705:6;40685:5;:27::i;28887:377::-:0;28980:4;28997:24;29024:11;:25;29036:12;:10;:12::i;:::-;-1:-1:-1;;;;;29024:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;29024:25:0;;;:34;;;;;;;;;;;-1:-1:-1;29077:35:0;;;;29069:85;;;;-1:-1:-1;;;29069:85:0;;;;;;;:::i;:::-;29165:67;29174:12;:10;:12::i;:::-;29188:7;29197:34;29216:15;29197:16;:34;:::i;25852:278::-;25938:4;26058:42;26068:12;:10;:12::i;:::-;26082:9;26093:6;26058:9;:42::i;49771:228::-;49844:4;35006:12;:10;:12::i;:::-;-1:-1:-1;;;;;34995:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;34995:23:0;;34987:68;;;;-1:-1:-1;;;34987:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;49869:21:0;::::1;49861:65;;;;-1:-1:-1::0;;;49861:65:0::1;;;;;;;:::i;:::-;49947:22;49953:7;49962:6;49947:5;:22::i;52763:462::-:0;52822:1;52811:9;:12;:42;;;;;52841:11;52828:9;:24;;52811:42;52807:211;;;52967:10;52957:21;;;;:9;:21;;;;;;;;52953:37;;52980:10;:8;:10::i;44254:25::-;;;;:::o;61821:144::-;35006:12;:10;:12::i;:::-;-1:-1:-1;;;;;34995:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;34995:23:0;;34987:68;;;;-1:-1:-1;;;34987:68:0;;;;;;;:::i;:::-;61933:24:::1;::::0;61911:10:::1;::::0;;;61933:24;::::1;;;::::0;61950:6;;61877:23:::1;61933:24:::0;61877:23;61933:24;61950:6;61911:10;61933:24;::::1;;;;;;;;;;;;;::::0;::::1;;;;24629:178:::0;-1:-1:-1;;;;;24731:18:0;24704:7;24731:18;;;;;;;;;;;;24629:178::o;54507:781::-;54629:10;54619:21;;;;:9;:21;;;;;;;;54618:22;54610:31;;;;;;54650:14;54667:22;54678:10;54667;:22::i;:::-;54650:39;;54713:1;54704:6;:10;54696:19;;;;;;54735:10;54727:19;;;;:7;:19;;;;;;54724:170;;;;;54817:10;54831:1;54809:19;;;:7;:19;;;;;;:23;54806:88;;54871:10;54863:19;;;;:7;:19;;;;;;54845:7;:38;54806:88;54900:14;54953:7;;54926:25;54943:7;;54926:12;:16;;:25;;;;:::i;:::-;54925:35;;;;:::i;:::-;54900:61;;54968:15;54986:40;55018:7;;54986:27;55005:6;54986;:10;;:27;;;;:::i;:40::-;54968:58;-1:-1:-1;55033:17:0;55061:18;54968:58;55062:6;55061:18;:::i;:::-;55190:10;55180:21;;;;:9;:21;;;;;:28;;-1:-1:-1;;55180:28:0;55204:4;55180:28;;;55033:47;;-1:-1:-1;55218:29:0;;55240:6;55218:9;:29::i;:::-;55255:27;55261:10;55272:9;55255:5;:27::i;39233:191::-;39383:7;;39392;;39401:4;;39407;;39413;;39233:191;;;;;:::o;55883:834::-;56080:14;56097:22;56108:10;56097;:22::i;:::-;56080:39;;56143:1;56134:6;:10;56126:19;;;;;;56165:10;56157:19;;;;:7;:19;;;;;;56154:216;;56252:12;56234:7;:31;56154:216;;;56292:10;56306:1;56284:19;;;:7;:19;;;;;;:23;56281:89;;56347:10;56339:19;;;;:7;:19;;;;;;56321:7;:38;56281:89;56376:14;56429:8;;56402:25;56419:7;;56402:12;:16;;:25;;;;:::i;:::-;56401:36;;;;:::i;:::-;56376:62;;56445:15;56463:41;56495:8;;56463:27;56482:6;56463;:10;;:27;;;;:::i;:41::-;56563:7;;56445:59;;-1:-1:-1;56445:59:0;;-1:-1:-1;;;56563:7:0;;;;:15;;56574:4;56563:15;56560:73;;;56604:10;56596:19;;;;:7;:19;;;;;;;;56592:32;;56617:7;:5;:7::i;:::-;56651:10;56639:23;;;;:11;:23;;;;;:30;;-1:-1:-1;;56639:30:0;56665:4;56639:30;;;56679:27;;56696:9;56679:5;:27::i;26389:151::-;-1:-1:-1;;;;;26505:18:0;;;26478:7;26505:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;26389:151::o;57835:1413::-;-1:-1:-1;;;;;58089:17:0;;57894:14;58089:17;;;:9;:17;;;;;;57894:14;;58069:7;;58089:17;;58084:481;;58182:1;58160:19;58171:7;58160:10;:19::i;:::-;:23;58157:400;;;58211:19;58222:7;58211:10;:19::i;:::-;58269:7;;-1:-1:-1;;;;;58290:16:0;;58242;58290;;;:7;:16;;;;;;58194:37;;-1:-1:-1;58269:7:0;58290:20;58287:82;;-1:-1:-1;;;;;;58341:16:0;;;;;;:7;:16;;;;;;58287:82;58433:7;;58379:14;;58405:26;:12;58422:8;58405:16;:26::i;:::-;58404:36;;;;:::i;:::-;58493:7;;58379:62;;-1:-1:-1;58461:40:0;;:27;58379:62;58480:6;58461:10;:27::i;:40::-;58451:50;-1:-1:-1;58528:18:0;58451:50;58529:6;58528:18;:::i;:::-;58511:36;;58157:400;;;-1:-1:-1;;;;;58575:17:0;;;;;;:9;:17;;;;;;;;58572:452;;;58629:1;58607:19;58618:7;58607:10;:19::i;:::-;:23;58604:412;;;58658:19;58669:7;58658:10;:19::i;:::-;58716:7;;-1:-1:-1;;;;;58738:16:0;;58689;58738;;;:7;:16;;;;;;58641:37;;-1:-1:-1;58716:7:0;58738:20;58735:95;;-1:-1:-1;;;;;;58791:16:0;;;;;;:7;:16;;;;;;58735:95;58891:7;;58837:14;;58863:26;:12;58880:8;58863:16;:26::i;:::-;58862:36;;;;:::i;:::-;58950:7;;58837:62;;-1:-1:-1;58918:40:0;;:27;58837:62;58937:6;58918:10;:27::i;:40::-;58908:50;-1:-1:-1;58985:18:0;58908:50;58986:6;58985:18;:::i;:::-;58968:36;;58604:412;;;59220:22;;57835:1413;;;:::o;47450:316::-;47514:4;35006:12;:10;:12::i;:::-;-1:-1:-1;;;;;34995:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;34995:23:0;;34987:68;;;;-1:-1:-1;;;34987:68:0;;;;;;;:::i;:::-;47533:3:::1;:6;;47538:1;47533:6;47530:207;;;47555:9;:23:::0;;-1:-1:-1;;;;47555:23:0::1;47567:11:::0;::::1;;47574:4;47567:11;-1:-1:-1::0;;;47555:23:0::1;;::::0;;47530:207:::1;;;47606:3;:6;;47611:1;47606:6;47603:134;;;47628:9;:24:::0;;-1:-1:-1;;;;47628:24:0::1;47640:12:::0;::::1;-1:-1:-1::0;;;47628:24:0::1;;::::0;;47603:134:::1;;;47672:3;:6;;47677:1;47672:6;47669:68;;;47694:9;:23:::0;;-1:-1:-1;;;47713:4:0::1;47706:11:::0;::::1;;;47694:23;-1:-1:-1::0;;;;47694:23:0;;::::1;;::::0;;-1:-1:-1;47754:4:0::1;47450:316:::0;;;;:::o;44544:22::-;;;-1:-1:-1;;;;;44544:22:0;;:::o;61977:166::-;35006:12;:10;:12::i;:::-;-1:-1:-1;;;;;34995:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;34995:23:0;;34987:68;;;;-1:-1:-1;;;34987:68:0;;;;;;;:::i;:::-;62084:51:::1;::::0;62092:10:::1;::::0;62113:21:::1;62084:51:::0;::::1;;;::::0;::::1;::::0;;;62113:21;62092:10;62084:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;43139:950:::0;43215:7;;43191:4;;43215:7;;;;;:39;;;;;43242:12;;43226;:28;;43215:39;43207:71;;;;-1:-1:-1;;;43207:71:0;;;;;;;:::i;:::-;43310:10;43297:9;:23;;43289:55;;;;-1:-1:-1;;;43289:55:0;;;;;;;:::i;:::-;43426:9;;43375;;43355:17;;43412:24;;43375:9;;43412:13;:24::i;:::-;43395:41;;43447:44;43465:4;43471:12;:10;:12::i;43447:44::-;43557:6;-1:-1:-1;;;;;43543:20:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;43543:20:0;;;:40;;;;-1:-1:-1;;;;;;43565:18:0;;;;43543:40;:61;;;;;43603:1;43585:17;43595:6;43585:9;:17::i;:::-;:19;43543:61;43540:385;;;43620:13;43636:35;43665:5;43636:24;43650:9;;43636;:13;;:24;;;;:::i;:35::-;43620:51;;43686:14;43703:32;43729:5;43703:21;43714:9;;43703:6;:10;;:21;;;;:::i;:32::-;43686:49;;43750:41;43768:4;43774:6;43781:9;43750;:41::i;:::-;43841:23;:9;43855:8;43841:13;:23::i;:::-;43879:34;;43831:33;;-1:-1:-1;;;;;;43879:24:0;;;:34;;;;;43904:8;;43879:34;;;;43904:8;43879:24;:34;;;;;;;;;;;;;;;;;;;;;43540:385;;43938:10;;-1:-1:-1;;;;;43938:10:0;43935:75;;43991:6;;43978:10;:19;;-1:-1:-1;;;;;;43978:19:0;-1:-1:-1;;;;;43991:6:0;;;43978:19;;;;;44020:39;;44028:10;;;44020:39;;;;;;;-1:-1:-1;44020:39:0;-1:-1:-1;44020:39:0;;44028:10;44020:39;;;;;;;;;;;;;;;;;;;35725:244;35006:12;:10;:12::i;:::-;-1:-1:-1;;;;;34995:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;34995:23:0;;34987:68;;;;-1:-1:-1;;;34987:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35814:22:0;::::1;35806:73;;;;-1:-1:-1::0;;;35806:73:0::1;;;;;;;:::i;:::-;35916:6;::::0;35895:38:::1;::::0;-1:-1:-1;;;;;35895:38:0;;::::1;::::0;35916:6:::1;::::0;35895:38:::1;::::0;35916:6:::1;::::0;35895:38:::1;35944:6;:17:::0;;-1:-1:-1;;;;;;35944:17:0::1;-1:-1:-1::0;;;;;35944:17:0;;;::::1;::::0;;;::::1;::::0;;35725:244::o;61239:151::-;35006:12;:10;:12::i;:::-;-1:-1:-1;;;;;34995:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;34995:23:0;;34987:68;;;;-1:-1:-1;;;34987:68:0;;;;;;;:::i;:::-;61366:7:::1;:16:::0;61239:151::o;45560:83::-;45606:29;45613:10;45625:9;45606:6;:29::i;20718:98::-;20798:10;20718:98;:::o;29754:851::-;-1:-1:-1;;;;;29860:20:0;;29852:70;;;;-1:-1:-1;;;29852:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29941:23:0;;29933:71;;;;-1:-1:-1;;;29933:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30023:14:0;;;;;;:6;:14;;;;;;;;;:17;;;;:36;;-1:-1:-1;;;;;;30042:14:0;;;;;;:6;:14;;;;;;;;;;;:17;;30023:36;:58;;;;-1:-1:-1;;;;;;30061:17:0;;;;;;:6;:17;;;;;;;;30080:1;30061:20;;30023:58;:80;;;;-1:-1:-1;;;;;;30083:17:0;;;;;;:6;:17;;;;;;;;;;;:20;;30023:80;30015:113;;;;-1:-1:-1;;;30015:113:0;;;;;;;:::i;:::-;30153:10;30145:19;;;;:7;:19;;;;;;;;30141:32;;30166:7;:5;:7::i;:::-;30189:11;:25;30201:12;:10;:12::i;:::-;-1:-1:-1;;;;;30189:25:0;;;;;;;;;;;;-1:-1:-1;30189:25:0;;;;30185:67;;30245:4;30217:11;:25;30229:12;:10;:12::i;:::-;-1:-1:-1;;;;;30217:25:0;;;;;;;;;;;;-1:-1:-1;30217:25:0;:32;;-1:-1:-1;;30217:32:0;;;;;;;;;;30185:67;-1:-1:-1;;;;;30348:17:0;;30324:21;30348:17;;;;;;;;;;;30384:23;;;;30376:74;;;;-1:-1:-1;;;30376:74:0;;;;;;;:::i;:::-;30481:22;30497:6;30481:13;:22;:::i;:::-;-1:-1:-1;;;;;30461:17:0;;;:9;:17;;;;;;;;;;;:42;;;;30514:20;;;;;;;;:30;;30538:6;;30461:9;30514:30;;30538:6;;30514:30;:::i;:::-;;;;;;;;30579:9;-1:-1:-1;;;;;30562:35:0;30571:6;-1:-1:-1;;;;;30562:35:0;;30590:6;30562:35;;;;;;:::i;:::-;;;;;;;;29754:851;;;;:::o;32599:346::-;-1:-1:-1;;;;;32701:19:0;;32693:68;;;;-1:-1:-1;;;32693:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32780:21:0;;32772:68;;;;-1:-1:-1;;;32772:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32853:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;32905:32;;;;;32883:6;;32905:32;:::i;:::-;;;;;;;;32599:346;;;:::o;13788:158::-;13846:7;13879:1;13874;:6;;13866:49;;;;-1:-1:-1;;;13866:49:0;;;;;;;:::i;:::-;13933:5;13937:1;13933;:5;:::i;:::-;13926:12;13788:158;-1:-1:-1;;;13788:158:0:o;14205:220::-;14263:7;14287:6;14283:20;;-1:-1:-1;14302:1:0;14295:8;;14283:20;14314:9;14326:5;14330:1;14326;:5;:::i;:::-;14314:17;-1:-1:-1;14359:1:0;14350:5;14354:1;14314:17;14350:5;:::i;:::-;:10;14342:56;;;;-1:-1:-1;;;14342:56:0;;;;;;;:::i;14903:153::-;14961:7;14993:1;14989;:5;14981:44;;;;-1:-1:-1;;;14981:44:0;;;;;;;:::i;:::-;15043:5;15047:1;15043;:5;:::i;30611:103::-;-1:-1:-1;;;;;30683:14:0;;;;;;;;:6;:14;;;;;:23;;-1:-1:-1;;30683:23:0;;;;;;;;;;;30611:103::o;31667:494::-;-1:-1:-1;;;;;31751:21:0;;31743:67;;;;-1:-1:-1;;;31743:67:0;;;;;;;:::i;:::-;31823:49;31844:7;31861:1;31865:6;31823:20;:49::i;:::-;-1:-1:-1;;;;;31910:18:0;;31885:22;31910:18;;;;;;;;;;;31947:24;;;;31939:71;;;;-1:-1:-1;;;31939:71:0;;;;;;;:::i;:::-;32042:23;32059:6;32042:14;:23;:::i;:::-;-1:-1:-1;;;;;32021:18:0;;:9;:18;;;;;;;;;;:44;;;;32076:12;:22;;32092:6;;32021:9;32076:22;;32092:6;;32076:22;:::i;:::-;;;;-1:-1:-1;;32116:37:0;;32142:1;;-1:-1:-1;;;;;32116:37:0;;;;;;;32146:6;;32116:37;:::i;30994:340::-;-1:-1:-1;;;;;31078:21:0;;31070:65;;;;-1:-1:-1;;;31070:65:0;;;;;;;:::i;:::-;31228:6;31212:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;31245:18:0;;:9;:18;;;;;;;;;;:28;;31267:6;;31245:9;:28;;31267:6;;31245:28;:::i;:::-;;;;-1:-1:-1;;31289:37:0;;-1:-1:-1;;;;;31289:37:0;;;31306:1;;31289:37;;;;31319:6;;31289:37;:::i;:::-;;;;;;;;30994:340;;:::o;50489:432::-;-1:-1:-1;;;;;50577:21:0;;50569:67;;;;-1:-1:-1;;;50569:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;50674:17:0;;50649:22;50674:17;;;:8;:17;;;;;;50710:24;;;;50702:71;;;;-1:-1:-1;;;50702:71:0;;;;;;;:::i;:::-;50804:23;50821:6;50804:14;:23;:::i;:::-;-1:-1:-1;;;;;50784:17:0;;;;;;:8;:17;;;;;:43;;;;50838:10;:20;;50852:6;;50784:17;50838:20;;50852:6;;50838:20;:::i;57264:127::-;-1:-1:-1;;;;;57335:15:0;;;;;;;:7;:15;;;;;:24;57264:127::o;50206:273::-;-1:-1:-1;;;;;50290:21:0;;50282:65;;;;-1:-1:-1;;;50282:65:0;;;;;;;:::i;:::-;50374:6;50360:10;;:20;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;50391:17:0;;;;;;:8;:17;;;;;:27;;50412:6;;50391:17;:27;;50412:6;;50391:27;:::i;60609:617::-;60670:14;;60740:19;60751:7;60740:10;:19::i;:::-;60797:7;;-1:-1:-1;;;;;60819:16:0;;60770;60819;;;:7;:16;;;;;;60723:37;;-1:-1:-1;60797:7:0;60816:210;;-1:-1:-1;60912:12:0;60816:210;;;-1:-1:-1;;;;;60945:16:0;;60964:1;60945:16;;;:7;:16;;;;;;:20;60942:84;;-1:-1:-1;;;;;;60996:16:0;;;;;;:7;:16;;;;;;60942:84;61086:8;;61032:14;;61058:26;:12;61075:8;61058:16;:26::i;:::-;61057:37;;;;:::i;:::-;61145:8;;61032:63;;-1:-1:-1;61113:41:0;;:27;61032:63;61132:6;61113:10;:27::i;:41::-;61103:51;60609:617;-1:-1:-1;;;;;60609:617:0:o;57131:127::-;-1:-1:-1;;;;;57202:15:0;;;;;;;:7;:15;;;;;:24;57131:127::o;51322:652::-;-1:-1:-1;;;;;51432:20:0;;51424:70;;;;-1:-1:-1;;;51424:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;51513:23:0;;51505:71;;;;-1:-1:-1;;;51505:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;51720:16:0;;51696:21;51720:16;;;:8;:16;;;;;;51755:23;;;;51747:74;;;;-1:-1:-1;;;51747:74:0;;;;;;;:::i;:::-;51851:22;51867:6;51851:13;:22;:::i;:::-;-1:-1:-1;;;;;51832:16:0;;;;;;;:8;:16;;;;;;:41;;;;51884:19;;;;;;;;:29;;51907:6;;51832:16;51884:29;;51907:6;;51884:29;:::i;14:175:1:-;84:20;;-1:-1:-1;;;;;133:31:1;;123:42;;113:2;;179:1;176;169:12;194:158;262:20;;322:4;311:16;;301:27;;291:2;;342:1;339;332:12;357:198;;469:2;457:9;448:7;444:23;440:32;437:2;;;490:6;482;475:22;437:2;518:31;539:9;518:31;:::i;560:274::-;;;689:2;677:9;668:7;664:23;660:32;657:2;;;710:6;702;695:22;657:2;738:31;759:9;738:31;:::i;:::-;728:41;;788:40;824:2;813:9;809:18;788:40;:::i;:::-;778:50;;647:187;;;;;:::o;839:342::-;;;;985:2;973:9;964:7;960:23;956:32;953:2;;;1006:6;998;991:22;953:2;1034:31;1055:9;1034:31;:::i;:::-;1024:41;;1084:40;1120:2;1109:9;1105:18;1084:40;:::i;:::-;1074:50;;1171:2;1160:9;1156:18;1143:32;1133:42;;943:238;;;;;:::o;1186:266::-;;;1315:2;1303:9;1294:7;1290:23;1286:32;1283:2;;;1336:6;1328;1321:22;1283:2;1364:31;1385:9;1364:31;:::i;:::-;1354:41;1442:2;1427:18;;;;1414:32;;-1:-1:-1;;;1273:179:1:o;1457:270::-;;;1584:2;1572:9;1563:7;1559:23;1555:32;1552:2;;;1605:6;1597;1590:22;1552:2;1633:31;1654:9;1633:31;:::i;:::-;1623:41;;1683:38;1717:2;1706:9;1702:18;1683:38;:::i;1732:257::-;;1852:2;1840:9;1831:7;1827:23;1823:32;1820:2;;;1873:6;1865;1858:22;1820:2;1910:9;1904:16;1929:30;1953:5;1929:30;:::i;1994:190::-;;2106:2;2094:9;2085:7;2081:23;2077:32;2074:2;;;2127:6;2119;2112:22;2074:2;-1:-1:-1;2155:23:1;;2064:120;-1:-1:-1;2064:120:1:o;2189:194::-;;2312:2;2300:9;2291:7;2287:23;2283:32;2280:2;;;2333:6;2325;2318:22;2280:2;-1:-1:-1;2361:16:1;;2270:113;-1:-1:-1;2270:113:1:o;2388:258::-;;;2517:2;2505:9;2496:7;2492:23;2488:32;2485:2;;;2538:6;2530;2523:22;2485:2;-1:-1:-1;;2566:23:1;;;2636:2;2621:18;;;2608:32;;-1:-1:-1;2475:171:1:o;2651:395::-;;;;;2814:3;2802:9;2793:7;2789:23;2785:33;2782:2;;;2836:6;2828;2821:22;2782:2;-1:-1:-1;;2864:23:1;;;2934:2;2919:18;;2906:32;;-1:-1:-1;2985:2:1;2970:18;;2957:32;;3036:2;3021:18;3008:32;;-1:-1:-1;2772:274:1;-1:-1:-1;2772:274:1:o;3051:464::-;;;;;;3231:3;3219:9;3210:7;3206:23;3202:33;3199:2;;;3253:6;3245;3238:22;3199:2;-1:-1:-1;;3281:23:1;;;3351:2;3336:18;;3323:32;;-1:-1:-1;3402:2:1;3387:18;;3374:32;;3453:2;3438:18;;3425:32;;-1:-1:-1;3504:3:1;3489:19;3476:33;;-1:-1:-1;3189:326:1;-1:-1:-1;3189:326:1:o;3520:325::-;;;3644:2;3632:9;3623:7;3619:23;3615:32;3612:2;;;3665:6;3657;3650:22;3612:2;3693:29;3712:9;3693:29;:::i;:::-;3683:39;;3772:2;3761:9;3757:18;3744:32;3785:30;3809:5;3785:30;:::i;:::-;3834:5;3824:15;;;3602:243;;;;;:::o;3850:262::-;;;3977:2;3965:9;3956:7;3952:23;3948:32;3945:2;;;3998:6;3990;3983:22;3945:2;4026:29;4045:9;4026:29;:::i;4117:203::-;-1:-1:-1;;;;;4281:32:1;;;;4263:51;;4251:2;4236:18;;4218:102::o;4325:375::-;-1:-1:-1;;;;;4583:15:1;;;4565:34;;4635:15;;;;4630:2;4615:18;;4608:43;4682:2;4667:18;;4660:34;;;;4515:2;4500:18;;4482:218::o;4705:274::-;-1:-1:-1;;;;;4897:32:1;;;;4879:51;;4961:2;4946:18;;4939:34;4867:2;4852:18;;4834:145::o;4984:187::-;5149:14;;5142:22;5124:41;;5112:2;5097:18;;5079:92::o;5176:683::-;5504:14;;5497:22;5479:41;;5563:14;;5556:22;5551:2;5536:18;;5529:50;5610:2;5595:18;;5588:34;;;;5653:2;5638:18;;5631:34;;;;-1:-1:-1;;;;;5740:15:1;;;5734:3;5719:19;;5712:44;5793:15;5692:3;5772:19;;5765:44;5840:3;5825:19;;5818:35;5466:3;5451:19;;5433:426::o;5864:771::-;6248:14;;6241:22;6223:41;;6307:14;;6300:22;6295:2;6280:18;;6273:50;6354:2;6339:18;;6332:34;;;;6397:2;6382:18;;6375:34;;;;6440:3;6425:19;;6418:35;;;;6484:3;6469:19;;6462:35;6528:3;6513:19;;6506:35;6572:3;6557:19;;6550:35;6616:3;6601:19;;6594:35;6210:3;6195:19;;6177:458::o;6640:603::-;;6781:2;6810;6799:9;6792:21;6842:6;6836:13;6885:6;6880:2;6869:9;6865:18;6858:34;6910:4;6923:140;6937:6;6934:1;6931:13;6923:140;;;7032:14;;;7028:23;;7022:30;6998:17;;;7017:2;6994:26;6987:66;6952:10;;6923:140;;;7081:6;7078:1;7075:13;7072:2;;;7151:4;7146:2;7137:6;7126:9;7122:22;7118:31;7111:45;7072:2;-1:-1:-1;7227:2:1;7206:15;-1:-1:-1;;7202:29:1;7187:45;;;;7234:2;7183:54;;6761:482;-1:-1:-1;;;6761:482:1:o;7248:399::-;7450:2;7432:21;;;7489:2;7469:18;;;7462:30;7528:34;7523:2;7508:18;;7501:62;-1:-1:-1;;;7594:2:1;7579:18;;7572:33;7637:3;7622:19;;7422:225::o;7652:398::-;7854:2;7836:21;;;7893:2;7873:18;;;7866:30;7932:34;7927:2;7912:18;;7905:62;-1:-1:-1;;;7998:2:1;7983:18;;7976:32;8040:3;8025:19;;7826:224::o;8055:397::-;8257:2;8239:21;;;8296:2;8276:18;;;8269:30;8335:34;8330:2;8315:18;;8308:62;-1:-1:-1;;;8401:2:1;8386:18;;8379:31;8442:3;8427:19;;8229:223::o;8457:402::-;8659:2;8641:21;;;8698:2;8678:18;;;8671:30;8737:34;8732:2;8717:18;;8710:62;-1:-1:-1;;;8803:2:1;8788:18;;8781:36;8849:3;8834:19;;8631:228::o;8864:398::-;9066:2;9048:21;;;9105:2;9085:18;;;9078:30;9144:34;9139:2;9124:18;;9117:62;-1:-1:-1;;;9210:2:1;9195:18;;9188:32;9252:3;9237:19;;9038:224::o;9267:402::-;9469:2;9451:21;;;9508:2;9488:18;;;9481:30;9547:34;9542:2;9527:18;;9520:62;-1:-1:-1;;;9613:2:1;9598:18;;9591:36;9659:3;9644:19;;9441:228::o;9674:331::-;9876:2;9858:21;;;9915:1;9895:18;;;9888:29;-1:-1:-1;;;9948:2:1;9933:18;;9926:38;9996:2;9981:18;;9848:157::o;10010:354::-;10212:2;10194:21;;;10251:2;10231:18;;;10224:30;10290:32;10285:2;10270:18;;10263:60;10355:2;10340:18;;10184:180::o;10369:350::-;10571:2;10553:21;;;10610:2;10590:18;;;10583:30;10649:28;10644:2;10629:18;;10622:56;10710:2;10695:18;;10543:176::o;10724:397::-;10926:2;10908:21;;;10965:2;10945:18;;;10938:30;11004:34;10999:2;10984:18;;10977:62;-1:-1:-1;;;11070:2:1;11055:18;;11048:31;11111:3;11096:19;;10898:223::o;11126:404::-;11328:2;11310:21;;;11367:2;11347:18;;;11340:30;11406:34;11401:2;11386:18;;11379:62;-1:-1:-1;;;11472:2:1;11457:18;;11450:38;11520:3;11505:19;;11300:230::o;11535:356::-;11737:2;11719:21;;;11756:18;;;11749:30;11815:34;11810:2;11795:18;;11788:62;11882:2;11867:18;;11709:182::o;11896:397::-;12098:2;12080:21;;;12137:2;12117:18;;;12110:30;12176:34;12171:2;12156:18;;12149:62;-1:-1:-1;;;12242:2:1;12227:18;;12220:31;12283:3;12268:19;;12070:223::o;12298:401::-;12500:2;12482:21;;;12539:2;12519:18;;;12512:30;12578:34;12573:2;12558:18;;12551:62;-1:-1:-1;;;12644:2:1;12629:18;;12622:35;12689:3;12674:19;;12472:227::o;12704:400::-;12906:2;12888:21;;;12945:2;12925:18;;;12918:30;12984:34;12979:2;12964:18;;12957:62;-1:-1:-1;;;13050:2:1;13035:18;;13028:34;13094:3;13079:19;;12878:226::o;13109:344::-;13311:2;13293:21;;;13350:2;13330:18;;;13323:30;-1:-1:-1;;;13384:2:1;13369:18;;13362:50;13444:2;13429:18;;13283:170::o;13458:401::-;13660:2;13642:21;;;13699:2;13679:18;;;13672:30;13738:34;13733:2;13718:18;;13711:62;-1:-1:-1;;;13804:2:1;13789:18;;13782:35;13849:3;13834:19;;13632:227::o;13864:355::-;14066:2;14048:21;;;14105:2;14085:18;;;14078:30;14144:33;14139:2;14124:18;;14117:61;14210:2;14195:18;;14038:181::o;14224:177::-;14370:25;;;14358:2;14343:18;;14325:76::o;14406:463::-;14665:25;;;14721:2;14706:18;;14699:34;;;;14764:2;14749:18;;14742:34;;;;14807:2;14792:18;;14785:34;14850:3;14835:19;;14828:35;14652:3;14637:19;;14619:250::o;14874:535::-;15161:25;;;15217:2;15202:18;;15195:34;;;;15260:2;15245:18;;15238:34;;;;15303:2;15288:18;;15281:34;15346:3;15331:19;;15324:35;15390:3;15375:19;;15368:35;15148:3;15133:19;;15115:294::o;15414:184::-;15586:4;15574:17;;;;15556:36;;15544:2;15529:18;;15511:87::o;15603:128::-;;15674:1;15670:6;15667:1;15664:13;15661:2;;;15680:18;;:::i;:::-;-1:-1:-1;15716:9:1;;15651:80::o;15736:217::-;;15802:1;15792:2;;-1:-1:-1;;;15827:31:1;;15881:4;15878:1;15871:15;15909:4;15834:1;15899:15;15792:2;-1:-1:-1;15938:9:1;;15782:171::o;15958:168::-;;16064:1;16060;16056:6;16052:14;16049:1;16046:21;16041:1;16034:9;16027:17;16023:45;16020:2;;;16071:18;;:::i;:::-;-1:-1:-1;16111:9:1;;16010:116::o;16131:125::-;;16199:1;16196;16193:8;16190:2;;;16204:18;;:::i;:::-;-1:-1:-1;16241:9:1;;16180:76::o;16261:380::-;16346:1;16336:12;;16393:1;16383:12;;;16404:2;;16458:4;16450:6;16446:17;16436:27;;16404:2;16511;16503:6;16500:14;16480:18;16477:38;16474:2;;;16557:10;16552:3;16548:20;16545:1;16538:31;16592:4;16589:1;16582:15;16620:4;16617:1;16610:15;16474:2;;16316:325;;;:::o;16646:135::-;;-1:-1:-1;;16706:17:1;;16703:2;;;16726:18;;:::i;:::-;-1:-1:-1;16773:1:1;16762:13;;16693:88::o;16786:127::-;16847:10;16842:3;16838:20;16835:1;16828:31;16878:4;16875:1;16868:15;16902:4;16899:1;16892:15;16918:120;17006:5;16999:13;16992:21;16985:5;16982:32;16972:2;;17028:1;17025;17018:12
Swarm Source
ipfs://3f20f5feeae50247e795ccff252276007a6728e6ab480e0686d8ee0313e9ecfc
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.