Contract 0xB26A49dAD928C6A045e23f00683e3ee9F65dEB23 10

 
Txn Hash Method
Block
From
To
Value
0x817b1ee896717341d1d4c7be73c2ddf4e6d7089ca77f0d1a08e98f6c07d8b0f4Add Chip Ids1179796182024-03-27 16:46:531 day 8 hrs ago0x626e7961233085eac0b80bdea8bf8cf036f3498c IN  0xb26a49dad928c6a045e23f00683e3ee9f65deb230 ETH0.0000021957680.030911091
0xfd375a10e3eea27aa3300aff4ba7a4ed844089b72697cf6207caace7b39f7960Register Chip Id...1173838322024-03-13 21:47:2115 days 3 hrs ago0xab35d3476251c6b614dc2eb36380d7af1232d822 IN  0xb26a49dad928c6a045e23f00683e3ee9f65deb230 ETH0.0001202367240.010200961
0x2dc4e1fa6740d285f5c171d8e5ff1ef641cfa9ef92514467118b26ac67657dfeAdd Chip Ids1173439422024-03-12 23:37:4116 days 2 hrs ago0x626e7961233085eac0b80bdea8bf8cf036f3498c IN  0xb26a49dad928c6a045e23f00683e3ee9f65deb230 ETH0.0001792650250.000102858
0x2b47dcc7b26b2b53250205a9b6d2bd9472839ae30f409db9473e31080ab7f2ffAdd Chip Ids1172458312024-03-10 17:07:1918 days 8 hrs ago0x626e7961233085eac0b80bdea8bf8cf036f3498c IN  0xb26a49dad928c6a045e23f00683e3ee9f65deb230 ETH0.0002503318570.000941199
0xcaaf2d49701fc7ba07551851395e4dd58e6d62da61fda729993cd67098c6f344Register Chip Id...1168998692024-03-02 16:55:1526 days 8 hrs ago0xab35d3476251c6b614dc2eb36380d7af1232d822 IN  0xb26a49dad928c6a045e23f00683e3ee9f65deb230 ETH0.0006928904550.102539048
0x517afd1055e813b29b84e91045a10cbeab2479508cae10c12681633fce01d317Register TSM1168998562024-03-02 16:54:4926 days 8 hrs ago0xab35d3476251c6b614dc2eb36380d7af1232d822 IN  0xb26a49dad928c6a045e23f00683e3ee9f65deb230 ETH0.0001226955070.103009692
0x88d684073f545219a14e7c128ecfabda6418ffd36d8daf1dc96ca42cf947d510Tsm Set Uri1166943202024-02-26 22:43:3731 days 2 hrs ago0x7162c2f74a1b968aa33e3dcfd15366264e9ec53c IN  0xb26a49dad928c6a045e23f00683e3ee9f65deb230 ETH0.0000743856330.003084499
0x54e7516d793aab6e49ed4067ce1540976f4fde10b77f1335cad7cf45c8bacc58Register Chip Id...1166935692024-02-26 22:18:3531 days 3 hrs ago0xab35d3476251c6b614dc2eb36380d7af1232d822 IN  0xb26a49dad928c6a045e23f00683e3ee9f65deb230 ETH0.0078205817630.002730392
0x8e14efd4230b5cc9b179ce04fe11005d04f4a284f50eeed27c73be5dabb2f765Register TSM1166934762024-02-26 22:15:2931 days 3 hrs ago0xab35d3476251c6b614dc2eb36380d7af1232d822 IN  0xb26a49dad928c6a045e23f00683e3ee9f65deb230 ETH0.0001164584240.002918853
0x2acb3bec7bd9fa3bf744853f240ee007aa9dead7257eb08517a6d0031fd3396aRegister Chip Id...1166845662024-02-26 17:18:2931 days 8 hrs ago0xab35d3476251c6b614dc2eb36380d7af1232d822 IN  0xb26a49dad928c6a045e23f00683e3ee9f65deb230 ETH0.0001496852980.005306926
0x93b3b3849b1bf03a67026038079719b8b869a940589e313018d2c8a0eabbf815Register TSM1166845382024-02-26 17:17:3331 days 8 hrs ago0xab35d3476251c6b614dc2eb36380d7af1232d822 IN  0xb26a49dad928c6a045e23f00683e3ee9f65deb230 ETH0.0001535183980.005331347
0xaa0583549446b58e0dd9836dc0beeae931688a9179f632c04263762bfd272448Register Chip Id...1164291872024-02-20 19:25:5137 days 6 hrs ago0xab35d3476251c6b614dc2eb36380d7af1232d822 IN  0xb26a49dad928c6a045e23f00683e3ee9f65deb230 ETH0.0013370576740.004366873
0xbc2af31302780ac1af94384c3edf790428e2a5913d3b41c457e56c25eb85893eAdd Chip Ids1159675472024-02-10 2:57:5147 days 22 hrs ago0x626e7961233085eac0b80bdea8bf8cf036f3498c IN  0xb26a49dad928c6a045e23f00683e3ee9f65deb230 ETH0.0001619726210.001327032
0x5b84d683e422bd742f5b672a05a10d2b5bd1bb06e4e7aab1f4833a521df6c42bAdd Chip Ids1159637152024-02-10 0:50:0748 days 48 mins ago0x626e7961233085eac0b80bdea8bf8cf036f3498c IN  0xb26a49dad928c6a045e23f00683e3ee9f65deb230 ETH0.0001304192040.001268752
0x681b0c10c79b68449db499172b833063c8df6ee909d0e3e684e71159a1a4d210Add Chip Id1159631432024-02-10 0:31:0348 days 1 hr ago0x626e7961233085eac0b80bdea8bf8cf036f3498c IN  0xb26a49dad928c6a045e23f00683e3ee9f65deb230 ETH0.0001348123280.001721265
0x12d169f8eac824e468e0ed0f3d5cfc73b0b2272fbd5139b34fb5d5eedef1e086Register Chip Id...1159536972024-02-09 19:16:1148 days 6 hrs ago0xab35d3476251c6b614dc2eb36380d7af1232d822 IN  0xb26a49dad928c6a045e23f00683e3ee9f65deb230 ETH0.0032299920090.00712356
0xf6f128a7ae0b2a758e5ce05029e8cc2735689caa450f38dd531aa7aef3b25bfcRegister TSM1159536152024-02-09 19:13:2748 days 6 hrs ago0xab35d3476251c6b614dc2eb36380d7af1232d822 IN  0xb26a49dad928c6a045e23f00683e3ee9f65deb230 ETH0.0003020482110.001006394
0xbc00586ff4cb8894296dae75042be251aa8bb96540ef749f6e91168cde54daa2Add Chip Id1159291642024-02-09 5:38:2548 days 20 hrs ago0x626e7961233085eac0b80bdea8bf8cf036f3498c IN  0xb26a49dad928c6a045e23f00683e3ee9f65deb230 ETH0.0001494589190.001393342
0x4f4830e8436b6f810f8071382331970f6d7ee403332aa5c4fedbc4523267844cAdd Chip Id1159289112024-02-09 5:29:5948 days 20 hrs ago0x626e7961233085eac0b80bdea8bf8cf036f3498c IN  0xb26a49dad928c6a045e23f00683e3ee9f65deb230 ETH0.0001384538240.001353519
0x837bada911d271bfe36807c9b595ff98e83497d12c50193f8da632c4bd65e05dAdd Chip Id1159288452024-02-09 5:27:4748 days 20 hrs ago0x626e7961233085eac0b80bdea8bf8cf036f3498c IN  0xb26a49dad928c6a045e23f00683e3ee9f65deb230 ETH0.0001354115650.000808628
0x7a966ce1271c3aaf4796097197081dc55923fe08d76112627490ed678a0409cfAdd Chip Id1159283022024-02-09 5:09:4148 days 20 hrs ago0x626e7961233085eac0b80bdea8bf8cf036f3498c IN  0xb26a49dad928c6a045e23f00683e3ee9f65deb230 ETH0.0001478237720.0006861
0x62facee057fe24d440390efe0e415a1e34eaaaf23a0b5095a80998164b0deb3eAdd Chip Id1159280672024-02-09 5:01:5148 days 20 hrs ago0x626e7961233085eac0b80bdea8bf8cf036f3498c IN  0xb26a49dad928c6a045e23f00683e3ee9f65deb230 ETH0.0001326234450.000323688
0x60e526eefec4b35e1f4367012c276b6aa734575c5220906e86dc643d9516961dAdd Chip Id1159280342024-02-09 5:00:4548 days 20 hrs ago0x626e7961233085eac0b80bdea8bf8cf036f3498c IN  0xb26a49dad928c6a045e23f00683e3ee9f65deb230 ETH0.0001223754810.000274971
0x102369dc13cce8afe3d618f506f7774de3c4f0dde8ec856ad4a7e1147b89d018Register Chip Id...1159187812024-02-08 23:52:1949 days 1 hr ago0xab35d3476251c6b614dc2eb36380d7af1232d822 IN  0xb26a49dad928c6a045e23f00683e3ee9f65deb230 ETH0.0004017572350.001562854
0xdb5b5e7459ee5660e96334c8f0046100a50c8bef2bb99f81fbac2ae09973270bAdd Chip Id1157551942024-02-05 4:59:2552 days 20 hrs ago0x626e7961233085eac0b80bdea8bf8cf036f3498c IN  0xb26a49dad928c6a045e23f00683e3ee9f65deb230 ETH0.0000309677370.004556727
[ Download CSV Export 
Latest 3 internal transactions
Parent Txn Hash Block From To Value
0xf3972655b96f29901b88a6d8fd0b9b7ef006c7621bce42b55b2bd514bcb38f6b1059071922023-06-22 5:52:41280 days 19 hrs ago 0xb26a49dad928c6a045e23f00683e3ee9f65deb230x00000000000000000000000000000000000000010 ETH
0xa05a1f25ad02671c0c824399d8b7122127f63f22c105a456125533704d6fb21b1059057632023-06-22 5:05:03280 days 20 hrs ago 0xb26a49dad928c6a045e23f00683e3ee9f65deb230x00000000000000000000000000000000000000010 ETH
0x4a93042b254f6ec44ed0910b6a7ad78246cbede4b0912d5f3ea3f076065d8ed71057820582023-06-19 8:21:33283 days 17 hrs ago 0xb26a49dad928c6a045e23f00683e3ee9f65deb230x00000000000000000000000000000000000000010 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ChipTable

Compiler Version
v0.8.5+commit.a4f2e591

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Optimistic.Etherscan.io on 2022-08-23
*/

pragma solidity ^0.8.5;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}


// File contracts/intf/IChipTable.sol

/***
 * == Developer History (NAME, ORG, DATE, DESCR) ==
 * Isaac Dubuque, Verilink, 7/24/22, Initial Commit
 * ================================================
 * 
 * File: IChipTable.sol
 * Description: Chip Table Interface
 */



/***
 * IChipTable
 * Provides the interface for the ERS interim on-chain chip resolution
 * The Chip Table allows the owner to register Trusted Service Managers (TSM)
 * TSMs can add chips allowing for a decentralized chip resolution
 * Chips can be look up their TSM for device information and redirect resolution
 */
interface IChipTable is IERC165
{
  /**
   * Registered TSM
   */
  event TSMRegistered(address tsmAddress, string tsmUri);
  
  /**
   * TSM approved operator
   */
  event TSMApproved(address tsmAddress, address operator);

  /**
   * Chip Registered with ERS
   */
  event ChipRegistered(bytes32 chipId, address tsmAddress);

  /**
   * TSM updated
   */
  event TSMUpdate(address tsmAddress, string tsmUri);

  /**
    Registry Version
   */
  function registryVersion() external returns (string memory);

  /**
   * Registers a TSM 
   * Permissions: Owner
   */
  function registerTSM(
    address tsmAddress, 
    string calldata uri) external;
  
  /**
   * Registers Chip Ids without signatures
   * Permissions: Owner
   */
  function registerChipIds(
    address tsmAddress,
    bytes32[] calldata chipIds
  ) external;

  /**
   * Registers Chip Ids with Signatures
   * Permissions: Owner
   */
  function safeRegisterChipIds(
    address tsmAddress,
    bytes32[] calldata chipIds,
    bytes[] calldata signatures
  ) external;

