ETH Price: $3,164.69 (+1.54%)
Gas: 1 Gwei

Contract

0x7db0fBb6e06a7a6A49c3506ac829468661F527bE
 

Overview

ETH Balance

0.067 ETH

Eth Value

$212.03 (@ $3,164.69/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
0xd75d2c31d764d8b82d9987aefe93e2887849e1b26652ed819bddc1d37dd8401b Withdraw Money(pending)2024-07-08 10:44:545 days ago1720435494IN
0x7db0fBb6...661F527bE
0 ETH(Pending)(Pending)
0xdb0f3002d4c905ef0164f98a3ac30f91e6e0a05a5040ca1646386e7fb01a6239 Transfer Ownersh...(pending)2024-07-07 4:43:166 days ago1720327396IN
0x7db0fBb6...661F527bE
0 ETH(Pending)(Pending)
Set Approval For...196270592024-04-10 18:36:4794 days ago1712774207IN
0x7db0fBb6...661F527bE
0 ETH0.0012478726.76745371
Set Approval For...162413182022-12-22 16:04:23569 days ago1671725063IN
0x7db0fBb6...661F527bE
0 ETH0.0010578322.69109722
Set Approval For...158206122022-10-24 21:26:35627 days ago1666646795IN
0x7db0fBb6...661F527bE
0 ETH0.0007264115.5818809
Mint155818302022-09-21 12:44:23661 days ago1663764263IN
0x7db0fBb6...661F527bE
0 ETH0.00081578.96975525
Transfer From153564912022-08-17 4:07:13696 days ago1660709233IN
0x7db0fBb6...661F527bE
0 ETH0.001088557.96791303
Set Approval For...151067782022-07-09 6:35:42735 days ago1657348542IN
0x7db0fBb6...661F527bE
0 ETH0.0005314711.40031985
Set Approval For...150799822022-07-05 3:01:36739 days ago1656990096IN
0x7db0fBb6...661F527bE
0 ETH0.0007583316.23733509
Set Approval For...149875192022-06-18 22:52:00755 days ago1655592720IN
0x7db0fBb6...661F527bE
0 ETH0.0017780238.07081127
Set Approval For...149819092022-06-17 23:40:19756 days ago1655509219IN
0x7db0fBb6...661F527bE
0 ETH0.0014390230.81223725
Set Approval For...149819092022-06-17 23:40:19756 days ago1655509219IN
0x7db0fBb6...661F527bE
0 ETH0.0014364330.81223725
Transfer From149685152022-06-15 16:39:03759 days ago1655311143IN
0x7db0fBb6...661F527bE
0 ETH0.0030998160.17190581
Transfer From149684002022-06-15 16:14:11759 days ago1655309651IN
0x7db0fBb6...661F527bE
0 ETH0.0039316957.29998229
Mint149384312022-06-10 12:33:20764 days ago1654864400IN
0x7db0fBb6...661F527bE
0 ETH0.0069077275.95920067
Conf149383352022-06-10 12:08:02764 days ago1654862882IN
0x7db0fBb6...661F527bE
0 ETH0.0026561639.38271964
Freemint149383322022-06-10 12:06:54764 days ago1654862814IN
0x7db0fBb6...661F527bE
0 ETH0.0674042132.37113437
Conf149383112022-06-10 12:02:40764 days ago1654862560IN
0x7db0fBb6...661F527bE
0 ETH0.0019349342.51755578
Withdraw Money149383022022-06-10 12:00:40764 days ago1654862440IN
0x7db0fBb6...661F527bE
0 ETH0.0017176840.02983293
Set Approval For...149279962022-06-08 17:38:38766 days ago1654709918IN
0x7db0fBb6...661F527bE
0 ETH0.00278859.6965005
Conf149267292022-06-08 12:39:55766 days ago1654691995IN
0x7db0fBb6...661F527bE
0 ETH0.0024804240.10712286
Change MAX_PER_T...149267202022-06-08 12:38:57766 days ago1654691937IN
0x7db0fBb6...661F527bE
0 ETH0.0015933455.03197349
Change MAX_PER_A...149267192022-06-08 12:38:50766 days ago1654691930IN
0x7db0fBb6...661F527bE
0 ETH0.0016421556.8002168
Change MAX_PER_T...149266992022-06-08 12:35:30766 days ago1654691730IN
0x7db0fBb6...661F527bE
0 ETH0.0016466162.9321066
Change MAX_PER_A...149266962022-06-08 12:35:02766 days ago1654691702IN
0x7db0fBb6...661F527bE
0 ETH0.0019813375.84629341
View all transactions

Latest 2 internal transactions

Advanced mode:
Parent Transaction Hash Block From To
149383022022-06-10 12:00:40764 days ago1654862440
0x7db0fBb6...661F527bE
0.536 ETH
149383022022-06-10 12:00:40764 days ago1654862440
0x7db0fBb6...661F527bE
0.067 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CryptoZuki

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-06-06
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0; 

library MerkleProof {
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }
   function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                computedHash = _efficientHash(computedHash, proofElement);
            } else {
                computedHash = _efficientHash(proofElement, computedHash);
            }
        }
        return computedHash;
    }

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

abstract contract ReentrancyGuard { 
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }
    modifier nonReentrant() {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
   _status = _ENTERED;

        _;
        _status = _NOT_ENTERED;
    }
}

library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
 
    function toString(uint256 value) internal pure returns (string memory) { 
        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }
 
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }
 
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}
 
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
 
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
 
    constructor() {
        _transferOwnership(_msgSender());
    }
 
    function owner() public view virtual returns (address) {
        return _owner;
    } 
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
 
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }
 
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }
 
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}
 
library Address { 
    function isContract(address account) internal view returns (bool) { 
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    } 
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
 
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    } 
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }
 
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }
 
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    } 
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }
 
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }
 
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }
 
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }
 
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else { 
            if (returndata.length > 0) { 

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}
 
interface IERC721Receiver { 
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}
 
interface IERC165 { 
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
 
abstract contract ERC165 is IERC165 { 
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
} 
interface IERC721 is IERC165 { 
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); 
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); 
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved); 
    function balanceOf(address owner) external view returns (uint256 balance); 
    function ownerOf(uint256 tokenId) external view returns (address owner); 
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external; 
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external; 
    function approve(address to, uint256 tokenId) external;
 
    function getApproved(uint256 tokenId) external view returns (address operator); 
    function setApprovalForAll(address operator, bool _approved) external; 
    function isApprovedForAll(address owner, address operator) external view returns (bool); 
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
} 
interface IERC721Enumerable is IERC721 { 
    function totalSupply() external view returns (uint256); 
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); 
    function tokenByIndex(uint256 index) external view returns (uint256);
}  
interface IERC721Metadata is IERC721 { 
    function name() external view returns (string memory); 
    function symbol() external view returns (string memory); 
    function tokenURI(uint256 tokenId) external view returns (string memory);
} 
contract ERC721A is
  Context,
  ERC165,
  IERC721,
  IERC721Metadata,
  IERC721Enumerable
{
  using Address for address;
  using Strings for uint256;

  struct TokenOwnership {
    address addr;
    uint64 startTimestamp;
  }

  struct AddressData {
    uint128 balance;
    uint128 numberMinted;
  }

  uint256 private currentIndex = 1;

  uint256 internal immutable collectionSize;
  uint256 internal immutable maxBatchSize; 
  string private _name; 
  string private _symbol; 
  mapping(uint256 => TokenOwnership) private _ownerships; 
  mapping(address => AddressData) private _addressData; 
  mapping(uint256 => address) private _tokenApprovals; 
  mapping(address => mapping(address => bool)) private _operatorApprovals; 
  constructor(
    string memory name_,
    string memory symbol_,
    uint256 maxBatchSize_,
    uint256 collectionSize_
  ) {
    require(
      collectionSize_ > 0,
      "ERC721A: collection must have a nonzero supply"
    );
    require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero");
    _name = name_;
    _symbol = symbol_;
    maxBatchSize = maxBatchSize_;
    collectionSize = collectionSize_;
  } 
  function totalSupply() public view override returns (uint256) {
    return currentIndex;
  } 
  function tokenByIndex(uint256 index) public view override returns (uint256) {
    require(index < totalSupply(), "ERC721A: global index out of bounds");
    return index;
  } 
  function tokenOfOwnerByIndex(address owner, uint256 index)
    public
    view
    override
    returns (uint256)
  {
    require(index < balanceOf(owner), "ERC721A: owner index out of bounds");
    uint256 numMintedSoFar = totalSupply();
    uint256 tokenIdsIdx = 0;
    address currOwnershipAddr = address(0);
    for (uint256 i = 0; i < numMintedSoFar; i++) {
      TokenOwnership memory ownership = _ownerships[i];
      if (ownership.addr != address(0)) {
        currOwnershipAddr = ownership.addr;
      }
      if (currOwnershipAddr == owner) {
        if (tokenIdsIdx == index) {
          return i;
        }
        tokenIdsIdx++;
      }
    }
    revert("ERC721A: unable to get token of owner by index");
  } 
  function supportsInterface(bytes4 interfaceId)
    public
    view
    virtual
    override(ERC165, IERC165)
    returns (bool)
  {
    return
      interfaceId == type(IERC721).interfaceId ||
      interfaceId == type(IERC721Metadata).interfaceId ||
      interfaceId == type(IERC721Enumerable).interfaceId ||
      super.supportsInterface(interfaceId);
  } 
  function balanceOf(address owner) public view override returns (uint256) {
    require(owner != address(0), "ERC721A: balance query for the zero address");
    return uint256(_addressData[owner].balance);
  }

  function _numberMinted(address owner) internal view returns (uint256) {
    require(
      owner != address(0),
      "ERC721A: number minted query for the zero address"
    );
    return uint256(_addressData[owner].numberMinted);
  }

  function ownershipOf(uint256 tokenId)
    internal
    view
    returns (TokenOwnership memory)
  {
    require(_exists(tokenId), "ERC721A: owner query for nonexistent token");

    uint256 lowestTokenToCheck;
    if (tokenId >= maxBatchSize) {
      lowestTokenToCheck = tokenId - maxBatchSize + 1;
    }

    for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) {
      TokenOwnership memory ownership = _ownerships[curr];
      if (ownership.addr != address(0)) {
        return ownership;
      }
    }

    revert("ERC721A: unable to determine the owner of token");
  } 
  function ownerOf(uint256 tokenId) public view override returns (address) {
    return ownershipOf(tokenId).addr;
  } 
  function name() public view virtual override returns (string memory) {
    return _name;
  } 
  function symbol() public view virtual override returns (string memory) {
    return _symbol;
  } 
  function tokenURI(uint256 tokenId)
    public
    view
    virtual
    override
    returns (string memory)
  {
    require(
      _exists(tokenId),
      "ERC721Metadata: URI query for nonexistent token"
    );

    string memory baseURI = _baseURI();
    return
      bytes(baseURI).length > 0
        ? string(abi.encodePacked(baseURI, tokenId.toString(),_getUriExtension()))
        : "";
  } 
  function _baseURI() internal view virtual returns (string memory) {
    return "";
  }

  function _getUriExtension() internal view virtual returns (string memory) {
    return "";
  }
 
  function approve(address to, uint256 tokenId) public override {
    address owner = ERC721A.ownerOf(tokenId);
    require(to != owner, "ERC721A: approval to current owner");

    require(
      _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
      "ERC721A: approve caller is not owner nor approved for all"
    );

    _approve(to, tokenId, owner);
  } 
  function getApproved(uint256 tokenId) public view override returns (address) {
    require(_exists(tokenId), "ERC721A: approved query for nonexistent token");

    return _tokenApprovals[tokenId];
  } 
  function setApprovalForAll(address operator, bool approved) public override {
    require(operator != _msgSender(), "ERC721A: approve to caller");

    _operatorApprovals[_msgSender()][operator] = approved;
    emit ApprovalForAll(_msgSender(), operator, approved);
  }
 
  function isApprovedForAll(address owner, address operator)
    public
    view
    virtual
    override
    returns (bool)
  {
    return _operatorApprovals[owner][operator];
  }
 
  function transferFrom(
    address from,
    address to,
    uint256 tokenId
  ) public override {
    _transfer(from, to, tokenId);
  } 
  function safeTransferFrom(
    address from,
    address to,
    uint256 tokenId
  ) public override {
    safeTransferFrom(from, to, tokenId, "");
  } 
  function safeTransferFrom(
    address from,
    address to,
    uint256 tokenId,
    bytes memory _data
  ) public override {
    _transfer(from, to, tokenId);
    require(
      _checkOnERC721Received(from, to, tokenId, _data),
      "ERC721A: transfer to non ERC721Receiver implementer"
    );
  } 
  function _exists(uint256 tokenId) internal view returns (bool) {
    return tokenId < currentIndex;
  }

  function _safeMint(address to, uint256 quantity) internal {
    _safeMint(to, quantity, "");
  } 
  function _safeMint(
    address to,
    uint256 quantity,
    bytes memory _data
  ) internal {
    uint256 startTokenId = currentIndex;
    require(to != address(0), "ERC721A: mint to the zero address"); 
    require(!_exists(startTokenId), "ERC721A: token already minted");
    require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high");

    _beforeTokenTransfers(address(0), to, startTokenId, quantity);

    AddressData memory addressData = _addressData[to];
    _addressData[to] = AddressData(
      addressData.balance + uint128(quantity),
      addressData.numberMinted + uint128(quantity)
    );
    _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp));

    uint256 updatedIndex = startTokenId;

    for (uint256 i = 0; i < quantity; i++) {
      emit Transfer(address(0), to, updatedIndex);
      require(
        _checkOnERC721Received(address(0), to, updatedIndex, _data),
        "ERC721A: transfer to non ERC721Receiver implementer"
      );
      updatedIndex++;
    }

    currentIndex = updatedIndex;
    _afterTokenTransfers(address(0), to, startTokenId, quantity);
  } 
  function _transfer(
    address from,
    address to,
    uint256 tokenId
  ) private {
    TokenOwnership memory prevOwnership = ownershipOf(tokenId);

    bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr ||
      getApproved(tokenId) == _msgSender() ||
      isApprovedForAll(prevOwnership.addr, _msgSender()));

    require(
      isApprovedOrOwner,
      "ERC721A: transfer caller is not owner nor approved"
    );

    require(
      prevOwnership.addr == from,
      "ERC721A: transfer from incorrect owner"
    );
    require(to != address(0), "ERC721A: transfer to the zero address");

    _beforeTokenTransfers(from, to, tokenId, 1); 
    _approve(address(0), tokenId, prevOwnership.addr);

    _addressData[from].balance -= 1;
    _addressData[to].balance += 1;
    _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp)); 
    uint256 nextTokenId = tokenId + 1;
    if (_ownerships[nextTokenId].addr == address(0)) {
      if (_exists(nextTokenId)) {
        _ownerships[nextTokenId] = TokenOwnership(
          prevOwnership.addr,
          prevOwnership.startTimestamp
        );
      }
    }

    emit Transfer(from, to, tokenId);
    _afterTokenTransfers(from, to, tokenId, 1);
  } 
  function _approve(
    address to,
    uint256 tokenId,
    address owner
  ) private {
    _tokenApprovals[tokenId] = to;
    emit Approval(owner, to, tokenId);
  }

  uint256 public nextOwnerToExplicitlySet = 0; 
  function _setOwnersExplicit(uint256 quantity) internal {
    uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet;
    require(quantity > 0, "quantity must be nonzero");
    uint256 endIndex = oldNextOwnerToSet + quantity - 1;
    if (endIndex > collectionSize - 1) {
      endIndex = collectionSize - 1;
    } 
    require(_exists(endIndex), "not enough minted yet for this cleanup");
    for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) {
      if (_ownerships[i].addr == address(0)) {
        TokenOwnership memory ownership = ownershipOf(i);
        _ownerships[i] = TokenOwnership(
          ownership.addr,
          ownership.startTimestamp
        );
      }
    }
    nextOwnerToExplicitlySet = endIndex + 1;
  } 
  function _checkOnERC721Received(
    address from,
    address to,
    uint256 tokenId,
    bytes memory _data
  ) private returns (bool) {
    if (to.isContract()) {
      try
        IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data)
      returns (bytes4 retval) {
        return retval == IERC721Receiver(to).onERC721Received.selector;
      } catch (bytes memory reason) {
        if (reason.length == 0) {
          revert("ERC721A: transfer to non ERC721Receiver implementer");
        } else {
          assembly {
            revert(add(32, reason), mload(reason))
          }
        }
      }
    } else {
      return true;
    }
  } 
  function _beforeTokenTransfers(
    address from,
    address to,
    uint256 startTokenId,
    uint256 quantity
  ) internal virtual {} 
  function _afterTokenTransfers(
    address from,
    address to,
    uint256 startTokenId,
    uint256 quantity
  ) internal virtual {}
}
// --------------------------------------------------//

