ETH Price: $2,446.06 (+0.72%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer211224782024-11-05 15:55:113 hrs ago1730822111IN
0x0D119Fab...5e45637c5
0 ETH0.0005980714.16205365
Transfer211224782024-11-05 15:55:113 hrs ago1730822111IN
0x0D119Fab...5e45637c5
0 ETH0.0005982414.16205365
Transfer211224782024-11-05 15:55:113 hrs ago1730822111IN
0x0D119Fab...5e45637c5
0 ETH0.0005982414.16205365
Release211223532024-11-05 15:30:114 hrs ago1730820611IN
0x0D119Fab...5e45637c5
0 ETH0.002023122.86072456
Transfer210729752024-10-29 18:06:117 days ago1730225171IN
0x0D119Fab...5e45637c5
0 ETH0.0005674113.43604669
Transfer210729752024-10-29 18:06:117 days ago1730225171IN
0x0D119Fab...5e45637c5
0 ETH0.0005675713.43600611
Transfer210729752024-10-29 18:06:117 days ago1730225171IN
0x0D119Fab...5e45637c5
0 ETH0.0005675713.43600611
Release210721962024-10-29 15:30:117 days ago1730215811IN
0x0D119Fab...5e45637c5
0 ETH0.00116813.1982105
Transfer210218512024-10-22 14:55:1114 days ago1729608911IN
0x0D119Fab...5e45637c5
0 ETH0.0006987816.54211303
Transfer210218512024-10-22 14:55:1114 days ago1729608911IN
0x0D119Fab...5e45637c5
0 ETH0.0006987816.54211303
Transfer210218512024-10-22 14:55:1114 days ago1729608911IN
0x0D119Fab...5e45637c5
0 ETH0.0006985816.54211303
Release210217262024-10-22 14:30:1114 days ago1729607411IN
0x0D119Fab...5e45637c5
0 ETH0.0029430633.25615262
Transfer209716942024-10-15 14:55:1121 days ago1729004111IN
0x0D119Fab...5e45637c5
0 ETH0.0014448934.21406766
Transfer209716942024-10-15 14:55:1121 days ago1729004111IN
0x0D119Fab...5e45637c5
0 ETH0.001445334.21396434
Transfer209716942024-10-15 14:55:1121 days ago1729004111IN
0x0D119Fab...5e45637c5
0 ETH0.001445334.21396434
Release209715712024-10-15 14:30:1121 days ago1729002611IN
0x0D119Fab...5e45637c5
0 ETH0.0029442933.26998248
Transfer209216862024-10-08 15:13:5928 days ago1728400439IN
0x0D119Fab...5e45637c5
0 ETH0.0012704730.07549842
Transfer209216862024-10-08 15:13:5928 days ago1728400439IN
0x0D119Fab...5e45637c5
0 ETH0.0012704730.07549842
Transfer209216862024-10-08 15:13:5928 days ago1728400439IN
0x0D119Fab...5e45637c5
0 ETH0.0012701230.07558924
Release209214672024-10-08 14:30:1128 days ago1728397811IN
0x0D119Fab...5e45637c5
0 ETH0.0031610535.71936591
Transfer208716392024-10-01 15:48:2335 days ago1727797703IN
0x0D119Fab...5e45637c5
0 ETH0.001118426.475503
Transfer208716392024-10-01 15:48:2335 days ago1727797703IN
0x0D119Fab...5e45637c5
0 ETH0.001118426.475503
Transfer208716392024-10-01 15:48:2335 days ago1727797703IN
0x0D119Fab...5e45637c5
0 ETH0.0011180926.47558296
Release208712512024-10-01 14:30:1135 days ago1727793011IN
0x0D119Fab...5e45637c5
0 ETH0.0019445821.97346834
Transfer208211892024-09-24 14:55:1142 days ago1727189711IN
0x0D119Fab...5e45637c5
0 ETH0.0015270836.15005496
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ERC20

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-19
*/

pragma solidity 0.8.0;

/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
    /**
    * @dev Returns the amount of tokens in existence.
    */
    function totalSupply() external view returns (uint256);

    /**
    * @dev Returns the 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 Returns the bep token owner.
    */
    function getOwner() external view returns (address);

    /**
    * @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);
}

/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

/**
* @dev Contract module which provides a manager access control mechanism, where
* there is owner and manager, that can be granted exclusive access to
* specific functions.
*
* Both owner and manager accounts need to be specified when deploying the contract. This
* can later be changed with {setOwner} and {setManager}.
*
* This module is used through inheritance. Modifiers `onlyOwner` and `ownerOrManager`
* will be available, which can be applied to your functions to restrict their use.
*/
abstract contract Managed is Context
{
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event ManagementTransferred(address indexed previousManager, address indexed newManager);

    address private _owner;
    address private _manager;

    /**
    * @dev Initializes the contract, setting owner and manager.
    */
    constructor(address owner_, address manager_)
    {
        require(owner_ != address(0), "Owner address can't be a zero address");
        require(manager_ != address(0), "Manager address can't be a zero address");

        _setOwner(owner_);
        _setManager(manager_);
    }

    /**
    * @dev Returns the address of the current owner.
    */
    function owner() public view returns (address)
    { return _owner; }

    /**
    * @dev Returns the address of the current manager.
    */
    function manager() public view returns (address)
    { return _manager; }

    /**
    * @dev Transfers owner permissions to a new account (`newOwner`).
    * Can only be called by owner.
    */
    function setOwner(address newOwner) external onlyOwner
    {
        require(newOwner != address(0), "Managed: new owner can't be zero address");
        _setOwner(newOwner);
    }

    /**
    * @dev Transfers manager permissions to a new account (`newManager`).
    * Can only be called by owner.
    */
    function setManager(address newManager) external onlyOwner
    {
        require(newManager != address(0), "Managed: new manager can't be zero address");
        _setManager(newManager);
    }

    /**
    * @dev Throws if called by any account other than the owner.
    */
    modifier onlyOwner()
    {
        require(_msgSender() == _owner, "Managed: caller is not the owner");
        _;
    }

    /**
    * @dev Throws if called by any account other than owner or manager.
    */
    modifier ownerOrManager()
    {
        require(_msgSender() == _owner || _msgSender() == _manager, "Managed: caller is not the owner or manager");
        _;
    }

    /**
    * @dev Transfers owner permissions to a new account (`newOwner`).
    * Internal function without access restriction.
    */
    function _setOwner(address newOwner) internal
    {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }

    /**
    * @dev Transfers manager permissions to a new account (`newManager`).
    * Internal function without access restriction.
    */
    function _setManager(address newManager) internal
    {
        address oldManager = _manager;
        _manager = newManager;
        emit ManagementTransferred(oldManager, newManager);
    }
}

/**
* @dev Contract module which provides a locking mechanism that allows
* a total token lock, or lock of a specific address.
*
* This module is used through inheritance. Modifier `isUnlocked`
* will be available, which can be applied to your functions to restrict their use.
*/
abstract contract Lockable is Managed
{
    event AddressLockChanged(address indexed addr, bool newLock);
    event TokenLockChanged(bool newLock);

    mapping(address => bool) private _addressLocks;
    bool private _locked;

    /**
    * @dev Completely locks any transfers of the token.
    * Can only be called by owner.
    */
    function lockToken() external onlyOwner
    {
        _locked = true;
        emit TokenLockChanged(true);
    }

    /**
    * @dev Completely unlocks any transfers of the token.
    * Can only be called by owner.
    */
    function unlockToken() external onlyOwner
    {
        _locked = false;
        emit TokenLockChanged(false);
    }

    /**
    * @dev Return whether the token is currently locked.
    */
    function isLocked() public view returns (bool)
    { return _locked; }

    /**
    * @dev Throws if a function is called while the token is locked.
    */
    modifier isUnlocked()
    {
        require(!_locked, "All token transfers are currently locked");
        _;
    }

    /**
    * @dev Completely locks sending and receiving of token for a specific address.
    * Can only be called by owner or manager
    */
    function lockAddress(address addr) external onlyOwner
    {
        _addressLocks[addr] = true;
        emit AddressLockChanged(addr, true);
    }

    /**
    * @dev Completely unlocks sending and receiving of token for a specific address.
    * Can only be called by owner or manager
    */
    function unlockAddress(address addr) external onlyOwner
    {
        _addressLocks[addr] = false;
        emit AddressLockChanged(addr, false);
    }

    /**
    * @dev Returns whether the account (`addr`) is currently locked.
    */
    function isAddressLocked(address addr) public view returns (bool)
    { return _addressLocks[addr]; }
}

/**
* @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, Managed, Lockable
{
    event Burn(address indexed from, uint256 amount);
    event Release(address indexed to1, address indexed to2, address indexed to3, uint256 amount);
    event Halving(uint256 oldReleaseAmount, uint256 newReleaseAmount);
    event ReleaseAddressChanged(address indexed oldAddress, address indexed newAddress);
    event BurnApproval(address indexed owner, address indexed spender, uint256 value);

    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => mapping(address => uint256)) private _burnAllowances;

    uint256 private _totalSupply;
    string private _name;
    string private _symbol;
    uint8 private immutable _decimals;

    uint256 private _releaseAmount;
    uint256 private _nextReleaseDate;
    uint256 private _nextReducementDate;
    address private _releaseAddress1;
    address private _releaseAddress2;
    address private _releaseAddress3;

    uint256 private constant _week = 600000; // 10 000 minutes
    uint256 private constant _4years = 126000000; // 2 100 000 minutes

    /**
    * @dev Sets the values for {owner}, {manager} and {initialDepositAddress}.
    *
    * Sends first released amount to the {initialDepositAddress1, initialDepositAddress2, initialDepositAddress3}, and locks the remaining supply within contract.
    *
    * The default value of {decimals} is 18. To select a different value for
    * {decimals} you should overload it.
    *
    * All values for token parameters are immutable: they can only be set once during
    * construction.
    */
    constructor(string memory name_, string memory symbol_, uint8 decimals_, address owner_, address manager_, address initialDepositAddress1, address initialDepositAddress2, address initialDepositAddress3) Managed(owner_, manager_)
    {
        require(initialDepositAddress1 != address(0), "Initial release address can't be a zero address");
        require(initialDepositAddress2 != address(0), "Initial release address can't be a zero address");
        require(initialDepositAddress3 != address(0), "Initial release address can't be a zero address");
        require(initialDepositAddress1 != initialDepositAddress2, "Initial addresses can't be the same");
        require(initialDepositAddress2 != initialDepositAddress3, "Initial addresses can't be the same");
        require(initialDepositAddress3 != initialDepositAddress1, "Initial addresses can't be the same");

        _name = name_;
        _symbol = symbol_;
        _decimals = decimals_;

        _totalSupply = 21000000 * uint256(10**decimals_);
        _releaseAmount = 50000 * uint256(10**decimals_);

        _nextReleaseDate = block.timestamp + _week;
        _nextReducementDate = block.timestamp + _4years;

        _balances[address(this)] = _totalSupply - _releaseAmount;
        emit Transfer(address(0), address(this), _balances[address(this)]);

        _releaseAddress1 = initialDepositAddress1;
        _releaseAddress2 = initialDepositAddress2;
        _releaseAddress3 = initialDepositAddress3;

        _balances[initialDepositAddress1] = _releaseAmount*72/100;
        _balances[initialDepositAddress2] = _releaseAmount*8/100;
        _balances[initialDepositAddress3] = _releaseAmount*20/100;

        emit Transfer(address(0), initialDepositAddress1, _balances[initialDepositAddress1]);
        emit Transfer(address(0), initialDepositAddress2, _balances[initialDepositAddress2]);
        emit Transfer(address(0), initialDepositAddress3, _balances[initialDepositAddress3]);
        emit Release(initialDepositAddress1, initialDepositAddress2, initialDepositAddress3, _releaseAmount);
    }

    /**
    * @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 _decimals;
    }

    /**
    * @dev See {IERC20-getOwner}.
    */
    function getOwner() public view virtual override returns (address)
    { return owner(); }

    /**
    * @dev See {IERC20-totalSupply}.
    */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
    * @dev Returns real current supply without the locked tokens
    */
    function currentSupply() view public returns(uint256) {
        return _totalSupply - _balances[address(this)];
    }


    /**
    * @dev See {IERC20-balanceOf}.
    */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
    * @dev See {IERC20-transfer}.
    *
    * Requirements:
    *
    * - the caller must have an available balance of at least `amount`.
    */
    function transfer(address recipient, uint256 amount) external 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];
    }

    function burnAllowance(address owner, address spender) public view returns (uint256) {
        return _burnAllowances[owner][spender];
    }

    /**
    * @dev See {IERC20-approve}.
    *
    * Requirements:
    *
    * - `spender` cannot be the zero address.
    */
    function approve(address spender, uint256 amount) external virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
    * Requirements:
    *
    * - `spender` cannot be the zero address.
    */
    function burnApprove(address spender, uint256 amount) external returns (bool) {
        _burnApprove(_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) external 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 Destroys `amount` tokens from the caller.
    *
    * See {ERC20-_burn}.
    */
    function burn(uint256 amount) external virtual
    { _burn(_msgSender(), amount); }

    /**
    * @dev Destroys `amount` tokens from `account`, deducting from the caller's
    * allowance.
    *
    * See {ERC20-_burn} and {ERC20-allowance}.
    *
    * Requirements:
    *
    * - the caller must have burnAllowance for `accounts`'s tokens of at least
    * `amount`.
    */
    function burnFrom(address account, uint256 amount) external virtual
    {
        uint256 currentBurnAllowance = burnAllowance(account, _msgSender());
        require(currentBurnAllowance >= amount, "ERC20: burn amount exceeds allowance");
        unchecked {
            _burnApprove(account, _msgSender(), currentBurnAllowance - amount);
        }
        _burn(account, amount);
    }

    /**
    * @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) external virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    /**
    * @dev Atomically increases the burnAllowance granted to `spender` by the caller.
    *
    * Requirements:
    *
    * - `spender` cannot be the zero address.
    */
    function increaseBurnAllowance(address spender, uint256 addedValue) external virtual returns (bool) {
        _burnApprove(_msgSender(), spender, _burnAllowances[_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) external 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 Atomically decreases the burnAllowance granted to `spender` by the caller.

    *
    * Emits an {BurnApproval} event indicating the updated burnAllowance.
    *
    * Requirements:
    *
    * - `spender` cannot be the zero address.
    * - `spender` must have allowance for the caller of at least
    * `subtractedValue`.
    */
    function decreaseBurnAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) {
        uint256 currentBurnAllowance = _burnAllowances[_msgSender()][spender];
        require(currentBurnAllowance >= subtractedValue, "ERC20: decreased burnAllowance below zero");
        unchecked {
            _burnApprove(_msgSender(), spender, currentBurnAllowance - subtractedValue);
        }

        return true;
    }
    /**
    * @dev Sets {_releaseAddress1} to {newReleaseAddress}.
    * Emits a {ReleaseAddressChanged} event containing old and a new release addresses.
    */
    function setReleaseAddress1(address newReleaseAddress) external onlyOwner
    {
        require(newReleaseAddress != address(0), "New release address can't be a zero address");
        require(newReleaseAddress != _releaseAddress1, "New release address can't be same as _releaseAddress1");
        require(newReleaseAddress != _releaseAddress2, "New release address can't be same as _releaseAddress2");
        require(newReleaseAddress != _releaseAddress3, "New release address can't be same as _releaseAddress3");

        address oldAddress = _releaseAddress1;
        _releaseAddress1 = newReleaseAddress;
        emit ReleaseAddressChanged(oldAddress, _releaseAddress1);
    }
    /**
    * @dev Sets {_releaseAddress2} to {newReleaseAddress}.
    *
    * Emits a {ReleaseAddressChanged} event containing old and a new release addresses.
    */
    function setReleaseAddress2(address newReleaseAddress) external onlyOwner
    {
        require(newReleaseAddress != address(0), "New release address can't be a zero address");
        require(newReleaseAddress != _releaseAddress1, "New release address can't be same as _releaseAddress1");
        require(newReleaseAddress != _releaseAddress2, "New release address can't be same as _releaseAddress2");
        require(newReleaseAddress != _releaseAddress3, "New release address can't be same as _releaseAddress3");

        address oldAddress = _releaseAddress2;
        _releaseAddress2 = newReleaseAddress;
        emit ReleaseAddressChanged(oldAddress, _releaseAddress2);
    }

    /**
* @dev Sets {_releaseAddress3} to {newReleaseAddress}.
    *
    * Emits a {ReleaseAddressChanged} event containing old and a new release addresses.
    */
    function setReleaseAddress3(address newReleaseAddress) external onlyOwner
    {
        require(newReleaseAddress != address(0), "New release address can't be a zero address");
        require(newReleaseAddress != _releaseAddress1, "New release address can't be same as _releaseAddress1");
        require(newReleaseAddress != _releaseAddress2, "New release address can't be same as _releaseAddress2");
        require(newReleaseAddress != _releaseAddress3, "New release address can't be same as _releaseAddress3");

        address oldAddress = _releaseAddress3;
        _releaseAddress3 = newReleaseAddress;
        emit ReleaseAddressChanged(oldAddress, _releaseAddress3);
    }

    /**
    * @dev Calculates and releases new coins into circulation.
    * If multiple weeks have passed, releases all the coins that should be
    * released within those weeks.
    *
    * Emits a {Release} event containing the address {_releaseAddress1, _releaseAddress2, _releaseAddress3} the coins were released to,
    * and the amount {toRelease} of coins the function released.
    */
    function release() external ownerOrManager
    {
        require(block.timestamp > _nextReleaseDate, "Next coin release is not yet scheduled");
        require(balanceOf(address(this)) > 0, "There are no more coins to release");

        uint256 toRelease = 0;
        uint256 currentRelease = 0;

        while((currentRelease = _calculateReleaseAmount()) > 0)
        { toRelease += currentRelease; }

        _transfer(address(this), _releaseAddress1, toRelease*72/100);
        _transfer(address(this), _releaseAddress2, toRelease*8/100);
        _transfer(address(this), _releaseAddress3, toRelease*20/100);
        emit Release(_releaseAddress1, _releaseAddress2, _releaseAddress3, toRelease);
    }

    /**
    * @dev Calculates the exact amount of coins that should be released for one release cycle.
    * If the next release will be after the halving date, it also calculates a new {_releaseAmount}
    * for future releases.
    *
    * Emits a {Halving} event if halving happens, containing the old release amount {oldReleaseAmount},
    * and new release amount {_releaseAmount}
    */
    function _calculateReleaseAmount() internal returns (uint256)
    {
        if(block.timestamp < _nextReleaseDate || balanceOf(address(this)) == 0)
            return 0;

        uint256 amount = _releaseAmount > balanceOf(address(this)) ? balanceOf(address(this)) : _releaseAmount;

        _nextReleaseDate += _week;
        if(_nextReleaseDate >= _nextReducementDate)
        {
            _nextReducementDate += _4years;

            uint256 oldReleaseAmount = _releaseAmount;
            _releaseAmount = _releaseAmount / 2;

            emit Halving(oldReleaseAmount, _releaseAmount);
        }

        return amount;
    }

    /**
    * @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.
    *
    * If the `recipient` address is zero address, calls {_burn} instead.
    *
    * Emits a {Transfer} event.
    *
    * Requirements:
    *
    * - `sender` cannot be the zero address.
    * - `sender` must have an available balance of at least `amount`.
    */
    function _transfer(address sender, address recipient, uint256 amount) internal isUnlocked virtual
    {
        require(recipient != address(0), "ERC20: transfer to zero address");
        require(sender != address(0), "ERC20: transfer from the zero address");

        require(!isAddressLocked(sender), "Sender address is currently locked and can't send funds");
        require(!isAddressLocked(recipient), "Recipient address is currently locked and can't receive funds");

        require(_balances[sender] >= amount, "ERC20: transfer amount exceeds available balance");

        _balances[sender] -= amount;
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, 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 Sets `amount` as the allowance of `spender` over the `owner` s tokens.
    *
    * Emits an {BurnApproval} event.
    *
    * Requirements:
    *
    * - `owner` cannot be the zero address.
    * - `spender` cannot be the zero address.
    */
    function _burnApprove(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "burnApprove from the zero address");
        require(spender != address(0), "burnApprove to the zero address");

        _burnAllowances[owner][spender] = amount;
        emit BurnApproval(owner, spender, amount);
    }

    /**
    * @dev Destroys `amount` tokens from `account`, reducing the
    * total supply.
    *
    * Emits a {Transfer} event with `to` set to the zero address.
    * Emits a {Burn} event with `amount` burned.
    *
    * Requirements:
    *
    * - `account` cannot be the zero address.
    * - `account` must have at least `amount` tokens.
    * - `account` can't be locked.
    */
    function _burn(address account, uint256 amount) internal isUnlocked virtual
    {
        require(account != address(0), "ERC20: burn from the zero address");

        require(!isAddressLocked(account), "Sender address is currently locked and can't burn funds");

        require(_balances[account] >= amount, "ERC20: burn amount exceeds available balance");

        _balances[account] -= amount;
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);
        emit Burn(account, amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint8","name":"decimals_","type":"uint8"},{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"manager_","type":"address"},{"internalType":"address","name":"initialDepositAddress1","type":"address"},{"internalType":"address","name":"initialDepositAddress2","type":"address"},{"internalType":"address","name":"initialDepositAddress3","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"bool","name":"newLock","type":"bool"}],"name":"AddressLockChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Burn","type":"event"},{"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":"BurnApproval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldReleaseAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newReleaseAmount","type":"uint256"}],"name":"Halving","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousManager","type":"address"},{"indexed":true,"internalType":"address","name":"newManager","type":"address"}],"name":"ManagementTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to1","type":"address"},{"indexed":true,"internalType":"address","name":"to2","type":"address"},{"indexed":true,"internalType":"address","name":"to3","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Release","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"ReleaseAddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"newLock","type":"bool"}],"name":"TokenLockChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"burnAllowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnApprove","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentSupply","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":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseBurnAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseBurnAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isAddressLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"lockAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lockToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newManager","type":"address"}],"name":"setManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newReleaseAddress","type":"address"}],"name":"setReleaseAddress1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newReleaseAddress","type":"address"}],"name":"setReleaseAddress2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newReleaseAddress","type":"address"}],"name":"setReleaseAddress3","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"addr","type":"address"}],"name":"unlockAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unlockToken","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a06040523480156200001157600080fd5b506040516200588038038062005880833981810160405281019062000037919062000cf0565b8484600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620000ac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000a39062000f96565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156200011f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001169062000fb8565b60405180910390fd5b620001308262000a1660201b60201c565b620001418162000ada60201b60201c565b5050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620001b6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001ad9062000ffc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000229576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002209062000ffc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156200029c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002939062000ffc565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156200030e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003059062000fda565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000380576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003779062000fda565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415620003f2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003e99062000fda565b60405180910390fd5b87600890805190602001906200040a92919062000ba0565b5086600990805190602001906200042392919062000ba0565b508560ff1660808160ff1660f81b8152505085600a620004449190620011a3565b6301406f40620004559190620012e0565b60078190555085600a6200046a9190620011a3565b61c350620004799190620012e0565b600a81905550620927c042620004909190620010b3565b600b819055506307829b8042620004a89190620010b3565b600c81905550600a54600754620004c0919062001341565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051620005a291906200101e565b60405180910390a382600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060646048600a54620006809190620012e0565b6200068c919062001110565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060646008600a54620006e29190620012e0565b620006ee919062001110565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060646014600a54620007449190620012e0565b62000750919062001110565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040516200083291906200101e565b60405180910390a38173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051620008d991906200101e565b60405180910390a38073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040516200098091906200101e565b60405180910390a38073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f38591994c3ae49552708bc1833f4ccb313aa9d4e43514dea62839b3e4a91d4c5600a5460405162000a0091906200101e565b60405180910390a4505050505050505062001530565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f80f15e9dbc60884fdb59fb8ed4fc48a9a689e028f055e893ed45ca5be67c5c8560405160405180910390a35050565b82805462000bae90620013fd565b90600052602060002090601f01602090048101928262000bd2576000855562000c1e565b82601f1062000bed57805160ff191683800117855562000c1e565b8280016001018555821562000c1e579182015b8281111562000c1d57825182559160200191906001019062000c00565b5b50905062000c2d919062000c31565b5090565b5b8082111562000c4c57600081600090555060010162000c32565b5090565b600062000c6762000c61846200106f565b6200103b565b90508281526020810184848401111562000c8057600080fd5b62000c8d848285620013c7565b509392505050565b60008151905062000ca681620014fc565b92915050565b600082601f83011262000cbe57600080fd5b815162000cd084826020860162000c50565b91505092915050565b60008151905062000cea8162001516565b92915050565b600080600080600080600080610100898b03121562000d0e57600080fd5b600089015167ffffffffffffffff81111562000d2957600080fd5b62000d378b828c0162000cac565b985050602089015167ffffffffffffffff81111562000d5557600080fd5b62000d638b828c0162000cac565b975050604062000d768b828c0162000cd9565b965050606062000d898b828c0162000c95565b955050608062000d9c8b828c0162000c95565b94505060a062000daf8b828c0162000c95565b93505060c062000dc28b828c0162000c95565b92505060e062000dd58b828c0162000c95565b9150509295985092959890939650565b600062000df4602583620010a2565b91507f4f776e657220616464726573732063616e27742062652061207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600062000e5c602783620010a2565b91507f4d616e6167657220616464726573732063616e27742062652061207a65726f2060008301527f61646472657373000000000000000000000000000000000000000000000000006020830152604082019050919050565b600062000ec4602383620010a2565b91507f496e697469616c206164647265737365732063616e277420626520746865207360008301527f616d6500000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600062000f2c602f83620010a2565b91507f496e697469616c2072656c6561736520616464726573732063616e277420626560008301527f2061207a65726f206164647265737300000000000000000000000000000000006020830152604082019050919050565b62000f9081620013b0565b82525050565b6000602082019050818103600083015262000fb18162000de5565b9050919050565b6000602082019050818103600083015262000fd38162000e4d565b9050919050565b6000602082019050818103600083015262000ff58162000eb5565b9050919050565b60006020820190508181036000830152620010178162000f1d565b9050919050565b600060208201905062001035600083018462000f85565b92915050565b6000604051905081810181811067ffffffffffffffff82111715620010655762001064620014c0565b5b8060405250919050565b600067ffffffffffffffff8211156200108d576200108c620014c0565b5b601f19601f8301169050602081019050919050565b600082825260208201905092915050565b6000620010c082620013b0565b9150620010cd83620013b0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001105576200110462001433565b5b828201905092915050565b60006200111d82620013b0565b91506200112a83620013b0565b9250826200113d576200113c62001462565b5b828204905092915050565b6000808291508390505b60018511156200119a5780860481111562001172576200117162001433565b5b6001851615620011825780820291505b80810290506200119285620014ef565b945062001152565b94509492505050565b6000620011b082620013b0565b9150620011bd83620013ba565b9250620011ec7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620011f4565b905092915050565b600082620012065760019050620012d9565b81620012165760009050620012d9565b81600181146200122f57600281146200123a5762001270565b6001915050620012d9565b60ff8411156200124f576200124e62001433565b5b8360020a91508482111562001269576200126862001433565b5b50620012d9565b5060208310610133831016604e8410600b8410161715620012aa5782820a905083811115620012a457620012a362001433565b5b620012d9565b620012b9848484600162001148565b92509050818404811115620012d357620012d262001433565b5b81810290505b9392505050565b6000620012ed82620013b0565b9150620012fa83620013b0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001336576200133562001433565b5b828202905092915050565b60006200134e82620013b0565b91506200135b83620013b0565b92508282101562001371576200137062001433565b5b828203905092915050565b6000620013898262001390565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015620013e7578082015181840152602081019050620013ca565b83811115620013f7576000848401525b50505050565b600060028204905060018216806200141657607f821691505b602082108114156200142d576200142c62001491565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008160011c9050919050565b62001507816200137c565b81146200151357600080fd5b50565b6200152181620013ba565b81146200152d57600080fd5b50565b60805160f81c6143316200154f60003960006112aa01526143316000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c8063481c6a751161011a578063a457c2d7116100ad578063bca7a9e21161007c578063bca7a9e2146105c6578063c576e4a4146105d0578063d0ebdbe7146105ec578063dd62ed3e14610608578063e52e9f1514610638576101fb565b8063a457c2d71461052c578063a4e2d6341461055c578063a9059cbb1461057a578063b7eb5e0a146105aa576101fb565b806386d1a69f116100e957806386d1a69f146104c8578063893d20e8146104d25780638da5cb5b146104f057806395d89b411461050e576101fb565b8063481c6a751461044057806370a082311461045e578063771282f61461048e57806379cc6790146104ac576101fb565b806323b872dd116101925780633336dbf3116101615780633336dbf3146103a857806334a90d02146103d857806339509351146103f457806342966c6814610424576101fb565b806323b872dd1461032257806325541297146103525780632d787b951461036e578063313ce5671461038a576101fb565b80631641aa96116101ce5780631641aa961461029a57806318160ddd146102ca57806318a24b5b146102e85780631e50cfbd146102f2576101fb565b806306fdde0314610200578063095ea7b31461021e57806313af40351461024e5780631525ee4e1461026a575b600080fd5b610208610668565b6040516102159190613c63565b60405180910390f35b61023860048036038101906102339190613103565b6106fa565b6040516102459190613c48565b60405180910390f35b6102686004803603810190610263919061304f565b610718565b005b610284600480360381019061027f9190613078565b610829565b6040516102919190613fe5565b60405180910390f35b6102b460048036038101906102af9190613103565b6108b0565b6040516102c19190613c48565b60405180910390f35b6102d26108ce565b6040516102df9190613fe5565b60405180910390f35b6102f06108d8565b005b61030c60048036038101906103079190613103565b6109c2565b6040516103199190613c48565b60405180910390f35b61033c600480360381019061033791906130b4565b610a6e565b6040516103499190613c48565b60405180910390f35b61036c6004803603810190610367919061304f565b610b66565b005b6103886004803603810190610383919061304f565b610f06565b005b6103926112a6565b60405161039f9190614029565b60405180910390f35b6103c260048036038101906103bd9190613103565b6112ce565b6040516103cf9190613c48565b60405180910390f35b6103f260048036038101906103ed919061304f565b6113b9565b005b61040e60048036038101906104099190613103565b6114f8565b60405161041b9190613c48565b60405180910390f35b61043e6004803603810190610439919061313f565b6115a4565b005b6104486115b8565b6040516104559190613c2d565b60405180910390f35b6104786004803603810190610473919061304f565b6115e2565b6040516104859190613fe5565b60405180910390f35b61049661162b565b6040516104a39190613fe5565b60405180910390f35b6104c660048036038101906104c19190613103565b61167f565b005b6104d06116fa565b005b6104da611a5c565b6040516104e79190613c2d565b60405180910390f35b6104f8611a6b565b6040516105059190613c2d565b60405180910390f35b610516611a94565b6040516105239190613c63565b60405180910390f35b61054660048036038101906105419190613103565b611b26565b6040516105539190613c48565b60405180910390f35b610564611c11565b6040516105719190613c48565b60405180910390f35b610594600480360381019061058f9190613103565b611c28565b6040516105a19190613c48565b60405180910390f35b6105c460048036038101906105bf919061304f565b611c46565b005b6105ce611d85565b005b6105ea60048036038101906105e5919061304f565b611e6f565b005b6106066004803603810190610601919061304f565b61220f565b005b610622600480360381019061061d9190613078565b612320565b60405161062f9190613fe5565b60405180910390f35b610652600480360381019061064d919061304f565b6123a7565b60405161065f9190613c48565b60405180910390f35b606060088054610677906141fd565b80601f01602080910402602001604051908101604052809291908181526020018280546106a3906141fd565b80156106f05780601f106106c5576101008083540402835291602001916106f0565b820191906000526020600020905b8154815290600101906020018083116106d357829003601f168201915b5050505050905090565b600061070e6107076123fd565b8484612405565b6001905092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166107576123fd565b73ffffffffffffffffffffffffffffffffffffffff16146107ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a490613e05565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561081d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081490613e65565b60405180910390fd5b610826816125d0565b50565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60006108c46108bd6123fd565b8484612694565b6001905092915050565b6000600754905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166109176123fd565b73ffffffffffffffffffffffffffffffffffffffff161461096d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096490613e05565b60405180910390fd5b6000600360006101000a81548160ff0219169083151502179055507f74e75687cb4b4a63d93a397950b5ded4054b5b45e48b215162a5efb3162465cd60006040516109b89190613c48565b60405180910390a1565b6000610a646109cf6123fd565b8484600660006109dd6123fd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a5f9190614060565b612694565b6001905092915050565b6000610a7b84848461285f565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ac66123fd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3d90613de5565b60405180910390fd5b610b5a85610b526123fd565b858403612405565b60019150509392505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610ba56123fd565b73ffffffffffffffffffffffffffffffffffffffff1614610bfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf290613e05565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6290613ec5565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610cfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf390613cc5565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8490613d85565b60405180910390fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1590613f25565b60405180910390fd5b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f0822d2eff5e397b947a8e3922f27065290b50e08d40f83fa8f3b72c41aa7e6f560405160405180910390a35050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610f456123fd565b73ffffffffffffffffffffffffffffffffffffffff1614610f9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9290613e05565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561100b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100290613ec5565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561109c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109390613cc5565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561112d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112490613d85565b60405180910390fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b590613f25565b60405180910390fd5b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f0822d2eff5e397b947a8e3922f27065290b50e08d40f83fa8f3b72c41aa7e6f560405160405180910390a35050565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b600080600660006112dd6123fd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561139a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139190613da5565b60405180910390fd5b6113ae6113a56123fd565b85858403612694565b600191505092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166113f86123fd565b73ffffffffffffffffffffffffffffffffffffffff161461144e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144590613e05565b60405180910390fd5b6001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f18e3f5e6e436b491427e1abe846e624b5846cd3bad2f3b48ad174ec2eb1431d960016040516114ed9190613c48565b60405180910390a250565b600061159a6115056123fd565b8484600560006115136123fd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115959190614060565b612405565b6001905092915050565b6115b56115af6123fd565b82612bb9565b50565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460075461167a9190614141565b905090565b60006116928361168d6123fd565b610829565b9050818110156116d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ce90613e45565b60405180910390fd5b6116eb836116e36123fd565b848403612694565b6116f58383612bb9565b505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166117396123fd565b73ffffffffffffffffffffffffffffffffffffffff1614806117af5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166117976123fd565b73ffffffffffffffffffffffffffffffffffffffff16145b6117ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e590613f85565b60405180910390fd5b600b544211611832576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182990613e25565b60405180910390fd5b600061183d306115e2565b1161187d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187490613c85565b60405180910390fd5b6000805b600061188b612e6b565b91508111156118a75780826118a09190614060565b9150611881565b6118ec30600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660646048866118dd91906140e7565b6118e791906140b6565b61285f565b61193130600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16606460088661192291906140e7565b61192c91906140b6565b61285f565b61197630600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16606460148661196791906140e7565b61197191906140b6565b61285f565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f38591994c3ae49552708bc1833f4ccb313aa9d4e43514dea62839b3e4a91d4c585604051611a509190613fe5565b60405180910390a45050565b6000611a66611a6b565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060098054611aa3906141fd565b80601f0160208091040260200160405190810160405280929190818152602001828054611acf906141fd565b8015611b1c5780601f10611af157610100808354040283529160200191611b1c565b820191906000526020600020905b815481529060010190602001808311611aff57829003601f168201915b5050505050905090565b60008060056000611b356123fd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611bf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be990613fc5565b60405180910390fd5b611c06611bfd6123fd565b85858403612405565b600191505092915050565b6000600360009054906101000a900460ff16905090565b6000611c3c611c356123fd565b848461285f565b6001905092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611c856123fd565b73ffffffffffffffffffffffffffffffffffffffff1614611cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd290613e05565b60405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f18e3f5e6e436b491427e1abe846e624b5846cd3bad2f3b48ad174ec2eb1431d96000604051611d7a9190613c48565b60405180910390a250565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611dc46123fd565b73ffffffffffffffffffffffffffffffffffffffff1614611e1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1190613e05565b60405180910390fd5b6001600360006101000a81548160ff0219169083151502179055507f74e75687cb4b4a63d93a397950b5ded4054b5b45e48b215162a5efb3162465cd6001604051611e659190613c48565b60405180910390a1565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611eae6123fd565b73ffffffffffffffffffffffffffffffffffffffff1614611f04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efb90613e05565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6b90613ec5565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612005576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffc90613cc5565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208d90613d85565b60405180910390fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612127576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211e90613f25565b60405180910390fd5b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f0822d2eff5e397b947a8e3922f27065290b50e08d40f83fa8f3b72c41aa7e6f560405160405180910390a35050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661224e6123fd565b73ffffffffffffffffffffffffffffffffffffffff16146122a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229b90613e05565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230b90613d05565b60405180910390fd5b61231d81612f5f565b50565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246c90613f45565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124dc90613ce5565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125c39190613fe5565b60405180910390a3505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612704576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fb90613d25565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276b90613ea5565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f7cf97656de28b2f9c34f8f8f50ddae38f357b7ed1962a845f2246640f1a9d811836040516128529190613fe5565b60405180910390a3505050565b600360009054906101000a900460ff16156128af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a690613ca5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561291f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291690613d45565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561298f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298690613f05565b60405180910390fd5b612998836123a7565b156129d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129cf90613e85565b60405180910390fd5b6129e1826123a7565b15612a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1890613dc5565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9a90613d65565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612af29190614141565b9250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b489190614060565b925050819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612bac9190613fe5565b60405180910390a3505050565b600360009054906101000a900460ff1615612c09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0090613ca5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7090613ee5565b60405180910390fd5b612c82826123a7565b15612cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb990613fa5565b60405180910390fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3b90613f65565b60405180910390fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d939190614141565b925050819055508060076000828254612dac9190614141565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612e119190613fe5565b60405180910390a38173ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca582604051612e5f9190613fe5565b60405180910390a25050565b6000600b54421080612e8557506000612e83306115e2565b145b15612e935760009050612f5c565b6000612e9e306115e2565b600a5411612eae57600a54612eb8565b612eb7306115e2565b5b9050620927c0600b6000828254612ecf9190614060565b92505081905550600c54600b5410612f57576307829b80600c6000828254612ef79190614060565b925050819055506000600a5490506002600a54612f1491906140b6565b600a819055507f394823b0bcaf78cd8f5876a52c05dbab91512a05f5da2a31e239a11ab66d605f81600a54604051612f4d929190614000565b60405180910390a1505b809150505b90565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f80f15e9dbc60884fdb59fb8ed4fc48a9a689e028f055e893ed45ca5be67c5c8560405160405180910390a35050565b600081359050613034816142cd565b92915050565b600081359050613049816142e4565b92915050565b60006020828403121561306157600080fd5b600061306f84828501613025565b91505092915050565b6000806040838503121561308b57600080fd5b600061309985828601613025565b92505060206130aa85828601613025565b9150509250929050565b6000806000606084860312156130c957600080fd5b60006130d786828701613025565b93505060206130e886828701613025565b92505060406130f98682870161303a565b9150509250925092565b6000806040838503121561311657600080fd5b600061312485828601613025565b92505060206131358582860161303a565b9150509250929050565b60006020828403121561315157600080fd5b600061315f8482850161303a565b91505092915050565b61317181614175565b82525050565b61318081614187565b82525050565b600061319182614044565b61319b818561404f565b93506131ab8185602086016141ca565b6131b4816142bc565b840191505092915050565b60006131cc60228361404f565b91507f546865726520617265206e6f206d6f726520636f696e7320746f2072656c656160008301527f73650000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061323260288361404f565b91507f416c6c20746f6b656e207472616e7366657273206172652063757272656e746c60008301527f79206c6f636b65640000000000000000000000000000000000000000000000006020830152604082019050919050565b600061329860358361404f565b91507f4e65772072656c6561736520616464726573732063616e27742062652073616d60008301527f65206173205f72656c65617365416464726573733100000000000000000000006020830152604082019050919050565b60006132fe60228361404f565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613364602a8361404f565b91507f4d616e616765643a206e6577206d616e616765722063616e2774206265207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b60006133ca60218361404f565b91507f6275726e417070726f76652066726f6d20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613430601f8361404f565b91507f45524332303a207472616e7366657220746f207a65726f2061646472657373006000830152602082019050919050565b600061347060308361404f565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206160008301527f7661696c61626c652062616c616e6365000000000000000000000000000000006020830152604082019050919050565b60006134d660358361404f565b91507f4e65772072656c6561736520616464726573732063616e27742062652073616d60008301527f65206173205f72656c65617365416464726573733200000000000000000000006020830152604082019050919050565b600061353c60298361404f565b91507f45524332303a20646563726561736564206275726e416c6c6f77616e6365206260008301527f656c6f77207a65726f00000000000000000000000000000000000000000000006020830152604082019050919050565b60006135a2603d8361404f565b91507f526563697069656e7420616464726573732069732063757272656e746c79206c60008301527f6f636b656420616e642063616e277420726563656976652066756e64730000006020830152604082019050919050565b600061360860288361404f565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206160008301527f6c6c6f77616e63650000000000000000000000000000000000000000000000006020830152604082019050919050565b600061366e60208361404f565b91507f4d616e616765643a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006136ae60268361404f565b91507f4e65787420636f696e2072656c65617365206973206e6f74207965742073636860008301527f6564756c656400000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061371460248361404f565b91507f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008301527f616e6365000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061377a60288361404f565b91507f4d616e616765643a206e6577206f776e65722063616e2774206265207a65726f60008301527f20616464726573730000000000000000000000000000000000000000000000006020830152604082019050919050565b60006137e060378361404f565b91507f53656e64657220616464726573732069732063757272656e746c79206c6f636b60008301527f656420616e642063616e27742073656e642066756e64730000000000000000006020830152604082019050919050565b6000613846601f8361404f565b91507f6275726e417070726f766520746f20746865207a65726f2061646472657373006000830152602082019050919050565b6000613886602b8361404f565b91507f4e65772072656c6561736520616464726573732063616e27742062652061207a60008301527f65726f20616464726573730000000000000000000000000000000000000000006020830152604082019050919050565b60006138ec60218361404f565b91507f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061395260258361404f565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006139b860358361404f565b91507f4e65772072656c6561736520616464726573732063616e27742062652073616d60008301527f65206173205f72656c65617365416464726573733300000000000000000000006020830152604082019050919050565b6000613a1e60248361404f565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a84602c8361404f565b91507f45524332303a206275726e20616d6f756e74206578636565647320617661696c60008301527f61626c652062616c616e636500000000000000000000000000000000000000006020830152604082019050919050565b6000613aea602b8361404f565b91507f4d616e616765643a2063616c6c6572206973206e6f7420746865206f776e657260008301527f206f72206d616e616765720000000000000000000000000000000000000000006020830152604082019050919050565b6000613b5060378361404f565b91507f53656e64657220616464726573732069732063757272656e746c79206c6f636b60008301527f656420616e642063616e2774206275726e2066756e64730000000000000000006020830152604082019050919050565b6000613bb660258361404f565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b613c18816141b3565b82525050565b613c27816141bd565b82525050565b6000602082019050613c426000830184613168565b92915050565b6000602082019050613c5d6000830184613177565b92915050565b60006020820190508181036000830152613c7d8184613186565b905092915050565b60006020820190508181036000830152613c9e816131bf565b9050919050565b60006020820190508181036000830152613cbe81613225565b9050919050565b60006020820190508181036000830152613cde8161328b565b9050919050565b60006020820190508181036000830152613cfe816132f1565b9050919050565b60006020820190508181036000830152613d1e81613357565b9050919050565b60006020820190508181036000830152613d3e816133bd565b9050919050565b60006020820190508181036000830152613d5e81613423565b9050919050565b60006020820190508181036000830152613d7e81613463565b9050919050565b60006020820190508181036000830152613d9e816134c9565b9050919050565b60006020820190508181036000830152613dbe8161352f565b9050919050565b60006020820190508181036000830152613dde81613595565b9050919050565b60006020820190508181036000830152613dfe816135fb565b9050919050565b60006020820190508181036000830152613e1e81613661565b9050919050565b60006020820190508181036000830152613e3e816136a1565b9050919050565b60006020820190508181036000830152613e5e81613707565b9050919050565b60006020820190508181036000830152613e7e8161376d565b9050919050565b60006020820190508181036000830152613e9e816137d3565b9050919050565b60006020820190508181036000830152613ebe81613839565b9050919050565b60006020820190508181036000830152613ede81613879565b9050919050565b60006020820190508181036000830152613efe816138df565b9050919050565b60006020820190508181036000830152613f1e81613945565b9050919050565b60006020820190508181036000830152613f3e816139ab565b9050919050565b60006020820190508181036000830152613f5e81613a11565b9050919050565b60006020820190508181036000830152613f7e81613a77565b9050919050565b60006020820190508181036000830152613f9e81613add565b9050919050565b60006020820190508181036000830152613fbe81613b43565b9050919050565b60006020820190508181036000830152613fde81613ba9565b9050919050565b6000602082019050613ffa6000830184613c0f565b92915050565b60006040820190506140156000830185613c0f565b6140226020830184613c0f565b9392505050565b600060208201905061403e6000830184613c1e565b92915050565b600081519050919050565b600082825260208201905092915050565b600061406b826141b3565b9150614076836141b3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140ab576140aa61422f565b5b828201905092915050565b60006140c1826141b3565b91506140cc836141b3565b9250826140dc576140db61425e565b5b828204905092915050565b60006140f2826141b3565b91506140fd836141b3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156141365761413561422f565b5b828202905092915050565b600061414c826141b3565b9150614157836141b3565b92508282101561416a5761416961422f565b5b828203905092915050565b600061418082614193565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156141e85780820151818401526020810190506141cd565b838111156141f7576000848401525b50505050565b6000600282049050600182168061421557607f821691505b602082108114156142295761422861428d565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b6142d681614175565b81146142e157600080fd5b50565b6142ed816141b3565b81146142f857600080fd5b5056fea264697066735822122017377a376aabc6f5d7c7d682331637e6dad1626d80fb6366748fa7b3beb5d01b64736f6c634300080000330000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000120000000000000000000000009b0330006bf03c12ad991903cabb17f4a62e71bc0000000000000000000000005a18637da07696b1e1d751fa36a4010fe759a3650000000000000000000000005e7790b25c2b4b048000e3759d4f98da0f614951000000000000000000000000b2d0f19cf2b9d3632619c2029f2cfb04bcd2c86400000000000000000000000016acecfed1dd8461de48aa09522a0e9528b07d350000000000000000000000000000000000000000000000000000000000000016486f757365206f66204d616e64656c6120546f6b656e000000000000000000000000000000000000000000000000000000000000000000000000000000000003484f4d0000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101fb5760003560e01c8063481c6a751161011a578063a457c2d7116100ad578063bca7a9e21161007c578063bca7a9e2146105c6578063c576e4a4146105d0578063d0ebdbe7146105ec578063dd62ed3e14610608578063e52e9f1514610638576101fb565b8063a457c2d71461052c578063a4e2d6341461055c578063a9059cbb1461057a578063b7eb5e0a146105aa576101fb565b806386d1a69f116100e957806386d1a69f146104c8578063893d20e8146104d25780638da5cb5b146104f057806395d89b411461050e576101fb565b8063481c6a751461044057806370a082311461045e578063771282f61461048e57806379cc6790146104ac576101fb565b806323b872dd116101925780633336dbf3116101615780633336dbf3146103a857806334a90d02146103d857806339509351146103f457806342966c6814610424576101fb565b806323b872dd1461032257806325541297146103525780632d787b951461036e578063313ce5671461038a576101fb565b80631641aa96116101ce5780631641aa961461029a57806318160ddd146102ca57806318a24b5b146102e85780631e50cfbd146102f2576101fb565b806306fdde0314610200578063095ea7b31461021e57806313af40351461024e5780631525ee4e1461026a575b600080fd5b610208610668565b6040516102159190613c63565b60405180910390f35b61023860048036038101906102339190613103565b6106fa565b6040516102459190613c48565b60405180910390f35b6102686004803603810190610263919061304f565b610718565b005b610284600480360381019061027f9190613078565b610829565b6040516102919190613fe5565b60405180910390f35b6102b460048036038101906102af9190613103565b6108b0565b6040516102c19190613c48565b60405180910390f35b6102d26108ce565b6040516102df9190613fe5565b60405180910390f35b6102f06108d8565b005b61030c60048036038101906103079190613103565b6109c2565b6040516103199190613c48565b60405180910390f35b61033c600480360381019061033791906130b4565b610a6e565b6040516103499190613c48565b60405180910390f35b61036c6004803603810190610367919061304f565b610b66565b005b6103886004803603810190610383919061304f565b610f06565b005b6103926112a6565b60405161039f9190614029565b60405180910390f35b6103c260048036038101906103bd9190613103565b6112ce565b6040516103cf9190613c48565b60405180910390f35b6103f260048036038101906103ed919061304f565b6113b9565b005b61040e60048036038101906104099190613103565b6114f8565b60405161041b9190613c48565b60405180910390f35b61043e6004803603810190610439919061313f565b6115a4565b005b6104486115b8565b6040516104559190613c2d565b60405180910390f35b6104786004803603810190610473919061304f565b6115e2565b6040516104859190613fe5565b60405180910390f35b61049661162b565b6040516104a39190613fe5565b60405180910390f35b6104c660048036038101906104c19190613103565b61167f565b005b6104d06116fa565b005b6104da611a5c565b6040516104e79190613c2d565b60405180910390f35b6104f8611a6b565b6040516105059190613c2d565b60405180910390f35b610516611a94565b6040516105239190613c63565b60405180910390f35b61054660048036038101906105419190613103565b611b26565b6040516105539190613c48565b60405180910390f35b610564611c11565b6040516105719190613c48565b60405180910390f35b610594600480360381019061058f9190613103565b611c28565b6040516105a19190613c48565b60405180910390f35b6105c460048036038101906105bf919061304f565b611c46565b005b6105ce611d85565b005b6105ea60048036038101906105e5919061304f565b611e6f565b005b6106066004803603810190610601919061304f565b61220f565b005b610622600480360381019061061d9190613078565b612320565b60405161062f9190613fe5565b60405180910390f35b610652600480360381019061064d919061304f565b6123a7565b60405161065f9190613c48565b60405180910390f35b606060088054610677906141fd565b80601f01602080910402602001604051908101604052809291908181526020018280546106a3906141fd565b80156106f05780601f106106c5576101008083540402835291602001916106f0565b820191906000526020600020905b8154815290600101906020018083116106d357829003601f168201915b5050505050905090565b600061070e6107076123fd565b8484612405565b6001905092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166107576123fd565b73ffffffffffffffffffffffffffffffffffffffff16146107ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a490613e05565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561081d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081490613e65565b60405180910390fd5b610826816125d0565b50565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60006108c46108bd6123fd565b8484612694565b6001905092915050565b6000600754905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166109176123fd565b73ffffffffffffffffffffffffffffffffffffffff161461096d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096490613e05565b60405180910390fd5b6000600360006101000a81548160ff0219169083151502179055507f74e75687cb4b4a63d93a397950b5ded4054b5b45e48b215162a5efb3162465cd60006040516109b89190613c48565b60405180910390a1565b6000610a646109cf6123fd565b8484600660006109dd6123fd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a5f9190614060565b612694565b6001905092915050565b6000610a7b84848461285f565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ac66123fd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3d90613de5565b60405180910390fd5b610b5a85610b526123fd565b858403612405565b60019150509392505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610ba56123fd565b73ffffffffffffffffffffffffffffffffffffffff1614610bfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf290613e05565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6290613ec5565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610cfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf390613cc5565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8490613d85565b60405180910390fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1590613f25565b60405180910390fd5b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f0822d2eff5e397b947a8e3922f27065290b50e08d40f83fa8f3b72c41aa7e6f560405160405180910390a35050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610f456123fd565b73ffffffffffffffffffffffffffffffffffffffff1614610f9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9290613e05565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561100b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100290613ec5565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561109c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109390613cc5565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561112d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112490613d85565b60405180910390fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b590613f25565b60405180910390fd5b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f0822d2eff5e397b947a8e3922f27065290b50e08d40f83fa8f3b72c41aa7e6f560405160405180910390a35050565b60007f0000000000000000000000000000000000000000000000000000000000000012905090565b600080600660006112dd6123fd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561139a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139190613da5565b60405180910390fd5b6113ae6113a56123fd565b85858403612694565b600191505092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166113f86123fd565b73ffffffffffffffffffffffffffffffffffffffff161461144e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144590613e05565b60405180910390fd5b6001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f18e3f5e6e436b491427e1abe846e624b5846cd3bad2f3b48ad174ec2eb1431d960016040516114ed9190613c48565b60405180910390a250565b600061159a6115056123fd565b8484600560006115136123fd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115959190614060565b612405565b6001905092915050565b6115b56115af6123fd565b82612bb9565b50565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460075461167a9190614141565b905090565b60006116928361168d6123fd565b610829565b9050818110156116d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ce90613e45565b60405180910390fd5b6116eb836116e36123fd565b848403612694565b6116f58383612bb9565b505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166117396123fd565b73ffffffffffffffffffffffffffffffffffffffff1614806117af5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166117976123fd565b73ffffffffffffffffffffffffffffffffffffffff16145b6117ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e590613f85565b60405180910390fd5b600b544211611832576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182990613e25565b60405180910390fd5b600061183d306115e2565b1161187d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187490613c85565b60405180910390fd5b6000805b600061188b612e6b565b91508111156118a75780826118a09190614060565b9150611881565b6118ec30600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660646048866118dd91906140e7565b6118e791906140b6565b61285f565b61193130600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16606460088661192291906140e7565b61192c91906140b6565b61285f565b61197630600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16606460148661196791906140e7565b61197191906140b6565b61285f565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f38591994c3ae49552708bc1833f4ccb313aa9d4e43514dea62839b3e4a91d4c585604051611a509190613fe5565b60405180910390a45050565b6000611a66611a6b565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060098054611aa3906141fd565b80601f0160208091040260200160405190810160405280929190818152602001828054611acf906141fd565b8015611b1c5780601f10611af157610100808354040283529160200191611b1c565b820191906000526020600020905b815481529060010190602001808311611aff57829003601f168201915b5050505050905090565b60008060056000611b356123fd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611bf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be990613fc5565b60405180910390fd5b611c06611bfd6123fd565b85858403612405565b600191505092915050565b6000600360009054906101000a900460ff16905090565b6000611c3c611c356123fd565b848461285f565b6001905092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611c856123fd565b73ffffffffffffffffffffffffffffffffffffffff1614611cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd290613e05565b60405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f18e3f5e6e436b491427e1abe846e624b5846cd3bad2f3b48ad174ec2eb1431d96000604051611d7a9190613c48565b60405180910390a250565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611dc46123fd565b73ffffffffffffffffffffffffffffffffffffffff1614611e1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1190613e05565b60405180910390fd5b6001600360006101000a81548160ff0219169083151502179055507f74e75687cb4b4a63d93a397950b5ded4054b5b45e48b215162a5efb3162465cd6001604051611e659190613c48565b60405180910390a1565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611eae6123fd565b73ffffffffffffffffffffffffffffffffffffffff1614611f04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efb90613e05565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6b90613ec5565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612005576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffc90613cc5565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208d90613d85565b60405180910390fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612127576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211e90613f25565b60405180910390fd5b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f0822d2eff5e397b947a8e3922f27065290b50e08d40f83fa8f3b72c41aa7e6f560405160405180910390a35050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661224e6123fd565b73ffffffffffffffffffffffffffffffffffffffff16146122a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229b90613e05565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230b90613d05565b60405180910390fd5b61231d81612f5f565b50565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246c90613f45565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124dc90613ce5565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125c39190613fe5565b60405180910390a3505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612704576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fb90613d25565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276b90613ea5565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f7cf97656de28b2f9c34f8f8f50ddae38f357b7ed1962a845f2246640f1a9d811836040516128529190613fe5565b60405180910390a3505050565b600360009054906101000a900460ff16156128af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a690613ca5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561291f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291690613d45565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561298f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298690613f05565b60405180910390fd5b612998836123a7565b156129d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129cf90613e85565b60405180910390fd5b6129e1826123a7565b15612a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1890613dc5565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9a90613d65565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612af29190614141565b9250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b489190614060565b925050819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612bac9190613fe5565b60405180910390a3505050565b600360009054906101000a900460ff1615612c09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0090613ca5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7090613ee5565b60405180910390fd5b612c82826123a7565b15612cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb990613fa5565b60405180910390fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3b90613f65565b60405180910390fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d939190614141565b925050819055508060076000828254612dac9190614141565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612e119190613fe5565b60405180910390a38173ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca582604051612e5f9190613fe5565b60405180910390a25050565b6000600b54421080612e8557506000612e83306115e2565b145b15612e935760009050612f5c565b6000612e9e306115e2565b600a5411612eae57600a54612eb8565b612eb7306115e2565b5b9050620927c0600b6000828254612ecf9190614060565b92505081905550600c54600b5410612f57576307829b80600c6000828254612ef79190614060565b925050819055506000600a5490506002600a54612f1491906140b6565b600a819055507f394823b0bcaf78cd8f5876a52c05dbab91512a05f5da2a31e239a11ab66d605f81600a54604051612f4d929190614000565b60405180910390a1505b809150505b90565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f80f15e9dbc60884fdb59fb8ed4fc48a9a689e028f055e893ed45ca5be67c5c8560405160405180910390a35050565b600081359050613034816142cd565b92915050565b600081359050613049816142e4565b92915050565b60006020828403121561306157600080fd5b600061306f84828501613025565b91505092915050565b6000806040838503121561308b57600080fd5b600061309985828601613025565b92505060206130aa85828601613025565b9150509250929050565b6000806000606084860312156130c957600080fd5b60006130d786828701613025565b93505060206130e886828701613025565b92505060406130f98682870161303a565b9150509250925092565b6000806040838503121561311657600080fd5b600061312485828601613025565b92505060206131358582860161303a565b9150509250929050565b60006020828403121561315157600080fd5b600061315f8482850161303a565b91505092915050565b61317181614175565b82525050565b61318081614187565b82525050565b600061319182614044565b61319b818561404f565b93506131ab8185602086016141ca565b6131b4816142bc565b840191505092915050565b60006131cc60228361404f565b91507f546865726520617265206e6f206d6f726520636f696e7320746f2072656c656160008301527f73650000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061323260288361404f565b91507f416c6c20746f6b656e207472616e7366657273206172652063757272656e746c60008301527f79206c6f636b65640000000000000000000000000000000000000000000000006020830152604082019050919050565b600061329860358361404f565b91507f4e65772072656c6561736520616464726573732063616e27742062652073616d60008301527f65206173205f72656c65617365416464726573733100000000000000000000006020830152604082019050919050565b60006132fe60228361404f565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613364602a8361404f565b91507f4d616e616765643a206e6577206d616e616765722063616e2774206265207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b60006133ca60218361404f565b91507f6275726e417070726f76652066726f6d20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613430601f8361404f565b91507f45524332303a207472616e7366657220746f207a65726f2061646472657373006000830152602082019050919050565b600061347060308361404f565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206160008301527f7661696c61626c652062616c616e6365000000000000000000000000000000006020830152604082019050919050565b60006134d660358361404f565b91507f4e65772072656c6561736520616464726573732063616e27742062652073616d60008301527f65206173205f72656c65617365416464726573733200000000000000000000006020830152604082019050919050565b600061353c60298361404f565b91507f45524332303a20646563726561736564206275726e416c6c6f77616e6365206260008301527f656c6f77207a65726f00000000000000000000000000000000000000000000006020830152604082019050919050565b60006135a2603d8361404f565b91507f526563697069656e7420616464726573732069732063757272656e746c79206c60008301527f6f636b656420616e642063616e277420726563656976652066756e64730000006020830152604082019050919050565b600061360860288361404f565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206160008301527f6c6c6f77616e63650000000000000000000000000000000000000000000000006020830152604082019050919050565b600061366e60208361404f565b91507f4d616e616765643a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006136ae60268361404f565b91507f4e65787420636f696e2072656c65617365206973206e6f74207965742073636860008301527f6564756c656400000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061371460248361404f565b91507f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008301527f616e6365000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061377a60288361404f565b91507f4d616e616765643a206e6577206f776e65722063616e2774206265207a65726f60008301527f20616464726573730000000000000000000000000000000000000000000000006020830152604082019050919050565b60006137e060378361404f565b91507f53656e64657220616464726573732069732063757272656e746c79206c6f636b60008301527f656420616e642063616e27742073656e642066756e64730000000000000000006020830152604082019050919050565b6000613846601f8361404f565b91507f6275726e417070726f766520746f20746865207a65726f2061646472657373006000830152602082019050919050565b6000613886602b8361404f565b91507f4e65772072656c6561736520616464726573732063616e27742062652061207a60008301527f65726f20616464726573730000000000000000000000000000000000000000006020830152604082019050919050565b60006138ec60218361404f565b91507f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061395260258361404f565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006139b860358361404f565b91507f4e65772072656c6561736520616464726573732063616e27742062652073616d60008301527f65206173205f72656c65617365416464726573733300000000000000000000006020830152604082019050919050565b6000613a1e60248361404f565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a84602c8361404f565b91507f45524332303a206275726e20616d6f756e74206578636565647320617661696c60008301527f61626c652062616c616e636500000000000000000000000000000000000000006020830152604082019050919050565b6000613aea602b8361404f565b91507f4d616e616765643a2063616c6c6572206973206e6f7420746865206f776e657260008301527f206f72206d616e616765720000000000000000000000000000000000000000006020830152604082019050919050565b6000613b5060378361404f565b91507f53656e64657220616464726573732069732063757272656e746c79206c6f636b60008301527f656420616e642063616e2774206275726e2066756e64730000000000000000006020830152604082019050919050565b6000613bb660258361404f565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b613c18816141b3565b82525050565b613c27816141bd565b82525050565b6000602082019050613c426000830184613168565b92915050565b6000602082019050613c5d6000830184613177565b92915050565b60006020820190508181036000830152613c7d8184613186565b905092915050565b60006020820190508181036000830152613c9e816131bf565b9050919050565b60006020820190508181036000830152613cbe81613225565b9050919050565b60006020820190508181036000830152613cde8161328b565b9050919050565b60006020820190508181036000830152613cfe816132f1565b9050919050565b60006020820190508181036000830152613d1e81613357565b9050919050565b60006020820190508181036000830152613d3e816133bd565b9050919050565b60006020820190508181036000830152613d5e81613423565b9050919050565b60006020820190508181036000830152613d7e81613463565b9050919050565b60006020820190508181036000830152613d9e816134c9565b9050919050565b60006020820190508181036000830152613dbe8161352f565b9050919050565b60006020820190508181036000830152613dde81613595565b9050919050565b60006020820190508181036000830152613dfe816135fb565b9050919050565b60006020820190508181036000830152613e1e81613661565b9050919050565b60006020820190508181036000830152613e3e816136a1565b9050919050565b60006020820190508181036000830152613e5e81613707565b9050919050565b60006020820190508181036000830152613e7e8161376d565b9050919050565b60006020820190508181036000830152613e9e816137d3565b9050919050565b60006020820190508181036000830152613ebe81613839565b9050919050565b60006020820190508181036000830152613ede81613879565b9050919050565b60006020820190508181036000830152613efe816138df565b9050919050565b60006020820190508181036000830152613f1e81613945565b9050919050565b60006020820190508181036000830152613f3e816139ab565b9050919050565b60006020820190508181036000830152613f5e81613a11565b9050919050565b60006020820190508181036000830152613f7e81613a77565b9050919050565b60006020820190508181036000830152613f9e81613add565b9050919050565b60006020820190508181036000830152613fbe81613b43565b9050919050565b60006020820190508181036000830152613fde81613ba9565b9050919050565b6000602082019050613ffa6000830184613c0f565b92915050565b60006040820190506140156000830185613c0f565b6140226020830184613c0f565b9392505050565b600060208201905061403e6000830184613c1e565b92915050565b600081519050919050565b600082825260208201905092915050565b600061406b826141b3565b9150614076836141b3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140ab576140aa61422f565b5b828201905092915050565b60006140c1826141b3565b91506140cc836141b3565b9250826140dc576140db61425e565b5b828204905092915050565b60006140f2826141b3565b91506140fd836141b3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156141365761413561422f565b5b828202905092915050565b600061414c826141b3565b9150614157836141b3565b92508282101561416a5761416961422f565b5b828203905092915050565b600061418082614193565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156141e85780820151818401526020810190506141cd565b838111156141f7576000848401525b50505050565b6000600282049050600182168061421557607f821691505b602082108114156142295761422861428d565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b6142d681614175565b81146142e157600080fd5b50565b6142ed816141b3565b81146142f857600080fd5b5056fea264697066735822122017377a376aabc6f5d7c7d682331637e6dad1626d80fb6366748fa7b3beb5d01b64736f6c63430008000033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000120000000000000000000000009b0330006bf03c12ad991903cabb17f4a62e71bc0000000000000000000000005a18637da07696b1e1d751fa36a4010fe759a3650000000000000000000000005e7790b25c2b4b048000e3759d4f98da0f614951000000000000000000000000b2d0f19cf2b9d3632619c2029f2cfb04bcd2c86400000000000000000000000016acecfed1dd8461de48aa09522a0e9528b07d350000000000000000000000000000000000000000000000000000000000000016486f757365206f66204d616e64656c6120546f6b656e000000000000000000000000000000000000000000000000000000000000000000000000000000000003484f4d0000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name_ (string): House of Mandela Token
