ETH Price: $3,379.94 (-1.96%)
Gas: 6 Gwei

Contract

0xAef563ce53f153edF9C676910B3E91D56573b88c
 

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Redeem203275472024-07-17 16:49:477 days ago1721234987IN
0xAef563ce...56573b88c
0 ETH0.0018412719.08017033
Redeem203275462024-07-17 16:49:357 days ago1721234975IN
0xAef563ce...56573b88c
0 ETH0.0021980419.34866528
Redeem202983192024-07-13 14:57:1111 days ago1720882631IN
0xAef563ce...56573b88c
0 ETH0.000364353.77686223
Redeem202983182024-07-13 14:56:5911 days ago1720882619IN
0xAef563ce...56573b88c
0 ETH0.000370683.84244428
Redeem201621082024-06-24 14:22:1130 days ago1719238931IN
0xAef563ce...56573b88c
0 ETH0.000953629.88269508
Redeem201621072024-06-24 14:21:5930 days ago1719238919IN
0xAef563ce...56573b88c
0 ETH0.0011760310.35298115
Redeem201177082024-06-18 9:18:5936 days ago1718702339IN
0xAef563ce...56573b88c
0 ETH0.000705867.3177265
Redeem201177072024-06-18 9:18:4736 days ago1718702327IN
0xAef563ce...56573b88c
0 ETH0.000817427.19818401
Redeem201090422024-06-17 4:11:4737 days ago1718597507IN
0xAef563ce...56573b88c
0 ETH0.000410294.25198255
Redeem201090412024-06-17 4:11:3537 days ago1718597495IN
0xAef563ce...56573b88c
0 ETH0.000448273.94626352
Redeem200985842024-06-15 17:07:5939 days ago1718471279IN
0xAef563ce...56573b88c
0 ETH0.000797098.26224425
Redeem200985812024-06-15 17:07:2339 days ago1718471243IN
0xAef563ce...56573b88c
0 ETH0.000928268.17322261
Redeem200939212024-06-15 1:27:1139 days ago1718414831IN
0xAef563ce...56573b88c
0 ETH0.000462724.79664961
Redeem200939202024-06-15 1:26:5939 days ago1718414819IN
0xAef563ce...56573b88c
0 ETH0.00051144.50310359
Redeem200908072024-06-14 15:01:2340 days ago1718377283IN
0xAef563ce...56573b88c
0 ETH0.0019150719.92541373
Redeem200908062024-06-14 15:01:1140 days ago1718377271IN
0xAef563ce...56573b88c
0 ETH0.0023860821.07624419
Redeem200724672024-06-12 1:28:2342 days ago1718155703IN
0xAef563ce...56573b88c
0 ETH0.000747487.74787009
Redeem200724662024-06-12 1:28:1142 days ago1718155691IN
0xAef563ce...56573b88c
0 ETH0.00087377.69265929
Redeem200680742024-06-11 10:45:2343 days ago1718102723IN
0xAef563ce...56573b88c
0 ETH0.0012558113.01332054
Redeem200680732024-06-11 10:45:1143 days ago1718102711IN
0xAef563ce...56573b88c
0 ETH0.0014301512.58916408
Redeem200623052024-06-10 15:24:1144 days ago1718033051IN
0xAef563ce...56573b88c
0 ETH0.0015774116.3492722
Redeem200623042024-06-10 15:23:5944 days ago1718033039IN
0xAef563ce...56573b88c
0 ETH0.0018860716.60538104
Redeem200220802024-06-05 0:36:1149 days ago1717547771IN
0xAef563ce...56573b88c
0 ETH0.000772268.00522822
Redeem200220632024-06-05 0:32:4749 days ago1717547567IN
0xAef563ce...56573b88c
0 ETH0.000828437.29451722
Redeem200126342024-06-03 16:57:4751 days ago1717433867IN
0xAef563ce...56573b88c
0 ETH0.0013183213.6653691
View all transactions

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Block From To
146464802022-04-24 8:40:11822 days ago1650789611  Contract Creation0 ETH
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0xAf3BC4Bb...187c719a2
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
Coin98Vault

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-20
*/

// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {

  /**
    * @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 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 Required interface of an ERC721 compliant contract.
 */
interface IERC721 {

  /**
    * @dev Transfers `tokenId` token from `from` to `to`.
    *
    * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
    *
    * Requirements:
    *
    * - `from` cannot be the zero address.
    * - `to` cannot be the zero address.
    * - `tokenId` token must be owned by `from`.
    * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
    *
    * Emits a {Transfer} event.
    */
  function transferFrom(
    address from,
    address to,
    uint256 tokenId
  ) external;
}

interface IVaultConfig {

  function fee() external view returns (uint256);
  function gasLimit() external view returns (uint256);
  function ownerReward() external view returns (uint256);
}

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

  function _msgData() internal view returns (bytes memory) {
    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
    return msg.data;
  }

  function _msgValue() internal view returns (uint256) {
    return msg.value;
  }
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
  address private _owner;
  address private _newOwner;

  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

  /**
   * @dev Initializes the contract setting the deployer as the initial owner.
   */
  constructor (address owner_) {
    _owner = owner_;
    emit OwnershipTransferred(address(0), owner_);
  }

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

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

  /**
   * @dev Accept the ownership transfer. This is to make sure that the contract is
   * transferred to a working address
   *
   * Can only be called by the newly transfered owner.
   */
  function acceptOwnership() public {
    require(_msgSender() == _newOwner, "Ownable: only new owner can accept ownership");
    address oldOwner = _owner;
    _owner = _newOwner;
    _newOwner = address(0);
    emit OwnershipTransferred(oldOwner, _owner);
  }

  /**
   * @dev Transfers ownership of the contract to a new account (`newOwner`).
   *
   * Can only be called by the current owner.
   */
  function transferOwnership(address newOwner) public onlyOwner {
    require(newOwner != address(0), "Ownable: new owner is the zero address");
    _newOwner = newOwner;
  }
}

/**
 * @dev Enable contract to receive gas token
 */
abstract contract Payable {

  event Deposited(address indexed sender, uint256 value);

  fallback() external payable {
    if(msg.value > 0) {
      emit Deposited(msg.sender, msg.value);
    }
  }

  /// @dev enable wallet to receive ETH
  receive() external payable {
    if(msg.value > 0) {
      emit Deposited(msg.sender, msg.value);
    }
  }
}

/**
 * @dev These functions deal with verification of Merkle trees (hash trees),
 */
library MerkleProof {
  /**
    * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
    * defined by `root`. For this, a `proof` must be provided, containing
    * sibling hashes on the branch from the leaf to the root of the tree. Each
    * pair of leaves and each pair of pre-images are assumed to be sorted.
    */
  function verify(bytes32[] memory proof, bytes32 root, bytes32 leaf) internal pure returns (bool) {
    bytes32 computedHash = leaf;

    for (uint256 i = 0; i < proof.length; i++) {
      bytes32 proofElement = proof[i];

      if (computedHash <= proofElement) {
        // Hash(current computed hash + current element of the proof)
        computedHash = keccak256(abi.encodePacked(computedHash, proofElement));
      } else {
        // Hash(current element of the proof + current computed hash)
        computedHash = keccak256(abi.encodePacked(proofElement, computedHash));
      }
    }

    // Check if the computed hash (root) is equal to the provided root
    return computedHash == root;
  }
}

/**
 * @dev Coin98Vault contract to enable vesting funds to investors
 */