contract CryptoZuki is Ownable, ERC721A, ReentrancyGuard {
    using Strings for uint256;

     bytes32 public merkleRoot = 0x6dda27bb24289cd482fe990e245166cbe0ee289047013366bf025558e08fc9ce;
  function setMerkleRoot(bytes32 m) public onlyOwner{
    merkleRoot = m;
  }


  uint256 public MAX_PER_Transtion = 3; // maximam amount that user can mint
  uint256 public MAX_PER_Address = 3; // maximam amount that user can mint

  uint256 public  PRICE = 0.01 ether;

  uint256 private constant TotalCollectionSize_ = 10000; // total number of nfts
  uint256 private constant MaxMintPerBatch_ = 5000; //max mint per traction

  bool public _revelNFT = true;
  string private _baseTokenURI;
  string private _uriBeforeRevel;
  uint private stopat = 2000;
  uint private reserve = 2000;

  uint public status = 0; //0-pause 1-whitelist 2-public

  constructor() ERC721A("Crypto Zuki","CryptoZuki", MaxMintPerBatch_, TotalCollectionSize_) {
    _baseTokenURI = "ipfs://QmS4FmChwcY3VWfPhS31CqmkiJh7LerWqcdtW46PVCh4pr/";
  }

  modifier callerIsUser() {
    require(tx.origin == msg.sender, "The caller is another contract");
    _;
  }
 
  function mint(uint256 quantity) external payable callerIsUser {
    require(status == 2 , "Sale is not Active");
    require(totalSupply() + quantity <= collectionSize - reserve, "reached max supply");
    require( (numberMinted(msg.sender) + quantity <= MAX_PER_Address ) , "Quantity exceeds allowed Mints" );
    require(  quantity <= MAX_PER_Transtion,"can not mint this many");
    if(numberMinted(msg.sender) == 0)
      require(msg.value >= PRICE * (quantity-1), "Need to send more ETH.");
    else
      require(msg.value >= PRICE * quantity, "Need to send more ETH.");

    _safeMint(msg.sender, quantity);   
    if(totalSupply() >= stopat) {status = 0;}
  }

  function freemint(uint256 quantity) external payable callerIsUser {
    require(status == 1 , "Sale is not Active");
    require(totalSupply() + quantity <= collectionSize - reserve, "reached max supply");
    require( (numberMinted(msg.sender) + quantity <= MAX_PER_Address ) , "Quantity exceeds allowed Mints" );
    require(  quantity <= MAX_PER_Transtion,"can not mint this many");
    _safeMint(msg.sender, quantity);
    if(totalSupply() >= stopat) {status = 0;}
  }

   function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
    require(_exists(tokenId),"ERC721Metadata: URI query for nonexistent token");
    if(_revelNFT){
    string memory baseURI = _baseURI();
    return
      bytes(baseURI).length > 0
        ? string(abi.encodePacked(baseURI, tokenId.toString(),".json"))
        : "";
    } else{
      return _uriBeforeRevel;
    }
  }
   function conf(uint256 Status , uint256 MaxPerAddress , uint256 MaxPerWallet , uint256 Price, uint256 Stop_At )external onlyOwner{
      status = Status;
      stopat = Stop_At;
      PRICE = Price;
      MAX_PER_Address = MaxPerAddress;
      MAX_PER_Transtion = MaxPerWallet;
  }

  function setURIbeforeRevel(string memory URI) external onlyOwner {
    _uriBeforeRevel = URI;
  }

  function setBaseURI(string memory baseURI) external onlyOwner {
    _baseTokenURI = baseURI;
  }
  function _baseURI() internal view virtual override returns (string memory) {
    return _baseTokenURI;
  }
  function numberMinted(address owner) public view returns (uint256) {
    return _numberMinted(owner);
  }
  function getOwnershipData(uint256 tokenId)
    external
    view
    returns (TokenOwnership memory)
  {
    return ownershipOf(tokenId);
  }
  function withdrawMoney() external nonReentrant {

    uint b = address(this).balance/10;

    (bool success, ) = (0x77E5C0704d9681765d9C7204D66e5110c6556DDd).call{value: b}("");
    (bool success2, ) = owner().call{value: (address(this).balance - b)}("");
    require(success, "Transfer failed.");
    require(success2, "Transfer 2 failed.");
  }
  function changeRevelStatus() external onlyOwner {
    _revelNFT = !_revelNFT;
  }
  function changeMintPrice(uint256 _newPrice) external onlyOwner
  {
      PRICE = _newPrice;
  }
  function changeMAX_PER_Transtion(uint256 MAXPERTranstion) external onlyOwner
  {
      MAX_PER_Transtion = MAXPERTranstion;
  }
  function changeMAX_PER_Address(uint256 MAXPERAddress) external onlyOwner
  {
      MAX_PER_Address = MAXPERAddress;
  }
  function setStatus(uint256 status_)external onlyOwner{
      status = status_;
  }
  function getStatus()public view returns(uint){
      return status;
  }
  function getPrice()public view returns(uint){
      return PRICE;
  }
  function giveaway(address address_, uint quantity_)public onlyOwner{
    require(totalSupply() + quantity_ <= collectionSize - reserve, "reached max supply");
    _safeMint(address_, quantity_);
  }
    function setStop(uint256 stopat_)external onlyOwner{
      stopat = stopat_;
  }
  function setReserve(uint256 reserve_)external onlyOwner{
      reserve = reserve_;
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_PER_Address","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_Transtion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_revelNFT","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"MAXPERAddress","type":"uint256"}],"name":"changeMAX_PER_Address","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"MAXPERTranstion","type":"uint256"}],"name":"changeMAX_PER_Transtion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"changeMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"changeRevelStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"Status","type":"uint256"},{"internalType":"uint256","name":"MaxPerAddress","type":"uint256"},{"internalType":"uint256","name":"MaxPerWallet","type":"uint256"},{"internalType":"uint256","name":"Price","type":"uint256"},{"internalType":"uint256","name":"Stop_At","type":"uint256"}],"name":"conf","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"freemint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStatus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"},{"internalType":"uint256","name":"quantity_","type":"uint256"}],"name":"giveaway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"m","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reserve_","type":"uint256"}],"name":"setReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"status_","type":"uint256"}],"name":"setStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"stopat_","type":"uint256"}],"name":"setStop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"URI","type":"string"}],"name":"setURIbeforeRevel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"status","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c06040526001805560006008557f6dda27bb24289cd482fe990e245166cbe0ee289047013366bf025558e08fc9ce60001b600a556003600b556003600c55662386f26fc10000600d556001600e60006101000a81548160ff0219169083151502179055506107d06011556107d060125560006013553480156200008257600080fd5b506040518060400160405280600b81526020017f43727970746f205a756b690000000000000000000000000000000000000000008152506040518060400160405280600a81526020017f43727970746f5a756b690000000000000000000000000000000000000000000081525061138861271062000115620001096200022760201b60201c565b6200022f60201b60201c565b600081116200015b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001529062000413565b60405180910390fd5b60008211620001a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200019890620003f1565b60405180910390fd5b8360029080519060200190620001b9929190620002f3565b508260039080519060200190620001d2929190620002f3565b508160a08181525050806080818152505050505050600160098190555060405180606001604052806036815260200162005c0160369139600f908051906020019062000220929190620002f3565b5062000549565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620003019062000446565b90600052602060002090601f01602090048101928262000325576000855562000371565b82601f106200034057805160ff191683800117855562000371565b8280016001018555821562000371579182015b828111156200037057825182559160200191906001019062000353565b5b50905062000380919062000384565b5090565b5b808211156200039f57600081600090555060010162000385565b5090565b6000620003b260278362000435565b9150620003bf82620004ab565b604082019050919050565b6000620003d9602e8362000435565b9150620003e682620004fa565b604082019050919050565b600060208201905081810360008301526200040c81620003a3565b9050919050565b600060208201905081810360008301526200042e81620003ca565b9050919050565b600082825260208201905092915050565b600060028204905060018216806200045f57607f821691505b602082108114156200047657620004756200047c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b60805160a0516156766200058b60003960008181612cdc01528181612d050152613484015260008181610c8f015281816110a80152611b0801526156766000f3fe6080604052600436106102725760003560e01c80636352211e1161014f578063a22cb465116100c1578063c87b56dd1161007a578063c87b56dd14610908578063d04950a114610945578063d7224ba014610970578063dc33e6811461099b578063e985e9c5146109d8578063f2fde38b14610a1557610272565b8063a22cb46514610836578063ac4460021461085f578063af7b26e914610876578063b88d4fde1461089f578063bd0a8439146108c8578063c1f127e2146108df57610272565b80638d859f3e116101135780638d859f3e146107315780638da5cb5b1461075c5780639231ab2a1461078757806395d89b41146107c457806398d5fdca146107ef578063a0712d681461081a57610272565b80636352211e1461064e57806369ba1a751461068b57806370a08231146106b4578063715018a6146106f15780637cb647591461070857610272565b80632eb4a7ab116101e857806342842e0e116101ac57806342842e0e146105405780634e69d560146105695780634f6ccce71461059457806355f804b3146105d15780635c37809d146105fa57806362c6f7b91461062357610272565b80632eb4a7ab1461045b5780632f2ffc57146104865780632f745c59146104b15780633fd17366146104ee5780634256dbe31461051757610272565b8063081812fc1161023a578063081812fc1461035a578063095ea7b3146103975780630fbe4fe2146103c057806318160ddd146103dc578063200d2ed21461040757806323b872dd1461043257610272565b80630199e3471461027757806301ffc9a7146102a0578063050225ea146102dd57806305060ed91461030657806306fdde031461032f575b600080fd5b34801561028357600080fd5b5061029e60048036038101906102999190613d8f565b610a3e565b005b3480156102ac57600080fd5b506102c760048036038101906102c29190613cec565b610ac4565b6040516102d4919061446e565b60405180910390f35b3480156102e957600080fd5b5061030460048036038101906102ff9190613c7f565b610c0e565b005b34801561031257600080fd5b5061032d60048036038101906103289190613dbc565b610d1a565b005b34801561033b57600080fd5b50610344610dc0565b60405161035191906144a4565b60405180910390f35b34801561036657600080fd5b50610381600480360381019061037c9190613d8f565b610e52565b60405161038e9190614407565b60405180910390f35b3480156103a357600080fd5b506103be60048036038101906103b99190613c7f565b610ed7565b005b6103da60048036038101906103d59190613d8f565b610ff0565b005b3480156103e857600080fd5b506103f16111e8565b6040516103fe91906148a1565b60405180910390f35b34801561041357600080fd5b5061041c6111f2565b60405161042991906148a1565b60405180910390f35b34801561043e57600080fd5b5061045960048036038101906104549190613b69565b6111f8565b005b34801561046757600080fd5b50610470611208565b60405161047d9190614489565b60405180910390f35b34801561049257600080fd5b5061049b61120e565b6040516104a891906148a1565b60405180910390f35b3480156104bd57600080fd5b506104d860048036038101906104d39190613c7f565b611214565b6040516104e591906148a1565b60405180910390f35b3480156104fa57600080fd5b5061051560048036038101906105109190613d8f565b611412565b005b34801561052357600080fd5b5061053e60048036038101906105399190613d8f565b611498565b005b34801561054c57600080fd5b5061056760048036038101906105629190613b69565b61151e565b005b34801561057557600080fd5b5061057e61153e565b60405161058b91906148a1565b60405180910390f35b3480156105a057600080fd5b506105bb60048036038101906105b69190613d8f565b611548565b6040516105c891906148a1565b60405180910390f35b3480156105dd57600080fd5b506105f860048036038101906105f39190613d46565b61159b565b005b34801561060657600080fd5b50610621600480360381019061061c9190613d46565b611631565b005b34801561062f57600080fd5b506106386116c7565b604051610645919061446e565b60405180910390f35b34801561065a57600080fd5b5061067560048036038101906106709190613d8f565b6116da565b6040516106829190614407565b60405180910390f35b34801561069757600080fd5b506106b260048036038101906106ad9190613d8f565b6116f0565b005b3480156106c057600080fd5b506106db60048036038101906106d69190613afc565b611776565b6040516106e891906148a1565b60405180910390f35b3480156106fd57600080fd5b5061070661185f565b005b34801561071457600080fd5b5061072f600480360381019061072a9190613cbf565b6118e7565b005b34801561073d57600080fd5b5061074661196d565b60405161075391906148a1565b60405180910390f35b34801561076857600080fd5b50610771611973565b60405161077e9190614407565b60405180910390f35b34801561079357600080fd5b506107ae60048036038101906107a99190613d8f565b61199c565b6040516107bb9190614886565b60405180910390f35b3480156107d057600080fd5b506107d96119b4565b6040516107e691906144a4565b60405180910390f35b3480156107fb57600080fd5b50610804611a46565b60405161081191906148a1565b60405180910390f35b610834600480360381019061082f9190613d8f565b611a50565b005b34801561084257600080fd5b5061085d60048036038101906108589190613c3f565b611d0b565b005b34801561086b57600080fd5b50610874611e8c565b005b34801561088257600080fd5b5061089d60048036038101906108989190613d8f565b612076565b005b3480156108ab57600080fd5b506108c660048036038101906108c19190613bbc565b6120fc565b005b3480156108d457600080fd5b506108dd612158565b005b3480156108eb57600080fd5b5061090660048036038101906109019190613d8f565b612200565b005b34801561091457600080fd5b5061092f600480360381019061092a9190613d8f565b612286565b60405161093c91906144a4565b60405180910390f35b34801561095157600080fd5b5061095a6123d5565b60405161096791906148a1565b60405180910390f35b34801561097c57600080fd5b506109856123db565b60405161099291906148a1565b60405180910390f35b3480156109a757600080fd5b506109c260048036038101906109bd9190613afc565b6123e1565b6040516109cf91906148a1565b60405180910390f35b3480156109e457600080fd5b506109ff60048036038101906109fa9190613b29565b6123f3565b604051610a0c919061446e565b60405180910390f35b348015610a2157600080fd5b50610a3c6004803603810190610a379190613afc565b612487565b005b610a4661257f565b73ffffffffffffffffffffffffffffffffffffffff16610a64611973565b73ffffffffffffffffffffffffffffffffffffffff1614610aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab190614686565b60405180910390fd5b80600c8190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b8f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bf757507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c075750610c0682612587565b5b9050919050565b610c1661257f565b73ffffffffffffffffffffffffffffffffffffffff16610c34611973565b73ffffffffffffffffffffffffffffffffffffffff1614610c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8190614686565b60405180910390fd5b6012547f0000000000000000000000000000000000000000000000000000000000000000610cb89190614aec565b81610cc16111e8565b610ccb91906149d7565b1115610d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0390614646565b60405180910390fd5b610d1682826125f1565b5050565b610d2261257f565b73ffffffffffffffffffffffffffffffffffffffff16610d40611973565b73ffffffffffffffffffffffffffffffffffffffff1614610d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8d90614686565b60405180910390fd5b846013819055508060118190555081600d8190555083600c8190555082600b819055505050505050565b606060028054610dcf90614c3a565b80601f0160208091040260200160405190810160405280929190818152602001828054610dfb90614c3a565b8015610e485780601f10610e1d57610100808354040283529160200191610e48565b820191906000526020600020905b815481529060010190602001808311610e2b57829003601f168201915b5050505050905090565b6000610e5d8261260f565b610e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9390614846565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ee2826116da565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4a90614706565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610f7261257f565b73ffffffffffffffffffffffffffffffffffffffff161480610fa15750610fa081610f9b61257f565b6123f3565b5b610fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd7906145e6565b60405180910390fd5b610feb83838361261d565b505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461105e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611055906145c6565b60405180910390fd5b6001601354146110a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109a90614586565b60405180910390fd5b6012547f00000000000000000000000000000000000000000000000000000000000000006110d19190614aec565b816110da6111e8565b6110e491906149d7565b1115611125576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111c90614646565b60405180910390fd5b600c5481611132336123e1565b61113c91906149d7565b111561117d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117490614606565b60405180910390fd5b600b548111156111c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b9906147c6565b60405180910390fd5b6111cc33826125f1565b6011546111d76111e8565b106111e55760006013819055505b50565b6000600154905090565b60135481565b6112038383836126cf565b505050565b600a5481565b600c5481565b600061121f83611776565b8210611260576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611257906144c6565b60405180910390fd5b600061126a6111e8565b905060008060005b838110156113d0576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461136457806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156113bc57868414156113ad57819550505050505061140c565b83806113b890614c9d565b9450505b5080806113c890614c9d565b915050611272565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611403906147e6565b60405180910390fd5b92915050565b61141a61257f565b73ffffffffffffffffffffffffffffffffffffffff16611438611973565b73ffffffffffffffffffffffffffffffffffffffff161461148e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148590614686565b60405180910390fd5b80600d8190555050565b6114a061257f565b73ffffffffffffffffffffffffffffffffffffffff166114be611973565b73ffffffffffffffffffffffffffffffffffffffff1614611514576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150b90614686565b60405180910390fd5b8060128190555050565b611539838383604051806020016040528060008152506120fc565b505050565b6000601354905090565b60006115526111e8565b8210611593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158a90614526565b60405180910390fd5b819050919050565b6115a361257f565b73ffffffffffffffffffffffffffffffffffffffff166115c1611973565b73ffffffffffffffffffffffffffffffffffffffff1614611617576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160e90614686565b60405180910390fd5b80600f908051906020019061162d9291906138c1565b5050565b61163961257f565b73ffffffffffffffffffffffffffffffffffffffff16611657611973565b73ffffffffffffffffffffffffffffffffffffffff16146116ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a490614686565b60405180910390fd5b80601090805190602001906116c39291906138c1565b5050565b600e60009054906101000a900460ff1681565b60006116e582612c88565b600001519050919050565b6116f861257f565b73ffffffffffffffffffffffffffffffffffffffff16611716611973565b73ffffffffffffffffffffffffffffffffffffffff161461176c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176390614686565b60405180910390fd5b8060138190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117de90614626565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61186761257f565b73ffffffffffffffffffffffffffffffffffffffff16611885611973565b73ffffffffffffffffffffffffffffffffffffffff16146118db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d290614686565b60405180910390fd5b6118e56000612e8b565b565b6118ef61257f565b73ffffffffffffffffffffffffffffffffffffffff1661190d611973565b73ffffffffffffffffffffffffffffffffffffffff1614611963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195a90614686565b60405180910390fd5b80600a8190555050565b600d5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119a4613947565b6119ad82612c88565b9050919050565b6060600380546119c390614c3a565b80601f01602080910402602001604051908101604052809291908181526020018280546119ef90614c3a565b8015611a3c5780601f10611a1157610100808354040283529160200191611a3c565b820191906000526020600020905b815481529060010190602001808311611a1f57829003601f168201915b5050505050905090565b6000600d54905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab5906145c6565b60405180910390fd5b600260135414611b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afa90614586565b60405180910390fd5b6012547f0000000000000000000000000000000000000000000000000000000000000000611b319190614aec565b81611b3a6111e8565b611b4491906149d7565b1115611b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7c90614646565b60405180910390fd5b600c5481611b92336123e1565b611b9c91906149d7565b1115611bdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd490614606565b60405180910390fd5b600b54811115611c22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c19906147c6565b60405180910390fd5b6000611c2d336123e1565b1415611c9457600181611c409190614aec565b600d54611c4d9190614a5e565b341015611c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8690614766565b60405180910390fd5b611ce5565b80600d54611ca29190614a5e565b341015611ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdb90614766565b60405180910390fd5b5b611cef33826125f1565b601154611cfa6111e8565b10611d085760006013819055505b50565b611d1361257f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d78906146c6565b60405180910390fd5b8060076000611d8e61257f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611e3b61257f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611e80919061446e565b60405180910390a35050565b60026009541415611ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec990614806565b60405180910390fd5b60026009819055506000600a47611ee99190614a2d565b905060007377e5c0704d9681765d9c7204d66e5110c6556ddd73ffffffffffffffffffffffffffffffffffffffff1682604051611f25906143f2565b60006040518083038185875af1925050503d8060008114611f62576040519150601f19603f3d011682016040523d82523d6000602084013e611f67565b606091505b505090506000611f75611973565b73ffffffffffffffffffffffffffffffffffffffff168347611f979190614aec565b604051611fa3906143f2565b60006040518083038185875af1925050503d8060008114611fe0576040519150601f19603f3d011682016040523d82523d6000602084013e611fe5565b606091505b5050905081612029576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202090614726565b60405180910390fd5b80612069576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612060906145a6565b60405180910390fd5b5050506001600981905550565b61207e61257f565b73ffffffffffffffffffffffffffffffffffffffff1661209c611973565b73ffffffffffffffffffffffffffffffffffffffff16146120f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e990614686565b60405180910390fd5b80600b8190555050565b6121078484846126cf565b61211384848484612f4f565b612152576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214990614746565b60405180910390fd5b50505050565b61216061257f565b73ffffffffffffffffffffffffffffffffffffffff1661217e611973565b73ffffffffffffffffffffffffffffffffffffffff16146121d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121cb90614686565b60405180910390fd5b600e60009054906101000a900460ff1615600e60006101000a81548160ff021916908315150217905550565b61220861257f565b73ffffffffffffffffffffffffffffffffffffffff16612226611973565b73ffffffffffffffffffffffffffffffffffffffff161461227c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227390614686565b60405180910390fd5b8060118190555050565b60606122918261260f565b6122d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c7906146a6565b60405180910390fd5b600e60009054906101000a900460ff16156123425760006122ef6130e6565b9050600081511161230f576040518060200160405280600081525061233a565b8061231984613178565b60405160200161232a9291906143c3565b6040516020818303038152906040525b9150506123d0565b6010805461234f90614c3a565b80601f016020809104026020016040519081016040528092919081815260200182805461237b90614c3a565b80156123c85780601f1061239d576101008083540402835291602001916123c8565b820191906000526020600020905b8154815290600101906020018083116123ab57829003601f168201915b505050505090505b919050565b600b5481565b60085481565b60006123ec826132d9565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61248f61257f565b73ffffffffffffffffffffffffffffffffffffffff166124ad611973565b73ffffffffffffffffffffffffffffffffffffffff1614612503576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fa90614686565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256a906144e6565b60405180910390fd5b61257c81612e8b565b50565b600033905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61260b8282604051806020016040528060008152506133c2565b5050565b600060015482109050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006126da82612c88565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661270161257f565b73ffffffffffffffffffffffffffffffffffffffff16148061275d575061272661257f565b73ffffffffffffffffffffffffffffffffffffffff1661274584610e52565b73ffffffffffffffffffffffffffffffffffffffff16145b806127795750612778826000015161277361257f565b6123f3565b5b9050806127bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b2906146e6565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461282d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282490614666565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561289d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289490614546565b60405180910390fd5b6128aa85858560016138a2565b6128ba600084846000015161261d565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166129289190614ab8565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166129cc9190614991565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184612ad291906149d7565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612c1857612b488161260f565b15612c17576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c8086868660016138a8565b505050505050565b612c90613947565b612c998261260f565b612cd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ccf90614506565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008310612d3c5760017f000000000000000000000000000000000000000000000000000000000000000084612d2f9190614aec565b612d3991906149d7565b90505b60008390505b818110612e4a576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612e3657809350505050612e86565b508080612e4290614c10565b915050612d42565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7d90614826565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612f708473ffffffffffffffffffffffffffffffffffffffff166138ae565b156130d9578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612f9961257f565b8786866040518563ffffffff1660e01b8152600401612fbb9493929190614422565b602060405180830381600087803b158015612fd557600080fd5b505af192505050801561300657506040513d601f19601f820116820180604052508101906130039190613d19565b60015b613089573d8060008114613036576040519150601f19603f3d011682016040523d82523d6000602084013e61303b565b606091505b50600081511415613081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307890614746565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506130de565b600190505b949350505050565b6060600f80546130f590614c3a565b80601f016020809104026020016040519081016040528092919081815260200182805461312190614c3a565b801561316e5780601f106131435761010080835404028352916020019161316e565b820191906000526020600020905b81548152906001019060200180831161315157829003601f168201915b5050505050905090565b606060008214156131c0576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506132d4565b600082905060005b600082146131f25780806131db90614c9d565b915050600a826131eb9190614a2d565b91506131c8565b60008167ffffffffffffffff81111561320e5761320d614dd3565b5b6040519080825280601f01601f1916602001820160405280156132405781602001600182028036833780820191505090505b5090505b600085146132cd576001826132599190614aec565b9150600a856132689190614ce6565b603061327491906149d7565b60f81b81838151811061328a57613289614da4565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856132c69190614a2d565b9450613244565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561334a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334190614566565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613439576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613430906147a6565b60405180910390fd5b6134428161260f565b15613482576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161347990614786565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008311156134e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134dc90614866565b60405180910390fd5b6134f260008583866138a2565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516135ef9190614991565b6fffffffffffffffffffffffffffffffff1681526020018583602001516136169190614991565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561388557818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46138256000888488612f4f565b613864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161385b90614746565b60405180910390fd5b818061386f90614c9d565b925050808061387d90614c9d565b9150506137b4565b508060018190555061389a60008785886138a8565b505050505050565b50505050565b50505050565b600080823b905060008111915050919050565b8280546138cd90614c3a565b90600052602060002090601f0160209004810192826138ef5760008555613936565b82601f1061390857805160ff1916838001178555613936565b82800160010185558215613936579182015b8281111561393557825182559160200191906001019061391a565b5b5090506139439190613981565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561399a576000816000905550600101613982565b5090565b60006139b16139ac846148e1565b6148bc565b9050828152602081018484840111156139cd576139cc614e07565b5b6139d8848285614bce565b509392505050565b60006139f36139ee84614912565b6148bc565b905082815260208101848484011115613a0f57613a0e614e07565b5b613a1a848285614bce565b509392505050565b600081359050613a31816155cd565b92915050565b600081359050613a46816155e4565b92915050565b600081359050613a5b816155fb565b92915050565b600081359050613a7081615612565b92915050565b600081519050613a8581615612565b92915050565b600082601f830112613aa057613a9f614e02565b5b8135613ab084826020860161399e565b91505092915050565b600082601f830112613ace57613acd614e02565b5b8135613ade8482602086016139e0565b91505092915050565b600081359050613af681615629565b92915050565b600060208284031215613b1257613b11614e11565b5b6000613b2084828501613a22565b91505092915050565b60008060408385031215613b4057613b3f614e11565b5b6000613b4e85828601613a22565b9250506020613b5f85828601613a22565b9150509250929050565b600080600060608486031215613b8257613b81614e11565b5b6000613b9086828701613a22565b9350506020613ba186828701613a22565b9250506040613bb286828701613ae7565b9150509250925092565b60008060008060808587031215613bd657613bd5614e11565b5b6000613be487828801613a22565b9450506020613bf587828801613a22565b9350506040613c0687828801613ae7565b925050606085013567ffffffffffffffff811115613c2757613c26614e0c565b5b613c3387828801613a8b565b91505092959194509250565b60008060408385031215613c5657613c55614e11565b5b6000613c6485828601613a22565b9250506020613c7585828601613a37565b9150509250929050565b60008060408385031215613c9657613c95614e11565b5b6000613ca485828601613a22565b9250506020613cb585828601613ae7565b9150509250929050565b600060208284031215613cd557613cd4614e11565b5b6000613ce384828501613a4c565b91505092915050565b600060208284031215613d0257613d01614e11565b5b6000613d1084828501613a61565b91505092915050565b600060208284031215613d2f57613d2e614e11565b5b6000613d3d84828501613a76565b91505092915050565b600060208284031215613d5c57613d5b614e11565b5b600082013567ffffffffffffffff811115613d7a57613d79614e0c565b5b613d8684828501613ab9565b91505092915050565b600060208284031215613da557613da4614e11565b5b6000613db384828501613ae7565b91505092915050565b600080600080600060a08688031215613dd857613dd7614e11565b5b6000613de688828901613ae7565b9550506020613df788828901613ae7565b9450506040613e0888828901613ae7565b9350506060613e1988828901613ae7565b9250506080613e2a88828901613ae7565b9150509295509295909350565b613e4081614b20565b82525050565b613e4f81614b20565b82525050565b613e5e81614b32565b82525050565b613e6d81614b3e565b82525050565b6000613e7e82614943565b613e888185614959565b9350613e98818560208601614bdd565b613ea181614e16565b840191505092915050565b6000613eb78261494e565b613ec18185614975565b9350613ed1818560208601614bdd565b613eda81614e16565b840191505092915050565b6000613ef08261494e565b613efa8185614986565b9350613f0a818560208601614bdd565b80840191505092915050565b6000613f23602283614975565b9150613f2e82614e27565b604082019050919050565b6000613f46602683614975565b9150613f5182614e76565b604082019050919050565b6000613f69602a83614975565b9150613f7482614ec5565b604082019050919050565b6000613f8c602383614975565b9150613f9782614f14565b604082019050919050565b6000613faf602583614975565b9150613fba82614f63565b604082019050919050565b6000613fd2603183614975565b9150613fdd82614fb2565b604082019050919050565b6000613ff5601283614975565b915061400082615001565b602082019050919050565b6000614018601283614975565b91506140238261502a565b602082019050919050565b600061403b601e83614975565b915061404682615053565b602082019050919050565b600061405e603983614975565b91506140698261507c565b604082019050919050565b6000614081601e83614975565b915061408c826150cb565b602082019050919050565b60006140a4602b83614975565b91506140af826150f4565b604082019050919050565b60006140c7601283614975565b91506140d282615143565b602082019050919050565b60006140ea602683614975565b91506140f58261516c565b604082019050919050565b600061410d600583614986565b9150614118826151bb565b600582019050919050565b6000614130602083614975565b915061413b826151e4565b602082019050919050565b6000614153602f83614975565b915061415e8261520d565b604082019050919050565b6000614176601a83614975565b91506141818261525c565b602082019050919050565b6000614199603283614975565b91506141a482615285565b604082019050919050565b60006141bc602283614975565b91506141c7826152d4565b604082019050919050565b60006141df60008361496a565b91506141ea82615323565b600082019050919050565b6000614202601083614975565b915061420d82615326565b602082019050919050565b6000614225603383614975565b91506142308261534f565b604082019050919050565b6000614248601683614975565b91506142538261539e565b602082019050919050565b600061426b601d83614975565b9150614276826153c7565b602082019050919050565b600061428e602183614975565b9150614299826153f0565b604082019050919050565b60006142b1601683614975565b91506142bc8261543f565b602082019050919050565b60006142d4602e83614975565b91506142df82615468565b604082019050919050565b60006142f7601f83614975565b9150614302826154b7565b602082019050919050565b600061431a602f83614975565b9150614325826154e0565b604082019050919050565b600061433d602d83614975565b91506143488261552f565b604082019050919050565b6000614360602283614975565b915061436b8261557e565b604082019050919050565b60408201600082015161438c6000850182613e37565b50602082015161439f60208501826143b4565b50505050565b6143ae81614bb0565b82525050565b6143bd81614bba565b82525050565b60006143cf8285613ee5565b91506143db8284613ee5565b91506143e682614100565b91508190509392505050565b60006143fd826141d2565b9150819050919050565b600060208201905061441c6000830184613e46565b92915050565b60006080820190506144376000830187613e46565b6144446020830186613e46565b61445160408301856143a5565b81810360608301526144638184613e73565b905095945050505050565b60006020820190506144836000830184613e55565b92915050565b600060208201905061449e6000830184613e64565b92915050565b600060208201905081810360008301526144be8184613eac565b905092915050565b600060208201905081810360008301526144df81613f16565b9050919050565b600060208201905081810360008301526144ff81613f39565b9050919050565b6000602082019050818103600083015261451f81613f5c565b9050919050565b6000602082019050818103600083015261453f81613f7f565b9050919050565b6000602082019050818103600083015261455f81613fa2565b9050919050565b6000602082019050818103600083015261457f81613fc5565b9050919050565b6000602082019050818103600083015261459f81613fe8565b9050919050565b600060208201905081810360008301526145bf8161400b565b9050919050565b600060208201905081810360008301526145df8161402e565b9050919050565b600060208201905081810360008301526145ff81614051565b9050919050565b6000602082019050818103600083015261461f81614074565b9050919050565b6000602082019050818103600083015261463f81614097565b9050919050565b6000602082019050818103600083015261465f816140ba565b9050919050565b6000602082019050818103600083015261467f816140dd565b9050919050565b6000602082019050818103600083015261469f81614123565b9050919050565b600060208201905081810360008301526146bf81614146565b9050919050565b600060208201905081810360008301526146df81614169565b9050919050565b600060208201905081810360008301526146ff8161418c565b9050919050565b6000602082019050818103600083015261471f816141af565b9050919050565b6000602082019050818103600083015261473f816141f5565b9050919050565b6000602082019050818103600083015261475f81614218565b9050919050565b6000602082019050818103600083015261477f8161423b565b9050919050565b6000602082019050818103600083015261479f8161425e565b9050919050565b600060208201905081810360008301526147bf81614281565b9050919050565b600060208201905081810360008301526147df816142a4565b9050919050565b600060208201905081810360008301526147ff816142c7565b9050919050565b6000602082019050818103600083015261481f816142ea565b9050919050565b6000602082019050818103600083015261483f8161430d565b9050919050565b6000602082019050818103600083015261485f81614330565b9050919050565b6000602082019050818103600083015261487f81614353565b9050919050565b600060408201905061489b6000830184614376565b92915050565b60006020820190506148b660008301846143a5565b92915050565b60006148c66148d7565b90506148d28282614c6c565b919050565b6000604051905090565b600067ffffffffffffffff8211156148fc576148fb614dd3565b5b61490582614e16565b9050602081019050919050565b600067ffffffffffffffff82111561492d5761492c614dd3565b5b61493682614e16565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061499c82614b74565b91506149a783614b74565b9250826fffffffffffffffffffffffffffffffff038211156149cc576149cb614d17565b5b828201905092915050565b60006149e282614bb0565b91506149ed83614bb0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614a2257614a21614d17565b5b828201905092915050565b6000614a3882614bb0565b9150614a4383614bb0565b925082614a5357614a52614d46565b5b828204905092915050565b6000614a6982614bb0565b9150614a7483614bb0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614aad57614aac614d17565b5b828202905092915050565b6000614ac382614b74565b9150614ace83614b74565b925082821015614ae157614ae0614d17565b5b828203905092915050565b6000614af782614bb0565b9150614b0283614bb0565b925082821015614b1557614b14614d17565b5b828203905092915050565b6000614b2b82614b90565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b83811015614bfb578082015181840152602081019050614be0565b83811115614c0a576000848401525b50505050565b6000614c1b82614bb0565b91506000821415614c2f57614c2e614d17565b5b600182039050919050565b60006002820490506001821680614c5257607f821691505b60208210811415614c6657614c65614d75565b5b50919050565b614c7582614e16565b810181811067ffffffffffffffff82111715614c9457614c93614dd3565b5b80604052505050565b6000614ca882614bb0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614cdb57614cda614d17565b5b600182019050919050565b6000614cf182614bb0565b9150614cfc83614bb0565b925082614d0c57614d0b614d46565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f53616c65206973206e6f74204163746976650000000000000000000000000000600082015250565b7f5472616e736665722032206661696c65642e0000000000000000000000000000600082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f5175616e74697479206578636565647320616c6c6f776564204d696e74730000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f4e65656420746f2073656e64206d6f7265204554482e00000000000000000000600082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b6155d681614b20565b81146155e157600080fd5b50565b6155ed81614b32565b81146155f857600080fd5b50565b61560481614b3e565b811461560f57600080fd5b50565b61561b81614b48565b811461562657600080fd5b50565b61563281614bb0565b811461563d57600080fd5b5056fea2646970667358221220816514f1748028083521a7f086b6abee4e35aea1057b0c4b45977f99ab52f93564736f6c63430008070033697066733a2f2f516d5334466d436877635933565766506853333143716d6b694a68374c65725771636474573436505643683470722f