Arg [1] : symbol_ (string): HOM
Arg [2] : decimals_ (uint8): 18
Arg [3] : owner_ (address): 0x9b0330006BF03C12ad991903caBb17F4A62e71bc
Arg [4] : manager_ (address): 0x5a18637da07696B1E1D751fA36A4010fE759a365
Arg [5] : initialDepositAddress1 (address): 0x5e7790B25c2B4B048000E3759D4f98da0F614951
Arg [6] : initialDepositAddress2 (address): 0xB2D0F19CF2B9D3632619C2029f2cFB04BcD2C864
Arg [7] : initialDepositAddress3 (address): 0x16ACEcFEd1dD8461dE48aA09522A0e9528B07d35

-----Encoded View---------------
12 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [3] : 0000000000000000000000009b0330006bf03c12ad991903cabb17f4a62e71bc
Arg [4] : 0000000000000000000000005a18637da07696b1e1d751fa36a4010fe759a365
Arg [5] : 0000000000000000000000005e7790b25c2b4b048000e3759d4f98da0f614951
Arg [6] : 000000000000000000000000b2d0f19cf2b9d3632619c2029f2cfb04bcd2c864
Arg [7] : 00000000000000000000000016acecfed1dd8461de48aa09522a0e9528b07d35
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000016
Arg [9] : 486f757365206f66204d616e64656c6120546f6b656e00000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [11] : 484f4d0000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