  /**
   * Returns the number of registered TSMs
   */
  function totalTSMs() 
    external view returns (uint256);

  /**
   * Returns the TSM Id by Index
   */
  function tsmByIndex(uint256 index) 
    external view returns (address);

  /**
   * Returns the TSM uri
   */
  function tsmUri(address tsmAddress) 
    external view returns (string memory);

  /**
   * Sets the TSM uri
   */
  function tsmSetUri(string calldata uri) external;

  /**
   * Returns the TSM operator
   */
  function tsmOperator(address tsmAddress) 
    external view returns (address);

  /**
   * Approves an operator for a TSM
   */
  function approve(address operator) external;

  /**
   * Adds a ChipId
   * requires a signature
   * Permissions: TSM
   */
  function addChipId(
    address tsmAddress, 
    bytes32 chipId, 
    bytes calldata signature) external;

  /**
   * Adds ChipIds
   * requires a signature
   * Permissions: TSM
   */
  function addChipIds(
    address tsmAddress,
    bytes32[] calldata chipIds,
    bytes[] calldata signatures
  ) external;

  /**
   * gets a Chip's TSM Id
   */
  function chipTSM(bytes32 chipId) 
    external view returns (address);

  /**
   * Gets the Chip Redirect Uri
   */
  function chipUri(bytes32 chipId) 
    external view returns (string memory);
  
  /**
   * Get whether chip exists
   */
  function chipExists(bytes32 chipId)
    external view returns (bool);
}


// File @openzeppelin/contracts/utils/[email protected]

// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)



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

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


// File @openzeppelin/contracts/access/[email protected]


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)



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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


// File contracts/src/chipTable.sol

/***
 * == Developer History (NAME, ORG, DATE, DESCR) ==
 * Isaac Dubuque, Verilink, 7/24/22, Initial Commit
 * ================================================
 * 
 * File: ChipTable.sol
 * Description: Chip Table Implementation
 */




/***
 * ChipTable
 * Provides the implementation for the ERS interim on-chain chip resolution
 * The Chip Table allows the owner to register Trusted Service Managers (TSM)
 * TSMs can add chips allowing for a decentralized chip resolution
 * Chips can be look up their TSM for device information and redirect resolution
 */