Deployed Bytecode

0x6080604052600436106102725760003560e01c80636352211e1161014f578063a22cb465116100c1578063c87b56dd1161007a578063c87b56dd14610908578063d04950a114610945578063d7224ba014610970578063dc33e6811461099b578063e985e9c5146109d8578063f2fde38b14610a1557610272565b8063a22cb46514610836578063ac4460021461085f578063af7b26e914610876578063b88d4fde1461089f578063bd0a8439146108c8578063c1f127e2146108df57610272565b80638d859f3e116101135780638d859f3e146107315780638da5cb5b1461075c5780639231ab2a1461078757806395d89b41146107c457806398d5fdca146107ef578063a0712d681461081a57610272565b80636352211e1461064e57806369ba1a751461068b57806370a08231146106b4578063715018a6146106f15780637cb647591461070857610272565b80632eb4a7ab116101e857806342842e0e116101ac57806342842e0e146105405780634e69d560146105695780634f6ccce71461059457806355f804b3146105d15780635c37809d146105fa57806362c6f7b91461062357610272565b80632eb4a7ab1461045b5780632f2ffc57146104865780632f745c59146104b15780633fd17366146104ee5780634256dbe31461051757610272565b8063081812fc1161023a578063081812fc1461035a578063095ea7b3146103975780630fbe4fe2146103c057806318160ddd146103dc578063200d2ed21461040757806323b872dd1461043257610272565b80630199e3471461027757806301ffc9a7146102a0578063050225ea146102dd57806305060ed91461030657806306fdde031461032f575b600080fd5b34801561028357600080fd5b5061029e60048036038101906102999190613d8f565b610a3e565b005b3480156102ac57600080fd5b506102c760048036038101906102c29190613cec565b610ac4565b6040516102d4919061446e565b60405180910390f35b3480156102e957600080fd5b5061030460048036038101906102ff9190613c7f565b610c0e565b005b34801561031257600080fd5b5061032d60048036038101906103289190613dbc565b610d1a565b005b34801561033b57600080fd5b50610344610dc0565b60405161035191906144a4565b60405180910390f35b34801561036657600080fd5b50610381600480360381019061037c9190613d8f565b610e52565b60405161038e9190614407565b60405180910390f35b3480156103a357600080fd5b506103be60048036038101906103b99190613c7f565b610ed7565b005b6103da60048036038101906103d59190613d8f565b610ff0565b005b3480156103e857600080fd5b506103f16111e8565b6040516103fe91906148a1565b60405180910390f35b34801561041357600080fd5b5061041c6111f2565b60405161042991906148a1565b60405180910390f35b34801561043e57600080fd5b5061045960048036038101906104549190613b69565b6111f8565b005b34801561046757600080fd5b50610470611208565b60405161047d9190614489565b60405180910390f35b34801561049257600080fd5b5061049b61120e565b6040516104a891906148a1565b60405180910390f35b3480156104bd57600080fd5b506104d860048036038101906104d39190613c7f565b611214565b6040516104e591906148a1565b60405180910390f35b3480156104fa57600080fd5b5061051560048036038101906105109190613d8f565b611412565b005b34801561052357600080fd5b5061053e60048036038101906105399190613d8f565b611498565b005b34801561054c57600080fd5b5061056760048036038101906105629190613b69565b61151e565b005b34801561057557600080fd5b5061057e61153e565b60405161058b91906148a1565b60405180910390f35b3480156105a057600080fd5b506105bb60048036038101906105b69190613d8f565b611548565b6040516105c891906148a1565b60405180910390f35b3480156105dd57600080fd5b506105f860048036038101906105f39190613d46565b61159b565b005b34801561060657600080fd5b50610621600480360381019061061c9190613d46565b611631565b005b34801561062f57600080fd5b506106386116c7565b604051610645919061446e565b60405180910390f35b34801561065a57600080fd5b5061067560048036038101906106709190613d8f565b6116da565b6040516106829190614407565b60405180910390f35b34801561069757600080fd5b506106b260048036038101906106ad9190613d8f565b6116f0565b005b3480156106c057600080fd5b506106db60048036038101906106d69190613afc565b611776565b6040516106e891906148a1565b60405180910390f35b3480156106fd57600080fd5b5061070661185f565b005b34801561071457600080fd5b5061072f600480360381019061072a9190613cbf565b6118e7565b005b34801561073d57600080fd5b5061074661196d565b60405161075391906148a1565b60405180910390f35b34801561076857600080fd5b50610771611973565b60405161077e9190614407565b60405180910390f35b34801561079357600080fd5b506107ae60048036038101906107a99190613d8f565b61199c565b6040516107bb9190614886565b60405180910390f35b3480156107d057600080fd5b506107d96119b4565b6040516107e691906144a4565b60405180910390f35b3480156107fb57600080fd5b50610804611a46565b60405161081191906148a1565b60405180910390f35b610834600480360381019061082f9190613d8f565b611a50565b005b34801561084257600080fd5b5061085d60048036038101906108589190613c3f565b611d0b565b005b34801561086b57600080fd5b50610874611e8c565b005b34801561088257600080fd5b5061089d60048036038101906108989190613d8f565b612076565b005b3480156108ab57600080fd5b506108c660048036038101906108c19190613bbc565b6120fc565b005b3480156108d457600080fd5b506108dd612158565b005b3480156108eb57600080fd5b5061090660048036038101906109019190613d8f565b612200565b005b34801561091457600080fd5b5061092f600480360381019061092a9190613d8f565b612286565b60405161093c91906144a4565b60405180910390f35b34801561095157600080fd5b5061095a6123d5565b60405161096791906148a1565b60405180910390f35b34801561097c57600080fd5b506109856123db565b60405161099291906148a1565b60405180910390f35b3480156109a757600080fd5b506109c260048036038101906109bd9190613afc565b6123e1565b6040516109cf91906148a1565b60405180910390f35b3480156109e457600080fd5b506109ff60048036038101906109fa9190613b29565b6123f3565b604051610a0c919061446e565b60405180910390f35b348015610a2157600080fd5b50610a3c6004803603810190610a379190613afc565b612487565b005b610a4661257f565b73ffffffffffffffffffffffffffffffffffffffff16610a64611973565b73ffffffffffffffffffffffffffffffffffffffff1614610aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab190614686565b60405180910390fd5b80600c8190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b8f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bf757507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c075750610c0682612587565b5b9050919050565b610c1661257f565b73ffffffffffffffffffffffffffffffffffffffff16610c34611973565b73ffffffffffffffffffffffffffffffffffffffff1614610c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8190614686565b60405180910390fd5b6012547f0000000000000000000000000000000000000000000000000000000000002710610cb89190614aec565b81610cc16111e8565b610ccb91906149d7565b1115610d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0390614646565b60405180910390fd5b610d1682826125f1565b5050565b610d2261257f565b73ffffffffffffffffffffffffffffffffffffffff16610d40611973565b73ffffffffffffffffffffffffffffffffffffffff1614610d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8d90614686565b60405180910390fd5b846013819055508060118190555081600d8190555083600c8190555082600b819055505050505050565b606060028054610dcf90614c3a565b80601f0160208091040260200160405190810160405280929190818152602001828054610dfb90614c3a565b8015610e485780601f10610e1d57610100808354040283529160200191610e48565b820191906000526020600020905b815481529060010190602001808311610e2b57829003601f168201915b5050505050905090565b6000610e5d8261260f565b610e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9390614846565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ee2826116da565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4a90614706565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610f7261257f565b73ffffffffffffffffffffffffffffffffffffffff161480610fa15750610fa081610f9b61257f565b6123f3565b5b610fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd7906145e6565b60405180910390fd5b610feb83838361261d565b505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461105e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611055906145c6565b60405180910390fd5b6001601354146110a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109a90614586565b60405180910390fd5b6012547f00000000000000000000000000000000000000000000000000000000000027106110d19190614aec565b816110da6111e8565b6110e491906149d7565b1115611125576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111c90614646565b60405180910390fd5b600c5481611132336123e1565b61113c91906149d7565b111561117d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117490614606565b60405180910390fd5b600b548111156111c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b9906147c6565b60405180910390fd5b6111cc33826125f1565b6011546111d76111e8565b106111e55760006013819055505b50565b6000600154905090565b60135481565b6112038383836126cf565b505050565b600a5481565b600c5481565b600061121f83611776565b8210611260576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611257906144c6565b60405180910390fd5b600061126a6111e8565b905060008060005b838110156113d0576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461136457806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156113bc57868414156113ad57819550505050505061140c565b83806113b890614c9d565b9450505b5080806113c890614c9d565b915050611272565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611403906147e6565b60405180910390fd5b92915050565b61141a61257f565b73ffffffffffffffffffffffffffffffffffffffff16611438611973565b73ffffffffffffffffffffffffffffffffffffffff161461148e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148590614686565b60405180910390fd5b80600d8190555050565b6114a061257f565b73ffffffffffffffffffffffffffffffffffffffff166114be611973565b73ffffffffffffffffffffffffffffffffffffffff1614611514576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150b90614686565b60405180910390fd5b8060128190555050565b611539838383604051806020016040528060008152506120fc565b505050565b6000601354905090565b60006115526111e8565b8210611593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158a90614526565b60405180910390fd5b819050919050565b6115a361257f565b73ffffffffffffffffffffffffffffffffffffffff166115c1611973565b73ffffffffffffffffffffffffffffffffffffffff1614611617576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160e90614686565b60405180910390fd5b80600f908051906020019061162d9291906138c1565b5050565b61163961257f565b73ffffffffffffffffffffffffffffffffffffffff16611657611973565b73ffffffffffffffffffffffffffffffffffffffff16146116ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a490614686565b60405180910390fd5b80601090805190602001906116c39291906138c1565b5050565b600e60009054906101000a900460ff1681565b60006116e582612c88565b600001519050919050565b6116f861257f565b73ffffffffffffffffffffffffffffffffffffffff16611716611973565b73ffffffffffffffffffffffffffffffffffffffff161461176c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176390614686565b60405180910390fd5b8060138190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117de90614626565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61186761257f565b73ffffffffffffffffffffffffffffffffffffffff16611885611973565b73ffffffffffffffffffffffffffffffffffffffff16146118db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d290614686565b60405180910390fd5b6118e56000612e8b565b565b6118ef61257f565b73ffffffffffffffffffffffffffffffffffffffff1661190d611973565b73ffffffffffffffffffffffffffffffffffffffff1614611963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195a90614686565b60405180910390fd5b80600a8190555050565b600d5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119a4613947565b6119ad82612c88565b9050919050565b6060600380546119c390614c3a565b80601f01602080910402602001604051908101604052809291908181526020018280546119ef90614c3a565b8015611a3c5780601f10611a1157610100808354040283529160200191611a3c565b820191906000526020600020905b815481529060010190602001808311611a1f57829003601f168201915b5050505050905090565b6000600d54905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab5906145c6565b60405180910390fd5b600260135414611b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afa90614586565b60405180910390fd5b6012547f0000000000000000000000000000000000000000000000000000000000002710611b319190614aec565b81611b3a6111e8565b611b4491906149d7565b1115611b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7c90614646565b60405180910390fd5b600c5481611b92336123e1565b611b9c91906149d7565b1115611bdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd490614606565b60405180910390fd5b600b54811115611c22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c19906147c6565b60405180910390fd5b6000611c2d336123e1565b1415611c9457600181611c409190614aec565b600d54611c4d9190614a5e565b341015611c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8690614766565b60405180910390fd5b611ce5565b80600d54611ca29190614a5e565b341015611ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdb90614766565b60405180910390fd5b5b611cef33826125f1565b601154611cfa6111e8565b10611d085760006013819055505b50565b611d1361257f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d78906146c6565b60405180910390fd5b8060076000611d8e61257f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611e3b61257f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611e80919061446e565b60405180910390a35050565b60026009541415611ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec990614806565b60405180910390fd5b60026009819055506000600a47611ee99190614a2d565b905060007377e5c0704d9681765d9c7204d66e5110c6556ddd73ffffffffffffffffffffffffffffffffffffffff1682604051611f25906143f2565b60006040518083038185875af1925050503d8060008114611f62576040519150601f19603f3d011682016040523d82523d6000602084013e611f67565b606091505b505090506000611f75611973565b73ffffffffffffffffffffffffffffffffffffffff168347611f979190614aec565b604051611fa3906143f2565b60006040518083038185875af1925050503d8060008114611fe0576040519150601f19603f3d011682016040523d82523d6000602084013e611fe5565b606091505b5050905081612029576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202090614726565b60405180910390fd5b80612069576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612060906145a6565b60405180910390fd5b5050506001600981905550565b61207e61257f565b73ffffffffffffffffffffffffffffffffffffffff1661209c611973565b73ffffffffffffffffffffffffffffffffffffffff16146120f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e990614686565b60405180910390fd5b80600b8190555050565b6121078484846126cf565b61211384848484612f4f565b612152576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214990614746565b60405180910390fd5b50505050565b61216061257f565b73ffffffffffffffffffffffffffffffffffffffff1661217e611973565b73ffffffffffffffffffffffffffffffffffffffff16146121d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121cb90614686565b60405180910390fd5b600e60009054906101000a900460ff1615600e60006101000a81548160ff021916908315150217905550565b61220861257f565b73ffffffffffffffffffffffffffffffffffffffff16612226611973565b73ffffffffffffffffffffffffffffffffffffffff161461227c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227390614686565b60405180910390fd5b8060118190555050565b60606122918261260f565b6122d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c7906146a6565b60405180910390fd5b600e60009054906101000a900460ff16156123425760006122ef6130e6565b9050600081511161230f576040518060200160405280600081525061233a565b8061231984613178565b60405160200161232a9291906143c3565b6040516020818303038152906040525b9150506123d0565b6010805461234f90614c3a565b80601f016020809104026020016040519081016040528092919081815260200182805461237b90614c3a565b80156123c85780601f1061239d576101008083540402835291602001916123c8565b820191906000526020600020905b8154815290600101906020018083116123ab57829003601f168201915b505050505090505b919050565b600b5481565b60085481565b60006123ec826132d9565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61248f61257f565b73ffffffffffffffffffffffffffffffffffffffff166124ad611973565b73ffffffffffffffffffffffffffffffffffffffff1614612503576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fa90614686565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256a906144e6565b60405180910390fd5b61257c81612e8b565b50565b600033905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61260b8282604051806020016040528060008152506133c2565b5050565b600060015482109050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006126da82612c88565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661270161257f565b73ffffffffffffffffffffffffffffffffffffffff16148061275d575061272661257f565b73ffffffffffffffffffffffffffffffffffffffff1661274584610e52565b73ffffffffffffffffffffffffffffffffffffffff16145b806127795750612778826000015161277361257f565b6123f3565b5b9050806127bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b2906146e6565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461282d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282490614666565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561289d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289490614546565b60405180910390fd5b6128aa85858560016138a2565b6128ba600084846000015161261d565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166129289190614ab8565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166129cc9190614991565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184612ad291906149d7565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612c1857612b488161260f565b15612c17576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c8086868660016138a8565b505050505050565b612c90613947565b612c998261260f565b612cd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ccf90614506565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000013888310612d3c5760017f000000000000000000000000000000000000000000000000000000000000138884612d2f9190614aec565b612d3991906149d7565b90505b60008390505b818110612e4a576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612e3657809350505050612e86565b508080612e4290614c10565b915050612d42565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7d90614826565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612f708473ffffffffffffffffffffffffffffffffffffffff166138ae565b156130d9578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612f9961257f565b8786866040518563ffffffff1660e01b8152600401612fbb9493929190614422565b602060405180830381600087803b158015612fd557600080fd5b505af192505050801561300657506040513d601f19601f820116820180604052508101906130039190613d19565b60015b613089573d8060008114613036576040519150601f19603f3d011682016040523d82523d6000602084013e61303b565b606091505b50600081511415613081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307890614746565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506130de565b600190505b949350505050565b6060600f80546130f590614c3a565b80601f016020809104026020016040519081016040528092919081815260200182805461312190614c3a565b801561316e5780601f106131435761010080835404028352916020019161316e565b820191906000526020600020905b81548152906001019060200180831161315157829003601f168201915b5050505050905090565b606060008214156131c0576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506132d4565b600082905060005b600082146131f25780806131db90614c9d565b915050600a826131eb9190614a2d565b91506131c8565b60008167ffffffffffffffff81111561320e5761320d614dd3565b5b6040519080825280601f01601f1916602001820160405280156132405781602001600182028036833780820191505090505b5090505b600085146132cd576001826132599190614aec565b9150600a856132689190614ce6565b603061327491906149d7565b60f81b81838151811061328a57613289614da4565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856132c69190614a2d565b9450613244565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561334a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334190614566565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613439576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613430906147a6565b60405180910390fd5b6134428161260f565b15613482576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161347990614786565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000013888311156134e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134dc90614866565b60405180910390fd5b6134f260008583866138a2565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516135ef9190614991565b6fffffffffffffffffffffffffffffffff1681526020018583602001516136169190614991565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561388557818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46138256000888488612f4f565b613864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161385b90614746565b60405180910390fd5b818061386f90614c9d565b925050808061387d90614c9d565b9150506137b4565b508060018190555061389a60008785886138a8565b505050505050565b50505050565b50505050565b600080823b905060008111915050919050565b8280546138cd90614c3a565b90600052602060002090601f0160209004810192826138ef5760008555613936565b82601f1061390857805160ff1916838001178555613936565b82800160010185558215613936579182015b8281111561393557825182559160200191906001019061391a565b5b5090506139439190613981565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561399a576000816000905550600101613982565b5090565b60006139b16139ac846148e1565b6148bc565b9050828152602081018484840111156139cd576139cc614e07565b5b6139d8848285614bce565b509392505050565b60006139f36139ee84614912565b6148bc565b905082815260208101848484011115613a0f57613a0e614e07565b5b613a1a848285614bce565b509392505050565b600081359050613a31816155cd565b92915050565b600081359050613a46816155e4565b92915050565b600081359050613a5b816155fb565b92915050565b600081359050613a7081615612565b92915050565b600081519050613a8581615612565b92915050565b600082601f830112613aa057613a9f614e02565b5b8135613ab084826020860161399e565b91505092915050565b600082601f830112613ace57613acd614e02565b5b8135613ade8482602086016139e0565b91505092915050565b600081359050613af681615629565b92915050565b600060208284031215613b1257613b11614e11565b5b6000613b2084828501613a22565b91505092915050565b60008060408385031215613b4057613b3f614e11565b5b6000613b4e85828601613a22565b9250506020613b5f85828601613a22565b9150509250929050565b600080600060608486031215613b8257613b81614e11565b5b6000613b9086828701613a22565b9350506020613ba186828701613a22565b9250506040613bb286828701613ae7565b9150509250925092565b60008060008060808587031215613bd657613bd5614e11565b5b6000613be487828801613a22565b9450506020613bf587828801613a22565b9350506040613c0687828801613ae7565b925050606085013567ffffffffffffffff811115613c2757613c26614e0c565b5b613c3387828801613a8b565b91505092959194509250565b60008060408385031215613c5657613c55614e11565b5b6000613c6485828601613a22565b9250506020613c7585828601613a37565b9150509250929050565b60008060408385031215613c9657613c95614e11565b5b6000613ca485828601613a22565b9250506020613cb585828601613ae7565b9150509250929050565b600060208284031215613cd557613cd4614e11565b5b6000613ce384828501613a4c565b91505092915050565b600060208284031215613d0257613d01614e11565b5b6000613d1084828501613a61565b91505092915050565b600060208284031215613d2f57613d2e614e11565b5b6000613d3d84828501613a76565b91505092915050565b600060208284031215613d5c57613d5b614e11565b5b600082013567ffffffffffffffff811115613d7a57613d79614e0c565b5b613d8684828501613ab9565b91505092915050565b600060208284031215613da557613da4614e11565b5b6000613db384828501613ae7565b91505092915050565b600080600080600060a08688031215613dd857613dd7614e11565b5b6000613de688828901613ae7565b9550506020613df788828901613ae7565b9450506040613e0888828901613ae7565b9350506060613e1988828901613ae7565b9250506080613e2a88828901613ae7565b9150509295509295909350565b613e4081614b20565b82525050565b613e4f81614b20565b82525050565b613e5e81614b32565b82525050565b613e6d81614b3e565b82525050565b6000613e7e82614943565b613e888185614959565b9350613e98818560208601614bdd565b613ea181614e16565b840191505092915050565b6000613eb78261494e565b613ec18185614975565b9350613ed1818560208601614bdd565b613eda81614e16565b840191505092915050565b6000613ef08261494e565b613efa8185614986565b9350613f0a818560208601614bdd565b80840191505092915050565b6000613f23602283614975565b9150613f2e82614e27565b604082019050919050565b6000613f46602683614975565b9150613f5182614e76565b604082019050919050565b6000613f69602a83614975565b9150613f7482614ec5565b604082019050919050565b6000613f8c602383614975565b9150613f9782614f14565b604082019050919050565b6000613faf602583614975565b9150613fba82614f63565b604082019050919050565b6000613fd2603183614975565b9150613fdd82614fb2565b604082019050919050565b6000613ff5601283614975565b915061400082615001565b602082019050919050565b6000614018601283614975565b91506140238261502a565b602082019050919050565b600061403b601e83614975565b915061404682615053565b602082019050919050565b600061405e603983614975565b91506140698261507c565b604082019050919050565b6000614081601e83614975565b915061408c826150cb565b602082019050919050565b60006140a4602b83614975565b91506140af826150f4565b604082019050919050565b60006140c7601283614975565b91506140d282615143565b602082019050919050565b60006140ea602683614975565b91506140f58261516c565b604082019050919050565b600061410d600583614986565b9150614118826151bb565b600582019050919050565b6000614130602083614975565b915061413b826151e4565b602082019050919050565b6000614153602f83614975565b915061415e8261520d565b604082019050919050565b6000614176601a83614975565b91506141818261525c565b602082019050919050565b6000614199603283614975565b91506141a482615285565b604082019050919050565b60006141bc602283614975565b91506141c7826152d4565b604082019050919050565b60006141df60008361496a565b91506141ea82615323565b600082019050919050565b6000614202601083614975565b915061420d82615326565b602082019050919050565b6000614225603383614975565b91506142308261534f565b604082019050919050565b6000614248601683614975565b91506142538261539e565b602082019050919050565b600061426b601d83614975565b9150614276826153c7565b602082019050919050565b600061428e602183614975565b9150614299826153f0565b604082019050919050565b60006142b1601683614975565b91506142bc8261543f565b602082019050919050565b60006142d4602e83614975565b91506142df82615468565b604082019050919050565b60006142f7601f83614975565b9150614302826154b7565b602082019050919050565b600061431a602f83614975565b9150614325826154e0565b604082019050919050565b600061433d602d83614975565b91506143488261552f565b604082019050919050565b6000614360602283614975565b915061436b8261557e565b604082019050919050565b60408201600082015161438c6000850182613e37565b50602082015161439f60208501826143b4565b50505050565b6143ae81614bb0565b82525050565b6143bd81614bba565b82525050565b60006143cf8285613ee5565b91506143db8284613ee5565b91506143e682614100565b91508190509392505050565b60006143fd826141d2565b9150819050919050565b600060208201905061441c6000830184613e46565b92915050565b60006080820190506144376000830187613e46565b6144446020830186613e46565b61445160408301856143a5565b81810360608301526144638184613e73565b905095945050505050565b60006020820190506144836000830184613e55565b92915050565b600060208201905061449e6000830184613e64565b92915050565b600060208201905081810360008301526144be8184613eac565b905092915050565b600060208201905081810360008301526144df81613f16565b9050919050565b600060208201905081810360008301526144ff81613f39565b9050919050565b6000602082019050818103600083015261451f81613f5c565b9050919050565b6000602082019050818103600083015261453f81613f7f565b9050919050565b6000602082019050818103600083015261455f81613fa2565b9050919050565b6000602082019050818103600083015261457f81613fc5565b9050919050565b6000602082019050818103600083015261459f81613fe8565b9050919050565b600060208201905081810360008301526145bf8161400b565b9050919050565b600060208201905081810360008301526145df8161402e565b9050919050565b600060208201905081810360008301526145ff81614051565b9050919050565b6000602082019050818103600083015261461f81614074565b9050919050565b6000602082019050818103600083015261463f81614097565b9050919050565b6000602082019050818103600083015261465f816140ba565b9050919050565b6000602082019050818103600083015261467f816140dd565b9050919050565b6000602082019050818103600083015261469f81614123565b9050919050565b600060208201905081810360008301526146bf81614146565b9050919050565b600060208201905081810360008301526146df81614169565b9050919050565b600060208201905081810360008301526146ff8161418c565b9050919050565b6000602082019050818103600083015261471f816141af565b9050919050565b6000602082019050818103600083015261473f816141f5565b9050919050565b6000602082019050818103600083015261475f81614218565b9050919050565b6000602082019050818103600083015261477f8161423b565b9050919050565b6000602082019050818103600083015261479f8161425e565b9050919050565b600060208201905081810360008301526147bf81614281565b9050919050565b600060208201905081810360008301526147df816142a4565b9050919050565b600060208201905081810360008301526147ff816142c7565b9050919050565b6000602082019050818103600083015261481f816142ea565b9050919050565b6000602082019050818103600083015261483f8161430d565b9050919050565b6000602082019050818103600083015261485f81614330565b9050919050565b6000602082019050818103600083015261487f81614353565b9050919050565b600060408201905061489b6000830184614376565b92915050565b60006020820190506148b660008301846143a5565b92915050565b60006148c66148d7565b90506148d28282614c6c565b919050565b6000604051905090565b600067ffffffffffffffff8211156148fc576148fb614dd3565b5b61490582614e16565b9050602081019050919050565b600067ffffffffffffffff82111561492d5761492c614dd3565b5b61493682614e16565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061499c82614b74565b91506149a783614b74565b9250826fffffffffffffffffffffffffffffffff038211156149cc576149cb614d17565b5b828201905092915050565b60006149e282614bb0565b91506149ed83614bb0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614a2257614a21614d17565b5b828201905092915050565b6000614a3882614bb0565b9150614a4383614bb0565b925082614a5357614a52614d46565b5b828204905092915050565b6000614a6982614bb0565b9150614a7483614bb0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614aad57614aac614d17565b5b828202905092915050565b6000614ac382614b74565b9150614ace83614b74565b925082821015614ae157614ae0614d17565b5b828203905092915050565b6000614af782614bb0565b9150614b0283614bb0565b925082821015614b1557614b14614d17565b5b828203905092915050565b6000614b2b82614b90565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b83811015614bfb578082015181840152602081019050614be0565b83811115614c0a576000848401525b50505050565b6000614c1b82614bb0565b91506000821415614c2f57614c2e614d17565b5b600182039050919050565b60006002820490506001821680614c5257607f821691505b60208210811415614c6657614c65614d75565b5b50919050565b614c7582614e16565b810181811067ffffffffffffffff82111715614c9457614c93614dd3565b5b80604052505050565b6000614ca882614bb0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614cdb57614cda614d17565b5b600182019050919050565b6000614cf182614bb0565b9150614cfc83614bb0565b925082614d0c57614d0b614d46565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f53616c65206973206e6f74204163746976650000000000000000000000000000600082015250565b7f5472616e736665722032206661696c65642e0000000000000000000000000000600082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f5175616e74697479206578636565647320616c6c6f776564204d696e74730000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f4e65656420746f2073656e64206d6f7265204554482e00000000000000000000600082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b6155d681614b20565b81146155e157600080fd5b50565b6155ed81614b32565b81146155f857600080fd5b50565b61560481614b3e565b811461560f57600080fd5b50565b61561b81614b48565b811461562657600080fd5b50565b61563281614bb0565b811461563d57600080fd5b5056fea2646970667358221220816514f1748028083521a7f086b6abee4e35aea1057b0c4b45977f99ab52f93564736f6c63430008070033

