Feature Tip: Add private address tag to any address under My Name Tag !
Overview
Max Total Supply
1,554,176.494210791814387655 DAX
Holders
166 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.000000000000000209 DAXValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
DAX
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-06-21 */ // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.1.0/contracts/token/ERC20/IERC20.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.1.0/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.1.0/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.1.0/contracts/utils/structs/EnumerableSet.sol pragma solidity ^0.8.0; /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. * * Sets have the following properties: * * - Elements are added, removed, and checked for existence in constant time * (O(1)). * - Elements are enumerated in O(n). No guarantees are made on the ordering. * * ``` * contract Example { * // Add the library methods * using EnumerableSet for EnumerableSet.AddressSet; * * // Declare a set state variable * EnumerableSet.AddressSet private mySet; * } * ``` * * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) * and `uint256` (`UintSet`) are supported. */ library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping (bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement. bytes32 lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { require(set._values.length > index, "EnumerableSet: index out of bounds"); return set._values[index]; } // Bytes32Set struct Bytes32Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.1.0/contracts/utils/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.1.0/contracts/utils/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.1.0/contracts/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant alphabet = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = alphabet[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.1.0/contracts/access/AccessControl.sol pragma solidity ^0.8.0; /** * @dev External interface of AccessControl declared to support ERC165 detection. */ interface IAccessControl { function hasRole(bytes32 role, address account) external view returns (bool); function getRoleAdmin(bytes32 role) external view returns (bytes32); function grantRole(bytes32 role, address account) external; function revokeRole(bytes32 role, address account) external; function renounceRole(bytes32 role, address account) external; } /** * @dev Contract module that allows children to implement role-based access * control mechanisms. This is a lightweight version that doesn't allow enumerating role * members except through off-chain means by accessing the contract event logs. Some * applications may benefit from on-chain enumerability, for those cases see * {AccessControlEnumerable}. * * Roles are referred to by their `bytes32` identifier. These should be exposed * in the external API and be unique. The best way to achieve this is by * using `public constant` hash digests: * * ``` * bytes32 public constant MY_ROLE = keccak256("MY_ROLE"); * ``` * * Roles can be used to represent a set of permissions. To restrict access to a * function call, use {hasRole}: * * ``` * function foo() public { * require(hasRole(MY_ROLE, msg.sender)); * ... * } * ``` * * Roles can be granted and revoked dynamically via the {grantRole} and * {revokeRole} functions. Each role has an associated admin role, and only * accounts that have a role's admin role can call {grantRole} and {revokeRole}. * * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means * that only accounts with this role will be able to grant or revoke other * roles. More complex role relationships can be created by using * {_setRoleAdmin}. * * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to * grant and revoke this role. Extra precautions should be taken to secure * accounts that have been granted it. */ abstract contract AccessControl is Context, IAccessControl, ERC165 { struct RoleData { mapping (address => bool) members; bytes32 adminRole; } mapping (bytes32 => RoleData) private _roles; bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; /** * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` * * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite * {RoleAdminChanged} not being emitted signaling this. * * _Available since v3.1._ */ event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole); /** * @dev Emitted when `account` is granted `role`. * * `sender` is the account that originated the contract call, an admin role * bearer except when using {_setupRole}. */ event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Emitted when `account` is revoked `role`. * * `sender` is the account that originated the contract call: * - if using `revokeRole`, it is the admin role bearer * - if using `renounceRole`, it is the role bearer (i.e. `account`) */ event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Modifier that checks that an account has a specific role. Reverts * with a standardized message including the required role. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{20}) is missing role (0x[0-9a-f]{32})$/ * * _Available since v4.1._ */ modifier onlyRole(bytes32 role) { _checkRole(role, _msgSender()); _; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) public view override returns (bool) { return _roles[role].members[account]; } /** * @dev Revert with a standard message if `account` is missing `role`. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{20}) is missing role (0x[0-9a-f]{32})$/ */ function _checkRole(bytes32 role, address account) internal view { if(!hasRole(role, account)) { revert(string(abi.encodePacked( "AccessControl: account ", Strings.toHexString(uint160(account), 20), " is missing role ", Strings.toHexString(uint256(role), 32) ))); } } /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) public view override returns (bytes32) { return _roles[role].adminRole; } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _grantRole(role, account); } /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _revokeRole(role, account); } /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been granted `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) public virtual override { require(account == _msgSender(), "AccessControl: can only renounce roles for self"); _revokeRole(role, account); } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. Note that unlike {grantRole}, this function doesn't perform any * checks on the calling account. * * [WARNING] * ==== * This function should only be called from the constructor when setting * up the initial roles for the system. * * Using this function in any other way is effectively circumventing the admin * system imposed by {AccessControl}. * ==== */ function _setupRole(bytes32 role, address account) internal virtual { _grantRole(role, account); } /** * @dev Sets `adminRole` as ``role``'s admin role. * * Emits a {RoleAdminChanged} event. */ function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual { emit RoleAdminChanged(role, getRoleAdmin(role), adminRole); _roles[role].adminRole = adminRole; } function _grantRole(bytes32 role, address account) private { if (!hasRole(role, account)) { _roles[role].members[account] = true; emit RoleGranted(role, account, _msgSender()); } } function _revokeRole(bytes32 role, address account) private { if (hasRole(role, account)) { _roles[role].members[account] = false; emit RoleRevoked(role, account, _msgSender()); } } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.1.0/contracts/access/AccessControlEnumerable.sol pragma solidity ^0.8.0; /** * @dev External interface of AccessControlEnumerable declared to support ERC165 detection. */ interface IAccessControlEnumerable { function getRoleMember(bytes32 role, uint256 index) external view returns (address); function getRoleMemberCount(bytes32 role) external view returns (uint256); } /** * @dev Extension of {AccessControl} that allows enumerating the members of each role. */ abstract contract AccessControlEnumerable is IAccessControlEnumerable, AccessControl { using EnumerableSet for EnumerableSet.AddressSet; mapping (bytes32 => EnumerableSet.AddressSet) private _roleMembers; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControlEnumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Returns one of the accounts that have `role`. `index` must be a * value between 0 and {getRoleMemberCount}, non-inclusive. * * Role bearers are not sorted in any particular way, and their ordering may * change at any point. * * WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure * you perform all queries on the same block. See the following * https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post] * for more information. */ function getRoleMember(bytes32 role, uint256 index) public view override returns (address) { return _roleMembers[role].at(index); } /** * @dev Returns the number of accounts that have `role`. Can be used * together with {getRoleMember} to enumerate all bearers of a role. */ function getRoleMemberCount(bytes32 role) public view override returns (uint256) { return _roleMembers[role].length(); } /** * @dev Overload {grantRole} to track enumerable memberships */ function grantRole(bytes32 role, address account) public virtual override { super.grantRole(role, account); _roleMembers[role].add(account); } /** * @dev Overload {revokeRole} to track enumerable memberships */ function revokeRole(bytes32 role, address account) public virtual override { super.revokeRole(role, account); _roleMembers[role].remove(account); } /** * @dev Overload {renounceRole} to track enumerable memberships */ function renounceRole(bytes32 role, address account) public virtual override { super.renounceRole(role, account); _roleMembers[role].remove(account); } /** * @dev Overload {_setupRole} to track enumerable memberships */ function _setupRole(bytes32 role, address account) internal virtual override { super._setupRole(role, account); _roleMembers[role].add(account); } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.1.0/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 => 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; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); _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"); _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); } /** @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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.1.0/contracts/token/ERC20/extensions/ERC20Burnable.sol pragma solidity ^0.8.0; /** * @dev Extension of {ERC20} that allows token holders to destroy both their own * tokens and those that they have an allowance for, in a way that can be * recognized off-chain (via event analysis). */ abstract contract ERC20Burnable is Context, ERC20 { /** * @dev Destroys `amount` tokens from the caller. * * See {ERC20-_burn}. */ function burn(uint256 amount) public virtual { _burn(_msgSender(), amount); } /** * @dev Destroys `amount` tokens from `account`, deducting from the caller's * allowance. * * See {ERC20-_burn} and {ERC20-allowance}. * * Requirements: * * - the caller must have allowance for ``accounts``'s tokens of at least * `amount`. */ function burnFrom(address account, uint256 amount) public virtual { uint256 currentAllowance = allowance(account, _msgSender()); require(currentAllowance >= amount, "ERC20: burn amount exceeds allowance"); _approve(account, _msgSender(), currentAllowance - amount); _burn(account, amount); } } // File: contracts/DAX.sol pragma solidity ^0.8.4; contract DAX is Context, AccessControlEnumerable, ERC20, ERC20Burnable { bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE"); constructor () ERC20("Dragon X", "DAX") { _setupRole(DEFAULT_ADMIN_ROLE, _msgSender()); _setupRole(MINTER_ROLE, _msgSender()); } function mint(address to, uint256 amount) public virtual { require(hasRole(MINTER_ROLE, _msgSender()), "ERC20PresetMinterPauser: must have minter role to mint"); _mint(to, 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":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","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"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINTER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","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":"balanceOf","outputs":[{"internalType":"uint256","name":"","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":"burnFrom","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":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getRoleMember","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleMemberCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040518060400160405280600881526020017f447261676f6e20580000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4441580000000000000000000000000000000000000000000000000000000000815250816005908051906020019062000096929190620003b3565b508060069080519060200190620000af929190620003b3565b505050620000d66000801b620000ca6200011d60201b60201c565b6200012560201b60201c565b620001177f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66200010b6200011d60201b60201c565b6200012560201b60201c565b620004c8565b600033905090565b6200013c82826200016d60201b62000d101760201c565b6200016881600160008581526020019081526020016000206200018360201b62000d1e1790919060201c565b505050565b6200017f8282620001bb60201b60201c565b5050565b6000620001b3836000018373ffffffffffffffffffffffffffffffffffffffff1660001b620002ac60201b60201c565b905092915050565b620001cd82826200032660201b60201c565b620002a857600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200024d6200011d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000620002c083836200039060201b60201c565b6200031b57826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905062000320565b600090505b92915050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600080836001016000848152602001908152602001600020541415905092915050565b828054620003c19062000463565b90600052602060002090601f016020900481019282620003e5576000855562000431565b82601f106200040057805160ff191683800117855562000431565b8280016001018555821562000431579182015b828111156200043057825182559160200191906001019062000413565b5b50905062000440919062000444565b5090565b5b808211156200045f57600081600090555060010162000445565b5090565b600060028204905060018216806200047c57607f821691505b6020821081141562000493576200049262000499565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b612ece80620004d86000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c806370a08231116100c3578063a457c2d71161007c578063a457c2d7146103ff578063a9059cbb1461042f578063ca15c8731461045f578063d53913931461048f578063d547741f146104ad578063dd62ed3e146104c957610158565b806370a082311461031757806379cc6790146103475780639010d07c1461036357806391d148541461039357806395d89b41146103c3578063a217fddf146103e157610158565b80632f2ff15d116101155780632f2ff15d14610259578063313ce5671461027557806336568abe1461029357806339509351146102af57806340c10f19146102df57806342966c68146102fb57610158565b806301ffc9a71461015d57806306fdde031461018d578063095ea7b3146101ab57806318160ddd146101db57806323b872dd146101f9578063248a9ca314610229575b600080fd5b610177600480360381019061017291906120e4565b6104f9565b6040516101849190612493565b60405180910390f35b610195610573565b6040516101a291906124c9565b60405180910390f35b6101c560048036038101906101c09190612007565b610605565b6040516101d29190612493565b60405180910390f35b6101e3610623565b6040516101f091906126cb565b60405180910390f35b610213600480360381019061020e9190611fb8565b61062d565b6040516102209190612493565b60405180910390f35b610243600480360381019061023e9190612043565b61072e565b60405161025091906124ae565b60405180910390f35b610273600480360381019061026e919061206c565b61074d565b005b61027d610781565b60405161028a91906126e6565b60405180910390f35b6102ad60048036038101906102a8919061206c565b61078a565b005b6102c960048036038101906102c49190612007565b6107be565b6040516102d69190612493565b60405180910390f35b6102f960048036038101906102f49190612007565b61086a565b005b6103156004803603810190610310919061210d565b6108e8565b005b610331600480360381019061032c9190611f53565b6108fc565b60405161033e91906126cb565b60405180910390f35b610361600480360381019061035c9190612007565b610945565b005b61037d600480360381019061037891906120a8565b6109c9565b60405161038a9190612478565b60405180910390f35b6103ad60048036038101906103a8919061206c565b6109f8565b6040516103ba9190612493565b60405180910390f35b6103cb610a62565b6040516103d891906124c9565b60405180910390f35b6103e9610af4565b6040516103f691906124ae565b60405180910390f35b61041960048036038101906104149190612007565b610afb565b6040516104269190612493565b60405180910390f35b61044960048036038101906104449190612007565b610bef565b6040516104569190612493565b60405180910390f35b61047960048036038101906104749190612043565b610c0d565b60405161048691906126cb565b60405180910390f35b610497610c31565b6040516104a491906124ae565b60405180910390f35b6104c760048036038101906104c2919061206c565b610c55565b005b6104e360048036038101906104de9190611f7c565b610c89565b6040516104f091906126cb565b60405180910390f35b60007f5a05180f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061056c575061056b82610d4e565b5b9050919050565b606060058054610582906128f4565b80601f01602080910402602001604051908101604052809291908181526020018280546105ae906128f4565b80156105fb5780601f106105d0576101008083540402835291602001916105fb565b820191906000526020600020905b8154815290600101906020018083116105de57829003601f168201915b5050505050905090565b6000610619610612610dc8565b8484610dd0565b6001905092915050565b6000600454905090565b600061063a848484610f9b565b6000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610685610dc8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610705576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106fc906125ab565b60405180910390fd5b61072285610711610dc8565b858461071d91906127d8565b610dd0565b60019150509392505050565b6000806000838152602001908152602001600020600101549050919050565b610757828261121d565b61077c8160016000858152602001908152602001600020610d1e90919063ffffffff16565b505050565b60006012905090565b6107948282611246565b6107b981600160008581526020019081526020016000206112c990919063ffffffff16565b505050565b60006108606107cb610dc8565b8484600360006107d9610dc8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461085b9190612728565b610dd0565b6001905092915050565b61089b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610896610dc8565b6109f8565b6108da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d1906125cb565b60405180910390fd5b6108e482826112f9565b5050565b6108f96108f3610dc8565b8261144e565b50565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600061095883610953610dc8565b610c89565b90508181101561099d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610994906125eb565b60405180910390fd5b6109ba836109a9610dc8565b84846109b591906127d8565b610dd0565b6109c4838361144e565b505050565b60006109f0826001600086815260200190815260200160002061162490919063ffffffff16565b905092915050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606060068054610a71906128f4565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9d906128f4565b8015610aea5780601f10610abf57610100808354040283529160200191610aea565b820191906000526020600020905b815481529060010190602001808311610acd57829003601f168201915b5050505050905090565b6000801b81565b60008060036000610b0a610dc8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610bc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbe9061266b565b60405180910390fd5b610be4610bd2610dc8565b858584610bdf91906127d8565b610dd0565b600191505092915050565b6000610c03610bfc610dc8565b8484610f9b565b6001905092915050565b6000610c2a6001600084815260200190815260200160002061163e565b9050919050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b610c5f8282611653565b610c8481600160008581526020019081526020016000206112c990919063ffffffff16565b505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610d1a828261167c565b5050565b6000610d46836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61175c565b905092915050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610dc15750610dc0826117cc565b5b9050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e379061264b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610eb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea79061256b565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610f8e91906126cb565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561100b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110029061262b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561107b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110729061252b565b60405180910390fd5b611086838383611836565b6000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561110d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111049061258b565b60405180910390fd5b818161111991906127d8565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111ab9190612728565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161120f91906126cb565b60405180910390a350505050565b6112268261072e565b61123781611232610dc8565b61183b565b611241838361167c565b505050565b61124e610dc8565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146112bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b29061268b565b60405180910390fd5b6112c582826118d8565b5050565b60006112f1836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6119b9565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611369576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611360906126ab565b60405180910390fd5b61137560008383611836565b80600460008282546113879190612728565b9250508190555080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113dd9190612728565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161144291906126cb565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b59061260b565b60405180910390fd5b6114ca82600083611836565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611551576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115489061254b565b60405180910390fd5b818161155d91906127d8565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600460008282546115b291906127d8565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161161791906126cb565b60405180910390a3505050565b60006116338360000183611b37565b60001c905092915050565b600061164c82600001611bd1565b9050919050565b61165c8261072e565b61166d81611668610dc8565b61183b565b61167783836118d8565b505050565b61168682826109f8565b61175857600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506116fd610dc8565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b60006117688383611be2565b6117c15782600001829080600181540180825580915050600190039060005260206000200160009091909190915055826000018054905083600101600084815260200190815260200160002081905550600190506117c6565b600090505b92915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b61184582826109f8565b6118d45761186a8173ffffffffffffffffffffffffffffffffffffffff166014611c05565b6118788360001c6020611c05565b60405160200161188992919061243e565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cb91906124c9565b60405180910390fd5b5050565b6118e282826109f8565b156119b557600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061195a610dc8565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b60008083600101600084815260200190815260200160002054905060008114611b2b5760006001826119eb91906127d8565b9050600060018660000180549050611a0391906127d8565b90506000866000018281548110611a43577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080876000018481548110611a8d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550838760010160008381526020019081526020016000208190555086600001805480611aef577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050611b31565b60009150505b92915050565b600081836000018054905011611b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b79906124eb565b60405180910390fd5b826000018281548110611bbe577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905092915050565b600081600001805490509050919050565b600080836001016000848152602001908152602001600020541415905092915050565b606060006002836002611c18919061277e565b611c229190612728565b67ffffffffffffffff811115611c61577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611c935781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611cf1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611d7b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002611dbb919061277e565b611dc59190612728565b90505b6001811115611eb1577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110611e2d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b828281518110611e6a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080611eaa906128ca565b9050611dc8565b5060008414611ef5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eec9061250b565b60405180910390fd5b8091505092915050565b600081359050611f0e81612e3c565b92915050565b600081359050611f2381612e53565b92915050565b600081359050611f3881612e6a565b92915050565b600081359050611f4d81612e81565b92915050565b600060208284031215611f6557600080fd5b6000611f7384828501611eff565b91505092915050565b60008060408385031215611f8f57600080fd5b6000611f9d85828601611eff565b9250506020611fae85828601611eff565b9150509250929050565b600080600060608486031215611fcd57600080fd5b6000611fdb86828701611eff565b9350506020611fec86828701611eff565b9250506040611ffd86828701611f3e565b9150509250925092565b6000806040838503121561201a57600080fd5b600061202885828601611eff565b925050602061203985828601611f3e565b9150509250929050565b60006020828403121561205557600080fd5b600061206384828501611f14565b91505092915050565b6000806040838503121561207f57600080fd5b600061208d85828601611f14565b925050602061209e85828601611eff565b9150509250929050565b600080604083850312156120bb57600080fd5b60006120c985828601611f14565b92505060206120da85828601611f3e565b9150509250929050565b6000602082840312156120f657600080fd5b600061210484828501611f29565b91505092915050565b60006020828403121561211f57600080fd5b600061212d84828501611f3e565b91505092915050565b61213f8161280c565b82525050565b61214e8161281e565b82525050565b61215d8161282a565b82525050565b600061216e82612701565b612178818561270c565b9350612188818560208601612897565b61219181612984565b840191505092915050565b60006121a782612701565b6121b1818561271d565b93506121c1818560208601612897565b80840191505092915050565b60006121da60228361270c565b91506121e582612995565b604082019050919050565b60006121fd60208361270c565b9150612208826129e4565b602082019050919050565b600061222060238361270c565b915061222b82612a0d565b604082019050919050565b600061224360228361270c565b915061224e82612a5c565b604082019050919050565b600061226660228361270c565b915061227182612aab565b604082019050919050565b600061228960268361270c565b915061229482612afa565b604082019050919050565b60006122ac60288361270c565b91506122b782612b49565b604082019050919050565b60006122cf60368361270c565b91506122da82612b98565b604082019050919050565b60006122f260248361270c565b91506122fd82612be7565b604082019050919050565b600061231560218361270c565b915061232082612c36565b604082019050919050565b600061233860258361270c565b915061234382612c85565b604082019050919050565b600061235b60248361270c565b915061236682612cd4565b604082019050919050565b600061237e60178361271d565b915061238982612d23565b601782019050919050565b60006123a160258361270c565b91506123ac82612d4c565b604082019050919050565b60006123c460118361271d565b91506123cf82612d9b565b601182019050919050565b60006123e7602f8361270c565b91506123f282612dc4565b604082019050919050565b600061240a601f8361270c565b915061241582612e13565b602082019050919050565b61242981612880565b82525050565b6124388161288a565b82525050565b600061244982612371565b9150612455828561219c565b9150612460826123b7565b915061246c828461219c565b91508190509392505050565b600060208201905061248d6000830184612136565b92915050565b60006020820190506124a86000830184612145565b92915050565b60006020820190506124c36000830184612154565b92915050565b600060208201905081810360008301526124e38184612163565b905092915050565b60006020820190508181036000830152612504816121cd565b9050919050565b60006020820190508181036000830152612524816121f0565b9050919050565b6000602082019050818103600083015261254481612213565b9050919050565b6000602082019050818103600083015261256481612236565b9050919050565b6000602082019050818103600083015261258481612259565b9050919050565b600060208201905081810360008301526125a48161227c565b9050919050565b600060208201905081810360008301526125c48161229f565b9050919050565b600060208201905081810360008301526125e4816122c2565b9050919050565b60006020820190508181036000830152612604816122e5565b9050919050565b6000602082019050818103600083015261262481612308565b9050919050565b600060208201905081810360008301526126448161232b565b9050919050565b600060208201905081810360008301526126648161234e565b9050919050565b6000602082019050818103600083015261268481612394565b9050919050565b600060208201905081810360008301526126a4816123da565b9050919050565b600060208201905081810360008301526126c4816123fd565b9050919050565b60006020820190506126e06000830184612420565b92915050565b60006020820190506126fb600083018461242f565b92915050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600061273382612880565b915061273e83612880565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561277357612772612926565b5b828201905092915050565b600061278982612880565b915061279483612880565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156127cd576127cc612926565b5b828202905092915050565b60006127e382612880565b91506127ee83612880565b92508282101561280157612800612926565b5b828203905092915050565b600061281782612860565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156128b557808201518184015260208101905061289a565b838111156128c4576000848401525b50505050565b60006128d582612880565b915060008214156128e9576128e8612926565b5b600182039050919050565b6000600282049050600182168061290c57607f821691505b602082108114156129205761291f612955565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f45524332305072657365744d696e7465725061757365723a206d75737420686160008201527f7665206d696e74657220726f6c6520746f206d696e7400000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b612e458161280c565b8114612e5057600080fd5b50565b612e5c8161282a565b8114612e6757600080fd5b50565b612e7381612834565b8114612e7e57600080fd5b50565b612e8a81612880565b8114612e9557600080fd5b5056fea2646970667358221220c32c9a6ca578f2c4ad01477e03307b621f8de2136a96d8d6247dc8fea348449564736f6c63430008040033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101585760003560e01c806370a08231116100c3578063a457c2d71161007c578063a457c2d7146103ff578063a9059cbb1461042f578063ca15c8731461045f578063d53913931461048f578063d547741f146104ad578063dd62ed3e146104c957610158565b806370a082311461031757806379cc6790146103475780639010d07c1461036357806391d148541461039357806395d89b41146103c3578063a217fddf146103e157610158565b80632f2ff15d116101155780632f2ff15d14610259578063313ce5671461027557806336568abe1461029357806339509351146102af57806340c10f19146102df57806342966c68146102fb57610158565b806301ffc9a71461015d57806306fdde031461018d578063095ea7b3146101ab57806318160ddd146101db57806323b872dd146101f9578063248a9ca314610229575b600080fd5b610177600480360381019061017291906120e4565b6104f9565b6040516101849190612493565b60405180910390f35b610195610573565b6040516101a291906124c9565b60405180910390f35b6101c560048036038101906101c09190612007565b610605565b6040516101d29190612493565b60405180910390f35b6101e3610623565b6040516101f091906126cb565b60405180910390f35b610213600480360381019061020e9190611fb8565b61062d565b6040516102209190612493565b60405180910390f35b610243600480360381019061023e9190612043565b61072e565b60405161025091906124ae565b60405180910390f35b610273600480360381019061026e919061206c565b61074d565b005b61027d610781565b60405161028a91906126e6565b60405180910390f35b6102ad60048036038101906102a8919061206c565b61078a565b005b6102c960048036038101906102c49190612007565b6107be565b6040516102d69190612493565b60405180910390f35b6102f960048036038101906102f49190612007565b61086a565b005b6103156004803603810190610310919061210d565b6108e8565b005b610331600480360381019061032c9190611f53565b6108fc565b60405161033e91906126cb565b60405180910390f35b610361600480360381019061035c9190612007565b610945565b005b61037d600480360381019061037891906120a8565b6109c9565b60405161038a9190612478565b60405180910390f35b6103ad60048036038101906103a8919061206c565b6109f8565b6040516103ba9190612493565b60405180910390f35b6103cb610a62565b6040516103d891906124c9565b60405180910390f35b6103e9610af4565b6040516103f691906124ae565b60405180910390f35b61041960048036038101906104149190612007565b610afb565b6040516104269190612493565b60405180910390f35b61044960048036038101906104449190612007565b610bef565b6040516104569190612493565b60405180910390f35b61047960048036038101906104749190612043565b610c0d565b60405161048691906126cb565b60405180910390f35b610497610c31565b6040516104a491906124ae565b60405180910390f35b6104c760048036038101906104c2919061206c565b610c55565b005b6104e360048036038101906104de9190611f7c565b610c89565b6040516104f091906126cb565b60405180910390f35b60007f5a05180f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061056c575061056b82610d4e565b5b9050919050565b606060058054610582906128f4565b80601f01602080910402602001604051908101604052809291908181526020018280546105ae906128f4565b80156105fb5780601f106105d0576101008083540402835291602001916105fb565b820191906000526020600020905b8154815290600101906020018083116105de57829003601f168201915b5050505050905090565b6000610619610612610dc8565b8484610dd0565b6001905092915050565b6000600454905090565b600061063a848484610f9b565b6000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610685610dc8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610705576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106fc906125ab565b60405180910390fd5b61072285610711610dc8565b858461071d91906127d8565b610dd0565b60019150509392505050565b6000806000838152602001908152602001600020600101549050919050565b610757828261121d565b61077c8160016000858152602001908152602001600020610d1e90919063ffffffff16565b505050565b60006012905090565b6107948282611246565b6107b981600160008581526020019081526020016000206112c990919063ffffffff16565b505050565b60006108606107cb610dc8565b8484600360006107d9610dc8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461085b9190612728565b610dd0565b6001905092915050565b61089b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610896610dc8565b6109f8565b6108da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d1906125cb565b60405180910390fd5b6108e482826112f9565b5050565b6108f96108f3610dc8565b8261144e565b50565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600061095883610953610dc8565b610c89565b90508181101561099d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610994906125eb565b60405180910390fd5b6109ba836109a9610dc8565b84846109b591906127d8565b610dd0565b6109c4838361144e565b505050565b60006109f0826001600086815260200190815260200160002061162490919063ffffffff16565b905092915050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606060068054610a71906128f4565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9d906128f4565b8015610aea5780601f10610abf57610100808354040283529160200191610aea565b820191906000526020600020905b815481529060010190602001808311610acd57829003601f168201915b5050505050905090565b6000801b81565b60008060036000610b0a610dc8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610bc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbe9061266b565b60405180910390fd5b610be4610bd2610dc8565b858584610bdf91906127d8565b610dd0565b600191505092915050565b6000610c03610bfc610dc8565b8484610f9b565b6001905092915050565b6000610c2a6001600084815260200190815260200160002061163e565b9050919050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b610c5f8282611653565b610c8481600160008581526020019081526020016000206112c990919063ffffffff16565b505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610d1a828261167c565b5050565b6000610d46836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61175c565b905092915050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610dc15750610dc0826117cc565b5b9050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e379061264b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610eb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea79061256b565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610f8e91906126cb565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561100b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110029061262b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561107b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110729061252b565b60405180910390fd5b611086838383611836565b6000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561110d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111049061258b565b60405180910390fd5b818161111991906127d8565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111ab9190612728565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161120f91906126cb565b60405180910390a350505050565b6112268261072e565b61123781611232610dc8565b61183b565b611241838361167c565b505050565b61124e610dc8565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146112bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b29061268b565b60405180910390fd5b6112c582826118d8565b5050565b60006112f1836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6119b9565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611369576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611360906126ab565b60405180910390fd5b61137560008383611836565b80600460008282546113879190612728565b9250508190555080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113dd9190612728565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161144291906126cb565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b59061260b565b60405180910390fd5b6114ca82600083611836565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611551576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115489061254b565b60405180910390fd5b818161155d91906127d8565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600460008282546115b291906127d8565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161161791906126cb565b60405180910390a3505050565b60006116338360000183611b37565b60001c905092915050565b600061164c82600001611bd1565b9050919050565b61165c8261072e565b61166d81611668610dc8565b61183b565b61167783836118d8565b505050565b61168682826109f8565b61175857600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506116fd610dc8565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b60006117688383611be2565b6117c15782600001829080600181540180825580915050600190039060005260206000200160009091909190915055826000018054905083600101600084815260200190815260200160002081905550600190506117c6565b600090505b92915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b61184582826109f8565b6118d45761186a8173ffffffffffffffffffffffffffffffffffffffff166014611c05565b6118788360001c6020611c05565b60405160200161188992919061243e565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cb91906124c9565b60405180910390fd5b5050565b6118e282826109f8565b156119b557600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061195a610dc8565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b60008083600101600084815260200190815260200160002054905060008114611b2b5760006001826119eb91906127d8565b9050600060018660000180549050611a0391906127d8565b90506000866000018281548110611a43577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080876000018481548110611a8d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550838760010160008381526020019081526020016000208190555086600001805480611aef577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050611b31565b60009150505b92915050565b600081836000018054905011611b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b79906124eb565b60405180910390fd5b826000018281548110611bbe577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905092915050565b600081600001805490509050919050565b600080836001016000848152602001908152602001600020541415905092915050565b606060006002836002611c18919061277e565b611c229190612728565b67ffffffffffffffff811115611c61577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611c935781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611cf1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611d7b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002611dbb919061277e565b611dc59190612728565b90505b6001811115611eb1577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110611e2d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b828281518110611e6a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080611eaa906128ca565b9050611dc8565b5060008414611ef5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eec9061250b565b60405180910390fd5b8091505092915050565b600081359050611f0e81612e3c565b92915050565b600081359050611f2381612e53565b92915050565b600081359050611f3881612e6a565b92915050565b600081359050611f4d81612e81565b92915050565b600060208284031215611f6557600080fd5b6000611f7384828501611eff565b91505092915050565b60008060408385031215611f8f57600080fd5b6000611f9d85828601611eff565b9250506020611fae85828601611eff565b9150509250929050565b600080600060608486031215611fcd57600080fd5b6000611fdb86828701611eff565b9350506020611fec86828701611eff565b9250506040611ffd86828701611f3e565b9150509250925092565b6000806040838503121561201a57600080fd5b600061202885828601611eff565b925050602061203985828601611f3e565b9150509250929050565b60006020828403121561205557600080fd5b600061206384828501611f14565b91505092915050565b6000806040838503121561207f57600080fd5b600061208d85828601611f14565b925050602061209e85828601611eff565b9150509250929050565b600080604083850312156120bb57600080fd5b60006120c985828601611f14565b92505060206120da85828601611f3e565b9150509250929050565b6000602082840312156120f657600080fd5b600061210484828501611f29565b91505092915050565b60006020828403121561211f57600080fd5b600061212d84828501611f3e565b91505092915050565b61213f8161280c565b82525050565b61214e8161281e565b82525050565b61215d8161282a565b82525050565b600061216e82612701565b612178818561270c565b9350612188818560208601612897565b61219181612984565b840191505092915050565b60006121a782612701565b6121b1818561271d565b93506121c1818560208601612897565b80840191505092915050565b60006121da60228361270c565b91506121e582612995565b604082019050919050565b60006121fd60208361270c565b9150612208826129e4565b602082019050919050565b600061222060238361270c565b915061222b82612a0d565b604082019050919050565b600061224360228361270c565b915061224e82612a5c565b604082019050919050565b600061226660228361270c565b915061227182612aab565b604082019050919050565b600061228960268361270c565b915061229482612afa565b604082019050919050565b60006122ac60288361270c565b91506122b782612b49565b604082019050919050565b60006122cf60368361270c565b91506122da82612b98565b604082019050919050565b60006122f260248361270c565b91506122fd82612be7565b604082019050919050565b600061231560218361270c565b915061232082612c36565b604082019050919050565b600061233860258361270c565b915061234382612c85565b604082019050919050565b600061235b60248361270c565b915061236682612cd4565b604082019050919050565b600061237e60178361271d565b915061238982612d23565b601782019050919050565b60006123a160258361270c565b91506123ac82612d4c565b604082019050919050565b60006123c460118361271d565b91506123cf82612d9b565b601182019050919050565b60006123e7602f8361270c565b91506123f282612dc4565b604082019050919050565b600061240a601f8361270c565b915061241582612e13565b602082019050919050565b61242981612880565b82525050565b6124388161288a565b82525050565b600061244982612371565b9150612455828561219c565b9150612460826123b7565b915061246c828461219c565b91508190509392505050565b600060208201905061248d6000830184612136565b92915050565b60006020820190506124a86000830184612145565b92915050565b60006020820190506124c36000830184612154565b92915050565b600060208201905081810360008301526124e38184612163565b905092915050565b60006020820190508181036000830152612504816121cd565b9050919050565b60006020820190508181036000830152612524816121f0565b9050919050565b6000602082019050818103600083015261254481612213565b9050919050565b6000602082019050818103600083015261256481612236565b9050919050565b6000602082019050818103600083015261258481612259565b9050919050565b600060208201905081810360008301526125a48161227c565b9050919050565b600060208201905081810360008301526125c48161229f565b9050919050565b600060208201905081810360008301526125e4816122c2565b9050919050565b60006020820190508181036000830152612604816122e5565b9050919050565b6000602082019050818103600083015261262481612308565b9050919050565b600060208201905081810360008301526126448161232b565b9050919050565b600060208201905081810360008301526126648161234e565b9050919050565b6000602082019050818103600083015261268481612394565b9050919050565b600060208201905081810360008301526126a4816123da565b9050919050565b600060208201905081810360008301526126c4816123fd565b9050919050565b60006020820190506126e06000830184612420565b92915050565b60006020820190506126fb600083018461242f565b92915050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600061273382612880565b915061273e83612880565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561277357612772612926565b5b828201905092915050565b600061278982612880565b915061279483612880565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156127cd576127cc612926565b5b828202905092915050565b60006127e382612880565b91506127ee83612880565b92508282101561280157612800612926565b5b828203905092915050565b600061281782612860565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156128b557808201518184015260208101905061289a565b838111156128c4576000848401525b50505050565b60006128d582612880565b915060008214156128e9576128e8612926565b5b600182039050919050565b6000600282049050600182168061290c57607f821691505b602082108114156129205761291f612955565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f45524332305072657365744d696e7465725061757365723a206d75737420686160008201527f7665206d696e74657220726f6c6520746f206d696e7400000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b612e458161280c565b8114612e5057600080fd5b50565b612e5c8161282a565b8114612e6757600080fd5b50565b612e7381612834565b8114612e7e57600080fd5b50565b612e8a81612880565b8114612e9557600080fd5b5056fea2646970667358221220c32c9a6ca578f2c4ad01477e03307b621f8de2136a96d8d6247dc8fea348449564736f6c63430008040033
Deployed Bytecode Sourcemap
42475:526:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27891:227;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32346:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34513:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33466:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35164:422;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23875:123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29262:165;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33308:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29785:174;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35995:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42793:205;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41665:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33637:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42075:332;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28717:145;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22873:139;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32565:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20838:49;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36713:377;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33977:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29036:134;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42559:62;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29520:170;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34215:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27891:227;27976:4;28015:42;28000:57;;;:11;:57;;;;:110;;;;28074:36;28098:11;28074:23;:36::i;:::-;28000:110;27993:117;;27891:227;;;:::o;32346:100::-;32400:13;32433:5;32426:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32346:100;:::o;34513:169::-;34596:4;34613:39;34622:12;:10;:12::i;:::-;34636:7;34645:6;34613:8;:39::i;:::-;34670:4;34663:11;;34513:169;;;;:::o;33466:108::-;33527:7;33554:12;;33547:19;;33466:108;:::o;35164:422::-;35270:4;35287:36;35297:6;35305:9;35316:6;35287:9;:36::i;:::-;35336:24;35363:11;:19;35375:6;35363:19;;;;;;;;;;;;;;;:33;35383:12;:10;:12::i;:::-;35363:33;;;;;;;;;;;;;;;;35336:60;;35435:6;35415:16;:26;;35407:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;35497:57;35506:6;35514:12;:10;:12::i;:::-;35547:6;35528:16;:25;;;;:::i;:::-;35497:8;:57::i;:::-;35574:4;35567:11;;;35164:422;;;;;:::o;23875:123::-;23941:7;23968:6;:12;23975:4;23968:12;;;;;;;;;;;:22;;;23961:29;;23875:123;;;:::o;29262:165::-;29347:30;29363:4;29369:7;29347:15;:30::i;:::-;29388:31;29411:7;29388:12;:18;29401:4;29388:18;;;;;;;;;;;:22;;:31;;;;:::i;:::-;;29262:165;;:::o;33308:93::-;33366:5;33391:2;33384:9;;33308:93;:::o;29785:174::-;29873:33;29892:4;29898:7;29873:18;:33::i;:::-;29917:34;29943:7;29917:12;:18;29930:4;29917:18;;;;;;;;;;;:25;;:34;;;;:::i;:::-;;29785:174;;:::o;35995:215::-;36083:4;36100:80;36109:12;:10;:12::i;:::-;36123:7;36169:10;36132:11;:25;36144:12;:10;:12::i;:::-;36132:25;;;;;;;;;;;;;;;:34;36158:7;36132:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;36100:8;:80::i;:::-;36198:4;36191:11;;35995:215;;;;:::o;42793:205::-;42869:34;42597:24;42890:12;:10;:12::i;:::-;42869:7;:34::i;:::-;42861:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;42973:17;42979:2;42983:6;42973:5;:17::i;:::-;42793:205;;:::o;41665:91::-;41721:27;41727:12;:10;:12::i;:::-;41741:6;41721:5;:27::i;:::-;41665:91;:::o;33637:127::-;33711:7;33738:9;:18;33748:7;33738:18;;;;;;;;;;;;;;;;33731:25;;33637:127;;;:::o;42075:332::-;42152:24;42179:32;42189:7;42198:12;:10;:12::i;:::-;42179:9;:32::i;:::-;42152:59;;42250:6;42230:16;:26;;42222:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;42308:58;42317:7;42326:12;:10;:12::i;:::-;42359:6;42340:16;:25;;;;:::i;:::-;42308:8;:58::i;:::-;42377:22;42383:7;42392:6;42377:5;:22::i;:::-;42075:332;;;:::o;28717:145::-;28799:7;28826:28;28848:5;28826:12;:18;28839:4;28826:18;;;;;;;;;;;:21;;:28;;;;:::i;:::-;28819:35;;28717:145;;;;:::o;22873:139::-;22951:4;22975:6;:12;22982:4;22975:12;;;;;;;;;;;:20;;:29;22996:7;22975:29;;;;;;;;;;;;;;;;;;;;;;;;;22968:36;;22873:139;;;;:::o;32565:104::-;32621:13;32654:7;32647:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32565:104;:::o;20838:49::-;20883:4;20838:49;;;:::o;36713:377::-;36806:4;36823:24;36850:11;:25;36862:12;:10;:12::i;:::-;36850:25;;;;;;;;;;;;;;;:34;36876:7;36850:34;;;;;;;;;;;;;;;;36823:61;;36923:15;36903:16;:35;;36895:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;36991:67;37000:12;:10;:12::i;:::-;37014:7;37042:15;37023:16;:34;;;;:::i;:::-;36991:8;:67::i;:::-;37078:4;37071:11;;;36713:377;;;;:::o;33977:175::-;34063:4;34080:42;34090:12;:10;:12::i;:::-;34104:9;34115:6;34080:9;:42::i;:::-;34140:4;34133:11;;33977:175;;;;:::o;29036:134::-;29108:7;29135:27;:12;:18;29148:4;29135:18;;;;;;;;;;;:25;:27::i;:::-;29128:34;;29036:134;;;:::o;42559:62::-;42597:24;42559:62;:::o;29520:170::-;29606:31;29623:4;29629:7;29606:16;:31::i;:::-;29648:34;29674:7;29648:12;:18;29661:4;29648:18;;;;;;;;;;;:25;;:34;;;;:::i;:::-;;29520:170;;:::o;34215:151::-;34304:7;34331:11;:18;34343:5;34331:18;;;;;;;;;;;;;;;:27;34350:7;34331:27;;;;;;;;;;;;;;;;34324:34;;34215:151;;;;:::o;26109:112::-;26188:25;26199:4;26205:7;26188:10;:25::i;:::-;26109:112;;:::o;11309:152::-;11379:4;11403:50;11408:3;:10;;11444:5;11428:23;;11420:32;;11403:4;:50::i;:::-;11396:57;;11309:152;;;;:::o;22564:217::-;22649:4;22688:32;22673:47;;;:11;:47;;;;:100;;;;22737:36;22761:11;22737:23;:36::i;:::-;22673:100;22666:107;;22564:217;;;:::o;4243:98::-;4296:7;4323:10;4316:17;;4243:98;:::o;40069:346::-;40188:1;40171:19;;:5;:19;;;;40163:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40269:1;40250:21;;:7;:21;;;;40242:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40353:6;40323:11;:18;40335:5;40323:18;;;;;;;;;;;;;;;:27;40342:7;40323:27;;;;;;;;;;;;;;;:36;;;;40391:7;40375:32;;40384:5;40375:32;;;40400:6;40375:32;;;;;;:::i;:::-;;;;;;;;40069:346;;;:::o;37580:604::-;37704:1;37686:20;;:6;:20;;;;37678:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;37788:1;37767:23;;:9;:23;;;;37759:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;37843:47;37864:6;37872:9;37883:6;37843:20;:47::i;:::-;37903:21;37927:9;:17;37937:6;37927:17;;;;;;;;;;;;;;;;37903:41;;37980:6;37963:13;:23;;37955:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;38076:6;38060:13;:22;;;;:::i;:::-;38040:9;:17;38050:6;38040:17;;;;;;;;;;;;;;;:42;;;;38117:6;38093:9;:20;38103:9;38093:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;38158:9;38141:35;;38150:6;38141:35;;;38169:6;38141:35;;;;;;:::i;:::-;;;;;;;;37580:604;;;;:::o;24260:147::-;24343:18;24356:4;24343:12;:18::i;:::-;22442:30;22453:4;22459:12;:10;:12::i;:::-;22442:10;:30::i;:::-;24374:25:::1;24385:4;24391:7;24374:10;:25::i;:::-;24260:147:::0;;;:::o;25308:218::-;25415:12;:10;:12::i;:::-;25404:23;;:7;:23;;;25396:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;25492:26;25504:4;25510:7;25492:11;:26::i;:::-;25308:218;;:::o;11637:158::-;11710:4;11734:53;11742:3;:10;;11778:5;11762:23;;11754:32;;11734:7;:53::i;:::-;11727:60;;11637:158;;;;:::o;38466:338::-;38569:1;38550:21;;:7;:21;;;;38542:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;38620:49;38649:1;38653:7;38662:6;38620:20;:49::i;:::-;38698:6;38682:12;;:22;;;;;;;:::i;:::-;;;;;;;;38737:6;38715:9;:18;38725:7;38715:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;38780:7;38759:37;;38776:1;38759:37;;;38789:6;38759:37;;;;;;:::i;:::-;;;;;;;;38466:338;;:::o;39137:494::-;39240:1;39221:21;;:7;:21;;;;39213:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39293:49;39314:7;39331:1;39335:6;39293:20;:49::i;:::-;39355:22;39380:9;:18;39390:7;39380:18;;;;;;;;;;;;;;;;39355:43;;39435:6;39417:14;:24;;39409:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;39529:6;39512:14;:23;;;;:::i;:::-;39491:9;:18;39501:7;39491:18;;;;;;;;;;;;;;;:44;;;;39562:6;39546:12;;:22;;;;;;;:::i;:::-;;;;;;;;39612:1;39586:37;;39595:7;39586:37;;;39616:6;39586:37;;;;;;:::i;:::-;;;;;;;;39137:494;;;:::o;12595:158::-;12669:7;12720:22;12724:3;:10;;12736:5;12720:3;:22::i;:::-;12712:31;;12689:56;;12595:158;;;;:::o;12134:117::-;12197:7;12224:19;12232:3;:10;;12224:7;:19::i;:::-;12217:26;;12134:117;;;:::o;24652:149::-;24736:18;24749:4;24736:12;:18::i;:::-;22442:30;22453:4;22459:12;:10;:12::i;:::-;22442:10;:30::i;:::-;24767:26:::1;24779:4;24785:7;24767:11;:26::i;:::-;24652:149:::0;;;:::o;26556:229::-;26631:22;26639:4;26645:7;26631;:22::i;:::-;26626:152;;26702:4;26670:6;:12;26677:4;26670:12;;;;;;;;;;;:20;;:29;26691:7;26670:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;26753:12;:10;:12::i;:::-;26726:40;;26744:7;26726:40;;26738:4;26726:40;;;;;;;;;;26626:152;26556:229;;:::o;6364:414::-;6427:4;6449:21;6459:3;6464:5;6449:9;:21::i;:::-;6444:327;;6487:3;:11;;6504:5;6487:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6670:3;:11;;:18;;;;6648:3;:12;;:19;6661:5;6648:19;;;;;;;;;;;:40;;;;6710:4;6703:11;;;;6444:327;6754:5;6747:12;;6364:414;;;;;:::o;16120:157::-;16205:4;16244:25;16229:40;;;:11;:40;;;;16222:47;;16120:157;;;:::o;41018:92::-;;;;:::o;23302:384::-;23382:22;23390:4;23396:7;23382;:22::i;:::-;23378:301;;23514:41;23542:7;23514:41;;23552:2;23514:19;:41::i;:::-;23612:38;23640:4;23632:13;;23647:2;23612:19;:38::i;:::-;23435:230;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23421:246;;;;;;;;;;;:::i;:::-;;;;;;;;23378:301;23302:384;;:::o;26793:230::-;26868:22;26876:4;26882:7;26868;:22::i;:::-;26864:152;;;26939:5;26907:6;:12;26914:4;26907:12;;;;;;;;;;;:20;;:29;26928:7;26907:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;26991:12;:10;:12::i;:::-;26964:40;;26982:7;26964:40;;26976:4;26964:40;;;;;;;;;;26864:152;26793:230;;:::o;6954:1553::-;7020:4;7138:18;7159:3;:12;;:19;7172:5;7159:19;;;;;;;;;;;;7138:40;;7209:1;7195:10;:15;7191:1309;;7557:21;7594:1;7581:10;:14;;;;:::i;:::-;7557:38;;7610:17;7651:1;7630:3;:11;;:18;;;;:22;;;;:::i;:::-;7610:42;;7897:17;7917:3;:11;;7929:9;7917:22;;;;;;;;;;;;;;;;;;;;;;;;7897:42;;8063:9;8034:3;:11;;8046:13;8034:26;;;;;;;;;;;;;;;;;;;;;;;:38;;;;8166:10;8140:3;:12;;:23;8153:9;8140:23;;;;;;;;;;;:36;;;;8301:3;:11;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8396:3;:12;;:19;8409:5;8396:19;;;;;;;;;;;8389:26;;;8439:4;8432:11;;;;;;;;7191:1309;8483:5;8476:12;;;6954:1553;;;;;:::o;9261:204::-;9328:7;9377:5;9356:3;:11;;:18;;;;:26;9348:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;9439:3;:11;;9451:5;9439:18;;;;;;;;;;;;;;;;;;;;;;;;9432:25;;9261:204;;;;:::o;8808:109::-;8864:7;8891:3;:11;;:18;;;;8884:25;;8808:109;;;:::o;8593:129::-;8666:4;8713:1;8690:3;:12;;:19;8703:5;8690:19;;;;;;;;;;;;:24;;8683:31;;8593:129;;;;:::o;17945:447::-;18020:13;18046:19;18091:1;18082:6;18078:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;18068:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18046:47;;18104:15;:6;18111:1;18104:9;;;;;;;;;;;;;;;;;;;:15;;;;;;;;;;;18130;:6;18137:1;18130:9;;;;;;;;;;;;;;;;;;;:15;;;;;;;;;;;18161:9;18186:1;18177:6;18173:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;18161:26;;18156:131;18193:1;18189;:5;18156:131;;;18228:8;18245:3;18237:5;:11;18228:21;;;;;;;;;;;;;;;;;;18216:6;18223:1;18216:9;;;;;;;;;;;;;;;;;;;:33;;;;;;;;;;;18274:1;18264:11;;;;;18196:3;;;;:::i;:::-;;;18156:131;;;;18314:1;18305:5;:10;18297:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;18377:6;18363:21;;;17945:447;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:139::-;198:5;236:6;223:20;214:29;;252:33;279:5;252:33;:::i;:::-;204:87;;;;:::o;297:137::-;342:5;380:6;367:20;358:29;;396:32;422:5;396:32;:::i;:::-;348:86;;;;:::o;440:139::-;486:5;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;492:87;;;;:::o;585:262::-;644:6;693:2;681:9;672:7;668:23;664:32;661:2;;;709:1;706;699:12;661:2;752:1;777:53;822:7;813:6;802:9;798:22;777:53;:::i;:::-;767:63;;723:117;651:196;;;;:::o;853:407::-;921:6;929;978:2;966:9;957:7;953:23;949:32;946:2;;;994:1;991;984:12;946:2;1037:1;1062:53;1107:7;1098:6;1087:9;1083:22;1062:53;:::i;:::-;1052:63;;1008:117;1164:2;1190:53;1235:7;1226:6;1215:9;1211:22;1190:53;:::i;:::-;1180:63;;1135:118;936:324;;;;;:::o;1266:552::-;1343:6;1351;1359;1408:2;1396:9;1387:7;1383:23;1379:32;1376:2;;;1424:1;1421;1414:12;1376:2;1467:1;1492:53;1537:7;1528:6;1517:9;1513:22;1492:53;:::i;:::-;1482:63;;1438:117;1594:2;1620:53;1665:7;1656:6;1645:9;1641:22;1620:53;:::i;:::-;1610:63;;1565:118;1722:2;1748:53;1793:7;1784:6;1773:9;1769:22;1748:53;:::i;:::-;1738:63;;1693:118;1366:452;;;;;:::o;1824:407::-;1892:6;1900;1949:2;1937:9;1928:7;1924:23;1920:32;1917:2;;;1965:1;1962;1955:12;1917:2;2008:1;2033:53;2078:7;2069:6;2058:9;2054:22;2033:53;:::i;:::-;2023:63;;1979:117;2135:2;2161:53;2206:7;2197:6;2186:9;2182:22;2161:53;:::i;:::-;2151:63;;2106:118;1907:324;;;;;:::o;2237:262::-;2296:6;2345:2;2333:9;2324:7;2320:23;2316:32;2313:2;;;2361:1;2358;2351:12;2313:2;2404:1;2429:53;2474:7;2465:6;2454:9;2450:22;2429:53;:::i;:::-;2419:63;;2375:117;2303:196;;;;:::o;2505:407::-;2573:6;2581;2630:2;2618:9;2609:7;2605:23;2601:32;2598:2;;;2646:1;2643;2636:12;2598:2;2689:1;2714:53;2759:7;2750:6;2739:9;2735:22;2714:53;:::i;:::-;2704:63;;2660:117;2816:2;2842:53;2887:7;2878:6;2867:9;2863:22;2842:53;:::i;:::-;2832:63;;2787:118;2588:324;;;;;:::o;2918:407::-;2986:6;2994;3043:2;3031:9;3022:7;3018:23;3014:32;3011:2;;;3059:1;3056;3049:12;3011:2;3102:1;3127:53;3172:7;3163:6;3152:9;3148:22;3127:53;:::i;:::-;3117:63;;3073:117;3229:2;3255:53;3300:7;3291:6;3280:9;3276:22;3255:53;:::i;:::-;3245:63;;3200:118;3001:324;;;;;:::o;3331:260::-;3389:6;3438:2;3426:9;3417:7;3413:23;3409:32;3406:2;;;3454:1;3451;3444:12;3406:2;3497:1;3522:52;3566:7;3557:6;3546:9;3542:22;3522:52;:::i;:::-;3512:62;;3468:116;3396:195;;;;:::o;3597:262::-;3656:6;3705:2;3693:9;3684:7;3680:23;3676:32;3673:2;;;3721:1;3718;3711:12;3673:2;3764:1;3789:53;3834:7;3825:6;3814:9;3810:22;3789:53;:::i;:::-;3779:63;;3735:117;3663:196;;;;:::o;3865:118::-;3952:24;3970:5;3952:24;:::i;:::-;3947:3;3940:37;3930:53;;:::o;3989:109::-;4070:21;4085:5;4070:21;:::i;:::-;4065:3;4058:34;4048:50;;:::o;4104:118::-;4191:24;4209:5;4191:24;:::i;:::-;4186:3;4179:37;4169:53;;:::o;4228:364::-;4316:3;4344:39;4377:5;4344:39;:::i;:::-;4399:71;4463:6;4458:3;4399:71;:::i;:::-;4392:78;;4479:52;4524:6;4519:3;4512:4;4505:5;4501:16;4479:52;:::i;:::-;4556:29;4578:6;4556:29;:::i;:::-;4551:3;4547:39;4540:46;;4320:272;;;;;:::o;4598:377::-;4704:3;4732:39;4765:5;4732:39;:::i;:::-;4787:89;4869:6;4864:3;4787:89;:::i;:::-;4780:96;;4885:52;4930:6;4925:3;4918:4;4911:5;4907:16;4885:52;:::i;:::-;4962:6;4957:3;4953:16;4946:23;;4708:267;;;;;:::o;4981:366::-;5123:3;5144:67;5208:2;5203:3;5144:67;:::i;:::-;5137:74;;5220:93;5309:3;5220:93;:::i;:::-;5338:2;5333:3;5329:12;5322:19;;5127:220;;;:::o;5353:366::-;5495:3;5516:67;5580:2;5575:3;5516:67;:::i;:::-;5509:74;;5592:93;5681:3;5592:93;:::i;:::-;5710:2;5705:3;5701:12;5694:19;;5499:220;;;:::o;5725:366::-;5867:3;5888:67;5952:2;5947:3;5888:67;:::i;:::-;5881:74;;5964:93;6053:3;5964:93;:::i;:::-;6082:2;6077:3;6073:12;6066:19;;5871:220;;;:::o;6097:366::-;6239:3;6260:67;6324:2;6319:3;6260:67;:::i;:::-;6253:74;;6336:93;6425:3;6336:93;:::i;:::-;6454:2;6449:3;6445:12;6438:19;;6243:220;;;:::o;6469:366::-;6611:3;6632:67;6696:2;6691:3;6632:67;:::i;:::-;6625:74;;6708:93;6797:3;6708:93;:::i;:::-;6826:2;6821:3;6817:12;6810:19;;6615:220;;;:::o;6841:366::-;6983:3;7004:67;7068:2;7063:3;7004:67;:::i;:::-;6997:74;;7080:93;7169:3;7080:93;:::i;:::-;7198:2;7193:3;7189:12;7182:19;;6987:220;;;:::o;7213:366::-;7355:3;7376:67;7440:2;7435:3;7376:67;:::i;:::-;7369:74;;7452:93;7541:3;7452:93;:::i;:::-;7570:2;7565:3;7561:12;7554:19;;7359:220;;;:::o;7585:366::-;7727:3;7748:67;7812:2;7807:3;7748:67;:::i;:::-;7741:74;;7824:93;7913:3;7824:93;:::i;:::-;7942:2;7937:3;7933:12;7926:19;;7731:220;;;:::o;7957:366::-;8099:3;8120:67;8184:2;8179:3;8120:67;:::i;:::-;8113:74;;8196:93;8285:3;8196:93;:::i;:::-;8314:2;8309:3;8305:12;8298:19;;8103:220;;;:::o;8329:366::-;8471:3;8492:67;8556:2;8551:3;8492:67;:::i;:::-;8485:74;;8568:93;8657:3;8568:93;:::i;:::-;8686:2;8681:3;8677:12;8670:19;;8475:220;;;:::o;8701:366::-;8843:3;8864:67;8928:2;8923:3;8864:67;:::i;:::-;8857:74;;8940:93;9029:3;8940:93;:::i;:::-;9058:2;9053:3;9049:12;9042:19;;8847:220;;;:::o;9073:366::-;9215:3;9236:67;9300:2;9295:3;9236:67;:::i;:::-;9229:74;;9312:93;9401:3;9312:93;:::i;:::-;9430:2;9425:3;9421:12;9414:19;;9219:220;;;:::o;9445:402::-;9605:3;9626:85;9708:2;9703:3;9626:85;:::i;:::-;9619:92;;9720:93;9809:3;9720:93;:::i;:::-;9838:2;9833:3;9829:12;9822:19;;9609:238;;;:::o;9853:366::-;9995:3;10016:67;10080:2;10075:3;10016:67;:::i;:::-;10009:74;;10092:93;10181:3;10092:93;:::i;:::-;10210:2;10205:3;10201:12;10194:19;;9999:220;;;:::o;10225:402::-;10385:3;10406:85;10488:2;10483:3;10406:85;:::i;:::-;10399:92;;10500:93;10589:3;10500:93;:::i;:::-;10618:2;10613:3;10609:12;10602:19;;10389:238;;;:::o;10633:366::-;10775:3;10796:67;10860:2;10855:3;10796:67;:::i;:::-;10789:74;;10872:93;10961:3;10872:93;:::i;:::-;10990:2;10985:3;10981:12;10974:19;;10779:220;;;:::o;11005:366::-;11147:3;11168:67;11232:2;11227:3;11168:67;:::i;:::-;11161:74;;11244:93;11333:3;11244:93;:::i;:::-;11362:2;11357:3;11353:12;11346:19;;11151:220;;;:::o;11377:118::-;11464:24;11482:5;11464:24;:::i;:::-;11459:3;11452:37;11442:53;;:::o;11501:112::-;11584:22;11600:5;11584:22;:::i;:::-;11579:3;11572:35;11562:51;;:::o;11619:967::-;12001:3;12023:148;12167:3;12023:148;:::i;:::-;12016:155;;12188:95;12279:3;12270:6;12188:95;:::i;:::-;12181:102;;12300:148;12444:3;12300:148;:::i;:::-;12293:155;;12465:95;12556:3;12547:6;12465:95;:::i;:::-;12458:102;;12577:3;12570:10;;12005:581;;;;;:::o;12592:222::-;12685:4;12723:2;12712:9;12708:18;12700:26;;12736:71;12804:1;12793:9;12789:17;12780:6;12736:71;:::i;:::-;12690:124;;;;:::o;12820:210::-;12907:4;12945:2;12934:9;12930:18;12922:26;;12958:65;13020:1;13009:9;13005:17;12996:6;12958:65;:::i;:::-;12912:118;;;;:::o;13036:222::-;13129:4;13167:2;13156:9;13152:18;13144:26;;13180:71;13248:1;13237:9;13233:17;13224:6;13180:71;:::i;:::-;13134:124;;;;:::o;13264:313::-;13377:4;13415:2;13404:9;13400:18;13392:26;;13464:9;13458:4;13454:20;13450:1;13439:9;13435:17;13428:47;13492:78;13565:4;13556:6;13492:78;:::i;:::-;13484:86;;13382:195;;;;:::o;13583:419::-;13749:4;13787:2;13776:9;13772:18;13764:26;;13836:9;13830:4;13826:20;13822:1;13811:9;13807:17;13800:47;13864:131;13990:4;13864:131;:::i;:::-;13856:139;;13754:248;;;:::o;14008:419::-;14174:4;14212:2;14201:9;14197:18;14189:26;;14261:9;14255:4;14251:20;14247:1;14236:9;14232:17;14225:47;14289:131;14415:4;14289:131;:::i;:::-;14281:139;;14179:248;;;:::o;14433:419::-;14599:4;14637:2;14626:9;14622:18;14614:26;;14686:9;14680:4;14676:20;14672:1;14661:9;14657:17;14650:47;14714:131;14840:4;14714:131;:::i;:::-;14706:139;;14604:248;;;:::o;14858:419::-;15024:4;15062:2;15051:9;15047:18;15039:26;;15111:9;15105:4;15101:20;15097:1;15086:9;15082:17;15075:47;15139:131;15265:4;15139:131;:::i;:::-;15131:139;;15029:248;;;:::o;15283:419::-;15449:4;15487:2;15476:9;15472:18;15464:26;;15536:9;15530:4;15526:20;15522:1;15511:9;15507:17;15500:47;15564:131;15690:4;15564:131;:::i;:::-;15556:139;;15454:248;;;:::o;15708:419::-;15874:4;15912:2;15901:9;15897:18;15889:26;;15961:9;15955:4;15951:20;15947:1;15936:9;15932:17;15925:47;15989:131;16115:4;15989:131;:::i;:::-;15981:139;;15879:248;;;:::o;16133:419::-;16299:4;16337:2;16326:9;16322:18;16314:26;;16386:9;16380:4;16376:20;16372:1;16361:9;16357:17;16350:47;16414:131;16540:4;16414:131;:::i;:::-;16406:139;;16304:248;;;:::o;16558:419::-;16724:4;16762:2;16751:9;16747:18;16739:26;;16811:9;16805:4;16801:20;16797:1;16786:9;16782:17;16775:47;16839:131;16965:4;16839:131;:::i;:::-;16831:139;;16729:248;;;:::o;16983:419::-;17149:4;17187:2;17176:9;17172:18;17164:26;;17236:9;17230:4;17226:20;17222:1;17211:9;17207:17;17200:47;17264:131;17390:4;17264:131;:::i;:::-;17256:139;;17154:248;;;:::o;17408:419::-;17574:4;17612:2;17601:9;17597:18;17589:26;;17661:9;17655:4;17651:20;17647:1;17636:9;17632:17;17625:47;17689:131;17815:4;17689:131;:::i;:::-;17681:139;;17579:248;;;:::o;17833:419::-;17999:4;18037:2;18026:9;18022:18;18014:26;;18086:9;18080:4;18076:20;18072:1;18061:9;18057:17;18050:47;18114:131;18240:4;18114:131;:::i;:::-;18106:139;;18004:248;;;:::o;18258:419::-;18424:4;18462:2;18451:9;18447:18;18439:26;;18511:9;18505:4;18501:20;18497:1;18486:9;18482:17;18475:47;18539:131;18665:4;18539:131;:::i;:::-;18531:139;;18429:248;;;:::o;18683:419::-;18849:4;18887:2;18876:9;18872:18;18864:26;;18936:9;18930:4;18926:20;18922:1;18911:9;18907:17;18900:47;18964:131;19090:4;18964:131;:::i;:::-;18956:139;;18854:248;;;:::o;19108:419::-;19274:4;19312:2;19301:9;19297:18;19289:26;;19361:9;19355:4;19351:20;19347:1;19336:9;19332:17;19325:47;19389:131;19515:4;19389:131;:::i;:::-;19381:139;;19279:248;;;:::o;19533:419::-;19699:4;19737:2;19726:9;19722:18;19714:26;;19786:9;19780:4;19776:20;19772:1;19761:9;19757:17;19750:47;19814:131;19940:4;19814:131;:::i;:::-;19806:139;;19704:248;;;:::o;19958:222::-;20051:4;20089:2;20078:9;20074:18;20066:26;;20102:71;20170:1;20159:9;20155:17;20146:6;20102:71;:::i;:::-;20056:124;;;;:::o;20186:214::-;20275:4;20313:2;20302:9;20298:18;20290:26;;20326:67;20390:1;20379:9;20375:17;20366:6;20326:67;:::i;:::-;20280:120;;;;:::o;20406:99::-;20458:6;20492:5;20486:12;20476:22;;20465:40;;;:::o;20511:169::-;20595:11;20629:6;20624:3;20617:19;20669:4;20664:3;20660:14;20645:29;;20607:73;;;;:::o;20686:148::-;20788:11;20825:3;20810:18;;20800:34;;;;:::o;20840:305::-;20880:3;20899:20;20917:1;20899:20;:::i;:::-;20894:25;;20933:20;20951:1;20933:20;:::i;:::-;20928:25;;21087:1;21019:66;21015:74;21012:1;21009:81;21006:2;;;21093:18;;:::i;:::-;21006:2;21137:1;21134;21130:9;21123:16;;20884:261;;;;:::o;21151:348::-;21191:7;21214:20;21232:1;21214:20;:::i;:::-;21209:25;;21248:20;21266:1;21248:20;:::i;:::-;21243:25;;21436:1;21368:66;21364:74;21361:1;21358:81;21353:1;21346:9;21339:17;21335:105;21332:2;;;21443:18;;:::i;:::-;21332:2;21491:1;21488;21484:9;21473:20;;21199:300;;;;:::o;21505:191::-;21545:4;21565:20;21583:1;21565:20;:::i;:::-;21560:25;;21599:20;21617:1;21599:20;:::i;:::-;21594:25;;21638:1;21635;21632:8;21629:2;;;21643:18;;:::i;:::-;21629:2;21688:1;21685;21681:9;21673:17;;21550:146;;;;:::o;21702:96::-;21739:7;21768:24;21786:5;21768:24;:::i;:::-;21757:35;;21747:51;;;:::o;21804:90::-;21838:7;21881:5;21874:13;21867:21;21856:32;;21846:48;;;:::o;21900:77::-;21937:7;21966:5;21955:16;;21945:32;;;:::o;21983:149::-;22019:7;22059:66;22052:5;22048:78;22037:89;;22027:105;;;:::o;22138:126::-;22175:7;22215:42;22208:5;22204:54;22193:65;;22183:81;;;:::o;22270:77::-;22307:7;22336:5;22325:16;;22315:32;;;:::o;22353:86::-;22388:7;22428:4;22421:5;22417:16;22406:27;;22396:43;;;:::o;22445:307::-;22513:1;22523:113;22537:6;22534:1;22531:13;22523:113;;;22622:1;22617:3;22613:11;22607:18;22603:1;22598:3;22594:11;22587:39;22559:2;22556:1;22552:10;22547:15;;22523:113;;;22654:6;22651:1;22648:13;22645:2;;;22734:1;22725:6;22720:3;22716:16;22709:27;22645:2;22494:258;;;;:::o;22758:171::-;22797:3;22820:24;22838:5;22820:24;:::i;:::-;22811:33;;22866:4;22859:5;22856:15;22853:2;;;22874:18;;:::i;:::-;22853:2;22921:1;22914:5;22910:13;22903:20;;22801:128;;;:::o;22935:320::-;22979:6;23016:1;23010:4;23006:12;22996:22;;23063:1;23057:4;23053:12;23084:18;23074:2;;23140:4;23132:6;23128:17;23118:27;;23074:2;23202;23194:6;23191:14;23171:18;23168:38;23165:2;;;23221:18;;:::i;:::-;23165:2;22986:269;;;;:::o;23261:180::-;23309:77;23306:1;23299:88;23406:4;23403:1;23396:15;23430:4;23427:1;23420:15;23447:180;23495:77;23492:1;23485:88;23592:4;23589:1;23582:15;23616:4;23613:1;23606:15;23633:102;23674:6;23725:2;23721:7;23716:2;23709:5;23705:14;23701:28;23691:38;;23681:54;;;:::o;23741:221::-;23881:34;23877:1;23869:6;23865:14;23858:58;23950:4;23945:2;23937:6;23933:15;23926:29;23847:115;:::o;23968:182::-;24108:34;24104:1;24096:6;24092:14;24085:58;24074:76;:::o;24156:222::-;24296:34;24292:1;24284:6;24280:14;24273:58;24365:5;24360:2;24352:6;24348:15;24341:30;24262:116;:::o;24384:221::-;24524:34;24520:1;24512:6;24508:14;24501:58;24593:4;24588:2;24580:6;24576:15;24569:29;24490:115;:::o;24611:221::-;24751:34;24747:1;24739:6;24735:14;24728:58;24820:4;24815:2;24807:6;24803:15;24796:29;24717:115;:::o;24838:225::-;24978:34;24974:1;24966:6;24962:14;24955:58;25047:8;25042:2;25034:6;25030:15;25023:33;24944:119;:::o;25069:227::-;25209:34;25205:1;25197:6;25193:14;25186:58;25278:10;25273:2;25265:6;25261:15;25254:35;25175:121;:::o;25302:241::-;25442:34;25438:1;25430:6;25426:14;25419:58;25511:24;25506:2;25498:6;25494:15;25487:49;25408:135;:::o;25549:223::-;25689:34;25685:1;25677:6;25673:14;25666:58;25758:6;25753:2;25745:6;25741:15;25734:31;25655:117;:::o;25778:220::-;25918:34;25914:1;25906:6;25902:14;25895:58;25987:3;25982:2;25974:6;25970:15;25963:28;25884:114;:::o;26004:224::-;26144:34;26140:1;26132:6;26128:14;26121:58;26213:7;26208:2;26200:6;26196:15;26189:32;26110:118;:::o;26234:223::-;26374:34;26370:1;26362:6;26358:14;26351:58;26443:6;26438:2;26430:6;26426:15;26419:31;26340:117;:::o;26463:173::-;26603:25;26599:1;26591:6;26587:14;26580:49;26569:67;:::o;26642:224::-;26782:34;26778:1;26770:6;26766:14;26759:58;26851:7;26846:2;26838:6;26834:15;26827:32;26748:118;:::o;26872:167::-;27012:19;27008:1;27000:6;26996:14;26989:43;26978:61;:::o;27045:234::-;27185:34;27181:1;27173:6;27169:14;27162:58;27254:17;27249:2;27241:6;27237:15;27230:42;27151:128;:::o;27285:181::-;27425:33;27421:1;27413:6;27409:14;27402:57;27391:75;:::o;27472:122::-;27545:24;27563:5;27545:24;:::i;:::-;27538:5;27535:35;27525:2;;27584:1;27581;27574:12;27525:2;27515:79;:::o;27600:122::-;27673:24;27691:5;27673:24;:::i;:::-;27666:5;27663:35;27653:2;;27712:1;27709;27702:12;27653:2;27643:79;:::o;27728:120::-;27800:23;27817:5;27800:23;:::i;:::-;27793:5;27790:34;27780:2;;27838:1;27835;27828:12;27780:2;27770:78;:::o;27854:122::-;27927:24;27945:5;27927:24;:::i;:::-;27920:5;27917:35;27907:2;;27966:1;27963;27956:12;27907:2;27897:79;:::o
Swarm Source
ipfs://c32c9a6ca578f2c4ad01477e03307b621f8de2136a96d8d6247dc8fea3484495
Loading...
Loading
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.