10576:19895:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14446:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17063:171;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5540:184;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16780:142;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17334:162;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15707:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8094:120;;;:::i;:::-;;20137:229;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17966:460;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22256:691;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23994;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15393:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21641:443;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8737:150;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19726:217;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18538:84;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5334:74;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16088:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15906:119;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18933:395;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25096:720;;;:::i;:::-;;15553:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5183:70;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14662:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20856:415;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8297:71;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16383:177;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9044:154;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7858:116;;;:::i;:::-;;23126:691;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5860:196;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16621:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9293:102;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14446:100;14500:13;14533:5;14526:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14446:100;:::o;17063:171::-;17148:4;17165:39;17174:12;:10;:12::i;:::-;17188:7;17197:6;17165:8;:39::i;:::-;17222:4;17215:11;;17063:171;;;;:::o;5540:184::-;6208:6;;;;;;;;;;6192:22;;:12;:10;:12::i;:::-;:22;;;6184:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;5639:1:::1;5619:22;;:8;:22;;;;5611:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;5697:19;5707:8;5697:9;:19::i;:::-;5540:184:::0;:::o;16780:142::-;16856:7;16883:15;:22;16899:5;16883:22;;;;;;;;;;;;;;;:31;16906:7;16883:31;;;;;;;;;;;;;;;;16876:38;;16780:142;;;;:::o;17334:162::-;17406:4;17423:43;17436:12;:10;:12::i;:::-;17450:7;17459:6;17423:12;:43::i;:::-;17484:4;17477:11;;17334:162;;;;:::o;15707:108::-;15768:7;15795:12;;15788:19;;15707:108;:::o;8094:120::-;6208:6;;;;;;;;;;6192:22;;:12;:10;:12::i;:::-;:22;;;6184:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;8162:5:::1;8152:7;;:15;;;;;;;;;;;;;;;;;;8183:23;8200:5;8183:23;;;;;;:::i;:::-;;;;;;;;8094:120::o:0;20137:229::-;20231:4;20248:88;20261:12;:10;:12::i;:::-;20275:7;20325:10;20284:15;:29;20300:12;:10;:12::i;:::-;20284:29;;;;;;;;;;;;;;;:38;20314:7;20284:38;;;;;;;;;;;;;;;;:51;;;;:::i;:::-;20248:12;:88::i;:::-;20354:4;20347:11;;20137:229;;;;:::o;17966:460::-;18074:4;18091:36;18101:6;18109:9;18120:6;18091:9;:36::i;:::-;18140:24;18167:11;:19;18179:6;18167:19;;;;;;;;;;;;;;;:33;18187:12;:10;:12::i;:::-;18167:33;;;;;;;;;;;;;;;;18140:60;;18239:6;18219:16;:26;;18211:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;18326:57;18335:6;18343:12;:10;:12::i;:::-;18376:6;18357:16;:25;18326:8;:57::i;:::-;18414:4;18407:11;;;17966:460;;;;;:::o;22256:691::-;6208:6;;;;;;;;;;6192:22;;:12;:10;:12::i;:::-;:22;;;6184:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22383:1:::1;22354:31;;:17;:31;;;;22346:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;22473:16;;;;;;;;;;;22452:37;;:17;:37;;;;22444:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;22587:16;;;;;;;;;;;22566:37;;:17;:37;;;;22558:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;22701:16;;;;;;;;;;;22680:37;;:17;:37;;;;22672:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;22788:18;22809:16;;;;;;;;;;;22788:37;;22855:17;22836:16;;:36;;;;;;;;;;;;;;;;;;22922:16;;;;;;;;;;;22888:51;;22910:10;22888:51;;;;;;;;;;;;6262:1;22256:691:::0;:::o;23994:::-;6208:6;;;;;;;;;;6192:22;;:12;:10;:12::i;:::-;:22;;;6184:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24121:1:::1;24092:31;;:17;:31;;;;24084:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;24211:16;;;;;;;;;;;24190:37;;:17;:37;;;;24182:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24325:16;;;;;;;;;;;24304:37;;:17;:37;;;;24296:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24439:16;;;;;;;;;;;24418:37;;:17;:37;;;;24410:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24526:18;24547:16;;;;;;;;;;;24526:37;;24593:17;24574:16;;:36;;;;;;;;;;;;;;;;;;24660:16;;;;;;;;;;;24626:51;;24648:10;24626:51;;;;;;;;;;;;6262:1;23994:691:::0;:::o;15393:100::-;15451:5;15476:9;15469:16;;15393:100;:::o;21641:443::-;21740:4;21757:28;21788:15;:29;21804:12;:10;:12::i;:::-;21788:29;;;;;;;;;;;;;;;:38;21818:7;21788:38;;;;;;;;;;;;;;;;21757:69;;21869:15;21845:20;:39;;21837:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;21966:75;21979:12;:10;:12::i;:::-;21993:7;22025:15;22002:20;:38;21966:12;:75::i;:::-;22072:4;22065:11;;;21641:443;;;;:::o;8737:150::-;6208:6;;;;;;;;;;6192:22;;:12;:10;:12::i;:::-;:22;;;6184:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;8829:4:::1;8807:13;:19;8821:4;8807:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;8868:4;8849:30;;;8874:4;8849:30;;;;;;:::i;:::-;;;;;;;;8737:150:::0;:::o;19726:217::-;19816:4;19833:80;19842:12;:10;:12::i;:::-;19856:7;19902:10;19865:11;:25;19877:12;:10;:12::i;:::-;19865:25;;;;;;;;;;;;;;;:34;19891:7;19865:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;19833:8;:80::i;:::-;19931:4;19924:11;;19726:217;;;;:::o;18538:84::-;18592:27;18598:12;:10;:12::i;:::-;18612:6;18592:5;:27::i;:::-;18538:84;:::o;5334:74::-;5374:7;5397:8;;;;;;;;;;;5390:15;;5334:74;:::o;16088:127::-;16162:7;16189:9;:18;16199:7;16189:18;;;;;;;;;;;;;;;;16182:25;;16088:127;;;:::o;15906:119::-;15951:7;15993:9;:24;16011:4;15993:24;;;;;;;;;;;;;;;;15978:12;;:39;;;;:::i;:::-;15971:46;;15906:119;:::o;18933:395::-;19017:28;19048:36;19062:7;19071:12;:10;:12::i;:::-;19048:13;:36::i;:::-;19017:67;;19127:6;19103:20;:30;;19095:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;19210:66;19223:7;19232:12;:10;:12::i;:::-;19269:6;19246:20;:29;19210:12;:66::i;:::-;19298:22;19304:7;19313:6;19298:5;:22::i;:::-;18933:395;;;:::o;25096:720::-;6435:6;;;;;;;;;;6419:22;;:12;:10;:12::i;:::-;:22;;;:50;;;;6461:8;;;;;;;;;;;6445:24;;:12;:10;:12::i;:::-;:24;;;6419:50;6411:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;25181:16:::1;;25163:15;:34;25155:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;25286:1;25259:24;25277:4;25259:9;:24::i;:::-;:28;25251:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;25339:17;25371:22:::0;25410:97:::1;25463:1;25434:25;:23;:25::i;:::-;25417:42;;;25416:48;25410:97;;;25490:14;25477:27;;;;;:::i;:::-;;;25410:97;;;25519:60;25537:4;25544:16;;;;;;;;;;;25575:3;25572:2;25562:9;:12;;;;:::i;:::-;:16;;;;:::i;:::-;25519:9;:60::i;:::-;25590:59;25608:4;25615:16;;;;;;;;;;;25645:3;25643:1;25633:9;:11;;;;:::i;:::-;:15;;;;:::i;:::-;25590:9;:59::i;:::-;25660:60;25678:4;25685:16;;;;;;;;;;;25716:3;25713:2;25703:9;:12;;;;:::i;:::-;:16;;;;:::i;:::-;25660:9;:60::i;:::-;25780:16;;;;;;;;;;;25736:72;;25762:16;;;;;;;;;;;25736:72;;25744:16;;;;;;;;;;;25736:72;;;25798:9;25736:72;;;;;;:::i;:::-;;;;;;;;6528:1;;25096:720::o:0;15553:91::-;15611:7;15634;:5;:7::i;:::-;15627:14;;15553:91;:::o;5183:70::-;5221:7;5244:6;;;;;;;;;;;5237:13;;5183:70;:::o;14662:104::-;14718:13;14751:7;14744:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14662:104;:::o;20856:415::-;20951:4;20968:24;20995:11;:25;21007:12;:10;:12::i;:::-;20995:25;;;;;;;;;;;;;;;:34;21021:7;20995:34;;;;;;;;;;;;;;;;20968:61;;21068:15;21048:16;:35;;21040:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;21161:67;21170:12;:10;:12::i;:::-;21184:7;21212:15;21193:16;:34;21161:8;:67::i;:::-;21259:4;21252:11;;;20856:415;;;;:::o;8297:71::-;8338:4;8358:7;;;;;;;;;;;8351:14;;8297:71;:::o;16383:177::-;16471:4;16488:42;16498:12;:10;:12::i;:::-;16512:9;16523:6;16488:9;:42::i;:::-;16548:4;16541:11;;16383:177;;;;:::o;9044:154::-;6208:6;;;;;;;;;;6192:22;;:12;:10;:12::i;:::-;:22;;;6184:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;9138:5:::1;9116:13;:19;9130:4;9116:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;9178:4;9159:31;;;9184:5;9159:31;;;;;;:::i;:::-;;;;;;;;9044:154:::0;:::o;7858:116::-;6208:6;;;;;;;;;;6192:22;;:12;:10;:12::i;:::-;:22;;;6184:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7924:4:::1;7914:7;;:14;;;;;;;;;;;;;;;;;;7944:22;7961:4;7944:22;;;;;;:::i;:::-;;;;;;;;7858:116::o:0;23126:691::-;6208:6;;;;;;;;;;6192:22;;:12;:10;:12::i;:::-;:22;;;6184:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23253:1:::1;23224:31;;:17;:31;;;;23216:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;23343:16;;;;;;;;;;;23322:37;;:17;:37;;;;23314:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23457:16;;;;;;;;;;;23436:37;;:17;:37;;;;23428:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23571:16;;;;;;;;;;;23550:37;;:17;:37;;;;23542:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23658:18;23679:16;;;;;;;;;;;23658:37;;23725:17;23706:16;;:36;;;;;;;;;;;;;;;;;;23792:16;;;;;;;;;;;23758:51;;23780:10;23758:51;;;;;;;;;;;;6262:1;23126:691:::0;:::o;5860:196::-;6208:6;;;;;;;;;;6192:22;;:12;:10;:12::i;:::-;:22;;;6184:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;5965:1:::1;5943:24;;:10;:24;;;;5935:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;6025:23;6037:10;6025:11;:23::i;:::-;5860:196:::0;:::o;16621:151::-;16710:7;16737:11;:18;16749:5;16737:18;;;;;;;;;;;;;;;:27;16756:7;16737:27;;;;;;;;;;;;;;;;16730:34;;16621:151;;;;:::o;9293:102::-;9353:4;9373:13;:19;9387:4;9373:19;;;;;;;;;;;;;;;;;;;;;;;;;9366:26;;9293:102;;;:::o;3718:98::-;3771:7;3798:10;3791:17;;3718:98;:::o;28542:346::-;28661:1;28644:19;;:5;:19;;;;28636:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28742:1;28723:21;;:7;:21;;;;28715:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28826:6;28796:11;:18;28808:5;28796:18;;;;;;;;;;;;;;;:27;28815:7;28796:27;;;;;;;;;;;;;;;:36;;;;28864:7;28848:32;;28857:5;28848:32;;;28873:6;28848:32;;;;;;:::i;:::-;;;;;;;;28542:346;;;:::o;6686:179::-;6748:16;6767:6;;;;;;;;;;;6748:25;;6793:8;6784:6;;:17;;;;;;;;;;;;;;;;;;6848:8;6817:40;;6838:8;6817:40;;;;;;;;;;;;6686:179;;:::o;29170:352::-;29293:1;29276:19;;:5;:19;;;;29268:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;29371:1;29352:21;;:7;:21;;;;29344:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;29456:6;29422:15;:22;29438:5;29422:22;;;;;;;;;;;;;;;:31;29445:7;29422:31;;;;;;;;;;;;;;;:40;;;;29498:7;29478:36;;29491:5;29478:36;;;29507:6;29478:36;;;;;;:::i;:::-;;;;;;;;29170:352;;;:::o;27394:722::-;8510:7;;;;;;;;;;;8509:8;8501:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;27537:1:::1;27516:23;;:9;:23;;;;27508:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27612:1;27594:20;;:6;:20;;;;27586:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;27678:23;27694:6;27678:15;:23::i;:::-;27677:24;27669:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;27781:26;27797:9;27781:15;:26::i;:::-;27780:27;27772:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;27915:6;27894:9;:17;27904:6;27894:17;;;;;;;;;;;;;;;;:27;;27886:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;28008:6;27987:9;:17;27997:6;27987:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;28049:6;28025:9;:20;28035:9;28025:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;28090:9;28073:35;;28082:6;28073:35;;;28101:6;28073:35;;;;;;:::i;:::-;;;;;;;;27394:722:::0;;;:::o;29931:537::-;8510:7;;;;;;;;;;;8509:8;8501:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30050:1:::1;30031:21;;:7;:21;;;;30023:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30112:24;30128:7;30112:15;:24::i;:::-;30111:25;30103:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;30239:6;30217:9;:18;30227:7;30217:18;;;;;;;;;;;;;;;;:28;;30209:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30329:6;30307:9;:18;30317:7;30307:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;30362:6;30346:12;;:22;;;;;;;:::i;:::-;;;;;;;;30412:1;30386:37;;30395:7;30386:37;;;30416:6;30386:37;;;;;;:::i;:::-;;;;;;;;30444:7;30439:21;;;30453:6;30439:21;;;;;;:::i;:::-;;;;;;;;29931:537:::0;;:::o;26225:649::-;26278:7;26324:16;;26306:15;:34;:67;;;;26372:1;26344:24;26362:4;26344:9;:24::i;:::-;:29;26306:67;26303:93;;;26395:1;26388:8;;;;26303:93;26409:14;26443:24;26461:4;26443:9;:24::i;:::-;26426:14;;:41;:85;;26497:14;;26426:85;;;26470:24;26488:4;26470:9;:24::i;:::-;26426:85;26409:102;;11654:6;26524:16;;:25;;;;;;;:::i;:::-;;;;;;;;26583:19;;26563:16;;:39;26560:281;;11720:9;26628:19;;:30;;;;;;;:::i;:::-;;;;;;;;26675:24;26702:14;;26675:41;;26765:1;26748:14;;:18;;;;:::i;:::-;26731:14;:35;;;;26788:41;26796:16;26814:14;;26788:41;;;;;;;:::i;:::-;;;;;;;;26560:281;;26860:6;26853:13;;;26225:649;;:::o;7018:196::-;7084:18;7105:8;;;;;;;;;;;7084:29;;7135:10;7124:8;;:21;;;;;;;;;;;;;;;;;;7195:10;7161:45;;7183:10;7161:45;;;;;;;;;;;;7018:196;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:139::-;;236:6;223:20;214:29;;252:33;279:5;252:33;:::i;:::-;204:87;;;;:::o;297:262::-;;405:2;393:9;384:7;380:23;376:32;373:2;;;421:1;418;411:12;373:2;464:1;489:53;534:7;525:6;514:9;510:22;489:53;:::i;:::-;479:63;;435:117;363:196;;;;:::o;565:407::-;;;690:2;678:9;669:7;665:23;661:32;658:2;;;706:1;703;696:12;658:2;749:1;774:53;819:7;810:6;799:9;795:22;774:53;:::i;:::-;764:63;;720:117;876:2;902:53;947:7;938:6;927:9;923:22;902:53;:::i;:::-;892:63;;847:118;648:324;;;;;:::o;978:552::-;;;;1120:2;1108:9;1099:7;1095:23;1091:32;1088:2;;;1136:1;1133;1126:12;1088:2;1179:1;1204:53;1249:7;1240:6;1229:9;1225:22;1204:53;:::i;:::-;1194:63;;1150:117;1306:2;1332:53;1377:7;1368:6;1357:9;1353:22;1332:53;:::i;:::-;1322:63;;1277:118;1434:2;1460:53;1505:7;1496:6;1485:9;1481:22;1460:53;:::i;:::-;1450:63;;1405:118;1078:452;;;;;:::o;1536:407::-;;;1661:2;1649:9;1640:7;1636:23;1632:32;1629:2;;;1677:1;1674;1667:12;1629:2;1720:1;1745:53;1790:7;1781:6;1770:9;1766:22;1745:53;:::i;:::-;1735:63;;1691:117;1847:2;1873:53;1918:7;1909:6;1898:9;1894:22;1873:53;:::i;:::-;1863:63;;1818:118;1619:324;;;;;:::o;1949:262::-;;2057:2;2045:9;2036:7;2032:23;2028:32;2025:2;;;2073:1;2070;2063:12;2025:2;2116:1;2141:53;2186:7;2177:6;2166:9;2162:22;2141:53;:::i;:::-;2131:63;;2087:117;2015:196;;;;:::o;2217:118::-;2304:24;2322:5;2304:24;:::i;:::-;2299:3;2292:37;2282:53;;:::o;2341:109::-;2422:21;2437:5;2422:21;:::i;:::-;2417:3;2410:34;2400:50;;:::o;2456:364::-;;2572:39;2605:5;2572:39;:::i;:::-;2627:71;2691:6;2686:3;2627:71;:::i;:::-;2620:78;;2707:52;2752:6;2747:3;2740:4;2733:5;2729:16;2707:52;:::i;:::-;2784:29;2806:6;2784:29;:::i;:::-;2779:3;2775:39;2768:46;;2548:272;;;;;:::o;2826:366::-;;2989:67;3053:2;3048:3;2989:67;:::i;:::-;2982:74;;3086:34;3082:1;3077:3;3073:11;3066:55;3152:4;3147:2;3142:3;3138:12;3131:26;3183:2;3178:3;3174:12;3167:19;;2972:220;;;:::o;3198:372::-;;3361:67;3425:2;3420:3;3361:67;:::i;:::-;3354:74;;3458:34;3454:1;3449:3;3445:11;3438:55;3524:10;3519:2;3514:3;3510:12;3503:32;3561:2;3556:3;3552:12;3545:19;;3344:226;;;:::o;3576:385::-;;3739:67;3803:2;3798:3;3739:67;:::i;:::-;3732:74;;3836:34;3832:1;3827:3;3823:11;3816:55;3902:23;3897:2;3892:3;3888:12;3881:45;3952:2;3947:3;3943:12;3936:19;;3722:239;;;:::o;3967:366::-;;4130:67;4194:2;4189:3;4130:67;:::i;:::-;4123:74;;4227:34;4223:1;4218:3;4214:11;4207:55;4293:4;4288:2;4283:3;4279:12;4272:26;4324:2;4319:3;4315:12;4308:19;;4113:220;;;:::o;4339:374::-;;4502:67;4566:2;4561:3;4502:67;:::i;:::-;4495:74;;4599:34;4595:1;4590:3;4586:11;4579:55;4665:12;4660:2;4655:3;4651:12;4644:34;4704:2;4699:3;4695:12;4688:19;;4485:228;;;:::o;4719:365::-;;4882:67;4946:2;4941:3;4882:67;:::i;:::-;4875:74;;4979:34;4975:1;4970:3;4966:11;4959:55;5045:3;5040:2;5035:3;5031:12;5024:25;5075:2;5070:3;5066:12;5059:19;;4865:219;;;:::o;5090:329::-;;5253:67;5317:2;5312:3;5253:67;:::i;:::-;5246:74;;5350:33;5346:1;5341:3;5337:11;5330:54;5410:2;5405:3;5401:12;5394:19;;5236:183;;;:::o;5425:380::-;;5588:67;5652:2;5647:3;5588:67;:::i;:::-;5581:74;;5685:34;5681:1;5676:3;5672:11;5665:55;5751:18;5746:2;5741:3;5737:12;5730:40;5796:2;5791:3;5787:12;5780:19;;5571:234;;;:::o;5811:385::-;;5974:67;6038:2;6033:3;5974:67;:::i;:::-;5967:74;;6071:34;6067:1;6062:3;6058:11;6051:55;6137:23;6132:2;6127:3;6123:12;6116:45;6187:2;6182:3;6178:12;6171:19;;5957:239;;;:::o;6202:373::-;;6365:67;6429:2;6424:3;6365:67;:::i;:::-;6358:74;;6462:34;6458:1;6453:3;6449:11;6442:55;6528:11;6523:2;6518:3;6514:12;6507:33;6566:2;6561:3;6557:12;6550:19;;6348:227;;;:::o;6581:393::-;;6744:67;6808:2;6803:3;6744:67;:::i;:::-;6737:74;;6841:34;6837:1;6832:3;6828:11;6821:55;6907:31;6902:2;6897:3;6893:12;6886:53;6965:2;6960:3;6956:12;6949:19;;6727:247;;;:::o;6980:372::-;;7143:67;7207:2;7202:3;7143:67;:::i;:::-;7136:74;;7240:34;7236:1;7231:3;7227:11;7220:55;7306:10;7301:2;7296:3;7292:12;7285:32;7343:2;7338:3;7334:12;7327:19;;7126:226;;;:::o;7358:330::-;;7521:67;7585:2;7580:3;7521:67;:::i;:::-;7514:74;;7618:34;7614:1;7609:3;7605:11;7598:55;7679:2;7674:3;7670:12;7663:19;;7504:184;;;:::o;7694:370::-;;7857:67;7921:2;7916:3;7857:67;:::i;:::-;7850:74;;7954:34;7950:1;7945:3;7941:11;7934:55;8020:8;8015:2;8010:3;8006:12;7999:30;8055:2;8050:3;8046:12;8039:19;;7840:224;;;:::o;8070:368::-;;8233:67;8297:2;8292:3;8233:67;:::i;:::-;8226:74;;8330:34;8326:1;8321:3;8317:11;8310:55;8396:6;8391:2;8386:3;8382:12;8375:28;8429:2;8424:3;8420:12;8413:19;;8216:222;;;:::o;8444:372::-;;8607:67;8671:2;8666:3;8607:67;:::i;:::-;8600:74;;8704:34;8700:1;8695:3;8691:11;8684:55;8770:10;8765:2;8760:3;8756:12;8749:32;8807:2;8802:3;8798:12;8791:19;;8590:226;;;:::o;8822:387::-;;8985:67;9049:2;9044:3;8985:67;:::i;:::-;8978:74;;9082:34;9078:1;9073:3;9069:11;9062:55;9148:25;9143:2;9138:3;9134:12;9127:47;9200:2;9195:3;9191:12;9184:19;;8968:241;;;:::o;9215:329::-;;9378:67;9442:2;9437:3;9378:67;:::i;:::-;9371:74;;9475:33;9471:1;9466:3;9462:11;9455:54;9535:2;9530:3;9526:12;9519:19;;9361:183;;;:::o;9550:375::-;;9713:67;9777:2;9772:3;9713:67;:::i;:::-;9706:74;;9810:34;9806:1;9801:3;9797:11;9790:55;9876:13;9871:2;9866:3;9862:12;9855:35;9916:2;9911:3;9907:12;9900:19;;9696:229;;;:::o;9931:365::-;;10094:67;10158:2;10153:3;10094:67;:::i;:::-;10087:74;;10191:34;10187:1;10182:3;10178:11;10171:55;10257:3;10252:2;10247:3;10243:12;10236:25;10287:2;10282:3;10278:12;10271:19;;10077:219;;;:::o;10302:369::-;;10465:67;10529:2;10524:3;10465:67;:::i;:::-;10458:74;;10562:34;10558:1;10553:3;10549:11;10542:55;10628:7;10623:2;10618:3;10614:12;10607:29;10662:2;10657:3;10653:12;10646:19;;10448:223;;;:::o;10677:385::-;;10840:67;10904:2;10899:3;10840:67;:::i;:::-;10833:74;;10937:34;10933:1;10928:3;10924:11;10917:55;11003:23;10998:2;10993:3;10989:12;10982:45;11053:2;11048:3;11044:12;11037:19;;10823:239;;;:::o;11068:368::-;;11231:67;11295:2;11290:3;11231:67;:::i;:::-;11224:74;;11328:34;11324:1;11319:3;11315:11;11308:55;11394:6;11389:2;11384:3;11380:12;11373:28;11427:2;11422:3;11418:12;11411:19;;11214:222;;;:::o;11442:376::-;;11605:67;11669:2;11664:3;11605:67;:::i;:::-;11598:74;;11702:34;11698:1;11693:3;11689:11;11682:55;11768:14;11763:2;11758:3;11754:12;11747:36;11809:2;11804:3;11800:12;11793:19;;11588:230;;;:::o;11824:375::-;;11987:67;12051:2;12046:3;11987:67;:::i;:::-;11980:74;;12084:34;12080:1;12075:3;12071:11;12064:55;12150:13;12145:2;12140:3;12136:12;12129:35;12190:2;12185:3;12181:12;12174:19;;11970:229;;;:::o;12205:387::-;;12368:67;12432:2;12427:3;12368:67;:::i;:::-;12361:74;;12465:34;12461:1;12456:3;12452:11;12445:55;12531:25;12526:2;12521:3;12517:12;12510:47;12583:2;12578:3;12574:12;12567:19;;12351:241;;;:::o;12598:369::-;;12761:67;12825:2;12820:3;12761:67;:::i;:::-;12754:74;;12858:34;12854:1;12849:3;12845:11;12838:55;12924:7;12919:2;12914:3;12910:12;12903:29;12958:2;12953:3;12949:12;12942:19;;12744:223;;;:::o;12973:118::-;13060:24;13078:5;13060:24;:::i;:::-;13055:3;13048:37;13038:53;;:::o;13097:112::-;13180:22;13196:5;13180:22;:::i;:::-;13175:3;13168:35;13158:51;;:::o;13215:222::-;;13346:2;13335:9;13331:18;13323:26;;13359:71;13427:1;13416:9;13412:17;13403:6;13359:71;:::i;:::-;13313:124;;;;:::o;13443:210::-;;13568:2;13557:9;13553:18;13545:26;;13581:65;13643:1;13632:9;13628:17;13619:6;13581:65;:::i;:::-;13535:118;;;;:::o;13659:313::-;;13810:2;13799:9;13795:18;13787:26;;13859:9;13853:4;13849:20;13845:1;13834:9;13830:17;13823:47;13887:78;13960:4;13951:6;13887:78;:::i;:::-;13879:86;;13777:195;;;;:::o;13978:419::-;;14182:2;14171:9;14167:18;14159:26;;14231:9;14225:4;14221:20;14217:1;14206:9;14202:17;14195:47;14259:131;14385:4;14259:131;:::i;:::-;14251:139;;14149:248;;;:::o;14403:419::-;;14607:2;14596:9;14592:18;14584:26;;14656:9;14650:4;14646:20;14642:1;14631:9;14627:17;14620:47;14684:131;14810:4;14684:131;:::i;:::-;14676:139;;14574:248;;;:::o;14828:419::-;;15032:2;15021:9;15017:18;15009:26;;15081:9;15075:4;15071:20;15067:1;15056:9;15052:17;15045:47;15109:131;15235:4;15109:131;:::i;:::-;15101:139;;14999:248;;;:::o;15253:419::-;;15457:2;15446:9;15442:18;15434:26;;15506:9;15500:4;15496:20;15492:1;15481:9;15477:17;15470:47;15534:131;15660:4;15534:131;:::i;:::-;15526:139;;15424:248;;;:::o;15678:419::-;;15882:2;15871:9;15867:18;15859:26;;15931:9;15925:4;15921:20;15917:1;15906:9;15902:17;15895:47;15959:131;16085:4;15959:131;:::i;:::-;15951:139;;15849:248;;;:::o;16103:419::-;;16307:2;16296:9;16292:18;16284:26;;16356:9;16350:4;16346:20;16342:1;16331:9;16327:17;16320:47;16384:131;16510:4;16384:131;:::i;:::-;16376:139;;16274:248;;;:::o;16528:419::-;;16732:2;16721:9;16717:18;16709:26;;16781:9;16775:4;16771:20;16767:1;16756:9;16752:17;16745:47;16809:131;16935:4;16809:131;:::i;:::-;16801:139;;16699:248;;;:::o;16953:419::-;;17157:2;17146:9;17142:18;17134:26;;17206:9;17200:4;17196:20;17192:1;17181:9;17177:17;17170:47;17234:131;17360:4;17234:131;:::i;:::-;17226:139;;17124:248;;;:::o;17378:419::-;;17582:2;17571:9;17567:18;17559:26;;17631:9;17625:4;17621:20;17617:1;17606:9;17602:17;17595:47;17659:131;17785:4;17659:131;:::i;:::-;17651:139;;17549:248;;;:::o;17803:419::-;;18007:2;17996:9;17992:18;17984:26;;18056:9;18050:4;18046:20;18042:1;18031:9;18027:17;18020:47;18084:131;18210:4;18084:131;:::i;:::-;18076:139;;17974:248;;;:::o;18228:419::-;;18432:2;18421:9;18417:18;18409:26;;18481:9;18475:4;18471:20;18467:1;18456:9;18452:17;18445:47;18509:131;18635:4;18509:131;:::i;:::-;18501:139;;18399:248;;;:::o;18653:419::-;;18857:2;18846:9;18842:18;18834:26;;18906:9;18900:4;18896:20;18892:1;18881:9;18877:17;18870:47;18934:131;19060:4;18934:131;:::i;:::-;18926:139;;18824:248;;;:::o;19078:419::-;;19282:2;19271:9;19267:18;19259:26;;19331:9;19325:4;19321:20;19317:1;19306:9;19302:17;19295:47;19359:131;19485:4;19359:131;:::i;:::-;19351:139;;19249:248;;;:::o;19503:419::-;;19707:2;19696:9;19692:18;19684:26;;19756:9;19750:4;19746:20;19742:1;19731:9;19727:17;19720:47;19784:131;19910:4;19784:131;:::i;:::-;19776:139;;19674:248;;;:::o;19928:419::-;;20132:2;20121:9;20117:18;20109:26;;20181:9;20175:4;20171:20;20167:1;20156:9;20152:17;20145:47;20209:131;20335:4;20209:131;:::i;:::-;20201:139;;20099:248;;;:::o;20353:419::-;;20557:2;20546:9;20542:18;20534:26;;20606:9;20600:4;20596:20;20592:1;20581:9;20577:17;20570:47;20634:131;20760:4;20634:131;:::i;:::-;20626:139;;20524:248;;;:::o;20778:419::-;;20982:2;20971:9;20967:18;20959:26;;21031:9;21025:4;21021:20;21017:1;21006:9;21002:17;20995:47;21059:131;21185:4;21059:131;:::i;:::-;21051:139;;20949:248;;;:::o;21203:419::-;;21407:2;21396:9;21392:18;21384:26;;21456:9;21450:4;21446:20;21442:1;21431:9;21427:17;21420:47;21484:131;21610:4;21484:131;:::i;:::-;21476:139;;21374:248;;;:::o;21628:419::-;;21832:2;21821:9;21817:18;21809:26;;21881:9;21875:4;21871:20;21867:1;21856:9;21852:17;21845:47;21909:131;22035:4;21909:131;:::i;:::-;21901:139;;21799:248;;;:::o;22053:419::-;;22257:2;22246:9;22242:18;22234:26;;22306:9;22300:4;22296:20;22292:1;22281:9;22277:17;22270:47;22334:131;22460:4;22334:131;:::i;:::-;22326:139;;22224:248;;;:::o;22478:419::-;;22682:2;22671:9;22667:18;22659:26;;22731:9;22725:4;22721:20;22717:1;22706:9;22702:17;22695:47;22759:131;22885:4;22759:131;:::i;:::-;22751:139;;22649:248;;;:::o;22903:419::-;;23107:2;23096:9;23092:18;23084:26;;23156:9;23150:4;23146:20;23142:1;23131:9;23127:17;23120:47;23184:131;23310:4;23184:131;:::i;:::-;23176:139;;23074:248;;;:::o;23328:419::-;;23532:2;23521:9;23517:18;23509:26;;23581:9;23575:4;23571:20;23567:1;23556:9;23552:17;23545:47;23609:131;23735:4;23609:131;:::i;:::-;23601:139;;23499:248;;;:::o;23753:419::-;;23957:2;23946:9;23942:18;23934:26;;24006:9;24000:4;23996:20;23992:1;23981:9;23977:17;23970:47;24034:131;24160:4;24034:131;:::i;:::-;24026:139;;23924:248;;;:::o;24178:419::-;;24382:2;24371:9;24367:18;24359:26;;24431:9;24425:4;24421:20;24417:1;24406:9;24402:17;24395:47;24459:131;24585:4;24459:131;:::i;:::-;24451:139;;24349:248;;;:::o;24603:419::-;;24807:2;24796:9;24792:18;24784:26;;24856:9;24850:4;24846:20;24842:1;24831:9;24827:17;24820:47;24884:131;25010:4;24884:131;:::i;:::-;24876:139;;24774:248;;;:::o;25028:419::-;;25232:2;25221:9;25217:18;25209:26;;25281:9;25275:4;25271:20;25267:1;25256:9;25252:17;25245:47;25309:131;25435:4;25309:131;:::i;:::-;25301:139;;25199:248;;;:::o;25453:222::-;;25584:2;25573:9;25569:18;25561:26;;25597:71;25665:1;25654:9;25650:17;25641:6;25597:71;:::i;:::-;25551:124;;;;:::o;25681:332::-;;25840:2;25829:9;25825:18;25817:26;;25853:71;25921:1;25910:9;25906:17;25897:6;25853:71;:::i;:::-;25934:72;26002:2;25991:9;25987:18;25978:6;25934:72;:::i;:::-;25807:206;;;;;:::o;26019:214::-;;26146:2;26135:9;26131:18;26123:26;;26159:67;26223:1;26212:9;26208:17;26199:6;26159:67;:::i;:::-;26113:120;;;;:::o;26239:99::-;;26325:5;26319:12;26309:22;;26298:40;;;:::o;26344:169::-;;26462:6;26457:3;26450:19;26502:4;26497:3;26493:14;26478:29;;26440:73;;;;:::o;26519:305::-;;26578:20;26596:1;26578:20;:::i;:::-;26573:25;;26612:20;26630:1;26612:20;:::i;:::-;26607:25;;26766:1;26698:66;26694:74;26691:1;26688:81;26685:2;;;26772:18;;:::i;:::-;26685:2;26816:1;26813;26809:9;26802:16;;26563:261;;;;:::o;26830:185::-;;26887:20;26905:1;26887:20;:::i;:::-;26882:25;;26921:20;26939:1;26921:20;:::i;:::-;26916:25;;26960:1;26950:2;;26965:18;;:::i;:::-;26950:2;27007:1;27004;27000:9;26995:14;;26872:143;;;;:::o;27021:348::-;;27084:20;27102:1;27084:20;:::i;:::-;27079:25;;27118:20;27136:1;27118:20;:::i;:::-;27113:25;;27306:1;27238:66;27234:74;27231:1;27228:81;27223:1;27216:9;27209:17;27205:105;27202:2;;;27313:18;;:::i;:::-;27202:2;27361:1;27358;27354:9;27343:20;;27069:300;;;;:::o;27375:191::-;;27435:20;27453:1;27435:20;:::i;:::-;27430:25;;27469:20;27487:1;27469:20;:::i;:::-;27464:25;;27508:1;27505;27502:8;27499:2;;;27513:18;;:::i;:::-;27499:2;27558:1;27555;27551:9;27543:17;;27420:146;;;;:::o;27572:96::-;;27638:24;27656:5;27638:24;:::i;:::-;27627:35;;27617:51;;;:::o;27674:90::-;;27751:5;27744:13;27737:21;27726:32;;27716:48;;;:::o;27770:126::-;;27847:42;27840:5;27836:54;27825:65;;27815:81;;;:::o;27902:77::-;;27968:5;27957:16;;27947:32;;;:::o;27985:86::-;;28060:4;28053:5;28049:16;28038:27;;28028:43;;;:::o;28077:307::-;28145:1;28155:113;28169:6;28166:1;28163:13;28155:113;;;28254:1;28249:3;28245:11;28239:18;28235:1;28230:3;28226:11;28219:39;28191:2;28188:1;28184:10;28179:15;;28155:113;;;28286:6;28283:1;28280:13;28277:2;;;28366:1;28357:6;28352:3;28348:16;28341:27;28277:2;28126:258;;;;:::o;28390:320::-;;28471:1;28465:4;28461:12;28451:22;;28518:1;28512:4;28508:12;28539:18;28529:2;;28595:4;28587:6;28583:17;28573:27;;28529:2;28657;28649:6;28646:14;28626:18;28623:38;28620:2;;;28676:18;;:::i;:::-;28620:2;28441:269;;;;:::o;28716:180::-;28764:77;28761:1;28754:88;28861:4;28858:1;28851:15;28885:4;28882:1;28875:15;28902:180;28950:77;28947:1;28940:88;29047:4;29044:1;29037:15;29071:4;29068:1;29061:15;29088:180;29136:77;29133:1;29126:88;29233:4;29230:1;29223:15;29257:4;29254:1;29247:15;29274:102;;29366:2;29362:7;29357:2;29350:5;29346:14;29342:28;29332:38;;29322:54;;;:::o;29382:122::-;29455:24;29473:5;29455:24;:::i;:::-;29448:5;29445:35;29435:2;;29494:1;29491;29484:12;29435:2;29425:79;:::o;29510:122::-;29583:24;29601:5;29583:24;:::i;:::-;29576:5;29573:35;29563:2;;29622:1;29619;29612:12;29563:2;29553:79;:::o

Swarm Source

ipfs://17377a376aabc6f5d7c7d682331637e6dad1626d80fb6366748fa7b3beb5d01b

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.