Deployed Bytecode Sourcemap

20887:5067:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25204:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12147:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25570:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23650:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13719:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14920:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14536:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22738:479;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11117:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21694:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15603:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20986:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21248:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11398:744;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24968:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25863:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15750:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25418:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11216:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24047:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23942:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21528:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13596:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25330:84;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12522:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3606:103;;;;;;;;;;;;;:::i;:::-;;21085:77;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21326:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3383:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24372:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13818:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25495:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22053:679;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15129:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24523:354;;;;;;;;;;;;;:::i;:::-;;25070:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15912:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24881:83;;;;;;;;;;;;;:::i;:::-;;25777:82;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23224:421;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21170:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19042:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24261:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15410:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3718:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25204:122;3528:12;:10;:12::i;:::-;3517:23;;:7;:5;:7::i;:::-;:23;;;3509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25307:13:::1;25289:15;:31;;;;25204:122:::0;:::o;12147:370::-;12274:4;12319:25;12304:40;;;:11;:40;;;;:99;;;;12370:33;12355:48;;;:11;:48;;;;12304:99;:160;;;;12429:35;12414:50;;;:11;:50;;;;12304:160;:207;;;;12475:36;12499:11;12475:23;:36::i;:::-;12304:207;12290:221;;12147:370;;;:::o;25570:201::-;3528:12;:10;:12::i;:::-;3517:23;;:7;:5;:7::i;:::-;:23;;;3509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25698:7:::1;;25681:14;:24;;;;:::i;:::-;25668:9;25652:13;:11;:13::i;:::-;:25;;;;:::i;:::-;:53;;25644:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;25735:30;25745:8;25755:9;25735;:30::i;:::-;25570:201:::0;;:::o;23650:286::-;3528:12;:10;:12::i;:::-;3517:23;;:7;:5;:7::i;:::-;:23;;;3509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23796:6:::1;23787;:15;;;;23820:7;23811:6;:16;;;;23844:5;23836;:13;;;;23876;23858:15;:31;;;;23918:12;23898:17;:32;;;;23650:286:::0;;;;;:::o;13719:94::-;13773:13;13802:5;13795:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13719:94;:::o;14920:204::-;14988:7;15012:16;15020:7;15012;:16::i;:::-;15004:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;15094:15;:24;15110:7;15094:24;;;;;;;;;;;;;;;;;;;;;15087:31;;14920:204;;;:::o;14536:379::-;14605:13;14621:24;14637:7;14621:15;:24::i;:::-;14605:40;;14666:5;14660:11;;:2;:11;;;;14652:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;14751:5;14735:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;14760:37;14777:5;14784:12;:10;:12::i;:::-;14760:16;:37::i;:::-;14735:62;14719:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;14881:28;14890:2;14894:7;14903:5;14881:8;:28::i;:::-;14598:317;14536:379;;:::o;22738:479::-;21987:10;21974:23;;:9;:23;;;21966:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;22829:1:::1;22819:6;;:11;22811:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;22914:7;;22897:14;:24;;;;:::i;:::-;22885:8;22869:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:52;;22861:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;23000:15;;22988:8;22961:24;22974:10;22961:12;:24::i;:::-;:35;;;;:::i;:::-;:54;;22951:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23083:17;;23071:8;:29;;23061:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;23133:31;23143:10;23155:8;23133:9;:31::i;:::-;23191:6;;23174:13;:11;:13::i;:::-;:23;23171:41;;23209:1;23200:6;:10;;;;23171:41;22738:479:::0;:::o;11117:94::-;11170:7;11193:12;;11186:19;;11117:94;:::o;21694:22::-;;;;:::o;15603:142::-;15711:28;15721:4;15727:2;15731:7;15711:9;:28::i;:::-;15603:142;;;:::o;20986:94::-;;;;:::o;21248:34::-;;;;:::o;11398:744::-;11507:7;11542:16;11552:5;11542:9;:16::i;:::-;11534:5;:24;11526:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11604:22;11629:13;:11;:13::i;:::-;11604:38;;11649:19;11679:25;11729:9;11724:350;11748:14;11744:1;:18;11724:350;;;11778:31;11812:11;:14;11824:1;11812:14;;;;;;;;;;;11778:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11865:1;11839:28;;:9;:14;;;:28;;;11835:89;;11900:9;:14;;;11880:34;;11835:89;11957:5;11936:26;;:17;:26;;;11932:135;;;11994:5;11979:11;:20;11975:59;;;12021:1;12014:8;;;;;;;;;11975:59;12044:13;;;;;:::i;:::-;;;;11932:135;11769:305;11764:3;;;;;:::i;:::-;;;;11724:350;;;;12080:56;;;;;;;;;;:::i;:::-;;;;;;;;11398:744;;;;;:::o;24968:98::-;3528:12;:10;:12::i;:::-;3517:23;;:7;:5;:7::i;:::-;:23;;;3509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25051:9:::1;25043:5;:17;;;;24968:98:::0;:::o;25863:88::-;3528:12;:10;:12::i;:::-;3517:23;;:7;:5;:7::i;:::-;:23;;;3509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25937:8:::1;25927:7;:18;;;;25863:88:::0;:::o;15750:157::-;15862:39;15879:4;15885:2;15889:7;15862:39;;;;;;;;;;;;:16;:39::i;:::-;15750:157;;;:::o;25418:73::-;25458:4;25479:6;;25472:13;;25418:73;:::o;11216:177::-;11283:7;11315:13;:11;:13::i;:::-;11307:5;:21;11299:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;11382:5;11375:12;;11216:177;;;:::o;24047:98::-;3528:12;:10;:12::i;:::-;3517:23;;:7;:5;:7::i;:::-;:23;;;3509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24132:7:::1;24116:13;:23;;;;;;;;;;;;:::i;:::-;;24047:98:::0;:::o;23942:99::-;3528:12;:10;:12::i;:::-;3517:23;;:7;:5;:7::i;:::-;:23;;;3509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24032:3:::1;24014:15;:21;;;;;;;;;;;;:::i;:::-;;23942:99:::0;:::o;21528:28::-;;;;;;;;;;;;;:::o;13596:118::-;13660:7;13683:20;13695:7;13683:11;:20::i;:::-;:25;;;13676:32;;13596:118;;;:::o;25330:84::-;3528:12;:10;:12::i;:::-;3517:23;;:7;:5;:7::i;:::-;:23;;;3509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25401:7:::1;25392:6;:16;;;;25330:84:::0;:::o;12522:211::-;12586:7;12627:1;12610:19;;:5;:19;;;;12602:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;12699:12;:19;12712:5;12699:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;12691:36;;12684:43;;12522:211;;;:::o;3606:103::-;3528:12;:10;:12::i;:::-;3517:23;;:7;:5;:7::i;:::-;:23;;;3509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3671:30:::1;3698:1;3671:18;:30::i;:::-;3606:103::o:0;21085:77::-;3528:12;:10;:12::i;:::-;3517:23;;:7;:5;:7::i;:::-;:23;;;3509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21155:1:::1;21142:10;:14;;;;21085:77:::0;:::o;21326:34::-;;;;:::o;3383:87::-;3429:7;3456:6;;;;;;;;;;;3449:13;;3383:87;:::o;24372:147::-;24453:21;;:::i;:::-;24493:20;24505:7;24493:11;:20::i;:::-;24486:27;;24372:147;;;:::o;13818:98::-;13874:13;13903:7;13896:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13818:98;:::o;25495:71::-;25534:4;25555:5;;25548:12;;25495:71;:::o;22053:679::-;21987:10;21974:23;;:9;:23;;;21966:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;22140:1:::1;22130:6;;:11;22122:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;22225:7;;22208:14;:24;;;;:::i;:::-;22196:8;22180:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:52;;22172:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;22311:15;;22299:8;22272:24;22285:10;22272:12;:24::i;:::-;:35;;;;:::i;:::-;:54;;22262:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;22394:17;;22382:8;:29;;22372:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;22475:1;22447:24;22460:10;22447:12;:24::i;:::-;:29;22444:192;;;22524:1;22515:8;:10;;;;:::i;:::-;22506:5;;:20;;;;:::i;:::-;22493:9;:33;;22485:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22444:192;;;22601:8;22593:5;;:16;;;;:::i;:::-;22580:9;:29;;22572:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22444:192;22645:31;22655:10;22667:8;22645:9;:31::i;:::-;22706:6;;22689:13;:11;:13::i;:::-;:23;22686:41;;22724:1;22715:6;:10;;;;22686:41;22053:679:::0;:::o;15129:274::-;15232:12;:10;:12::i;:::-;15220:24;;:8;:24;;;;15212:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;15329:8;15284:18;:32;15303:12;:10;:12::i;:::-;15284:32;;;;;;;;;;;;;;;:42;15317:8;15284:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;15378:8;15349:48;;15364:12;:10;:12::i;:::-;15349:48;;;15388:8;15349:48;;;;;;:::i;:::-;;;;;;;;15129:274;;:::o;24523:354::-;1165:1;1311:7;;:19;;1303:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1165:1;1372:7;:18;;;;24579:6:::1;24610:2;24588:21;:24;;;;:::i;:::-;24579:33;;24622:12;24641:42;24640:49;;24697:1;24640:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24621:82;;;24711:13;24730:7;:5;:7::i;:::-;:12;;24775:1;24751:21;:25;;;;:::i;:::-;24730:52;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24710:72;;;24797:7;24789:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;24840:8;24832:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;24570:307;;;1121:1:::0;1415:7;:22;;;;24523:354::o;25070:130::-;3528:12;:10;:12::i;:::-;3517:23;;:7;:5;:7::i;:::-;:23;;;3509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25179:15:::1;25159:17;:35;;;;25070:130:::0;:::o;15912:311::-;16049:28;16059:4;16065:2;16069:7;16049:9;:28::i;:::-;16100:48;16123:4;16129:2;16133:7;16142:5;16100:22;:48::i;:::-;16084:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;15912:311;;;;:::o;24881:83::-;3528:12;:10;:12::i;:::-;3517:23;;:7;:5;:7::i;:::-;:23;;;3509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24949:9:::1;;;;;;;;;;;24948:10;24936:9;;:22;;;;;;;;;;;;;;;;;;24881:83::o:0;25777:82::-;3528:12;:10;:12::i;:::-;3517:23;;:7;:5;:7::i;:::-;:23;;;3509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25846:7:::1;25837:6;:16;;;;25777:82:::0;:::o;23224:421::-;23297:13;23327:16;23335:7;23327;:16::i;:::-;23319:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;23404:9;;;;;;;;;;;23401:239;;;23421:21;23445:10;:8;:10::i;:::-;23421:34;;23500:1;23482:7;23476:21;:25;:112;;;;;;;;;;;;;;;;;23537:7;23546:18;:7;:16;:18::i;:::-;23520:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23476:112;23462:126;;;;;23401:239;23617:15;23610:22;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23224:421;;;;:::o;21170:36::-;;;;:::o;19042:43::-;;;;:::o;24261:107::-;24319:7;24342:20;24356:5;24342:13;:20::i;:::-;24335:27;;24261:107;;;:::o;15410:186::-;15532:4;15555:18;:25;15574:5;15555:25;;;;;;;;;;;;;;;:35;15581:8;15555:35;;;;;;;;;;;;;;;;;;;;;;;;;15548:42;;15410:186;;;;:::o;3718:201::-;3528:12;:10;:12::i;:::-;3517:23;;:7;:5;:7::i;:::-;:23;;;3509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3827:1:::1;3807:22;;:8;:22;;;;3799:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3883:28;3902:8;3883:18;:28::i;:::-;3718:201:::0;:::o;2926:98::-;2979:7;3006:10;2999:17;;2926:98;:::o;8036:157::-;8121:4;8160:25;8145:40;;;:11;:40;;;;8138:47;;8036:157;;;:::o;16339:98::-;16404:27;16414:2;16418:8;16404:27;;;;;;;;;;;;:9;:27::i;:::-;16339:98;;:::o;16228:105::-;16285:4;16315:12;;16305:7;:22;16298:29;;16228:105;;;:::o;18864:172::-;18988:2;18961:15;:24;18977:7;18961:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;19022:7;19018:2;19002:28;;19011:5;19002:28;;;;;;;;;;;;18864:172;;;:::o;17599:1260::-;17696:35;17734:20;17746:7;17734:11;:20::i;:::-;17696:58;;17763:22;17805:13;:18;;;17789:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;17858:12;:10;:12::i;:::-;17834:36;;:20;17846:7;17834:11;:20::i;:::-;:36;;;17789:81;:142;;;;17881:50;17898:13;:18;;;17918:12;:10;:12::i;:::-;17881:16;:50::i;:::-;17789:142;17763:169;;17957:17;17941:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;18089:4;18067:26;;:13;:18;;;:26;;;18051:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;18178:1;18164:16;;:2;:16;;;;18156:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;18231:43;18253:4;18259:2;18263:7;18272:1;18231:21;:43::i;:::-;18282:49;18299:1;18303:7;18312:13;:18;;;18282:8;:49::i;:::-;18370:1;18340:12;:18;18353:4;18340:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18406:1;18378:12;:16;18391:2;18378:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18437:43;;;;;;;;18452:2;18437:43;;;;;;18463:15;18437:43;;;;;18414:11;:20;18426:7;18414:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18488:19;18520:1;18510:7;:11;;;;:::i;:::-;18488:33;;18573:1;18532:43;;:11;:24;18544:11;18532:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;18528:236;;;18590:20;18598:11;18590:7;:20::i;:::-;18586:171;;;18650:97;;;;;;;;18677:13;:18;;;18650:97;;;;;;18708:13;:28;;;18650:97;;;;;18623:11;:24;18635:11;18623:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18586:171;18528:236;18796:7;18792:2;18777:27;;18786:4;18777:27;;;;;;;;;;;;18811:42;18832:4;18838:2;18842:7;18851:1;18811:20;:42::i;:::-;17689:1170;;;17599:1260;;;:::o;12985:606::-;13061:21;;:::i;:::-;13102:16;13110:7;13102;:16::i;:::-;13094:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13174:26;13222:12;13211:7;:23;13207:93;;13291:1;13276:12;13266:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;13245:47;;13207:93;13313:12;13328:7;13313:22;;13308:212;13345:18;13337:4;:26;13308:212;;13382:31;13416:11;:17;13428:4;13416:17;;;;;;;;;;;13382:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13472:1;13446:28;;:9;:14;;;:28;;;13442:71;;13494:9;13487:16;;;;;;;13442:71;13373:147;13365:6;;;;;:::i;:::-;;;;13308:212;;;;13528:57;;;;;;;;;;:::i;:::-;;;;;;;;12985:606;;;;:::o;3928:191::-;4002:16;4021:6;;;;;;;;;;;4002:25;;4047:8;4038:6;;:17;;;;;;;;;;;;;;;;;;4102:8;4071:40;;4092:8;4071:40;;;;;;;;;;;;3991:128;3928:191;:::o;19842:690::-;19979:4;19996:15;:2;:13;;;:15::i;:::-;19992:535;;;20051:2;20035:36;;;20072:12;:10;:12::i;:::-;20086:4;20092:7;20101:5;20035:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;20022:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20283:1;20266:6;:13;:18;20262:215;;;20299:61;;;;;;;;;;:::i;:::-;;;;;;;;20262:215;20445:6;20439:13;20430:6;20426:2;20422:15;20415:38;20022:464;20167:45;;;20157:55;;;:6;:55;;;;20150:62;;;;;19992:535;20515:4;20508:11;;19842:690;;;;;;;:::o;24149:108::-;24209:13;24238;24231:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24149:108;:::o;1543:533::-;1599:13;1639:1;1630:5;:10;1626:53;;;1657:10;;;;;;;;;;;;;;;;;;;;;1626:53;1689:12;1704:5;1689:20;;1720:14;1745:78;1760:1;1752:4;:9;1745:78;;1778:8;;;;;:::i;:::-;;;;1809:2;1801:10;;;;;:::i;:::-;;;1745:78;;;1833:19;1865:6;1855:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1833:39;;1883:154;1899:1;1890:5;:10;1883:154;;1927:1;1917:11;;;;;:::i;:::-;;;1994:2;1986:5;:10;;;;:::i;:::-;1973:2;:24;;;;:::i;:::-;1960:39;;1943:6;1950;1943:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2023:2;2014:11;;;;;:::i;:::-;;;1883:154;;;2061:6;2047:21;;;;;1543:533;;;;:::o;12739:240::-;12800:7;12849:1;12832:19;;:5;:19;;;;12816:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;12940:12;:19;12953:5;12940:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;12932:41;;12925:48;;12739:240;;;:::o;16442:1152::-;16547:20;16570:12;;16547:35;;16611:1;16597:16;;:2;:16;;;;16589:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;16668:21;16676:12;16668:7;:21::i;:::-;16667:22;16659:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;16750:12;16738:8;:24;;16730:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16810:61;16840:1;16844:2;16848:12;16862:8;16810:21;:61::i;:::-;16880:30;16913:12;:16;16926:2;16913:16;;;;;;;;;;;;;;;16880:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16955:119;;;;;;;;17005:8;16975:11;:19;;;:39;;;;:::i;:::-;16955:119;;;;;;17058:8;17023:11;:24;;;:44;;;;:::i;:::-;16955:119;;;;;16936:12;:16;16949:2;16936:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17109:43;;;;;;;;17124:2;17109:43;;;;;;17135:15;17109:43;;;;;17081:11;:25;17093:12;17081:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17161:20;17184:12;17161:35;;17210:9;17205:281;17229:8;17225:1;:12;17205:281;;;17283:12;17279:2;17258:38;;17275:1;17258:38;;;;;;;;;;;;17323:59;17354:1;17358:2;17362:12;17376:5;17323:22;:59::i;:::-;17305:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;17464:14;;;;;:::i;:::-;;;;17239:3;;;;;:::i;:::-;;;;17205:281;;;;17509:12;17494;:27;;;;17528:60;17557:1;17561:2;17565:12;17579:8;17528:20;:60::i;:::-;16540:1054;;;16442:1152;;;:::o;20537:141::-;;;;;:::o;20683:140::-;;;;;:::o;4151:197::-;4211:4;4229:12;4296:7;4284:20;4276:28;;4339:1;4332:4;:8;4325:15;;;4151:197;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:139::-;1171:5;1209:6;1196:20;1187:29;;1225:33;1252:5;1225:33;:::i;:::-;1125:139;;;;:::o;1270:137::-;1315:5;1353:6;1340:20;1331:29;;1369:32;1395:5;1369:32;:::i;:::-;1270:137;;;;:::o;1413:141::-;1469:5;1500:6;1494:13;1485:22;;1516:32;1542:5;1516:32;:::i;:::-;1413:141;;;;:::o;1573:338::-;1628:5;1677:3;1670:4;1662:6;1658:17;1654:27;1644:122;;1685:79;;:::i;:::-;1644:122;1802:6;1789:20;1827:78;1901:3;1893:6;1886:4;1878:6;1874:17;1827:78;:::i;:::-;1818:87;;1634:277;1573:338;;;;:::o;1931:340::-;1987:5;2036:3;2029:4;2021:6;2017:17;2013:27;2003:122;;2044:79;;:::i;:::-;2003:122;2161:6;2148:20;2186:79;2261:3;2253:6;2246:4;2238:6;2234:17;2186:79;:::i;:::-;2177:88;;1993:278;1931:340;;;;:::o;2277:139::-;2323:5;2361:6;2348:20;2339:29;;2377:33;2404:5;2377:33;:::i;:::-;2277:139;;;;:::o;2422:329::-;2481:6;2530:2;2518:9;2509:7;2505:23;2501:32;2498:119;;;2536:79;;:::i;:::-;2498:119;2656:1;2681:53;2726:7;2717:6;2706:9;2702:22;2681:53;:::i;:::-;2671:63;;2627:117;2422:329;;;;:::o;2757:474::-;2825:6;2833;2882:2;2870:9;2861:7;2857:23;2853:32;2850:119;;;2888:79;;:::i;:::-;2850:119;3008:1;3033:53;3078:7;3069:6;3058:9;3054:22;3033:53;:::i;:::-;3023:63;;2979:117;3135:2;3161:53;3206:7;3197:6;3186:9;3182:22;3161:53;:::i;:::-;3151:63;;3106:118;2757:474;;;;;:::o;3237:619::-;3314:6;3322;3330;3379:2;3367:9;3358:7;3354:23;3350:32;3347:119;;;3385:79;;:::i;:::-;3347:119;3505:1;3530:53;3575:7;3566:6;3555:9;3551:22;3530:53;:::i;:::-;3520:63;;3476:117;3632:2;3658:53;3703:7;3694:6;3683:9;3679:22;3658:53;:::i;:::-;3648:63;;3603:118;3760:2;3786:53;3831:7;3822:6;3811:9;3807:22;3786:53;:::i;:::-;3776:63;;3731:118;3237:619;;;;;:::o;3862:943::-;3957:6;3965;3973;3981;4030:3;4018:9;4009:7;4005:23;4001:33;3998:120;;;4037:79;;:::i;:::-;3998:120;4157:1;4182:53;4227:7;4218:6;4207:9;4203:22;4182:53;:::i;:::-;4172:63;;4128:117;4284:2;4310:53;4355:7;4346:6;4335:9;4331:22;4310:53;:::i;:::-;4300:63;;4255:118;4412:2;4438:53;4483:7;4474:6;4463:9;4459:22;4438:53;:::i;:::-;4428:63;;4383:118;4568:2;4557:9;4553:18;4540:32;4599:18;4591:6;4588:30;4585:117;;;4621:79;;:::i;:::-;4585:117;4726:62;4780:7;4771:6;4760:9;4756:22;4726:62;:::i;:::-;4716:72;;4511:287;3862:943;;;;;;;:::o;4811:468::-;4876:6;4884;4933:2;4921:9;4912:7;4908:23;4904:32;4901:119;;;4939:79;;:::i;:::-;4901:119;5059:1;5084:53;5129:7;5120:6;5109:9;5105:22;5084:53;:::i;:::-;5074:63;;5030:117;5186:2;5212:50;5254:7;5245:6;5234:9;5230:22;5212:50;:::i;:::-;5202:60;;5157:115;4811:468;;;;;:::o;5285:474::-;5353:6;5361;5410:2;5398:9;5389:7;5385:23;5381:32;5378:119;;;5416:79;;:::i;:::-;5378:119;5536:1;5561:53;5606:7;5597:6;5586:9;5582:22;5561:53;:::i;:::-;5551:63;;5507:117;5663:2;5689:53;5734:7;5725:6;5714:9;5710:22;5689:53;:::i;:::-;5679:63;;5634:118;5285:474;;;;;:::o;5765:329::-;5824:6;5873:2;5861:9;5852:7;5848:23;5844:32;5841:119;;;5879:79;;:::i;:::-;5841:119;5999:1;6024:53;6069:7;6060:6;6049:9;6045:22;6024:53;:::i;:::-;6014:63;;5970:117;5765:329;;;;:::o;6100:327::-;6158:6;6207:2;6195:9;6186:7;6182:23;6178:32;6175:119;;;6213:79;;:::i;:::-;6175:119;6333:1;6358:52;6402:7;6393:6;6382:9;6378:22;6358:52;:::i;:::-;6348:62;;6304:116;6100:327;;;;:::o;6433:349::-;6502:6;6551:2;6539:9;6530:7;6526:23;6522:32;6519:119;;;6557:79;;:::i;:::-;6519:119;6677:1;6702:63;6757:7;6748:6;6737:9;6733:22;6702:63;:::i;:::-;6692:73;;6648:127;6433:349;;;;:::o;6788:509::-;6857:6;6906:2;6894:9;6885:7;6881:23;6877:32;6874:119;;;6912:79;;:::i;:::-;6874:119;7060:1;7049:9;7045:17;7032:31;7090:18;7082:6;7079:30;7076:117;;;7112:79;;:::i;:::-;7076:117;7217:63;7272:7;7263:6;7252:9;7248:22;7217:63;:::i;:::-;7207:73;;7003:287;6788:509;;;;:::o;7303:329::-;7362:6;7411:2;7399:9;7390:7;7386:23;7382:32;7379:119;;;7417:79;;:::i;:::-;7379:119;7537:1;7562:53;7607:7;7598:6;7587:9;7583:22;7562:53;:::i;:::-;7552:63;;7508:117;7303:329;;;;:::o;7638:911::-;7733:6;7741;7749;7757;7765;7814:3;7802:9;7793:7;7789:23;7785:33;7782:120;;;7821:79;;:::i;:::-;7782:120;7941:1;7966:53;8011:7;8002:6;7991:9;7987:22;7966:53;:::i;:::-;7956:63;;7912:117;8068:2;8094:53;8139:7;8130:6;8119:9;8115:22;8094:53;:::i;:::-;8084:63;;8039:118;8196:2;8222:53;8267:7;8258:6;8247:9;8243:22;8222:53;:::i;:::-;8212:63;;8167:118;8324:2;8350:53;8395:7;8386:6;8375:9;8371:22;8350:53;:::i;:::-;8340:63;;8295:118;8452:3;8479:53;8524:7;8515:6;8504:9;8500:22;8479:53;:::i;:::-;8469:63;;8423:119;7638:911;;;;;;;;:::o;8555:108::-;8632:24;8650:5;8632:24;:::i;:::-;8627:3;8620:37;8555:108;;:::o;8669:118::-;8756:24;8774:5;8756:24;:::i;:::-;8751:3;8744:37;8669:118;;:::o;8793:109::-;8874:21;8889:5;8874:21;:::i;:::-;8869:3;8862:34;8793:109;;:::o;8908:118::-;8995:24;9013:5;8995:24;:::i;:::-;8990:3;8983:37;8908:118;;:::o;9032:360::-;9118:3;9146:38;9178:5;9146:38;:::i;:::-;9200:70;9263:6;9258:3;9200:70;:::i;:::-;9193:77;;9279:52;9324:6;9319:3;9312:4;9305:5;9301:16;9279:52;:::i;:::-;9356:29;9378:6;9356:29;:::i;:::-;9351:3;9347:39;9340:46;;9122:270;9032:360;;;;:::o;9398:364::-;9486:3;9514:39;9547:5;9514:39;:::i;:::-;9569:71;9633:6;9628:3;9569:71;:::i;:::-;9562:78;;9649:52;9694:6;9689:3;9682:4;9675:5;9671:16;9649:52;:::i;:::-;9726:29;9748:6;9726:29;:::i;:::-;9721:3;9717:39;9710:46;;9490:272;9398:364;;;;:::o;9768:377::-;9874:3;9902:39;9935:5;9902:39;:::i;:::-;9957:89;10039:6;10034:3;9957:89;:::i;:::-;9950:96;;10055:52;10100:6;10095:3;10088:4;10081:5;10077:16;10055:52;:::i;:::-;10132:6;10127:3;10123:16;10116:23;;9878:267;9768:377;;;;:::o;10151:366::-;10293:3;10314:67;10378:2;10373:3;10314:67;:::i;:::-;10307:74;;10390:93;10479:3;10390:93;:::i;:::-;10508:2;10503:3;10499:12;10492:19;;10151:366;;;:::o;10523:::-;10665:3;10686:67;10750:2;10745:3;10686:67;:::i;:::-;10679:74;;10762:93;10851:3;10762:93;:::i;:::-;10880:2;10875:3;10871:12;10864:19;;10523:366;;;:::o;10895:::-;11037:3;11058:67;11122:2;11117:3;11058:67;:::i;:::-;11051:74;;11134:93;11223:3;11134:93;:::i;:::-;11252:2;11247:3;11243:12;11236:19;;10895:366;;;:::o;11267:::-;11409:3;11430:67;11494:2;11489:3;11430:67;:::i;:::-;11423:74;;11506:93;11595:3;11506:93;:::i;:::-;11624:2;11619:3;11615:12;11608:19;;11267:366;;;:::o;11639:::-;11781:3;11802:67;11866:2;11861:3;11802:67;:::i;:::-;11795:74;;11878:93;11967:3;11878:93;:::i;:::-;11996:2;11991:3;11987:12;11980:19;;11639:366;;;:::o;12011:::-;12153:3;12174:67;12238:2;12233:3;12174:67;:::i;:::-;12167:74;;12250:93;12339:3;12250:93;:::i;:::-;12368:2;12363:3;12359:12;12352:19;;12011:366;;;:::o;12383:::-;12525:3;12546:67;12610:2;12605:3;12546:67;:::i;:::-;12539:74;;12622:93;12711:3;12622:93;:::i;:::-;12740:2;12735:3;12731:12;12724:19;;12383:366;;;:::o;12755:::-;12897:3;12918:67;12982:2;12977:3;12918:67;:::i;:::-;12911:74;;12994:93;13083:3;12994:93;:::i;:::-;13112:2;13107:3;13103:12;13096:19;;12755:366;;;:::o;13127:::-;13269:3;13290:67;13354:2;13349:3;13290:67;:::i;:::-;13283:74;;13366:93;13455:3;13366:93;:::i;:::-;13484:2;13479:3;13475:12;13468:19;;13127:366;;;:::o;13499:::-;13641:3;13662:67;13726:2;13721:3;13662:67;:::i;:::-;13655:74;;13738:93;13827:3;13738:93;:::i;:::-;13856:2;13851:3;13847:12;13840:19;;13499:366;;;:::o;13871:::-;14013:3;14034:67;14098:2;14093:3;14034:67;:::i;:::-;14027:74;;14110:93;14199:3;14110:93;:::i;:::-;14228:2;14223:3;14219:12;14212:19;;13871:366;;;:::o;14243:::-;14385:3;14406:67;14470:2;14465:3;14406:67;:::i;:::-;14399:74;;14482:93;14571:3;14482:93;:::i;:::-;14600:2;14595:3;14591:12;14584:19;;14243:366;;;:::o;14615:::-;14757:3;14778:67;14842:2;14837:3;14778:67;:::i;:::-;14771:74;;14854:93;14943:3;14854:93;:::i;:::-;14972:2;14967:3;14963:12;14956:19;;14615:366;;;:::o;14987:::-;15129:3;15150:67;15214:2;15209:3;15150:67;:::i;:::-;15143:74;;15226:93;15315:3;15226:93;:::i;:::-;15344:2;15339:3;15335:12;15328:19;;14987:366;;;:::o;15359:400::-;15519:3;15540:84;15622:1;15617:3;15540:84;:::i;:::-;15533:91;;15633:93;15722:3;15633:93;:::i;:::-;15751:1;15746:3;15742:11;15735:18;;15359:400;;;:::o;15765:366::-;15907:3;15928:67;15992:2;15987:3;15928:67;:::i;:::-;15921:74;;16004:93;16093:3;16004:93;:::i;:::-;16122:2;16117:3;16113:12;16106:19;;15765:366;;;:::o;16137:::-;16279:3;16300:67;16364:2;16359:3;16300:67;:::i;:::-;16293:74;;16376:93;16465:3;16376:93;:::i;:::-;16494:2;16489:3;16485:12;16478:19;;16137:366;;;:::o;16509:::-;16651:3;16672:67;16736:2;16731:3;16672:67;:::i;:::-;16665:74;;16748:93;16837:3;16748:93;:::i;:::-;16866:2;16861:3;16857:12;16850:19;;16509:366;;;:::o;16881:::-;17023:3;17044:67;17108:2;17103:3;17044:67;:::i;:::-;17037:74;;17120:93;17209:3;17120:93;:::i;:::-;17238:2;17233:3;17229:12;17222:19;;16881:366;;;:::o;17253:::-;17395:3;17416:67;17480:2;17475:3;17416:67;:::i;:::-;17409:74;;17492:93;17581:3;17492:93;:::i;:::-;17610:2;17605:3;17601:12;17594:19;;17253:366;;;:::o;17625:398::-;17784:3;17805:83;17886:1;17881:3;17805:83;:::i;:::-;17798:90;;17897:93;17986:3;17897:93;:::i;:::-;18015:1;18010:3;18006:11;17999:18;;17625:398;;;:::o;18029:366::-;18171:3;18192:67;18256:2;18251:3;18192:67;:::i;:::-;18185:74;;18268:93;18357:3;18268:93;:::i;:::-;18386:2;18381:3;18377:12;18370:19;;18029:366;;;:::o;18401:::-;18543:3;18564:67;18628:2;18623:3;18564:67;:::i;:::-;18557:74;;18640:93;18729:3;18640:93;:::i;:::-;18758:2;18753:3;18749:12;18742:19;;18401:366;;;:::o;18773:::-;18915:3;18936:67;19000:2;18995:3;18936:67;:::i;:::-;18929:74;;19012:93;19101:3;19012:93;:::i;:::-;19130:2;19125:3;19121:12;19114:19;;18773:366;;;:::o;19145:::-;19287:3;19308:67;19372:2;19367:3;19308:67;:::i;:::-;19301:74;;19384:93;19473:3;19384:93;:::i;:::-;19502:2;19497:3;19493:12;19486:19;;19145:366;;;:::o;19517:::-;19659:3;19680:67;19744:2;19739:3;19680:67;:::i;:::-;19673:74;;19756:93;19845:3;19756:93;:::i;:::-;19874:2;19869:3;19865:12;19858:19;;19517:366;;;:::o;19889:::-;20031:3;20052:67;20116:2;20111:3;20052:67;:::i;:::-;20045:74;;20128:93;20217:3;20128:93;:::i;:::-;20246:2;20241:3;20237:12;20230:19;;19889:366;;;:::o;20261:::-;20403:3;20424:67;20488:2;20483:3;20424:67;:::i;:::-;20417:74;;20500:93;20589:3;20500:93;:::i;:::-;20618:2;20613:3;20609:12;20602:19;;20261:366;;;:::o;20633:::-;20775:3;20796:67;20860:2;20855:3;20796:67;:::i;:::-;20789:74;;20872:93;20961:3;20872:93;:::i;:::-;20990:2;20985:3;20981:12;20974:19;;20633:366;;;:::o;21005:::-;21147:3;21168:67;21232:2;21227:3;21168:67;:::i;:::-;21161:74;;21244:93;21333:3;21244:93;:::i;:::-;21362:2;21357:3;21353:12;21346:19;;21005:366;;;:::o;21377:::-;21519:3;21540:67;21604:2;21599:3;21540:67;:::i;:::-;21533:74;;21616:93;21705:3;21616:93;:::i;:::-;21734:2;21729:3;21725:12;21718:19;;21377:366;;;:::o;21749:::-;21891:3;21912:67;21976:2;21971:3;21912:67;:::i;:::-;21905:74;;21988:93;22077:3;21988:93;:::i;:::-;22106:2;22101:3;22097:12;22090:19;;21749:366;;;:::o;22191:527::-;22350:4;22345:3;22341:14;22437:4;22430:5;22426:16;22420:23;22456:63;22513:4;22508:3;22504:14;22490:12;22456:63;:::i;:::-;22365:164;22621:4;22614:5;22610:16;22604:23;22640:61;22695:4;22690:3;22686:14;22672:12;22640:61;:::i;:::-;22539:172;22319:399;22191:527;;:::o;22724:118::-;22811:24;22829:5;22811:24;:::i;:::-;22806:3;22799:37;22724:118;;:::o;22848:105::-;22923:23;22940:5;22923:23;:::i;:::-;22918:3;22911:36;22848:105;;:::o;22959:701::-;23240:3;23262:95;23353:3;23344:6;23262:95;:::i;:::-;23255:102;;23374:95;23465:3;23456:6;23374:95;:::i;:::-;23367:102;;23486:148;23630:3;23486:148;:::i;:::-;23479:155;;23651:3;23644:10;;22959:701;;;;;:::o;23666:379::-;23850:3;23872:147;24015:3;23872:147;:::i;:::-;23865:154;;24036:3;24029:10;;23666:379;;;:::o;24051:222::-;24144:4;24182:2;24171:9;24167:18;24159:26;;24195:71;24263:1;24252:9;24248:17;24239:6;24195:71;:::i;:::-;24051:222;;;;:::o;24279:640::-;24474:4;24512:3;24501:9;24497:19;24489:27;;24526:71;24594:1;24583:9;24579:17;24570:6;24526:71;:::i;:::-;24607:72;24675:2;24664:9;24660:18;24651:6;24607:72;:::i;:::-;24689;24757:2;24746:9;24742:18;24733:6;24689:72;:::i;:::-;24808:9;24802:4;24798:20;24793:2;24782:9;24778:18;24771:48;24836:76;24907:4;24898:6;24836:76;:::i;:::-;24828:84;;24279:640;;;;;;;:::o;24925:210::-;25012:4;25050:2;25039:9;25035:18;25027:26;;25063:65;25125:1;25114:9;25110:17;25101:6;25063:65;:::i;:::-;24925:210;;;;:::o;25141:222::-;25234:4;25272:2;25261:9;25257:18;25249:26;;25285:71;25353:1;25342:9;25338:17;25329:6;25285:71;:::i;:::-;25141:222;;;;:::o;25369:313::-;25482:4;25520:2;25509:9;25505:18;25497:26;;25569:9;25563:4;25559:20;25555:1;25544:9;25540:17;25533:47;25597:78;25670:4;25661:6;25597:78;:::i;:::-;25589:86;;25369:313;;;;:::o;25688:419::-;25854:4;25892:2;25881:9;25877:18;25869:26;;25941:9;25935:4;25931:20;25927:1;25916:9;25912:17;25905:47;25969:131;26095:4;25969:131;:::i;:::-;25961:139;;25688:419;;;:::o;26113:::-;26279:4;26317:2;26306:9;26302:18;26294:26;;26366:9;26360:4;26356:20;26352:1;26341:9;26337:17;26330:47;26394:131;26520:4;26394:131;:::i;:::-;26386:139;;26113:419;;;:::o;26538:::-;26704:4;26742:2;26731:9;26727:18;26719:26;;26791:9;26785:4;26781:20;26777:1;26766:9;26762:17;26755:47;26819:131;26945:4;26819:131;:::i;:::-;26811:139;;26538:419;;;:::o;26963:::-;27129:4;27167:2;27156:9;27152:18;27144:26;;27216:9;27210:4;27206:20;27202:1;27191:9;27187:17;27180:47;27244:131;27370:4;27244:131;:::i;:::-;27236:139;;26963:419;;;:::o;27388:::-;27554:4;27592:2;27581:9;27577:18;27569:26;;27641:9;27635:4;27631:20;27627:1;27616:9;27612:17;27605:47;27669:131;27795:4;27669:131;:::i;:::-;27661:139;;27388:419;;;:::o;27813:::-;27979:4;28017:2;28006:9;28002:18;27994:26;;28066:9;28060:4;28056:20;28052:1;28041:9;28037:17;28030:47;28094:131;28220:4;28094:131;:::i;:::-;28086:139;;27813:419;;;:::o;28238:::-;28404:4;28442:2;28431:9;28427:18;28419:26;;28491:9;28485:4;28481:20;28477:1;28466:9;28462:17;28455:47;28519:131;28645:4;28519:131;:::i;:::-;28511:139;;28238:419;;;:::o;28663:::-;28829:4;28867:2;28856:9;28852:18;28844:26;;28916:9;28910:4;28906:20;28902:1;28891:9;28887:17;28880:47;28944:131;29070:4;28944:131;:::i;:::-;28936:139;;28663:419;;;:::o;29088:::-;29254:4;29292:2;29281:9;29277:18;29269:26;;29341:9;29335:4;29331:20;29327:1;29316:9;29312:17;29305:47;29369:131;29495:4;29369:131;:::i;:::-;29361:139;;29088:419;;;:::o;29513:::-;29679:4;29717:2;29706:9;29702:18;29694:26;;29766:9;29760:4;29756:20;29752:1;29741:9;29737:17;29730:47;29794:131;29920:4;29794:131;:::i;:::-;29786:139;;29513:419;;;:::o;29938:::-;30104:4;30142:2;30131:9;30127:18;30119:26;;30191:9;30185:4;30181:20;30177:1;30166:9;30162:17;30155:47;30219:131;30345:4;30219:131;:::i;:::-;30211:139;;29938:419;;;:::o;30363:::-;30529:4;30567:2;30556:9;30552:18;30544:26;;30616:9;30610:4;30606:20;30602:1;30591:9;30587:17;30580:47;30644:131;30770:4;30644:131;:::i;:::-;30636:139;;30363:419;;;:::o;30788:::-;30954:4;30992:2;30981:9;30977:18;30969:26;;31041:9;31035:4;31031:20;31027:1;31016:9;31012:17;31005:47;31069:131;31195:4;31069:131;:::i;:::-;31061:139;;30788:419;;;:::o;31213:::-;31379:4;31417:2;31406:9;31402:18;31394:26;;31466:9;31460:4;31456:20;31452:1;31441:9;31437:17;31430:47;31494:131;31620:4;31494:131;:::i;:::-;31486:139;;31213:419;;;:::o;31638:::-;31804:4;31842:2;31831:9;31827:18;31819:26;;31891:9;31885:4;31881:20;31877:1;31866:9;31862:17;31855:47;31919:131;32045:4;31919:131;:::i;:::-;31911:139;;31638:419;;;:::o;32063:::-;32229:4;32267:2;32256:9;32252:18;32244:26;;32316:9;32310:4;32306:20;32302:1;32291:9;32287:17;32280:47;32344:131;32470:4;32344:131;:::i;:::-;32336:139;;32063:419;;;:::o;32488:::-;32654:4;32692:2;32681:9;32677:18;32669:26;;32741:9;32735:4;32731:20;32727:1;32716:9;32712:17;32705:47;32769:131;32895:4;32769:131;:::i;:::-;32761:139;;32488:419;;;:::o;32913:::-;33079:4;33117:2;33106:9;33102:18;33094:26;;33166:9;33160:4;33156:20;33152:1;33141:9;33137:17;33130:47;33194:131;33320:4;33194:131;:::i;:::-;33186:139;;32913:419;;;:::o;33338:::-;33504:4;33542:2;33531:9;33527:18;33519:26;;33591:9;33585:4;33581:20;33577:1;33566:9;33562:17;33555:47;33619:131;33745:4;33619:131;:::i;:::-;33611:139;;33338:419;;;:::o;33763:::-;33929:4;33967:2;33956:9;33952:18;33944:26;;34016:9;34010:4;34006:20;34002:1;33991:9;33987:17;33980:47;34044:131;34170:4;34044:131;:::i;:::-;34036:139;;33763:419;;;:::o;34188:::-;34354:4;34392:2;34381:9;34377:18;34369:26;;34441:9;34435:4;34431:20;34427:1;34416:9;34412:17;34405:47;34469:131;34595:4;34469:131;:::i;:::-;34461:139;;34188:419;;;:::o;34613:::-;34779:4;34817:2;34806:9;34802:18;34794:26;;34866:9;34860:4;34856:20;34852:1;34841:9;34837:17;34830:47;34894:131;35020:4;34894:131;:::i;:::-;34886:139;;34613:419;;;:::o;35038:::-;35204:4;35242:2;35231:9;35227:18;35219:26;;35291:9;35285:4;35281:20;35277:1;35266:9;35262:17;35255:47;35319:131;35445:4;35319:131;:::i;:::-;35311:139;;35038:419;;;:::o;35463:::-;35629:4;35667:2;35656:9;35652:18;35644:26;;35716:9;35710:4;35706:20;35702:1;35691:9;35687:17;35680:47;35744:131;35870:4;35744:131;:::i;:::-;35736:139;;35463:419;;;:::o;35888:::-;36054:4;36092:2;36081:9;36077:18;36069:26;;36141:9;36135:4;36131:20;36127:1;36116:9;36112:17;36105:47;36169:131;36295:4;36169:131;:::i;:::-;36161:139;;35888:419;;;:::o;36313:::-;36479:4;36517:2;36506:9;36502:18;36494:26;;36566:9;36560:4;36556:20;36552:1;36541:9;36537:17;36530:47;36594:131;36720:4;36594:131;:::i;:::-;36586:139;;36313:419;;;:::o;36738:::-;36904:4;36942:2;36931:9;36927:18;36919:26;;36991:9;36985:4;36981:20;36977:1;36966:9;36962:17;36955:47;37019:131;37145:4;37019:131;:::i;:::-;37011:139;;36738:419;;;:::o;37163:::-;37329:4;37367:2;37356:9;37352:18;37344:26;;37416:9;37410:4;37406:20;37402:1;37391:9;37387:17;37380:47;37444:131;37570:4;37444:131;:::i;:::-;37436:139;;37163:419;;;:::o;37588:::-;37754:4;37792:2;37781:9;37777:18;37769:26;;37841:9;37835:4;37831:20;37827:1;37816:9;37812:17;37805:47;37869:131;37995:4;37869:131;:::i;:::-;37861:139;;37588:419;;;:::o;38013:::-;38179:4;38217:2;38206:9;38202:18;38194:26;;38266:9;38260:4;38256:20;38252:1;38241:9;38237:17;38230:47;38294:131;38420:4;38294:131;:::i;:::-;38286:139;;38013:419;;;:::o;38438:346::-;38593:4;38631:2;38620:9;38616:18;38608:26;;38644:133;38774:1;38763:9;38759:17;38750:6;38644:133;:::i;:::-;38438:346;;;;:::o;38790:222::-;38883:4;38921:2;38910:9;38906:18;38898:26;;38934:71;39002:1;38991:9;38987:17;38978:6;38934:71;:::i;:::-;38790:222;;;;:::o;39018:129::-;39052:6;39079:20;;:::i;:::-;39069:30;;39108:33;39136:4;39128:6;39108:33;:::i;:::-;39018:129;;;:::o;39153:75::-;39186:6;39219:2;39213:9;39203:19;;39153:75;:::o;39234:307::-;39295:4;39385:18;39377:6;39374:30;39371:56;;;39407:18;;:::i;:::-;39371:56;39445:29;39467:6;39445:29;:::i;:::-;39437:37;;39529:4;39523;39519:15;39511:23;;39234:307;;;:::o;39547:308::-;39609:4;39699:18;39691:6;39688:30;39685:56;;;39721:18;;:::i;:::-;39685:56;39759:29;39781:6;39759:29;:::i;:::-;39751:37;;39843:4;39837;39833:15;39825:23;;39547:308;;;:::o;39861:98::-;39912:6;39946:5;39940:12;39930:22;;39861:98;;;:::o;39965:99::-;40017:6;40051:5;40045:12;40035:22;;39965:99;;;:::o;40070:168::-;40153:11;40187:6;40182:3;40175:19;40227:4;40222:3;40218:14;40203:29;;40070:168;;;;:::o;40244:147::-;40345:11;40382:3;40367:18;;40244:147;;;;:::o;40397:169::-;40481:11;40515:6;40510:3;40503:19;40555:4;40550:3;40546:14;40531:29;;40397:169;;;;:::o;40572:148::-;40674:11;40711:3;40696:18;;40572:148;;;;:::o;40726:273::-;40766:3;40785:20;40803:1;40785:20;:::i;:::-;40780:25;;40819:20;40837:1;40819:20;:::i;:::-;40814:25;;40941:1;40905:34;40901:42;40898:1;40895:49;40892:75;;;40947:18;;:::i;:::-;40892:75;40991:1;40988;40984:9;40977:16;;40726:273;;;;:::o;41005:305::-;41045:3;41064:20;41082:1;41064:20;:::i;:::-;41059:25;;41098:20;41116:1;41098:20;:::i;:::-;41093:25;;41252:1;41184:66;41180:74;41177:1;41174:81;41171:107;;;41258:18;;:::i;:::-;41171:107;41302:1;41299;41295:9;41288:16;;41005:305;;;;:::o;41316:185::-;41356:1;41373:20;41391:1;41373:20;:::i;:::-;41368:25;;41407:20;41425:1;41407:20;:::i;:::-;41402:25;;41446:1;41436:35;;41451:18;;:::i;:::-;41436:35;41493:1;41490;41486:9;41481:14;;41316:185;;;;:::o;41507:348::-;41547:7;41570:20;41588:1;41570:20;:::i;:::-;41565:25;;41604:20;41622:1;41604:20;:::i;:::-;41599:25;;41792:1;41724:66;41720:74;41717:1;41714:81;41709:1;41702:9;41695:17;41691:105;41688:131;;;41799:18;;:::i;:::-;41688:131;41847:1;41844;41840:9;41829:20;;41507:348;;;;:::o;41861:191::-;41901:4;41921:20;41939:1;41921:20;:::i;:::-;41916:25;;41955:20;41973:1;41955:20;:::i;:::-;41950:25;;41994:1;41991;41988:8;41985:34;;;41999:18;;:::i;:::-;41985:34;42044:1;42041;42037:9;42029:17;;41861:191;;;;:::o;42058:::-;42098:4;42118:20;42136:1;42118:20;:::i;:::-;42113:25;;42152:20;42170:1;42152:20;:::i;:::-;42147:25;;42191:1;42188;42185:8;42182:34;;;42196:18;;:::i;:::-;42182:34;42241:1;42238;42234:9;42226:17;;42058:191;;;;:::o;42255:96::-;42292:7;42321:24;42339:5;42321:24;:::i;:::-;42310:35;;42255:96;;;:::o;42357:90::-;42391:7;42434:5;42427:13;42420:21;42409:32;;42357:90;;;:::o;42453:77::-;42490:7;42519:5;42508:16;;42453:77;;;:::o;42536:149::-;42572:7;42612:66;42605:5;42601:78;42590:89;;42536:149;;;:::o;42691:118::-;42728:7;42768:34;42761:5;42757:46;42746:57;;42691:118;;;:::o;42815:126::-;42852:7;42892:42;42885:5;42881:54;42870:65;;42815:126;;;:::o;42947:77::-;42984:7;43013:5;43002:16;;42947:77;;;:::o;43030:101::-;43066:7;43106:18;43099:5;43095:30;43084:41;;43030:101;;;:::o;43137:154::-;43221:6;43216:3;43211;43198:30;43283:1;43274:6;43269:3;43265:16;43258:27;43137:154;;;:::o;43297:307::-;43365:1;43375:113;43389:6;43386:1;43383:13;43375:113;;;43474:1;43469:3;43465:11;43459:18;43455:1;43450:3;43446:11;43439:39;43411:2;43408:1;43404:10;43399:15;;43375:113;;;43506:6;43503:1;43500:13;43497:101;;;43586:1;43577:6;43572:3;43568:16;43561:27;43497:101;43346:258;43297:307;;;:::o;43610:171::-;43649:3;43672:24;43690:5;43672:24;:::i;:::-;43663:33;;43718:4;43711:5;43708:15;43705:41;;;43726:18;;:::i;:::-;43705:41;43773:1;43766:5;43762:13;43755:20;;43610:171;;;:::o;43787:320::-;43831:6;43868:1;43862:4;43858:12;43848:22;;43915:1;43909:4;43905:12;43936:18;43926:81;;43992:4;43984:6;43980:17;43970:27;;43926:81;44054:2;44046:6;44043:14;44023:18;44020:38;44017:84;;;44073:18;;:::i;:::-;44017:84;43838:269;43787:320;;;:::o;44113:281::-;44196:27;44218:4;44196:27;:::i;:::-;44188:6;44184:40;44326:6;44314:10;44311:22;44290:18;44278:10;44275:34;44272:62;44269:88;;;44337:18;;:::i;:::-;44269:88;44377:10;44373:2;44366:22;44156:238;44113:281;;:::o;44400:233::-;44439:3;44462:24;44480:5;44462:24;:::i;:::-;44453:33;;44508:66;44501:5;44498:77;44495:103;;;44578:18;;:::i;:::-;44495:103;44625:1;44618:5;44614:13;44607:20;;44400:233;;;:::o;44639:176::-;44671:1;44688:20;44706:1;44688:20;:::i;:::-;44683:25;;44722:20;44740:1;44722:20;:::i;:::-;44717:25;;44761:1;44751:35;;44766:18;;:::i;:::-;44751:35;44807:1;44804;44800:9;44795:14;;44639:176;;;;:::o;44821:180::-;44869:77;44866:1;44859:88;44966:4;44963:1;44956:15;44990:4;44987:1;44980:15;45007:180;45055:77;45052:1;45045:88;45152:4;45149:1;45142:15;45176:4;45173:1;45166:15;45193:180;45241:77;45238:1;45231:88;45338:4;45335:1;45328:15;45362:4;45359:1;45352:15;45379:180;45427:77;45424:1;45417:88;45524:4;45521:1;45514:15;45548:4;45545:1;45538:15;45565:180;45613:77;45610:1;45603:88;45710:4;45707:1;45700:15;45734:4;45731:1;45724:15;45751:117;45860:1;45857;45850:12;45874:117;45983:1;45980;45973:12;45997:117;46106:1;46103;46096:12;46120:117;46229:1;46226;46219:12;46243:102;46284:6;46335:2;46331:7;46326:2;46319:5;46315:14;46311:28;46301:38;;46243:102;;;:::o;46351:221::-;46491:34;46487:1;46479:6;46475:14;46468:58;46560:4;46555:2;46547:6;46543:15;46536:29;46351:221;:::o;46578:225::-;46718:34;46714:1;46706:6;46702:14;46695:58;46787:8;46782:2;46774:6;46770:15;46763:33;46578:225;:::o;46809:229::-;46949:34;46945:1;46937:6;46933:14;46926:58;47018:12;47013:2;47005:6;47001:15;46994:37;46809:229;:::o;47044:222::-;47184:34;47180:1;47172:6;47168:14;47161:58;47253:5;47248:2;47240:6;47236:15;47229:30;47044:222;:::o;47272:224::-;47412:34;47408:1;47400:6;47396:14;47389:58;47481:7;47476:2;47468:6;47464:15;47457:32;47272:224;:::o;47502:236::-;47642:34;47638:1;47630:6;47626:14;47619:58;47711:19;47706:2;47698:6;47694:15;47687:44;47502:236;:::o;47744:168::-;47884:20;47880:1;47872:6;47868:14;47861:44;47744:168;:::o;47918:::-;48058:20;48054:1;48046:6;48042:14;48035:44;47918:168;:::o;48092:180::-;48232:32;48228:1;48220:6;48216:14;48209:56;48092:180;:::o;48278:244::-;48418:34;48414:1;48406:6;48402:14;48395:58;48487:27;48482:2;48474:6;48470:15;48463:52;48278:244;:::o;48528:180::-;48668:32;48664:1;48656:6;48652:14;48645:56;48528:180;:::o;48714:230::-;48854:34;48850:1;48842:6;48838:14;48831:58;48923:13;48918:2;48910:6;48906:15;48899:38;48714:230;:::o;48950:168::-;49090:20;49086:1;49078:6;49074:14;49067:44;48950:168;:::o;49124:225::-;49264:34;49260:1;49252:6;49248:14;49241:58;49333:8;49328:2;49320:6;49316:15;49309:33;49124:225;:::o;49355:155::-;49495:7;49491:1;49483:6;49479:14;49472:31;49355:155;:::o;49516:182::-;49656:34;49652:1;49644:6;49640:14;49633:58;49516:182;:::o;49704:234::-;49844:34;49840:1;49832:6;49828:14;49821:58;49913:17;49908:2;49900:6;49896:15;49889:42;49704:234;:::o;49944:176::-;50084:28;50080:1;50072:6;50068:14;50061:52;49944:176;:::o;50126:237::-;50266:34;50262:1;50254:6;50250:14;50243:58;50335:20;50330:2;50322:6;50318:15;50311:45;50126:237;:::o;50369:221::-;50509:34;50505:1;50497:6;50493:14;50486:58;50578:4;50573:2;50565:6;50561:15;50554:29;50369:221;:::o;50596:114::-;;:::o;50716:166::-;50856:18;50852:1;50844:6;50840:14;50833:42;50716:166;:::o;50888:238::-;51028:34;51024:1;51016:6;51012:14;51005:58;51097:21;51092:2;51084:6;51080:15;51073:46;50888:238;:::o;51132:172::-;51272:24;51268:1;51260:6;51256:14;51249:48;51132:172;:::o;51310:179::-;51450:31;51446:1;51438:6;51434:14;51427:55;51310:179;:::o;51495:220::-;51635:34;51631:1;51623:6;51619:14;51612:58;51704:3;51699:2;51691:6;51687:15;51680:28;51495:220;:::o;51721:172::-;51861:24;51857:1;51849:6;51845:14;51838:48;51721:172;:::o;51899:233::-;52039:34;52035:1;52027:6;52023:14;52016:58;52108:16;52103:2;52095:6;52091:15;52084:41;51899:233;:::o;52138:181::-;52278:33;52274:1;52266:6;52262:14;52255:57;52138:181;:::o;52325:234::-;52465:34;52461:1;52453:6;52449:14;52442:58;52534:17;52529:2;52521:6;52517:15;52510:42;52325:234;:::o;52565:232::-;52705:34;52701:1;52693:6;52689:14;52682:58;52774:15;52769:2;52761:6;52757:15;52750:40;52565:232;:::o;52803:221::-;52943:34;52939:1;52931:6;52927:14;52920:58;53012:4;53007:2;52999:6;52995:15;52988:29;52803:221;:::o;53030:122::-;53103:24;53121:5;53103:24;:::i;:::-;53096:5;53093:35;53083:63;;53142:1;53139;53132:12;53083:63;53030:122;:::o;53158:116::-;53228:21;53243:5;53228:21;:::i;:::-;53221:5;53218:32;53208:60;;53264:1;53261;53254:12;53208:60;53158:116;:::o;53280:122::-;53353:24;53371:5;53353:24;:::i;:::-;53346:5;53343:35;53333:63;;53392:1;53389;53382:12;53333:63;53280:122;:::o;53408:120::-;53480:23;53497:5;53480:23;:::i;:::-;53473:5;53470:34;53460:62;;53518:1;53515;53508:12;53460:62;53408:120;:::o;53534:122::-;53607:24;53625:5;53607:24;:::i;:::-;53600:5;53597:35;53587:63;;53646:1;53643;53636:12;53587:63;53534:122;:::o

Swarm Source

ipfs://816514f1748028083521a7f086b6abee4e35aea1057b0c4b45977f99ab52f935

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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