contract Coin98Vault is Ownable, Payable {

  address private _factory;
  address[] private _admins;
  mapping(address => bool) private _adminStatuses;
  mapping(uint256 => EventData) private _eventDatas;
  mapping(uint256 => mapping(uint256 => bool)) private _eventRedemptions;

  /// @dev Initialize a new vault
  /// @param factory_ Back reference to the factory initialized this vault for global configuration
  /// @param owner_ Owner of this vault
  constructor(address factory_, address owner_) Ownable(owner_) {
    _factory = factory_;
  }

  struct EventData {
    uint256 timestamp;
    bytes32 merkleRoot;
    address receivingToken;
    address sendingToken;
    uint8 isActive;
  }

  event AdminAdded(address indexed admin);
  event AdminRemoved(address indexed admin);
  event EventCreated(uint256 eventId, EventData eventData);
  event EventUpdated(uint256 eventId, uint8 isActive);
  event Redeemed(uint256 eventId, uint256 index, address indexed recipient, address indexed receivingToken, uint256 receivingTokenAmount, address indexed sendingToken, uint256 sendingTokenAmount);
  event Withdrawn(address indexed owner, address indexed recipient, address indexed token, uint256 value);

  function _setRedemption(uint256 eventId_, uint256 index_) private {
    _eventRedemptions[eventId_][index_] = true;
  }

  /// @dev Access Control, only owner and admins are able to access the specified function
  modifier onlyAdmin() {
    require(owner() == _msgSender() || _adminStatuses[_msgSender()], "Ownable: caller is not an admin");
    _;
  }

  /// @dev returns current admins who can manage the vault
  function admins() public view returns (address[] memory) {
    return _admins;
  }

  /// @dev returns info of an event
  /// @param eventId_ ID of the event
  function eventInfo(uint256 eventId_) public view returns (EventData memory) {
    return _eventDatas[eventId_];
  }

  /// @dev address of the factory
  function factory() public view returns (address) {
    return _factory;
  }

  /// @dev check an index whether it's redeemed
  /// @param eventId_ event ID
  /// @param index_ index of redemption pre-assigned to user
  function isRedeemed(uint256 eventId_, uint256 index_) public view returns (bool) {
    return _eventRedemptions[eventId_][index_];
  }

  /// @dev claim the token which user is eligible from schedule
  /// @param eventId_ event ID
  /// @param index_ index of redemption pre-assigned to user
  /// @param recipient_ index of redemption pre-assigned to user
  /// @param receivingAmount_ amount of *receivingToken* user is eligible to redeem
  /// @param sendingAmount_ amount of *sendingToken* user must send the contract to get *receivingToken*
  /// @param proofs additional data to validate that the inputted information is valid
  function redeem(uint256 eventId_, uint256 index_, address recipient_, uint256 receivingAmount_, uint256 sendingAmount_, bytes32[] calldata proofs) public payable {
    uint256 fee = IVaultConfig(_factory).fee();
    uint256 gasLimit = IVaultConfig(_factory).gasLimit();
    if(fee > 0) {
      require(_msgValue() == fee, "C98Vault: Invalid fee");
    }

    EventData storage eventData = _eventDatas[eventId_];
    require(eventData.isActive > 0, "C98Vault: Invalid event");
    require(eventData.timestamp <= block.timestamp, "C98Vault: Schedule locked");
    require(recipient_ != address(0), "C98Vault: Invalid schedule");

    bytes32 node = keccak256(abi.encodePacked(index_, recipient_, receivingAmount_, sendingAmount_));
    require(MerkleProof.verify(proofs, eventData.merkleRoot, node), "C98Vault: Invalid proof");
    require(!isRedeemed(eventId_, index_), "C98Vault: Redeemed");

    uint256 availableAmount;
    if(eventData.receivingToken == address(0)) {
      availableAmount = address(this).balance;
    } else {
      availableAmount = IERC20(eventData.receivingToken).balanceOf(address(this));
    }

    require(receivingAmount_ <= availableAmount, "C98Vault: Insufficient token");

    _setRedemption(eventId_, index_);
    if(fee > 0) {
      uint256 reward = IVaultConfig(_factory).ownerReward();
      uint256 finalFee = fee - reward;
      (bool success, bytes memory data) = _factory.call{value:finalFee, gas:gasLimit}("");
      require(success, "C98Vault: Unable to charge fee");
    }
    if(sendingAmount_ > 0) {
      IERC20(eventData.sendingToken).transferFrom(_msgSender(), address(this), sendingAmount_);
    }
    if(eventData.receivingToken == address(0)) {
      recipient_.call{value:receivingAmount_, gas:gasLimit}("");
    } else {
      IERC20(eventData.receivingToken).transfer(recipient_, receivingAmount_);
    }

    emit Redeemed(eventId_, index_, recipient_, eventData.receivingToken, receivingAmount_, eventData.sendingToken, sendingAmount_);
  }

  /// @dev withdraw the token in the vault, no limit
  /// @param token_ address of the token, use address(0) to withdraw gas token
  /// @param destination_ recipient address to receive the fund
  /// @param amount_ amount of fund to withdaw
  function withdraw(address token_, address destination_, uint256 amount_) public onlyAdmin {
    require(destination_ != address(0), "C98Vault: Destination is zero address");

    uint256 availableAmount;
    if(token_ == address(0)) {
      availableAmount = address(this).balance;
    } else {
      availableAmount = IERC20(token_).balanceOf(address(this));
    }

    require(amount_ <= availableAmount, "C98Vault: Not enough balance");

    uint256 gasLimit = IVaultConfig(_factory).gasLimit();
    if(token_ == address(0)) {
      destination_.call{value:amount_, gas:gasLimit}("");
    } else {
      IERC20(token_).transfer(destination_, amount_);
    }

    emit Withdrawn(_msgSender(), destination_, token_, amount_);
  }

  /// @dev withdraw NFT from contract
  /// @param token_ address of the token, use address(0) to withdraw gas token
  /// @param destination_ recipient address to receive the fund
  /// @param tokenId_ ID of NFT to withdraw
  function withdrawNft(address token_, address destination_, uint256 tokenId_) public onlyAdmin {
    require(destination_ != address(0), "C98Vault: destination is zero address");

    IERC721(token_).transferFrom(address(this), destination_, tokenId_);

    emit Withdrawn(_msgSender(), destination_, token_, 1);
  }

  /// @dev create an event to specify how user can claim their token
  /// @param eventId_ event ID
  /// @param timestamp_ when the token will be available for redemption
  /// @param receivingToken_ token user will be receiving, mandatory
  /// @param sendingToken_ token user need to send in order to receive *receivingToken_*
  function createEvent(uint256 eventId_, uint256 timestamp_, bytes32 merkleRoot_, address receivingToken_, address sendingToken_) public onlyAdmin {
    require(_eventDatas[eventId_].timestamp == 0, "C98Vault: Event existed");
    require(timestamp_ != 0, "C98Vault: Invalid timestamp");
    _eventDatas[eventId_].timestamp = timestamp_;
    _eventDatas[eventId_].merkleRoot = merkleRoot_;
    _eventDatas[eventId_].receivingToken = receivingToken_;
    _eventDatas[eventId_].sendingToken = sendingToken_;
    _eventDatas[eventId_].isActive = 1;

    emit EventCreated(eventId_, _eventDatas[eventId_]);
  }

  /// @dev enable/disable a particular event
  /// @param eventId_ event ID
  /// @param isActive_ zero to inactive, any number to active
  function setEventStatus(uint256 eventId_, uint8 isActive_) public onlyAdmin {
    require(_eventDatas[eventId_].timestamp != 0, "C98Vault: Invalid event");
    _eventDatas[eventId_].isActive = isActive_;

    emit EventUpdated(eventId_, isActive_);
  }

  /// @dev add/remove admin of the vault.
  /// @param nAdmins_ list to address to update
  /// @param nStatuses_ address with same index will be added if true, or remove if false
  /// admins will have access to all tokens in the vault, and can define vesting schedule
  function setAdmins(address[] memory nAdmins_, bool[] memory nStatuses_) public onlyOwner {
    require(nAdmins_.length != 0, "C98Vault: Empty arguments");
    require(nStatuses_.length != 0, "C98Vault: Empty arguments");
    require(nAdmins_.length == nStatuses_.length, "C98Vault: Invalid arguments");

    uint256 i;
    for(i = 0; i < nAdmins_.length; i++) {
      address nAdmin = nAdmins_[i];
      if(nStatuses_[i]) {
        if(!_adminStatuses[nAdmin]) {
          _admins.push(nAdmin);
          _adminStatuses[nAdmin] = nStatuses_[i];
          emit AdminAdded(nAdmin);
        }
      } else {
        uint256 j;
        for(j = 0; j < _admins.length; j++) {
          if(_admins[j] == nAdmin) {
            _admins[j] = _admins[_admins.length - 1];
            _admins.pop();
            delete _adminStatuses[nAdmin];
            emit AdminRemoved(nAdmin);
            break;
          }
        }
      }
    }
  }
}