contract ChipTable is IChipTable, Context, Ownable
{
  struct TSM 
  {
    bool _isRegistered;
    address _operator;
    string _uri;
  }

  struct ChipInfo
  {
    address _tsmAddress;
  }

  mapping(address => TSM) private _tsms; /* mapping tsmAddress => TSM */
  mapping(bytes32 => ChipInfo) private _chipIds; /* mapping from chipId => ChipInfo */
  mapping(uint256 => address) private _tsmIndex; /* mapping from TSM index => tsmAddress */
  uint256 private _tsmCount;

  string private VERSION;

  constructor(address _contractOwner, string memory _registryVersion)
  {
    transferOwnership(_contractOwner);
    _tsmCount = 0;
    VERSION = _registryVersion;
  }

  function supportsInterface(bytes4 interfaceId)
    external pure override returns (bool)
  {
    return interfaceId == type(IChipTable).interfaceId;
  }

  function registryVersion() external view override returns (string memory)
  {
    return VERSION;
  }

  /*=== OWNER ===*/
  function registerTSM(
    address tsmAddress, 
    string calldata uri) external override onlyOwner 
  {
    _registerTSM(tsmAddress, uri);

    /* update indexing */
    _tsmIndex[_tsmCount] = tsmAddress;
    _tsmCount = _tsmCount + 1;
  }

  function registerChipIds(
    address tsmAddress,
    bytes32[] calldata chipIds
  ) external override onlyOwner
  { 
    require(_tsmExists(tsmAddress), "Owner: TSM does not exist");
    for(uint256 i = 0; i < chipIds.length; i++)
    {
      _addChip(tsmAddress, chipIds[i]);
    }
  }

  function safeRegisterChipIds(
    address tsmAddress,
    bytes32[] calldata chipIds,
    bytes[] calldata signatures
  ) external override onlyOwner
  { 
    require(_tsmExists(tsmAddress), "Owner: TSM does not exist");
    require(chipIds.length == signatures.length, "Owner: chipIds and signatures length mismatch");
    for(uint256 i = 0; i < chipIds.length; i++)
    {
      _addChipSafe(tsmAddress, chipIds[i], signatures[i]);
    }
  }


  /*=== END OWNER ===*/

  /*=== TSM ===*/
  modifier onlyTSM(address tsmAddress) 
  {
    _checkTSM(tsmAddress);
    _;
  }

  function _checkTSM(address tsmAddress) internal view
  {
    require(_tsmExists(tsmAddress), "TSM: tsm does not exist");
  }

  modifier onlyTSMOrApproved(address tsmAddress)
  {
    _checkTSMOrApproved(tsmAddress);
    _;
  }

  function _checkTSMOrApproved(address tsmAddress) internal view
  {
    require(_tsmExists(tsmAddress) && (
      (_msgSender() == tsmOperator(tsmAddress)) ||
      (_msgSender() == tsmAddress)),
      "TSM: caller is not TSM or approved");
  }

  function _registerTSM(
    address tsmAddress, 
    string calldata uri) internal
  {
    require(!_tsmExists(tsmAddress), "Owner: TSM already registered");
    _tsms[tsmAddress]._isRegistered = true;
    _tsms[tsmAddress]._operator = address(0);
    _tsms[tsmAddress]._uri = uri;
    emit TSMRegistered(tsmAddress, uri);
  }

  function _tsmExists(address tsmAddress) internal view returns (bool)
  {
    return _tsms[tsmAddress]._isRegistered != false;
  }


  function totalTSMs() external override view returns (uint256)
  {
    return _tsmCount;
  }

  function tsmByIndex(uint256 index) external override view returns (address)
  {
    require(index < _tsmCount, "TSM: index out of bounds");
    return _tsmIndex[index];
  }

  function tsmUri(address tsmAddress) 
    public override view onlyTSM(tsmAddress) returns (string memory) 
  {
    return _tsms[tsmAddress]._uri;
  }

  function tsmSetUri(string calldata uri) 
    public override onlyTSM(_msgSender())
  {
    _tsms[_msgSender()]._uri = uri;
    emit TSMUpdate(_msgSender(), uri);
  }
  
  function tsmOperator(address tsmAddress) 
    public override view onlyTSM(tsmAddress) returns (address)
  {
    return _tsms[tsmAddress]._operator;
  }

  function approve(address operator) external override onlyTSM(_msgSender())
  {
    _tsms[_msgSender()]._operator = operator;
    emit TSMApproved(_msgSender(), operator);
  }

  function addChipId(
    address tsmAddress, 
    bytes32 chipId, 
    bytes calldata signature) external override onlyTSMOrApproved(tsmAddress)
  {
    _addChipSafe(tsmAddress, chipId, signature);
  }

  function addChipIds(
    address tsmAddress,
    bytes32[] calldata chipIds,
    bytes[] calldata signatures
  ) external override onlyTSMOrApproved(tsmAddress)
  { 
    require(chipIds.length == signatures.length, "TSM: chipIds and signatures length mismatch");
    for(uint256 i = 0; i < chipIds.length; i++)
    {
      _addChipSafe(tsmAddress, chipIds[i], signatures[i]);
    }
  }

  /*=== END TSM ===*/

  /*=== CHIP ===*/
  function _chipExists(bytes32 chipId) internal view returns (bool)
  {
    return _chipIds[chipId]._tsmAddress != address(0);
  }

  function _isValidChipSignature(address tsmAddress, bytes32 chipId, bytes calldata signature) internal pure returns (bool)
  {
    address _signer;
    bytes32 msgHash;
    bytes32 _r;
    bytes32 _s;
    uint8 _v;

    /* Implementation for Kong Halo Chip 2021 Edition */
    require(signature.length == 65, "Chip: invalid sig length");

      /* unpack v, s, r */
    _r = bytes32(signature[0:32]);
    _s = bytes32(signature[32:64]);
    _v = uint8(signature[64]);

    if(uint256(_s) > 
      0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0)
    {
      revert("Chip: invalid sig `s`");
    }

    if(_v != 27 && _v != 28)
    {
      revert("Chip: invalid sig `v`");
    }

    msgHash = keccak256(
      abi.encodePacked(
        "\x19Ethereum Signed Message:\n32",
        keccak256(abi.encodePacked(tsmAddress))
      )
    );

    _signer = ecrecover(msgHash, _v, _r, _s);
    
    require(_signer != address(0x0), "Chip: invalid signer");

    return _signer == address(uint160(uint256(chipId)));
  }

  function _addChipSafe(address tsmAddress, bytes32 chipId, bytes calldata signature) internal
  {
    require(_isValidChipSignature(tsmAddress, chipId, signature), "Chip: chip signature invalid");
    _addChip(tsmAddress, chipId);
  }

  function _addChip(address tsmAddress, bytes32 chipId) internal
  {
    require(!_chipExists(chipId), "Chip: chip already exists");
    _chipIds[chipId]._tsmAddress = tsmAddress;
    emit ChipRegistered(chipId, tsmAddress);
  }

  function chipTSM(bytes32 chipId) public override view returns (address)
  {
    require(_chipExists(chipId), "Chip: chip doesn't exist");
    return _chipIds[chipId]._tsmAddress;
  }
  
  function chipUri(bytes32 chipId) external override view returns (string memory)
  {
    return tsmUri(chipTSM(chipId));
  }

  function chipExists(bytes32 chipId) public override view returns (bool)
  {
    return _chipExists(chipId);
  }

  /*=== END CHIP ===*/
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_contractOwner","type":"address"},{"internalType":"string","name":"_registryVersion","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"chipId","type":"bytes32"},{"indexed":false,"internalType":"address","name":"tsmAddress","type":"address"}],"name":"ChipRegistered","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":"address","name":"tsmAddress","type":"address"},{"indexed":false,"internalType":"address","name":"operator","type":"address"}],"name":"TSMApproved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"tsmAddress","type":"address"},{"indexed":false,"internalType":"string","name":"tsmUri","type":"string"}],"name":"TSMRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"tsmAddress","type":"address"},{"indexed":false,"internalType":"string","name":"tsmUri","type":"string"}],"name":"TSMUpdate","type":"event"},{"inputs":[{"internalType":"address","name":"tsmAddress","type":"address"},{"internalType":"bytes32","name":"chipId","type":"bytes32"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"addChipId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tsmAddress","type":"address"},{"internalType":"bytes32[]","name":"chipIds","type":"bytes32[]"},{"internalType":"bytes[]","name":"signatures","type":"bytes[]"}],"name":"addChipIds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"chipId","type":"bytes32"}],"name":"chipExists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"chipId","type":"bytes32"}],"name":"chipTSM","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"chipId","type":"bytes32"}],"name":"chipUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tsmAddress","type":"address"},{"internalType":"bytes32[]","name":"chipIds","type":"bytes32[]"}],"name":"registerChipIds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tsmAddress","type":"address"},{"internalType":"string","name":"uri","type":"string"}],"name":"registerTSM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"registryVersion","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tsmAddress","type":"address"},{"internalType":"bytes32[]","name":"chipIds","type":"bytes32[]"},{"internalType":"bytes[]","name":"signatures","type":"bytes[]"}],"name":"safeRegisterChipIds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalTSMs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tsmByIndex","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tsmAddress","type":"address"}],"name":"tsmOperator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"tsmSetUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tsmAddress","type":"address"}],"name":"tsmUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b5060405162003067380380620030678339818101604052810190620000379190620003f3565b620000576200004b6200009160201b60201c565b6200009960201b60201c565b62000068826200015d60201b60201c565b6000600481905550806005908051906020019062000088929190620002ae565b50505062000746565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200016d620001f460201b60201c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415620001e0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001d790620004a7565b60405180910390fd5b620001f1816200009960201b60201c565b50565b620002046200009160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200022a6200028560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000283576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200027a90620004c9565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620002bc90620005c5565b90600052602060002090601f016020900481019282620002e057600085556200032c565b82601f10620002fb57805160ff19168380011785556200032c565b828001600101855582156200032c579182015b828111156200032b5782518255916020019190600101906200030e565b5b5090506200033b91906200033f565b5090565b5b808211156200035a57600081600090555060010162000340565b5090565b6000620003756200036f8462000514565b620004eb565b90508281526020810184848401111562000394576200039362000694565b5b620003a18482856200058f565b509392505050565b600081519050620003ba816200072c565b92915050565b600082601f830112620003d857620003d76200068f565b5b8151620003ea8482602086016200035e565b91505092915050565b600080604083850312156200040d576200040c6200069e565b5b60006200041d85828601620003a9565b925050602083015167ffffffffffffffff81111562000441576200044062000699565b5b6200044f85828601620003c0565b9150509250929050565b6000620004686026836200054a565b91506200047582620006b4565b604082019050919050565b60006200048f6020836200054a565b91506200049c8262000703565b602082019050919050565b60006020820190508181036000830152620004c28162000459565b9050919050565b60006020820190508181036000830152620004e48162000480565b9050919050565b6000620004f76200050a565b9050620005058282620005fb565b919050565b6000604051905090565b600067ffffffffffffffff82111562000532576200053162000660565b5b6200053d82620006a3565b9050602081019050919050565b600082825260208201905092915050565b600062000568826200056f565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b83811015620005af57808201518184015260208101905062000592565b83811115620005bf576000848401525b50505050565b60006002820490506001821680620005de57607f821691505b60208210811415620005f557620005f462000631565b5b50919050565b6200060682620006a3565b810181811067ffffffffffffffff8211171562000628576200062762000660565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b62000737816200055b565b81146200074357600080fd5b50565b61291180620007566000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c8063715018a6116100ad578063d143d21e11610071578063d143d21e1461031a578063daea85c514610336578063f2fde38b14610352578063fc2c2e251461036e578063fe44ba7f1461038a57610121565b8063715018a6146102765780638da5cb5b14610280578063a845891e1461029e578063b7e83957146102ce578063bc9300bc146102fe57610121565b806334bcec73116100f457806334bcec73146101d45780633b71cad0146101f05780633f41f6561461020e5780636381fcdd1461022a57806363d99f2c1461025a57610121565b806301ffc9a71461012657806308306567146101565780630f9be51c146101865780632cc7a4ce146101a4575b600080fd5b610140600480360381019061013b91906119f3565b6103ba565b60405161014d9190611e83565b60405180910390f35b610170600480360381019061016b91906117d0565b610424565b60405161017d9190611e0d565b60405180910390f35b61018e61049b565b60405161019b9190611f0c565b60405180910390f35b6101be60048036038101906101b991906117d0565b61052d565b6040516101cb9190611f0c565b60405180910390f35b6101ee60048036038101906101e991906117fd565b61060c565b005b6101f86106a6565b604051610205919061212e565b60405180910390f35b6102286004803603810190610223919061185d565b6106b0565b005b610244600480360381019061023f91906119c6565b6107b9565b6040516102519190611f0c565b60405180910390f35b610274600480360381019061026f9190611a20565b6107d3565b005b61027e610884565b005b610288610898565b6040516102959190611e0d565b60405180910390f35b6102b860048036038101906102b391906119c6565b6108c1565b6040516102c59190611e0d565b60405180910390f35b6102e860048036038101906102e39190611a6d565b610949565b6040516102f59190611e0d565b60405180910390f35b6103186004803603810190610313919061185d565b6109ca565b005b610334600480360381019061032f9190611966565b610a8e565b005b610350600480360381019061034b91906117d0565b610b0f565b005b61036c600480360381019061036791906117d0565b610bec565b005b610388600480360381019061038391906118f2565b610c70565b005b6103a4600480360381019061039f91906119c6565b610c8d565b6040516103b19190611e83565b60405180910390f35b60007fb147e4c5000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008161043081610c9f565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b6060600580546104aa9061239b565b80601f01602080910402602001604051908101604052809291908181526020018280546104d69061239b565b80156105235780601f106104f857610100808354040283529160200191610523565b820191906000526020600020905b81548152906001019060200180831161050657829003601f168201915b5050505050905090565b60608161053981610c9f565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010180546105869061239b565b80601f01602080910402602001604051908101604052809291908181526020018280546105b29061239b565b80156105ff5780601f106105d4576101008083540402835291602001916105ff565b820191906000526020600020905b8154815290600101906020018083116105e257829003601f168201915b5050505050915050919050565b610614610cea565b61061d83610d68565b61065c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065390611f2e565b60405180910390fd5b60005b828290508110156106a05761068d84848484818110610681576106806124a2565b5b90506020020135610dc8565b8080610698906123cd565b91505061065f565b50505050565b6000600454905090565b6106b8610cea565b6106c185610d68565b610700576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f790611f2e565b60405180910390fd5b818190508484905014610748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073f9061206e565b60405180910390fd5b60005b848490508110156107b15761079e8686868481811061076d5761076c6124a2565b5b90506020020135858585818110610787576107866124a2565b5b90506020028101906107999190612149565b610ea3565b80806107a9906123cd565b91505061074b565b505050505050565b60606107cc6107c7836108c1565b61052d565b9050919050565b6107db610efe565b6107e481610c9f565b8282600160006107f2610efe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101919061083c929190611581565b507f3adb29fcd1e7fdc7b33cf5ab90f08845658f1dac367203673f7e4d37ef86510c610866610efe565b848460405161087793929190611e51565b60405180910390a1505050565b61088c610cea565b6108966000610f06565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006108cc82610fca565b61090b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290611fce565b60405180910390fd5b6002600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600454821061098f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098690611fee565b60405180910390fd5b6003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b846109d481611039565b828290508585905014610a1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1390611f8e565b60405180910390fd5b60005b85859050811015610a8557610a7287878784818110610a4157610a406124a2565b5b90506020020135868685818110610a5b57610a5a6124a2565b5b9050602002810190610a6d9190612149565b610ea3565b8080610a7d906123cd565b915050610a1f565b50505050505050565b610a96610cea565b610aa1838383611107565b8260036000600454815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600454610b049190612219565b600481905550505050565b610b17610efe565b610b2081610c9f565b8160016000610b2d610efe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fd948d2cc3b872740335be8a37ccf228cc17495c3195dc4a75c161bf8dcd568e8610bd1610efe565b83604051610be0929190611e28565b60405180910390a15050565b610bf4610cea565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5b90611f4e565b60405180910390fd5b610c6d81610f06565b50565b83610c7a81611039565b610c8685858585610ea3565b5050505050565b6000610c9882610fca565b9050919050565b610ca881610d68565b610ce7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cde906120ee565b60405180910390fd5b50565b610cf2610efe565b73ffffffffffffffffffffffffffffffffffffffff16610d10610898565b73ffffffffffffffffffffffffffffffffffffffff1614610d66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5d9061204e565b60405180910390fd5b565b6000801515600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16151514159050919050565b610dd181610fca565b15610e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0890611fae565b60405180910390fd5b816002600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507ffb004b53ebb7ed06e66f56949caf0ba61d9c4cf9909c2eece0347f65210435fd8183604051610e97929190611e9e565b60405180910390a15050565b610eaf848484846112be565b610eee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee5906120ae565b60405180910390fd5b610ef88484610dc8565b50505050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b61104281610d68565b80156110c5575061105281610424565b73ffffffffffffffffffffffffffffffffffffffff16611070610efe565b73ffffffffffffffffffffffffffffffffffffffff1614806110c457508073ffffffffffffffffffffffffffffffffffffffff166110ac610efe565b73ffffffffffffffffffffffffffffffffffffffff16145b5b611104576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fb9061210e565b60405180910390fd5b50565b61111083610d68565b15611150576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111479061200e565b60405180910390fd5b60018060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff0219169083151502179055506000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508181600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101919061127d929190611581565b507fa0650bbfdaba1081dc90b421075337a344c6d3def1a3fdfc6190a4cc906701598383836040516112b193929190611e51565b60405180910390a1505050565b6000806000806000806041888890501461130d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611304906120ce565b60405180910390fd5b8787600090602092611321939291906121de565b9061132c91906122fa565b92508787602090604092611342939291906121de565b9061134d91906122fa565b915087876040818110611363576113626124a2565b5b9050013560f81c60f81b60f81c90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08260001c11156113d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cf9061202e565b60405180910390fd5b601b8160ff16141580156113f05750601c8160ff1614155b15611430576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142790611f6e565b60405180910390fd5b896040516020016114419190611dcc565b604051602081830303815290604052805190602001206040516020016114679190611de7565b604051602081830303815290604052805190602001209350600184828585604051600081526020016040526040516114a29493929190611ec7565b6020604051602081039080840390855afa1580156114c4573d6000803e3d6000fd5b505050602060405103519450600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415611540576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115379061208e565b60405180910390fd5b8860001c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161495505050505050949350505050565b82805461158d9061239b565b90600052602060002090601f0160209004810192826115af57600085556115f6565b82601f106115c857803560ff19168380011785556115f6565b828001600101855582156115f6579182015b828111156115f55782358255916020019190600101906115da565b5b5090506116039190611607565b5090565b5b80821115611620576000816000905550600101611608565b5090565b6000813590506116338161287f565b92915050565b60008083601f84011261164f5761164e6124d6565b5b8235905067ffffffffffffffff81111561166c5761166b6124d1565b5b602083019150836020820283011115611688576116876124ef565b5b9250929050565b60008083601f8401126116a5576116a46124d6565b5b8235905067ffffffffffffffff8111156116c2576116c16124d1565b5b6020830191508360208202830111156116de576116dd6124ef565b5b9250929050565b6000813590506116f481612896565b92915050565b600081359050611709816128ad565b92915050565b60008083601f840112611725576117246124d6565b5b8235905067ffffffffffffffff811115611742576117416124d1565b5b60208301915083600182028301111561175e5761175d6124ef565b5b9250929050565b60008083601f84011261177b5761177a6124d6565b5b8235905067ffffffffffffffff811115611798576117976124d1565b5b6020830191508360018202830111156117b4576117b36124ef565b5b9250929050565b6000813590506117ca816128c4565b92915050565b6000602082840312156117e6576117e56124fe565b5b60006117f484828501611624565b91505092915050565b600080600060408486031215611816576118156124fe565b5b600061182486828701611624565b935050602084013567ffffffffffffffff811115611845576118446124f9565b5b61185186828701611639565b92509250509250925092565b600080600080600060608688031215611879576118786124fe565b5b600061188788828901611624565b955050602086013567ffffffffffffffff8111156118a8576118a76124f9565b5b6118b488828901611639565b9450945050604086013567ffffffffffffffff8111156118d7576118d66124f9565b5b6118e38882890161168f565b92509250509295509295909350565b6000806000806060858703121561190c5761190b6124fe565b5b600061191a87828801611624565b945050602061192b878288016116e5565b935050604085013567ffffffffffffffff81111561194c5761194b6124f9565b5b6119588782880161170f565b925092505092959194509250565b60008060006040848603121561197f5761197e6124fe565b5b600061198d86828701611624565b935050602084013567ffffffffffffffff8111156119ae576119ad6124f9565b5b6119ba86828701611765565b92509250509250925092565b6000602082840312156119dc576119db6124fe565b5b60006119ea848285016116e5565b91505092915050565b600060208284031215611a0957611a086124fe565b5b6000611a17848285016116fa565b91505092915050565b60008060208385031215611a3757611a366124fe565b5b600083013567ffffffffffffffff811115611a5557611a546124f9565b5b611a6185828601611765565b92509250509250929050565b600060208284031215611a8357611a826124fe565b5b6000611a91848285016117bb565b91505092915050565b611aa38161226f565b82525050565b611aba611ab58261226f565b612416565b82525050565b611ac981612281565b82525050565b611ad88161228d565b82525050565b611aef611aea8261228d565b612428565b82525050565b6000611b0183856121c2565b9350611b0e838584612359565b611b1783612503565b840190509392505050565b6000611b2d826121b7565b611b3781856121c2565b9350611b47818560208601612368565b611b5081612503565b840191505092915050565b6000611b68601c836121d3565b9150611b738261252e565b601c82019050919050565b6000611b8b6019836121c2565b9150611b9682612557565b602082019050919050565b6000611bae6026836121c2565b9150611bb982612580565b604082019050919050565b6000611bd16015836121c2565b9150611bdc826125cf565b602082019050919050565b6000611bf4602b836121c2565b9150611bff826125f8565b604082019050919050565b6000611c176019836121c2565b9150611c2282612647565b602082019050919050565b6000611c3a6018836121c2565b9150611c4582612670565b602082019050919050565b6000611c5d6018836121c2565b9150611c6882612699565b602082019050919050565b6000611c80601d836121c2565b9150611c8b826126c2565b602082019050919050565b6000611ca36015836121c2565b9150611cae826126eb565b602082019050919050565b6000611cc66020836121c2565b9150611cd182612714565b602082019050919050565b6000611ce9602d836121c2565b9150611cf48261273d565b604082019050919050565b6000611d0c6014836121c2565b9150611d178261278c565b602082019050919050565b6000611d2f601c836121c2565b9150611d3a826127b5565b602082019050919050565b6000611d526018836121c2565b9150611d5d826127de565b602082019050919050565b6000611d756017836121c2565b9150611d8082612807565b602082019050919050565b6000611d986022836121c2565b9150611da382612830565b604082019050919050565b611db7816122e3565b82525050565b611dc6816122ed565b82525050565b6000611dd88284611aa9565b60148201915081905092915050565b6000611df282611b5b565b9150611dfe8284611ade565b60208201915081905092915050565b6000602082019050611e226000830184611a9a565b92915050565b6000604082019050611e3d6000830185611a9a565b611e4a6020830184611a9a565b9392505050565b6000604082019050611e666000830186611a9a565b8181036020830152611e79818486611af5565b9050949350505050565b6000602082019050611e986000830184611ac0565b92915050565b6000604082019050611eb36000830185611acf565b611ec06020830184611a9a565b9392505050565b6000608082019050611edc6000830187611acf565b611ee96020830186611dbd565b611ef66040830185611acf565b611f036060830184611acf565b95945050505050565b60006020820190508181036000830152611f268184611b22565b905092915050565b60006020820190508181036000830152611f4781611b7e565b9050919050565b60006020820190508181036000830152611f6781611ba1565b9050919050565b60006020820190508181036000830152611f8781611bc4565b9050919050565b60006020820190508181036000830152611fa781611be7565b9050919050565b60006020820190508181036000830152611fc781611c0a565b9050919050565b60006020820190508181036000830152611fe781611c2d565b9050919050565b6000602082019050818103600083015261200781611c50565b9050919050565b6000602082019050818103600083015261202781611c73565b9050919050565b6000602082019050818103600083015261204781611c96565b9050919050565b6000602082019050818103600083015261206781611cb9565b9050919050565b6000602082019050818103600083015261208781611cdc565b9050919050565b600060208201905081810360008301526120a781611cff565b9050919050565b600060208201905081810360008301526120c781611d22565b9050919050565b600060208201905081810360008301526120e781611d45565b9050919050565b6000602082019050818103600083015261210781611d68565b9050919050565b6000602082019050818103600083015261212781611d8b565b9050919050565b60006020820190506121436000830184611dae565b92915050565b60008083356001602003843603038112612166576121656124e0565b5b80840192508235915067ffffffffffffffff821115612188576121876124db565b5b6020830192506001820236038313156121a4576121a36124f4565b5b509250929050565b600082905092915050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600080858511156121f2576121f16124ea565b5b83861115612203576122026124e5565b5b6001850283019150848603905094509492505050565b6000612224826122e3565b915061222f836122e3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561226457612263612444565b5b828201905092915050565b600061227a826122c3565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061230683836121ac565b82612311813561228d565b925060208210156123515761234c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83602003600802612521565b831692505b505092915050565b82818337600083830152505050565b60005b8381101561238657808201518184015260208101905061236b565b83811115612395576000848401525b50505050565b600060028204905060018216806123b357607f821691505b602082108114156123c7576123c6612473565b5b50919050565b60006123d8826122e3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561240b5761240a612444565b5b600182019050919050565b600061242182612432565b9050919050565b6000819050919050565b600061243d82612514565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b600082821b905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b7f4f776e65723a2054534d20646f6573206e6f7420657869737400000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f436869703a20696e76616c696420736967206076600000000000000000000000600082015250565b7f54534d3a206368697049647320616e64207369676e617475726573206c656e6760008201527f7468206d69736d61746368000000000000000000000000000000000000000000602082015250565b7f436869703a206368697020616c72656164792065786973747300000000000000600082015250565b7f436869703a206368697020646f65736e27742065786973740000000000000000600082015250565b7f54534d3a20696e646578206f7574206f6620626f756e64730000000000000000600082015250565b7f4f776e65723a2054534d20616c72656164792072656769737465726564000000600082015250565b7f436869703a20696e76616c696420736967206073600000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4f776e65723a206368697049647320616e64207369676e617475726573206c6560008201527f6e677468206d69736d6174636800000000000000000000000000000000000000602082015250565b7f436869703a20696e76616c6964207369676e6572000000000000000000000000600082015250565b7f436869703a2063686970207369676e617475726520696e76616c696400000000600082015250565b7f436869703a20696e76616c696420736967206c656e6774680000000000000000600082015250565b7f54534d3a2074736d20646f6573206e6f74206578697374000000000000000000600082015250565b7f54534d3a2063616c6c6572206973206e6f742054534d206f7220617070726f7660008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b6128888161226f565b811461289357600080fd5b50565b61289f8161228d565b81146128aa57600080fd5b50565b6128b681612297565b81146128c157600080fd5b50565b6128cd816122e3565b81146128d857600080fd5b5056fea2646970667358221220bade09347903113b68932e82e18eb0533491c685e8c9f563c7c12566e39bf59864736f6c63430008050033000000000000000000000000ab35d3476251c6b614dc2eb36380d7af1232d822000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000013100000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101215760003560e01c8063715018a6116100ad578063d143d21e11610071578063d143d21e1461031a578063daea85c514610336578063f2fde38b14610352578063fc2c2e251461036e578063fe44ba7f1461038a57610121565b8063715018a6146102765780638da5cb5b14610280578063a845891e1461029e578063b7e83957146102ce578063bc9300bc146102fe57610121565b806334bcec73116100f457806334bcec73146101d45780633b71cad0146101f05780633f41f6561461020e5780636381fcdd1461022a57806363d99f2c1461025a57610121565b806301ffc9a71461012657806308306567146101565780630f9be51c146101865780632cc7a4ce146101a4575b600080fd5b610140600480360381019061013b91906119f3565b6103ba565b60405161014d9190611e83565b60405180910390f35b610170600480360381019061016b91906117d0565b610424565b60405161017d9190611e0d565b60405180910390f35b61018e61049b565b60405161019b9190611f0c565b60405180910390f35b6101be60048036038101906101b991906117d0565b61052d565b6040516101cb9190611f0c565b60405180910390f35b6101ee60048036038101906101e991906117fd565b61060c565b005b6101f86106a6565b604051610205919061212e565b60405180910390f35b6102286004803603810190610223919061185d565b6106b0565b005b610244600480360381019061023f91906119c6565b6107b9565b6040516102519190611f0c565b60405180910390f35b610274600480360381019061026f9190611a20565b6107d3565b005b61027e610884565b005b610288610898565b6040516102959190611e0d565b60405180910390f35b6102b860048036038101906102b391906119c6565b6108c1565b6040516102c59190611e0d565b60405180910390f35b6102e860048036038101906102e39190611a6d565b610949565b6040516102f59190611e0d565b60405180910390f35b6103186004803603810190610313919061185d565b6109ca565b005b610334600480360381019061032f9190611966565b610a8e565b005b610350600480360381019061034b91906117d0565b610b0f565b005b61036c600480360381019061036791906117d0565b610bec565b005b610388600480360381019061038391906118f2565b610c70565b005b6103a4600480360381019061039f91906119c6565b610c8d565b6040516103b19190611e83565b60405180910390f35b60007fb147e4c5000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008161043081610c9f565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b6060600580546104aa9061239b565b80601f01602080910402602001604051908101604052809291908181526020018280546104d69061239b565b80156105235780601f106104f857610100808354040283529160200191610523565b820191906000526020600020905b81548152906001019060200180831161050657829003601f168201915b5050505050905090565b60608161053981610c9f565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010180546105869061239b565b80601f01602080910402602001604051908101604052809291908181526020018280546105b29061239b565b80156105ff5780601f106105d4576101008083540402835291602001916105ff565b820191906000526020600020905b8154815290600101906020018083116105e257829003601f168201915b5050505050915050919050565b610614610cea565b61061d83610d68565b61065c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065390611f2e565b60405180910390fd5b60005b828290508110156106a05761068d84848484818110610681576106806124a2565b5b90506020020135610dc8565b8080610698906123cd565b91505061065f565b50505050565b6000600454905090565b6106b8610cea565b6106c185610d68565b610700576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f790611f2e565b60405180910390fd5b818190508484905014610748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073f9061206e565b60405180910390fd5b60005b848490508110156107b15761079e8686868481811061076d5761076c6124a2565b5b90506020020135858585818110610787576107866124a2565b5b90506020028101906107999190612149565b610ea3565b80806107a9906123cd565b91505061074b565b505050505050565b60606107cc6107c7836108c1565b61052d565b9050919050565b6107db610efe565b6107e481610c9f565b8282600160006107f2610efe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101919061083c929190611581565b507f3adb29fcd1e7fdc7b33cf5ab90f08845658f1dac367203673f7e4d37ef86510c610866610efe565b848460405161087793929190611e51565b60405180910390a1505050565b61088c610cea565b6108966000610f06565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006108cc82610fca565b61090b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290611fce565b60405180910390fd5b6002600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600454821061098f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098690611fee565b60405180910390fd5b6003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b846109d481611039565b828290508585905014610a1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1390611f8e565b60405180910390fd5b60005b85859050811015610a8557610a7287878784818110610a4157610a406124a2565b5b90506020020135868685818110610a5b57610a5a6124a2565b5b9050602002810190610a6d9190612149565b610ea3565b8080610a7d906123cd565b915050610a1f565b50505050505050565b610a96610cea565b610aa1838383611107565b8260036000600454815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600454610b049190612219565b600481905550505050565b610b17610efe565b610b2081610c9f565b8160016000610b2d610efe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fd948d2cc3b872740335be8a37ccf228cc17495c3195dc4a75c161bf8dcd568e8610bd1610efe565b83604051610be0929190611e28565b60405180910390a15050565b610bf4610cea565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5b90611f4e565b60405180910390fd5b610c6d81610f06565b50565b83610c7a81611039565b610c8685858585610ea3565b5050505050565b6000610c9882610fca565b9050919050565b610ca881610d68565b610ce7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cde906120ee565b60405180910390fd5b50565b610cf2610efe565b73ffffffffffffffffffffffffffffffffffffffff16610d10610898565b73ffffffffffffffffffffffffffffffffffffffff1614610d66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5d9061204e565b60405180910390fd5b565b6000801515600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16151514159050919050565b610dd181610fca565b15610e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0890611fae565b60405180910390fd5b816002600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507ffb004b53ebb7ed06e66f56949caf0ba61d9c4cf9909c2eece0347f65210435fd8183604051610e97929190611e9e565b60405180910390a15050565b610eaf848484846112be565b610eee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee5906120ae565b60405180910390fd5b610ef88484610dc8565b50505050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b61104281610d68565b80156110c5575061105281610424565b73ffffffffffffffffffffffffffffffffffffffff16611070610efe565b73ffffffffffffffffffffffffffffffffffffffff1614806110c457508073ffffffffffffffffffffffffffffffffffffffff166110ac610efe565b73ffffffffffffffffffffffffffffffffffffffff16145b5b611104576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fb9061210e565b60405180910390fd5b50565b61111083610d68565b15611150576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111479061200e565b60405180910390fd5b60018060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff0219169083151502179055506000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508181600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101919061127d929190611581565b507fa0650bbfdaba1081dc90b421075337a344c6d3def1a3fdfc6190a4cc906701598383836040516112b193929190611e51565b60405180910390a1505050565b6000806000806000806041888890501461130d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611304906120ce565b60405180910390fd5b8787600090602092611321939291906121de565b9061132c91906122fa565b92508787602090604092611342939291906121de565b9061134d91906122fa565b915087876040818110611363576113626124a2565b5b9050013560f81c60f81b60f81c90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08260001c11156113d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cf9061202e565b60405180910390fd5b601b8160ff16141580156113f05750601c8160ff1614155b15611430576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142790611f6e565b60405180910390fd5b896040516020016114419190611dcc565b604051602081830303815290604052805190602001206040516020016114679190611de7565b604051602081830303815290604052805190602001209350600184828585604051600081526020016040526040516114a29493929190611ec7565b6020604051602081039080840390855afa1580156114c4573d6000803e3d6000fd5b505050602060405103519450600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415611540576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115379061208e565b60405180910390fd5b8860001c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161495505050505050949350505050565b82805461158d9061239b565b90600052602060002090601f0160209004810192826115af57600085556115f6565b82601f106115c857803560ff19168380011785556115f6565b828001600101855582156115f6579182015b828111156115f55782358255916020019190600101906115da565b5b5090506116039190611607565b5090565b5b80821115611620576000816000905550600101611608565b5090565b6000813590506116338161287f565b92915050565b60008083601f84011261164f5761164e6124d6565b5b8235905067ffffffffffffffff81111561166c5761166b6124d1565b5b602083019150836020820283011115611688576116876124ef565b5b9250929050565b60008083601f8401126116a5576116a46124d6565b5b8235905067ffffffffffffffff8111156116c2576116c16124d1565b5b6020830191508360208202830111156116de576116dd6124ef565b5b9250929050565b6000813590506116f481612896565b92915050565b600081359050611709816128ad565b92915050565b60008083601f840112611725576117246124d6565b5b8235905067ffffffffffffffff811115611742576117416124d1565b5b60208301915083600182028301111561175e5761175d6124ef565b5b9250929050565b60008083601f84011261177b5761177a6124d6565b5b8235905067ffffffffffffffff811115611798576117976124d1565b5b6020830191508360018202830111156117b4576117b36124ef565b5b9250929050565b6000813590506117ca816128c4565b92915050565b6000602082840312156117e6576117e56124fe565b5b60006117f484828501611624565b91505092915050565b600080600060408486031215611816576118156124fe565b5b600061182486828701611624565b935050602084013567ffffffffffffffff811115611845576118446124f9565b5b61185186828701611639565b92509250509250925092565b600080600080600060608688031215611879576118786124fe565b5b600061188788828901611624565b955050602086013567ffffffffffffffff8111156118a8576118a76124f9565b5b6118b488828901611639565b9450945050604086013567ffffffffffffffff8111156118d7576118d66124f9565b5b6118e38882890161168f565b92509250509295509295909350565b6000806000806060858703121561190c5761190b6124fe565b5b600061191a87828801611624565b945050602061192b878288016116e5565b935050604085013567ffffffffffffffff81111561194c5761194b6124f9565b5b6119588782880161170f565b925092505092959194509250565b60008060006040848603121561197f5761197e6124fe565b5b600061198d86828701611624565b935050602084013567ffffffffffffffff8111156119ae576119ad6124f9565b5b6119ba86828701611765565b92509250509250925092565b6000602082840312156119dc576119db6124fe565b5b60006119ea848285016116e5565b91505092915050565b600060208284031215611a0957611a086124fe565b5b6000611a17848285016116fa565b91505092915050565b60008060208385031215611a3757611a366124fe565b5b600083013567ffffffffffffffff811115611a5557611a546124f9565b5b611a6185828601611765565b92509250509250929050565b600060208284031215611a8357611a826124fe565b5b6000611a91848285016117bb565b91505092915050565b611aa38161226f565b82525050565b611aba611ab58261226f565b612416565b82525050565b611ac981612281565b82525050565b611ad88161228d565b82525050565b611aef611aea8261228d565b612428565b82525050565b6000611b0183856121c2565b9350611b0e838584612359565b611b1783612503565b840190509392505050565b6000611b2d826121b7565b611b3781856121c2565b9350611b47818560208601612368565b611b5081612503565b840191505092915050565b6000611b68601c836121d3565b9150611b738261252e565b601c82019050919050565b6000611b8b6019836121c2565b9150611b9682612557565b602082019050919050565b6000611bae6026836121c2565b9150611bb982612580565b604082019050919050565b6000611bd16015836121c2565b9150611bdc826125cf565b602082019050919050565b6000611bf4602b836121c2565b9150611bff826125f8565b604082019050919050565b6000611c176019836121c2565b9150611c2282612647565b602082019050919050565b6000611c3a6018836121c2565b9150611c4582612670565b602082019050919050565b6000611c5d6018836121c2565b9150611c6882612699565b602082019050919050565b6000611c80601d836121c2565b9150611c8b826126c2565b602082019050919050565b6000611ca36015836121c2565b9150611cae826126eb565b602082019050919050565b6000611cc66020836121c2565b9150611cd182612714565b602082019050919050565b6000611ce9602d836121c2565b9150611cf48261273d565b604082019050919050565b6000611d0c6014836121c2565b9150611d178261278c565b602082019050919050565b6000611d2f601c836121c2565b9150611d3a826127b5565b602082019050919050565b6000611d526018836121c2565b9150611d5d826127de565b602082019050919050565b6000611d756017836121c2565b9150611d8082612807565b602082019050919050565b6000611d986022836121c2565b9150611da382612830565b604082019050919050565b611db7816122e3565b82525050565b611dc6816122ed565b82525050565b6000611dd88284611aa9565b60148201915081905092915050565b6000611df282611b5b565b9150611dfe8284611ade565b60208201915081905092915050565b6000602082019050611e226000830184611a9a565b92915050565b6000604082019050611e3d6000830185611a9a565b611e4a6020830184611a9a565b9392505050565b6000604082019050611e666000830186611a9a565b8181036020830152611e79818486611af5565b9050949350505050565b6000602082019050611e986000830184611ac0565b92915050565b6000604082019050611eb36000830185611acf565b611ec06020830184611a9a565b9392505050565b6000608082019050611edc6000830187611acf565b611ee96020830186611dbd565b611ef66040830185611acf565b611f036060830184611acf565b95945050505050565b60006020820190508181036000830152611f268184611b22565b905092915050565b60006020820190508181036000830152611f4781611b7e565b9050919050565b60006020820190508181036000830152611f6781611ba1565b9050919050565b60006020820190508181036000830152611f8781611bc4565b9050919050565b60006020820190508181036000830152611fa781611be7565b9050919050565b60006020820190508181036000830152611fc781611c0a565b9050919050565b60006020820190508181036000830152611fe781611c2d565b9050919050565b6000602082019050818103600083015261200781611c50565b9050919050565b6000602082019050818103600083015261202781611c73565b9050919050565b6000602082019050818103600083015261204781611c96565b9050919050565b6000602082019050818103600083015261206781611cb9565b9050919050565b6000602082019050818103600083015261208781611cdc565b9050919050565b600060208201905081810360008301526120a781611cff565b9050919050565b600060208201905081810360008301526120c781611d22565b9050919050565b600060208201905081810360008301526120e781611d45565b9050919050565b6000602082019050818103600083015261210781611d68565b9050919050565b6000602082019050818103600083015261212781611d8b565b9050919050565b60006020820190506121436000830184611dae565b92915050565b60008083356001602003843603038112612166576121656124e0565b5b80840192508235915067ffffffffffffffff821115612188576121876124db565b5b6020830192506001820236038313156121a4576121a36124f4565b5b509250929050565b600082905092915050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600080858511156121f2576121f16124ea565b5b83861115612203576122026124e5565b5b6001850283019150848603905094509492505050565b6000612224826122e3565b915061222f836122e3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561226457612263612444565b5b828201905092915050565b600061227a826122c3565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061230683836121ac565b82612311813561228d565b925060208210156123515761234c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83602003600802612521565b831692505b505092915050565b82818337600083830152505050565b60005b8381101561238657808201518184015260208101905061236b565b83811115612395576000848401525b50505050565b600060028204905060018216806123b357607f821691505b602082108114156123c7576123c6612473565b5b50919050565b60006123d8826122e3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561240b5761240a612444565b5b600182019050919050565b600061242182612432565b9050919050565b6000819050919050565b600061243d82612514565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b600082821b905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b7f4f776e65723a2054534d20646f6573206e6f7420657869737400000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f436869703a20696e76616c696420736967206076600000000000000000000000600082015250565b7f54534d3a206368697049647320616e64207369676e617475726573206c656e6760008201527f7468206d69736d61746368000000000000000000000000000000000000000000602082015250565b7f436869703a206368697020616c72656164792065786973747300000000000000600082015250565b7f436869703a206368697020646f65736e27742065786973740000000000000000600082015250565b7f54534d3a20696e646578206f7574206f6620626f756e64730000000000000000600082015250565b7f4f776e65723a2054534d20616c72656164792072656769737465726564000000600082015250565b7f436869703a20696e76616c696420736967206073600000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4f776e65723a206368697049647320616e64207369676e617475726573206c6560008201527f6e677468206d69736d6174636800000000000000000000000000000000000000602082015250565b7f436869703a20696e76616c6964207369676e6572000000000000000000000000600082015250565b7f436869703a2063686970207369676e617475726520696e76616c696400000000600082015250565b7f436869703a20696e76616c696420736967206c656e6774680000000000000000600082015250565b7f54534d3a2074736d20646f6573206e6f74206578697374000000000000000000600082015250565b7f54534d3a2063616c6c6572206973206e6f742054534d206f7220617070726f7660008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b6128888161226f565b811461289357600080fd5b50565b61289f8161228d565b81146128aa57600080fd5b50565b6128b681612297565b81146128c157600080fd5b50565b6128cd816122e3565b81146128d857600080fd5b5056fea2646970667358221220bade09347903113b68932e82e18eb0533491c685e8c9f563c7c12566e39bf59864736f6c63430008050033

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

