ERC-20
Overview
Max Total Supply
10,000,000,000 $
Holders
116
Market
Price
$0.00 @ 0.000000 MATIC
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
16,010.63920923691381477 $Value
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
DollarToken
Compiler Version
v0.8.8+commit.dddeac2f
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2021-11-25 */ // SPDX-License-Identifier: Unlicensed pragma solidity 0.8.8; contract Initializable { bool inited = false; modifier initializer() { require(!inited, "already inited"); _; inited = true; } } // OpenZeppelin Contracts v4.3.2 (token/ERC20/IERC20.sol) /** * @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); } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } abstract contract ContextMixin { function msgSender() internal view returns (address payable sender) { if (msg.sender == address(this)) { bytes memory array = msg.data; uint256 index = msg.data.length; assembly { // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those. sender := and( mload(add(array, index)), 0xffffffffffffffffffffffffffffffffffffffff ) } } else { sender = payable(msg.sender); } return sender; } } interface IChildToken { function deposit(address user, bytes calldata depositData) external; } // OpenZeppelin Contracts v4.3.2 (token/ERC20/ERC20.sol) // OpenZeppelin Contracts v4.3.2 (token/ERC20/extensions/IERC20Metadata.sol) /** * @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); } /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return payable(msg.sender); } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } 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); } abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } interface IAccessControl { /** * @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 {AccessControl-_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 Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) external view returns (bool); /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {AccessControl-_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) external view returns (bytes32); /** * @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) external; /** * @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) external; /** * @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) external; } library Strings { bytes16 private constant _HEX_SYMBOLS = "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] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } 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 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]{40}) is missing role (0x[0-9a-f]{64})$/ * * _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]{40}) is missing role (0x[0-9a-f]{64})$/ */ 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 { bytes32 previousAdminRole = getRoleAdmin(role); _roles[role].adminRole = adminRole; emit RoleAdminChanged(role, previousAdminRole, 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()); } } } contract AccessControlMixin is AccessControl { string private _revertMsg; function _setupContractId(string memory contractId) internal { _revertMsg = string(abi.encodePacked(contractId, ": INSUFFICIENT_PERMISSIONS")); } modifier only(bytes32 role) { require( hasRole(role, _msgSender()), _revertMsg ); _; } } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) return 0; uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } } contract EIP712Base is Initializable { struct EIP712Domain { string name; string version; address verifyingContract; bytes32 salt; } string constant public ERC712_VERSION = "1"; bytes32 internal constant EIP712_DOMAIN_TYPEHASH = keccak256( bytes( "EIP712Domain(string name,string version,address verifyingContract,bytes32 salt)" ) ); bytes32 internal domainSeperator; // supposed to be called once while initializing. // one of the contractsa that inherits this contract follows proxy pattern // so it is not possible to do this in a constructor function _initializeEIP712( string memory name ) internal initializer { _setDomainSeperator(name); } function _setDomainSeperator(string memory name) internal { domainSeperator = keccak256( abi.encode( EIP712_DOMAIN_TYPEHASH, keccak256(bytes(name)), keccak256(bytes(ERC712_VERSION)), address(this), bytes32(getChainId()) ) ); } function getDomainSeperator() public view returns (bytes32) { return domainSeperator; } function getChainId() public view returns (uint256) { uint256 id; assembly { id := chainid() } return id; } /** * Accept message hash and returns hash message in EIP712 compatible form * So that it can be used to recover signer from signature signed using EIP712 formatted data * https://eips.ethereum.org/EIPS/eip-712 * "\\x19" makes the encoding deterministic * "\\x01" is the version byte to make it compatible to EIP-191 */ function toTypedMessageHash(bytes32 messageHash) internal view returns (bytes32) { return keccak256( abi.encodePacked("\x19\x01", getDomainSeperator(), messageHash) ); } } contract NativeMetaTransaction is EIP712Base { using SafeMath for uint256; bytes32 private constant META_TRANSACTION_TYPEHASH = keccak256( bytes( "MetaTransaction(uint256 nonce,address from,bytes functionSignature)" ) ); event MetaTransactionExecuted( address userAddress, address payable relayerAddress, bytes functionSignature ); mapping(address => uint256) nonces; /* * Meta transaction structure. * No point of including value field here as if user is doing value transfer then he has the funds to pay for gas * He should call the desired function directly in that case. */ struct MetaTransaction { uint256 nonce; address from; bytes functionSignature; } function executeMetaTransaction( address userAddress, bytes memory functionSignature, bytes32 sigR, bytes32 sigS, uint8 sigV ) public payable returns (bytes memory) { MetaTransaction memory metaTx = MetaTransaction({ nonce: nonces[userAddress], from: userAddress, functionSignature: functionSignature }); require( verify(userAddress, metaTx, sigR, sigS, sigV), "Signer and signature do not match" ); // increase nonce for user (to avoid re-use) nonces[userAddress] = nonces[userAddress].add(1); emit MetaTransactionExecuted( userAddress, payable(msg.sender), functionSignature ); // Append userAddress and relayer address at the end to extract it from calling context (bool success, bytes memory returnData) = address(this).call( abi.encodePacked(functionSignature, userAddress) ); require(success, "Function call not successful"); return returnData; } function hashMetaTransaction(MetaTransaction memory metaTx) internal pure returns (bytes32) { return keccak256( abi.encode( META_TRANSACTION_TYPEHASH, metaTx.nonce, metaTx.from, keccak256(metaTx.functionSignature) ) ); } function getNonce(address user) public view returns (uint256 nonce) { nonce = nonces[user]; } function verify( address signer, MetaTransaction memory metaTx, bytes32 sigR, bytes32 sigS, uint8 sigV ) internal view returns (bool) { require(signer != address(0), "NativeMetaTransaction: INVALID_SIGNER"); return signer == ecrecover( toTypedMessageHash(hashMetaTransaction(metaTx)), sigV, sigR, sigS ); } } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract DollarToken is ERC20, IChildToken, AccessControlMixin, NativeMetaTransaction, ContextMixin { bytes32 public constant DEPOSITOR_ROLE = keccak256("DEPOSITOR_ROLE"); uint private totalSupply_ = 10**10 * 10**18; address public marketingAddress = 0x6739db98ceF72ABf3ddc0EeF4b7a16C04fb21a90; address public buybackAddress = 0x6739db98ceF72ABf3ddc0EeF4b7a16C04fb21a90; uint public marketingPercent = 0; // 0 = 0.00% uint public buybackPercent = 0; // 0 = 0.00% uint public liquidityPercent = 1000; // 1000 = 10% mapping (address => bool) private _isExcludedFromFee; uint256 private _minimumTokensBeforeSwap = 2 * 10**9 * 10**18; IUniswapV2Router02 public immutable uniswapV2Router; address public uniswapV2Pair; bool private _inSwapAndLiquify; bool private _swapAndLiquifyEnabled = false; uint256 public maxTxAmount = 2 * 10**8 * 10**18; //200,000,000 = .2% of supply modifier lockTheSwap { _inSwapAndLiquify = true; _; _inSwapAndLiquify = false; } constructor(string memory name_, string memory symbol_, address childChainManager) ERC20(name_, symbol_) { _setupContractId("$"); _setupRole(DEFAULT_ADMIN_ROLE, _msgSender()); _setupRole(DEPOSITOR_ROLE, childChainManager); _initializeEIP712(name_); _mint(_msgSender(), totalSupply_); IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506); // Create a uniswap pair for this new token address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; _isExcludedFromFee[_msgSender()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[marketingAddress] = true; _isExcludedFromFee[buybackAddress] = true; } /************/ /* BRIDGE */ /************/ /** * @notice called when token is deposited on root chain * @dev Should be callable only by ChildChainManager * Should handle deposit by minting the required amount for user * Make sure minting is done only by this function * @param user user address for whom deposit is being done * @param depositData abi encoded amount */ function deposit(address user, bytes calldata depositData) external override only(DEPOSITOR_ROLE) { uint256 amount = abi.decode(depositData, (uint256)); _mint(user, amount); } /** * @notice called when user wants to withdraw tokens back to root chain * @dev Should burn user's tokens. This transaction will be verified when exiting on root chain * @param amount amount of tokens to withdraw */ function withdraw(uint256 amount) external { _burn(_msgSender(), amount); } /*************/ /* SETTERS */ /*************/ function setMarketingPercent(uint percent_) external only(DEFAULT_ADMIN_ROLE) { marketingPercent = percent_; } function setBuybackPercent(uint percent_) external only(DEFAULT_ADMIN_ROLE) { buybackPercent = percent_; } function setLiquidityPercent(uint percent_) external only(DEFAULT_ADMIN_ROLE) { liquidityPercent = percent_; } function setIsExcluded(address address_, bool excluded_) external only(DEFAULT_ADMIN_ROLE) { _isExcludedFromFee[address_] = excluded_; } function setMinimumTokensBeforeSwap(uint256 _amount) external only(DEFAULT_ADMIN_ROLE) { _minimumTokensBeforeSwap = _amount; } function setSwapAndLiquifyEnabled(bool _enabled) external only(DEFAULT_ADMIN_ROLE) { _swapAndLiquifyEnabled = _enabled; emit _swapAndLiquifyEnabledUpdated(_enabled); } function setMarketingAddress(address address_) external only(DEFAULT_ADMIN_ROLE) { require(address_ != address(0), "address_ = 0"); require(address_ != marketingAddress, "marketingAddress is the same"); _isExcludedFromFee[marketingAddress] = false; marketingAddress = address_; _isExcludedFromFee[marketingAddress] = true; } function setBuybackAddress(address address_) external only(DEFAULT_ADMIN_ROLE) { require(address_ != address(0), "address_ = 0"); require(address_ != buybackAddress, "marketingAddress is the same"); _isExcludedFromFee[buybackAddress] = false; buybackAddress = address_; _isExcludedFromFee[buybackAddress] = true; } function setMaxTxAmount(uint amount_) external only(DEFAULT_ADMIN_ROLE) { require(maxTxAmount != amount_, "amount_ is the same as maxTxAmount"); maxTxAmount = amount_; } /*************/ /* GETTERS */ /*************/ function isExcluded(address address_) external view returns(bool) { return _isExcludedFromFee[address_]; } function minimumTokensBeforeSwapAmount() external view returns (uint256) { return _minimumTokensBeforeSwap; } /***********/ /* TOKEN */ /***********/ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { require(amount > 0, "amount = 0"); require(amount <= balanceOf(_msgSender())); require(amount <= maxTxAmount, "transaction exceeds max amount"); if (!_inSwapAndLiquify && _swapAndLiquifyEnabled && recipient == uniswapV2Pair && _msgSender() != uniswapV2Pair && balanceOf(address(this)) >= _minimumTokensBeforeSwap) { _swapAndLiquify(balanceOf(address(this))); } if (!_isExcludedFromFee[_msgSender()] && !_isExcludedFromFee[recipient]) { uint marketingAmount = amount * marketingPercent / 10000; uint buybackAmount = amount * buybackPercent / 10000; uint liquidityAmount = amount * liquidityPercent / 10000; amount -= marketingAmount + buybackAmount + liquidityAmount; _transfer(_msgSender(), marketingAddress, marketingAmount); _transfer(_msgSender(), buybackAddress, buybackAmount); } _transfer(_msgSender(), recipient, amount); return true; } /***************/ /* LIQUIDITY */ /***************/ function _swapAndLiquify(uint256 _pendingTokensForLiquidity) private lockTheSwap { // split the _pendingTokensForLiquidity balance into halves uint256 half = _pendingTokensForLiquidity / 2; uint256 otherHalf = _pendingTokensForLiquidity - half; uint256 bnbBalance = address(this).balance; // capture the contract's current BNB balance. _swapTokensForEth(half); // <- this breaks the ETH -> AVATAR swap when swap+liquify is triggered bnbBalance = address(this).balance - bnbBalance; // how BNB was returned _addLiquidity(_pendingTokensForLiquidity - half, bnbBalance); // add liquidity to uniswap emit SwapAndLiquify(half, bnbBalance, otherHalf); } function _swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), // The contract block.timestamp ); emit SwapTokensForETH(tokenAmount, path); } function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable marketingAddress, block.timestamp ); } /*******************/ /* GENERAL ADMIN */ /*******************/ function recoverERC20InEmergency(address _token) external only(DEFAULT_ADMIN_ROLE) { ERC20(_token).transfer(marketingAddress, ERC20(_token).balanceOf(address(this))); emit Withdraw(_msgSender(), _token); } function recoverNativeTokenInEmergency() external only(DEFAULT_ADMIN_ROLE) { (bool sent, bytes memory data) = _msgSender().call{value: address(this).balance}(""); require(sent, "Failed to send Ether"); emit RecoverNativeTokenInEmergency(_msgSender()); } event _swapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity); event SwapETHForTokens(uint256 amountIn, address[] path); event SwapTokensForETH(uint256 amountIn, address[] path); event Withdraw(address msgSender, address token); event RecoverNativeTokenInEmergency(address msgSender); }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"address","name":"childChainManager","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"userAddress","type":"address"},{"indexed":false,"internalType":"address payable","name":"relayerAddress","type":"address"},{"indexed":false,"internalType":"bytes","name":"functionSignature","type":"bytes"}],"name":"MetaTransactionExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"msgSender","type":"address"}],"name":"RecoverNativeTokenInEmergency","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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"msgSender","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"}],"name":"Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"_swapAndLiquifyEnabledUpdated","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEPOSITOR_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ERC712_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[],"name":"buybackAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bytes","name":"depositData","type":"bytes"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"bytes","name":"functionSignature","type":"bytes"},{"internalType":"bytes32","name":"sigR","type":"bytes32"},{"internalType":"bytes32","name":"sigS","type":"bytes32"},{"internalType":"uint8","name":"sigV","type":"uint8"}],"name":"executeMetaTransaction","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getChainId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDomainSeperator","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getNonce","outputs":[{"internalType":"uint256","name":"nonce","type":"uint256"}],"stateMutability":"view","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":"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":"address_","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"recoverERC20InEmergency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"recoverNativeTokenInEmergency","outputs":[],"stateMutability":"nonpayable","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":"address","name":"address_","type":"address"}],"name":"setBuybackAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent_","type":"uint256"}],"name":"setBuybackPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"},{"internalType":"bool","name":"excluded_","type":"bool"}],"name":"setIsExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent_","type":"uint256"}],"name":"setLiquidityPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent_","type":"uint256"}],"name":"setMarketingPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","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"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a06040526000600760006101000a81548160ff0219169083151502179055506b204fce5e3e25026110000000600a55736739db98cef72abf3ddc0eef4b7a16c04fb21a90600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550736739db98cef72abf3ddc0eef4b7a16c04fb21a90600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600d556000600e556103e8600f556b06765c793fa10079d00000006011556000601260156101000a81548160ff0219169083151502179055506aa56fa5b99019a5c80000006013553480156200013057600080fd5b5060405162006a2438038062006a24833981810160405281019062000156919062000d6f565b828281600390805190602001906200017092919062000abd565b5080600490805190602001906200018992919062000abd565b505050620001d26040518060400160405280600181526020017f24000000000000000000000000000000000000000000000000000000000000008152506200064460201b60201c565b620001f66000801b620001ea6200068160201b60201c565b6200068960201b60201c565b620002287f8f4f2da22e8ac8f11e15f9fc141cddbb5deea8800186560abb6e68c5496619a9826200068960201b60201c565b62000239836200069f60201b60201c565b6200025c6200024d6200068160201b60201c565b600a546200072160201b60201c565b6000731b02da8cb0d097eb8d57a175b88c7d8b47997506905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002be57600080fd5b505afa158015620002d3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f9919062000e09565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200035c57600080fd5b505afa15801562000371573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000397919062000e09565b6040518363ffffffff1660e01b8152600401620003b692919062000e4c565b602060405180830381600087803b158015620003d157600080fd5b505af1158015620003e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200040c919062000e09565b90508173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b8152505080601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601060006200049c6200068160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050505050620011d2565b8060405160200162000657919062000f16565b604051602081830303815290604052600690805190602001906200067d92919062000abd565b5050565b600033905090565b6200069b82826200089a60201b60201c565b5050565b600760009054906101000a900460ff1615620006f2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006e99062000f9d565b60405180910390fd5b62000703816200098c60201b60201c565b6001600760006101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000794576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200078b906200100f565b60405180910390fd5b620007a86000838362000a3b60201b60201c565b8060026000828254620007bc91906200106a565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200081391906200106a565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200087a9190620010d8565b60405180910390a3620008966000838362000a4060201b60201c565b5050565b620008ac828262000a4560201b60201c565b620009885760016005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200092d6200068160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6040518060800160405280604f8152602001620069d5604f91398051906020012081805190602001206040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250805190602001203062000a0362000ab060201b60201c565b60001b60405160200162000a1c95949392919062001110565b6040516020818303038152906040528051906020012060088190555050565b505050565b505050565b60006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000804690508091505090565b82805462000acb906200119c565b90600052602060002090601f01602090048101928262000aef576000855562000b3b565b82601f1062000b0a57805160ff191683800117855562000b3b565b8280016001018555821562000b3b579182015b8281111562000b3a57825182559160200191906001019062000b1d565b5b50905062000b4a919062000b4e565b5090565b5b8082111562000b6957600081600090555060010162000b4f565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000bd68262000b8b565b810181811067ffffffffffffffff8211171562000bf85762000bf762000b9c565b5b80604052505050565b600062000c0d62000b6d565b905062000c1b828262000bcb565b919050565b600067ffffffffffffffff82111562000c3e5762000c3d62000b9c565b5b62000c498262000b8b565b9050602081019050919050565b60005b8381101562000c7657808201518184015260208101905062000c59565b8381111562000c86576000848401525b50505050565b600062000ca362000c9d8462000c20565b62000c01565b90508281526020810184848401111562000cc25762000cc162000b86565b5b62000ccf84828562000c56565b509392505050565b600082601f83011262000cef5762000cee62000b81565b5b815162000d0184826020860162000c8c565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d378262000d0a565b9050919050565b62000d498162000d2a565b811462000d5557600080fd5b50565b60008151905062000d698162000d3e565b92915050565b60008060006060848603121562000d8b5762000d8a62000b77565b5b600084015167ffffffffffffffff81111562000dac5762000dab62000b7c565b5b62000dba8682870162000cd7565b935050602084015167ffffffffffffffff81111562000dde5762000ddd62000b7c565b5b62000dec8682870162000cd7565b925050604062000dff8682870162000d58565b9150509250925092565b60006020828403121562000e225762000e2162000b77565b5b600062000e328482850162000d58565b91505092915050565b62000e468162000d2a565b82525050565b600060408201905062000e63600083018562000e3b565b62000e72602083018462000e3b565b9392505050565b600081519050919050565b600081905092915050565b600062000e9c8262000e79565b62000ea8818562000e84565b935062000eba81856020860162000c56565b80840191505092915050565b7f3a20494e53554646494349454e545f5045524d495353494f4e53000000000000600082015250565b600062000efe601a8362000e84565b915062000f0b8262000ec6565b601a82019050919050565b600062000f24828462000e8f565b915062000f318262000eef565b915081905092915050565b600082825260208201905092915050565b7f616c726561647920696e69746564000000000000000000000000000000000000600082015250565b600062000f85600e8362000f3c565b915062000f928262000f4d565b602082019050919050565b6000602082019050818103600083015262000fb88162000f76565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000ff7601f8362000f3c565b9150620010048262000fbf565b602082019050919050565b600060208201905081810360008301526200102a8162000fe8565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620010778262001031565b9150620010848362001031565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620010bc57620010bb6200103b565b5b828201905092915050565b620010d28162001031565b82525050565b6000602082019050620010ef6000830184620010c7565b92915050565b6000819050919050565b6200110a81620010f5565b82525050565b600060a082019050620011276000830188620010ff565b620011366020830187620010ff565b620011456040830186620010ff565b62001154606083018562000e3b565b620011636080830184620010ff565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620011b557607f821691505b60208210811415620011cc57620011cb6200116d565b5b50919050565b60805160601c6157c16200121460003960008181610ef4015281816135fd015281816136ed01528181613714015281816137e9015261381001526157c16000f3fe6080604052600436106102885760003560e01c8063906e9dd01161015a578063b0683755116100c1578063cf8e2f8e1161007a578063cf8e2f8e14610a0f578063d547741f14610a38578063d8020a1814610a61578063dd62ed3e14610a8c578063e4412f6814610ac9578063ec28438a14610af457610288565b8063b068375514610901578063c49b9a801461092c578063c6055ec314610955578063cba0e9961461097e578063cc2fbd66146109bb578063cf2c52cb146109e657610288565b8063a3b0b5a311610113578063a3b0b5a3146107df578063a457c2d71461080a578063a5ece94114610847578063a9059cbb14610872578063aee50b1e146108af578063af2f6dd8146108d857610288565b8063906e9dd0146106e157806391d148541461070a5780639393502a1461074757806395d89b411461075e578063a073d37f14610789578063a217fddf146107b457610288565b80632d0335ab116101fe57806336568abe116101b757806336568abe146105bf57806339509351146105e857806349bd5a5e1461062557806370a08231146106505780637e88880d1461068d5780638c0b5e22146106b657610288565b80632d0335ab146104b15780632e1a7d4d146104ee5780632f2ff15d14610517578063313ce5671461054057806333f4e33d1461056b5780633408e4701461059457610288565b80631694505e116102505780631694505e1461038d57806318160ddd146103b85780631a3f0cda146103e357806320379ee51461040c57806323b872dd14610437578063248a9ca31461047457610288565b806301ffc9a71461028d57806306fdde03146102ca578063095ea7b3146102f55780630c53c51c146103325780630f7e597014610362575b600080fd5b34801561029957600080fd5b506102b460048036038101906102af919061395a565b610b1d565b6040516102c191906139a2565b60405180910390f35b3480156102d657600080fd5b506102df610b97565b6040516102ec9190613a56565b60405180910390f35b34801561030157600080fd5b5061031c60048036038101906103179190613b0c565b610c29565b60405161032991906139a2565b60405180910390f35b61034c60048036038101906103479190613cf0565b610c47565b6040516103599190613ddc565b60405180910390f35b34801561036e57600080fd5b50610377610eb9565b6040516103849190613a56565b60405180910390f35b34801561039957600080fd5b506103a2610ef2565b6040516103af9190613e5d565b60405180910390f35b3480156103c457600080fd5b506103cd610f16565b6040516103da9190613e87565b60405180910390f35b3480156103ef57600080fd5b5061040a60048036038101906104059190613ea2565b610f20565b005b34801561041857600080fd5b50610421610f84565b60405161042e9190613ede565b60405180910390f35b34801561044357600080fd5b5061045e60048036038101906104599190613ef9565b610f8e565b60405161046b91906139a2565b60405180910390f35b34801561048057600080fd5b5061049b60048036038101906104969190613f4c565b611086565b6040516104a89190613ede565b60405180910390f35b3480156104bd57600080fd5b506104d860048036038101906104d39190613f79565b6110a6565b6040516104e59190613e87565b60405180910390f35b3480156104fa57600080fd5b5061051560048036038101906105109190613ea2565b6110ef565b005b34801561052357600080fd5b5061053e60048036038101906105399190613fa6565b611103565b005b34801561054c57600080fd5b5061055561112c565b6040516105629190613ff5565b60405180910390f35b34801561057757600080fd5b50610592600480360381019061058d9190613f79565b611135565b005b3480156105a057600080fd5b506105a961130a565b6040516105b69190613e87565b60405180910390f35b3480156105cb57600080fd5b506105e660048036038101906105e19190613fa6565b611317565b005b3480156105f457600080fd5b5061060f600480360381019061060a9190613b0c565b61139a565b60405161061c91906139a2565b60405180910390f35b34801561063157600080fd5b5061063a611446565b604051610647919061401f565b60405180910390f35b34801561065c57600080fd5b5061067760048036038101906106729190613f79565b61146c565b6040516106849190613e87565b60405180910390f35b34801561069957600080fd5b506106b460048036038101906106af9190613f79565b6114b4565b005b3480156106c257600080fd5b506106cb611747565b6040516106d89190613e87565b60405180910390f35b3480156106ed57600080fd5b5061070860048036038101906107039190613f79565b61174d565b005b34801561071657600080fd5b50610731600480360381019061072c9190613fa6565b6119e0565b60405161073e91906139a2565b60405180910390f35b34801561075357600080fd5b5061075c611a4b565b005b34801561076a57600080fd5b50610773611b9c565b6040516107809190613a56565b60405180910390f35b34801561079557600080fd5b5061079e611c2e565b6040516107ab9190613e87565b60405180910390f35b3480156107c057600080fd5b506107c9611c38565b6040516107d69190613ede565b60405180910390f35b3480156107eb57600080fd5b506107f4611c3f565b6040516108019190613ede565b60405180910390f35b34801561081657600080fd5b50610831600480360381019061082c9190613b0c565b611c63565b60405161083e91906139a2565b60405180910390f35b34801561085357600080fd5b5061085c611d4e565b604051610869919061401f565b60405180910390f35b34801561087e57600080fd5b5061089960048036038101906108949190613b0c565b611d74565b6040516108a691906139a2565b60405180910390f35b3480156108bb57600080fd5b506108d660048036038101906108d19190613ea2565b6120e2565b005b3480156108e457600080fd5b506108ff60048036038101906108fa9190613ea2565b612146565b005b34801561090d57600080fd5b506109166121aa565b6040516109239190613e87565b60405180910390f35b34801561093857600080fd5b50610953600480360381019061094e9190614066565b6121b0565b005b34801561096157600080fd5b5061097c60048036038101906109779190613ea2565b61225e565b005b34801561098a57600080fd5b506109a560048036038101906109a09190613f79565b6122c2565b6040516109b291906139a2565b60405180910390f35b3480156109c757600080fd5b506109d0612318565b6040516109dd919061401f565b60405180910390f35b3480156109f257600080fd5b50610a0d6004803603810190610a0891906140f3565b61233e565b005b348015610a1b57600080fd5b50610a366004803603810190610a319190614153565b6123d8565b005b348015610a4457600080fd5b50610a5f6004803603810190610a5a9190613fa6565b61248d565b005b348015610a6d57600080fd5b50610a766124b6565b604051610a839190613e87565b60405180910390f35b348015610a9857600080fd5b50610ab36004803603810190610aae9190614193565b6124bc565b604051610ac09190613e87565b60405180910390f35b348015610ad557600080fd5b50610ade612543565b604051610aeb9190613e87565b60405180910390f35b348015610b0057600080fd5b50610b1b6004803603810190610b169190613ea2565b612549565b005b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b905750610b8f826125f2565b5b9050919050565b606060038054610ba690614202565b80601f0160208091040260200160405190810160405280929190818152602001828054610bd290614202565b8015610c1f5780601f10610bf457610100808354040283529160200191610c1f565b820191906000526020600020905b815481529060010190602001808311610c0257829003601f168201915b5050505050905090565b6000610c3d610c3661265c565b8484612664565b6001905092915050565b606060006040518060600160405280600960008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481526020018873ffffffffffffffffffffffffffffffffffffffff168152602001878152509050610cca878287878761282f565b610d09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d00906142a6565b60405180910390fd5b610d5c6001600960008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461293890919063ffffffff16565b600960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b873388604051610dd2939291906142e7565b60405180910390a16000803073ffffffffffffffffffffffffffffffffffffffff16888a604051602001610e079291906143a9565b604051602081830303815290604052604051610e2391906143d1565b6000604051808303816000865af19150503d8060008114610e60576040519150601f19603f3d011682016040523d82523d6000602084013e610e65565b606091505b509150915081610eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea190614434565b60405180910390fd5b80935050505095945050505050565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b6000801b610f3581610f3061265c565b6119e0565b600690610f78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6f91906144e9565b60405180910390fd5b5081600f819055505050565b6000600854905090565b6000610f9b848484612996565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610fe661265c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611066576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105d9061457d565b60405180910390fd5b61107a8561107261265c565b858403612664565b60019150509392505050565b600060056000838152602001908152602001600020600101549050919050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111006110fa61265c565b82612c17565b50565b61110c82611086565b61111d8161111861265c565b612dee565b6111278383612e8b565b505050565b60006012905090565b6000801b61114a8161114561265c565b6119e0565b60069061118d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118491906144e9565b60405180910390fd5b508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611206919061401f565b60206040518083038186803b15801561121e57600080fd5b505afa158015611232573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125691906145b2565b6040518363ffffffff1660e01b81526004016112739291906145df565b602060405180830381600087803b15801561128d57600080fd5b505af11580156112a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c5919061461d565b507f34d58c18c6c1df2c698ccac556acea92941ca7b99d2fccf9e3ac1852d0dec36f6112ef61265c565b836040516112fe92919061466b565b60405180910390a15050565b6000804690508091505090565b61131f61265c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461138c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138390614706565b60405180910390fd5b6113968282612f6c565b5050565b600061143c6113a761265c565b8484600160006113b561265c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114379190614755565b612664565b6001905092915050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000801b6114c9816114c461265c565b6119e0565b60069061150c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150391906144e9565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561157d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611574906147f7565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561160e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160590614863565b60405180910390fd5b600060106000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555081600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160106000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60135481565b6000801b6117628161175d61265c565b6119e0565b6006906117a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179c91906144e9565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611816576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180d906147f7565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189e90614863565b60405180910390fd5b600060106000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160106000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000801b611a6081611a5b61265c565b6119e0565b600690611aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9a91906144e9565b60405180910390fd5b50600080611aaf61265c565b73ffffffffffffffffffffffffffffffffffffffff1647604051611ad2906148a9565b60006040518083038185875af1925050503d8060008114611b0f576040519150601f19603f3d011682016040523d82523d6000602084013e611b14565b606091505b509150915081611b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b509061490a565b60405180910390fd5b7fab775b760df2d00052b15de0e959fdb639971bdafcb5c834567f87c3032d4253611b8261265c565b604051611b8f919061492a565b60405180910390a1505050565b606060048054611bab90614202565b80601f0160208091040260200160405190810160405280929190818152602001828054611bd790614202565b8015611c245780601f10611bf957610100808354040283529160200191611c24565b820191906000526020600020905b815481529060010190602001808311611c0757829003601f168201915b5050505050905090565b6000601154905090565b6000801b81565b7f8f4f2da22e8ac8f11e15f9fc141cddbb5deea8800186560abb6e68c5496619a981565b60008060016000611c7261265c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611d2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d26906149b7565b60405180910390fd5b611d43611d3a61265c565b85858403612664565b600191505092915050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000808211611db8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611daf90614a23565b60405180910390fd5b611dc8611dc361265c565b61146c565b821115611dd457600080fd5b601354821115611e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1090614a8f565b60405180910390fd5b601260149054906101000a900460ff16158015611e425750601260159054906101000a900460ff165b8015611e9b5750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8015611efc5750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611ee361265c565b73ffffffffffffffffffffffffffffffffffffffff1614155b8015611f125750601154611f0f3061146c565b10155b15611f2957611f28611f233061146c565b61304e565b5b60106000611f3561265c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611fd45750601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156120c6576000612710600d5484611fec9190614aaf565b611ff69190614b38565b90506000612710600e548561200b9190614aaf565b6120159190614b38565b90506000612710600f548661202a9190614aaf565b6120349190614b38565b90508082846120439190614755565b61204d9190614755565b856120589190614b69565b945061208e61206561265c565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685612996565b6120c261209961265c565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612996565b5050505b6120d86120d161265c565b8484612996565b6001905092915050565b6000801b6120f7816120f261265c565b6119e0565b60069061213a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213191906144e9565b60405180910390fd5b50816011819055505050565b6000801b61215b8161215661265c565b6119e0565b60069061219e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219591906144e9565b60405180910390fd5b5081600e819055505050565b600f5481565b6000801b6121c5816121c061265c565b6119e0565b600690612208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ff91906144e9565b60405180910390fd5b5081601260156101000a81548160ff0219169083151502179055507f832e0189082052b13883d158969fe2bcd0142ee55911bf3787d8fc164bbf655d8260405161225291906139a2565b60405180910390a15050565b6000801b6122738161226e61265c565b6119e0565b6006906122b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ad91906144e9565b60405180910390fd5b5081600d819055505050565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f8f4f2da22e8ac8f11e15f9fc141cddbb5deea8800186560abb6e68c5496619a96123708161236b61265c565b6119e0565b6006906123b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123aa91906144e9565b60405180910390fd5b50600083838101906123c59190613ea2565b90506123d18582613117565b5050505050565b6000801b6123ed816123e861265c565b6119e0565b600690612430576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242791906144e9565b60405180910390fd5b5081601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b61249682611086565b6124a7816124a261265c565b612dee565b6124b18383612f6c565b505050565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600e5481565b6000801b61255e8161255961265c565b6119e0565b6006906125a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259891906144e9565b60405180910390fd5b508160135414156125e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125de90614c0f565b60405180910390fd5b816013819055505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126cb90614ca1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273b90614d33565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516128229190613e87565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614156128a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289790614dc5565b60405180910390fd5b60016128b36128ae87613277565b6132df565b838686604051600081526020016040526040516128d39493929190614de5565b6020604051602081039080840390855afa1580156128f5573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614905095945050505050565b60008082846129479190614755565b90508381101561298c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298390614e76565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fd90614f08565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6d90614f9a565b60405180910390fd5b612a81838383613318565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612b07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612afe9061502c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b9a9190614755565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612bfe9190613e87565b60405180910390a3612c1184848461331d565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7e906150be565b60405180910390fd5b612c9382600083613318565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1090615150565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254612d709190614b69565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612dd59190613e87565b60405180910390a3612de98360008461331d565b505050565b612df882826119e0565b612e8757612e1d8173ffffffffffffffffffffffffffffffffffffffff166014613322565b612e2b8360001c6020613322565b604051602001612e3c929190615244565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7e9190613a56565b60405180910390fd5b5050565b612e9582826119e0565b612f685760016005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612f0d61265c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b612f7682826119e0565b1561304a5760006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612fef61265c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b6001601260146101000a81548160ff02191690831515021790555060006002826130789190614b38565b9050600081836130889190614b69565b905060004790506130988361355e565b80476130a49190614b69565b90506130bb83856130b59190614b69565b826137e3565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618382846040516130ee9392919061527e565b60405180910390a15050506000601260146101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317e90615301565b60405180910390fd5b61319360008383613318565b80600260008282546131a59190614755565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131fa9190614755565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161325f9190613e87565b60405180910390a36132736000838361331d565b5050565b60006040518060800160405280604381526020016157496043913980519060200120826000015183602001518460400151805190602001206040516020016132c29493929190615321565b604051602081830303815290604052805190602001209050919050565b60006132e9610f84565b826040516020016132fb9291906153d3565b604051602081830303815290604052805190602001209050919050565b505050565b505050565b6060600060028360026133359190614aaf565b61333f9190614755565b67ffffffffffffffff81111561335857613357613b56565b5b6040519080825280601f01601f19166020018201604052801561338a5781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106133c2576133c161540a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106134265761342561540a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026134669190614aaf565b6134709190614755565b90505b6001811115613510577f3031323334353637383961626364656600000000000000000000000000000000600f8616601081106134b2576134b161540a565b5b1a60f81b8282815181106134c9576134c861540a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508061350990615439565b9050613473565b5060008414613554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161354b906154af565b60405180910390fd5b8091505092915050565b6000600267ffffffffffffffff81111561357b5761357a613b56565b5b6040519080825280602002602001820160405280156135a95781602001602082028036833780820191505090505b50905030816000815181106135c1576135c061540a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561366157600080fd5b505afa158015613675573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061369991906154e4565b816001815181106136ad576136ac61540a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613712307f000000000000000000000000000000000000000000000000000000000000000084612664565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161377495949392919061560a565b600060405180830381600087803b15801561378e57600080fd5b505af11580156137a2573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516137d7929190615664565b60405180910390a15050565b61380e307f000000000000000000000000000000000000000000000000000000000000000084612664565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161389596959493929190615694565b6060604051808303818588803b1580156138ae57600080fd5b505af11580156138c2573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906138e791906156f5565b5050505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61393781613902565b811461394257600080fd5b50565b6000813590506139548161392e565b92915050565b6000602082840312156139705761396f6138f8565b5b600061397e84828501613945565b91505092915050565b60008115159050919050565b61399c81613987565b82525050565b60006020820190506139b76000830184613993565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156139f75780820151818401526020810190506139dc565b83811115613a06576000848401525b50505050565b6000601f19601f8301169050919050565b6000613a28826139bd565b613a3281856139c8565b9350613a428185602086016139d9565b613a4b81613a0c565b840191505092915050565b60006020820190508181036000830152613a708184613a1d565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613aa382613a78565b9050919050565b613ab381613a98565b8114613abe57600080fd5b50565b600081359050613ad081613aaa565b92915050565b6000819050919050565b613ae981613ad6565b8114613af457600080fd5b50565b600081359050613b0681613ae0565b92915050565b60008060408385031215613b2357613b226138f8565b5b6000613b3185828601613ac1565b9250506020613b4285828601613af7565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613b8e82613a0c565b810181811067ffffffffffffffff82111715613bad57613bac613b56565b5b80604052505050565b6000613bc06138ee565b9050613bcc8282613b85565b919050565b600067ffffffffffffffff821115613bec57613beb613b56565b5b613bf582613a0c565b9050602081019050919050565b82818337600083830152505050565b6000613c24613c1f84613bd1565b613bb6565b905082815260208101848484011115613c4057613c3f613b51565b5b613c4b848285613c02565b509392505050565b600082601f830112613c6857613c67613b4c565b5b8135613c78848260208601613c11565b91505092915050565b6000819050919050565b613c9481613c81565b8114613c9f57600080fd5b50565b600081359050613cb181613c8b565b92915050565b600060ff82169050919050565b613ccd81613cb7565b8114613cd857600080fd5b50565b600081359050613cea81613cc4565b92915050565b600080600080600060a08688031215613d0c57613d0b6138f8565b5b6000613d1a88828901613ac1565b955050602086013567ffffffffffffffff811115613d3b57613d3a6138fd565b5b613d4788828901613c53565b9450506040613d5888828901613ca2565b9350506060613d6988828901613ca2565b9250506080613d7a88828901613cdb565b9150509295509295909350565b600081519050919050565b600082825260208201905092915050565b6000613dae82613d87565b613db88185613d92565b9350613dc88185602086016139d9565b613dd181613a0c565b840191505092915050565b60006020820190508181036000830152613df68184613da3565b905092915050565b6000819050919050565b6000613e23613e1e613e1984613a78565b613dfe565b613a78565b9050919050565b6000613e3582613e08565b9050919050565b6000613e4782613e2a565b9050919050565b613e5781613e3c565b82525050565b6000602082019050613e726000830184613e4e565b92915050565b613e8181613ad6565b82525050565b6000602082019050613e9c6000830184613e78565b92915050565b600060208284031215613eb857613eb76138f8565b5b6000613ec684828501613af7565b91505092915050565b613ed881613c81565b82525050565b6000602082019050613ef36000830184613ecf565b92915050565b600080600060608486031215613f1257613f116138f8565b5b6000613f2086828701613ac1565b9350506020613f3186828701613ac1565b9250506040613f4286828701613af7565b9150509250925092565b600060208284031215613f6257613f616138f8565b5b6000613f7084828501613ca2565b91505092915050565b600060208284031215613f8f57613f8e6138f8565b5b6000613f9d84828501613ac1565b91505092915050565b60008060408385031215613fbd57613fbc6138f8565b5b6000613fcb85828601613ca2565b9250506020613fdc85828601613ac1565b9150509250929050565b613fef81613cb7565b82525050565b600060208201905061400a6000830184613fe6565b92915050565b61401981613a98565b82525050565b60006020820190506140346000830184614010565b92915050565b61404381613987565b811461404e57600080fd5b50565b6000813590506140608161403a565b92915050565b60006020828403121561407c5761407b6138f8565b5b600061408a84828501614051565b91505092915050565b600080fd5b600080fd5b60008083601f8401126140b3576140b2613b4c565b5b8235905067ffffffffffffffff8111156140d0576140cf614093565b5b6020830191508360018202830111156140ec576140eb614098565b5b9250929050565b60008060006040848603121561410c5761410b6138f8565b5b600061411a86828701613ac1565b935050602084013567ffffffffffffffff81111561413b5761413a6138fd565b5b6141478682870161409d565b92509250509250925092565b6000806040838503121561416a576141696138f8565b5b600061417885828601613ac1565b925050602061418985828601614051565b9150509250929050565b600080604083850312156141aa576141a96138f8565b5b60006141b885828601613ac1565b92505060206141c985828601613ac1565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061421a57607f821691505b6020821081141561422e5761422d6141d3565b5b50919050565b7f5369676e657220616e64207369676e617475726520646f206e6f74206d61746360008201527f6800000000000000000000000000000000000000000000000000000000000000602082015250565b60006142906021836139c8565b915061429b82614234565b604082019050919050565b600060208201905081810360008301526142bf81614283565b9050919050565b60006142d182613a78565b9050919050565b6142e1816142c6565b82525050565b60006060820190506142fc6000830186614010565b61430960208301856142d8565b818103604083015261431b8184613da3565b9050949350505050565b600081905092915050565b600061433b82613d87565b6143458185614325565b93506143558185602086016139d9565b80840191505092915050565b60008160601b9050919050565b600061437982614361565b9050919050565b600061438b8261436e565b9050919050565b6143a361439e82613a98565b614380565b82525050565b60006143b58285614330565b91506143c18284614392565b6014820191508190509392505050565b60006143dd8284614330565b915081905092915050565b7f46756e6374696f6e2063616c6c206e6f74207375636365737366756c00000000600082015250565b600061441e601c836139c8565b9150614429826143e8565b602082019050919050565b6000602082019050818103600083015261444d81614411565b9050919050565b60008190508160005260206000209050919050565b6000815461447681614202565b61448081866139c8565b9450600182166000811461449b57600181146144ad576144e0565b60ff19831686526020860193506144e0565b6144b685614454565b60005b838110156144d8578154818901526001820191506020810190506144b9565b808801955050505b50505092915050565b600060208201905081810360008301526145038184614469565b905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006145676028836139c8565b91506145728261450b565b604082019050919050565b600060208201905081810360008301526145968161455a565b9050919050565b6000815190506145ac81613ae0565b92915050565b6000602082840312156145c8576145c76138f8565b5b60006145d68482850161459d565b91505092915050565b60006040820190506145f46000830185614010565b6146016020830184613e78565b9392505050565b6000815190506146178161403a565b92915050565b600060208284031215614633576146326138f8565b5b600061464184828501614608565b91505092915050565b600061465582613e2a565b9050919050565b6146658161464a565b82525050565b6000604082019050614680600083018561465c565b61468d6020830184614010565b9392505050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b60006146f0602f836139c8565b91506146fb82614694565b604082019050919050565b6000602082019050818103600083015261471f816146e3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061476082613ad6565b915061476b83613ad6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156147a05761479f614726565b5b828201905092915050565b7f616464726573735f203d20300000000000000000000000000000000000000000600082015250565b60006147e1600c836139c8565b91506147ec826147ab565b602082019050919050565b60006020820190508181036000830152614810816147d4565b9050919050565b7f6d61726b6574696e6741646472657373206973207468652073616d6500000000600082015250565b600061484d601c836139c8565b915061485882614817565b602082019050919050565b6000602082019050818103600083015261487c81614840565b9050919050565b50565b6000614893600083614325565b915061489e82614883565b600082019050919050565b60006148b482614886565b9150819050919050565b7f4661696c656420746f2073656e64204574686572000000000000000000000000600082015250565b60006148f46014836139c8565b91506148ff826148be565b602082019050919050565b60006020820190508181036000830152614923816148e7565b9050919050565b600060208201905061493f600083018461465c565b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006149a16025836139c8565b91506149ac82614945565b604082019050919050565b600060208201905081810360008301526149d081614994565b9050919050565b7f616d6f756e74203d203000000000000000000000000000000000000000000000600082015250565b6000614a0d600a836139c8565b9150614a18826149d7565b602082019050919050565b60006020820190508181036000830152614a3c81614a00565b9050919050565b7f7472616e73616374696f6e2065786365656473206d617820616d6f756e740000600082015250565b6000614a79601e836139c8565b9150614a8482614a43565b602082019050919050565b60006020820190508181036000830152614aa881614a6c565b9050919050565b6000614aba82613ad6565b9150614ac583613ad6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614afe57614afd614726565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614b4382613ad6565b9150614b4e83613ad6565b925082614b5e57614b5d614b09565b5b828204905092915050565b6000614b7482613ad6565b9150614b7f83613ad6565b925082821015614b9257614b91614726565b5b828203905092915050565b7f616d6f756e745f206973207468652073616d65206173206d61785478416d6f7560008201527f6e74000000000000000000000000000000000000000000000000000000000000602082015250565b6000614bf96022836139c8565b9150614c0482614b9d565b604082019050919050565b60006020820190508181036000830152614c2881614bec565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614c8b6024836139c8565b9150614c9682614c2f565b604082019050919050565b60006020820190508181036000830152614cba81614c7e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d1d6022836139c8565b9150614d2882614cc1565b604082019050919050565b60006020820190508181036000830152614d4c81614d10565b9050919050565b7f4e61746976654d6574615472616e73616374696f6e3a20494e56414c49445f5360008201527f49474e4552000000000000000000000000000000000000000000000000000000602082015250565b6000614daf6025836139c8565b9150614dba82614d53565b604082019050919050565b60006020820190508181036000830152614dde81614da2565b9050919050565b6000608082019050614dfa6000830187613ecf565b614e076020830186613fe6565b614e146040830185613ecf565b614e216060830184613ecf565b95945050505050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614e60601b836139c8565b9150614e6b82614e2a565b602082019050919050565b60006020820190508181036000830152614e8f81614e53565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614ef26025836139c8565b9150614efd82614e96565b604082019050919050565b60006020820190508181036000830152614f2181614ee5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614f846023836139c8565b9150614f8f82614f28565b604082019050919050565b60006020820190508181036000830152614fb381614f77565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006150166026836139c8565b915061502182614fba565b604082019050919050565b6000602082019050818103600083015261504581615009565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006150a86021836139c8565b91506150b38261504c565b604082019050919050565b600060208201905081810360008301526150d78161509b565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b600061513a6022836139c8565b9150615145826150de565b604082019050919050565b600060208201905081810360008301526151698161512d565b9050919050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b60006151b1601783615170565b91506151bc8261517b565b601782019050919050565b60006151d2826139bd565b6151dc8185615170565b93506151ec8185602086016139d9565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b600061522e601183615170565b9150615239826151f8565b601182019050919050565b600061524f826151a4565b915061525b82856151c7565b915061526682615221565b915061527282846151c7565b91508190509392505050565b60006060820190506152936000830186613e78565b6152a06020830185613e78565b6152ad6040830184613e78565b949350505050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006152eb601f836139c8565b91506152f6826152b5565b602082019050919050565b6000602082019050818103600083015261531a816152de565b9050919050565b60006080820190506153366000830187613ecf565b6153436020830186613e78565b6153506040830185614010565b61535d6060830184613ecf565b95945050505050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b600061539c600283615170565b91506153a782615366565b600282019050919050565b6000819050919050565b6153cd6153c882613c81565b6153b2565b82525050565b60006153de8261538f565b91506153ea82856153bc565b6020820191506153fa82846153bc565b6020820191508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061544482613ad6565b9150600082141561545857615457614726565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b60006154996020836139c8565b91506154a482615463565b602082019050919050565b600060208201905081810360008301526154c88161548c565b9050919050565b6000815190506154de81613aaa565b92915050565b6000602082840312156154fa576154f96138f8565b5b6000615508848285016154cf565b91505092915050565b6000819050919050565b600061553661553161552c84615511565b613dfe565b613ad6565b9050919050565b6155468161551b565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61558181613a98565b82525050565b60006155938383615578565b60208301905092915050565b6000602082019050919050565b60006155b78261554c565b6155c18185615557565b93506155cc83615568565b8060005b838110156155fd5781516155e48882615587565b97506155ef8361559f565b9250506001810190506155d0565b5085935050505092915050565b600060a08201905061561f6000830188613e78565b61562c602083018761553d565b818103604083015261563e81866155ac565b905061564d6060830185614010565b61565a6080830184613e78565b9695505050505050565b60006040820190506156796000830185613e78565b818103602083015261568b81846155ac565b90509392505050565b600060c0820190506156a96000830189614010565b6156b66020830188613e78565b6156c3604083018761553d565b6156d0606083018661553d565b6156dd6080830185614010565b6156ea60a0830184613e78565b979650505050505050565b60008060006060848603121561570e5761570d6138f8565b5b600061571c8682870161459d565b935050602061572d8682870161459d565b925050604061573e8682870161459d565b915050925092509256fe4d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e617475726529a2646970667358221220bbc79b5b52649126b6436085122e6900e3e77e02d3b755b8efd3c87c4c22897464736f6c63430008080033454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c6164647265737320766572696679696e67436f6e74726163742c627974657333322073616c7429000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000a6fa4fb5f76172d178d61b04b0ecd319c5d1c0aa0000000000000000000000000000000000000000000000000000000000000001240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012400000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102885760003560e01c8063906e9dd01161015a578063b0683755116100c1578063cf8e2f8e1161007a578063cf8e2f8e14610a0f578063d547741f14610a38578063d8020a1814610a61578063dd62ed3e14610a8c578063e4412f6814610ac9578063ec28438a14610af457610288565b8063b068375514610901578063c49b9a801461092c578063c6055ec314610955578063cba0e9961461097e578063cc2fbd66146109bb578063cf2c52cb146109e657610288565b8063a3b0b5a311610113578063a3b0b5a3146107df578063a457c2d71461080a578063a5ece94114610847578063a9059cbb14610872578063aee50b1e146108af578063af2f6dd8146108d857610288565b8063906e9dd0146106e157806391d148541461070a5780639393502a1461074757806395d89b411461075e578063a073d37f14610789578063a217fddf146107b457610288565b80632d0335ab116101fe57806336568abe116101b757806336568abe146105bf57806339509351146105e857806349bd5a5e1461062557806370a08231146106505780637e88880d1461068d5780638c0b5e22146106b657610288565b80632d0335ab146104b15780632e1a7d4d146104ee5780632f2ff15d14610517578063313ce5671461054057806333f4e33d1461056b5780633408e4701461059457610288565b80631694505e116102505780631694505e1461038d57806318160ddd146103b85780631a3f0cda146103e357806320379ee51461040c57806323b872dd14610437578063248a9ca31461047457610288565b806301ffc9a71461028d57806306fdde03146102ca578063095ea7b3146102f55780630c53c51c146103325780630f7e597014610362575b600080fd5b34801561029957600080fd5b506102b460048036038101906102af919061395a565b610b1d565b6040516102c191906139a2565b60405180910390f35b3480156102d657600080fd5b506102df610b97565b6040516102ec9190613a56565b60405180910390f35b34801561030157600080fd5b5061031c60048036038101906103179190613b0c565b610c29565b60405161032991906139a2565b60405180910390f35b61034c60048036038101906103479190613cf0565b610c47565b6040516103599190613ddc565b60405180910390f35b34801561036e57600080fd5b50610377610eb9565b6040516103849190613a56565b60405180910390f35b34801561039957600080fd5b506103a2610ef2565b6040516103af9190613e5d565b60405180910390f35b3480156103c457600080fd5b506103cd610f16565b6040516103da9190613e87565b60405180910390f35b3480156103ef57600080fd5b5061040a60048036038101906104059190613ea2565b610f20565b005b34801561041857600080fd5b50610421610f84565b60405161042e9190613ede565b60405180910390f35b34801561044357600080fd5b5061045e60048036038101906104599190613ef9565b610f8e565b60405161046b91906139a2565b60405180910390f35b34801561048057600080fd5b5061049b60048036038101906104969190613f4c565b611086565b6040516104a89190613ede565b60405180910390f35b3480156104bd57600080fd5b506104d860048036038101906104d39190613f79565b6110a6565b6040516104e59190613e87565b60405180910390f35b3480156104fa57600080fd5b5061051560048036038101906105109190613ea2565b6110ef565b005b34801561052357600080fd5b5061053e60048036038101906105399190613fa6565b611103565b005b34801561054c57600080fd5b5061055561112c565b6040516105629190613ff5565b60405180910390f35b34801561057757600080fd5b50610592600480360381019061058d9190613f79565b611135565b005b3480156105a057600080fd5b506105a961130a565b6040516105b69190613e87565b60405180910390f35b3480156105cb57600080fd5b506105e660048036038101906105e19190613fa6565b611317565b005b3480156105f457600080fd5b5061060f600480360381019061060a9190613b0c565b61139a565b60405161061c91906139a2565b60405180910390f35b34801561063157600080fd5b5061063a611446565b604051610647919061401f565b60405180910390f35b34801561065c57600080fd5b5061067760048036038101906106729190613f79565b61146c565b6040516106849190613e87565b60405180910390f35b34801561069957600080fd5b506106b460048036038101906106af9190613f79565b6114b4565b005b3480156106c257600080fd5b506106cb611747565b6040516106d89190613e87565b60405180910390f35b3480156106ed57600080fd5b5061070860048036038101906107039190613f79565b61174d565b005b34801561071657600080fd5b50610731600480360381019061072c9190613fa6565b6119e0565b60405161073e91906139a2565b60405180910390f35b34801561075357600080fd5b5061075c611a4b565b005b34801561076a57600080fd5b50610773611b9c565b6040516107809190613a56565b60405180910390f35b34801561079557600080fd5b5061079e611c2e565b6040516107ab9190613e87565b60405180910390f35b3480156107c057600080fd5b506107c9611c38565b6040516107d69190613ede565b60405180910390f35b3480156107eb57600080fd5b506107f4611c3f565b6040516108019190613ede565b60405180910390f35b34801561081657600080fd5b50610831600480360381019061082c9190613b0c565b611c63565b60405161083e91906139a2565b60405180910390f35b34801561085357600080fd5b5061085c611d4e565b604051610869919061401f565b60405180910390f35b34801561087e57600080fd5b5061089960048036038101906108949190613b0c565b611d74565b6040516108a691906139a2565b60405180910390f35b3480156108bb57600080fd5b506108d660048036038101906108d19190613ea2565b6120e2565b005b3480156108e457600080fd5b506108ff60048036038101906108fa9190613ea2565b612146565b005b34801561090d57600080fd5b506109166121aa565b6040516109239190613e87565b60405180910390f35b34801561093857600080fd5b50610953600480360381019061094e9190614066565b6121b0565b005b34801561096157600080fd5b5061097c60048036038101906109779190613ea2565b61225e565b005b34801561098a57600080fd5b506109a560048036038101906109a09190613f79565b6122c2565b6040516109b291906139a2565b60405180910390f35b3480156109c757600080fd5b506109d0612318565b6040516109dd919061401f565b60405180910390f35b3480156109f257600080fd5b50610a0d6004803603810190610a0891906140f3565b61233e565b005b348015610a1b57600080fd5b50610a366004803603810190610a319190614153565b6123d8565b005b348015610a4457600080fd5b50610a5f6004803603810190610a5a9190613fa6565b61248d565b005b348015610a6d57600080fd5b50610a766124b6565b604051610a839190613e87565b60405180910390f35b348015610a9857600080fd5b50610ab36004803603810190610aae9190614193565b6124bc565b604051610ac09190613e87565b60405180910390f35b348015610ad557600080fd5b50610ade612543565b604051610aeb9190613e87565b60405180910390f35b348015610b0057600080fd5b50610b1b6004803603810190610b169190613ea2565b612549565b005b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b905750610b8f826125f2565b5b9050919050565b606060038054610ba690614202565b80601f0160208091040260200160405190810160405280929190818152602001828054610bd290614202565b8015610c1f5780601f10610bf457610100808354040283529160200191610c1f565b820191906000526020600020905b815481529060010190602001808311610c0257829003601f168201915b5050505050905090565b6000610c3d610c3661265c565b8484612664565b6001905092915050565b606060006040518060600160405280600960008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481526020018873ffffffffffffffffffffffffffffffffffffffff168152602001878152509050610cca878287878761282f565b610d09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d00906142a6565b60405180910390fd5b610d5c6001600960008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461293890919063ffffffff16565b600960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b873388604051610dd2939291906142e7565b60405180910390a16000803073ffffffffffffffffffffffffffffffffffffffff16888a604051602001610e079291906143a9565b604051602081830303815290604052604051610e2391906143d1565b6000604051808303816000865af19150503d8060008114610e60576040519150601f19603f3d011682016040523d82523d6000602084013e610e65565b606091505b509150915081610eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea190614434565b60405180910390fd5b80935050505095945050505050565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b7f0000000000000000000000001b02da8cb0d097eb8d57a175b88c7d8b4799750681565b6000600254905090565b6000801b610f3581610f3061265c565b6119e0565b600690610f78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6f91906144e9565b60405180910390fd5b5081600f819055505050565b6000600854905090565b6000610f9b848484612996565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610fe661265c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611066576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105d9061457d565b60405180910390fd5b61107a8561107261265c565b858403612664565b60019150509392505050565b600060056000838152602001908152602001600020600101549050919050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111006110fa61265c565b82612c17565b50565b61110c82611086565b61111d8161111861265c565b612dee565b6111278383612e8b565b505050565b60006012905090565b6000801b61114a8161114561265c565b6119e0565b60069061118d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118491906144e9565b60405180910390fd5b508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611206919061401f565b60206040518083038186803b15801561121e57600080fd5b505afa158015611232573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125691906145b2565b6040518363ffffffff1660e01b81526004016112739291906145df565b602060405180830381600087803b15801561128d57600080fd5b505af11580156112a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c5919061461d565b507f34d58c18c6c1df2c698ccac556acea92941ca7b99d2fccf9e3ac1852d0dec36f6112ef61265c565b836040516112fe92919061466b565b60405180910390a15050565b6000804690508091505090565b61131f61265c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461138c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138390614706565b60405180910390fd5b6113968282612f6c565b5050565b600061143c6113a761265c565b8484600160006113b561265c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114379190614755565b612664565b6001905092915050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000801b6114c9816114c461265c565b6119e0565b60069061150c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150391906144e9565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561157d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611574906147f7565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561160e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160590614863565b60405180910390fd5b600060106000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555081600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160106000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60135481565b6000801b6117628161175d61265c565b6119e0565b6006906117a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179c91906144e9565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611816576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180d906147f7565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189e90614863565b60405180910390fd5b600060106000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160106000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000801b611a6081611a5b61265c565b6119e0565b600690611aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9a91906144e9565b60405180910390fd5b50600080611aaf61265c565b73ffffffffffffffffffffffffffffffffffffffff1647604051611ad2906148a9565b60006040518083038185875af1925050503d8060008114611b0f576040519150601f19603f3d011682016040523d82523d6000602084013e611b14565b606091505b509150915081611b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b509061490a565b60405180910390fd5b7fab775b760df2d00052b15de0e959fdb639971bdafcb5c834567f87c3032d4253611b8261265c565b604051611b8f919061492a565b60405180910390a1505050565b606060048054611bab90614202565b80601f0160208091040260200160405190810160405280929190818152602001828054611bd790614202565b8015611c245780601f10611bf957610100808354040283529160200191611c24565b820191906000526020600020905b815481529060010190602001808311611c0757829003601f168201915b5050505050905090565b6000601154905090565b6000801b81565b7f8f4f2da22e8ac8f11e15f9fc141cddbb5deea8800186560abb6e68c5496619a981565b60008060016000611c7261265c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611d2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d26906149b7565b60405180910390fd5b611d43611d3a61265c565b85858403612664565b600191505092915050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000808211611db8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611daf90614a23565b60405180910390fd5b611dc8611dc361265c565b61146c565b821115611dd457600080fd5b601354821115611e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1090614a8f565b60405180910390fd5b601260149054906101000a900460ff16158015611e425750601260159054906101000a900460ff165b8015611e9b5750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8015611efc5750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611ee361265c565b73ffffffffffffffffffffffffffffffffffffffff1614155b8015611f125750601154611f0f3061146c565b10155b15611f2957611f28611f233061146c565b61304e565b5b60106000611f3561265c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611fd45750601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156120c6576000612710600d5484611fec9190614aaf565b611ff69190614b38565b90506000612710600e548561200b9190614aaf565b6120159190614b38565b90506000612710600f548661202a9190614aaf565b6120349190614b38565b90508082846120439190614755565b61204d9190614755565b856120589190614b69565b945061208e61206561265c565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685612996565b6120c261209961265c565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612996565b5050505b6120d86120d161265c565b8484612996565b6001905092915050565b6000801b6120f7816120f261265c565b6119e0565b60069061213a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213191906144e9565b60405180910390fd5b50816011819055505050565b6000801b61215b8161215661265c565b6119e0565b60069061219e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219591906144e9565b60405180910390fd5b5081600e819055505050565b600f5481565b6000801b6121c5816121c061265c565b6119e0565b600690612208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ff91906144e9565b60405180910390fd5b5081601260156101000a81548160ff0219169083151502179055507f832e0189082052b13883d158969fe2bcd0142ee55911bf3787d8fc164bbf655d8260405161225291906139a2565b60405180910390a15050565b6000801b6122738161226e61265c565b6119e0565b6006906122b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ad91906144e9565b60405180910390fd5b5081600d819055505050565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f8f4f2da22e8ac8f11e15f9fc141cddbb5deea8800186560abb6e68c5496619a96123708161236b61265c565b6119e0565b6006906123b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123aa91906144e9565b60405180910390fd5b50600083838101906123c59190613ea2565b90506123d18582613117565b5050505050565b6000801b6123ed816123e861265c565b6119e0565b600690612430576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242791906144e9565b60405180910390fd5b5081601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b61249682611086565b6124a7816124a261265c565b612dee565b6124b18383612f6c565b505050565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600e5481565b6000801b61255e8161255961265c565b6119e0565b6006906125a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259891906144e9565b60405180910390fd5b508160135414156125e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125de90614c0f565b60405180910390fd5b816013819055505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126cb90614ca1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273b90614d33565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516128229190613e87565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614156128a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289790614dc5565b60405180910390fd5b60016128b36128ae87613277565b6132df565b838686604051600081526020016040526040516128d39493929190614de5565b6020604051602081039080840390855afa1580156128f5573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614905095945050505050565b60008082846129479190614755565b90508381101561298c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298390614e76565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fd90614f08565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6d90614f9a565b60405180910390fd5b612a81838383613318565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612b07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612afe9061502c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b9a9190614755565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612bfe9190613e87565b60405180910390a3612c1184848461331d565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7e906150be565b60405180910390fd5b612c9382600083613318565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1090615150565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254612d709190614b69565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612dd59190613e87565b60405180910390a3612de98360008461331d565b505050565b612df882826119e0565b612e8757612e1d8173ffffffffffffffffffffffffffffffffffffffff166014613322565b612e2b8360001c6020613322565b604051602001612e3c929190615244565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7e9190613a56565b60405180910390fd5b5050565b612e9582826119e0565b612f685760016005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612f0d61265c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b612f7682826119e0565b1561304a5760006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612fef61265c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b6001601260146101000a81548160ff02191690831515021790555060006002826130789190614b38565b9050600081836130889190614b69565b905060004790506130988361355e565b80476130a49190614b69565b90506130bb83856130b59190614b69565b826137e3565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618382846040516130ee9392919061527e565b60405180910390a15050506000601260146101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317e90615301565b60405180910390fd5b61319360008383613318565b80600260008282546131a59190614755565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131fa9190614755565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161325f9190613e87565b60405180910390a36132736000838361331d565b5050565b60006040518060800160405280604381526020016157496043913980519060200120826000015183602001518460400151805190602001206040516020016132c29493929190615321565b604051602081830303815290604052805190602001209050919050565b60006132e9610f84565b826040516020016132fb9291906153d3565b604051602081830303815290604052805190602001209050919050565b505050565b505050565b6060600060028360026133359190614aaf565b61333f9190614755565b67ffffffffffffffff81111561335857613357613b56565b5b6040519080825280601f01601f19166020018201604052801561338a5781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106133c2576133c161540a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106134265761342561540a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026134669190614aaf565b6134709190614755565b90505b6001811115613510577f3031323334353637383961626364656600000000000000000000000000000000600f8616601081106134b2576134b161540a565b5b1a60f81b8282815181106134c9576134c861540a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508061350990615439565b9050613473565b5060008414613554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161354b906154af565b60405180910390fd5b8091505092915050565b6000600267ffffffffffffffff81111561357b5761357a613b56565b5b6040519080825280602002602001820160405280156135a95781602001602082028036833780820191505090505b50905030816000815181106135c1576135c061540a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000001b02da8cb0d097eb8d57a175b88c7d8b4799750673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561366157600080fd5b505afa158015613675573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061369991906154e4565b816001815181106136ad576136ac61540a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613712307f0000000000000000000000001b02da8cb0d097eb8d57a175b88c7d8b4799750684612664565b7f0000000000000000000000001b02da8cb0d097eb8d57a175b88c7d8b4799750673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161377495949392919061560a565b600060405180830381600087803b15801561378e57600080fd5b505af11580156137a2573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516137d7929190615664565b60405180910390a15050565b61380e307f0000000000000000000000001b02da8cb0d097eb8d57a175b88c7d8b4799750684612664565b7f0000000000000000000000001b02da8cb0d097eb8d57a175b88c7d8b4799750673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161389596959493929190615694565b6060604051808303818588803b1580156138ae57600080fd5b505af11580156138c2573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906138e791906156f5565b5050505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61393781613902565b811461394257600080fd5b50565b6000813590506139548161392e565b92915050565b6000602082840312156139705761396f6138f8565b5b600061397e84828501613945565b91505092915050565b60008115159050919050565b61399c81613987565b82525050565b60006020820190506139b76000830184613993565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156139f75780820151818401526020810190506139dc565b83811115613a06576000848401525b50505050565b6000601f19601f8301169050919050565b6000613a28826139bd565b613a3281856139c8565b9350613a428185602086016139d9565b613a4b81613a0c565b840191505092915050565b60006020820190508181036000830152613a708184613a1d565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613aa382613a78565b9050919050565b613ab381613a98565b8114613abe57600080fd5b50565b600081359050613ad081613aaa565b92915050565b6000819050919050565b613ae981613ad6565b8114613af457600080fd5b50565b600081359050613b0681613ae0565b92915050565b60008060408385031215613b2357613b226138f8565b5b6000613b3185828601613ac1565b9250506020613b4285828601613af7565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613b8e82613a0c565b810181811067ffffffffffffffff82111715613bad57613bac613b56565b5b80604052505050565b6000613bc06138ee565b9050613bcc8282613b85565b919050565b600067ffffffffffffffff821115613bec57613beb613b56565b5b613bf582613a0c565b9050602081019050919050565b82818337600083830152505050565b6000613c24613c1f84613bd1565b613bb6565b905082815260208101848484011115613c4057613c3f613b51565b5b613c4b848285613c02565b509392505050565b600082601f830112613c6857613c67613b4c565b5b8135613c78848260208601613c11565b91505092915050565b6000819050919050565b613c9481613c81565b8114613c9f57600080fd5b50565b600081359050613cb181613c8b565b92915050565b600060ff82169050919050565b613ccd81613cb7565b8114613cd857600080fd5b50565b600081359050613cea81613cc4565b92915050565b600080600080600060a08688031215613d0c57613d0b6138f8565b5b6000613d1a88828901613ac1565b955050602086013567ffffffffffffffff811115613d3b57613d3a6138fd565b5b613d4788828901613c53565b9450506040613d5888828901613ca2565b9350506060613d6988828901613ca2565b9250506080613d7a88828901613cdb565b9150509295509295909350565b600081519050919050565b600082825260208201905092915050565b6000613dae82613d87565b613db88185613d92565b9350613dc88185602086016139d9565b613dd181613a0c565b840191505092915050565b60006020820190508181036000830152613df68184613da3565b905092915050565b6000819050919050565b6000613e23613e1e613e1984613a78565b613dfe565b613a78565b9050919050565b6000613e3582613e08565b9050919050565b6000613e4782613e2a565b9050919050565b613e5781613e3c565b82525050565b6000602082019050613e726000830184613e4e565b92915050565b613e8181613ad6565b82525050565b6000602082019050613e9c6000830184613e78565b92915050565b600060208284031215613eb857613eb76138f8565b5b6000613ec684828501613af7565b91505092915050565b613ed881613c81565b82525050565b6000602082019050613ef36000830184613ecf565b92915050565b600080600060608486031215613f1257613f116138f8565b5b6000613f2086828701613ac1565b9350506020613f3186828701613ac1565b9250506040613f4286828701613af7565b9150509250925092565b600060208284031215613f6257613f616138f8565b5b6000613f7084828501613ca2565b91505092915050565b600060208284031215613f8f57613f8e6138f8565b5b6000613f9d84828501613ac1565b91505092915050565b60008060408385031215613fbd57613fbc6138f8565b5b6000613fcb85828601613ca2565b9250506020613fdc85828601613ac1565b9150509250929050565b613fef81613cb7565b82525050565b600060208201905061400a6000830184613fe6565b92915050565b61401981613a98565b82525050565b60006020820190506140346000830184614010565b92915050565b61404381613987565b811461404e57600080fd5b50565b6000813590506140608161403a565b92915050565b60006020828403121561407c5761407b6138f8565b5b600061408a84828501614051565b91505092915050565b600080fd5b600080fd5b60008083601f8401126140b3576140b2613b4c565b5b8235905067ffffffffffffffff8111156140d0576140cf614093565b5b6020830191508360018202830111156140ec576140eb614098565b5b9250929050565b60008060006040848603121561410c5761410b6138f8565b5b600061411a86828701613ac1565b935050602084013567ffffffffffffffff81111561413b5761413a6138fd565b5b6141478682870161409d565b92509250509250925092565b6000806040838503121561416a576141696138f8565b5b600061417885828601613ac1565b925050602061418985828601614051565b9150509250929050565b600080604083850312156141aa576141a96138f8565b5b60006141b885828601613ac1565b92505060206141c985828601613ac1565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061421a57607f821691505b6020821081141561422e5761422d6141d3565b5b50919050565b7f5369676e657220616e64207369676e617475726520646f206e6f74206d61746360008201527f6800000000000000000000000000000000000000000000000000000000000000602082015250565b60006142906021836139c8565b915061429b82614234565b604082019050919050565b600060208201905081810360008301526142bf81614283565b9050919050565b60006142d182613a78565b9050919050565b6142e1816142c6565b82525050565b60006060820190506142fc6000830186614010565b61430960208301856142d8565b818103604083015261431b8184613da3565b9050949350505050565b600081905092915050565b600061433b82613d87565b6143458185614325565b93506143558185602086016139d9565b80840191505092915050565b60008160601b9050919050565b600061437982614361565b9050919050565b600061438b8261436e565b9050919050565b6143a361439e82613a98565b614380565b82525050565b60006143b58285614330565b91506143c18284614392565b6014820191508190509392505050565b60006143dd8284614330565b915081905092915050565b7f46756e6374696f6e2063616c6c206e6f74207375636365737366756c00000000600082015250565b600061441e601c836139c8565b9150614429826143e8565b602082019050919050565b6000602082019050818103600083015261444d81614411565b9050919050565b60008190508160005260206000209050919050565b6000815461447681614202565b61448081866139c8565b9450600182166000811461449b57600181146144ad576144e0565b60ff19831686526020860193506144e0565b6144b685614454565b60005b838110156144d8578154818901526001820191506020810190506144b9565b808801955050505b50505092915050565b600060208201905081810360008301526145038184614469565b905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006145676028836139c8565b91506145728261450b565b604082019050919050565b600060208201905081810360008301526145968161455a565b9050919050565b6000815190506145ac81613ae0565b92915050565b6000602082840312156145c8576145c76138f8565b5b60006145d68482850161459d565b91505092915050565b60006040820190506145f46000830185614010565b6146016020830184613e78565b9392505050565b6000815190506146178161403a565b92915050565b600060208284031215614633576146326138f8565b5b600061464184828501614608565b91505092915050565b600061465582613e2a565b9050919050565b6146658161464a565b82525050565b6000604082019050614680600083018561465c565b61468d6020830184614010565b9392505050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b60006146f0602f836139c8565b91506146fb82614694565b604082019050919050565b6000602082019050818103600083015261471f816146e3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061476082613ad6565b915061476b83613ad6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156147a05761479f614726565b5b828201905092915050565b7f616464726573735f203d20300000000000000000000000000000000000000000600082015250565b60006147e1600c836139c8565b91506147ec826147ab565b602082019050919050565b60006020820190508181036000830152614810816147d4565b9050919050565b7f6d61726b6574696e6741646472657373206973207468652073616d6500000000600082015250565b600061484d601c836139c8565b915061485882614817565b602082019050919050565b6000602082019050818103600083015261487c81614840565b9050919050565b50565b6000614893600083614325565b915061489e82614883565b600082019050919050565b60006148b482614886565b9150819050919050565b7f4661696c656420746f2073656e64204574686572000000000000000000000000600082015250565b60006148f46014836139c8565b91506148ff826148be565b602082019050919050565b60006020820190508181036000830152614923816148e7565b9050919050565b600060208201905061493f600083018461465c565b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006149a16025836139c8565b91506149ac82614945565b604082019050919050565b600060208201905081810360008301526149d081614994565b9050919050565b7f616d6f756e74203d203000000000000000000000000000000000000000000000600082015250565b6000614a0d600a836139c8565b9150614a18826149d7565b602082019050919050565b60006020820190508181036000830152614a3c81614a00565b9050919050565b7f7472616e73616374696f6e2065786365656473206d617820616d6f756e740000600082015250565b6000614a79601e836139c8565b9150614a8482614a43565b602082019050919050565b60006020820190508181036000830152614aa881614a6c565b9050919050565b6000614aba82613ad6565b9150614ac583613ad6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614afe57614afd614726565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614b4382613ad6565b9150614b4e83613ad6565b925082614b5e57614b5d614b09565b5b828204905092915050565b6000614b7482613ad6565b9150614b7f83613ad6565b925082821015614b9257614b91614726565b5b828203905092915050565b7f616d6f756e745f206973207468652073616d65206173206d61785478416d6f7560008201527f6e74000000000000000000000000000000000000000000000000000000000000602082015250565b6000614bf96022836139c8565b9150614c0482614b9d565b604082019050919050565b60006020820190508181036000830152614c2881614bec565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614c8b6024836139c8565b9150614c9682614c2f565b604082019050919050565b60006020820190508181036000830152614cba81614c7e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d1d6022836139c8565b9150614d2882614cc1565b604082019050919050565b60006020820190508181036000830152614d4c81614d10565b9050919050565b7f4e61746976654d6574615472616e73616374696f6e3a20494e56414c49445f5360008201527f49474e4552000000000000000000000000000000000000000000000000000000602082015250565b6000614daf6025836139c8565b9150614dba82614d53565b604082019050919050565b60006020820190508181036000830152614dde81614da2565b9050919050565b6000608082019050614dfa6000830187613ecf565b614e076020830186613fe6565b614e146040830185613ecf565b614e216060830184613ecf565b95945050505050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614e60601b836139c8565b9150614e6b82614e2a565b602082019050919050565b60006020820190508181036000830152614e8f81614e53565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614ef26025836139c8565b9150614efd82614e96565b604082019050919050565b60006020820190508181036000830152614f2181614ee5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614f846023836139c8565b9150614f8f82614f28565b604082019050919050565b60006020820190508181036000830152614fb381614f77565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006150166026836139c8565b915061502182614fba565b604082019050919050565b6000602082019050818103600083015261504581615009565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006150a86021836139c8565b91506150b38261504c565b604082019050919050565b600060208201905081810360008301526150d78161509b565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b600061513a6022836139c8565b9150615145826150de565b604082019050919050565b600060208201905081810360008301526151698161512d565b9050919050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b60006151b1601783615170565b91506151bc8261517b565b601782019050919050565b60006151d2826139bd565b6151dc8185615170565b93506151ec8185602086016139d9565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b600061522e601183615170565b9150615239826151f8565b601182019050919050565b600061524f826151a4565b915061525b82856151c7565b915061526682615221565b915061527282846151c7565b91508190509392505050565b60006060820190506152936000830186613e78565b6152a06020830185613e78565b6152ad6040830184613e78565b949350505050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006152eb601f836139c8565b91506152f6826152b5565b602082019050919050565b6000602082019050818103600083015261531a816152de565b9050919050565b60006080820190506153366000830187613ecf565b6153436020830186613e78565b6153506040830185614010565b61535d6060830184613ecf565b95945050505050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b600061539c600283615170565b91506153a782615366565b600282019050919050565b6000819050919050565b6153cd6153c882613c81565b6153b2565b82525050565b60006153de8261538f565b91506153ea82856153bc565b6020820191506153fa82846153bc565b6020820191508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061544482613ad6565b9150600082141561545857615457614726565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b60006154996020836139c8565b91506154a482615463565b602082019050919050565b600060208201905081810360008301526154c88161548c565b9050919050565b6000815190506154de81613aaa565b92915050565b6000602082840312156154fa576154f96138f8565b5b6000615508848285016154cf565b91505092915050565b6000819050919050565b600061553661553161552c84615511565b613dfe565b613ad6565b9050919050565b6155468161551b565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61558181613a98565b82525050565b60006155938383615578565b60208301905092915050565b6000602082019050919050565b60006155b78261554c565b6155c18185615557565b93506155cc83615568565b8060005b838110156155fd5781516155e48882615587565b97506155ef8361559f565b9250506001810190506155d0565b5085935050505092915050565b600060a08201905061561f6000830188613e78565b61562c602083018761553d565b818103604083015261563e81866155ac565b905061564d6060830185614010565b61565a6080830184613e78565b9695505050505050565b60006040820190506156796000830185613e78565b818103602083015261568b81846155ac565b90509392505050565b600060c0820190506156a96000830189614010565b6156b66020830188613e78565b6156c3604083018761553d565b6156d0606083018661553d565b6156dd6080830185614010565b6156ea60a0830184613e78565b979650505050505050565b60008060006060848603121561570e5761570d6138f8565b5b600061571c8682870161459d565b935050602061572d8682870161459d565b925050604061573e8682870161459d565b915050925092509256fe4d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e617475726529a2646970667358221220bbc79b5b52649126b6436085122e6900e3e77e02d3b755b8efd3c87c4c22897464736f6c63430008080033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000a6fa4fb5f76172d178d61b04b0ecd319c5d1c0aa0000000000000000000000000000000000000000000000000000000000000001240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012400000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name_ (string): $
Arg [1] : symbol_ (string): $
Arg [2] : childChainManager (address): 0xA6FA4fB5f76172d178d61B04b0ecd319C5d1C0aa
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 000000000000000000000000a6fa4fb5f76172d178d61b04b0ecd319c5d1c0aa
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [4] : 2400000000000000000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [6] : 2400000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
46698:9561:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27984:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11709:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13876:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43233:1151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40495:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47383:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12829:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50064:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41505:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14527:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29395:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44810:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49642:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29780:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12671:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55322:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41614:161;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30828:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15428:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47441:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13000:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51106:384;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47563:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50704:394;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28280:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55562:285;;;;;;;;;;;;;:::i;:::-;;11928:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51894:123;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27371:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46805:68;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16146:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46932:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52087:1131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50358:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49936:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47199:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50506:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49804:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51763:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47016:74;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49189:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50200:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30172:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47097:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13578:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47149:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51498:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27984:204;28069:4;28108:32;28093:47;;;:11;:47;;;;:87;;;;28144:36;28168:11;28144:23;:36::i;:::-;28093:87;28086:94;;27984:204;;;:::o;11709:100::-;11763:13;11796:5;11789:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11709:100;:::o;13876:169::-;13959:4;13976:39;13985:12;:10;:12::i;:::-;13999:7;14008:6;13976:8;:39::i;:::-;14033:4;14026:11;;13876:169;;;;:::o;43233:1151::-;43434:12;43459:29;43491:152;;;;;;;;43529:6;:19;43536:11;43529:19;;;;;;;;;;;;;;;;43491:152;;;;43569:11;43491:152;;;;;;43614:17;43491:152;;;43459:184;;43678:45;43685:11;43698:6;43706:4;43712;43718;43678:6;:45::i;:::-;43656:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;43873:26;43897:1;43873:6;:19;43880:11;43873:19;;;;;;;;;;;;;;;;:23;;:26;;;;:::i;:::-;43851:6;:19;43858:11;43851:19;;;;;;;;;;;;;;;:48;;;;43917:126;43955:11;43989:10;44015:17;43917:126;;;;;;;;:::i;:::-;;;;;;;;44154:12;44168:23;44203:4;44195:18;;44245:17;44264:11;44228:48;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44195:92;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44153:134;;;;44306:7;44298:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;44366:10;44359:17;;;;;43233:1151;;;;;;;:::o;40495:43::-;;;;;;;;;;;;;;;;;;;:::o;47383:51::-;;;:::o;12829:108::-;12890:7;12917:12;;12910:19;;12829:108;:::o;50064:124::-;27416:4;50122:18;;32920:27;32928:4;32934:12;:10;:12::i;:::-;32920:7;:27::i;:::-;32962:10;32898:85;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;50172:8:::1;50153:16;:27;;;;50064:124:::0;;:::o;41505:101::-;41556:7;41583:15;;41576:22;;41505:101;:::o;14527:492::-;14667:4;14684:36;14694:6;14702:9;14713:6;14684:9;:36::i;:::-;14733:24;14760:11;:19;14772:6;14760:19;;;;;;;;;;;;;;;:33;14780:12;:10;:12::i;:::-;14760:33;;;;;;;;;;;;;;;;14733:60;;14832:6;14812:16;:26;;14804:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;14919:57;14928:6;14936:12;:10;:12::i;:::-;14969:6;14950:16;:25;14919:8;:57::i;:::-;15007:4;15000:11;;;14527:492;;;;;:::o;29395:123::-;29461:7;29488:6;:12;29495:4;29488:12;;;;;;;;;;;:22;;;29481:29;;29395:123;;;:::o;44810:107::-;44863:13;44897:6;:12;44904:4;44897:12;;;;;;;;;;;;;;;;44889:20;;44810:107;;;:::o;49642:89::-;49696:27;49702:12;:10;:12::i;:::-;49716:6;49696:5;:27::i;:::-;49642:89;:::o;29780:147::-;29863:18;29876:4;29863:12;:18::i;:::-;27862:30;27873:4;27879:12;:10;:12::i;:::-;27862:10;:30::i;:::-;29894:25:::1;29905:4;29911:7;29894:10;:25::i;:::-;29780:147:::0;;;:::o;12671:93::-;12729:5;12754:2;12747:9;;12671:93;:::o;55322:228::-;27416:4;55385:18;;32920:27;32928:4;32934:12;:10;:12::i;:::-;32920:7;:27::i;:::-;32962:10;32898:85;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;55422:6:::1;55416:22;;;55439:16;;;;;;;;;;;55463:6;55457:23;;;55489:4;55457:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;55416:80;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;55512:30;55521:12;:10;:12::i;:::-;55535:6;55512:30;;;;;;;:::i;:::-;;;;;;;;55322:228:::0;;:::o;41614:161::-;41657:7;41677:10;41728:9;41722:15;;41765:2;41758:9;;;41614:161;:::o;30828:218::-;30935:12;:10;:12::i;:::-;30924:23;;:7;:23;;;30916:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;31012:26;31024:4;31030:7;31012:11;:26::i;:::-;30828:218;;:::o;15428:215::-;15516:4;15533:80;15542:12;:10;:12::i;:::-;15556:7;15602:10;15565:11;:25;15577:12;:10;:12::i;:::-;15565:25;;;;;;;;;;;;;;;:34;15591:7;15565:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;15533:8;:80::i;:::-;15631:4;15624:11;;15428:215;;;;:::o;47441:28::-;;;;;;;;;;;;;:::o;13000:127::-;13074:7;13101:9;:18;13111:7;13101:18;;;;;;;;;;;;;;;;13094:25;;13000:127;;;:::o;51106:384::-;27416:4;51165:18;;32920:27;32928:4;32934:12;:10;:12::i;:::-;32920:7;:27::i;:::-;32962:10;32898:85;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;51224:1:::1;51204:22;;:8;:22;;;;51196:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;51274:14;;;;;;;;;;;51262:26;;:8;:26;;;;51254:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;51369:5;51332:18;:34;51351:14;;;;;;;;;;;51332:34;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;51412:8;51395:14;;:25;;;;;;;;;;;;;;;;;;51468:4;51431:18;:34;51450:14;;;;;;;;;;;51431:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;51106:384:::0;;:::o;47563:47::-;;;;:::o;50704:394::-;27416:4;50765:18;;32920:27;32928:4;32934:12;:10;:12::i;:::-;32920:7;:27::i;:::-;32962:10;32898:85;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;50824:1:::1;50804:22;;:8;:22;;;;50796:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;50874:16;;;;;;;;;;;50862:28;;:8;:28;;;;50854:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;50973:5;50934:18;:36;50953:16;;;;;;;;;;;50934:36;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;51018:8;50999:16;;:27;;;;;;;;;;;;;;;;;;51076:4;51037:18;:36;51056:16;;;;;;;;;;;51037:36;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;50704:394:::0;;:::o;28280:139::-;28358:4;28382:6;:12;28389:4;28382:12;;;;;;;;;;;:20;;:29;28403:7;28382:29;;;;;;;;;;;;;;;;;;;;;;;;;28375:36;;28280:139;;;;:::o;55562:285::-;27416:4;55617:18;;32920:27;32928:4;32934:12;:10;:12::i;:::-;32920:7;:27::i;:::-;32962:10;32898:85;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;55649:9:::1;55660:17:::0;55681:12:::1;:10;:12::i;:::-;:17;;55706:21;55681:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55648:84;;;;55751:4;55743:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;55796:43;55826:12;:10;:12::i;:::-;55796:43;;;;;;:::i;:::-;;;;;;;;55637:210;;55562:285:::0;:::o;11928:104::-;11984:13;12017:7;12010:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11928:104;:::o;51894:123::-;51958:7;51985:24;;51978:31;;51894:123;:::o;27371:49::-;27416:4;27371:49;;;:::o;46805:68::-;46846:27;46805:68;:::o;16146:413::-;16239:4;16256:24;16283:11;:25;16295:12;:10;:12::i;:::-;16283:25;;;;;;;;;;;;;;;:34;16309:7;16283:34;;;;;;;;;;;;;;;;16256:61;;16356:15;16336:16;:35;;16328:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;16449:67;16458:12;:10;:12::i;:::-;16472:7;16500:15;16481:16;:34;16449:8;:67::i;:::-;16547:4;16540:11;;;16146:413;;;;:::o;46932:76::-;;;;;;;;;;;;;:::o;52087:1131::-;52173:4;52207:1;52198:6;:10;52190:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;52252:23;52262:12;:10;:12::i;:::-;52252:9;:23::i;:::-;52242:6;:33;;52234:42;;;;;;52305:11;;52295:6;:21;;52287:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;52369:17;;;;;;;;;;;52368:18;:44;;;;;52390:22;;;;;;;;;;;52368:44;:74;;;;;52429:13;;;;;;;;;;;52416:26;;:9;:26;;;52368:74;:120;;;;;52475:13;;;;;;;;;;;52459:29;;:12;:10;:12::i;:::-;:29;;;;52368:120;:176;;;;;52520:24;;52492;52510:4;52492:9;:24::i;:::-;:52;;52368:176;52364:250;;;52561:41;52577:24;52595:4;52577:9;:24::i;:::-;52561:15;:41::i;:::-;52364:250;52631:18;:32;52650:12;:10;:12::i;:::-;52631:32;;;;;;;;;;;;;;;;;;;;;;;;;52630:33;:67;;;;;52668:18;:29;52687:9;52668:29;;;;;;;;;;;;;;;;;;;;;;;;;52667:30;52630:67;52626:510;;;52714:20;52765:5;52746:16;;52737:6;:25;;;;:::i;:::-;:33;;;;:::i;:::-;52714:56;;52785:18;52832:5;52815:14;;52806:6;:23;;;;:::i;:::-;:31;;;;:::i;:::-;52785:52;;52852:20;52903:5;52884:16;;52875:6;:25;;;;:::i;:::-;:33;;;;:::i;:::-;52852:56;;52967:15;52951:13;52933:15;:31;;;;:::i;:::-;:49;;;;:::i;:::-;52923:59;;;;;:::i;:::-;;;52997:58;53007:12;:10;:12::i;:::-;53021:16;;;;;;;;;;;53039:15;52997:9;:58::i;:::-;53070:54;53080:12;:10;:12::i;:::-;53094:14;;;;;;;;;;;53110:13;53070:9;:54::i;:::-;52699:437;;;52626:510;53146:42;53156:12;:10;:12::i;:::-;53170:9;53181:6;53146:9;:42::i;:::-;53206:4;53199:11;;52087:1131;;;;:::o;50358:140::-;27416:4;50425:18;;32920:27;32928:4;32934:12;:10;:12::i;:::-;32920:7;:27::i;:::-;32962:10;32898:85;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;50483:7:::1;50456:24;:34;;;;50358:140:::0;;:::o;49936:120::-;27416:4;49992:18;;32920:27;32928:4;32934:12;:10;:12::i;:::-;32920:7;:27::i;:::-;32962:10;32898:85;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;50040:8:::1;50023:14;:25;;;;49936:120:::0;;:::o;47199:35::-;;;;:::o;50506:190::-;27416:4;50569:18;;32920:27;32928:4;32934:12;:10;:12::i;:::-;32920:7;:27::i;:::-;32962:10;32898:85;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;50625:8:::1;50600:22;;:33;;;;;;;;;;;;;;;;;;50649:39;50679:8;50649:39;;;;;;:::i;:::-;;;;;;;;50506:190:::0;;:::o;49804:124::-;27416:4;49862:18;;32920:27;32928:4;32934:12;:10;:12::i;:::-;32920:7;:27::i;:::-;32962:10;32898:85;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;49912:8:::1;49893:16;:27;;;;49804:124:::0;;:::o;51763:120::-;51823:4;51847:18;:28;51866:8;51847:28;;;;;;;;;;;;;;;;;;;;;;;;;51840:35;;51763:120;;;:::o;47016:74::-;;;;;;;;;;;;;:::o;49189:198::-;46846:27;32920;32928:4;32934:12;:10;:12::i;:::-;32920:7;:27::i;:::-;32962:10;32898:85;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;49298:14:::1;49326:11;;49315:34;;;;;;;:::i;:::-;49298:51;;49360:19;49366:4;49372:6;49360:5;:19::i;:::-;49287:100;49189:198:::0;;;;:::o;50200:150::-;27416:4;50271:18;;32920:27;32928:4;32934:12;:10;:12::i;:::-;32920:7;:27::i;:::-;32962:10;32898:85;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;50333:9:::1;50302:18;:28;50321:8;50302:28;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;50200:150:::0;;;:::o;30172:149::-;30256:18;30269:4;30256:12;:18::i;:::-;27862:30;27873:4;27879:12;:10;:12::i;:::-;27862:10;:30::i;:::-;30287:26:::1;30299:4;30305:7;30287:11;:26::i;:::-;30172:149:::0;;;:::o;47097:32::-;;;;:::o;13578:151::-;13667:7;13694:11;:18;13706:5;13694:18;;;;;;;;;;;;;;;:27;13713:7;13694:27;;;;;;;;;;;;;;;;13687:34;;13578:151;;;;:::o;47149:30::-;;;;:::o;51498:192::-;27416:4;51550:18;;32920:27;32928:4;32934:12;:10;:12::i;:::-;32920:7;:27::i;:::-;32962:10;32898:85;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;51604:7:::1;51589:11;;:22;;51581:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;51675:7;51661:11;:21;;;;51498:192:::0;;:::o;22238:157::-;22323:4;22362:25;22347:40;;;:11;:40;;;;22340:47;;22238:157;;;:::o;9366:115::-;9419:15;9462:10;9447:26;;9366:115;:::o;19830:380::-;19983:1;19966:19;;:5;:19;;;;19958:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20064:1;20045:21;;:7;:21;;;;20037:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20148:6;20118:11;:18;20130:5;20118:18;;;;;;;;;;;;;;;:27;20137:7;20118:27;;;;;;;;;;;;;;;:36;;;;20186:7;20170:32;;20179:5;20170:32;;;20195:6;20170:32;;;;;;:::i;:::-;;;;;;;;19830:380;;;:::o;44925:486::-;45103:4;45146:1;45128:20;;:6;:20;;;;45120:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;45244:159;45272:47;45291:27;45311:6;45291:19;:27::i;:::-;45272:18;:47::i;:::-;45338:4;45361;45384;45244:159;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45221:182;;:6;:182;;;45201:202;;44925:486;;;;;;;:::o;35530:179::-;35588:7;35608:9;35624:1;35620;:5;;;;:::i;:::-;35608:17;;35649:1;35644;:6;;35636:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;35700:1;35693:8;;;35530:179;;;;:::o;17049:733::-;17207:1;17189:20;;:6;:20;;;;17181:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;17291:1;17270:23;;:9;:23;;;;17262:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;17346:47;17367:6;17375:9;17386:6;17346:20;:47::i;:::-;17406:21;17430:9;:17;17440:6;17430:17;;;;;;;;;;;;;;;;17406:41;;17483:6;17466:13;:23;;17458:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;17604:6;17588:13;:22;17568:9;:17;17578:6;17568:17;;;;;;;;;;;;;;;:42;;;;17656:6;17632:9;:20;17642:9;17632:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;17697:9;17680:35;;17689:6;17680:35;;;17708:6;17680:35;;;;;;:::i;:::-;;;;;;;;17728:46;17748:6;17756:9;17767:6;17728:19;:46::i;:::-;17170:612;17049:733;;;:::o;18801:591::-;18904:1;18885:21;;:7;:21;;;;18877:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18957:49;18978:7;18995:1;18999:6;18957:20;:49::i;:::-;19019:22;19044:9;:18;19054:7;19044:18;;;;;;;;;;;;;;;;19019:43;;19099:6;19081:14;:24;;19073:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;19218:6;19201:14;:23;19180:9;:18;19190:7;19180:18;;;;;;;;;;;;;;;:44;;;;19262:6;19246:12;;:22;;;;;;;:::i;:::-;;;;;;;;19312:1;19286:37;;19295:7;19286:37;;;19316:6;19286:37;;;;;;:::i;:::-;;;;;;;;19336:48;19356:7;19373:1;19377:6;19336:19;:48::i;:::-;18866:526;18801:591;;:::o;28709:497::-;28790:22;28798:4;28804:7;28790;:22::i;:::-;28785:414;;28978:41;29006:7;28978:41;;29016:2;28978:19;:41::i;:::-;29092:38;29120:4;29112:13;;29127:2;29092:19;:38::i;:::-;28883:270;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28829:358;;;;;;;;;;;:::i;:::-;;;;;;;;28785:414;28709:497;;:::o;32132:229::-;32207:22;32215:4;32221:7;32207;:22::i;:::-;32202:152;;32278:4;32246:6;:12;32253:4;32246:12;;;;;;;;;;;:20;;:29;32267:7;32246:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;32329:12;:10;:12::i;:::-;32302:40;;32320:7;32302:40;;32314:4;32302:40;;;;;;;;;;32202:152;32132:229;;:::o;32369:230::-;32444:22;32452:4;32458:7;32444;:22::i;:::-;32440:152;;;32515:5;32483:6;:12;32490:4;32483:12;;;;;;;;;;;:20;;:29;32504:7;32483:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;32567:12;:10;:12::i;:::-;32540:40;;32558:7;32540:40;;32552:4;32540:40;;;;;;;;;;32440:152;32369:230;;:::o;53307:724::-;47701:4;47681:17;;:24;;;;;;;;;;;;;;;;;;53468:12:::1;53512:1;53483:26;:30;;;;:::i;:::-;53468:45;;53524:17;53573:4;53544:26;:33;;;;:::i;:::-;53524:53;;53588:18;53609:21;53588:42;;53688:23;53706:4;53688:17;:23::i;:::-;53831:10;53807:21;:34;;;;:::i;:::-;53794:47;;53876:60;53919:4;53890:26;:33;;;;:::i;:::-;53925:10;53876:13;:60::i;:::-;53980:43;53995:4;54001:10;54013:9;53980:43;;;;;;;;:::i;:::-;;;;;;;;53388:643;;;47748:5:::0;47728:17;;:25;;;;;;;;;;;;;;;;;;53307:724;:::o;18069:399::-;18172:1;18153:21;;:7;:21;;;;18145:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;18223:49;18252:1;18256:7;18265:6;18223:20;:49::i;:::-;18301:6;18285:12;;:22;;;;;;;:::i;:::-;;;;;;;;18340:6;18318:9;:18;18328:7;18318:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;18383:7;18362:37;;18379:1;18362:37;;;18392:6;18362:37;;;;;;:::i;:::-;;;;;;;;18412:48;18440:1;18444:7;18453:6;18412:19;:48::i;:::-;18069:399;;:::o;44392:410::-;44502:7;42569:100;;;;;;;;;;;;;;;;;42549:127;;;;;;44656:6;:12;;;44691:6;:11;;;44735:6;:24;;;44725:35;;;;;;44575:204;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44547:247;;;;;;44527:267;;44392:410;;;:::o;42144:258::-;42243:7;42345:20;:18;:20::i;:::-;42367:11;42316:63;;;;;;;;;:::i;:::-;;;;;;;;;;;;;42288:106;;;;;;42268:126;;42144:258;;;:::o;20810:125::-;;;;:::o;21539:124::-;;;;:::o;26684:451::-;26759:13;26785:19;26830:1;26821:6;26817:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;26807:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26785:47;;26843:15;:6;26850:1;26843:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;26869;:6;26876:1;26869:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;26900:9;26925:1;26916:6;26912:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;26900:26;;26895:135;26932:1;26928;:5;26895:135;;;26967:12;26988:3;26980:5;:11;26967:25;;;;;;;:::i;:::-;;;;;26955:6;26962:1;26955:9;;;;;;;;:::i;:::-;;;;;:37;;;;;;;;;;;27017:1;27007:11;;;;;26935:3;;;;:::i;:::-;;;26895:135;;;;27057:1;27048:5;:10;27040:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;27120:6;27106:21;;;26684:451;;;;:::o;54041:653::-;54168:21;54206:1;54192:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54168:40;;54237:4;54219;54224:1;54219:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;54263:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;54253:4;54258:1;54253:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;54296:62;54313:4;54328:15;54346:11;54296:8;:62::i;:::-;54395:15;:66;;;54476:11;54502:1;54546:4;54573;54609:15;54395:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54651:35;54668:11;54681:4;54651:35;;;;;;;:::i;:::-;;;;;;;;54097:597;54041:653;:::o;54706:521::-;54855:62;54872:4;54887:15;54905:11;54855:8;:62::i;:::-;54958:15;:31;;;54997:9;55030:4;55050:11;55076:1;55119;55162:16;;;;;;;;;;;55193:15;54958:261;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;54706:521;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:126::-;2945:7;2985:42;2978:5;2974:54;2963:65;;2908:126;;;:::o;3040:96::-;3077:7;3106:24;3124:5;3106:24;:::i;:::-;3095:35;;3040:96;;;:::o;3142:122::-;3215:24;3233:5;3215:24;:::i;:::-;3208:5;3205:35;3195:63;;3254:1;3251;3244:12;3195:63;3142:122;:::o;3270:139::-;3316:5;3354:6;3341:20;3332:29;;3370:33;3397:5;3370:33;:::i;:::-;3270:139;;;;:::o;3415:77::-;3452:7;3481:5;3470:16;;3415:77;;;:::o;3498:122::-;3571:24;3589:5;3571:24;:::i;:::-;3564:5;3561:35;3551:63;;3610:1;3607;3600:12;3551:63;3498:122;:::o;3626:139::-;3672:5;3710:6;3697:20;3688:29;;3726:33;3753:5;3726:33;:::i;:::-;3626:139;;;;:::o;3771:474::-;3839:6;3847;3896:2;3884:9;3875:7;3871:23;3867:32;3864:119;;;3902:79;;:::i;:::-;3864:119;4022:1;4047:53;4092:7;4083:6;4072:9;4068:22;4047:53;:::i;:::-;4037:63;;3993:117;4149:2;4175:53;4220:7;4211:6;4200:9;4196:22;4175:53;:::i;:::-;4165:63;;4120:118;3771:474;;;;;:::o;4251:117::-;4360:1;4357;4350:12;4374:117;4483:1;4480;4473:12;4497:180;4545:77;4542:1;4535:88;4642:4;4639:1;4632:15;4666:4;4663:1;4656:15;4683:281;4766:27;4788:4;4766:27;:::i;:::-;4758:6;4754:40;4896:6;4884:10;4881:22;4860:18;4848:10;4845:34;4842:62;4839:88;;;4907:18;;:::i;:::-;4839:88;4947:10;4943:2;4936:22;4726:238;4683:281;;:::o;4970:129::-;5004:6;5031:20;;:::i;:::-;5021:30;;5060:33;5088:4;5080:6;5060:33;:::i;:::-;4970:129;;;:::o;5105:307::-;5166:4;5256:18;5248:6;5245:30;5242:56;;;5278:18;;:::i;:::-;5242:56;5316:29;5338:6;5316:29;:::i;:::-;5308:37;;5400:4;5394;5390:15;5382:23;;5105:307;;;:::o;5418:154::-;5502:6;5497:3;5492;5479:30;5564:1;5555:6;5550:3;5546:16;5539:27;5418:154;;;:::o;5578:410::-;5655:5;5680:65;5696:48;5737:6;5696:48;:::i;:::-;5680:65;:::i;:::-;5671:74;;5768:6;5761:5;5754:21;5806:4;5799:5;5795:16;5844:3;5835:6;5830:3;5826:16;5823:25;5820:112;;;5851:79;;:::i;:::-;5820:112;5941:41;5975:6;5970:3;5965;5941:41;:::i;:::-;5661:327;5578:410;;;;;:::o;6007:338::-;6062:5;6111:3;6104:4;6096:6;6092:17;6088:27;6078:122;;6119:79;;:::i;:::-;6078:122;6236:6;6223:20;6261:78;6335:3;6327:6;6320:4;6312:6;6308:17;6261:78;:::i;:::-;6252:87;;6068:277;6007:338;;;;:::o;6351:77::-;6388:7;6417:5;6406:16;;6351:77;;;:::o;6434:122::-;6507:24;6525:5;6507:24;:::i;:::-;6500:5;6497:35;6487:63;;6546:1;6543;6536:12;6487:63;6434:122;:::o;6562:139::-;6608:5;6646:6;6633:20;6624:29;;6662:33;6689:5;6662:33;:::i;:::-;6562:139;;;;:::o;6707:86::-;6742:7;6782:4;6775:5;6771:16;6760:27;;6707:86;;;:::o;6799:118::-;6870:22;6886:5;6870:22;:::i;:::-;6863:5;6860:33;6850:61;;6907:1;6904;6897:12;6850:61;6799:118;:::o;6923:135::-;6967:5;7005:6;6992:20;6983:29;;7021:31;7046:5;7021:31;:::i;:::-;6923:135;;;;:::o;7064:1085::-;7166:6;7174;7182;7190;7198;7247:3;7235:9;7226:7;7222:23;7218:33;7215:120;;;7254:79;;:::i;:::-;7215:120;7374:1;7399:53;7444:7;7435:6;7424:9;7420:22;7399:53;:::i;:::-;7389:63;;7345:117;7529:2;7518:9;7514:18;7501:32;7560:18;7552:6;7549:30;7546:117;;;7582:79;;:::i;:::-;7546:117;7687:62;7741:7;7732:6;7721:9;7717:22;7687:62;:::i;:::-;7677:72;;7472:287;7798:2;7824:53;7869:7;7860:6;7849:9;7845:22;7824:53;:::i;:::-;7814:63;;7769:118;7926:2;7952:53;7997:7;7988:6;7977:9;7973:22;7952:53;:::i;:::-;7942:63;;7897:118;8054:3;8081:51;8124:7;8115:6;8104:9;8100:22;8081:51;:::i;:::-;8071:61;;8025:117;7064:1085;;;;;;;;:::o;8155:98::-;8206:6;8240:5;8234:12;8224:22;;8155:98;;;:::o;8259:168::-;8342:11;8376:6;8371:3;8364:19;8416:4;8411:3;8407:14;8392:29;;8259:168;;;;:::o;8433:360::-;8519:3;8547:38;8579:5;8547:38;:::i;:::-;8601:70;8664:6;8659:3;8601:70;:::i;:::-;8594:77;;8680:52;8725:6;8720:3;8713:4;8706:5;8702:16;8680:52;:::i;:::-;8757:29;8779:6;8757:29;:::i;:::-;8752:3;8748:39;8741:46;;8523:270;8433:360;;;;:::o;8799:309::-;8910:4;8948:2;8937:9;8933:18;8925:26;;8997:9;8991:4;8987:20;8983:1;8972:9;8968:17;8961:47;9025:76;9096:4;9087:6;9025:76;:::i;:::-;9017:84;;8799:309;;;;:::o;9114:60::-;9142:3;9163:5;9156:12;;9114:60;;;:::o;9180:142::-;9230:9;9263:53;9281:34;9290:24;9308:5;9290:24;:::i;:::-;9281:34;:::i;:::-;9263:53;:::i;:::-;9250:66;;9180:142;;;:::o;9328:126::-;9378:9;9411:37;9442:5;9411:37;:::i;:::-;9398:50;;9328:126;;;:::o;9460:153::-;9537:9;9570:37;9601:5;9570:37;:::i;:::-;9557:50;;9460:153;;;:::o;9619:185::-;9733:64;9791:5;9733:64;:::i;:::-;9728:3;9721:77;9619:185;;:::o;9810:276::-;9930:4;9968:2;9957:9;9953:18;9945:26;;9981:98;10076:1;10065:9;10061:17;10052:6;9981:98;:::i;:::-;9810:276;;;;:::o;10092:118::-;10179:24;10197:5;10179:24;:::i;:::-;10174:3;10167:37;10092:118;;:::o;10216:222::-;10309:4;10347:2;10336:9;10332:18;10324:26;;10360:71;10428:1;10417:9;10413:17;10404:6;10360:71;:::i;:::-;10216:222;;;;:::o;10444:329::-;10503:6;10552:2;10540:9;10531:7;10527:23;10523:32;10520:119;;;10558:79;;:::i;:::-;10520:119;10678:1;10703:53;10748:7;10739:6;10728:9;10724:22;10703:53;:::i;:::-;10693:63;;10649:117;10444:329;;;;:::o;10779:118::-;10866:24;10884:5;10866:24;:::i;:::-;10861:3;10854:37;10779:118;;:::o;10903:222::-;10996:4;11034:2;11023:9;11019:18;11011:26;;11047:71;11115:1;11104:9;11100:17;11091:6;11047:71;:::i;:::-;10903:222;;;;:::o;11131:619::-;11208:6;11216;11224;11273:2;11261:9;11252:7;11248:23;11244:32;11241:119;;;11279:79;;:::i;:::-;11241:119;11399:1;11424:53;11469:7;11460:6;11449:9;11445:22;11424:53;:::i;:::-;11414:63;;11370:117;11526:2;11552:53;11597:7;11588:6;11577:9;11573:22;11552:53;:::i;:::-;11542:63;;11497:118;11654:2;11680:53;11725:7;11716:6;11705:9;11701:22;11680:53;:::i;:::-;11670:63;;11625:118;11131:619;;;;;:::o;11756:329::-;11815:6;11864:2;11852:9;11843:7;11839:23;11835:32;11832:119;;;11870:79;;:::i;:::-;11832:119;11990:1;12015:53;12060:7;12051:6;12040:9;12036:22;12015:53;:::i;:::-;12005:63;;11961:117;11756:329;;;;:::o;12091:::-;12150:6;12199:2;12187:9;12178:7;12174:23;12170:32;12167:119;;;12205:79;;:::i;:::-;12167:119;12325:1;12350:53;12395:7;12386:6;12375:9;12371:22;12350:53;:::i;:::-;12340:63;;12296:117;12091:329;;;;:::o;12426:474::-;12494:6;12502;12551:2;12539:9;12530:7;12526:23;12522:32;12519:119;;;12557:79;;:::i;:::-;12519:119;12677:1;12702:53;12747:7;12738:6;12727:9;12723:22;12702:53;:::i;:::-;12692:63;;12648:117;12804:2;12830:53;12875:7;12866:6;12855:9;12851:22;12830:53;:::i;:::-;12820:63;;12775:118;12426:474;;;;;:::o;12906:112::-;12989:22;13005:5;12989:22;:::i;:::-;12984:3;12977:35;12906:112;;:::o;13024:214::-;13113:4;13151:2;13140:9;13136:18;13128:26;;13164:67;13228:1;13217:9;13213:17;13204:6;13164:67;:::i;:::-;13024:214;;;;:::o;13244:118::-;13331:24;13349:5;13331:24;:::i;:::-;13326:3;13319:37;13244:118;;:::o;13368:222::-;13461:4;13499:2;13488:9;13484:18;13476:26;;13512:71;13580:1;13569:9;13565:17;13556:6;13512:71;:::i;:::-;13368:222;;;;:::o;13596:116::-;13666:21;13681:5;13666:21;:::i;:::-;13659:5;13656:32;13646:60;;13702:1;13699;13692:12;13646:60;13596:116;:::o;13718:133::-;13761:5;13799:6;13786:20;13777:29;;13815:30;13839:5;13815:30;:::i;:::-;13718:133;;;;:::o;13857:323::-;13913:6;13962:2;13950:9;13941:7;13937:23;13933:32;13930:119;;;13968:79;;:::i;:::-;13930:119;14088:1;14113:50;14155:7;14146:6;14135:9;14131:22;14113:50;:::i;:::-;14103:60;;14059:114;13857:323;;;;:::o;14186:117::-;14295:1;14292;14285:12;14309:117;14418:1;14415;14408:12;14445:552;14502:8;14512:6;14562:3;14555:4;14547:6;14543:17;14539:27;14529:122;;14570:79;;:::i;:::-;14529:122;14683:6;14670:20;14660:30;;14713:18;14705:6;14702:30;14699:117;;;14735:79;;:::i;:::-;14699:117;14849:4;14841:6;14837:17;14825:29;;14903:3;14895:4;14887:6;14883:17;14873:8;14869:32;14866:41;14863:128;;;14910:79;;:::i;:::-;14863:128;14445:552;;;;;:::o;15003:672::-;15082:6;15090;15098;15147:2;15135:9;15126:7;15122:23;15118:32;15115:119;;;15153:79;;:::i;:::-;15115:119;15273:1;15298:53;15343:7;15334:6;15323:9;15319:22;15298:53;:::i;:::-;15288:63;;15244:117;15428:2;15417:9;15413:18;15400:32;15459:18;15451:6;15448:30;15445:117;;;15481:79;;:::i;:::-;15445:117;15594:64;15650:7;15641:6;15630:9;15626:22;15594:64;:::i;:::-;15576:82;;;;15371:297;15003:672;;;;;:::o;15681:468::-;15746:6;15754;15803:2;15791:9;15782:7;15778:23;15774:32;15771:119;;;15809:79;;:::i;:::-;15771:119;15929:1;15954:53;15999:7;15990:6;15979:9;15975:22;15954:53;:::i;:::-;15944:63;;15900:117;16056:2;16082:50;16124:7;16115:6;16104:9;16100:22;16082:50;:::i;:::-;16072:60;;16027:115;15681:468;;;;;:::o;16155:474::-;16223:6;16231;16280:2;16268:9;16259:7;16255:23;16251:32;16248:119;;;16286:79;;:::i;:::-;16248:119;16406:1;16431:53;16476:7;16467:6;16456:9;16452:22;16431:53;:::i;:::-;16421:63;;16377:117;16533:2;16559:53;16604:7;16595:6;16584:9;16580:22;16559:53;:::i;:::-;16549:63;;16504:118;16155:474;;;;;:::o;16635:180::-;16683:77;16680:1;16673:88;16780:4;16777:1;16770:15;16804:4;16801:1;16794:15;16821:320;16865:6;16902:1;16896:4;16892:12;16882:22;;16949:1;16943:4;16939:12;16970:18;16960:81;;17026:4;17018:6;17014:17;17004:27;;16960:81;17088:2;17080:6;17077:14;17057:18;17054:38;17051:84;;;17107:18;;:::i;:::-;17051:84;16872:269;16821:320;;;:::o;17147:220::-;17287:34;17283:1;17275:6;17271:14;17264:58;17356:3;17351:2;17343:6;17339:15;17332:28;17147:220;:::o;17373:366::-;17515:3;17536:67;17600:2;17595:3;17536:67;:::i;:::-;17529:74;;17612:93;17701:3;17612:93;:::i;:::-;17730:2;17725:3;17721:12;17714:19;;17373:366;;;:::o;17745:419::-;17911:4;17949:2;17938:9;17934:18;17926:26;;17998:9;17992:4;17988:20;17984:1;17973:9;17969:17;17962:47;18026:131;18152:4;18026:131;:::i;:::-;18018:139;;17745:419;;;:::o;18170:104::-;18215:7;18244:24;18262:5;18244:24;:::i;:::-;18233:35;;18170:104;;;:::o;18280:142::-;18383:32;18409:5;18383:32;:::i;:::-;18378:3;18371:45;18280:142;;:::o;18428:561::-;18611:4;18649:2;18638:9;18634:18;18626:26;;18662:71;18730:1;18719:9;18715:17;18706:6;18662:71;:::i;:::-;18743:88;18827:2;18816:9;18812:18;18803:6;18743:88;:::i;:::-;18878:9;18872:4;18868:20;18863:2;18852:9;18848:18;18841:48;18906:76;18977:4;18968:6;18906:76;:::i;:::-;18898:84;;18428:561;;;;;;:::o;18995:147::-;19096:11;19133:3;19118:18;;18995:147;;;;:::o;19148:373::-;19252:3;19280:38;19312:5;19280:38;:::i;:::-;19334:88;19415:6;19410:3;19334:88;:::i;:::-;19327:95;;19431:52;19476:6;19471:3;19464:4;19457:5;19453:16;19431:52;:::i;:::-;19508:6;19503:3;19499:16;19492:23;;19256:265;19148:373;;;;:::o;19527:94::-;19560:8;19608:5;19604:2;19600:14;19579:35;;19527:94;;;:::o;19627:::-;19666:7;19695:20;19709:5;19695:20;:::i;:::-;19684:31;;19627:94;;;:::o;19727:100::-;19766:7;19795:26;19815:5;19795:26;:::i;:::-;19784:37;;19727:100;;;:::o;19833:157::-;19938:45;19958:24;19976:5;19958:24;:::i;:::-;19938:45;:::i;:::-;19933:3;19926:58;19833:157;;:::o;19996:412::-;20154:3;20176:93;20265:3;20256:6;20176:93;:::i;:::-;20169:100;;20279:75;20350:3;20341:6;20279:75;:::i;:::-;20379:2;20374:3;20370:12;20363:19;;20399:3;20392:10;;19996:412;;;;;:::o;20414:271::-;20544:3;20566:93;20655:3;20646:6;20566:93;:::i;:::-;20559:100;;20676:3;20669:10;;20414:271;;;;:::o;20691:178::-;20831:30;20827:1;20819:6;20815:14;20808:54;20691:178;:::o;20875:366::-;21017:3;21038:67;21102:2;21097:3;21038:67;:::i;:::-;21031:74;;21114:93;21203:3;21114:93;:::i;:::-;21232:2;21227:3;21223:12;21216:19;;20875:366;;;:::o;21247:419::-;21413:4;21451:2;21440:9;21436:18;21428:26;;21500:9;21494:4;21490:20;21486:1;21475:9;21471:17;21464:47;21528:131;21654:4;21528:131;:::i;:::-;21520:139;;21247:419;;;:::o;21672:141::-;21721:4;21744:3;21736:11;;21767:3;21764:1;21757:14;21801:4;21798:1;21788:18;21780:26;;21672:141;;;:::o;21843:802::-;21928:3;21965:5;21959:12;21994:36;22020:9;21994:36;:::i;:::-;22046:71;22110:6;22105:3;22046:71;:::i;:::-;22039:78;;22148:1;22137:9;22133:17;22164:1;22159:135;;;;22308:1;22303:336;;;;22126:513;;22159:135;22243:4;22239:9;22228;22224:25;22219:3;22212:38;22279:4;22274:3;22270:14;22263:21;;22159:135;;22303:336;22370:38;22402:5;22370:38;:::i;:::-;22430:1;22444:154;22458:6;22455:1;22452:13;22444:154;;;22532:7;22526:14;22522:1;22517:3;22513:11;22506:35;22582:1;22573:7;22569:15;22558:26;;22480:4;22477:1;22473:12;22468:17;;22444:154;;;22627:1;22622:3;22618:11;22611:18;;22310:329;;22126:513;;21932:713;;21843:802;;;;:::o;22651:307::-;22761:4;22799:2;22788:9;22784:18;22776:26;;22848:9;22842:4;22838:20;22834:1;22823:9;22819:17;22812:47;22876:75;22946:4;22937:6;22876:75;:::i;:::-;22868:83;;22651:307;;;;:::o;22964:227::-;23104:34;23100:1;23092:6;23088:14;23081:58;23173:10;23168:2;23160:6;23156:15;23149:35;22964:227;:::o;23197:366::-;23339:3;23360:67;23424:2;23419:3;23360:67;:::i;:::-;23353:74;;23436:93;23525:3;23436:93;:::i;:::-;23554:2;23549:3;23545:12;23538:19;;23197:366;;;:::o;23569:419::-;23735:4;23773:2;23762:9;23758:18;23750:26;;23822:9;23816:4;23812:20;23808:1;23797:9;23793:17;23786:47;23850:131;23976:4;23850:131;:::i;:::-;23842:139;;23569:419;;;:::o;23994:143::-;24051:5;24082:6;24076:13;24067:22;;24098:33;24125:5;24098:33;:::i;:::-;23994:143;;;;:::o;24143:351::-;24213:6;24262:2;24250:9;24241:7;24237:23;24233:32;24230:119;;;24268:79;;:::i;:::-;24230:119;24388:1;24413:64;24469:7;24460:6;24449:9;24445:22;24413:64;:::i;:::-;24403:74;;24359:128;24143:351;;;;:::o;24500:332::-;24621:4;24659:2;24648:9;24644:18;24636:26;;24672:71;24740:1;24729:9;24725:17;24716:6;24672:71;:::i;:::-;24753:72;24821:2;24810:9;24806:18;24797:6;24753:72;:::i;:::-;24500:332;;;;;:::o;24838:137::-;24892:5;24923:6;24917:13;24908:22;;24939:30;24963:5;24939:30;:::i;:::-;24838:137;;;;:::o;24981:345::-;25048:6;25097:2;25085:9;25076:7;25072:23;25068:32;25065:119;;;25103:79;;:::i;:::-;25065:119;25223:1;25248:61;25301:7;25292:6;25281:9;25277:22;25248:61;:::i;:::-;25238:71;;25194:125;24981:345;;;;:::o;25332:134::-;25390:9;25423:37;25454:5;25423:37;:::i;:::-;25410:50;;25332:134;;;:::o;25472:147::-;25567:45;25606:5;25567:45;:::i;:::-;25562:3;25555:58;25472:147;;:::o;25625:348::-;25754:4;25792:2;25781:9;25777:18;25769:26;;25805:79;25881:1;25870:9;25866:17;25857:6;25805:79;:::i;:::-;25894:72;25962:2;25951:9;25947:18;25938:6;25894:72;:::i;:::-;25625:348;;;;;:::o;25979:234::-;26119:34;26115:1;26107:6;26103:14;26096:58;26188:17;26183:2;26175:6;26171:15;26164:42;25979:234;:::o;26219:366::-;26361:3;26382:67;26446:2;26441:3;26382:67;:::i;:::-;26375:74;;26458:93;26547:3;26458:93;:::i;:::-;26576:2;26571:3;26567:12;26560:19;;26219:366;;;:::o;26591:419::-;26757:4;26795:2;26784:9;26780:18;26772:26;;26844:9;26838:4;26834:20;26830:1;26819:9;26815:17;26808:47;26872:131;26998:4;26872:131;:::i;:::-;26864:139;;26591:419;;;:::o;27016:180::-;27064:77;27061:1;27054:88;27161:4;27158:1;27151:15;27185:4;27182:1;27175:15;27202:305;27242:3;27261:20;27279:1;27261:20;:::i;:::-;27256:25;;27295:20;27313:1;27295:20;:::i;:::-;27290:25;;27449:1;27381:66;27377:74;27374:1;27371:81;27368:107;;;27455:18;;:::i;:::-;27368:107;27499:1;27496;27492:9;27485:16;;27202:305;;;;:::o;27513:162::-;27653:14;27649:1;27641:6;27637:14;27630:38;27513:162;:::o;27681:366::-;27823:3;27844:67;27908:2;27903:3;27844:67;:::i;:::-;27837:74;;27920:93;28009:3;27920:93;:::i;:::-;28038:2;28033:3;28029:12;28022:19;;27681:366;;;:::o;28053:419::-;28219:4;28257:2;28246:9;28242:18;28234:26;;28306:9;28300:4;28296:20;28292:1;28281:9;28277:17;28270:47;28334:131;28460:4;28334:131;:::i;:::-;28326:139;;28053:419;;;:::o;28478:178::-;28618:30;28614:1;28606:6;28602:14;28595:54;28478:178;:::o;28662:366::-;28804:3;28825:67;28889:2;28884:3;28825:67;:::i;:::-;28818:74;;28901:93;28990:3;28901:93;:::i;:::-;29019:2;29014:3;29010:12;29003:19;;28662:366;;;:::o;29034:419::-;29200:4;29238:2;29227:9;29223:18;29215:26;;29287:9;29281:4;29277:20;29273:1;29262:9;29258:17;29251:47;29315:131;29441:4;29315:131;:::i;:::-;29307:139;;29034:419;;;:::o;29459:114::-;;:::o;29579:398::-;29738:3;29759:83;29840:1;29835:3;29759:83;:::i;:::-;29752:90;;29851:93;29940:3;29851:93;:::i;:::-;29969:1;29964:3;29960:11;29953:18;;29579:398;;;:::o;29983:379::-;30167:3;30189:147;30332:3;30189:147;:::i;:::-;30182:154;;30353:3;30346:10;;29983:379;;;:::o;30368:170::-;30508:22;30504:1;30496:6;30492:14;30485:46;30368:170;:::o;30544:366::-;30686:3;30707:67;30771:2;30766:3;30707:67;:::i;:::-;30700:74;;30783:93;30872:3;30783:93;:::i;:::-;30901:2;30896:3;30892:12;30885:19;;30544:366;;;:::o;30916:419::-;31082:4;31120:2;31109:9;31105:18;31097:26;;31169:9;31163:4;31159:20;31155:1;31144:9;31140:17;31133:47;31197:131;31323:4;31197:131;:::i;:::-;31189:139;;30916:419;;;:::o;31341:238::-;31442:4;31480:2;31469:9;31465:18;31457:26;;31493:79;31569:1;31558:9;31554:17;31545:6;31493:79;:::i;:::-;31341:238;;;;:::o;31585:224::-;31725:34;31721:1;31713:6;31709:14;31702:58;31794:7;31789:2;31781:6;31777:15;31770:32;31585:224;:::o;31815:366::-;31957:3;31978:67;32042:2;32037:3;31978:67;:::i;:::-;31971:74;;32054:93;32143:3;32054:93;:::i;:::-;32172:2;32167:3;32163:12;32156:19;;31815:366;;;:::o;32187:419::-;32353:4;32391:2;32380:9;32376:18;32368:26;;32440:9;32434:4;32430:20;32426:1;32415:9;32411:17;32404:47;32468:131;32594:4;32468:131;:::i;:::-;32460:139;;32187:419;;;:::o;32612:160::-;32752:12;32748:1;32740:6;32736:14;32729:36;32612:160;:::o;32778:366::-;32920:3;32941:67;33005:2;33000:3;32941:67;:::i;:::-;32934:74;;33017:93;33106:3;33017:93;:::i;:::-;33135:2;33130:3;33126:12;33119:19;;32778:366;;;:::o;33150:419::-;33316:4;33354:2;33343:9;33339:18;33331:26;;33403:9;33397:4;33393:20;33389:1;33378:9;33374:17;33367:47;33431:131;33557:4;33431:131;:::i;:::-;33423:139;;33150:419;;;:::o;33575:180::-;33715:32;33711:1;33703:6;33699:14;33692:56;33575:180;:::o;33761:366::-;33903:3;33924:67;33988:2;33983:3;33924:67;:::i;:::-;33917:74;;34000:93;34089:3;34000:93;:::i;:::-;34118:2;34113:3;34109:12;34102:19;;33761:366;;;:::o;34133:419::-;34299:4;34337:2;34326:9;34322:18;34314:26;;34386:9;34380:4;34376:20;34372:1;34361:9;34357:17;34350:47;34414:131;34540:4;34414:131;:::i;:::-;34406:139;;34133:419;;;:::o;34558:348::-;34598:7;34621:20;34639:1;34621:20;:::i;:::-;34616:25;;34655:20;34673:1;34655:20;:::i;:::-;34650:25;;34843:1;34775:66;34771:74;34768:1;34765:81;34760:1;34753:9;34746:17;34742:105;34739:131;;;34850:18;;:::i;:::-;34739:131;34898:1;34895;34891:9;34880:20;;34558:348;;;;:::o;34912:180::-;34960:77;34957:1;34950:88;35057:4;35054:1;35047:15;35081:4;35078:1;35071:15;35098:185;35138:1;35155:20;35173:1;35155:20;:::i;:::-;35150:25;;35189:20;35207:1;35189:20;:::i;:::-;35184:25;;35228:1;35218:35;;35233:18;;:::i;:::-;35218:35;35275:1;35272;35268:9;35263:14;;35098:185;;;;:::o;35289:191::-;35329:4;35349:20;35367:1;35349:20;:::i;:::-;35344:25;;35383:20;35401:1;35383:20;:::i;:::-;35378:25;;35422:1;35419;35416:8;35413:34;;;35427:18;;:::i;:::-;35413:34;35472:1;35469;35465:9;35457:17;;35289:191;;;;:::o;35486:221::-;35626:34;35622:1;35614:6;35610:14;35603:58;35695:4;35690:2;35682:6;35678:15;35671:29;35486:221;:::o;35713:366::-;35855:3;35876:67;35940:2;35935:3;35876:67;:::i;:::-;35869:74;;35952:93;36041:3;35952:93;:::i;:::-;36070:2;36065:3;36061:12;36054:19;;35713:366;;;:::o;36085:419::-;36251:4;36289:2;36278:9;36274:18;36266:26;;36338:9;36332:4;36328:20;36324:1;36313:9;36309:17;36302:47;36366:131;36492:4;36366:131;:::i;:::-;36358:139;;36085:419;;;:::o;36510:223::-;36650:34;36646:1;36638:6;36634:14;36627:58;36719:6;36714:2;36706:6;36702:15;36695:31;36510:223;:::o;36739:366::-;36881:3;36902:67;36966:2;36961:3;36902:67;:::i;:::-;36895:74;;36978:93;37067:3;36978:93;:::i;:::-;37096:2;37091:3;37087:12;37080:19;;36739:366;;;:::o;37111:419::-;37277:4;37315:2;37304:9;37300:18;37292:26;;37364:9;37358:4;37354:20;37350:1;37339:9;37335:17;37328:47;37392:131;37518:4;37392:131;:::i;:::-;37384:139;;37111:419;;;:::o;37536:221::-;37676:34;37672:1;37664:6;37660:14;37653:58;37745:4;37740:2;37732:6;37728:15;37721:29;37536:221;:::o;37763:366::-;37905:3;37926:67;37990:2;37985:3;37926:67;:::i;:::-;37919:74;;38002:93;38091:3;38002:93;:::i;:::-;38120:2;38115:3;38111:12;38104:19;;37763:366;;;:::o;38135:419::-;38301:4;38339:2;38328:9;38324:18;38316:26;;38388:9;38382:4;38378:20;38374:1;38363:9;38359:17;38352:47;38416:131;38542:4;38416:131;:::i;:::-;38408:139;;38135:419;;;:::o;38560:224::-;38700:34;38696:1;38688:6;38684:14;38677:58;38769:7;38764:2;38756:6;38752:15;38745:32;38560:224;:::o;38790:366::-;38932:3;38953:67;39017:2;39012:3;38953:67;:::i;:::-;38946:74;;39029:93;39118:3;39029:93;:::i;:::-;39147:2;39142:3;39138:12;39131:19;;38790:366;;;:::o;39162:419::-;39328:4;39366:2;39355:9;39351:18;39343:26;;39415:9;39409:4;39405:20;39401:1;39390:9;39386:17;39379:47;39443:131;39569:4;39443:131;:::i;:::-;39435:139;;39162:419;;;:::o;39587:545::-;39760:4;39798:3;39787:9;39783:19;39775:27;;39812:71;39880:1;39869:9;39865:17;39856:6;39812:71;:::i;:::-;39893:68;39957:2;39946:9;39942:18;39933:6;39893:68;:::i;:::-;39971:72;40039:2;40028:9;40024:18;40015:6;39971:72;:::i;:::-;40053;40121:2;40110:9;40106:18;40097:6;40053:72;:::i;:::-;39587:545;;;;;;;:::o;40138:177::-;40278:29;40274:1;40266:6;40262:14;40255:53;40138:177;:::o;40321:366::-;40463:3;40484:67;40548:2;40543:3;40484:67;:::i;:::-;40477:74;;40560:93;40649:3;40560:93;:::i;:::-;40678:2;40673:3;40669:12;40662:19;;40321:366;;;:::o;40693:419::-;40859:4;40897:2;40886:9;40882:18;40874:26;;40946:9;40940:4;40936:20;40932:1;40921:9;40917:17;40910:47;40974:131;41100:4;40974:131;:::i;:::-;40966:139;;40693:419;;;:::o;41118:224::-;41258:34;41254:1;41246:6;41242:14;41235:58;41327:7;41322:2;41314:6;41310:15;41303:32;41118:224;:::o;41348:366::-;41490:3;41511:67;41575:2;41570:3;41511:67;:::i;:::-;41504:74;;41587:93;41676:3;41587:93;:::i;:::-;41705:2;41700:3;41696:12;41689:19;;41348:366;;;:::o;41720:419::-;41886:4;41924:2;41913:9;41909:18;41901:26;;41973:9;41967:4;41963:20;41959:1;41948:9;41944:17;41937:47;42001:131;42127:4;42001:131;:::i;:::-;41993:139;;41720:419;;;:::o;42145:222::-;42285:34;42281:1;42273:6;42269:14;42262:58;42354:5;42349:2;42341:6;42337:15;42330:30;42145:222;:::o;42373:366::-;42515:3;42536:67;42600:2;42595:3;42536:67;:::i;:::-;42529:74;;42612:93;42701:3;42612:93;:::i;:::-;42730:2;42725:3;42721:12;42714:19;;42373:366;;;:::o;42745:419::-;42911:4;42949:2;42938:9;42934:18;42926:26;;42998:9;42992:4;42988:20;42984:1;42973:9;42969:17;42962:47;43026:131;43152:4;43026:131;:::i;:::-;43018:139;;42745:419;;;:::o;43170:225::-;43310:34;43306:1;43298:6;43294:14;43287:58;43379:8;43374:2;43366:6;43362:15;43355:33;43170:225;:::o;43401:366::-;43543:3;43564:67;43628:2;43623:3;43564:67;:::i;:::-;43557:74;;43640:93;43729:3;43640:93;:::i;:::-;43758:2;43753:3;43749:12;43742:19;;43401:366;;;:::o;43773:419::-;43939:4;43977:2;43966:9;43962:18;43954:26;;44026:9;44020:4;44016:20;44012:1;44001:9;43997:17;43990:47;44054:131;44180:4;44054:131;:::i;:::-;44046:139;;43773:419;;;:::o;44198:220::-;44338:34;44334:1;44326:6;44322:14;44315:58;44407:3;44402:2;44394:6;44390:15;44383:28;44198:220;:::o;44424:366::-;44566:3;44587:67;44651:2;44646:3;44587:67;:::i;:::-;44580:74;;44663:93;44752:3;44663:93;:::i;:::-;44781:2;44776:3;44772:12;44765:19;;44424:366;;;:::o;44796:419::-;44962:4;45000:2;44989:9;44985:18;44977:26;;45049:9;45043:4;45039:20;45035:1;45024:9;45020:17;45013:47;45077:131;45203:4;45077:131;:::i;:::-;45069:139;;44796:419;;;:::o;45221:221::-;45361:34;45357:1;45349:6;45345:14;45338:58;45430:4;45425:2;45417:6;45413:15;45406:29;45221:221;:::o;45448:366::-;45590:3;45611:67;45675:2;45670:3;45611:67;:::i;:::-;45604:74;;45687:93;45776:3;45687:93;:::i;:::-;45805:2;45800:3;45796:12;45789:19;;45448:366;;;:::o;45820:419::-;45986:4;46024:2;46013:9;46009:18;46001:26;;46073:9;46067:4;46063:20;46059:1;46048:9;46044:17;46037:47;46101:131;46227:4;46101:131;:::i;:::-;46093:139;;45820:419;;;:::o;46245:148::-;46347:11;46384:3;46369:18;;46245:148;;;;:::o;46399:173::-;46539:25;46535:1;46527:6;46523:14;46516:49;46399:173;:::o;46578:402::-;46738:3;46759:85;46841:2;46836:3;46759:85;:::i;:::-;46752:92;;46853:93;46942:3;46853:93;:::i;:::-;46971:2;46966:3;46962:12;46955:19;;46578:402;;;:::o;46986:377::-;47092:3;47120:39;47153:5;47120:39;:::i;:::-;47175:89;47257:6;47252:3;47175:89;:::i;:::-;47168:96;;47273:52;47318:6;47313:3;47306:4;47299:5;47295:16;47273:52;:::i;:::-;47350:6;47345:3;47341:16;47334:23;;47096:267;46986:377;;;;:::o;47369:167::-;47509:19;47505:1;47497:6;47493:14;47486:43;47369:167;:::o;47542:402::-;47702:3;47723:85;47805:2;47800:3;47723:85;:::i;:::-;47716:92;;47817:93;47906:3;47817:93;:::i;:::-;47935:2;47930:3;47926:12;47919:19;;47542:402;;;:::o;47950:967::-;48332:3;48354:148;48498:3;48354:148;:::i;:::-;48347:155;;48519:95;48610:3;48601:6;48519:95;:::i;:::-;48512:102;;48631:148;48775:3;48631:148;:::i;:::-;48624:155;;48796:95;48887:3;48878:6;48796:95;:::i;:::-;48789:102;;48908:3;48901:10;;47950:967;;;;;:::o;48923:442::-;49072:4;49110:2;49099:9;49095:18;49087:26;;49123:71;49191:1;49180:9;49176:17;49167:6;49123:71;:::i;:::-;49204:72;49272:2;49261:9;49257:18;49248:6;49204:72;:::i;:::-;49286;49354:2;49343:9;49339:18;49330:6;49286:72;:::i;:::-;48923:442;;;;;;:::o;49371:181::-;49511:33;49507:1;49499:6;49495:14;49488:57;49371:181;:::o;49558:366::-;49700:3;49721:67;49785:2;49780:3;49721:67;:::i;:::-;49714:74;;49797:93;49886:3;49797:93;:::i;:::-;49915:2;49910:3;49906:12;49899:19;;49558:366;;;:::o;49930:419::-;50096:4;50134:2;50123:9;50119:18;50111:26;;50183:9;50177:4;50173:20;50169:1;50158:9;50154:17;50147:47;50211:131;50337:4;50211:131;:::i;:::-;50203:139;;49930:419;;;:::o;50355:553::-;50532:4;50570:3;50559:9;50555:19;50547:27;;50584:71;50652:1;50641:9;50637:17;50628:6;50584:71;:::i;:::-;50665:72;50733:2;50722:9;50718:18;50709:6;50665:72;:::i;:::-;50747;50815:2;50804:9;50800:18;50791:6;50747:72;:::i;:::-;50829;50897:2;50886:9;50882:18;50873:6;50829:72;:::i;:::-;50355:553;;;;;;;:::o;50914:214::-;51054:66;51050:1;51042:6;51038:14;51031:90;50914:214;:::o;51134:400::-;51294:3;51315:84;51397:1;51392:3;51315:84;:::i;:::-;51308:91;;51408:93;51497:3;51408:93;:::i;:::-;51526:1;51521:3;51517:11;51510:18;;51134:400;;;:::o;51540:79::-;51579:7;51608:5;51597:16;;51540:79;;;:::o;51625:157::-;51730:45;51750:24;51768:5;51750:24;:::i;:::-;51730:45;:::i;:::-;51725:3;51718:58;51625:157;;:::o;51788:663::-;52029:3;52051:148;52195:3;52051:148;:::i;:::-;52044:155;;52209:75;52280:3;52271:6;52209:75;:::i;:::-;52309:2;52304:3;52300:12;52293:19;;52322:75;52393:3;52384:6;52322:75;:::i;:::-;52422:2;52417:3;52413:12;52406:19;;52442:3;52435:10;;51788:663;;;;;:::o;52457:180::-;52505:77;52502:1;52495:88;52602:4;52599:1;52592:15;52626:4;52623:1;52616:15;52643:171;52682:3;52705:24;52723:5;52705:24;:::i;:::-;52696:33;;52751:4;52744:5;52741:15;52738:41;;;52759:18;;:::i;:::-;52738:41;52806:1;52799:5;52795:13;52788:20;;52643:171;;;:::o;52820:182::-;52960:34;52956:1;52948:6;52944:14;52937:58;52820:182;:::o;53008:366::-;53150:3;53171:67;53235:2;53230:3;53171:67;:::i;:::-;53164:74;;53247:93;53336:3;53247:93;:::i;:::-;53365:2;53360:3;53356:12;53349:19;;53008:366;;;:::o;53380:419::-;53546:4;53584:2;53573:9;53569:18;53561:26;;53633:9;53627:4;53623:20;53619:1;53608:9;53604:17;53597:47;53661:131;53787:4;53661:131;:::i;:::-;53653:139;;53380:419;;;:::o;53805:143::-;53862:5;53893:6;53887:13;53878:22;;53909:33;53936:5;53909:33;:::i;:::-;53805:143;;;;:::o;53954:351::-;54024:6;54073:2;54061:9;54052:7;54048:23;54044:32;54041:119;;;54079:79;;:::i;:::-;54041:119;54199:1;54224:64;54280:7;54271:6;54260:9;54256:22;54224:64;:::i;:::-;54214:74;;54170:128;53954:351;;;;:::o;54311:85::-;54356:7;54385:5;54374:16;;54311:85;;;:::o;54402:158::-;54460:9;54493:61;54511:42;54520:32;54546:5;54520:32;:::i;:::-;54511:42;:::i;:::-;54493:61;:::i;:::-;54480:74;;54402:158;;;:::o;54566:147::-;54661:45;54700:5;54661:45;:::i;:::-;54656:3;54649:58;54566:147;;:::o;54719:114::-;54786:6;54820:5;54814:12;54804:22;;54719:114;;;:::o;54839:184::-;54938:11;54972:6;54967:3;54960:19;55012:4;55007:3;55003:14;54988:29;;54839:184;;;;:::o;55029:132::-;55096:4;55119:3;55111:11;;55149:4;55144:3;55140:14;55132:22;;55029:132;;;:::o;55167:108::-;55244:24;55262:5;55244:24;:::i;:::-;55239:3;55232:37;55167:108;;:::o;55281:179::-;55350:10;55371:46;55413:3;55405:6;55371:46;:::i;:::-;55449:4;55444:3;55440:14;55426:28;;55281:179;;;;:::o;55466:113::-;55536:4;55568;55563:3;55559:14;55551:22;;55466:113;;;:::o;55615:732::-;55734:3;55763:54;55811:5;55763:54;:::i;:::-;55833:86;55912:6;55907:3;55833:86;:::i;:::-;55826:93;;55943:56;55993:5;55943:56;:::i;:::-;56022:7;56053:1;56038:284;56063:6;56060:1;56057:13;56038:284;;;56139:6;56133:13;56166:63;56225:3;56210:13;56166:63;:::i;:::-;56159:70;;56252:60;56305:6;56252:60;:::i;:::-;56242:70;;56098:224;56085:1;56082;56078:9;56073:14;;56038:284;;;56042:14;56338:3;56331:10;;55739:608;;;55615:732;;;;:::o;56353:831::-;56616:4;56654:3;56643:9;56639:19;56631:27;;56668:71;56736:1;56725:9;56721:17;56712:6;56668:71;:::i;:::-;56749:80;56825:2;56814:9;56810:18;56801:6;56749:80;:::i;:::-;56876:9;56870:4;56866:20;56861:2;56850:9;56846:18;56839:48;56904:108;57007:4;56998:6;56904:108;:::i;:::-;56896:116;;57022:72;57090:2;57079:9;57075:18;57066:6;57022:72;:::i;:::-;57104:73;57172:3;57161:9;57157:19;57148:6;57104:73;:::i;:::-;56353:831;;;;;;;;:::o;57190:483::-;57361:4;57399:2;57388:9;57384:18;57376:26;;57412:71;57480:1;57469:9;57465:17;57456:6;57412:71;:::i;:::-;57530:9;57524:4;57520:20;57515:2;57504:9;57500:18;57493:48;57558:108;57661:4;57652:6;57558:108;:::i;:::-;57550:116;;57190:483;;;;;:::o;57679:807::-;57928:4;57966:3;57955:9;57951:19;57943:27;;57980:71;58048:1;58037:9;58033:17;58024:6;57980:71;:::i;:::-;58061:72;58129:2;58118:9;58114:18;58105:6;58061:72;:::i;:::-;58143:80;58219:2;58208:9;58204:18;58195:6;58143:80;:::i;:::-;58233;58309:2;58298:9;58294:18;58285:6;58233:80;:::i;:::-;58323:73;58391:3;58380:9;58376:19;58367:6;58323:73;:::i;:::-;58406;58474:3;58463:9;58459:19;58450:6;58406:73;:::i;:::-;57679:807;;;;;;;;;:::o;58492:663::-;58580:6;58588;58596;58645:2;58633:9;58624:7;58620:23;58616:32;58613:119;;;58651:79;;:::i;:::-;58613:119;58771:1;58796:64;58852:7;58843:6;58832:9;58828:22;58796:64;:::i;:::-;58786:74;;58742:128;58909:2;58935:64;58991:7;58982:6;58971:9;58967:22;58935:64;:::i;:::-;58925:74;;58880:129;59048:2;59074:64;59130:7;59121:6;59110:9;59106:22;59074:64;:::i;:::-;59064:74;;59019:129;58492:663;;;;;:::o
Swarm Source
ipfs://bbc79b5b52649126b6436085122e6900e3e77e02d3b755b8efd3c87c4c228974
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.