{"sources":{"contracts/SafeToken.sol":{"content":"// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.8.0 <0.9.0;\n\nimport \"./vendor/@openzeppelin/contracts/access/Ownable.sol\";\nimport \"./vendor/@openzeppelin/contracts/security/Pausable.sol\";\nimport \"./vendor/@openzeppelin/contracts/token/ERC20/ERC20.sol\";\nimport \"./TokenRescuer.sol\";\n\n/// @title Safe Token contract\n/// @author Richard Meissner - @rmeissner\ncontract SafeToken is ERC20, Pausable, Ownable, TokenRescuer {\n    /// @dev Will mint 1 billion tokens to the owner and pause the contract\n    constructor(address owner) ERC20(\"Safe Token\", \"SAFE\") {\n        // Transfer ownership immediately\n        _transferOwnership(owner);\n        // \"ether\" is used here to get 18 decimals\n        _mint(owner, 1_000_000_000 ether);\n        // Contract is paused by default\n        // This has to be done after _mint, else minting will fail\n        _pause();\n    }\n\n    /// @notice Unpauses all token transfers.\n    /// @dev See {Pausable-_unpause}\n    /// Requirements: caller must be the owner\n    function unpause() public virtual onlyOwner {\n        require(paused(), \"SafeToken: token is not paused\");\n        _unpause();\n    }\n\n    /// @dev See {ERC20-_beforeTokenTransfer}\n    /// Requirements: the contract must not be paused OR transfer must be initiated by owner\n    /// @param from The account that is sending the tokens\n    /// @param to The account that should receive the tokens\n    /// @param amount Amount of tokens that should be transferred\n    function _beforeTokenTransfer(\n        address from,\n        address to,\n        uint256 amount\n    ) internal virtual override {\n        super._beforeTokenTransfer(from, to, amount);\n\n        require(to != address(this), \"SafeToken: cannot transfer tokens to token contract\");\n        // Token transfers are only possible if the contract is not paused\n        // OR if triggered by the owner of the contract\n        require(!paused() || owner() == _msgSender(), \"SafeToken: token transfer while paused\");\n    }\n}\n"},"contracts/TokenRescuer.sol":{"content":"// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.8.0 <0.9.0;\n\nimport \"./vendor/@openzeppelin/contracts/access/Ownable.sol\";\nimport \"./vendor/@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\n/// @title Token Rescuer contract\n/// @author Richard Meissner - @rmeissner\ncontract TokenRescuer is Ownable {\n    /// @param token Token that should be rescued\n    /// @param beneficiary The account that should receive the tokens\n    /// @param amount Amount of tokens that should be rescued\n    function _beforeTokenRescue(\n        IERC20 token,\n        address beneficiary,\n        uint256 amount\n    ) internal virtual {}\n\n    /// @notice Transfer all tokens with address `token` owned by this contract to `beneficiary`.\n    /// @dev This can only be called by the owner of the contract\n    /// @param token The token that should be rescued\n    /// @param beneficiary The account that should receive the tokens.\n    function rescueToken(IERC20 token, address beneficiary) external onlyOwner {\n        uint256 balanceToRescue = token.balanceOf(address(this));\n        require(balanceToRescue > 0, \"TokenRescuer: No tokens to rescue\");\n        _beforeTokenRescue(token, beneficiary, balanceToRescue);\n        require(token.transfer(beneficiary, balanceToRescue), \"TokenRescuer: Could not rescue token\");\n    }\n}\n"},"contracts/vendor/@openzeppelin/contracts/utils/Context.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n    function _msgSender() internal view virtual returns (address) {\n        return msg.sender;\n    }\n\n    function _msgData() internal view virtual returns (bytes calldata) {\n        return msg.data;\n    }\n}\n"},"contracts/vendor/@openzeppelin/contracts/access/Ownable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n    address private _owner;\n\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n    /**\n     * @dev Initializes the contract setting the deployer as the initial owner.\n     */\n    constructor() {\n        _transferOwnership(_msgSender());\n    }\n\n    /**\n     * @dev Returns the address of the current owner.\n     */\n    function owner() public view virtual returns (address) {\n        return _owner;\n    }\n\n    /**\n     * @dev Throws if called by any account other than the owner.\n     */\n    modifier onlyOwner() {\n        require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n        _;\n    }\n\n    /**\n     * @dev Leaves the contract without owner. It will not be possible to call\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\n     *\n     * NOTE: Renouncing ownership will leave the contract without an owner,\n     * thereby removing any functionality that is only available to the owner.\n     */\n    function renounceOwnership() public virtual onlyOwner {\n        _transferOwnership(address(0));\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\n     * Can only be called by the current owner.\n     */\n    function transferOwnership(address newOwner) public virtual onlyOwner {\n        require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n        _transferOwnership(newOwner);\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\n     * Internal function without access restriction.\n     */\n    function _transferOwnership(address newOwner) internal virtual {\n        address oldOwner = _owner;\n        _owner = newOwner;\n        emit OwnershipTransferred(oldOwner, newOwner);\n    }\n}\n"},"contracts/vendor/@openzeppelin/contracts/security/Pausable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (security/Pausable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which allows children to implement an emergency stop\n * mechanism that can be triggered by an authorized account.\n *\n * This module is used through inheritance. It will make available the\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\n * the functions of your contract. Note that they will not be pausable by\n * simply including this module, only once the modifiers are put in place.\n */\nabstract contract Pausable is Context {\n    /**\n     * @dev Emitted when the pause is triggered by `account`.\n     */\n    event Paused(address account);\n\n    /**\n     * @dev Emitted when the pause is lifted by `account`.\n     */\n    event Unpaused(address account);\n\n    bool private _paused;\n\n    /**\n     * @dev Initializes the contract in unpaused state.\n     */\n    constructor() {\n        _paused = false;\n    }\n\n    /**\n     * @dev Returns true if the contract is paused, and false otherwise.\n     */\n    function paused() public view virtual returns (bool) {\n        return _paused;\n    }\n\n    /**\n     * @dev Modifier to make a function callable only when the contract is not paused.\n     *\n     * Requirements:\n     *\n     * - The contract must not be paused.\n     */\n    modifier whenNotPaused() {\n        require(!paused(), \"Pausable: paused\");\n        _;\n    }\n\n    /**\n     * @dev Modifier to make a function callable only when the contract is paused.\n     *\n     * Requirements:\n     *\n     * - The contract must be paused.\n     */\n    modifier whenPaused() {\n        require(paused(), \"Pausable: not paused\");\n        _;\n    }\n\n    /**\n     * @dev Triggers stopped state.\n     *\n     * Requirements:\n     *\n     * - The contract must not be paused.\n     */\n    function _pause() internal virtual whenNotPaused {\n        _paused = true;\n        emit Paused(_msgSender());\n    }\n\n    /**\n     * @dev Returns to normal state.\n     *\n     * Requirements:\n     *\n     * - The contract must be paused.\n     */\n    function _unpause() internal virtual whenPaused {\n        _paused = false;\n        emit Unpaused(_msgSender());\n    }\n}\n"},"contracts/vendor/@openzeppelin/contracts/token/ERC20/ERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/ERC20.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC20.sol\";\nimport \"./extensions/IERC20Metadata.sol\";\nimport \"../../utils/Context.sol\";\n\n/**\n * @dev Implementation of the {IERC20} interface.\n *\n * This implementation is agnostic to the way tokens are created. This means\n * that a supply mechanism has to be added in a derived contract using {_mint}.\n * For a generic mechanism see {ERC20PresetMinterPauser}.\n *\n * TIP: For a detailed writeup see our guide\n * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\n * to implement supply mechanisms].\n *\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\n * instead returning `false` on failure. This behavior is nonetheless\n * conventional and does not conflict with the expectations of ERC20\n * applications.\n *\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\n * This allows applications to reconstruct the allowance for all accounts just\n * by listening to said events. Other implementations of the EIP may not emit\n * these events, as it isn't required by the specification.\n *\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\n * functions have been added to mitigate the well-known issues around setting\n * allowances. See {IERC20-approve}.\n */\ncontract ERC20 is Context, IERC20, IERC20Metadata {\n    mapping(address => uint256) private _balances;\n\n    mapping(address => mapping(address => uint256)) private _allowances;\n\n    uint256 private _totalSupply;\n\n    string private _name;\n    string private _symbol;\n\n    /**\n     * @dev Sets the values for {name} and {symbol}.\n     *\n     * The default value of {decimals} is 18. To select a different value for\n     * {decimals} you should overload it.\n     *\n     * All two of these values are immutable: they can only be set once during\n     * construction.\n     */\n    constructor(string memory name_, string memory symbol_) {\n        _name = name_;\n        _symbol = symbol_;\n    }\n\n    /**\n     * @dev Returns the name of the token.\n     */\n    function name() public view virtual override returns (string memory) {\n        return _name;\n    }\n\n    /**\n     * @dev Returns the symbol of the token, usually a shorter version of the\n     * name.\n     */\n    function symbol() public view virtual override returns (string memory) {\n        return _symbol;\n    }\n\n    /**\n     * @dev Returns the number of decimals used to get its user representation.\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\n     *\n     * Tokens usually opt for a value of 18, imitating the relationship between\n     * Ether and Wei. This is the value {ERC20} uses, unless this function is\n     * overridden;\n     *\n     * NOTE: This information is only used for _display_ purposes: it in\n     * no way affects any of the arithmetic of the contract, including\n     * {IERC20-balanceOf} and {IERC20-transfer}.\n     */\n    function decimals() public view virtual override returns (uint8) {\n        return 18;\n    }\n\n    /**\n     * @dev See {IERC20-totalSupply}.\n     */\n    function totalSupply() public view virtual override returns (uint256) {\n        return _totalSupply;\n    }\n\n    /**\n     * @dev See {IERC20-balanceOf}.\n     */\n    function balanceOf(address account) public view virtual override returns (uint256) {\n        return _balances[account];\n    }\n\n    /**\n     * @dev See {IERC20-transfer}.\n     *\n     * Requirements:\n     *\n     * - `to` cannot be the zero address.\n     * - the caller must have a balance of at least `amount`.\n     */\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\n        address owner = _msgSender();\n        _transfer(owner, to, amount);\n        return true;\n    }\n\n    /**\n     * @dev See {IERC20-allowance}.\n     */\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\n        return _allowances[owner][spender];\n    }\n\n    /**\n     * @dev See {IERC20-approve}.\n     *\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     */\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\n        address owner = _msgSender();\n        _approve(owner, spender, amount);\n        return true;\n    }\n\n    /**\n     * @dev See {IERC20-transferFrom}.\n     *\n     * Emits an {Approval} event indicating the updated allowance. This is not\n     * required by the EIP. See the note at the beginning of {ERC20}.\n     *\n     * NOTE: Does not update the allowance if the current allowance\n     * is the maximum `uint256`.\n     *\n     * Requirements:\n     *\n     * - `from` and `to` cannot be the zero address.\n     * - `from` must have a balance of at least `amount`.\n     * - the caller must have allowance for ``from``'s tokens of at least\n     * `amount`.\n     */\n    function transferFrom(\n        address from,\n        address to,\n        uint256 amount\n    ) public virtual override returns (bool) {\n        address spender = _msgSender();\n        _spendAllowance(from, spender, amount);\n        _transfer(from, to, amount);\n        return true;\n    }\n\n    /**\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\n     *\n     * This is an alternative to {approve} that can be used as a mitigation for\n     * problems described in {IERC20-approve}.\n     *\n     * Emits an {Approval} event indicating the updated allowance.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     */\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\n        address owner = _msgSender();\n        _approve(owner, spender, _allowances[owner][spender] + addedValue);\n        return true;\n    }\n\n    /**\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\n     *\n     * This is an alternative to {approve} that can be used as a mitigation for\n     * problems described in {IERC20-approve}.\n     *\n     * Emits an {Approval} event indicating the updated allowance.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     * - `spender` must have allowance for the caller of at least\n     * `subtractedValue`.\n     */\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\n        address owner = _msgSender();\n        uint256 currentAllowance = _allowances[owner][spender];\n        require(currentAllowance >= subtractedValue, \"ERC20: decreased allowance below zero\");\n        unchecked {\n            _approve(owner, spender, currentAllowance - subtractedValue);\n        }\n\n        return true;\n    }\n\n    /**\n     * @dev Moves `amount` of tokens from `sender` to `recipient`.\n     *\n     * This internal function is equivalent to {transfer}, and can be used to\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\n     *\n     * Emits a {Transfer} event.\n     *\n     * Requirements:\n     *\n     * - `from` cannot be the zero address.\n     * - `to` cannot be the zero address.\n     * - `from` must have a balance of at least `amount`.\n     */\n    function _transfer(\n        address from,\n        address to,\n        uint256 amount\n    ) internal virtual {\n        require(from != address(0), \"ERC20: transfer from the zero address\");\n        require(to != address(0), \"ERC20: transfer to the zero address\");\n\n        _beforeTokenTransfer(from, to, amount);\n\n        uint256 fromBalance = _balances[from];\n        require(fromBalance >= amount, \"ERC20: transfer amount exceeds balance\");\n        unchecked {\n            _balances[from] = fromBalance - amount;\n        }\n        _balances[to] += amount;\n\n        emit Transfer(from, to, amount);\n\n        _afterTokenTransfer(from, to, amount);\n    }\n\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\n     * the total supply.\n     *\n     * Emits a {Transfer} event with `from` set to the zero address.\n     *\n     * Requirements:\n     *\n     * - `account` cannot be the zero address.\n     */\n    function _mint(address account, uint256 amount) internal virtual {\n        require(account != address(0), \"ERC20: mint to the zero address\");\n\n        _beforeTokenTransfer(address(0), account, amount);\n\n        _totalSupply += amount;\n        _balances[account] += amount;\n        emit Transfer(address(0), account, amount);\n\n        _afterTokenTransfer(address(0), account, amount);\n    }\n\n    /**\n     * @dev Destroys `amount` tokens from `account`, reducing the\n     * total supply.\n     *\n     * Emits a {Transfer} event with `to` set to the zero address.\n     *\n     * Requirements:\n     *\n     * - `account` cannot be the zero address.\n     * - `account` must have at least `amount` tokens.\n     */\n    function _burn(address account, uint256 amount) internal virtual {\n        require(account != address(0), \"ERC20: burn from the zero address\");\n\n        _beforeTokenTransfer(account, address(0), amount);\n\n        uint256 accountBalance = _balances[account];\n        require(accountBalance >= amount, \"ERC20: burn amount exceeds balance\");\n        unchecked {\n            _balances[account] = accountBalance - amount;\n        }\n        _totalSupply -= amount;\n\n        emit Transfer(account, address(0), amount);\n\n        _afterTokenTransfer(account, address(0), amount);\n    }\n\n    /**\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\n     *\n     * This internal function is equivalent to `approve`, and can be used to\n     * e.g. set automatic allowances for certain subsystems, etc.\n     *\n     * Emits an {Approval} event.\n     *\n     * Requirements:\n     *\n     * - `owner` cannot be the zero address.\n     * - `spender` cannot be the zero address.\n     */\n    function _approve(\n        address owner,\n        address spender,\n        uint256 amount\n    ) internal virtual {\n        require(owner != address(0), \"ERC20: approve from the zero address\");\n        require(spender != address(0), \"ERC20: approve to the zero address\");\n\n        _allowances[owner][spender] = amount;\n        emit Approval(owner, spender, amount);\n    }\n\n    /**\n     * @dev Spend `amount` form the allowance of `owner` toward `spender`.\n     *\n     * Does not update the allowance amount in case of infinite allowance.\n     * Revert if not enough allowance is available.\n     *\n     * Might emit an {Approval} event.\n     */\n    function _spendAllowance(\n        address owner,\n        address spender,\n        uint256 amount\n    ) internal virtual {\n        uint256 currentAllowance = allowance(owner, spender);\n        if (currentAllowance != type(uint256).max) {\n            require(currentAllowance >= amount, \"ERC20: insufficient allowance\");\n            unchecked {\n                _approve(owner, spender, currentAllowance - amount);\n            }\n        }\n    }\n\n    /**\n     * @dev Hook that is called before any transfer of tokens. This includes\n     * minting and burning.\n     *\n     * Calling conditions:\n     *\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n     * will be transferred to `to`.\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\n     * - `from` and `to` are never both zero.\n     *\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n     */\n    function _beforeTokenTransfer(\n        address from,\n        address to,\n        uint256 amount\n    ) internal virtual {}\n\n    /**\n     * @dev Hook that is called after any transfer of tokens. This includes\n     * minting and burning.\n     *\n     * Calling conditions:\n     *\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n     * has been transferred to `to`.\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\n     * - `from` and `to` are never both zero.\n     *\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n     */\n    function _afterTokenTransfer(\n        address from,\n        address to,\n        uint256 amount\n    ) internal virtual {}\n}\n"},"contracts/vendor/@openzeppelin/contracts/token/ERC20/IERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20 {\n    /**\n     * @dev Returns the amount of tokens in existence.\n     */\n    function totalSupply() external view returns (uint256);\n\n    /**\n     * @dev Returns the amount of tokens owned by `account`.\n     */\n    function balanceOf(address account) external view returns (uint256);\n\n    /**\n     * @dev Moves `amount` tokens from the caller's account to `to`.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transfer(address to, uint256 amount) external returns (bool);\n\n    /**\n     * @dev Returns the remaining number of tokens that `spender` will be\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\n     * zero by default.\n     *\n     * This value changes when {approve} or {transferFrom} are called.\n     */\n    function allowance(address owner, address spender) external view returns (uint256);\n\n    /**\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\n     * that someone may use both the old and the new allowance by unfortunate\n     * transaction ordering. One possible solution to mitigate this race\n     * condition is to first reduce the spender's allowance to 0 and set the\n     * desired value afterwards:\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n     *\n     * Emits an {Approval} event.\n     */\n    function approve(address spender, uint256 amount) external returns (bool);\n\n    /**\n     * @dev Moves `amount` tokens from `from` to `to` using the\n     * allowance mechanism. `amount` is then deducted from the caller's\n     * allowance.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transferFrom(\n        address from,\n        address to,\n        uint256 amount\n    ) external returns (bool);\n\n    /**\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\n     * another (`to`).\n     *\n     * Note that `value` may be zero.\n     */\n    event Transfer(address indexed from, address indexed to, uint256 value);\n\n    /**\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n     * a call to {approve}. `value` is the new allowance.\n     */\n    event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n"},"contracts/vendor/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../IERC20.sol\";\n\n/**\n * @dev Interface for the optional metadata functions from the ERC20 standard.\n *\n * _Available since v4.1._\n */\ninterface IERC20Metadata is IERC20 {\n    /**\n     * @dev Returns the name of the token.\n     */\n    function name() external view returns (string memory);\n\n    /**\n     * @dev Returns the symbol of the token.\n     */\n    function symbol() external view returns (string memory);\n\n    /**\n     * @dev Returns the decimals places of the token.\n     */\n    function decimals() external view returns (uint8);\n}\n"}},"compilation":{"language":"Solidity","compiler":"solc","compilerVersion":"0.8.11+commit.d7f03943","compilerSettings":{"metadata":{"bytecodeHash":"ipfs","useLiteralContent":true},"libraries":{},"optimizer":{"runs":200,"enabled":false},"evmVersion":"london","remappings":[]},"name":"SafeToken","fullyQualifiedName":"contracts/SafeToken.sol:SafeToken"},"runtimeBytecode":{"onchainBytecode":"0x608060405234801561001057600080fd5b506004361061010b5760003560e01c80635c975abb116100a257806395d89b411161007157806395d89b4114610296578063a457c2d7146102b4578063a9059cbb146102e4578063dd62ed3e14610314578063f2fde38b146103445761010b565b80635c975abb1461022057806370a082311461023e578063715018a61461026e5780638da5cb5b146102785761010b565b8063313ce567116100de578063313ce567146101ac57806339509351146101ca5780633f4ba83a146101fa5780634707d000146102045761010b565b806306fdde0314610110578063095ea7b31461012e57806318160ddd1461015e57806323b872dd1461017c575b600080fd5b610118610360565b6040516101259190611402565b60405180910390f35b610148600480360381019061014391906114bd565b6103f2565b6040516101559190611518565b60405180910390f35b610166610415565b6040516101739190611542565b60405180910390f35b6101966004803603810190610191919061155d565b61041f565b6040516101a39190611518565b60405180910390f35b6101b461044e565b6040516101c191906115cc565b60405180910390f35b6101e460048036038101906101df91906114bd565b610457565b6040516101f19190611518565b60405180910390f35b610202610501565b005b61021e60048036038101906102199190611625565b6105ce565b005b6102286107d8565b6040516102359190611518565b60405180910390f35b61025860048036038101906102539190611665565b6107ef565b6040516102659190611542565b60405180910390f35b610276610837565b005b6102806108bf565b60405161028d91906116a1565b60405180910390f35b61029e6108e9565b6040516102ab9190611402565b60405180910390f35b6102ce60048036038101906102c991906114bd565b61097b565b6040516102db9190611518565b60405180910390f35b6102fe60048036038101906102f991906114bd565b610a65565b60405161030b9190611518565b60405180910390f35b61032e600480360381019061032991906116bc565b610a88565b60405161033b9190611542565b60405180910390f35b61035e60048036038101906103599190611665565b610b0f565b005b60606003805461036f9061172b565b80601f016020809104026020016040519081016040528092919081815260200182805461039b9061172b565b80156103e85780601f106103bd576101008083540402835291602001916103e8565b820191906000526020600020905b8154815290600101906020018083116103cb57829003601f168201915b5050505050905090565b6000806103fd610c0c565b905061040a818585610c14565b600191505092915050565b6000600254905090565b60008061042a610c0c565b9050610437858285610ddf565b610442858585610e6b565b60019150509392505050565b60006012905090565b600080610462610c0c565b90506104f6818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546104f1919061178c565b610c14565b600191505092915050565b610509610c0c565b73ffffffffffffffffffffffffffffffffffffffff166105276108bf565b73ffffffffffffffffffffffffffffffffffffffff161461057d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105749061182e565b60405180910390fd5b6105856107d8565b6105c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105bb9061189a565b60405180910390fd5b6105cc6110ec565b565b6105d6610c0c565b73ffffffffffffffffffffffffffffffffffffffff166105f46108bf565b73ffffffffffffffffffffffffffffffffffffffff161461064a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106419061182e565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161068591906116a1565b602060405180830381865afa1580156106a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c691906118cf565b90506000811161070b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107029061196e565b60405180910390fd5b61071683838361118e565b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b815260040161075192919061198e565b6020604051808303816000875af1158015610770573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079491906119e3565b6107d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca90611a82565b60405180910390fd5b505050565b6000600560009054906101000a900460ff16905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61083f610c0c565b73ffffffffffffffffffffffffffffffffffffffff1661085d6108bf565b73ffffffffffffffffffffffffffffffffffffffff16146108b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108aa9061182e565b60405180910390fd5b6108bd6000611193565b565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546108f89061172b565b80601f01602080910402602001604051908101604052809291908181526020018280546109249061172b565b80156109715780601f1061094657610100808354040283529160200191610971565b820191906000526020600020905b81548152906001019060200180831161095457829003601f168201915b5050505050905090565b600080610986610c0c565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015610a4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390611b14565b60405180910390fd5b610a598286868403610c14565b60019250505092915050565b600080610a70610c0c565b9050610a7d818585610e6b565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610b17610c0c565b73ffffffffffffffffffffffffffffffffffffffff16610b356108bf565b73ffffffffffffffffffffffffffffffffffffffff1614610b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b829061182e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610bfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf290611ba6565b60405180910390fd5b610c0481611193565b50565b505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7b90611c38565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610cf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ceb90611cca565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610dd29190611542565b60405180910390a3505050565b6000610deb8484610a88565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610e655781811015610e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4e90611d36565b60405180910390fd5b610e648484848403610c14565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610edb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed290611dc8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4290611e5a565b60405180910390fd5b610f56838383611259565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd390611eec565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461106f919061178c565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516110d39190611542565b60405180910390a36110e6848484611364565b50505050565b6110f46107d8565b611133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112a90611f58565b60405180910390fd5b6000600560006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611177610c0c565b60405161118491906116a1565b60405180910390a1565b505050565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611264838383610c07565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ca90611fea565b60405180910390fd5b6112db6107d8565b158061132057506112ea610c0c565b73ffffffffffffffffffffffffffffffffffffffff166113086108bf565b73ffffffffffffffffffffffffffffffffffffffff16145b61135f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113569061207c565b60405180910390fd5b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156113a3578082015181840152602081019050611388565b838111156113b2576000848401525b50505050565b6000601f19601f8301169050919050565b60006113d482611369565b6113de8185611374565b93506113ee818560208601611385565b6113f7816113b8565b840191505092915050565b6000602082019050818103600083015261141c81846113c9565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061145482611429565b9050919050565b61146481611449565b811461146f57600080fd5b50565b6000813590506114818161145b565b92915050565b6000819050919050565b61149a81611487565b81146114a557600080fd5b50565b6000813590506114b781611491565b92915050565b600080604083850312156114d4576114d3611424565b5b60006114e285828601611472565b92505060206114f3858286016114a8565b9150509250929050565b60008115159050919050565b611512816114fd565b82525050565b600060208201905061152d6000830184611509565b92915050565b61153c81611487565b82525050565b60006020820190506115576000830184611533565b92915050565b60008060006060848603121561157657611575611424565b5b600061158486828701611472565b935050602061159586828701611472565b92505060406115a6868287016114a8565b9150509250925092565b600060ff82169050919050565b6115c6816115b0565b82525050565b60006020820190506115e160008301846115bd565b92915050565b60006115f282611449565b9050919050565b611602816115e7565b811461160d57600080fd5b50565b60008135905061161f816115f9565b92915050565b6000806040838503121561163c5761163b611424565b5b600061164a85828601611610565b925050602061165b85828601611472565b9150509250929050565b60006020828403121561167b5761167a611424565b5b600061168984828501611472565b91505092915050565b61169b81611449565b82525050565b60006020820190506116b66000830184611692565b92915050565b600080604083850312156116d3576116d2611424565b5b60006116e185828601611472565b92505060206116f285828601611472565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061174357607f821691505b60208210811415611757576117566116fc565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061179782611487565b91506117a283611487565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156117d7576117d661175d565b5b828201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611818602083611374565b9150611823826117e2565b602082019050919050565b600060208201905081810360008301526118478161180b565b9050919050565b7f53616665546f6b656e3a20746f6b656e206973206e6f74207061757365640000600082015250565b6000611884601e83611374565b915061188f8261184e565b602082019050919050565b600060208201905081810360008301526118b381611877565b9050919050565b6000815190506118c981611491565b92915050565b6000602082840312156118e5576118e4611424565b5b60006118f3848285016118ba565b91505092915050565b7f546f6b656e526573637565723a204e6f20746f6b656e7320746f20726573637560008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b6000611958602183611374565b9150611963826118fc565b604082019050919050565b600060208201905081810360008301526119878161194b565b9050919050565b60006040820190506119a36000830185611692565b6119b06020830184611533565b9392505050565b6119c0816114fd565b81146119cb57600080fd5b50565b6000815190506119dd816119b7565b92915050565b6000602082840312156119f9576119f8611424565b5b6000611a07848285016119ce565b91505092915050565b7f546f6b656e526573637565723a20436f756c64206e6f7420726573637565207460008201527f6f6b656e00000000000000000000000000000000000000000000000000000000602082015250565b6000611a6c602483611374565b9150611a7782611a10565b604082019050919050565b60006020820190508181036000830152611a9b81611a5f565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611afe602583611374565b9150611b0982611aa2565b604082019050919050565b60006020820190508181036000830152611b2d81611af1565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611b90602683611374565b9150611b9b82611b34565b604082019050919050565b60006020820190508181036000830152611bbf81611b83565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611c22602483611374565b9150611c2d82611bc6565b604082019050919050565b60006020820190508181036000830152611c5181611c15565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611cb4602283611374565b9150611cbf82611c58565b604082019050919050565b60006020820190508181036000830152611ce381611ca7565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000611d20601d83611374565b9150611d2b82611cea565b602082019050919050565b60006020820190508181036000830152611d4f81611d13565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611db2602583611374565b9150611dbd82611d56565b604082019050919050565b60006020820190508181036000830152611de181611da5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611e44602383611374565b9150611e4f82611de8565b604082019050919050565b60006020820190508181036000830152611e7381611e37565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611ed6602683611374565b9150611ee182611e7a565b604082019050919050565b60006020820190508181036000830152611f0581611ec9565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000611f42601483611374565b9150611f4d82611f0c565b602082019050919050565b60006020820190508181036000830152611f7181611f35565b9050919050565b7f53616665546f6b656e3a2063616e6e6f74207472616e7366657220746f6b656e60008201527f7320746f20746f6b656e20636f6e747261637400000000000000000000000000602082015250565b6000611fd4603383611374565b9150611fdf82611f78565b604082019050919050565b6000602082019050818103600083015261200381611fc7565b9050919050565b7f53616665546f6b656e3a20746f6b656e207472616e73666572207768696c652060008201527f7061757365640000000000000000000000000000000000000000000000000000602082015250565b6000612066602683611374565b91506120718261200a565b604082019050919050565b6000602082019050818103600083015261209581612059565b905091905056fea2646970667358221220a368f719696af082bbf825ebf1efe070741e2ab87b4d745e60398e47e70272f864736f6c634300080b0033","recompiledBytecode":"0x608060405234801561001057600080fd5b506004361061010b5760003560e01c80635c975abb116100a257806395d89b411161007157806395d89b4114610296578063a457c2d7146102b4578063a9059cbb146102e4578063dd62ed3e14610314578063f2fde38b146103445761010b565b80635c975abb1461022057806370a082311461023e578063715018a61461026e5780638da5cb5b146102785761010b565b8063313ce567116100de578063313ce567146101ac57806339509351146101ca5780633f4ba83a146101fa5780634707d000146102045761010b565b806306fdde0314610110578063095ea7b31461012e57806318160ddd1461015e57806323b872dd1461017c575b600080fd5b610118610360565b6040516101259190611402565b60405180910390f35b610148600480360381019061014391906114bd565b6103f2565b6040516101559190611518565b60405180910390f35b610166610415565b6040516101739190611542565b60405180910390f35b6101966004803603810190610191919061155d565b61041f565b6040516101a39190611518565b60405180910390f35b6101b461044e565b6040516101c191906115cc565b60405180910390f35b6101e460048036038101906101df91906114bd565b610457565b6040516101f19190611518565b60405180910390f35b610202610501565b005b61021e60048036038101906102199190611625565b6105ce565b005b6102286107d8565b6040516102359190611518565b60405180910390f35b61025860048036038101906102539190611665565b6107ef565b6040516102659190611542565b60405180910390f35b610276610837565b005b6102806108bf565b60405161028d91906116a1565b60405180910390f35b61029e6108e9565b6040516102ab9190611402565b60405180910390f35b6102ce60048036038101906102c991906114bd565b61097b565b6040516102db9190611518565b60405180910390f35b6102fe60048036038101906102f991906114bd565b610a65565b60405161030b9190611518565b60405180910390f35b61032e600480360381019061032991906116bc565b610a88565b60405161033b9190611542565b60405180910390f35b61035e60048036038101906103599190611665565b610b0f565b005b60606003805461036f9061172b565b80601f016020809104026020016040519081016040528092919081815260200182805461039b9061172b565b80156103e85780601f106103bd576101008083540402835291602001916103e8565b820191906000526020600020905b8154815290600101906020018083116103cb57829003601f168201915b5050505050905090565b6000806103fd610c0c565b905061040a818585610c14565b600191505092915050565b6000600254905090565b60008061042a610c0c565b9050610437858285610ddf565b610442858585610e6b565b60019150509392505050565b60006012905090565b600080610462610c0c565b90506104f6818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546104f1919061178c565b610c14565b600191505092915050565b610509610c0c565b73ffffffffffffffffffffffffffffffffffffffff166105276108bf565b73ffffffffffffffffffffffffffffffffffffffff161461057d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105749061182e565b60405180910390fd5b6105856107d8565b6105c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105bb9061189a565b60405180910390fd5b6105cc6110ec565b565b6105d6610c0c565b73ffffffffffffffffffffffffffffffffffffffff166105f46108bf565b73ffffffffffffffffffffffffffffffffffffffff161461064a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106419061182e565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161068591906116a1565b602060405180830381865afa1580156106a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c691906118cf565b90506000811161070b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107029061196e565b60405180910390fd5b61071683838361118e565b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b815260040161075192919061198e565b6020604051808303816000875af1158015610770573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079491906119e3565b6107d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca90611a82565b60405180910390fd5b505050565b6000600560009054906101000a900460ff16905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61083f610c0c565b73ffffffffffffffffffffffffffffffffffffffff1661085d6108bf565b73ffffffffffffffffffffffffffffffffffffffff16146108b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108aa9061182e565b60405180910390fd5b6108bd6000611193565b565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546108f89061172b565b80601f01602080910402602001604051908101604052809291908181526020018280546109249061172b565b80156109715780601f1061094657610100808354040283529160200191610971565b820191906000526020600020905b81548152906001019060200180831161095457829003601f168201915b5050505050905090565b600080610986610c0c565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015610a4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390611b14565b60405180910390fd5b610a598286868403610c14565b60019250505092915050565b600080610a70610c0c565b9050610a7d818585610e6b565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610b17610c0c565b73ffffffffffffffffffffffffffffffffffffffff16610b356108bf565b73ffffffffffffffffffffffffffffffffffffffff1614610b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b829061182e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610bfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf290611ba6565b60405180910390fd5b610c0481611193565b50565b505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7b90611c38565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610cf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ceb90611cca565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610dd29190611542565b60405180910390a3505050565b6000610deb8484610a88565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610e655781811015610e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4e90611d36565b60405180910390fd5b610e648484848403610c14565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610edb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed290611dc8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4290611e5a565b60405180910390fd5b610f56838383611259565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd390611eec565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461106f919061178c565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516110d39190611542565b60405180910390a36110e6848484611364565b50505050565b6110f46107d8565b611133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112a90611f58565b60405180910390fd5b6000600560006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611177610c0c565b60405161118491906116a1565b60405180910390a1565b505050565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611264838383610c07565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ca90611fea565b60405180910390fd5b6112db6107d8565b158061132057506112ea610c0c565b73ffffffffffffffffffffffffffffffffffffffff166113086108bf565b73ffffffffffffffffffffffffffffffffffffffff16145b61135f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113569061207c565b60405180910390fd5b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156113a3578082015181840152602081019050611388565b838111156113b2576000848401525b50505050565b6000601f19601f8301169050919050565b60006113d482611369565b6113de8185611374565b93506113ee818560208601611385565b6113f7816113b8565b840191505092915050565b6000602082019050818103600083015261141c81846113c9565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061145482611429565b9050919050565b61146481611449565b811461146f57600080fd5b50565b6000813590506114818161145b565b92915050565b6000819050919050565b61149a81611487565b81146114a557600080fd5b50565b6000813590506114b781611491565b92915050565b600080604083850312156114d4576114d3611424565b5b60006114e285828601611472565b92505060206114f3858286016114a8565b9150509250929050565b60008115159050919050565b611512816114fd565b82525050565b600060208201905061152d6000830184611509565b92915050565b61153c81611487565b82525050565b60006020820190506115576000830184611533565b92915050565b60008060006060848603121561157657611575611424565b5b600061158486828701611472565b935050602061159586828701611472565b92505060406115a6868287016114a8565b9150509250925092565b600060ff82169050919050565b6115c6816115b0565b82525050565b60006020820190506115e160008301846115bd565b92915050565b60006115f282611449565b9050919050565b611602816115e7565b811461160d57600080fd5b50565b60008135905061161f816115f9565b92915050565b6000806040838503121561163c5761163b611424565b5b600061164a85828601611610565b925050602061165b85828601611472565b9150509250929050565b60006020828403121561167b5761167a611424565b5b600061168984828501611472565b91505092915050565b61169b81611449565b82525050565b60006020820190506116b66000830184611692565b92915050565b600080604083850312156116d3576116d2611424565b5b60006116e185828601611472565b92505060206116f285828601611472565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061174357607f821691505b60208210811415611757576117566116fc565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061179782611487565b91506117a283611487565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156117d7576117d661175d565b5b828201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611818602083611374565b9150611823826117e2565b602082019050919050565b600060208201905081810360008301526118478161180b565b9050919050565b7f53616665546f6b656e3a20746f6b656e206973206e6f74207061757365640000600082015250565b6000611884601e83611374565b915061188f8261184e565b602082019050919050565b600060208201905081810360008301526118b381611877565b9050919050565b6000815190506118c981611491565b92915050565b6000602082840312156118e5576118e4611424565b5b60006118f3848285016118ba565b91505092915050565b7f546f6b656e526573637565723a204e6f20746f6b656e7320746f20726573637560008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b6000611958602183611374565b9150611963826118fc565b604082019050919050565b600060208201905081810360008301526119878161194b565b9050919050565b60006040820190506119a36000830185611692565b6119b06020830184611533565b9392505050565b6119c0816114fd565b81146119cb57600080fd5b50565b6000815190506119dd816119b7565b92915050565b6000602082840312156119f9576119f8611424565b5b6000611a07848285016119ce565b91505092915050565b7f546f6b656e526573637565723a20436f756c64206e6f7420726573637565207460008201527f6f6b656e00000000000000000000000000000000000000000000000000000000602082015250565b6000611a6c602483611374565b9150611a7782611a10565b604082019050919050565b60006020820190508181036000830152611a9b81611a5f565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611afe602583611374565b9150611b0982611aa2565b604082019050919050565b60006020820190508181036000830152611b2d81611af1565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611b90602683611374565b9150611b9b82611b34565b604082019050919050565b60006020820190508181036000830152611bbf81611b83565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611c22602483611374565b9150611c2d82611bc6565b604082019050919050565b60006020820190508181036000830152611c5181611c15565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611cb4602283611374565b9150611cbf82611c58565b604082019050919050565b60006020820190508181036000830152611ce381611ca7565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000611d20601d83611374565b9150611d2b82611cea565b602082019050919050565b60006020820190508181036000830152611d4f81611d13565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611db2602583611374565b9150611dbd82611d56565b604082019050919050565b60006020820190508181036000830152611de181611da5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611e44602383611374565b9150611e4f82611de8565b604082019050919050565b60006020820190508181036000830152611e7381611e37565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611ed6602683611374565b9150611ee182611e7a565b604082019050919050565b60006020820190508181036000830152611f0581611ec9565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000611f42601483611374565b9150611f4d82611f0c565b602082019050919050565b60006020820190508181036000830152611f7181611f35565b9050919050565b7f53616665546f6b656e3a2063616e6e6f74207472616e7366657220746f6b656e60008201527f7320746f20746f6b656e20636f6e747261637400000000000000000000000000602082015250565b6000611fd4603383611374565b9150611fdf82611f78565b604082019050919050565b6000602082019050818103600083015261200381611fc7565b9050919050565b7f53616665546f6b656e3a20746f6b656e207472616e73666572207768696c652060008201527f7061757365640000000000000000000000000000000000000000000000000000602082015250565b6000612066602683611374565b91506120718261200a565b604082019050919050565b6000602082019050818103600083015261209581612059565b905091905056fea2646970667358221220a368f719696af082bbf825ebf1efe070741e2ab87b4d745e60398e47e70272f864736f6c634300080b0033","sourceMap":"370:1614:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2156:98:4;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4433:197;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3244:106;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5192:286;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3093:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5873:236;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1008:132:0;;;:::i;:::-;;924:391:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1098:84:3;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3408:125:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1668:101:2;;;:::i;:::-;;1036:85;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2367:102:4;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6596:429;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3729:189;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3976:149;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1918:198:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2156:98:4;2210:13;2242:5;2235:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2156:98;:::o;4433:197::-;4516:4;4532:13;4548:12;:10;:12::i;:::-;4532:28;;4570:32;4579:5;4586:7;4595:6;4570:8;:32::i;:::-;4619:4;4612:11;;;4433:197;;;;:::o;3244:106::-;3305:7;3331:12;;3324:19;;3244:106;:::o;5192:286::-;5319:4;5335:15;5353:12;:10;:12::i;:::-;5335:30;;5375:38;5391:4;5397:7;5406:6;5375:15;:38::i;:::-;5423:27;5433:4;5439:2;5443:6;5423:9;:27::i;:::-;5467:4;5460:11;;;5192:286;;;;;:::o;3093:91::-;3151:5;3175:2;3168:9;;3093:91;:::o;5873:236::-;5961:4;5977:13;5993:12;:10;:12::i;:::-;5977:28;;6015:66;6024:5;6031:7;6070:10;6040:11;:18;6052:5;6040:18;;;;;;;;;;;;;;;:27;6059:7;6040:27;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;6015:8;:66::i;:::-;6098:4;6091:11;;;5873:236;;;;:::o;1008:132:0:-;1259:12:2;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1070:8:0::1;:6;:8::i;:::-;1062:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;1123:10;:8;:10::i;:::-;1008:132::o:0;924:391:1:-;1259:12:2;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1009:23:1::1;1035:5;:15;;;1059:4;1035:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1009:56;;1101:1;1083:15;:19;1075:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;1150:55;1169:5;1176:11;1189:15;1150:18;:55::i;:::-;1223:5;:14;;;1238:11;1251:15;1223:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1215:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;999:316;924:391:::0;;:::o;1098:84:3:-;1145:4;1168:7;;;;;;;;;;;1161:14;;1098:84;:::o;3408:125:4:-;3482:7;3508:9;:18;3518:7;3508:18;;;;;;;;;;;;;;;;3501:25;;3408:125;;;:::o;1668:101:2:-;1259:12;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1732:30:::1;1759:1;1732:18;:30::i;:::-;1668:101::o:0;1036:85::-;1082:7;1108:6;;;;;;;;;;;1101:13;;1036:85;:::o;2367:102:4:-;2423:13;2455:7;2448:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2367:102;:::o;6596:429::-;6689:4;6705:13;6721:12;:10;:12::i;:::-;6705:28;;6743:24;6770:11;:18;6782:5;6770:18;;;;;;;;;;;;;;;:27;6789:7;6770:27;;;;;;;;;;;;;;;;6743:54;;6835:15;6815:16;:35;;6807:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;6926:60;6935:5;6942:7;6970:15;6951:16;:34;6926:8;:60::i;:::-;7014:4;7007:11;;;;6596:429;;;;:::o;3729:189::-;3808:4;3824:13;3840:12;:10;:12::i;:::-;3824:28;;3862;3872:5;3879:2;3883:6;3862:9;:28::i;:::-;3907:4;3900:11;;;3729:189;;;;:::o;3976:149::-;4065:7;4091:11;:18;4103:5;4091:18;;;;;;;;;;;;;;;:27;4110:7;4091:27;;;;;;;;;;;;;;;;4084:34;;3976:149;;;;:::o;1918:198:2:-;1259:12;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2026:1:::1;2006:22;;:8;:22;;;;1998:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2081:28;2100:8;2081:18;:28::i;:::-;1918:198:::0;:::o;11795:121:4:-;;;;:::o;640:96:7:-;693:7;719:10;712:17;;640:96;:::o;10123:370:4:-;10271:1;10254:19;;:5;:19;;;;10246:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10351:1;10332:21;;:7;:21;;;;10324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10433:6;10403:11;:18;10415:5;10403:18;;;;;;;;;;;;;;;:27;10422:7;10403:27;;;;;;;;;;;;;;;:36;;;;10470:7;10454:32;;10463:5;10454:32;;;10479:6;10454:32;;;;;;:::i;:::-;;;;;;;;10123:370;;;:::o;10770:441::-;10900:24;10927:25;10937:5;10944:7;10927:9;:25::i;:::-;10900:52;;10986:17;10966:16;:37;10962:243;;11047:6;11027:16;:26;;11019:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11129:51;11138:5;11145:7;11173:6;11154:16;:25;11129:8;:51::i;:::-;10962:243;10890:321;10770:441;;;:::o;7488:651::-;7630:1;7614:18;;:4;:18;;;;7606:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7706:1;7692:16;;:2;:16;;;;7684:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;7759:38;7780:4;7786:2;7790:6;7759:20;:38::i;:::-;7808:19;7830:9;:15;7840:4;7830:15;;;;;;;;;;;;;;;;7808:37;;7878:6;7863:11;:21;;7855:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;7993:6;7979:11;:20;7961:9;:15;7971:4;7961:15;;;;;;;;;;;;;;;:38;;;;8036:6;8019:9;:13;8029:2;8019:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;8073:2;8058:26;;8067:4;8058:26;;;8077:6;8058:26;;;;;;:::i;:::-;;;;;;;;8095:37;8115:4;8121:2;8125:6;8095:19;:37::i;:::-;7596:543;7488:651;;;:::o;2110:117:3:-;1677:8;:6;:8::i;:::-;1669:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;2178:5:::1;2168:7;;:15;;;;;;;;;;;;;;;;;;2198:22;2207:12;:10;:12::i;:::-;2198:22;;;;;;:::i;:::-;;;;;;;;2110:117::o:0;501:128:1:-;;;;:::o;2270:187:2:-;2343:16;2362:6;;;;;;;;;;;2343:25;;2387:8;2378:6;;:17;;;;;;;;;;;;;;;;;;2441:8;2410:40;;2431:8;2410:40;;;;;;;;;;;;2333:124;2270:187;:::o;1471:511:0:-;1609:44;1636:4;1642:2;1646:6;1609:26;:44::i;:::-;1686:4;1672:19;;:2;:19;;;;1664:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;1897:8;:6;:8::i;:::-;1896:9;:36;;;;1920:12;:10;:12::i;:::-;1909:23;;:7;:5;:7::i;:::-;:23;;;1896:36;1888:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;1471:511;;;:::o;12504:120:4:-;;;;:::o;7:99:8:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:118::-;3581:24;3599:5;3581:24;:::i;:::-;3576:3;3569:37;3494:118;;:::o;3618:222::-;3711:4;3749:2;3738:9;3734:18;3726:26;;3762:71;3830:1;3819:9;3815:17;3806:6;3762:71;:::i;:::-;3618:222;;;;:::o;3846:619::-;3923:6;3931;3939;3988:2;3976:9;3967:7;3963:23;3959:32;3956:119;;;3994:79;;:::i;:::-;3956:119;4114:1;4139:53;4184:7;4175:6;4164:9;4160:22;4139:53;:::i;:::-;4129:63;;4085:117;4241:2;4267:53;4312:7;4303:6;4292:9;4288:22;4267:53;:::i;:::-;4257:63;;4212:118;4369:2;4395:53;4440:7;4431:6;4420:9;4416:22;4395:53;:::i;:::-;4385:63;;4340:118;3846:619;;;;;:::o;4471:86::-;4506:7;4546:4;4539:5;4535:16;4524:27;;4471:86;;;:::o;4563:112::-;4646:22;4662:5;4646:22;:::i;:::-;4641:3;4634:35;4563:112;;:::o;4681:214::-;4770:4;4808:2;4797:9;4793:18;4785:26;;4821:67;4885:1;4874:9;4870:17;4861:6;4821:67;:::i;:::-;4681:214;;;;:::o;4901:111::-;4953:7;4982:24;5000:5;4982:24;:::i;:::-;4971:35;;4901:111;;;:::o;5018:152::-;5106:39;5139:5;5106:39;:::i;:::-;5099:5;5096:50;5086:78;;5160:1;5157;5150:12;5086:78;5018:152;:::o;5176:169::-;5237:5;5275:6;5262:20;5253:29;;5291:48;5333:5;5291:48;:::i;:::-;5176:169;;;;:::o;5351:504::-;5434:6;5442;5491:2;5479:9;5470:7;5466:23;5462:32;5459:119;;;5497:79;;:::i;:::-;5459:119;5617:1;5642:68;5702:7;5693:6;5682:9;5678:22;5642:68;:::i;:::-;5632:78;;5588:132;5759:2;5785:53;5830:7;5821:6;5810:9;5806:22;5785:53;:::i;:::-;5775:63;;5730:118;5351:504;;;;;:::o;5861:329::-;5920:6;5969:2;5957:9;5948:7;5944:23;5940:32;5937:119;;;5975:79;;:::i;:::-;5937:119;6095:1;6120:53;6165:7;6156:6;6145:9;6141:22;6120:53;:::i;:::-;6110:63;;6066:117;5861:329;;;;:::o;6196:118::-;6283:24;6301:5;6283:24;:::i;:::-;6278:3;6271:37;6196:118;;:::o;6320:222::-;6413:4;6451:2;6440:9;6436:18;6428:26;;6464:71;6532:1;6521:9;6517:17;6508:6;6464:71;:::i;:::-;6320:222;;;;:::o;6548:474::-;6616:6;6624;6673:2;6661:9;6652:7;6648:23;6644:32;6641:119;;;6679:79;;:::i;:::-;6641:119;6799:1;6824:53;6869:7;6860:6;6849:9;6845:22;6824:53;:::i;:::-;6814:63;;6770:117;6926:2;6952:53;6997:7;6988:6;6977:9;6973:22;6952:53;:::i;:::-;6942:63;;6897:118;6548:474;;;;;:::o;7028:180::-;7076:77;7073:1;7066:88;7173:4;7170:1;7163:15;7197:4;7194:1;7187:15;7214:320;7258:6;7295:1;7289:4;7285:12;7275:22;;7342:1;7336:4;7332:12;7363:18;7353:81;;7419:4;7411:6;7407:17;7397:27;;7353:81;7481:2;7473:6;7470:14;7450:18;7447:38;7444:84;;;7500:18;;:::i;:::-;7444:84;7265:269;7214:320;;;:::o;7540:180::-;7588:77;7585:1;7578:88;7685:4;7682:1;7675:15;7709:4;7706:1;7699:15;7726:305;7766:3;7785:20;7803:1;7785:20;:::i;:::-;7780:25;;7819:20;7837:1;7819:20;:::i;:::-;7814:25;;7973:1;7905:66;7901:74;7898:1;7895:81;7892:107;;;7979:18;;:::i;:::-;7892:107;8023:1;8020;8016:9;8009:16;;7726:305;;;;:::o;8037:182::-;8177:34;8173:1;8165:6;8161:14;8154:58;8037:182;:::o;8225:366::-;8367:3;8388:67;8452:2;8447:3;8388:67;:::i;:::-;8381:74;;8464:93;8553:3;8464:93;:::i;:::-;8582:2;8577:3;8573:12;8566:19;;8225:366;;;:::o;8597:419::-;8763:4;8801:2;8790:9;8786:18;8778:26;;8850:9;8844:4;8840:20;8836:1;8825:9;8821:17;8814:47;8878:131;9004:4;8878:131;:::i;:::-;8870:139;;8597:419;;;:::o;9022:180::-;9162:32;9158:1;9150:6;9146:14;9139:56;9022:180;:::o;9208:366::-;9350:3;9371:67;9435:2;9430:3;9371:67;:::i;:::-;9364:74;;9447:93;9536:3;9447:93;:::i;:::-;9565:2;9560:3;9556:12;9549:19;;9208:366;;;:::o;9580:419::-;9746:4;9784:2;9773:9;9769:18;9761:26;;9833:9;9827:4;9823:20;9819:1;9808:9;9804:17;9797:47;9861:131;9987:4;9861:131;:::i;:::-;9853:139;;9580:419;;;:::o;10005:143::-;10062:5;10093:6;10087:13;10078:22;;10109:33;10136:5;10109:33;:::i;:::-;10005:143;;;;:::o;10154:351::-;10224:6;10273:2;10261:9;10252:7;10248:23;10244:32;10241:119;;;10279:79;;:::i;:::-;10241:119;10399:1;10424:64;10480:7;10471:6;10460:9;10456:22;10424:64;:::i;:::-;10414:74;;10370:128;10154:351;;;;:::o;10511:220::-;10651:34;10647:1;10639:6;10635:14;10628:58;10720:3;10715:2;10707:6;10703:15;10696:28;10511:220;:::o;10737:366::-;10879:3;10900:67;10964:2;10959:3;10900:67;:::i;:::-;10893:74;;10976:93;11065:3;10976:93;:::i;:::-;11094:2;11089:3;11085:12;11078:19;;10737:366;;;:::o;11109:419::-;11275:4;11313:2;11302:9;11298:18;11290:26;;11362:9;11356:4;11352:20;11348:1;11337:9;11333:17;11326:47;11390:131;11516:4;11390:131;:::i;:::-;11382:139;;11109:419;;;:::o;11534:332::-;11655:4;11693:2;11682:9;11678:18;11670:26;;11706:71;11774:1;11763:9;11759:17;11750:6;11706:71;:::i;:::-;11787:72;11855:2;11844:9;11840:18;11831:6;11787:72;:::i;:::-;11534:332;;;;;:::o;11872:116::-;11942:21;11957:5;11942:21;:::i;:::-;11935:5;11932:32;11922:60;;11978:1;11975;11968:12;11922:60;11872:116;:::o;11994:137::-;12048:5;12079:6;12073:13;12064:22;;12095:30;12119:5;12095:30;:::i;:::-;11994:137;;;;:::o;12137:345::-;12204:6;12253:2;12241:9;12232:7;12228:23;12224:32;12221:119;;;12259:79;;:::i;:::-;12221:119;12379:1;12404:61;12457:7;12448:6;12437:9;12433:22;12404:61;:::i;:::-;12394:71;;12350:125;12137:345;;;;:::o;12488:223::-;12628:34;12624:1;12616:6;12612:14;12605:58;12697:6;12692:2;12684:6;12680:15;12673:31;12488:223;:::o;12717:366::-;12859:3;12880:67;12944:2;12939:3;12880:67;:::i;:::-;12873:74;;12956:93;13045:3;12956:93;:::i;:::-;13074:2;13069:3;13065:12;13058:19;;12717:366;;;:::o;13089:419::-;13255:4;13293:2;13282:9;13278:18;13270:26;;13342:9;13336:4;13332:20;13328:1;13317:9;13313:17;13306:47;13370:131;13496:4;13370:131;:::i;:::-;13362:139;;13089:419;;;:::o;13514:224::-;13654:34;13650:1;13642:6;13638:14;13631:58;13723:7;13718:2;13710:6;13706:15;13699:32;13514:224;:::o;13744:366::-;13886:3;13907:67;13971:2;13966:3;13907:67;:::i;:::-;13900:74;;13983:93;14072:3;13983:93;:::i;:::-;14101:2;14096:3;14092:12;14085:19;;13744:366;;;:::o;14116:419::-;14282:4;14320:2;14309:9;14305:18;14297:26;;14369:9;14363:4;14359:20;14355:1;14344:9;14340:17;14333:47;14397:131;14523:4;14397:131;:::i;:::-;14389:139;;14116:419;;;:::o;14541:225::-;14681:34;14677:1;14669:6;14665:14;14658:58;14750:8;14745:2;14737:6;14733:15;14726:33;14541:225;:::o;14772:366::-;14914:3;14935:67;14999:2;14994:3;14935:67;:::i;:::-;14928:74;;15011:93;15100:3;15011:93;:::i;:::-;15129:2;15124:3;15120:12;15113:19;;14772:366;;;:::o;15144:419::-;15310:4;15348:2;15337:9;15333:18;15325:26;;15397:9;15391:4;15387:20;15383:1;15372:9;15368:17;15361:47;15425:131;15551:4;15425:131;:::i;:::-;15417:139;;15144:419;;;:::o;15569:223::-;15709:34;15705:1;15697:6;15693:14;15686:58;15778:6;15773:2;15765:6;15761:15;15754:31;15569:223;:::o;15798:366::-;15940:3;15961:67;16025:2;16020:3;15961:67;:::i;:::-;15954:74;;16037:93;16126:3;16037:93;:::i;:::-;16155:2;16150:3;16146:12;16139:19;;15798:366;;;:::o;16170:419::-;16336:4;16374:2;16363:9;16359:18;16351:26;;16423:9;16417:4;16413:20;16409:1;16398:9;16394:17;16387:47;16451:131;16577:4;16451:131;:::i;:::-;16443:139;;16170:419;;;:::o;16595:221::-;16735:34;16731:1;16723:6;16719:14;16712:58;16804:4;16799:2;16791:6;16787:15;16780:29;16595:221;:::o;16822:366::-;16964:3;16985:67;17049:2;17044:3;16985:67;:::i;:::-;16978:74;;17061:93;17150:3;17061:93;:::i;:::-;17179:2;17174:3;17170:12;17163:19;;16822:366;;;:::o;17194:419::-;17360:4;17398:2;17387:9;17383:18;17375:26;;17447:9;17441:4;17437:20;17433:1;17422:9;17418:17;17411:47;17475:131;17601:4;17475:131;:::i;:::-;17467:139;;17194:419;;;:::o;17619:179::-;17759:31;17755:1;17747:6;17743:14;17736:55;17619:179;:::o;17804:366::-;17946:3;17967:67;18031:2;18026:3;17967:67;:::i;:::-;17960:74;;18043:93;18132:3;18043:93;:::i;:::-;18161:2;18156:3;18152:12;18145:19;;17804:366;;;:::o;18176:419::-;18342:4;18380:2;18369:9;18365:18;18357:26;;18429:9;18423:4;18419:20;18415:1;18404:9;18400:17;18393:47;18457:131;18583:4;18457:131;:::i;:::-;18449:139;;18176:419;;;:::o;18601:224::-;18741:34;18737:1;18729:6;18725:14;18718:58;18810:7;18805:2;18797:6;18793:15;18786:32;18601:224;:::o;18831:366::-;18973:3;18994:67;19058:2;19053:3;18994:67;:::i;:::-;18987:74;;19070:93;19159:3;19070:93;:::i;:::-;19188:2;19183:3;19179:12;19172:19;;18831:366;;;:::o;19203:419::-;19369:4;19407:2;19396:9;19392:18;19384:26;;19456:9;19450:4;19446:20;19442:1;19431:9;19427:17;19420:47;19484:131;19610:4;19484:131;:::i;:::-;19476:139;;19203:419;;;:::o;19628:222::-;19768:34;19764:1;19756:6;19752:14;19745:58;19837:5;19832:2;19824:6;19820:15;19813:30;19628:222;:::o;19856:366::-;19998:3;20019:67;20083:2;20078:3;20019:67;:::i;:::-;20012:74;;20095:93;20184:3;20095:93;:::i;:::-;20213:2;20208:3;20204:12;20197:19;;19856:366;;;:::o;20228:419::-;20394:4;20432:2;20421:9;20417:18;20409:26;;20481:9;20475:4;20471:20;20467:1;20456:9;20452:17;20445:47;20509:131;20635:4;20509:131;:::i;:::-;20501:139;;20228:419;;;:::o;20653:225::-;20793:34;20789:1;20781:6;20777:14;20770:58;20862:8;20857:2;20849:6;20845:15;20838:33;20653:225;:::o;20884:366::-;21026:3;21047:67;21111:2;21106:3;21047:67;:::i;:::-;21040:74;;21123:93;21212:3;21123:93;:::i;:::-;21241:2;21236:3;21232:12;21225:19;;20884:366;;;:::o;21256:419::-;21422:4;21460:2;21449:9;21445:18;21437:26;;21509:9;21503:4;21499:20;21495:1;21484:9;21480:17;21473:47;21537:131;21663:4;21537:131;:::i;:::-;21529:139;;21256:419;;;:::o;21681:170::-;21821:22;21817:1;21809:6;21805:14;21798:46;21681:170;:::o;21857:366::-;21999:3;22020:67;22084:2;22079:3;22020:67;:::i;:::-;22013:74;;22096:93;22185:3;22096:93;:::i;:::-;22214:2;22209:3;22205:12;22198:19;;21857:366;;;:::o;22229:419::-;22395:4;22433:2;22422:9;22418:18;22410:26;;22482:9;22476:4;22472:20;22468:1;22457:9;22453:17;22446:47;22510:131;22636:4;22510:131;:::i;:::-;22502:139;;22229:419;;;:::o;22654:238::-;22794:34;22790:1;22782:6;22778:14;22771:58;22863:21;22858:2;22850:6;22846:15;22839:46;22654:238;:::o;22898:366::-;23040:3;23061:67;23125:2;23120:3;23061:67;:::i;:::-;23054:74;;23137:93;23226:3;23137:93;:::i;:::-;23255:2;23250:3;23246:12;23239:19;;22898:366;;;:::o;23270:419::-;23436:4;23474:2;23463:9;23459:18;23451:26;;23523:9;23517:4;23513:20;23509:1;23498:9;23494:17;23487:47;23551:131;23677:4;23551:131;:::i;:::-;23543:139;;23270:419;;;:::o;23695:225::-;23835:34;23831:1;23823:6;23819:14;23812:58;23904:8;23899:2;23891:6;23887:15;23880:33;23695:225;:::o;23926:366::-;24068:3;24089:67;24153:2;24148:3;24089:67;:::i;:::-;24082:74;;24165:93;24254:3;24165:93;:::i;:::-;24283:2;24278:3;24274:12;24267:19;;23926:366;;;:::o;24298:419::-;24464:4;24502:2;24491:9;24487:18;24479:26;;24551:9;24545:4;24541:20;24537:1;24526:9;24522:17;24515:47;24579:131;24705:4;24579:131;:::i;:::-;24571:139;;24298:419;;;:::o","linkReferences":{},"cborAuxdata":{"1":{"value":"0xa2646970667358221220a368f719696af082bbf825ebf1efe070741e2ab87b4d745e60398e47e70272f864736f6c634300080b0033","offset":8349}},"immutableReferences":{},"transformations":[],"transformationValues":{}},"proxyResolution":{"isProxy":false,"proxyType":null,"implementations":[]},"deployment":{"transactionHash":"0xd583a75131de170aa196e410fe5ded950d5cbe9cbca6265656385b3190ca2f78","blockNumber":"14624496","transactionIndex":"128","deployer":"0xD7Df5bf3B8d2bd159664dF54A30101d7FAF6cA26"},"matchId":"172724","creationMatch":"exact_match","runtimeMatch":"exact_match","verifiedAt":"2024-08-08T10:54:53Z","match":"exact_match","chainId":"1","address":"0x5aFE3855358E112B5647B952709E6165e1c1eEEe"}