000000000000000000000000ab35d3476251c6b614dc2eb36380d7af1232d822000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000013100000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _contractOwner (address): 0xAB35D3476251C6b614dC2eb36380D7AF1232D822
Arg [1] : _registryVersion (string): 1

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000ab35d3476251c6b614dc2eb36380d7af1232d822
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [3] : 3100000000000000000000000000000000000000000000000000000000000000


Deployed ByteCode Sourcemap

8154:6907:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8854:156;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11897;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9016:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11560:153;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9402:297;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11278:94;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9705:454;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14786:126;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11719:170;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6715:103;;;:::i;:::-;;6067:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14592:186;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11378:176;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12455:396;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9147:249;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12059:178;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6973:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12243:206;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14918:114;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8854:156;8938:4;8976:28;8961:43;;;:11;:43;;;;8954:50;;8854:156;;;:::o;11897:::-;11994:7;11973:10;10261:21;10271:10;10261:9;:21::i;:::-;12020:5:::1;:17;12026:10;12020:17;;;;;;;;;;;;;;;:27;;;;;;;;;;;;12013:34;;11897:156:::0;;;;:::o;9016:104::-;9075:13;9107:7;9100:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9016:104;:::o;11560:153::-;11652:13;11631:10;10261:21;10271:10;10261:9;:21::i;:::-;11685:5:::1;:17;11691:10;11685:17;;;;;;;;;;;;;;;:22;;11678:29;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11560:153:::0;;;;:::o;9402:297::-;5953:13;:11;:13::i;:::-;9537:22:::1;9548:10;9537;:22::i;:::-;9529:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;9600:9;9596:98;9619:7;;:14;;9615:1;:18;9596:98;;;9654:32;9663:10;9675:7;;9683:1;9675:10;;;;;;;:::i;:::-;;;;;;;;9654:8;:32::i;:::-;9635:3;;;;;:::i;:::-;;;;9596:98;;;;9402:297:::0;;;:::o;11278:94::-;11331:7;11357:9;;11350:16;;11278:94;:::o;9705:454::-;5953:13;:11;:13::i;:::-;9878:22:::1;9889:10;9878;:22::i;:::-;9870:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;9963:10;;:17;;9945:7;;:14;;:35;9937:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;10041:9;10037:117;10060:7;;:14;;10056:1;:18;10037:117;;;10095:51;10108:10;10120:7;;10128:1;10120:10;;;;;;;:::i;:::-;;;;;;;;10132;;10143:1;10132:13;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;10095:12;:51::i;:::-;10076:3;;;;;:::i;:::-;;;;10037:117;;;;9705:454:::0;;;;;:::o;14786:126::-;14851:13;14883:23;14890:15;14898:6;14890:7;:15::i;:::-;14883:6;:23::i;:::-;14876:30;;14786:126;;;:::o;11719:170::-;11789:12;:10;:12::i;:::-;10261:21;10271:10;10261:9;:21::i;:::-;11840:3:::1;;11813:5;:19;11819:12;:10;:12::i;:::-;11813:19;;;;;;;;;;;;;;;:24;;:30;;;;;;;:::i;:::-;;11855:28;11865:12;:10;:12::i;:::-;11879:3;;11855:28;;;;;;;;:::i;:::-;;;;;;;;11719:170:::0;;;:::o;6715:103::-;5953:13;:11;:13::i;:::-;6780:30:::1;6807:1;6780:18;:30::i;:::-;6715:103::o:0;6067:87::-;6113:7;6140:6;;;;;;;;;;;6133:13;;6067:87;:::o;14592:186::-;14655:7;14682:19;14694:6;14682:11;:19::i;:::-;14674:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;14744:8;:16;14753:6;14744:16;;;;;;;;;;;:28;;;;;;;;;;;;14737:35;;14592:186;;;:::o;11378:176::-;11445:7;11480:9;;11472:5;:17;11464:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;11532:9;:16;11542:5;11532:16;;;;;;;;;;;;;;;;;;;;;11525:23;;11378:176;;;:::o;12455:396::-;12608:10;10492:31;10512:10;10492:19;:31::i;:::-;12657:10:::1;;:17;;12639:7;;:14;;:35;12631:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;12733:9;12729:117;12752:7;;:14;;12748:1;:18;12729:117;;;12787:51;12800:10;12812:7;;12820:1;12812:10;;;;;;;:::i;:::-;;;;;;;;12824;;12835:1;12824:13;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;12787:12;:51::i;:::-;12768:3;;;;;:::i;:::-;;;;12729:117;;;;12455:396:::0;;;;;;:::o;9147:249::-;5953:13;:11;:13::i;:::-;9260:29:::1;9273:10;9285:3;;9260:12;:29::i;:::-;9348:10;9325:9;:20;9335:9;;9325:20;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;9389:1;9377:9;;:13;;;;:::i;:::-;9365:9;:25;;;;9147:249:::0;;;:::o;12059:178::-;12120:12;:10;:12::i;:::-;10261:21;10271:10;10261:9;:21::i;:::-;12176:8:::1;12144:5;:19;12150:12;:10;:12::i;:::-;12144:19;;;;;;;;;;;;;;;:29;;;:40;;;;;;;;;;;;;;;;;;12196:35;12208:12;:10;:12::i;:::-;12222:8;12196:35;;;;;;;:::i;:::-;;;;;;;;12059:178:::0;;:::o;6973:201::-;5953:13;:11;:13::i;:::-;7082:1:::1;7062:22;;:8;:22;;;;7054:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7138:28;7157:8;7138:18;:28::i;:::-;6973:201:::0;:::o;12243:206::-;12378:10;10492:31;10512:10;10492:19;:31::i;:::-;12400:43:::1;12413:10;12425:6;12433:9;;12400:12;:43::i;:::-;12243:206:::0;;;;;:::o;14918:114::-;14984:4;15007:19;15019:6;15007:11;:19::i;:::-;15000:26;;14918:114;;;:::o;10302:127::-;10373:22;10384:10;10373;:22::i;:::-;10365:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;10302:127;:::o;6232:132::-;6307:12;:10;:12::i;:::-;6296:23;;:7;:5;:7::i;:::-;:23;;;6288:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6232:132::o;11138:::-;11201:4;11259:5;11224:40;;:5;:17;11230:10;11224:17;;;;;;;;;;;;;;;:31;;;;;;;;;;;;:40;;;;11217:47;;11138:132;;;:::o;14355:231::-;14437:19;14449:6;14437:11;:19::i;:::-;14436:20;14428:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;14524:10;14493:8;:16;14502:6;14493:16;;;;;;;;;;;:28;;;:41;;;;;;;;;;;;;;;;;;14546:34;14561:6;14569:10;14546:34;;;;;;;:::i;:::-;;;;;;;;14355:231;;:::o;14112:237::-;14223:52;14245:10;14257:6;14265:9;;14223:21;:52::i;:::-;14215:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;14315:28;14324:10;14336:6;14315:8;:28::i;:::-;14112:237;;;;:::o;4635:98::-;4688:7;4715:10;4708:17;;4635:98;:::o;7334:191::-;7408:16;7427:6;;;;;;;;;;;7408:25;;7453:8;7444:6;;:17;;;;;;;;;;;;;;;;;;7508:8;7477:40;;7498:8;7477:40;;;;;;;;;;;;7397:128;7334:191;:::o;12902:131::-;12962:4;13025:1;12985:42;;:8;:16;12994:6;12985:16;;;;;;;;;;;:28;;;;;;;;;;;;:42;;;;12978:49;;12902:131;;;:::o;10543:249::-;10624:22;10635:10;10624;:22::i;:::-;:116;;;;;10676:23;10688:10;10676:11;:23::i;:::-;10660:39;;:12;:10;:12::i;:::-;:39;;;10659:80;;;;10728:10;10712:26;;:12;:10;:12::i;:::-;:26;;;10659:80;10624:116;10616:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;10543:249;:::o;10798:334::-;10901:22;10912:10;10901;:22::i;:::-;10900:23;10892:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;10998:4;10964:5;:17;10970:10;10964:17;;;;;;;;;;;;;;;:31;;;:38;;;;;;;;;;;;;;;;;;11047:1;11009:5;:17;11015:10;11009:17;;;;;;;;;;;;;;;:27;;;:40;;;;;;;;;;;;;;;;;;11081:3;;11056:5;:17;11062:10;11056:17;;;;;;;;;;;;;;;:22;;:28;;;;;;;:::i;:::-;;11096:30;11110:10;11122:3;;11096:30;;;;;;;;:::i;:::-;;;;;;;;10798:334;;;:::o;13039:1067::-;13155:4;13171:15;13193;13215:10;13232;13249:8;13352:2;13332:9;;:16;;:22;13324:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;13433:9;;13443:1;13433:15;13445:2;13433:15;;;;;;;:::i;:::-;13425:24;;;;;:::i;:::-;13420:29;;13469:9;;13479:2;13469:16;13482:2;13469:16;;;;;;;:::i;:::-;13461:25;;;;;:::i;:::-;13456:30;;13504:9;;13514:2;13504:13;;;;;;;:::i;:::-;;;;;;;;;;13498:20;;13493:25;;13552:66;13538:2;13530:11;;:88;13527:146;;;13634:31;;;;;;;;;;:::i;:::-;;;;;;;;13527:146;13690:2;13684;:8;;;;:20;;;;;13702:2;13696;:8;;;;13684:20;13681:78;;;13720:31;;;;;;;;;;:::i;:::-;;;;;;;;13681:78;13894:10;13877:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;13867:39;;;;;;13795:120;;;;;;;;:::i;:::-;;;;;;;;;;;;;13777:145;;;;;;13767:155;;13941:30;13951:7;13960:2;13964;13968;13941:30;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13931:40;;14011:3;13992:23;;:7;:23;;;;13984:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;14091:6;14083:15;;14056:44;;:7;:44;;;14049:51;;;;;;;13039:1067;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;169:568::-;242:8;252:6;302:3;295:4;287:6;283:17;279:27;269:2;;310:79;;:::i;:::-;269:2;423:6;410:20;400:30;;453:18;445:6;442:30;439:2;;;475:79;;:::i;:::-;439:2;589:4;581:6;577:17;565:29;;643:3;635:4;627:6;623:17;613:8;609:32;606:41;603:2;;;650:79;;:::i;:::-;603:2;259:478;;;;;:::o;758:579::-;842:8;852:6;902:3;895:4;887:6;883:17;879:27;869:2;;910:79;;:::i;:::-;869:2;1023:6;1010:20;1000:30;;1053:18;1045:6;1042:30;1039:2;;;1075:79;;:::i;:::-;1039:2;1189:4;1181:6;1177:17;1165:29;;1243:3;1235:4;1227:6;1223:17;1213:8;1209:32;1206:41;1203:2;;;1250:79;;:::i;:::-;1203:2;859:478;;;;;:::o;1343:139::-;1389:5;1427:6;1414:20;1405:29;;1443:33;1470:5;1443:33;:::i;:::-;1395:87;;;;:::o;1488:137::-;1533:5;1571:6;1558:20;1549:29;;1587:32;1613:5;1587:32;:::i;:::-;1539:86;;;;:::o;1644:552::-;1701:8;1711:6;1761:3;1754:4;1746:6;1742:17;1738:27;1728:2;;1769:79;;:::i;:::-;1728:2;1882:6;1869:20;1859:30;;1912:18;1904:6;1901:30;1898:2;;;1934:79;;:::i;:::-;1898:2;2048:4;2040:6;2036:17;2024:29;;2102:3;2094:4;2086:6;2082:17;2072:8;2068:32;2065:41;2062:2;;;2109:79;;:::i;:::-;2062:2;1718:478;;;;;:::o;2216:553::-;2274:8;2284:6;2334:3;2327:4;2319:6;2315:17;2311:27;2301:2;;2342:79;;:::i;:::-;2301:2;2455:6;2442:20;2432:30;;2485:18;2477:6;2474:30;2471:2;;;2507:79;;:::i;:::-;2471:2;2621:4;2613:6;2609:17;2597:29;;2675:3;2667:4;2659:6;2655:17;2645:8;2641:32;2638:41;2635:2;;;2682:79;;:::i;:::-;2635:2;2291:478;;;;;:::o;2775:139::-;2821:5;2859:6;2846:20;2837:29;;2875:33;2902:5;2875:33;:::i;:::-;2827:87;;;;:::o;2920:329::-;2979:6;3028:2;3016:9;3007:7;3003:23;2999:32;2996:2;;;3034:79;;:::i;:::-;2996:2;3154:1;3179:53;3224:7;3215:6;3204:9;3200:22;3179:53;:::i;:::-;3169:63;;3125:117;2986:263;;;;:::o;3255:704::-;3350:6;3358;3366;3415:2;3403:9;3394:7;3390:23;3386:32;3383:2;;;3421:79;;:::i;:::-;3383:2;3541:1;3566:53;3611:7;3602:6;3591:9;3587:22;3566:53;:::i;:::-;3556:63;;3512:117;3696:2;3685:9;3681:18;3668:32;3727:18;3719:6;3716:30;3713:2;;;3749:79;;:::i;:::-;3713:2;3862:80;3934:7;3925:6;3914:9;3910:22;3862:80;:::i;:::-;3844:98;;;;3639:313;3373:586;;;;;:::o;3965:1101::-;4107:6;4115;4123;4131;4139;4188:2;4176:9;4167:7;4163:23;4159:32;4156:2;;;4194:79;;:::i;:::-;4156:2;4314:1;4339:53;4384:7;4375:6;4364:9;4360:22;4339:53;:::i;:::-;4329:63;;4285:117;4469:2;4458:9;4454:18;4441:32;4500:18;4492:6;4489:30;4486:2;;;4522:79;;:::i;:::-;4486:2;4635:80;4707:7;4698:6;4687:9;4683:22;4635:80;:::i;:::-;4617:98;;;;4412:313;4792:2;4781:9;4777:18;4764:32;4823:18;4815:6;4812:30;4809:2;;;4845:79;;:::i;:::-;4809:2;4958:91;5041:7;5032:6;5021:9;5017:22;4958:91;:::i;:::-;4940:109;;;;4735:324;4146:920;;;;;;;;:::o;5072:817::-;5160:6;5168;5176;5184;5233:2;5221:9;5212:7;5208:23;5204:32;5201:2;;;5239:79;;:::i;:::-;5201:2;5359:1;5384:53;5429:7;5420:6;5409:9;5405:22;5384:53;:::i;:::-;5374:63;;5330:117;5486:2;5512:53;5557:7;5548:6;5537:9;5533:22;5512:53;:::i;:::-;5502:63;;5457:118;5642:2;5631:9;5627:18;5614:32;5673:18;5665:6;5662:30;5659:2;;;5695:79;;:::i;:::-;5659:2;5808:64;5864:7;5855:6;5844:9;5840:22;5808:64;:::i;:::-;5790:82;;;;5585:297;5191:698;;;;;;;:::o;5895:674::-;5975:6;5983;5991;6040:2;6028:9;6019:7;6015:23;6011:32;6008:2;;;6046:79;;:::i;:::-;6008:2;6166:1;6191:53;6236:7;6227:6;6216:9;6212:22;6191:53;:::i;:::-;6181:63;;6137:117;6321:2;6310:9;6306:18;6293:32;6352:18;6344:6;6341:30;6338:2;;;6374:79;;:::i;:::-;6338:2;6487:65;6544:7;6535:6;6524:9;6520:22;6487:65;:::i;:::-;6469:83;;;;6264:298;5998:571;;;;;:::o;6575:329::-;6634:6;6683:2;6671:9;6662:7;6658:23;6654:32;6651:2;;;6689:79;;:::i;:::-;6651:2;6809:1;6834:53;6879:7;6870:6;6859:9;6855:22;6834:53;:::i;:::-;6824:63;;6780:117;6641:263;;;;:::o;6910:327::-;6968:6;7017:2;7005:9;6996:7;6992:23;6988:32;6985:2;;;7023:79;;:::i;:::-;6985:2;7143:1;7168:52;7212:7;7203:6;7192:9;7188:22;7168:52;:::i;:::-;7158:62;;7114:116;6975:262;;;;:::o;7243:529::-;7314:6;7322;7371:2;7359:9;7350:7;7346:23;7342:32;7339:2;;;7377:79;;:::i;:::-;7339:2;7525:1;7514:9;7510:17;7497:31;7555:18;7547:6;7544:30;7541:2;;;7577:79;;:::i;:::-;7541:2;7690:65;7747:7;7738:6;7727:9;7723:22;7690:65;:::i;:::-;7672:83;;;;7468:297;7329:443;;;;;:::o;7778:329::-;7837:6;7886:2;7874:9;7865:7;7861:23;7857:32;7854:2;;;7892:79;;:::i;:::-;7854:2;8012:1;8037:53;8082:7;8073:6;8062:9;8058:22;8037:53;:::i;:::-;8027:63;;7983:117;7844:263;;;;:::o;8113:118::-;8200:24;8218:5;8200:24;:::i;:::-;8195:3;8188:37;8178:53;;:::o;8237:157::-;8342:45;8362:24;8380:5;8362:24;:::i;:::-;8342:45;:::i;:::-;8337:3;8330:58;8320:74;;:::o;8400:109::-;8481:21;8496:5;8481:21;:::i;:::-;8476:3;8469:34;8459:50;;:::o;8515:118::-;8602:24;8620:5;8602:24;:::i;:::-;8597:3;8590:37;8580:53;;:::o;8639:157::-;8744:45;8764:24;8782:5;8764:24;:::i;:::-;8744:45;:::i;:::-;8739:3;8732:58;8722:74;;:::o;8826:304::-;8924:3;8945:71;9009:6;9004:3;8945:71;:::i;:::-;8938:78;;9026:43;9062:6;9057:3;9050:5;9026:43;:::i;:::-;9094:29;9116:6;9094:29;:::i;:::-;9089:3;9085:39;9078:46;;8928:202;;;;;:::o;9136:364::-;9224:3;9252:39;9285:5;9252:39;:::i;:::-;9307:71;9371:6;9366:3;9307:71;:::i;:::-;9300:78;;9387:52;9432:6;9427:3;9420:4;9413:5;9409:16;9387:52;:::i;:::-;9464:29;9486:6;9464:29;:::i;:::-;9459:3;9455:39;9448:46;;9228:272;;;;;:::o;9506:402::-;9666:3;9687:85;9769:2;9764:3;9687:85;:::i;:::-;9680:92;;9781:93;9870:3;9781:93;:::i;:::-;9899:2;9894:3;9890:12;9883:19;;9670:238;;;:::o;9914:366::-;10056:3;10077:67;10141:2;10136:3;10077:67;:::i;:::-;10070:74;;10153:93;10242:3;10153:93;:::i;:::-;10271:2;10266:3;10262:12;10255:19;;10060:220;;;:::o;10286:366::-;10428:3;10449:67;10513:2;10508:3;10449:67;:::i;:::-;10442:74;;10525:93;10614:3;10525:93;:::i;:::-;10643:2;10638:3;10634:12;10627:19;;10432:220;;;:::o;10658:366::-;10800:3;10821:67;10885:2;10880:3;10821:67;:::i;:::-;10814:74;;10897:93;10986:3;10897:93;:::i;:::-;11015:2;11010:3;11006:12;10999:19;;10804:220;;;:::o;11030:366::-;11172:3;11193:67;11257:2;11252:3;11193:67;:::i;:::-;11186:74;;11269:93;11358:3;11269:93;:::i;:::-;11387:2;11382:3;11378:12;11371:19;;11176:220;;;:::o;11402:366::-;11544:3;11565:67;11629:2;11624:3;11565:67;:::i;:::-;11558:74;;11641:93;11730:3;11641:93;:::i;:::-;11759:2;11754:3;11750:12;11743:19;;11548:220;;;:::o;11774:366::-;11916:3;11937:67;12001:2;11996:3;11937:67;:::i;:::-;11930:74;;12013:93;12102:3;12013:93;:::i;:::-;12131:2;12126:3;12122:12;12115:19;;11920:220;;;:::o;12146:366::-;12288:3;12309:67;12373:2;12368:3;12309:67;:::i;:::-;12302:74;;12385:93;12474:3;12385:93;:::i;:::-;12503:2;12498:3;12494:12;12487:19;;12292:220;;;:::o;12518:366::-;12660:3;12681:67;12745:2;12740:3;12681:67;:::i;:::-;12674:74;;12757:93;12846:3;12757:93;:::i;:::-;12875:2;12870:3;12866:12;12859:19;;12664:220;;;:::o;12890:366::-;13032:3;13053:67;13117:2;13112:3;13053:67;:::i;:::-;13046:74;;13129:93;13218:3;13129:93;:::i;:::-;13247:2;13242:3;13238:12;13231:19;;13036:220;;;:::o;13262:366::-;13404:3;13425:67;13489:2;13484:3;13425:67;:::i;:::-;13418:74;;13501:93;13590:3;13501:93;:::i;:::-;13619:2;13614:3;13610:12;13603:19;;13408:220;;;:::o;13634:366::-;13776:3;13797:67;13861:2;13856:3;13797:67;:::i;:::-;13790:74;;13873:93;13962:3;13873:93;:::i;:::-;13991:2;13986:3;13982:12;13975:19;;13780:220;;;:::o;14006:366::-;14148:3;14169:67;14233:2;14228:3;14169:67;:::i;:::-;14162:74;;14245:93;14334:3;14245:93;:::i;:::-;14363:2;14358:3;14354:12;14347:19;;14152:220;;;:::o;14378:366::-;14520:3;14541:67;14605:2;14600:3;14541:67;:::i;:::-;14534:74;;14617:93;14706:3;14617:93;:::i;:::-;14735:2;14730:3;14726:12;14719:19;;14524:220;;;:::o;14750:366::-;14892:3;14913:67;14977:2;14972:3;14913:67;:::i;:::-;14906:74;;14989:93;15078:3;14989:93;:::i;:::-;15107:2;15102:3;15098:12;15091:19;;14896:220;;;:::o;15122:366::-;15264:3;15285:67;15349:2;15344:3;15285:67;:::i;:::-;15278:74;;15361:93;15450:3;15361:93;:::i;:::-;15479:2;15474:3;15470:12;15463:19;;15268:220;;;:::o;15494:366::-;15636:3;15657:67;15721:2;15716:3;15657:67;:::i;:::-;15650:74;;15733:93;15822:3;15733:93;:::i;:::-;15851:2;15846:3;15842:12;15835:19;;15640:220;;;:::o;15866:118::-;15953:24;15971:5;15953:24;:::i;:::-;15948:3;15941:37;15931:53;;:::o;15990:112::-;16073:22;16089:5;16073:22;:::i;:::-;16068:3;16061:35;16051:51;;:::o;16108:256::-;16220:3;16235:75;16306:3;16297:6;16235:75;:::i;:::-;16335:2;16330:3;16326:12;16319:19;;16355:3;16348:10;;16224:140;;;;:::o;16370:522::-;16583:3;16605:148;16749:3;16605:148;:::i;:::-;16598:155;;16763:75;16834:3;16825:6;16763:75;:::i;:::-;16863:2;16858:3;16854:12;16847:19;;16883:3;16876:10;;16587:305;;;;:::o;16898:222::-;16991:4;17029:2;17018:9;17014:18;17006:26;;17042:71;17110:1;17099:9;17095:17;17086:6;17042:71;:::i;:::-;16996:124;;;;:::o;17126:332::-;17247:4;17285:2;17274:9;17270:18;17262:26;;17298:71;17366:1;17355:9;17351:17;17342:6;17298:71;:::i;:::-;17379:72;17447:2;17436:9;17432:18;17423:6;17379:72;:::i;:::-;17252:206;;;;;:::o;17464:443::-;17615:4;17653:2;17642:9;17638:18;17630:26;;17666:71;17734:1;17723:9;17719:17;17710:6;17666:71;:::i;:::-;17784:9;17778:4;17774:20;17769:2;17758:9;17754:18;17747:48;17812:88;17895:4;17886:6;17878;17812:88;:::i;:::-;17804:96;;17620:287;;;;;;:::o;17913:210::-;18000:4;18038:2;18027:9;18023:18;18015:26;;18051:65;18113:1;18102:9;18098:17;18089:6;18051:65;:::i;:::-;18005:118;;;;:::o;18129:332::-;18250:4;18288:2;18277:9;18273:18;18265:26;;18301:71;18369:1;18358:9;18354:17;18345:6;18301:71;:::i;:::-;18382:72;18450:2;18439:9;18435:18;18426:6;18382:72;:::i;:::-;18255:206;;;;;:::o;18467:545::-;18640:4;18678:3;18667:9;18663:19;18655:27;;18692:71;18760:1;18749:9;18745:17;18736:6;18692:71;:::i;:::-;18773:68;18837:2;18826:9;18822:18;18813:6;18773:68;:::i;:::-;18851:72;18919:2;18908:9;18904:18;18895:6;18851:72;:::i;:::-;18933;19001:2;18990:9;18986:18;18977:6;18933:72;:::i;:::-;18645:367;;;;;;;:::o;19018:313::-;19131:4;19169:2;19158:9;19154:18;19146:26;;19218:9;19212:4;19208:20;19204:1;19193:9;19189:17;19182:47;19246:78;19319:4;19310:6;19246:78;:::i;:::-;19238:86;;19136:195;;;;:::o;19337:419::-;19503:4;19541:2;19530:9;19526:18;19518:26;;19590:9;19584:4;19580:20;19576:1;19565:9;19561:17;19554:47;19618:131;19744:4;19618:131;:::i;:::-;19610:139;;19508:248;;;:::o;19762:419::-;19928:4;19966:2;19955:9;19951:18;19943:26;;20015:9;20009:4;20005:20;20001:1;19990:9;19986:17;19979:47;20043:131;20169:4;20043:131;:::i;:::-;20035:139;;19933:248;;;:::o;20187:419::-;20353:4;20391:2;20380:9;20376:18;20368:26;;20440:9;20434:4;20430:20;20426:1;20415:9;20411:17;20404:47;20468:131;20594:4;20468:131;:::i;:::-;20460:139;;20358:248;;;:::o;20612:419::-;20778:4;20816:2;20805:9;20801:18;20793:26;;20865:9;20859:4;20855:20;20851:1;20840:9;20836:17;20829:47;20893:131;21019:4;20893:131;:::i;:::-;20885:139;;20783:248;;;:::o;21037:419::-;21203:4;21241:2;21230:9;21226:18;21218:26;;21290:9;21284:4;21280:20;21276:1;21265:9;21261:17;21254:47;21318:131;21444:4;21318:131;:::i;:::-;21310:139;;21208:248;;;:::o;21462:419::-;21628:4;21666:2;21655:9;21651:18;21643:26;;21715:9;21709:4;21705:20;21701:1;21690:9;21686:17;21679:47;21743:131;21869:4;21743:131;:::i;:::-;21735:139;;21633:248;;;:::o;21887:419::-;22053:4;22091:2;22080:9;22076:18;22068:26;;22140:9;22134:4;22130:20;22126:1;22115:9;22111:17;22104:47;22168:131;22294:4;22168:131;:::i;:::-;22160:139;;22058:248;;;:::o;22312:419::-;22478:4;22516:2;22505:9;22501:18;22493:26;;22565:9;22559:4;22555:20;22551:1;22540:9;22536:17;22529:47;22593:131;22719:4;22593:131;:::i;:::-;22585:139;;22483:248;;;:::o;22737:419::-;22903:4;22941:2;22930:9;22926:18;22918:26;;22990:9;22984:4;22980:20;22976:1;22965:9;22961:17;22954:47;23018:131;23144:4;23018:131;:::i;:::-;23010:139;;22908:248;;;:::o;23162:419::-;23328:4;23366:2;23355:9;23351:18;23343:26;;23415:9;23409:4;23405:20;23401:1;23390:9;23386:17;23379:47;23443:131;23569:4;23443:131;:::i;:::-;23435:139;;23333:248;;;:::o;23587:419::-;23753:4;23791:2;23780:9;23776:18;23768:26;;23840:9;23834:4;23830:20;23826:1;23815:9;23811:17;23804:47;23868:131;23994:4;23868:131;:::i;:::-;23860:139;;23758:248;;;:::o;24012:419::-;24178:4;24216:2;24205:9;24201:18;24193:26;;24265:9;24259:4;24255:20;24251:1;24240:9;24236:17;24229:47;24293:131;24419:4;24293:131;:::i;:::-;24285:139;;24183:248;;;:::o;24437:419::-;24603:4;24641:2;24630:9;24626:18;24618:26;;24690:9;24684:4;24680:20;24676:1;24665:9;24661:17;24654:47;24718:131;24844:4;24718:131;:::i;:::-;24710:139;;24608:248;;;:::o;24862:419::-;25028:4;25066:2;25055:9;25051:18;25043:26;;25115:9;25109:4;25105:20;25101:1;25090:9;25086:17;25079:47;25143:131;25269:4;25143:131;:::i;:::-;25135:139;;25033:248;;;:::o;25287:419::-;25453:4;25491:2;25480:9;25476:18;25468:26;;25540:9;25534:4;25530:20;25526:1;25515:9;25511:17;25504:47;25568:131;25694:4;25568:131;:::i;:::-;25560:139;;25458:248;;;:::o;25712:419::-;25878:4;25916:2;25905:9;25901:18;25893:26;;25965:9;25959:4;25955:20;25951:1;25940:9;25936:17;25929:47;25993:131;26119:4;25993:131;:::i;:::-;25985:139;;25883:248;;;:::o;26137:222::-;26230:4;26268:2;26257:9;26253:18;26245:26;;26281:71;26349:1;26338:9;26334:17;26325:6;26281:71;:::i;:::-;26235:124;;;;:::o;26365:724::-;26442:4;26448:6;26504:11;26491:25;26604:1;26598:4;26594:12;26583:8;26567:14;26563:29;26559:48;26539:18;26535:73;26525:2;;26612:79;;:::i;:::-;26525:2;26724:18;26714:8;26710:33;26702:41;;26776:4;26763:18;26753:28;;26804:18;26796:6;26793:30;26790:2;;;26826:79;;:::i;:::-;26790:2;26934;26928:4;26924:13;26916:21;;26991:4;26983:6;26979:17;26963:14;26959:38;26953:4;26949:49;26946:2;;;27001:79;;:::i;:::-;26946:2;26455:634;;;;;;:::o;27268:96::-;27326:6;27354:3;27344:13;;27333:31;;;;:::o;27370:99::-;27422:6;27456:5;27450:12;27440:22;;27429:40;;;:::o;27475:169::-;27559:11;27593:6;27588:3;27581:19;27633:4;27628:3;27624:14;27609:29;;27571:73;;;;:::o;27650:148::-;27752:11;27789:3;27774:18;;27764:34;;;;:::o;27804:469::-;27909:9;27920;27958:8;27946:10;27943:24;27940:2;;;27970:79;;:::i;:::-;27940:2;28076:6;28066:8;28063:20;28060:2;;;28086:79;;:::i;:::-;28060:2;28217:1;28205:10;28201:18;28193:6;28189:31;28176:44;;28256:10;28246:8;28242:25;28229:38;;27930:343;;;;;;;:::o;28279:305::-;28319:3;28338:20;28356:1;28338:20;:::i;:::-;28333:25;;28372:20;28390:1;28372:20;:::i;:::-;28367:25;;28526:1;28458:66;28454:74;28451:1;28448:81;28445:2;;;28532:18;;:::i;:::-;28445:2;28576:1;28573;28569:9;28562:16;;28323:261;;;;:::o;28590:96::-;28627:7;28656:24;28674:5;28656:24;:::i;:::-;28645:35;;28635:51;;;:::o;28692:90::-;28726:7;28769:5;28762:13;28755:21;28744:32;;28734:48;;;:::o;28788:77::-;28825:7;28854:5;28843:16;;28833:32;;;:::o;28871:149::-;28907:7;28947:66;28940:5;28936:78;28925:89;;28915:105;;;:::o;29026:126::-;29063:7;29103:42;29096:5;29092:54;29081:65;;29071:81;;;:::o;29158:77::-;29195:7;29224:5;29213:16;;29203:32;;;:::o;29241:86::-;29276:7;29316:4;29309:5;29305:16;29294:27;;29284:43;;;:::o;29333:552::-;29424:5;29455:45;29496:3;29489:5;29455:45;:::i;:::-;29525:5;29549:41;29580:8;29567:22;29549:41;:::i;:::-;29540:50;;29614:2;29606:6;29603:14;29600:2;;;29685:169;29770:66;29740:6;29736:2;29732:15;29729:1;29725:23;29685:169;:::i;:::-;29662:5;29641:227;29632:236;;29600:2;29430:455;;;;;;:::o;29891:154::-;29975:6;29970:3;29965;29952:30;30037:1;30028:6;30023:3;30019:16;30012:27;29942:103;;;:::o;30051:307::-;30119:1;30129:113;30143:6;30140:1;30137:13;30129:113;;;30228:1;30223:3;30219:11;30213:18;30209:1;30204:3;30200:11;30193:39;30165:2;30162:1;30158:10;30153:15;;30129:113;;;30260:6;30257:1;30254:13;30251:2;;;30340:1;30331:6;30326:3;30322:16;30315:27;30251:2;30100:258;;;;:::o;30364:320::-;30408:6;30445:1;30439:4;30435:12;30425:22;;30492:1;30486:4;30482:12;30513:18;30503:2;;30569:4;30561:6;30557:17;30547:27;;30503:2;30631;30623:6;30620:14;30600:18;30597:38;30594:2;;;30650:18;;:::i;:::-;30594:2;30415:269;;;;:::o;30690:233::-;30729:3;30752:24;30770:5;30752:24;:::i;:::-;30743:33;;30798:66;30791:5;30788:77;30785:2;;;30868:18;;:::i;:::-;30785:2;30915:1;30908:5;30904:13;30897:20;;30733:190;;;:::o;30929:100::-;30968:7;30997:26;31017:5;30997:26;:::i;:::-;30986:37;;30976:53;;;:::o;31035:79::-;31074:7;31103:5;31092:16;;31082:32;;;:::o;31120:94::-;31159:7;31188:20;31202:5;31188:20;:::i;:::-;31177:31;;31167:47;;;:::o;31220:180::-;31268:77;31265:1;31258:88;31365:4;31362:1;31355:15;31389:4;31386:1;31379:15;31406:180;31454:77;31451:1;31444:88;31551:4;31548:1;31541:15;31575:4;31572:1;31565:15;31592:180;31640:77;31637:1;31630:88;31737:4;31734:1;31727:15;31761:4;31758:1;31751:15;31778:117;31887:1;31884;31877:12;31901:117;32010:1;32007;32000:12;32024:117;32133:1;32130;32123:12;32147:117;32256:1;32253;32246:12;32270:117;32379:1;32376;32369:12;32393:117;32502:1;32499;32492:12;32516:117;32625:1;32622;32615:12;32639:117;32748:1;32745;32738:12;32762:117;32871:1;32868;32861:12;32885:117;32994:1;32991;32984:12;33008:102;33049:6;33100:2;33096:7;33091:2;33084:5;33080:14;33076:28;33066:38;;33056:54;;;:::o;33116:94::-;33149:8;33197:5;33193:2;33189:14;33168:35;;33158:52;;;:::o;33216:107::-;33260:8;33310:5;33304:4;33300:16;33279:37;;33269:54;;;;:::o;33329:214::-;33469:66;33465:1;33457:6;33453:14;33446:90;33435:108;:::o;33549:175::-;33689:27;33685:1;33677:6;33673:14;33666:51;33655:69;:::o;33730:225::-;33870:34;33866:1;33858:6;33854:14;33847:58;33939:8;33934:2;33926:6;33922:15;33915:33;33836:119;:::o;33961:171::-;34101:23;34097:1;34089:6;34085:14;34078:47;34067:65;:::o;34138:230::-;34278:34;34274:1;34266:6;34262:14;34255:58;34347:13;34342:2;34334:6;34330:15;34323:38;34244:124;:::o;34374:175::-;34514:27;34510:1;34502:6;34498:14;34491:51;34480:69;:::o;34555:174::-;34695:26;34691:1;34683:6;34679:14;34672:50;34661:68;:::o;34735:174::-;34875:26;34871:1;34863:6;34859:14;34852:50;34841:68;:::o;34915:179::-;35055:31;35051:1;35043:6;35039:14;35032:55;35021:73;:::o;35100:171::-;35240:23;35236:1;35228:6;35224:14;35217:47;35206:65;:::o;35277:182::-;35417:34;35413:1;35405:6;35401:14;35394:58;35383:76;:::o;35465:232::-;35605:34;35601:1;35593:6;35589:14;35582:58;35674:15;35669:2;35661:6;35657:15;35650:40;35571:126;:::o;35703:170::-;35843:22;35839:1;35831:6;35827:14;35820:46;35809:64;:::o;35879:178::-;36019:30;36015:1;36007:6;36003:14;35996:54;35985:72;:::o;36063:174::-;36203:26;36199:1;36191:6;36187:14;36180:50;36169:68;:::o;36243:173::-;36383:25;36379:1;36371:6;36367:14;36360:49;36349:67;:::o;36422:221::-;36562:34;36558:1;36550:6;36546:14;36539:58;36631:4;36626:2;36618:6;36614:15;36607:29;36528:115;:::o;36649:122::-;36722:24;36740:5;36722:24;:::i;:::-;36715:5;36712:35;36702:2;;36761:1;36758;36751:12;36702:2;36692:79;:::o;36777:122::-;36850:24;36868:5;36850:24;:::i;:::-;36843:5;36840:35;36830:2;;36889:1;36886;36879:12;36830:2;36820:79;:::o;36905:120::-;36977:23;36994:5;36977:23;:::i;:::-;36970:5;36967:34;36957:2;;37015:1;37012;37005:12;36957:2;36947:78;:::o;37031:122::-;37104:24;37122:5;37104:24;:::i;:::-;37097:5;37094:35;37084:2;;37143:1;37140;37133:12;37084:2;37074:79;:::o

Swarm Source

ipfs://bade09347903113b68932e82e18eb0533491c685e8c9f563c7c12566e39bf598
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.