contract Coin98VaultFactory is Ownable, Payable, IVaultConfig {

  uint256 private _fee;
  uint256 private _gasLimit;
  uint256 private _ownerReward;
  address[] private _vaults;

  constructor () Ownable(_msgSender()) {
    _gasLimit = 9000;
  }

  /// @dev Emit `FeeUpdated` when a new vault is created
  event Created(address indexed vault);
  /// @dev Emit `FeeUpdated` when fee of the protocol is updated
  event FeeUpdated(uint256 fee);
  /// @dev Emit `OwnerRewardUpdated` when reward for vault owner is updated
  event OwnerRewardUpdated(uint256 fee);
  /// @dev Emit `Withdrawn` when owner withdraw fund from the factory
  event Withdrawn(address indexed owner, address indexed recipient, address indexed token, uint256 value);

  /// @dev get current protocol fee in gas token
  function fee() override external view returns (uint256) {
    return _fee;
  }

  /// @dev limit gas to send native token
  function gasLimit() override external view returns (uint256) {
    return _gasLimit;
  }

  /// @dev get current owner reward in gas token
  function ownerReward() override external view returns (uint256) {
    return _ownerReward;
  }

  /// @dev get list of vaults initialized through this factory
  function vaults() external view returns (address[] memory) {
    return _vaults;
  }

  /// @dev create a new vault
  /// @param owner_ Owner of newly created vault
  function createVault(address owner_) external returns (Coin98Vault vault) {
    vault = new Coin98Vault(address(this), owner_);
    _vaults.push(address(vault));
    emit Created(address(vault));
  }

  function setGasLimit(uint256 limit_) public onlyOwner {
    _gasLimit = limit_;
  }

  /// @dev change protocol fee
  /// @param fee_ amount of gas token to charge for every redeem. can be ZERO to disable protocol fee
  /// @param reward_ amount of gas token to incentive vault owner. this reward will be deduce from protocol fee
  function setFee(uint256 fee_, uint256 reward_) public onlyOwner {
    require(fee_ >= reward_, "C98Vault: Invalid reward amount");

    _fee = fee_;
    _ownerReward = reward_;

    emit FeeUpdated(fee_);
    emit OwnerRewardUpdated(reward_);
  }

  /// @dev withdraw fee collected for protocol
  /// @param token_ address of the token, use address(0) to withdraw gas token
  /// @param destination_ recipient address to receive the fund
  /// @param amount_ amount of fund to withdaw
  function withdraw(address token_, address destination_, uint256 amount_) public onlyOwner {
    require(destination_ != address(0), "C98Vault: Destination is zero address");

    uint256 availableAmount;
    if(token_ == address(0)) {
      availableAmount = address(this).balance;
    } else {
      availableAmount = IERC20(token_).balanceOf(address(this));
    }

    require(amount_ <= availableAmount, "C98Vault: Not enough balance");

    if(token_ == address(0)) {
      destination_.call{value:amount_, gas:_gasLimit}("");
    } else {
      IERC20(token_).transfer(destination_, amount_);
    }

    emit Withdrawn(_msgSender(), destination_, token_, amount_);
  }

  /// @dev withdraw NFT from contract
  /// @param token_ address of the token, use address(0) to withdraw gas token
  /// @param destination_ recipient address to receive the fund
  /// @param tokenId_ ID of NFT to withdraw
  function withdrawNft(address token_, address destination_, uint256 tokenId_) public onlyOwner {
    require(destination_ != address(0), "C98Vault: destination is zero address");

    IERC721(token_).transferFrom(address(this), destination_, tokenId_);

    emit Withdrawn(_msgSender(), destination_, token_, 1);
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"factory_","type":"address"},{"internalType":"address","name":"owner_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"admin","type":"address"}],"name":"AdminAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"admin","type":"address"}],"name":"AdminRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Deposited","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"eventId","type":"uint256"},{"components":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"},{"internalType":"address","name":"receivingToken","type":"address"},{"internalType":"address","name":"sendingToken","type":"address"},{"internalType":"uint8","name":"isActive","type":"uint8"}],"indexed":false,"internalType":"struct Coin98Vault.EventData","name":"eventData","type":"tuple"}],"name":"EventCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"eventId","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"isActive","type":"uint8"}],"name":"EventUpdated","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":false,"internalType":"uint256","name":"eventId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":true,"internalType":"address","name":"receivingToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"receivingTokenAmount","type":"uint256"},{"indexed":true,"internalType":"address","name":"sendingToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"sendingTokenAmount","type":"uint256"}],"name":"Redeemed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Withdrawn","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"admins","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"eventId_","type":"uint256"},{"internalType":"uint256","name":"timestamp_","type":"uint256"},{"internalType":"bytes32","name":"merkleRoot_","type":"bytes32"},{"internalType":"address","name":"receivingToken_","type":"address"},{"internalType":"address","name":"sendingToken_","type":"address"}],"name":"createEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"eventId_","type":"uint256"}],"name":"eventInfo","outputs":[{"components":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"},{"internalType":"address","name":"receivingToken","type":"address"},{"internalType":"address","name":"sendingToken","type":"address"},{"internalType":"uint8","name":"isActive","type":"uint8"}],"internalType":"struct Coin98Vault.EventData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"eventId_","type":"uint256"},{"internalType":"uint256","name":"index_","type":"uint256"}],"name":"isRedeemed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"eventId_","type":"uint256"},{"internalType":"uint256","name":"index_","type":"uint256"},{"internalType":"address","name":"recipient_","type":"address"},{"internalType":"uint256","name":"receivingAmount_","type":"uint256"},{"internalType":"uint256","name":"sendingAmount_","type":"uint256"},{"internalType":"bytes32[]","name":"proofs","type":"bytes32[]"}],"name":"redeem","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"nAdmins_","type":"address[]"},{"internalType":"bool[]","name":"nStatuses_","type":"bool[]"}],"name":"setAdmins","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"eventId_","type":"uint256"},{"internalType":"uint8","name":"isActive_","type":"uint8"}],"name":"setEventStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token_","type":"address"},{"internalType":"address","name":"destination_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token_","type":"address"},{"internalType":"address","name":"destination_","type":"address"},{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"withdrawNft","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

Deployed Bytecode

0x6080604052600436106100c65760003560e01c8063a5de36191161007f578063d6b7277211610059578063d6b72772146102ff578063d9caed1214610328578063f2fde38b14610351578063ff3367081461037a57610125565b8063a5de36191461026c578063c45a015514610297578063c87234b9146102c257610125565b80634a6ba2f11461017f5780634f7f8870146101a857806379ba5097146101c4578063833b463f146101db5780638da5cb5b146102045780639d0c025b1461022f57610125565b36610125576000341115610123573373ffffffffffffffffffffffffffffffffffffffff167f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c43460405161011a9190612450565b60405180910390a25b005b600034111561017d573373ffffffffffffffffffffffffffffffffffffffff167f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4346040516101749190612450565b60405180910390a25b005b34801561018b57600080fd5b506101a660048036038101906101a19190612731565b6103a3565b005b6101c260048036038101906101bd9190612830565b6108e0565b005b3480156101d057600080fd5b506101d961125e565b005b3480156101e757600080fd5b5061020260048036038101906101fd9190612915565b61143c565b005b34801561021057600080fd5b50610219611712565b604051610226919061299f565b60405180910390f35b34801561023b57600080fd5b50610256600480360381019061025191906129ba565b61173b565b6040516102639190612a98565b60405180910390f35b34801561027857600080fd5b50610281611845565b60405161028e9190612b62565b60405180910390f35b3480156102a357600080fd5b506102ac6118d3565b6040516102b9919061299f565b60405180910390f35b3480156102ce57600080fd5b506102e960048036038101906102e49190612b84565b6118fd565b6040516102f69190612bd3565b60405180910390f35b34801561030b57600080fd5b5061032660048036038101906103219190612bee565b611939565b005b34801561033457600080fd5b5061034f600480360381019061034a9190612bee565b611b78565b005b34801561035d57600080fd5b5061037860048036038101906103739190612c41565b612002565b005b34801561038657600080fd5b506103a1600480360381019061039c9190612c9a565b612132565b005b6103ab6122cf565b73ffffffffffffffffffffffffffffffffffffffff166103c9611712565b73ffffffffffffffffffffffffffffffffffffffff161461041f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161041690612d37565b60405180910390fd5b600082511415610464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161045b90612da3565b60405180910390fd5b6000815114156104a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104a090612da3565b60405180910390fd5b80518251146104ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e490612e0f565b60405180910390fd5b60005b82518110156108db57600083828151811061050e5761050d612e2f565b5b6020026020010151905082828151811061052b5761052a612e2f565b5b6020026020010151156106a657600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166106a1576003819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508282815181106105ff576105fe612e2f565b5b6020026020010151600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f44d6d25963f097ad14f29f06854a01f575648a1ef82f30e562ccd3889717e33960405160405180910390a25b6108c7565b60005b6003805490508110156108c5578173ffffffffffffffffffffffffffffffffffffffff16600382815481106106e1576106e0612e2f565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156108b2576003600160038054905061073c9190612e8d565b8154811061074d5761074c612e2f565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166003828154811061078c5761078b612e2f565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060038054806107e6576107e5612ec1565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690558173ffffffffffffffffffffffffffffffffffffffff167fa3b62bc36326052d97ea62d63c3d60308ed4c3ea8ac079dd8499f1e9c4f80c0f60405160405180910390a26108c5565b80806108bd90612ef0565b9150506106a9565b505b5080806108d390612ef0565b9150506104f0565b505050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa15801561094f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109739190612f4e565b90506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f68016b76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a089190612f4e565b90506000821115610a5d5781610a1c6122d7565b14610a5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5390612fc7565b60405180910390fd5b5b6000600560008b8152602001908152602001600020905060008160030160149054906101000a900460ff1660ff1611610acb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac290613033565b60405180910390fd5b4281600001541115610b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b099061309f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161415610b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b799061310b565b60405180910390fd5b600089898989604051602001610b9b9493929190613194565b604051602081830303815290604052805190602001209050610c03868680806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508360010154836122df565b610c42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c399061322e565b60405180910390fd5b610c4c8b8b6118fd565b15610c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c839061329a565b60405180910390fd5b60008073ffffffffffffffffffffffffffffffffffffffff168360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610cee57479050610d8f565b8260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610d4b919061299f565b602060405180830381865afa158015610d68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8c9190612f4e565b90505b80891115610dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc990613306565b60405180910390fd5b610ddc8c8c612395565b6000851115610f62576000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630c0116ba6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e789190612f4e565b905060008187610e889190612e8d565b9050600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16838990604051610ed590613357565b600060405180830381858888f193505050503d8060008114610f13576040519150601f19603f3d011682016040523d82523d6000602084013e610f18565b606091505b509150915081610f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f54906133b8565b60405180910390fd5b505050505b6000881115611018578260030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd610fb36122cf565b308b6040518463ffffffff1660e01b8152600401610fd3939291906133d8565b6020604051808303816000875af1158015610ff2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110169190613424565b505b600073ffffffffffffffffffffffffffffffffffffffff168360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156110e2578973ffffffffffffffffffffffffffffffffffffffff1689859060405161109790613357565b600060405180830381858888f193505050503d80600081146110d5576040519150601f19603f3d011682016040523d82523d6000602084013e6110da565b606091505b505050611186565b8260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8b8b6040518363ffffffff1660e01b8152600401611141929190613451565b6020604051808303816000875af1158015611160573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111849190613424565b505b8260030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167ff409ae64b6834450b7c7d1a871be39b3e8e5e1410392dece1609e952a0bbed258f8f8e8e604051611248949392919061347a565b60405180910390a4505050505050505050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661129f6122cf565b73ffffffffffffffffffffffffffffffffffffffff16146112f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ec90613531565b60405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6114446122cf565b73ffffffffffffffffffffffffffffffffffffffff16611462611712565b73ffffffffffffffffffffffffffffffffffffffff1614806114d457506004600061148b6122cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611513576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150a9061359d565b60405180910390fd5b600060056000878152602001908152602001600020600001541461156c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156390613609565b60405180910390fd5b60008414156115b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a790613675565b60405180910390fd5b836005600087815260200190815260200160002060000181905550826005600087815260200190815260200160002060010181905550816005600087815260200190815260200160002060020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806005600087815260200190815260200160002060030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016005600087815260200190815260200160002060030160146101000a81548160ff021916908360ff1602179055507f3794e18b3f4d3de301daa976248a2476083cf6ae9075916ca3746ec7c07acbd785600560008881526020019081526020016000206040516117039291906137f2565b60405180910390a15050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6117436123d6565b600560008381526020019081526020016000206040518060a001604052908160008201548152602001600182015481526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016003820160149054906101000a900460ff1660ff1660ff16815250509050919050565b606060038054806020026020016040519081016040528092919081815260200182805480156118c957602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161187f575b5050505050905090565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600060066000848152602001908152602001600020600083815260200190815260200160002060009054906101000a900460ff16905092915050565b6119416122cf565b73ffffffffffffffffffffffffffffffffffffffff1661195f611712565b73ffffffffffffffffffffffffffffffffffffffff1614806119d15750600460006119886122cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611a10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a079061359d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a779061388d565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166323b872dd3084846040518463ffffffff1660e01b8152600401611abd939291906133d8565b600060405180830381600087803b158015611ad757600080fd5b505af1158015611aeb573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16611b256122cf565b73ffffffffffffffffffffffffffffffffffffffff167fa4195c37c2947bbe89165f03e320b6903116f0b10d8cfdb522330f7ce6f9fa246001604051611b6b91906138f2565b60405180910390a4505050565b611b806122cf565b73ffffffffffffffffffffffffffffffffffffffff16611b9e611712565b73ffffffffffffffffffffffffffffffffffffffff161480611c10575060046000611bc76122cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c469061359d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb69061397f565b60405180910390fd5b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611cfd57479050611d7a565b8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611d36919061299f565b602060405180830381865afa158015611d53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d779190612f4e565b90505b80821115611dbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db4906139eb565b60405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f68016b76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e509190612f4e565b9050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415611ef8578373ffffffffffffffffffffffffffffffffffffffff16838290604051611ead90613357565b600060405180830381858888f193505050503d8060008114611eeb576040519150601f19603f3d011682016040523d82523d6000602084013e611ef0565b606091505b505050611f78565b8473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856040518363ffffffff1660e01b8152600401611f33929190613451565b6020604051808303816000875af1158015611f52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f769190613424565b505b8473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16611fae6122cf565b73ffffffffffffffffffffffffffffffffffffffff167fa4195c37c2947bbe89165f03e320b6903116f0b10d8cfdb522330f7ce6f9fa2486604051611ff39190612450565b60405180910390a45050505050565b61200a6122cf565b73ffffffffffffffffffffffffffffffffffffffff16612028611712565b73ffffffffffffffffffffffffffffffffffffffff161461207e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207590612d37565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e590613a7d565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61213a6122cf565b73ffffffffffffffffffffffffffffffffffffffff16612158611712565b73ffffffffffffffffffffffffffffffffffffffff1614806121ca5750600460006121816122cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612209576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122009061359d565b60405180910390fd5b600060056000848152602001908152602001600020600001541415612263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225a90613033565b60405180910390fd5b806005600084815260200190815260200160002060030160146101000a81548160ff021916908360ff1602179055507f2d1b07be957769da732a7889c8d02d769c80659ae1bd2302944e78380f06164482826040516122c3929190613aac565b60405180910390a15050565b600033905090565b600034905090565b60008082905060005b855181101561238757600086828151811061230657612305612e2f565b5b6020026020010151905080831161234757828160405160200161232a929190613af6565b604051602081830303815290604052805190602001209250612373565b808360405160200161235a929190613af6565b6040516020818303038152906040528051906020012092505b50808061237f90612ef0565b9150506122e8565b508381149150509392505050565b600160066000848152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6040518060a001604052806000815260200160008019168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600060ff1681525090565b6000819050919050565b61244a81612437565b82525050565b60006020820190506124656000830184612441565b92915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6124cd82612484565b810181811067ffffffffffffffff821117156124ec576124eb612495565b5b80604052505050565b60006124ff61246b565b905061250b82826124c4565b919050565b600067ffffffffffffffff82111561252b5761252a612495565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061256c82612541565b9050919050565b61257c81612561565b811461258757600080fd5b50565b60008135905061259981612573565b92915050565b60006125b26125ad84612510565b6124f5565b905080838252602082019050602084028301858111156125d5576125d461253c565b5b835b818110156125fe57806125ea888261258a565b8452602084019350506020810190506125d7565b5050509392505050565b600082601f83011261261d5761261c61247f565b5b813561262d84826020860161259f565b91505092915050565b600067ffffffffffffffff82111561265157612650612495565b5b602082029050602081019050919050565b60008115159050919050565b61267781612662565b811461268257600080fd5b50565b6000813590506126948161266e565b92915050565b60006126ad6126a884612636565b6124f5565b905080838252602082019050602084028301858111156126d0576126cf61253c565b5b835b818110156126f957806126e58882612685565b8452602084019350506020810190506126d2565b5050509392505050565b600082601f8301126127185761271761247f565b5b813561272884826020860161269a565b91505092915050565b6000806040838503121561274857612747612475565b5b600083013567ffffffffffffffff8111156127665761276561247a565b5b61277285828601612608565b925050602083013567ffffffffffffffff8111156127935761279261247a565b5b61279f85828601612703565b9150509250929050565b6127b281612437565b81146127bd57600080fd5b50565b6000813590506127cf816127a9565b92915050565b600080fd5b60008083601f8401126127f0576127ef61247f565b5b8235905067ffffffffffffffff81111561280d5761280c6127d5565b5b6020830191508360208202830111156128295761282861253c565b5b9250929050565b600080600080600080600060c0888a03121561284f5761284e612475565b5b600061285d8a828b016127c0565b975050602061286e8a828b016127c0565b965050604061287f8a828b0161258a565b95505060606128908a828b016127c0565b94505060806128a18a828b016127c0565b93505060a088013567ffffffffffffffff8111156128c2576128c161247a565b5b6128ce8a828b016127da565b925092505092959891949750929550565b6000819050919050565b6128f2816128df565b81146128fd57600080fd5b50565b60008135905061290f816128e9565b92915050565b600080600080600060a0868803121561293157612930612475565b5b600061293f888289016127c0565b9550506020612950888289016127c0565b945050604061296188828901612900565b93505060606129728882890161258a565b92505060806129838882890161258a565b9150509295509295909350565b61299981612561565b82525050565b60006020820190506129b46000830184612990565b92915050565b6000602082840312156129d0576129cf612475565b5b60006129de848285016127c0565b91505092915050565b6129f081612437565b82525050565b6129ff816128df565b82525050565b612a0e81612561565b82525050565b600060ff82169050919050565b612a2a81612a14565b82525050565b60a082016000820151612a4660008501826129e7565b506020820151612a5960208501826129f6565b506040820151612a6c6040850182612a05565b506060820151612a7f6060850182612a05565b506080820151612a926080850182612a21565b50505050565b600060a082019050612aad6000830184612a30565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000612aeb8383612a05565b60208301905092915050565b6000602082019050919050565b6000612b0f82612ab3565b612b198185612abe565b9350612b2483612acf565b8060005b83811015612b55578151612b3c8882612adf565b9750612b4783612af7565b925050600181019050612b28565b5085935050505092915050565b60006020820190508181036000830152612b7c8184612b04565b905092915050565b60008060408385031215612b9b57612b9a612475565b5b6000612ba9858286016127c0565b9250506020612bba858286016127c0565b9150509250929050565b612bcd81612662565b82525050565b6000602082019050612be86000830184612bc4565b92915050565b600080600060608486031215612c0757612c06612475565b5b6000612c158682870161258a565b9350506020612c268682870161258a565b9250506040612c37868287016127c0565b9150509250925092565b600060208284031215612c5757612c56612475565b5b6000612c658482850161258a565b91505092915050565b612c7781612a14565b8114612c8257600080fd5b50565b600081359050612c9481612c6e565b92915050565b60008060408385031215612cb157612cb0612475565b5b6000612cbf858286016127c0565b9250506020612cd085828601612c85565b9150509250929050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612d21602083612cda565b9150612d2c82612ceb565b602082019050919050565b60006020820190508181036000830152612d5081612d14565b9050919050565b7f4339385661756c743a20456d70747920617267756d656e747300000000000000600082015250565b6000612d8d601983612cda565b9150612d9882612d57565b602082019050919050565b60006020820190508181036000830152612dbc81612d80565b9050919050565b7f4339385661756c743a20496e76616c696420617267756d656e74730000000000600082015250565b6000612df9601b83612cda565b9150612e0482612dc3565b602082019050919050565b60006020820190508181036000830152612e2881612dec565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612e9882612437565b9150612ea383612437565b925082821015612eb657612eb5612e5e565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000612efb82612437565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612f2e57612f2d612e5e565b5b600182019050919050565b600081519050612f48816127a9565b92915050565b600060208284031215612f6457612f63612475565b5b6000612f7284828501612f39565b91505092915050565b7f4339385661756c743a20496e76616c6964206665650000000000000000000000600082015250565b6000612fb1601583612cda565b9150612fbc82612f7b565b602082019050919050565b60006020820190508181036000830152612fe081612fa4565b9050919050565b7f4339385661756c743a20496e76616c6964206576656e74000000000000000000600082015250565b600061301d601783612cda565b915061302882612fe7565b602082019050919050565b6000602082019050818103600083015261304c81613010565b9050919050565b7f4339385661756c743a205363686564756c65206c6f636b656400000000000000600082015250565b6000613089601983612cda565b915061309482613053565b602082019050919050565b600060208201905081810360008301526130b88161307c565b9050919050565b7f4339385661756c743a20496e76616c6964207363686564756c65000000000000600082015250565b60006130f5601a83612cda565b9150613100826130bf565b602082019050919050565b60006020820190508181036000830152613124816130e8565b9050919050565b6000819050919050565b61314661314182612437565b61312b565b82525050565b60008160601b9050919050565b60006131648261314c565b9050919050565b600061317682613159565b9050919050565b61318e61318982612561565b61316b565b82525050565b60006131a08287613135565b6020820191506131b0828661317d565b6014820191506131c08285613135565b6020820191506131d08284613135565b60208201915081905095945050505050565b7f4339385661756c743a20496e76616c69642070726f6f66000000000000000000600082015250565b6000613218601783612cda565b9150613223826131e2565b602082019050919050565b600060208201905081810360008301526132478161320b565b9050919050565b7f4339385661756c743a2052656465656d65640000000000000000000000000000600082015250565b6000613284601283612cda565b915061328f8261324e565b602082019050919050565b600060208201905081810360008301526132b381613277565b9050919050565b7f4339385661756c743a20496e73756666696369656e7420746f6b656e00000000600082015250565b60006132f0601c83612cda565b91506132fb826132ba565b602082019050919050565b6000602082019050818103600083015261331f816132e3565b9050919050565b600081905092915050565b50565b6000613341600083613326565b915061334c82613331565b600082019050919050565b600061336282613334565b9150819050919050565b7f4339385661756c743a20556e61626c6520746f20636861726765206665650000600082015250565b60006133a2601e83612cda565b91506133ad8261336c565b602082019050919050565b600060208201905081810360008301526133d181613395565b9050919050565b60006060820190506133ed6000830186612990565b6133fa6020830185612990565b6134076040830184612441565b949350505050565b60008151905061341e8161266e565b92915050565b60006020828403121561343a57613439612475565b5b60006134488482850161340f565b91505092915050565b60006040820190506134666000830185612990565b6134736020830184612441565b9392505050565b600060808201905061348f6000830187612441565b61349c6020830186612441565b6134a96040830185612441565b6134b66060830184612441565b95945050505050565b7f4f776e61626c653a206f6e6c79206e6577206f776e65722063616e206163636560008201527f7074206f776e6572736869700000000000000000000000000000000000000000602082015250565b600061351b602c83612cda565b9150613526826134bf565b604082019050919050565b6000602082019050818103600083015261354a8161350e565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420616e2061646d696e00600082015250565b6000613587601f83612cda565b915061359282613551565b602082019050919050565b600060208201905081810360008301526135b68161357a565b9050919050565b7f4339385661756c743a204576656e742065786973746564000000000000000000600082015250565b60006135f3601783612cda565b91506135fe826135bd565b602082019050919050565b60006020820190508181036000830152613622816135e6565b9050919050565b7f4339385661756c743a20496e76616c69642074696d657374616d700000000000600082015250565b600061365f601b83612cda565b915061366a82613629565b602082019050919050565b6000602082019050818103600083015261368e81613652565b9050919050565b60008160001c9050919050565b6000819050919050565b60006136bf6136ba83613695565b6136a2565b9050919050565b6000819050919050565b60006136e36136de83613695565b6136c6565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061371d61371883613695565b6136ea565b9050919050565b60008160a01c9050919050565b600060ff82169050919050565b600061375161374c83613724565b613731565b9050919050565b60a08201600080830154905061376d816136ac565b61377a60008601826129e7565b506001830154905061378b816136d0565b61379860208601826129f6565b50600283015490506137a98161370a565b6137b66040860182612a05565b50600383015490506137c78161370a565b6137d46060860182612a05565b506137de8161373e565b6137eb6080860182612a21565b5050505050565b600060c0820190506138076000830185612441565b6138146020830184613758565b9392505050565b7f4339385661756c743a2064657374696e6174696f6e206973207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613877602583612cda565b91506138828261381b565b604082019050919050565b600060208201905081810360008301526138a68161386a565b9050919050565b6000819050919050565b6000819050919050565b60006138dc6138d76138d2846138ad565b6138b7565b612437565b9050919050565b6138ec816138c1565b82525050565b600060208201905061390760008301846138e3565b92915050565b7f4339385661756c743a2044657374696e6174696f6e206973207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613969602583612cda565b91506139748261390d565b604082019050919050565b600060208201905081810360008301526139988161395c565b9050919050565b7f4339385661756c743a204e6f7420656e6f7567682062616c616e636500000000600082015250565b60006139d5601c83612cda565b91506139e08261399f565b602082019050919050565b60006020820190508181036000830152613a04816139c8565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613a67602683612cda565b9150613a7282613a0b565b604082019050919050565b60006020820190508181036000830152613a9681613a5a565b9050919050565b613aa681612a14565b82525050565b6000604082019050613ac16000830185612441565b613ace6020830184613a9d565b9392505050565b6000819050919050565b613af0613aeb826128df565b613ad5565b82525050565b6000613b028285613adf565b602082019150613b128284613adf565b602082019150819050939250505056fea2646970667358221220fa13a3c1b51345bc9dec8c75e27bc82350ec1c51045ed8fcb8c06e55265b4a7364736f6c634300080a0033

Deployed Bytecode Sourcemap

6573:9051:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5262:1;5250:9;:13;5247:72;;;5289:10;5279:32;;;5301:9;5279:32;;;;;;:::i;:::-;;;;;;;;5247:72;6573:9051;;5104:1;5092:9;:13;5089:72;;;5131:10;5121:32;;;5143:9;5121:32;;;;;;:::i;:::-;;;;;;;;5089:72;6573:9051;14667:954;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9432:2037;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4306:265;;;;;;;;;;;;;:::i;:::-;;13369:614;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3833:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8402:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8236:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8560:77;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8786:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12707:321;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11722:750;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4722:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14130:257;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14667:954;4038:12;:10;:12::i;:::-;4027:23;;:7;:5;:7::i;:::-;:23;;;4019:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14790:1:::1;14771:8;:15;:20;;14763:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;14857:1;14836:10;:17;:22;;14828:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;14922:10;:17;14903:8;:15;:36;14895:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;14980:9;14996:620;15011:8;:15;15007:1;:19;14996:620;;;15042:14;15059:8;15068:1;15059:11;;;;;;;;:::i;:::-;;;;;;;;15042:28;;15082:10;15093:1;15082:13;;;;;;;;:::i;:::-;;;;;;;;15079:530;;;15112:14;:22;15127:6;15112:22;;;;;;;;;;;;;;;;;;;;;;;;;15108:160;;15149:7;15162:6;15149:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15207:10;15218:1;15207:13;;;;;;;;:::i;:::-;;;;;;;;15182:14;:22;15197:6;15182:22;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;15249:6;15238:18;;;;;;;;;;;;15108:160;15079:530;;;15294:9;15314:286;15329:7;:14;;;;15325:1;:18;15314:286;;;15380:6;15366:20;;:7;15374:1;15366:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:20;;;15363:226;;;15416:7;15441:1;15424:7;:14;;;;:18;;;;:::i;:::-;15416:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15403:7;15411:1;15403:10;;;;;;;;:::i;:::-;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;15458:7;:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;15493:14;:22;15508:6;15493:22;;;;;;;;;;;;;;;;15486:29;;;;;;;;;;;15548:6;15535:20;;;;;;;;;;;;15570:5;;15363:226;15345:3;;;;;:::i;:::-;;;;15314:286;;;15283:326;15079:530;15033:583;15028:3;;;;;:::i;:::-;;;;14996:620;;;14756:865;14667:954:::0;;:::o;9432:2037::-;9601:11;9628:8;;;;;;;;;;;9615:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9601:42;;9650:16;9682:8;;;;;;;;;;;9669:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9650:52;;9718:1;9712:3;:7;9709:81;;;9753:3;9738:11;:9;:11::i;:::-;:18;9730:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;9709:81;9798:27;9828:11;:21;9840:8;9828:21;;;;;;;;;;;9798:51;;9885:1;9864:9;:18;;;;;;;;;;;;:22;;;9856:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9952:15;9929:9;:19;;;:38;;9921:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;10034:1;10012:24;;:10;:24;;;;10004:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;10076:12;10118:6;10126:10;10138:16;10156:14;10101:70;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10091:81;;;;;;10076:96;;10187:54;10206:6;;10187:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10214:9;:20;;;10236:4;10187:18;:54::i;:::-;10179:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;10285:28;10296:8;10306:6;10285:10;:28::i;:::-;10284:29;10276:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;10345:23;10414:1;10378:38;;:9;:24;;;;;;;;;;;;:38;;;10375:197;;;10445:21;10427:39;;10375:197;;;10514:9;:24;;;;;;;;;;;;10507:42;;;10558:4;10507:57;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10489:75;;10375:197;10608:15;10588:16;:35;;10580:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;10665:32;10680:8;10690:6;10665:14;:32::i;:::-;10713:1;10707:3;:7;10704:273;;;10725:14;10755:8;;;;;;;;;;;10742:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10725:53;;10787:16;10812:6;10806:3;:12;;;;:::i;:::-;10787:31;;10828:12;10842:17;10863:8;;;;;;;;;;;:13;;10883:8;10897;10863:47;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10827:83;;;;10927:7;10919:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;10716:261;;;;10704:273;11003:1;10986:14;:18;10983:128;;;11022:9;:22;;;;;;;;;;;;11015:43;;;11059:12;:10;:12::i;:::-;11081:4;11088:14;11015:88;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10983:128;11156:1;11120:38;;:9;:24;;;;;;;;;;;;:38;;;11117:211;;;11169:10;:15;;11191:16;11213:8;11169:57;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11117:211;;;11256:9;:24;;;;;;;;;;;;11249:41;;;11291:10;11303:16;11249:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11117:211;11424:9;:22;;;;;;;;;;;;11341:122;;11380:9;:24;;;;;;;;;;;;11341:122;;11368:10;11341:122;;;11350:8;11360:6;11406:16;11448:14;11341:122;;;;;;;;;:::i;:::-;;;;;;;;9594:1875;;;;;9432:2037;;;;;;;:::o;4306:265::-;4371:9;;;;;;;;;;;4355:25;;:12;:10;:12::i;:::-;:25;;;4347:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;4436:16;4455:6;;;;;;;;;;;4436:25;;4477:9;;;;;;;;;;;4468:6;;:18;;;;;;;;;;;;;;;;;;4513:1;4493:9;;:22;;;;;;;;;;;;;;;;;;4558:6;;;;;;;;;;4527:38;;4548:8;4527:38;;;;;;;;;;;;4340:231;4306:265::o;13369:614::-;8076:12;:10;:12::i;:::-;8065:23;;:7;:5;:7::i;:::-;:23;;;:55;;;;8092:14;:28;8107:12;:10;:12::i;:::-;8092:28;;;;;;;;;;;;;;;;;;;;;;;;;8065:55;8057:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;13564:1:::1;13529:11;:21;13541:8;13529:21;;;;;;;;;;;:31;;;:36;13521:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;13622:1;13608:10;:15;;13600:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;13696:10;13662:11;:21;13674:8;13662:21;;;;;;;;;;;:31;;:44;;;;13748:11;13713;:21;13725:8;13713:21;;;;;;;;;;;:32;;:46;;;;13805:15;13766:11;:21;13778:8;13766:21;;;;;;;;;;;:36;;;:54;;;;;;;;;;;;;;;;;;13864:13;13827:11;:21;13839:8;13827:21;;;;;;;;;;;:34;;;:50;;;;;;;;;;;;;;;;;;13917:1;13884:11;:21;13896:8;13884:21;;;;;;;;;;;:30;;;:34;;;;;;;;;;;;;;;;;;13932:45;13945:8;13955:11;:21;13967:8;13955:21;;;;;;;;;;;13932:45;;;;;;;:::i;:::-;;;;;;;;13369:614:::0;;;;;:::o;3833:73::-;3871:7;3894:6;;;;;;;;;;;3887:13;;3833:73;:::o;8402:117::-;8460:16;;:::i;:::-;8492:11;:21;8504:8;8492:21;;;;;;;;;;;8485:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8402:117;;;:::o;8236:84::-;8275:16;8307:7;8300:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8236:84;:::o;8560:77::-;8600:7;8623:8;;;;;;;;;;;8616:15;;8560:77;:::o;8786:136::-;8861:4;8881:17;:27;8899:8;8881:27;;;;;;;;;;;:35;8909:6;8881:35;;;;;;;;;;;;;;;;;;;;;8874:42;;8786:136;;;;:::o;12707:321::-;8076:12;:10;:12::i;:::-;8065:23;;:7;:5;:7::i;:::-;:23;;;:55;;;;8092:14;:28;8107:12;:10;:12::i;:::-;8092:28;;;;;;;;;;;;;;;;;;;;;;;;;8065:55;8057:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;12840:1:::1;12816:26;;:12;:26;;;;12808:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;12901:6;12893:28;;;12930:4;12937:12;12951:8;12893:67;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;13012:6;12974:48;;12998:12;12974:48;;12984:12;:10;:12::i;:::-;12974:48;;;13020:1;12974:48;;;;;;:::i;:::-;;;;;;;;12707:321:::0;;;:::o;11722:750::-;8076:12;:10;:12::i;:::-;8065:23;;:7;:5;:7::i;:::-;:23;;;:55;;;;8092:14;:28;8107:12;:10;:12::i;:::-;8092:28;;;;;;;;;;;;;;;;;;;;;;;;;8065:55;8057:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;11851:1:::1;11827:26;;:12;:26;;;;11819:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;11904:23;11955:1:::0;11937:20:::1;;:6;:20;;;11934:161;;;11986:21;11968:39;;11934:161;;;12055:6;12048:24;;;12081:4;12048:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12030:57;;11934:161;12122:15;12111:7;:26;;12103:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;12179:16;12211:8;;;;;;;;;;;12198:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12179:52;;12259:1;12241:20;;:6;:20;;;12238:161;;;12272:12;:17;;12296:7;12309:8;12272:50;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12238:161;;;12352:6;12345:23;;;12369:12;12383:7;12345:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12238:161;12450:6;12412:54;;12436:12;12412:54;;12422:12;:10;:12::i;:::-;12412:54;;;12458:7;12412:54;;;;;;:::i;:::-;;;;;;;;11812:660;;11722:750:::0;;;:::o;4722:175::-;4038:12;:10;:12::i;:::-;4027:23;;:7;:5;:7::i;:::-;:23;;;4019:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4819:1:::1;4799:22;;:8;:22;;;;4791:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4883:8;4871:9;;:20;;;;;;;;;;;;;;;;;;4722:175:::0;:::o;14130:257::-;8076:12;:10;:12::i;:::-;8065:23;;:7;:5;:7::i;:::-;:23;;;:55;;;;8092:14;:28;8107:12;:10;:12::i;:::-;8092:28;;;;;;;;;;;;;;;;;;;;;;;;;8065:55;8057:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;14256:1:::1;14221:11;:21;14233:8;14221:21;;;;;;;;;;;:31;;;:36;;14213:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;14325:9;14292:11;:21;14304:8;14292:21;;;;;;;;;;;:30;;;:42;;;;;;;;;;;;;;;;;;14348:33;14361:8;14371:9;14348:33;;;;;;;:::i;:::-;;;;;;;;14130:257:::0;;:::o;2460:84::-;2505:7;2528:10;2521:17;;2460:84;:::o;2771:82::-;2815:7;2838:9;2831:16;;2771:82;:::o;5771:718::-;5862:4;5875:20;5898:4;5875:27;;5916:9;5911:465;5935:5;:12;5931:1;:16;5911:465;;;5963:20;5986:5;5992:1;5986:8;;;;;;;;:::i;:::-;;;;;;;;5963:31;;6025:12;6009;:28;6005:364;;6163:12;6177;6146:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6136:55;;;;;;6121:70;;6005:364;;;6331:12;6345;6314:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6304:55;;;;;;6289:70;;6005:364;5954:422;5949:3;;;;;:::i;:::-;;;;5911:465;;;;6479:4;6463:12;:20;6456:27;;;5771:718;;;;;:::o;7810:121::-;7921:4;7883:17;:27;7901:8;7883:27;;;;;;;;;;;:35;7911:6;7883:35;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;7810:121;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:75::-;475:6;508:2;502:9;492:19;;442:75;:::o;523:117::-;632:1;629;622:12;646:117;755:1;752;745:12;769:117;878:1;875;868:12;892:102;933:6;984:2;980:7;975:2;968:5;964:14;960:28;950:38;;892:102;;;:::o;1000:180::-;1048:77;1045:1;1038:88;1145:4;1142:1;1135:15;1169:4;1166:1;1159:15;1186:281;1269:27;1291:4;1269:27;:::i;:::-;1261:6;1257:40;1399:6;1387:10;1384:22;1363:18;1351:10;1348:34;1345:62;1342:88;;;1410:18;;:::i;:::-;1342:88;1450:10;1446:2;1439:22;1229:238;1186:281;;:::o;1473:129::-;1507:6;1534:20;;:::i;:::-;1524:30;;1563:33;1591:4;1583:6;1563:33;:::i;:::-;1473:129;;;:::o;1608:311::-;1685:4;1775:18;1767:6;1764:30;1761:56;;;1797:18;;:::i;:::-;1761:56;1847:4;1839:6;1835:17;1827:25;;1907:4;1901;1897:15;1889:23;;1608:311;;;:::o;1925:117::-;2034:1;2031;2024:12;2048:126;2085:7;2125:42;2118:5;2114:54;2103:65;;2048:126;;;:::o;2180:96::-;2217:7;2246:24;2264:5;2246:24;:::i;:::-;2235:35;;2180:96;;;:::o;2282:122::-;2355:24;2373:5;2355:24;:::i;:::-;2348:5;2345:35;2335:63;;2394:1;2391;2384:12;2335:63;2282:122;:::o;2410:139::-;2456:5;2494:6;2481:20;2472:29;;2510:33;2537:5;2510:33;:::i;:::-;2410:139;;;;:::o;2572:710::-;2668:5;2693:81;2709:64;2766:6;2709:64;:::i;:::-;2693:81;:::i;:::-;2684:90;;2794:5;2823:6;2816:5;2809:21;2857:4;2850:5;2846:16;2839:23;;2910:4;2902:6;2898:17;2890:6;2886:30;2939:3;2931:6;2928:15;2925:122;;;2958:79;;:::i;:::-;2925:122;3073:6;3056:220;3090:6;3085:3;3082:15;3056:220;;;3165:3;3194:37;3227:3;3215:10;3194:37;:::i;:::-;3189:3;3182:50;3261:4;3256:3;3252:14;3245:21;;3132:144;3116:4;3111:3;3107:14;3100:21;;3056:220;;;3060:21;2674:608;;2572:710;;;;;:::o;3305:370::-;3376:5;3425:3;3418:4;3410:6;3406:17;3402:27;3392:122;;3433:79;;:::i;:::-;3392:122;3550:6;3537:20;3575:94;3665:3;3657:6;3650:4;3642:6;3638:17;3575:94;:::i;:::-;3566:103;;3382:293;3305:370;;;;:::o;3681:308::-;3755:4;3845:18;3837:6;3834:30;3831:56;;;3867:18;;:::i;:::-;3831:56;3917:4;3909:6;3905:17;3897:25;;3977:4;3971;3967:15;3959:23;;3681:308;;;:::o;3995:90::-;4029:7;4072:5;4065:13;4058:21;4047:32;;3995:90;;;:::o;4091:116::-;4161:21;4176:5;4161:21;:::i;:::-;4154:5;4151:32;4141:60;;4197:1;4194;4187:12;4141:60;4091:116;:::o;4213:133::-;4256:5;4294:6;4281:20;4272:29;;4310:30;4334:5;4310:30;:::i;:::-;4213:133;;;;:::o;4366:701::-;4459:5;4484:78;4500:61;4554:6;4500:61;:::i;:::-;4484:78;:::i;:::-;4475:87;;4582:5;4611:6;4604:5;4597:21;4645:4;4638:5;4634:16;4627:23;;4698:4;4690:6;4686:17;4678:6;4674:30;4727:3;4719:6;4716:15;4713:122;;;4746:79;;:::i;:::-;4713:122;4861:6;4844:217;4878:6;4873:3;4870:15;4844:217;;;4953:3;4982:34;5012:3;5000:10;4982:34;:::i;:::-;4977:3;4970:47;5046:4;5041:3;5037:14;5030:21;;4920:141;4904:4;4899:3;4895:14;4888:21;;4844:217;;;4848:21;4465:602;;4366:701;;;;;:::o;5087:364::-;5155:5;5204:3;5197:4;5189:6;5185:17;5181:27;5171:122;;5212:79;;:::i;:::-;5171:122;5329:6;5316:20;5354:91;5441:3;5433:6;5426:4;5418:6;5414:17;5354:91;:::i;:::-;5345:100;;5161:290;5087:364;;;;:::o;5457:888::-;5572:6;5580;5629:2;5617:9;5608:7;5604:23;5600:32;5597:119;;;5635:79;;:::i;:::-;5597:119;5783:1;5772:9;5768:17;5755:31;5813:18;5805:6;5802:30;5799:117;;;5835:79;;:::i;:::-;5799:117;5940:78;6010:7;6001:6;5990:9;5986:22;5940:78;:::i;:::-;5930:88;;5726:302;6095:2;6084:9;6080:18;6067:32;6126:18;6118:6;6115:30;6112:117;;;6148:79;;:::i;:::-;6112:117;6253:75;6320:7;6311:6;6300:9;6296:22;6253:75;:::i;:::-;6243:85;;6038:300;5457:888;;;;;:::o;6351:122::-;6424:24;6442:5;6424:24;:::i;:::-;6417:5;6414:35;6404:63;;6463:1;6460;6453:12;6404:63;6351:122;:::o;6479:139::-;6525:5;6563:6;6550:20;6541:29;;6579:33;6606:5;6579:33;:::i;:::-;6479:139;;;;:::o;6624:117::-;6733:1;6730;6723:12;6764:568;6837:8;6847:6;6897:3;6890:4;6882:6;6878:17;6874:27;6864:122;;6905:79;;:::i;:::-;6864:122;7018:6;7005:20;6995:30;;7048:18;7040:6;7037:30;7034:117;;;7070:79;;:::i;:::-;7034:117;7184:4;7176:6;7172:17;7160:29;;7238:3;7230:4;7222:6;7218:17;7208:8;7204:32;7201:41;7198:128;;;7245:79;;:::i;:::-;7198:128;6764:568;;;;;:::o;7338:1287::-;7469:6;7477;7485;7493;7501;7509;7517;7566:3;7554:9;7545:7;7541:23;7537:33;7534:120;;;7573:79;;:::i;:::-;7534:120;7693:1;7718:53;7763:7;7754:6;7743:9;7739:22;7718:53;:::i;:::-;7708:63;;7664:117;7820:2;7846:53;7891:7;7882:6;7871:9;7867:22;7846:53;:::i;:::-;7836:63;;7791:118;7948:2;7974:53;8019:7;8010:6;7999:9;7995:22;7974:53;:::i;:::-;7964:63;;7919:118;8076:2;8102:53;8147:7;8138:6;8127:9;8123:22;8102:53;:::i;:::-;8092:63;;8047:118;8204:3;8231:53;8276:7;8267:6;8256:9;8252:22;8231:53;:::i;:::-;8221:63;;8175:119;8361:3;8350:9;8346:19;8333:33;8393:18;8385:6;8382:30;8379:117;;;8415:79;;:::i;:::-;8379:117;8528:80;8600:7;8591:6;8580:9;8576:22;8528:80;:::i;:::-;8510:98;;;;8304:314;7338:1287;;;;;;;;;;:::o;8631:77::-;8668:7;8697:5;8686:16;;8631:77;;;:::o;8714:122::-;8787:24;8805:5;8787:24;:::i;:::-;8780:5;8777:35;8767:63;;8826:1;8823;8816:12;8767:63;8714:122;:::o;8842:139::-;8888:5;8926:6;8913:20;8904:29;;8942:33;8969:5;8942:33;:::i;:::-;8842:139;;;;:::o;8987:911::-;9082:6;9090;9098;9106;9114;9163:3;9151:9;9142:7;9138:23;9134:33;9131:120;;;9170:79;;:::i;:::-;9131:120;9290:1;9315:53;9360:7;9351:6;9340:9;9336:22;9315:53;:::i;:::-;9305:63;;9261:117;9417:2;9443:53;9488:7;9479:6;9468:9;9464:22;9443:53;:::i;:::-;9433:63;;9388:118;9545:2;9571:53;9616:7;9607:6;9596:9;9592:22;9571:53;:::i;:::-;9561:63;;9516:118;9673:2;9699:53;9744:7;9735:6;9724:9;9720:22;9699:53;:::i;:::-;9689:63;;9644:118;9801:3;9828:53;9873:7;9864:6;9853:9;9849:22;9828:53;:::i;:::-;9818:63;;9772:119;8987:911;;;;;;;;:::o;9904:118::-;9991:24;10009:5;9991:24;:::i;:::-;9986:3;9979:37;9904:118;;:::o;10028:222::-;10121:4;10159:2;10148:9;10144:18;10136:26;;10172:71;10240:1;10229:9;10225:17;10216:6;10172:71;:::i;:::-;10028:222;;;;:::o;10256:329::-;10315:6;10364:2;10352:9;10343:7;10339:23;10335:32;10332:119;;;10370:79;;:::i;:::-;10332:119;10490:1;10515:53;10560:7;10551:6;10540:9;10536:22;10515:53;:::i;:::-;10505:63;;10461:117;10256:329;;;;:::o;10591:108::-;10668:24;10686:5;10668:24;:::i;:::-;10663:3;10656:37;10591:108;;:::o;10705:::-;10782:24;10800:5;10782:24;:::i;:::-;10777:3;10770:37;10705:108;;:::o;10819:::-;10896:24;10914:5;10896:24;:::i;:::-;10891:3;10884:37;10819:108;;:::o;10933:86::-;10968:7;11008:4;11001:5;10997:16;10986:27;;10933:86;;;:::o;11025:102::-;11098:22;11114:5;11098:22;:::i;:::-;11093:3;11086:35;11025:102;;:::o;11201:1060::-;11350:4;11345:3;11341:14;11442:4;11435:5;11431:16;11425:23;11461:63;11518:4;11513:3;11509:14;11495:12;11461:63;:::i;:::-;11365:169;11622:4;11615:5;11611:16;11605:23;11641:63;11698:4;11693:3;11689:14;11675:12;11641:63;:::i;:::-;11544:170;11806:4;11799:5;11795:16;11789:23;11825:63;11882:4;11877:3;11873:14;11859:12;11825:63;:::i;:::-;11724:174;11988:4;11981:5;11977:16;11971:23;12007:63;12064:4;12059:3;12055:14;12041:12;12007:63;:::i;:::-;11908:172;12166:4;12159:5;12155:16;12149:23;12185:59;12238:4;12233:3;12229:14;12215:12;12185:59;:::i;:::-;12090:164;11319:942;11201:1060;;:::o;12267:327::-;12412:4;12450:3;12439:9;12435:19;12427:27;;12464:123;12584:1;12573:9;12569:17;12560:6;12464:123;:::i;:::-;12267:327;;;;:::o;12600:114::-;12667:6;12701:5;12695:12;12685:22;;12600:114;;;:::o;12720:184::-;12819:11;12853:6;12848:3;12841:19;12893:4;12888:3;12884:14;12869:29;;12720:184;;;;:::o;12910:132::-;12977:4;13000:3;12992:11;;13030:4;13025:3;13021:14;13013:22;;12910:132;;;:::o;13048:179::-;13117:10;13138:46;13180:3;13172:6;13138:46;:::i;:::-;13216:4;13211:3;13207:14;13193:28;;13048:179;;;;:::o;13233:113::-;13303:4;13335;13330:3;13326:14;13318:22;;13233:113;;;:::o;13382:732::-;13501:3;13530:54;13578:5;13530:54;:::i;:::-;13600:86;13679:6;13674:3;13600:86;:::i;:::-;13593:93;;13710:56;13760:5;13710:56;:::i;:::-;13789:7;13820:1;13805:284;13830:6;13827:1;13824:13;13805:284;;;13906:6;13900:13;13933:63;13992:3;13977:13;13933:63;:::i;:::-;13926:70;;14019:60;14072:6;14019:60;:::i;:::-;14009:70;;13865:224;13852:1;13849;13845:9;13840:14;;13805:284;;;13809:14;14105:3;14098:10;;13506:608;;;13382:732;;;;:::o;14120:373::-;14263:4;14301:2;14290:9;14286:18;14278:26;;14350:9;14344:4;14340:20;14336:1;14325:9;14321:17;14314:47;14378:108;14481:4;14472:6;14378:108;:::i;:::-;14370:116;;14120:373;;;;:::o;14499:474::-;14567:6;14575;14624:2;14612:9;14603:7;14599:23;14595:32;14592:119;;;14630:79;;:::i;:::-;14592:119;14750:1;14775:53;14820:7;14811:6;14800:9;14796:22;14775:53;:::i;:::-;14765:63;;14721:117;14877:2;14903:53;14948:7;14939:6;14928:9;14924:22;14903:53;:::i;:::-;14893:63;;14848:118;14499:474;;;;;:::o;14979:109::-;15060:21;15075:5;15060:21;:::i;:::-;15055:3;15048:34;14979:109;;:::o;15094:210::-;15181:4;15219:2;15208:9;15204:18;15196:26;;15232:65;15294:1;15283:9;15279:17;15270:6;15232:65;:::i;:::-;15094:210;;;;:::o;15310:619::-;15387:6;15395;15403;15452:2;15440:9;15431:7;15427:23;15423:32;15420:119;;;15458:79;;:::i;:::-;15420:119;15578:1;15603:53;15648:7;15639:6;15628:9;15624:22;15603:53;:::i;:::-;15593:63;;15549:117;15705:2;15731:53;15776:7;15767:6;15756:9;15752:22;15731:53;:::i;:::-;15721:63;;15676:118;15833:2;15859:53;15904:7;15895:6;15884:9;15880:22;15859:53;:::i;:::-;15849:63;;15804:118;15310:619;;;;;:::o;15935:329::-;15994:6;16043:2;16031:9;16022:7;16018:23;16014:32;16011:119;;;16049:79;;:::i;:::-;16011:119;16169:1;16194:53;16239:7;16230:6;16219:9;16215:22;16194:53;:::i;:::-;16184:63;;16140:117;15935:329;;;;:::o;16270:118::-;16341:22;16357:5;16341:22;:::i;:::-;16334:5;16331:33;16321:61;;16378:1;16375;16368:12;16321:61;16270:118;:::o;16394:135::-;16438:5;16476:6;16463:20;16454:29;;16492:31;16517:5;16492:31;:::i;:::-;16394:135;;;;:::o;16535:470::-;16601:6;16609;16658:2;16646:9;16637:7;16633:23;16629:32;16626:119;;;16664:79;;:::i;:::-;16626:119;16784:1;16809:53;16854:7;16845:6;16834:9;16830:22;16809:53;:::i;:::-;16799:63;;16755:117;16911:2;16937:51;16980:7;16971:6;16960:9;16956:22;16937:51;:::i;:::-;16927:61;;16882:116;16535:470;;;;;:::o;17011:169::-;17095:11;17129:6;17124:3;17117:19;17169:4;17164:3;17160:14;17145:29;;17011:169;;;;:::o;17186:182::-;17326:34;17322:1;17314:6;17310:14;17303:58;17186:182;:::o;17374:366::-;17516:3;17537:67;17601:2;17596:3;17537:67;:::i;:::-;17530:74;;17613:93;17702:3;17613:93;:::i;:::-;17731:2;17726:3;17722:12;17715:19;;17374:366;;;:::o;17746:419::-;17912:4;17950:2;17939:9;17935:18;17927:26;;17999:9;17993:4;17989:20;17985:1;17974:9;17970:17;17963:47;18027:131;18153:4;18027:131;:::i;:::-;18019:139;;17746:419;;;:::o;18171:175::-;18311:27;18307:1;18299:6;18295:14;18288:51;18171:175;:::o;18352:366::-;18494:3;18515:67;18579:2;18574:3;18515:67;:::i;:::-;18508:74;;18591:93;18680:3;18591:93;:::i;:::-;18709:2;18704:3;18700:12;18693:19;;18352:366;;;:::o;18724:419::-;18890:4;18928:2;18917:9;18913:18;18905:26;;18977:9;18971:4;18967:20;18963:1;18952:9;18948:17;18941:47;19005:131;19131:4;19005:131;:::i;:::-;18997:139;;18724:419;;;:::o;19149:177::-;19289:29;19285:1;19277:6;19273:14;19266:53;19149:177;:::o;19332:366::-;19474:3;19495:67;19559:2;19554:3;19495:67;:::i;:::-;19488:74;;19571:93;19660:3;19571:93;:::i;:::-;19689:2;19684:3;19680:12;19673:19;;19332:366;;;:::o;19704:419::-;19870:4;19908:2;19897:9;19893:18;19885:26;;19957:9;19951:4;19947:20;19943:1;19932:9;19928:17;19921:47;19985:131;20111:4;19985:131;:::i;:::-;19977:139;;19704:419;;;:::o;20129:180::-;20177:77;20174:1;20167:88;20274:4;20271:1;20264:15;20298:4;20295:1;20288:15;20315:180;20363:77;20360:1;20353:88;20460:4;20457:1;20450:15;20484:4;20481:1;20474:15;20501:191;20541:4;20561:20;20579:1;20561:20;:::i;:::-;20556:25;;20595:20;20613:1;20595:20;:::i;:::-;20590:25;;20634:1;20631;20628:8;20625:34;;;20639:18;;:::i;:::-;20625:34;20684:1;20681;20677:9;20669:17;;20501:191;;;;:::o;20698:180::-;20746:77;20743:1;20736:88;20843:4;20840:1;20833:15;20867:4;20864:1;20857:15;20884:233;20923:3;20946:24;20964:5;20946:24;:::i;:::-;20937:33;;20992:66;20985:5;20982:77;20979:103;;;21062:18;;:::i;:::-;20979:103;21109:1;21102:5;21098:13;21091:20;;20884:233;;;:::o;21123:143::-;21180:5;21211:6;21205:13;21196:22;;21227:33;21254:5;21227:33;:::i;:::-;21123:143;;;;:::o;21272:351::-;21342:6;21391:2;21379:9;21370:7;21366:23;21362:32;21359:119;;;21397:79;;:::i;:::-;21359:119;21517:1;21542:64;21598:7;21589:6;21578:9;21574:22;21542:64;:::i;:::-;21532:74;;21488:128;21272:351;;;;:::o;21629:171::-;21769:23;21765:1;21757:6;21753:14;21746:47;21629:171;:::o;21806:366::-;21948:3;21969:67;22033:2;22028:3;21969:67;:::i;:::-;21962:74;;22045:93;22134:3;22045:93;:::i;:::-;22163:2;22158:3;22154:12;22147:19;;21806:366;;;:::o;22178:419::-;22344:4;22382:2;22371:9;22367:18;22359:26;;22431:9;22425:4;22421:20;22417:1;22406:9;22402:17;22395:47;22459:131;22585:4;22459:131;:::i;:::-;22451:139;;22178:419;;;:::o;22603:173::-;22743:25;22739:1;22731:6;22727:14;22720:49;22603:173;:::o;22782:366::-;22924:3;22945:67;23009:2;23004:3;22945:67;:::i;:::-;22938:74;;23021:93;23110:3;23021:93;:::i;:::-;23139:2;23134:3;23130:12;23123:19;;22782:366;;;:::o;23154:419::-;23320:4;23358:2;23347:9;23343:18;23335:26;;23407:9;23401:4;23397:20;23393:1;23382:9;23378:17;23371:47;23435:131;23561:4;23435:131;:::i;:::-;23427:139;;23154:419;;;:::o;23579:175::-;23719:27;23715:1;23707:6;23703:14;23696:51;23579:175;:::o;23760:366::-;23902:3;23923:67;23987:2;23982:3;23923:67;:::i;:::-;23916:74;;23999:93;24088:3;23999:93;:::i;:::-;24117:2;24112:3;24108:12;24101:19;;23760:366;;;:::o;24132:419::-;24298:4;24336:2;24325:9;24321:18;24313:26;;24385:9;24379:4;24375:20;24371:1;24360:9;24356:17;24349:47;24413:131;24539:4;24413:131;:::i;:::-;24405:139;;24132:419;;;:::o;24557:176::-;24697:28;24693:1;24685:6;24681:14;24674:52;24557:176;:::o;24739:366::-;24881:3;24902:67;24966:2;24961:3;24902:67;:::i;:::-;24895:74;;24978:93;25067:3;24978:93;:::i;:::-;25096:2;25091:3;25087:12;25080:19;;24739:366;;;:::o;25111:419::-;25277:4;25315:2;25304:9;25300:18;25292:26;;25364:9;25358:4;25354:20;25350:1;25339:9;25335:17;25328:47;25392:131;25518:4;25392:131;:::i;:::-;25384:139;;25111:419;;;:::o;25536:79::-;25575:7;25604:5;25593:16;;25536:79;;;:::o;25621:157::-;25726:45;25746:24;25764:5;25746:24;:::i;:::-;25726:45;:::i;:::-;25721:3;25714:58;25621:157;;:::o;25784:94::-;25817:8;25865:5;25861:2;25857:14;25836:35;;25784:94;;;:::o;25884:::-;25923:7;25952:20;25966:5;25952:20;:::i;:::-;25941:31;;25884:94;;;:::o;25984:100::-;26023:7;26052:26;26072:5;26052:26;:::i;:::-;26041:37;;25984:100;;;:::o;26090:157::-;26195:45;26215:24;26233:5;26215:24;:::i;:::-;26195:45;:::i;:::-;26190:3;26183:58;26090:157;;:::o;26253:679::-;26449:3;26464:75;26535:3;26526:6;26464:75;:::i;:::-;26564:2;26559:3;26555:12;26548:19;;26577:75;26648:3;26639:6;26577:75;:::i;:::-;26677:2;26672:3;26668:12;26661:19;;26690:75;26761:3;26752:6;26690:75;:::i;:::-;26790:2;26785:3;26781:12;26774:19;;26803:75;26874:3;26865:6;26803:75;:::i;:::-;26903:2;26898:3;26894:12;26887:19;;26923:3;26916:10;;26253:679;;;;;;;:::o;26938:173::-;27078:25;27074:1;27066:6;27062:14;27055:49;26938:173;:::o;27117:366::-;27259:3;27280:67;27344:2;27339:3;27280:67;:::i;:::-;27273:74;;27356:93;27445:3;27356:93;:::i;:::-;27474:2;27469:3;27465:12;27458:19;;27117:366;;;:::o;27489:419::-;27655:4;27693:2;27682:9;27678:18;27670:26;;27742:9;27736:4;27732:20;27728:1;27717:9;27713:17;27706:47;27770:131;27896:4;27770:131;:::i;:::-;27762:139;;27489:419;;;:::o;27914:168::-;28054:20;28050:1;28042:6;28038:14;28031:44;27914:168;:::o;28088:366::-;28230:3;28251:67;28315:2;28310:3;28251:67;:::i;:::-;28244:74;;28327:93;28416:3;28327:93;:::i;:::-;28445:2;28440:3;28436:12;28429:19;;28088:366;;;:::o;28460:419::-;28626:4;28664:2;28653:9;28649:18;28641:26;;28713:9;28707:4;28703:20;28699:1;28688:9;28684:17;28677:47;28741:131;28867:4;28741:131;:::i;:::-;28733:139;;28460:419;;;:::o;28885:178::-;29025:30;29021:1;29013:6;29009:14;29002:54;28885:178;:::o;29069:366::-;29211:3;29232:67;29296:2;29291:3;29232:67;:::i;:::-;29225:74;;29308:93;29397:3;29308:93;:::i;:::-;29426:2;29421:3;29417:12;29410:19;;29069:366;;;:::o;29441:419::-;29607:4;29645:2;29634:9;29630:18;29622:26;;29694:9;29688:4;29684:20;29680:1;29669:9;29665:17;29658:47;29722:131;29848:4;29722:131;:::i;:::-;29714:139;;29441:419;;;:::o;29866:147::-;29967:11;30004:3;29989:18;;29866:147;;;;:::o;30019:114::-;;:::o;30139:398::-;30298:3;30319:83;30400:1;30395:3;30319:83;:::i;:::-;30312:90;;30411:93;30500:3;30411:93;:::i;:::-;30529:1;30524:3;30520:11;30513:18;;30139:398;;;:::o;30543:379::-;30727:3;30749:147;30892:3;30749:147;:::i;:::-;30742:154;;30913:3;30906:10;;30543:379;;;:::o;30928:180::-;31068:32;31064:1;31056:6;31052:14;31045:56;30928:180;:::o;31114:366::-;31256:3;31277:67;31341:2;31336:3;31277:67;:::i;:::-;31270:74;;31353:93;31442:3;31353:93;:::i;:::-;31471:2;31466:3;31462:12;31455:19;;31114:366;;;:::o;31486:419::-;31652:4;31690:2;31679:9;31675:18;31667:26;;31739:9;31733:4;31729:20;31725:1;31714:9;31710:17;31703:47;31767:131;31893:4;31767:131;:::i;:::-;31759:139;;31486:419;;;:::o;31911:442::-;32060:4;32098:2;32087:9;32083:18;32075:26;;32111:71;32179:1;32168:9;32164:17;32155:6;32111:71;:::i;:::-;32192:72;32260:2;32249:9;32245:18;32236:6;32192:72;:::i;:::-;32274;32342:2;32331:9;32327:18;32318:6;32274:72;:::i;:::-;31911:442;;;;;;:::o;32359:137::-;32413:5;32444:6;32438:13;32429:22;;32460:30;32484:5;32460:30;:::i;:::-;32359:137;;;;:::o;32502:345::-;32569:6;32618:2;32606:9;32597:7;32593:23;32589:32;32586:119;;;32624:79;;:::i;:::-;32586:119;32744:1;32769:61;32822:7;32813:6;32802:9;32798:22;32769:61;:::i;:::-;32759:71;;32715:125;32502:345;;;;:::o;32853:332::-;32974:4;33012:2;33001:9;32997:18;32989:26;;33025:71;33093:1;33082:9;33078:17;33069:6;33025:71;:::i;:::-;33106:72;33174:2;33163:9;33159:18;33150:6;33106:72;:::i;:::-;32853:332;;;;;:::o;33191:553::-;33368:4;33406:3;33395:9;33391:19;33383:27;;33420:71;33488:1;33477:9;33473:17;33464:6;33420:71;:::i;:::-;33501:72;33569:2;33558:9;33554:18;33545:6;33501:72;:::i;:::-;33583;33651:2;33640:9;33636:18;33627:6;33583:72;:::i;:::-;33665;33733:2;33722:9;33718:18;33709:6;33665:72;:::i;:::-;33191:553;;;;;;;:::o;33750:231::-;33890:34;33886:1;33878:6;33874:14;33867:58;33959:14;33954:2;33946:6;33942:15;33935:39;33750:231;:::o;33987:366::-;34129:3;34150:67;34214:2;34209:3;34150:67;:::i;:::-;34143:74;;34226:93;34315:3;34226:93;:::i;:::-;34344:2;34339:3;34335:12;34328:19;;33987:366;;;:::o;34359:419::-;34525:4;34563:2;34552:9;34548:18;34540:26;;34612:9;34606:4;34602:20;34598:1;34587:9;34583:17;34576:47;34640:131;34766:4;34640:131;:::i;:::-;34632:139;;34359:419;;;:::o;34784:181::-;34924:33;34920:1;34912:6;34908:14;34901:57;34784:181;:::o;34971:366::-;35113:3;35134:67;35198:2;35193:3;35134:67;:::i;:::-;35127:74;;35210:93;35299:3;35210:93;:::i;:::-;35328:2;35323:3;35319:12;35312:19;;34971:366;;;:::o;35343:419::-;35509:4;35547:2;35536:9;35532:18;35524:26;;35596:9;35590:4;35586:20;35582:1;35571:9;35567:17;35560:47;35624:131;35750:4;35624:131;:::i;:::-;35616:139;;35343:419;;;:::o;35768:173::-;35908:25;35904:1;35896:6;35892:14;35885:49;35768:173;:::o;35947:366::-;36089:3;36110:67;36174:2;36169:3;36110:67;:::i;:::-;36103:74;;36186:93;36275:3;36186:93;:::i;:::-;36304:2;36299:3;36295:12;36288:19;;35947:366;;;:::o;36319:419::-;36485:4;36523:2;36512:9;36508:18;36500:26;;36572:9;36566:4;36562:20;36558:1;36547:9;36543:17;36536:47;36600:131;36726:4;36600:131;:::i;:::-;36592:139;;36319:419;;;:::o;36744:177::-;36884:29;36880:1;36872:6;36868:14;36861:53;36744:177;:::o;36927:366::-;37069:3;37090:67;37154:2;37149:3;37090:67;:::i;:::-;37083:74;;37166:93;37255:3;37166:93;:::i;:::-;37284:2;37279:3;37275:12;37268:19;;36927:366;;;:::o;37299:419::-;37465:4;37503:2;37492:9;37488:18;37480:26;;37552:9;37546:4;37542:20;37538:1;37527:9;37523:17;37516:47;37580:131;37706:4;37580:131;:::i;:::-;37572:139;;37299:419;;;:::o;37724:102::-;37766:8;37813:5;37810:1;37806:13;37785:34;;37724:102;;;:::o;37832:90::-;37882:7;37911:5;37900:16;;37832:90;;;:::o;37928:166::-;37997:5;38022:66;38053:34;38076:10;38053:34;:::i;:::-;38022:66;:::i;:::-;38013:75;;37928:166;;;:::o;38100:90::-;38150:7;38179:5;38168:16;;38100:90;;;:::o;38196:166::-;38265:5;38290:66;38321:34;38344:10;38321:34;:::i;:::-;38290:66;:::i;:::-;38281:75;;38196:166;;;:::o;38368:139::-;38418:7;38458:42;38451:5;38447:54;38436:65;;38368:139;;;:::o;38513:166::-;38582:5;38607:66;38638:34;38661:10;38638:34;:::i;:::-;38607:66;:::i;:::-;38598:75;;38513:166;;;:::o;38685:106::-;38729:8;38778:5;38773:3;38769:15;38748:36;;38685:106;;;:::o;38797:99::-;38845:7;38885:4;38878:5;38874:16;38863:27;;38797:99;;;:::o;38902:165::-;38970:5;38995:66;39024:36;39049:10;39024:36;:::i;:::-;38995:66;:::i;:::-;38986:75;;38902:165;;;:::o;39141:1435::-;39287:4;39282:3;39278:14;39318:1;39398:4;39391:5;39387:16;39381:23;39368:36;;39437:55;39482:9;39437:55;:::i;:::-;39505:63;39562:4;39557:3;39553:14;39539:12;39505:63;:::i;:::-;39329:249;39658:4;39651:5;39647:16;39641:23;39628:36;;39697:55;39742:9;39697:55;:::i;:::-;39765:63;39822:4;39817:3;39813:14;39799:12;39765:63;:::i;:::-;39588:250;39922:4;39915:5;39911:16;39905:23;39892:36;;39961:55;40006:9;39961:55;:::i;:::-;40029:63;40086:4;40081:3;40077:14;40063:12;40029:63;:::i;:::-;39848:254;40184:4;40177:5;40173:16;40167:23;40154:36;;40223:55;40268:9;40223:55;:::i;:::-;40291:63;40348:4;40343:3;40339:14;40325:12;40291:63;:::i;:::-;40112:252;40433:54;40477:9;40433:54;:::i;:::-;40500:59;40553:4;40548:3;40544:14;40530:12;40500:59;:::i;:::-;40374:195;39256:1320;;39141:1435;;:::o;40582:431::-;40752:4;40790:3;40779:9;40775:19;40767:27;;40804:71;40872:1;40861:9;40857:17;40848:6;40804:71;:::i;:::-;40885:121;41002:2;40991:9;40987:18;40978:6;40885:121;:::i;:::-;40582:431;;;;;:::o;41019:224::-;41159:34;41155:1;41147:6;41143:14;41136:58;41228:7;41223:2;41215:6;41211:15;41204:32;41019:224;:::o;41249:366::-;41391:3;41412:67;41476:2;41471:3;41412:67;:::i;:::-;41405:74;;41488:93;41577:3;41488:93;:::i;:::-;41606:2;41601:3;41597:12;41590:19;;41249:366;;;:::o;41621:419::-;41787:4;41825:2;41814:9;41810:18;41802:26;;41874:9;41868:4;41864:20;41860:1;41849:9;41845:17;41838:47;41902:131;42028:4;41902:131;:::i;:::-;41894:139;;41621:419;;;:::o;42046:85::-;42091:7;42120:5;42109:16;;42046:85;;;:::o;42137:60::-;42165:3;42186:5;42179:12;;42137:60;;;:::o;42203:158::-;42261:9;42294:61;42312:42;42321:32;42347:5;42321:32;:::i;:::-;42312:42;:::i;:::-;42294:61;:::i;:::-;42281:74;;42203:158;;;:::o;42367:147::-;42462:45;42501:5;42462:45;:::i;:::-;42457:3;42450:58;42367:147;;:::o;42520:238::-;42621:4;42659:2;42648:9;42644:18;42636:26;;42672:79;42748:1;42737:9;42733:17;42724:6;42672:79;:::i;:::-;42520:238;;;;:::o;42764:224::-;42904:34;42900:1;42892:6;42888:14;42881:58;42973:7;42968:2;42960:6;42956:15;42949:32;42764:224;:::o;42994:366::-;43136:3;43157:67;43221:2;43216:3;43157:67;:::i;:::-;43150:74;;43233:93;43322:3;43233:93;:::i;:::-;43351:2;43346:3;43342:12;43335:19;;42994:366;;;:::o;43366:419::-;43532:4;43570:2;43559:9;43555:18;43547:26;;43619:9;43613:4;43609:20;43605:1;43594:9;43590:17;43583:47;43647:131;43773:4;43647:131;:::i;:::-;43639:139;;43366:419;;;:::o;43791:178::-;43931:30;43927:1;43919:6;43915:14;43908:54;43791:178;:::o;43975:366::-;44117:3;44138:67;44202:2;44197:3;44138:67;:::i;:::-;44131:74;;44214:93;44303:3;44214:93;:::i;:::-;44332:2;44327:3;44323:12;44316:19;;43975:366;;;:::o;44347:419::-;44513:4;44551:2;44540:9;44536:18;44528:26;;44600:9;44594:4;44590:20;44586:1;44575:9;44571:17;44564:47;44628:131;44754:4;44628:131;:::i;:::-;44620:139;;44347:419;;;:::o;44772:225::-;44912:34;44908:1;44900:6;44896:14;44889:58;44981:8;44976:2;44968:6;44964:15;44957:33;44772:225;:::o;45003:366::-;45145:3;45166:67;45230:2;45225:3;45166:67;:::i;:::-;45159:74;;45242:93;45331:3;45242:93;:::i;:::-;45360:2;45355:3;45351:12;45344:19;;45003:366;;;:::o;45375:419::-;45541:4;45579:2;45568:9;45564:18;45556:26;;45628:9;45622:4;45618:20;45614:1;45603:9;45599:17;45592:47;45656:131;45782:4;45656:131;:::i;:::-;45648:139;;45375:419;;;:::o;45800:112::-;45883:22;45899:5;45883:22;:::i;:::-;45878:3;45871:35;45800:112;;:::o;45918:324::-;46035:4;46073:2;46062:9;46058:18;46050:26;;46086:71;46154:1;46143:9;46139:17;46130:6;46086:71;:::i;:::-;46167:68;46231:2;46220:9;46216:18;46207:6;46167:68;:::i;:::-;45918:324;;;;;:::o;46248:79::-;46287:7;46316:5;46305:16;;46248:79;;;:::o;46333:157::-;46438:45;46458:24;46476:5;46458:24;:::i;:::-;46438:45;:::i;:::-;46433:3;46426:58;46333:157;;:::o;46496:397::-;46636:3;46651:75;46722:3;46713:6;46651:75;:::i;:::-;46751:2;46746:3;46742:12;46735:19;;46764:75;46835:3;46826:6;46764:75;:::i;:::-;46864:2;46859:3;46855:12;46848:19;;46884:3;46877:10;;46496:397;;;;;:::o

Swarm Source

ipfs://fa13a3c1b51345bc9dec8c75e27bc82350ec1c51045ed8fcb8c06e55265b4a73

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  ]
[ 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.