Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
173 DRMBTZ
Holders
55
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 DRMBTZLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
DreamBeatzGenesis
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-12-10 */ // ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ // ░░░░░░░░░░░░░▒▓██████████████████████████▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ // ░░░░░░░░░░░░▓█▓░░░░░░░░░░░░░░░░░░░░░░░░░░▓█▒░░░░░░▓▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ // ░░░░░░░░░░░▒██░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░▒██▓░░░░▒█████▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓███▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ // ░░░░░▒░░░░░▓█▒░░███████▓▒▒▒▒▒▒▒▓███████░░▒███▓░▒▓██████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒▓▓▓▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ // ░░░░░▒▒▒▒▒▓█▓░░▒███████░░░░░░░░▒███████░░▒████▓▓▓███████▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓██▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░░░ // ░░░░▒▒▒▒▒▒██░░░███████▒░░░░░░░░▒███████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒▓█▓░░░░░░░░ // ░░░░▒▒▒▒▒▓█▓░░▓███████░░░░░░░░░███████▒░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░▒░▒▒░▒▒░▒▒▒▒▒▒▒▒▒▒▒▒▒░▒░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░░▓█▓░░░░░░░ // ░░░░░▒▒▒░██░░░███████▒░░░░░░░░▒███████░█▓░█████▓▓▓▓▓▓▓▓▓▓▓▓░▒▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▓▓▓▒░▒▓░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓████████░▒▒▒▓███▓▒▒███████▓▓▓███████░░░████░░░░░░ // ░░░░░░░░▒█▓░░▓███████░░░░░░░░░███████▒▒███████░░░░░░░░░░░░░░▓▓▓▓▓▓▓░░░░░░░░░▒▓▓▓▓▒▓▒░░░░░░░░░░░░░░░░░███████▒░▓▒▓███▓░░░██████▓░░▒██████▓░░▓████▒░░░░░ // ░░░░░░░░██░░░███████░░░░░░░░░▓██████▓░███████▒░░▓███████▒░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▓▓▓▓▒░████████████████████████░▒██████▒░░▓██████░░░███████░░░█████░░░░░░ // ░░░░█▒▒▓█▓░░▓███████░░░░░░░░▓█▓▓▒▓█▓░▒███████░░▒████████░░░▓▓▓▓▓▓▓░░░░░░░░░░░░░░░░░▒███████░░░░░░░░░███▓▓▓█▒░██████▓░░░██████▓░░▒██████▓░░▓████▒░░░░░░ // ░░▒▓██▓██░░░███████▓▓▓▓▓▓▓▓▓██▓░▒█▓░░███████▒░░▓████▓██▒░░▒▓▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░████████▓▓▓▓▓▓▓▓▓███▒░▓▓░▓██████▒░░▓██████░░░███▓░▒█░░▒█████░░░░░░░ // ░░░░▒░▒█▓░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░░▒▒▒▒▒▒▒░░▒████▓░██░░░▒▒░▒▒▒▒▒▒▒▒▒▒░▒▒░▒▒░▒▒░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░▒▒▒▒▒▒▒░░░▒▒▒▒▒▒▒░░░▒▒▒▒▒▒░░░▓████▓▒▒▒▒░░░ // ░░░░░░██░░░▓▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░░░░░░░░░░░░▒█████░░▒█▓▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒▒░░░░░▒▒░░░░░▓▓▓▓▓▓▒░░▒█████▒▒▒▒▒░░░ // ░░░░░▒█▓░░▒██████▓▒▒▒▒▒▒▓███████░░▒███████████████▒░░░░▓█████████████████████████████▓░░░░░░░░░░░░████████████░░░▓▓▒░░░░░░▒▓▒░▓▒▓████░░░▒▓███▓▒▒▒▒▒▒░░ // ░░░░░██░░░███████▒░░░░░░███████▒░░▓███████████████▓▓▓▓▓██████████████████████████████░░░▓▓▓▓▓▒▓░░░████████████▓░░░▓░░▓▓▒░░░▒░░█▓████▒░▒░░░░▓█▓▒▒░░░░░░ // ░░░░▒█▓░░▒██████▓░░░░░░▒███████░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░░░▓▓▓▓░▒▒░░░▒▒▒▒▒▒▒▒▒▒▒▒░░░▓█▒░░░░░▒▒░░▓█████▒▓▒███▒░░▓██░░░░░░░ // ░░░░██░░░███████▓▒▒▒▒▒▒███████▓▒░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░░░░▓▓▓▓▓▓▒░░░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░░███▓▓▓▒█▓▒██▓░░▓███░░░░░░ // ░░░▒█▓░░▓███████▓▓▓▓▓▓▓▓▓███████░░███████▓▓▓▓▓▓▓▓▓███████▓░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓████▒▓█░▓▓▓▓▓▓▓▓▒▓▓▓▓░░▒▒▒▒▒▒▒▒▒▒▒▓▓▓▓▓▓▓▓▓▓▒░░░░▓▓▓█▓▓▒▒▓▓░▒░░▒████▓░░░░░ // ░░░██░░░███████░░░░░░░░░▓██████▓░▓███████░░░░░░░░░███▒░▒█░░░░░░░░░░░░░░░░░░█████▓█▒░▓▓▓▓▓▓▓▒▓▓▓▓░░░░░░░░░░░░▒▓▓▓▓▓▓▓▓▒░░░░░░▓██▓▒▓░░░░░░░▒▓█████▒░░░░░ // ░░▓█▓░░▓██████▓░░░░░░░░▒███████░░████████████████████▓██▓░▓███████████████████████░░░░▓▓▓▓▓▓░░░░░░░░░░░░░▒▓▓▓▓▓▓▓▓▒░░░░░░▒▒▒▓▓▓▓▓▒░░░░░░░▓██████░░░░░░ // ░░██░░░▓░▒▓███░░░░░░░░░▓██████▓░▓███████░░░░░░░░░░░░░░░░░▒███████░░░░░░░░░███████▒░░░░█████▓░░░░░░░░░░▒▓▓▓▓▓▓▓▓▒░░░░░░░░░▒▒▒▒▒▒▒▒░░░░░▒▒░░████▓▒░░░░░░ // ░▓█▒░░▓█▒█████▒▒▒▒▒▒▒▒▓███████░░███████▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░███████▓▒▒▒▒▒▒▒▒▓███████░░░████████▓▓▓░░░░▒▓▓▓▓▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒░░▓█████▓░░░▒▒▒░░▒████▒██▓░░░░ // ░██░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░░▓▓▓▓▓▓▓▓▓▓▓░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░▓▓▓▓▓▓░░░░░░░▒▓█████▓█▓▓░░░░ // ░▒█▓▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒▓▓█████████░░░░░░░░ // ░░▒█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▓░░░░░░░░░ // ░░░▒█████████████████████████████████████████████████████▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒▒▓▓▓▓▓▓▓▓▓▓▓▓█████████████████████████████████████████████████▓▒░░░░░░░░░░░ // ░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░░░░░░░░░░░ // ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ // SPDX-License-Identifier: MIT pragma solidity 0.8.7; library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } interface IOperatorFilterRegistry { function isOperatorAllowed(address registrant, address operator) external view returns (bool); function register(address registrant) external; function registerAndSubscribe(address registrant, address subscription) external; function registerAndCopyEntries(address registrant, address registrantToCopy) external; function unregister(address addr) external; function updateOperator(address registrant, address operator, bool filtered) external; function updateOperators(address registrant, address[] calldata operators, bool filtered) external; function updateCodeHash(address registrant, bytes32 codehash, bool filtered) external; function updateCodeHashes(address registrant, bytes32[] calldata codeHashes, bool filtered) external; function subscribe(address registrant, address registrantToSubscribe) external; function unsubscribe(address registrant, bool copyExistingEntries) external; function subscriptionOf(address addr) external returns (address registrant); function subscribers(address registrant) external returns (address[] memory); function subscriberAt(address registrant, uint256 index) external returns (address); function copyEntriesOf(address registrant, address registrantToCopy) external; function isOperatorFiltered(address registrant, address operator) external returns (bool); function isCodeHashOfFiltered(address registrant, address operatorWithCode) external returns (bool); function isCodeHashFiltered(address registrant, bytes32 codeHash) external returns (bool); function filteredOperators(address addr) external returns (address[] memory); function filteredCodeHashes(address addr) external returns (bytes32[] memory); function filteredOperatorAt(address registrant, uint256 index) external returns (address); function filteredCodeHashAt(address registrant, uint256 index) external returns (bytes32); function isRegistered(address addr) external returns (bool); function codeHashOf(address addr) external returns (bytes32); } abstract contract OperatorFilterer { error OperatorNotAllowed(address operator); IOperatorFilterRegistry public constant OPERATOR_FILTER_REGISTRY = IOperatorFilterRegistry(0x000000000000AAeB6D7670E522A718067333cd4E); constructor(address subscriptionOrRegistrantToCopy, bool subscribe) { // If an inheriting token contract is deployed to a network without the registry deployed, the modifier // will not revert, but the contract will need to be registered with the registry once it is deployed in // order for the modifier to filter addresses. if (address(OPERATOR_FILTER_REGISTRY).code.length > 0) { if (subscribe) { OPERATOR_FILTER_REGISTRY.registerAndSubscribe(address(this), subscriptionOrRegistrantToCopy); } else { if (subscriptionOrRegistrantToCopy != address(0)) { OPERATOR_FILTER_REGISTRY.registerAndCopyEntries(address(this), subscriptionOrRegistrantToCopy); } else { OPERATOR_FILTER_REGISTRY.register(address(this)); } } } } modifier onlyAllowedOperator(address from) virtual { // Allow spending tokens from addresses with balance // Note that this still allows listings and marketplaces with escrow to transfer tokens if transferred // from an EOA. if (from != msg.sender) { _checkFilterOperator(msg.sender); } _; } modifier onlyAllowedOperatorApproval(address operator) virtual { _checkFilterOperator(operator); _; } function _checkFilterOperator(address operator) internal view virtual { // Check registry code length to facilitate testing in environments without a deployed registry. if (address(OPERATOR_FILTER_REGISTRY).code.length > 0) { if (!OPERATOR_FILTER_REGISTRY.isOperatorAllowed(address(this), operator)) { revert OperatorNotAllowed(operator); } } } } abstract contract DefaultOperatorFilterer is OperatorFilterer { address constant DEFAULT_SUBSCRIPTION = address(0x3cc6CddA760b79bAfa08dF41ECFA224f810dCeB6); constructor() OperatorFilterer(DEFAULT_SUBSCRIPTION, true) {} } 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 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); } 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); } error ApprovalCallerNotOwnerNorApproved(); error ApprovalQueryForNonexistentToken(); error ApproveToCaller(); error ApprovalToCurrentOwner(); error BalanceQueryForZeroAddress(); error MintToZeroAddress(); error MintZeroQuantity(); error OwnerQueryForNonexistentToken(); error TransferCallerNotOwnerNorApproved(); error TransferFromIncorrectOwner(); error TransferToNonERC721ReceiverImplementer(); error TransferToZeroAddress(); error URIQueryForNonexistentToken(); /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..). * * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply. * * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256). */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable, Ownable { using Address for address; using Strings for uint256; // Compiler will pack this into a single 256bit word. struct TokenOwnership { // The address of the owner. address addr; // Keeps track of the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; } // Compiler will pack this into a single 256bit word. struct AddressData { // Realistically, 2**64-1 is more than enough. uint64 balance; // Keeps track of mint count with minimal overhead for tokenomics. uint64 numberMinted; // Keeps track of burn count with minimal overhead for tokenomics. uint64 numberBurned; // For miscellaneous variable(s) pertaining to the address // (e.g. number of whitelist mint slots used). // If there are multiple variables, please pack them into a uint64. uint64 aux; } // The tokenId of the next token to be minted. uint256 internal _currentIndex; // The number of tokens burned. uint256 internal _burnCounter; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See _ownershipOf implementation for details. mapping(uint256 => TokenOwnership) internal _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId(); } /** * To change the starting tokenId, please override this function. */ function _startTokenId() internal view virtual returns (uint256) { return 0; } /** * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens. */ 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"); } /** * Returns the total amount of tokens minted in the contract. */ function _totalMinted() internal view returns (uint256) { // Counter underflow is impossible as _currentIndex does not decrement, // and it is initialized to _startTokenId() unchecked { return _currentIndex - _startTokenId(); } } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return uint256(_addressData[owner].balance); } /** * Returns the number of tokens minted by `owner`. */ function _numberMinted(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberMinted); } /** * Returns the number of tokens burned by or on behalf of `owner`. */ function _numberBurned(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberBurned); } /** * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used). */ function _getAux(address owner) internal view returns (uint64) { return _addressData[owner].aux; } /** * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used). * If there are multiple variables, please pack them into a uint64. */ function _setAux(address owner, uint64 aux) internal { _addressData[owner].aux = aux; } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr && curr < _currentIndex) { TokenOwnership memory ownership = _ownerships[curr]; if (!ownership.burned) { if (ownership.addr != address(0)) { return ownership; } // Invariant: // There will always be an ownership that has an address and is not burned // before an ownership that does not have an address and is not burned. // Hence, curr will not underflow. while (true) { curr--; ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } } } revert OwnerQueryForNonexistentToken(); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return _ownershipOf(tokenId).addr; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ''; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ''; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721A.ownerOf(tokenId); if (to == owner) revert ApprovalToCurrentOwner(); if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) { revert ApprovalCallerNotOwnerNorApproved(); } _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { if (operator == _msgSender()) revert ApproveToCaller(); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ''); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { _transfer(from, to, tokenId); if (to.isContract() && !_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), */ function _exists(uint256 tokenId) internal view returns (bool) { return _startTokenId() <= tokenId && tokenId < _currentIndex && !_ownerships[tokenId].burned; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { _mint(to, quantity, _data, true); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint( address to, uint256 quantity, bytes memory _data, bool safe ) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { _addressData[to].balance += uint64(quantity); _addressData[to].numberMinted += uint64(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; if (safe && to.isContract()) { do { emit Transfer(address(0), to, updatedIndex); if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } while (updatedIndex != end); // Reentrancy protection if (_currentIndex != startTokenId) revert(); } else { do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex != end); } _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) private { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); if (prevOwnership.addr != from) revert TransferFromIncorrectOwner(); bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = to; currSlot.startTimestamp = uint64(block.timestamp); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev This is equivalent to _burn(tokenId, false) */ function _burn(uint256 tokenId) internal virtual { _burn(tokenId, false); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId, bool approvalCheck) internal virtual { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); address from = prevOwnership.addr; if (approvalCheck) { bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); } _beforeTokenTransfers(from, address(0), tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { AddressData storage addressData = _addressData[from]; addressData.balance -= 1; addressData.numberBurned += 1; // Keep track of who burned the token, and the timestamp of burning. TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = from; currSlot.startTimestamp = uint64(block.timestamp); currSlot.burned = true; // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, address(0), tokenId); _afterTokenTransfers(from, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked { _burnCounter++; } } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { 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 TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * And also called before burning one token. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * And also called after one token has been burned. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been * transferred to `to`. * - When `from` is zero, `tokenId` has been minted for `to`. * - When `to` is zero, `tokenId` has been burned by `from`. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } contract DreamBeatzGenesis is Ownable, ERC721A, ReentrancyGuard, DefaultOperatorFilterer { using Strings for uint256; using SafeMath for uint256; uint256 public collectionSize = 5555; mapping(uint => uint) public level; string public uri = "https://bafkreic6isl34cafxhs64xy2owxujb5acnfmyt6uctdl7oaqwaj67qknqe.ipfs.nftstorage.link"; function setURI(string memory u) public onlyOwner{ uri = u; } address public beatzAddress; function setBeatzAddress(address a) public onlyOwner{ beatzAddress = a; } address public beatz_vault; function setBeatzVault(address a) public onlyOwner{ beatz_vault = a; } mapping(string => uint) public swapPrice; function set_swapPrice(string memory category, uint price_) public onlyOwner { swapPrice[category] = price_; } bool public reveal = false; function setReveal(bool set) public onlyOwner{ reveal = set; } uint public status = 0; //0-stop 1-OG 2-WL 3-PUBLIC function switch_status(uint Status) public onlyOwner { status = Status; } bool public status_trait_swap = false; function switch_status_trait_swap(bool Status) public onlyOwner { status_trait_swap = Status; } uint public mint_perAdd = 3; function set_mint_perAdd(uint new_) public onlyOwner { mint_perAdd = new_; } uint public price = 0.025 ether; function set_price(uint price_) public onlyOwner { price = price_; } bytes32 public merkleRoot_OG = 0x2838ffdbdd557425fbe655128f337c4f2016bb8fdfb0432d857c05636f5384a8; function setMerkleRoot_OG(bytes32 m) public onlyOwner{ merkleRoot_OG = m; } bytes32 public merkleRoot_WL = 0x31e9e13f3af9b48fa940d207613d47f382f438a20a3b82de377debb300bb9743; function setMerkleRoot_WL(bytes32 m) public onlyOwner{ merkleRoot_WL = m; } uint256 public reserve = 55; function setReserve(uint256 number) public onlyOwner { reserve = number; } /////////////////////////////////////////////////////////////////////////// constructor() ERC721A("DreamBeatz! Genesis", "DRMBTZ") { swapPrice["Background"] = 150 ether; swapPrice["Accessory 1"] = 200 ether; swapPrice["Accessory 2"] = 200 ether; swapPrice["Accessory 3"] = 200 ether; swapPrice["Accessory 4"] = 200 ether; swapPrice["Accessory 5"] = 200 ether; swapPrice["Body Trait"] = 200 ether; swapPrice["Clothes"] = 500 ether; swapPrice["Eyes"] = 300 ether; swapPrice["Hairstyle"] = 400 ether; swapPrice["Instrument Design"] = 500 ether; swapPrice["Mouth"] = 300 ether; } function giveaway(address recipient, uint256 quantity) public onlyOwner { require(totalSupply() + quantity <= collectionSize, "Giveaway exceeds current batch!!!"); require(quantity <= reserve, "No more reserved remaining!!"); _safeMint(recipient, quantity); reserve -= quantity; } function mint_list(uint256 quantity, bytes32[] calldata merkleproof) public payable { bytes32 leaf = keccak256(abi.encodePacked(msg.sender)); if(status == 1) require(MerkleProof.verify( merkleproof, merkleRoot_OG, leaf),"Not whitelisted"); else if(status == 2) require(MerkleProof.verify( merkleproof, merkleRoot_WL, leaf),"Not whitelisted"); require(numberMinted(msg.sender).add(quantity) <= mint_perAdd && quantity > 0, "Invalid mint quantity!!"); require(msg.value >= quantity.mul(price), "Insufficient eth sent for mint!!"); require(totalSupply().add(quantity) + reserve <= collectionSize, "Mint exceeds Collection size!!"); _safeMint(msg.sender, quantity); } function mint(uint256 quantity) public payable { require(status == 3, "Minting not active!!"); require(numberMinted(msg.sender).add(quantity) <= mint_perAdd && quantity > 0, "Invalid mint quantity!!"); require(msg.value >= quantity.mul(price), "Insufficient eth sent for mint!!"); require(totalSupply().add(quantity) + reserve <= collectionSize, "Mint exceeds Collection size!!"); _safeMint(msg.sender, quantity); } function swapTrait(uint id, string memory category) public { require(status_trait_swap ,"Trait Swap not Active!"); require(_exists(id),"Invalid Token id!"); require(ownerOf(id) == msg.sender, "Caller is not id owner!"); require(IERC20(beatzAddress).balanceOf(msg.sender) >= swapPrice[category], "Insufficient balance to update trait!!"); IERC20(beatzAddress).transferFrom(msg.sender, beatz_vault, swapPrice[category]); level[id] = level[id] + 1; } /////////////////////////////////////////////////////////////////////////// function numberMinted(address owner) public view returns (uint256) { return _numberMinted(owner); } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId),"ERC721Metadata: URI query for nonexistent token!"); if(reveal) return bytes(baseURI()).length > 0 ? string(abi.encodePacked(baseURI(), tokenId.toString())) : ""; else return bytes(baseURI()).length > 0 ? baseURI() : ""; } function baseURI() public view returns (string memory) { return uri; } function _startTokenId() pure internal override returns (uint256) { return 1; } function ownerTokens(address a) public view returns (uint[] memory){ uint b = balanceOf(a); uint[] memory t= new uint[](b); for(uint i=0; i<b; i++) t[i] = tokenOfOwnerByIndex(a,i); return t; } function setApprovalForAll(address operator, bool approved) public override onlyAllowedOperatorApproval(operator) { super.setApprovalForAll(operator, approved); } function approve(address operator, uint256 tokenId) public override onlyAllowedOperatorApproval(operator) { super.approve(operator, tokenId); } function transferFrom(address from, address to, uint256 tokenId) public override onlyAllowedOperator(from) { super.transferFrom(from, to, tokenId); } function safeTransferFrom(address from, address to, uint256 tokenId) public override onlyAllowedOperator(from) { super.safeTransferFrom(from, to, tokenId); } function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public override onlyAllowedOperator(from){ super.safeTransferFrom(from, to, tokenId, data); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"OperatorNotAllowed","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"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":"OPERATOR_FILTER_REGISTRY","outputs":[{"internalType":"contract IOperatorFilterRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","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":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"beatzAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"beatz_vault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"collectionSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","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":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"level","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot_OG","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot_WL","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":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes32[]","name":"merkleproof","type":"bytes32[]"}],"name":"mint_list","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mint_perAdd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[{"internalType":"address","name":"a","type":"address"}],"name":"ownerTokens","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserve","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reveal","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"address","name":"a","type":"address"}],"name":"setBeatzAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"}],"name":"setBeatzVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"m","type":"bytes32"}],"name":"setMerkleRoot_OG","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"m","type":"bytes32"}],"name":"setMerkleRoot_WL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"number","type":"uint256"}],"name":"setReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"set","type":"bool"}],"name":"setReveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"u","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"new_","type":"uint256"}],"name":"set_mint_perAdd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price_","type":"uint256"}],"name":"set_price","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"category","type":"string"},{"internalType":"uint256","name":"price_","type":"uint256"}],"name":"set_swapPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"status","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"status_trait_swap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"swapPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"category","type":"string"}],"name":"swapTrait","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"Status","type":"uint256"}],"name":"switch_status","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"Status","type":"bool"}],"name":"switch_status_trait_swap","outputs":[],"stateMutability":"nonpayable","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":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526115b3600a55604051806080016040528060588152602001620064f060589139600c90805190602001906200003b929190620006bf565b506000601060006101000a81548160ff02191690831515021790555060006011556000601260006101000a81548160ff02191690831515021790555060036013556658d15e176280006014557f2838ffdbdd557425fbe655128f337c4f2016bb8fdfb0432d857c05636f5384a860001b6015557f31e9e13f3af9b48fa940d207613d47f382f438a20a3b82de377debb300bb974360001b6016556037601755348015620000e757600080fd5b50733cc6cdda760b79bafa08df41ecfa224f810dceb660016040518060400160405280601381526020017f447265616d426561747a212047656e65736973000000000000000000000000008152506040518060400160405280600681526020017f44524d42545a00000000000000000000000000000000000000000000000000008152506200018b6200017f620005ea60201b60201c565b620005f260201b60201c565b8160039080519060200190620001a3929190620006bf565b508060049080519060200190620001bc929190620006bf565b50620001cd620006b660201b60201c565b6001819055505050600160098190555060006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115620003d257801562000298576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16637d3e3dbe30846040518363ffffffff1660e01b81526004016200025e92919062000a85565b600060405180830381600087803b1580156200027957600080fd5b505af11580156200028e573d6000803e3d6000fd5b50505050620003d1565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000352576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663a0af290330846040518363ffffffff1660e01b81526004016200031892919062000a85565b600060405180830381600087803b1580156200033357600080fd5b505af115801562000348573d6000803e3d6000fd5b50505050620003d0565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16634420e486306040518263ffffffff1660e01b81526004016200039b919062000a68565b600060405180830381600087803b158015620003b657600080fd5b505af1158015620003cb573d6000803e3d6000fd5b505050505b5b5b5050680821ab0d4414980000600f604051620003ee9062000a0c565b908152602001604051809103902081905550680ad78ebc5ac6200000600f6040516200041a9062000a3a565b908152602001604051809103902081905550680ad78ebc5ac6200000600f604051620004469062000982565b908152602001604051809103902081905550680ad78ebc5ac6200000600f6040516200047290620009b0565b908152602001604051809103902081905550680ad78ebc5ac6200000600f6040516200049e9062000a23565b908152602001604051809103902081905550680ad78ebc5ac6200000600f604051620004ca9062000954565b908152602001604051809103902081905550680ad78ebc5ac6200000600f604051620004f6906200096b565b908152602001604051809103902081905550681b1ae4d6e2ef500000600f6040516200052290620009de565b908152602001604051809103902081905550681043561a8829300000600f6040516200054e90620009c7565b9081526020016040518091039020819055506815af1d78b58c400000600f6040516200057a9062000999565b908152602001604051809103902081905550681b1ae4d6e2ef500000600f604051620005a690620009f5565b908152602001604051809103902081905550681043561a8829300000600f604051620005d29062000a51565b90815260200160405180910390208190555062000d42565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006001905090565b828054620006cd9062000af1565b90600052602060002090601f016020900481019282620006f157600085556200073d565b82601f106200070c57805160ff19168380011785556200073d565b828001600101855582156200073d579182015b828111156200073c5782518255916020019190600101906200071f565b5b5090506200074c919062000750565b5090565b5b808211156200076b57600081600090555060010162000751565b5090565b6200077a8162000abd565b82525050565b60006200078f600b8362000ab2565b91506200079c8262000b56565b600b82019050919050565b6000620007b6600a8362000ab2565b9150620007c38262000b7f565b600a82019050919050565b6000620007dd600b8362000ab2565b9150620007ea8262000ba8565b600b82019050919050565b60006200080460098362000ab2565b9150620008118262000bd1565b600982019050919050565b60006200082b600b8362000ab2565b9150620008388262000bfa565b600b82019050919050565b60006200085260048362000ab2565b91506200085f8262000c23565b600482019050919050565b60006200087960078362000ab2565b9150620008868262000c4c565b600782019050919050565b6000620008a060118362000ab2565b9150620008ad8262000c75565b601182019050919050565b6000620008c7600a8362000ab2565b9150620008d48262000c9e565b600a82019050919050565b6000620008ee600b8362000ab2565b9150620008fb8262000cc7565b600b82019050919050565b600062000915600b8362000ab2565b9150620009228262000cf0565b600b82019050919050565b60006200093c60058362000ab2565b9150620009498262000d19565b600582019050919050565b6000620009618262000780565b9150819050919050565b60006200097882620007a7565b9150819050919050565b60006200098f82620007ce565b9150819050919050565b6000620009a682620007f5565b9150819050919050565b6000620009bd826200081c565b9150819050919050565b6000620009d48262000843565b9150819050919050565b6000620009eb826200086a565b9150819050919050565b600062000a028262000891565b9150819050919050565b600062000a1982620008b8565b9150819050919050565b600062000a3082620008df565b9150819050919050565b600062000a478262000906565b9150819050919050565b600062000a5e826200092d565b9150819050919050565b600060208201905062000a7f60008301846200076f565b92915050565b600060408201905062000a9c60008301856200076f565b62000aab60208301846200076f565b9392505050565b600081905092915050565b600062000aca8262000ad1565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000600282049050600182168062000b0a57607f821691505b6020821081141562000b215762000b2062000b27565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4163636573736f72792035000000000000000000000000000000000000000000600082015250565b7f426f647920547261697400000000000000000000000000000000000000000000600082015250565b7f4163636573736f72792032000000000000000000000000000000000000000000600082015250565b7f486169727374796c650000000000000000000000000000000000000000000000600082015250565b7f4163636573736f72792033000000000000000000000000000000000000000000600082015250565b7f4579657300000000000000000000000000000000000000000000000000000000600082015250565b7f436c6f7468657300000000000000000000000000000000000000000000000000600082015250565b7f496e737472756d656e742044657369676e000000000000000000000000000000600082015250565b7f4261636b67726f756e6400000000000000000000000000000000000000000000600082015250565b7f4163636573736f72792034000000000000000000000000000000000000000000600082015250565b7f4163636573736f72792031000000000000000000000000000000000000000000600082015250565b7f4d6f757468000000000000000000000000000000000000000000000000000000600082015250565b61579e8062000d526000396000f3fe60806040526004361061031a5760003560e01c80636c16611e116101ab578063b88d4fde116100f7578063cd3293de11610095578063e985e9c51161006f578063e985e9c514610bca578063eac989f814610c07578063ec42b66814610c32578063f2fde38b14610c5b5761031a565b8063cd3293de14610b37578063d6f67b2514610b62578063dc33e68114610b8d5761031a565b8063bf625cce116100d1578063bf625cce14610a78578063c7c9cda714610aa1578063c87b56dd14610abd578063cd30d63c14610afa5761031a565b8063b88d4fde146109e9578063bba7723e14610a12578063bc53a8d014610a4f5761031a565b806395d89b4111610164578063a0712d681161013e578063a0712d6814610950578063a22cb4651461096c578063a475b5dd14610995578063b0127814146109c05761031a565b806395d89b41146108d15780639da295dc146108fc578063a035b1fe146109255761031a565b80636c16611e146107d35780636fed2493146107fc57806370a0823114610827578063715018a61461086457806371b3056c1461087b5780638da5cb5b146108a65761031a565b806329818d401161026a57806341f434341161022357806345c0f533116101fd57806345c0f533146107035780634f6ccce71461072e5780636352211e1461076b5780636c0360eb146107a85761031a565b806341f43434146106865780634256dbe3146106b157806342842e0e146106da5761031a565b806329818d40146105785780632a3f300c146105a15780632f745c59146105ca5780633311d20714610607578063370e86d0146106325780633d2a6bd41461065d5761031a565b8063081812fc116102d757806318779fc9116102b157806318779fc9146104d0578063200d2ed2146104fb57806323b872dd1461052657806328bf794d1461054f5761031a565b8063081812fc1461043f578063095ea7b31461047c57806318160ddd146104a55761031a565b806301ffc9a71461031f57806302377e1f1461035c57806302fe530514610385578063050225ea146103ae57806305c58df2146103d757806306fdde0314610414575b600080fd5b34801561032b57600080fd5b506103466004803603810190610341919061441d565b610c84565b6040516103539190614b4e565b60405180910390f35b34801561036857600080fd5b50610383600480360381019061037e919061451c565b610d66565b005b34801561039157600080fd5b506103ac60048036038101906103a79190614477565b610dec565b005b3480156103ba57600080fd5b506103d560048036038101906103d09190614356565b610e82565b005b3480156103e357600080fd5b506103fe60048036038101906103f9919061451c565b610fc1565b60405161040b9190614de1565b60405180910390f35b34801561042057600080fd5b50610429610fd9565b6040516104369190614b9f565b60405180910390f35b34801561044b57600080fd5b506104666004803603810190610461919061451c565b61106b565b6040516104739190614a65565b60405180910390f35b34801561048857600080fd5b506104a3600480360381019061049e9190614356565b6110e7565b005b3480156104b157600080fd5b506104ba611100565b6040516104c79190614de1565b60405180910390f35b3480156104dc57600080fd5b506104e561110a565b6040516104f29190614b4e565b60405180910390f35b34801561050757600080fd5b5061051061111d565b60405161051d9190614de1565b60405180910390f35b34801561053257600080fd5b5061054d60048036038101906105489190614240565b611123565b005b34801561055b57600080fd5b506105766004803603810190610571919061451c565b611172565b005b34801561058457600080fd5b5061059f600480360381019061059a91906141d3565b6111f8565b005b3480156105ad57600080fd5b506105c860048036038101906105c39190614396565b6112b8565b005b3480156105d657600080fd5b506105f160048036038101906105ec9190614356565b611351565b6040516105fe9190614de1565b60405180910390f35b34801561061357600080fd5b5061061c61156a565b6040516106299190614a65565b60405180910390f35b34801561063e57600080fd5b50610647611590565b6040516106549190614b69565b60405180910390f35b34801561066957600080fd5b50610684600480360381019061067f91906141d3565b611596565b005b34801561069257600080fd5b5061069b611656565b6040516106a89190614b84565b60405180910390f35b3480156106bd57600080fd5b506106d860048036038101906106d3919061451c565b611668565b005b3480156106e657600080fd5b5061070160048036038101906106fc9190614240565b6116ee565b005b34801561070f57600080fd5b5061071861173d565b6040516107259190614de1565b60405180910390f35b34801561073a57600080fd5b506107556004803603810190610750919061451c565b611743565b6040516107629190614de1565b60405180910390f35b34801561077757600080fd5b50610792600480360381019061078d919061451c565b611796565b60405161079f9190614a65565b60405180910390f35b3480156107b457600080fd5b506107bd6117ac565b6040516107ca9190614b9f565b60405180910390f35b3480156107df57600080fd5b506107fa60048036038101906107f591906143f0565b61183e565b005b34801561080857600080fd5b506108116118c4565b60405161081e9190614a65565b60405180910390f35b34801561083357600080fd5b5061084e600480360381019061084991906141d3565b6118ea565b60405161085b9190614de1565b60405180910390f35b34801561087057600080fd5b506108796119ba565b005b34801561088757600080fd5b50610890611a42565b60405161089d9190614de1565b60405180910390f35b3480156108b257600080fd5b506108bb611a48565b6040516108c89190614a65565b60405180910390f35b3480156108dd57600080fd5b506108e6611a71565b6040516108f39190614b9f565b60405180910390f35b34801561090857600080fd5b50610923600480360381019061091e91906144c0565b611b03565b005b34801561093157600080fd5b5061093a611ba6565b6040516109479190614de1565b60405180910390f35b61096a6004803603810190610965919061451c565b611bac565b005b34801561097857600080fd5b50610993600480360381019061098e9190614316565b611d2b565b005b3480156109a157600080fd5b506109aa611d44565b6040516109b79190614b4e565b60405180910390f35b3480156109cc57600080fd5b506109e760048036038101906109e2919061451c565b611d57565b005b3480156109f557600080fd5b50610a106004803603810190610a0b9190614293565b611ddd565b005b348015610a1e57600080fd5b50610a396004803603810190610a3491906141d3565b611e2e565b604051610a469190614b2c565b60405180910390f35b348015610a5b57600080fd5b50610a766004803603810190610a7191906145d6565b611edc565b005b348015610a8457600080fd5b50610a9f6004803603810190610a9a9190614396565b612221565b005b610abb6004803603810190610ab69190614576565b6122ba565b005b348015610ac957600080fd5b50610ae46004803603810190610adf919061451c565b612559565b604051610af19190614b9f565b60405180910390f35b348015610b0657600080fd5b50610b216004803603810190610b1c9190614477565b61264c565b604051610b2e9190614de1565b60405180910390f35b348015610b4357600080fd5b50610b4c61267a565b604051610b599190614de1565b60405180910390f35b348015610b6e57600080fd5b50610b77612680565b604051610b849190614b69565b60405180910390f35b348015610b9957600080fd5b50610bb46004803603810190610baf91906141d3565b612686565b604051610bc19190614de1565b60405180910390f35b348015610bd657600080fd5b50610bf16004803603810190610bec9190614200565b612698565b604051610bfe9190614b4e565b60405180910390f35b348015610c1357600080fd5b50610c1c61272c565b604051610c299190614b9f565b60405180910390f35b348015610c3e57600080fd5b50610c596004803603810190610c5491906143f0565b6127ba565b005b348015610c6757600080fd5b50610c826004803603810190610c7d91906141d3565b612840565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610d4f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610d5f5750610d5e82612938565b5b9050919050565b610d6e6129a2565b73ffffffffffffffffffffffffffffffffffffffff16610d8c611a48565b73ffffffffffffffffffffffffffffffffffffffff1614610de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd990614d21565b60405180910390fd5b8060138190555050565b610df46129a2565b73ffffffffffffffffffffffffffffffffffffffff16610e12611a48565b73ffffffffffffffffffffffffffffffffffffffff1614610e68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5f90614d21565b60405180910390fd5b80600c9080519060200190610e7e929190613f0f565b5050565b610e8a6129a2565b73ffffffffffffffffffffffffffffffffffffffff16610ea8611a48565b73ffffffffffffffffffffffffffffffffffffffff1614610efe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef590614d21565b60405180910390fd5b600a5481610f0a611100565b610f149190614eff565b1115610f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4c90614c01565b60405180910390fd5b601754811115610f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9190614ce1565b60405180910390fd5b610fa482826129aa565b8060176000828254610fb69190614fe0565b925050819055505050565b600b6020528060005260406000206000915090505481565b606060038054610fe89061510a565b80601f01602080910402602001604051908101604052809291908181526020018280546110149061510a565b80156110615780601f1061103657610100808354040283529160200191611061565b820191906000526020600020905b81548152906001019060200180831161104457829003601f168201915b5050505050905090565b6000611076826129c8565b6110ac576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b816110f181612a16565b6110fb8383612b22565b505050565b6000600154905090565b601260009054906101000a900460ff1681565b60115481565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146111615761116033612a16565b5b61116c848484612c2d565b50505050565b61117a6129a2565b73ffffffffffffffffffffffffffffffffffffffff16611198611a48565b73ffffffffffffffffffffffffffffffffffffffff16146111ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e590614d21565b60405180910390fd5b8060148190555050565b6112006129a2565b73ffffffffffffffffffffffffffffffffffffffff1661121e611a48565b73ffffffffffffffffffffffffffffffffffffffff1614611274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126b90614d21565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6112c06129a2565b73ffffffffffffffffffffffffffffffffffffffff166112de611a48565b73ffffffffffffffffffffffffffffffffffffffff1614611334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132b90614d21565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b600061135c836118ea565b821061139d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139490614bc1565b60405180910390fd5b60006113a7611100565b905060008060005b83811015611528576000600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146114bc57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156115145786841415611505578195505050505050611564565b83806115109061516d565b9450505b5080806115209061516d565b9150506113af565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155b90614da1565b60405180910390fd5b92915050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b61159e6129a2565b73ffffffffffffffffffffffffffffffffffffffff166115bc611a48565b73ffffffffffffffffffffffffffffffffffffffff1614611612576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160990614d21565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6daaeb6d7670e522a718067333cd4e81565b6116706129a2565b73ffffffffffffffffffffffffffffffffffffffff1661168e611a48565b73ffffffffffffffffffffffffffffffffffffffff16146116e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116db90614d21565b60405180910390fd5b8060178190555050565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461172c5761172b33612a16565b5b611737848484612c3d565b50505050565b600a5481565b600061174d611100565b821061178e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178590614ca1565b60405180910390fd5b819050919050565b60006117a182612c5d565b600001519050919050565b6060600c80546117bb9061510a565b80601f01602080910402602001604051908101604052809291908181526020018280546117e79061510a565b80156118345780601f1061180957610100808354040283529160200191611834565b820191906000526020600020905b81548152906001019060200180831161181757829003601f168201915b5050505050905090565b6118466129a2565b73ffffffffffffffffffffffffffffffffffffffff16611864611a48565b73ffffffffffffffffffffffffffffffffffffffff16146118ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b190614d21565b60405180910390fd5b8060158190555050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611952576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6119c26129a2565b73ffffffffffffffffffffffffffffffffffffffff166119e0611a48565b73ffffffffffffffffffffffffffffffffffffffff1614611a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2d90614d21565b60405180910390fd5b611a406000612eec565b565b60135481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611a809061510a565b80601f0160208091040260200160405190810160405280929190818152602001828054611aac9061510a565b8015611af95780601f10611ace57610100808354040283529160200191611af9565b820191906000526020600020905b815481529060010190602001808311611adc57829003601f168201915b5050505050905090565b611b0b6129a2565b73ffffffffffffffffffffffffffffffffffffffff16611b29611a48565b73ffffffffffffffffffffffffffffffffffffffff1614611b7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7690614d21565b60405180910390fd5b80600f83604051611b909190614a2a565b9081526020016040518091039020819055505050565b60145481565b600360115414611bf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be890614dc1565b60405180910390fd5b601354611c0f82611c0133612686565b612fb090919063ffffffff16565b11158015611c1d5750600081115b611c5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5390614c21565b60405180910390fd5b611c7160145482612fc690919063ffffffff16565b341015611cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611caa90614c81565b60405180910390fd5b600a54601754611cd383611cc5611100565b612fb090919063ffffffff16565b611cdd9190614eff565b1115611d1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1590614cc1565b60405180910390fd5b611d2833826129aa565b50565b81611d3581612a16565b611d3f8383612fdc565b505050565b601060009054906101000a900460ff1681565b611d5f6129a2565b73ffffffffffffffffffffffffffffffffffffffff16611d7d611a48565b73ffffffffffffffffffffffffffffffffffffffff1614611dd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dca90614d21565b60405180910390fd5b8060118190555050565b833373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611e1b57611e1a33612a16565b5b611e2785858585613154565b5050505050565b60606000611e3b836118ea565b905060008167ffffffffffffffff811115611e5957611e586152c7565b5b604051908082528060200260200182016040528015611e875781602001602082028036833780820191505090505b50905060005b82811015611ed157611e9f8582611351565b828281518110611eb257611eb1615298565b5b6020026020010181815250508080611ec99061516d565b915050611e8d565b508092505050919050565b601260009054906101000a900460ff16611f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2290614d61565b60405180910390fd5b611f34826129c8565b611f73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6a90614d41565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16611f9383611796565b73ffffffffffffffffffffffffffffffffffffffff1614611fe9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe090614c61565b60405180910390fd5b600f81604051611ff99190614a2a565b908152602001604051809103902054600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016120639190614a65565b60206040518083038186803b15801561207b57600080fd5b505afa15801561208f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b39190614549565b10156120f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120eb90614d81565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600f856040516121669190614a2a565b9081526020016040518091039020546040518463ffffffff1660e01b815260040161219393929190614aa9565b602060405180830381600087803b1580156121ad57600080fd5b505af11580156121c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e591906143c3565b506001600b6000848152602001908152602001600020546122069190614eff565b600b6000848152602001908152602001600020819055505050565b6122296129a2565b73ffffffffffffffffffffffffffffffffffffffff16612247611a48565b73ffffffffffffffffffffffffffffffffffffffff161461229d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229490614d21565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b6000336040516020016122cd9190614a0f565b604051602081830303815290604052805190602001209050600160115414156123825761233e838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050601554836131d0565b61237d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237490614d01565b60405180910390fd5b61241c565b6002601154141561241b576123db838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050601654836131d0565b61241a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241190614d01565b60405180910390fd5b5b5b60135461243a8561242c33612686565b612fb090919063ffffffff16565b111580156124485750600084115b612487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247e90614c21565b60405180910390fd5b61249c60145485612fc690919063ffffffff16565b3410156124de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d590614c81565b60405180910390fd5b600a546017546124fe866124f0611100565b612fb090919063ffffffff16565b6125089190614eff565b1115612549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254090614cc1565b60405180910390fd5b61255333856129aa565b50505050565b6060612564826129c8565b6125a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259a90614c41565b60405180910390fd5b601060009054906101000a900460ff16156126165760006125c26117ac565b51116125dd576040518060200160405280600081525061260f565b6125e56117ac565b6125ee836131e7565b6040516020016125ff929190614a41565b6040516020818303038152906040525b9050612647565b60006126206117ac565b511161263b5760405180602001604052806000815250612644565b6126436117ac565b5b90505b919050565b600f818051602081018201805184825260208301602085012081835280955050505050506000915090505481565b60175481565b60155481565b600061269182613348565b9050919050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600c80546127399061510a565b80601f01602080910402602001604051908101604052809291908181526020018280546127659061510a565b80156127b25780601f10612787576101008083540402835291602001916127b2565b820191906000526020600020905b81548152906001019060200180831161279557829003601f168201915b505050505081565b6127c26129a2565b73ffffffffffffffffffffffffffffffffffffffff166127e0611a48565b73ffffffffffffffffffffffffffffffffffffffff1614612836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282d90614d21565b60405180910390fd5b8060168190555050565b6128486129a2565b73ffffffffffffffffffffffffffffffffffffffff16612866611a48565b73ffffffffffffffffffffffffffffffffffffffff16146128bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b390614d21565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561292c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292390614be1565b60405180910390fd5b61293581612eec565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6129c48282604051806020016040528060008152506133b2565b5050565b6000816129d36133c4565b111580156129e2575060015482105b8015612a0f575060056000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115612b1f576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b8152600401612a8d929190614a80565b60206040518083038186803b158015612aa557600080fd5b505afa158015612ab9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612add91906143c3565b612b1e57806040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401612b159190614a65565b60405180910390fd5b5b50565b6000612b2d82611796565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b95576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16612bb46129a2565b73ffffffffffffffffffffffffffffffffffffffff1614158015612be65750612be481612bdf6129a2565b612698565b155b15612c1d576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c288383836133cd565b505050565b612c3883838361347f565b505050565b612c5883838360405180602001604052806000815250611ddd565b505050565b612c65613f95565b600082905080612c736133c4565b11158015612c82575060015481105b15612eb5576000600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151612eb357600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612d97578092505050612ee7565b5b600115612eb257818060019003925050600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612ead578092505050612ee7565b612d98565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183612fbe9190614eff565b905092915050565b60008183612fd49190614f86565b905092915050565b612fe46129a2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613049576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600860006130566129a2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166131036129a2565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516131489190614b4e565b60405180910390a35050565b61315f84848461347f565b61317e8373ffffffffffffffffffffffffffffffffffffffff16613935565b8015613193575061319184848484613948565b155b156131ca576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6000826131dd8584613aa8565b1490509392505050565b6060600082141561322f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613343565b600082905060005b6000821461326157808061324a9061516d565b915050600a8261325a9190614f55565b9150613237565b60008167ffffffffffffffff81111561327d5761327c6152c7565b5b6040519080825280601f01601f1916602001820160405280156132af5781602001600182028036833780820191505090505b5090505b6000851461333c576001826132c89190614fe0565b9150600a856132d791906151da565b60306132e39190614eff565b60f81b8183815181106132f9576132f8615298565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856133359190614f55565b94506132b3565b8093505050505b919050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6133bf8383836001613b1d565b505050565b60006001905090565b826007600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061348a82612c5d565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146134f5576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166135166129a2565b73ffffffffffffffffffffffffffffffffffffffff16148061354557506135448561353f6129a2565b612698565b5b8061358a57506135536129a2565b73ffffffffffffffffffffffffffffffffffffffff166135728461106b565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806135c3576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561362a576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6136378585856001613eec565b613643600084876133cd565b6001600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600560008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600560008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156138c35760015482146138c257878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461392e8585856001613ef2565b5050505050565b600080823b905060008111915050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261396e6129a2565b8786866040518563ffffffff1660e01b81526004016139909493929190614ae0565b602060405180830381600087803b1580156139aa57600080fd5b505af19250505080156139db57506040513d601f19601f820116820180604052508101906139d8919061444a565b60015b613a55573d8060008114613a0b576040519150601f19603f3d011682016040523d82523d6000602084013e613a10565b606091505b50600081511415613a4d576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60008082905060005b8451811015613b12576000858281518110613acf57613ace615298565b5b60200260200101519050808311613af157613aea8382613ef8565b9250613afe565b613afb8184613ef8565b92505b508080613b0a9061516d565b915050613ab1565b508091505092915050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415613b8b576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415613bc6576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613bd36000868387613eec565b83600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846005600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426005600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008582019050838015613d9d5750613d9c8773ffffffffffffffffffffffffffffffffffffffff16613935565b5b15613e63575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613e126000888480600101955088613948565b613e48576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821415613da3578260015414613e5e57600080fd5b613ecf565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415613e64575b816001819055505050613ee56000868387613ef2565b5050505050565b50505050565b50505050565b600082600052816020526040600020905092915050565b828054613f1b9061510a565b90600052602060002090601f016020900481019282613f3d5760008555613f84565b82601f10613f5657805160ff1916838001178555613f84565b82800160010185558215613f84579182015b82811115613f83578251825591602001919060010190613f68565b5b509050613f919190613fd8565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115613ff1576000816000905550600101613fd9565b5090565b600061400861400384614e21565b614dfc565b90508281526020810184848401111561402457614023615305565b5b61402f8482856150c8565b509392505050565b600061404a61404584614e52565b614dfc565b90508281526020810184848401111561406657614065615305565b5b6140718482856150c8565b509392505050565b600081359050614088816156f5565b92915050565b60008083601f8401126140a4576140a36152fb565b5b8235905067ffffffffffffffff8111156140c1576140c06152f6565b5b6020830191508360208202830111156140dd576140dc615300565b5b9250929050565b6000813590506140f38161570c565b92915050565b6000815190506141088161570c565b92915050565b60008135905061411d81615723565b92915050565b6000813590506141328161573a565b92915050565b6000815190506141478161573a565b92915050565b600082601f830112614162576141616152fb565b5b8135614172848260208601613ff5565b91505092915050565b600082601f8301126141905761418f6152fb565b5b81356141a0848260208601614037565b91505092915050565b6000813590506141b881615751565b92915050565b6000815190506141cd81615751565b92915050565b6000602082840312156141e9576141e861530f565b5b60006141f784828501614079565b91505092915050565b600080604083850312156142175761421661530f565b5b600061422585828601614079565b925050602061423685828601614079565b9150509250929050565b6000806000606084860312156142595761425861530f565b5b600061426786828701614079565b935050602061427886828701614079565b9250506040614289868287016141a9565b9150509250925092565b600080600080608085870312156142ad576142ac61530f565b5b60006142bb87828801614079565b94505060206142cc87828801614079565b93505060406142dd878288016141a9565b925050606085013567ffffffffffffffff8111156142fe576142fd61530a565b5b61430a8782880161414d565b91505092959194509250565b6000806040838503121561432d5761432c61530f565b5b600061433b85828601614079565b925050602061434c858286016140e4565b9150509250929050565b6000806040838503121561436d5761436c61530f565b5b600061437b85828601614079565b925050602061438c858286016141a9565b9150509250929050565b6000602082840312156143ac576143ab61530f565b5b60006143ba848285016140e4565b91505092915050565b6000602082840312156143d9576143d861530f565b5b60006143e7848285016140f9565b91505092915050565b6000602082840312156144065761440561530f565b5b60006144148482850161410e565b91505092915050565b6000602082840312156144335761443261530f565b5b600061444184828501614123565b91505092915050565b6000602082840312156144605761445f61530f565b5b600061446e84828501614138565b91505092915050565b60006020828403121561448d5761448c61530f565b5b600082013567ffffffffffffffff8111156144ab576144aa61530a565b5b6144b78482850161417b565b91505092915050565b600080604083850312156144d7576144d661530f565b5b600083013567ffffffffffffffff8111156144f5576144f461530a565b5b6145018582860161417b565b9250506020614512858286016141a9565b9150509250929050565b6000602082840312156145325761453161530f565b5b6000614540848285016141a9565b91505092915050565b60006020828403121561455f5761455e61530f565b5b600061456d848285016141be565b91505092915050565b60008060006040848603121561458f5761458e61530f565b5b600061459d868287016141a9565b935050602084013567ffffffffffffffff8111156145be576145bd61530a565b5b6145ca8682870161408e565b92509250509250925092565b600080604083850312156145ed576145ec61530f565b5b60006145fb858286016141a9565b925050602083013567ffffffffffffffff81111561461c5761461b61530a565b5b6146288582860161417b565b9150509250929050565b600061463e83836149f1565b60208301905092915050565b61465381615014565b82525050565b61466a61466582615014565b6151b6565b82525050565b600061467b82614e93565b6146858185614ec1565b935061469083614e83565b8060005b838110156146c15781516146a88882614632565b97506146b383614eb4565b925050600181019050614694565b5085935050505092915050565b6146d781615026565b82525050565b6146e681615032565b82525050565b60006146f782614e9e565b6147018185614ed2565b93506147118185602086016150d7565b61471a81615314565b840191505092915050565b61472e81615092565b82525050565b600061473f82614ea9565b6147498185614ee3565b93506147598185602086016150d7565b61476281615314565b840191505092915050565b600061477882614ea9565b6147828185614ef4565b93506147928185602086016150d7565b80840191505092915050565b60006147ab602283614ee3565b91506147b682615332565b604082019050919050565b60006147ce602683614ee3565b91506147d982615381565b604082019050919050565b60006147f1602183614ee3565b91506147fc826153d0565b604082019050919050565b6000614814601783614ee3565b915061481f8261541f565b602082019050919050565b6000614837603083614ee3565b915061484282615448565b604082019050919050565b600061485a601783614ee3565b915061486582615497565b602082019050919050565b600061487d602083614ee3565b9150614888826154c0565b602082019050919050565b60006148a0602383614ee3565b91506148ab826154e9565b604082019050919050565b60006148c3601e83614ee3565b91506148ce82615538565b602082019050919050565b60006148e6601c83614ee3565b91506148f182615561565b602082019050919050565b6000614909600f83614ee3565b91506149148261558a565b602082019050919050565b600061492c602083614ee3565b9150614937826155b3565b602082019050919050565b600061494f601183614ee3565b915061495a826155dc565b602082019050919050565b6000614972601683614ee3565b915061497d82615605565b602082019050919050565b6000614995602683614ee3565b91506149a08261562e565b604082019050919050565b60006149b8602e83614ee3565b91506149c38261567d565b604082019050919050565b60006149db601483614ee3565b91506149e6826156cc565b602082019050919050565b6149fa81615088565b82525050565b614a0981615088565b82525050565b6000614a1b8284614659565b60148201915081905092915050565b6000614a36828461476d565b915081905092915050565b6000614a4d828561476d565b9150614a59828461476d565b91508190509392505050565b6000602082019050614a7a600083018461464a565b92915050565b6000604082019050614a95600083018561464a565b614aa2602083018461464a565b9392505050565b6000606082019050614abe600083018661464a565b614acb602083018561464a565b614ad86040830184614a00565b949350505050565b6000608082019050614af5600083018761464a565b614b02602083018661464a565b614b0f6040830185614a00565b8181036060830152614b2181846146ec565b905095945050505050565b60006020820190508181036000830152614b468184614670565b905092915050565b6000602082019050614b6360008301846146ce565b92915050565b6000602082019050614b7e60008301846146dd565b92915050565b6000602082019050614b996000830184614725565b92915050565b60006020820190508181036000830152614bb98184614734565b905092915050565b60006020820190508181036000830152614bda8161479e565b9050919050565b60006020820190508181036000830152614bfa816147c1565b9050919050565b60006020820190508181036000830152614c1a816147e4565b9050919050565b60006020820190508181036000830152614c3a81614807565b9050919050565b60006020820190508181036000830152614c5a8161482a565b9050919050565b60006020820190508181036000830152614c7a8161484d565b9050919050565b60006020820190508181036000830152614c9a81614870565b9050919050565b60006020820190508181036000830152614cba81614893565b9050919050565b60006020820190508181036000830152614cda816148b6565b9050919050565b60006020820190508181036000830152614cfa816148d9565b9050919050565b60006020820190508181036000830152614d1a816148fc565b9050919050565b60006020820190508181036000830152614d3a8161491f565b9050919050565b60006020820190508181036000830152614d5a81614942565b9050919050565b60006020820190508181036000830152614d7a81614965565b9050919050565b60006020820190508181036000830152614d9a81614988565b9050919050565b60006020820190508181036000830152614dba816149ab565b9050919050565b60006020820190508181036000830152614dda816149ce565b9050919050565b6000602082019050614df66000830184614a00565b92915050565b6000614e06614e17565b9050614e12828261513c565b919050565b6000604051905090565b600067ffffffffffffffff821115614e3c57614e3b6152c7565b5b614e4582615314565b9050602081019050919050565b600067ffffffffffffffff821115614e6d57614e6c6152c7565b5b614e7682615314565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614f0a82615088565b9150614f1583615088565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614f4a57614f4961520b565b5b828201905092915050565b6000614f6082615088565b9150614f6b83615088565b925082614f7b57614f7a61523a565b5b828204905092915050565b6000614f9182615088565b9150614f9c83615088565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614fd557614fd461520b565b5b828202905092915050565b6000614feb82615088565b9150614ff683615088565b9250828210156150095761500861520b565b5b828203905092915050565b600061501f82615068565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061509d826150a4565b9050919050565b60006150af826150b6565b9050919050565b60006150c182615068565b9050919050565b82818337600083830152505050565b60005b838110156150f55780820151818401526020810190506150da565b83811115615104576000848401525b50505050565b6000600282049050600182168061512257607f821691505b6020821081141561513657615135615269565b5b50919050565b61514582615314565b810181811067ffffffffffffffff82111715615164576151636152c7565b5b80604052505050565b600061517882615088565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151ab576151aa61520b565b5b600182019050919050565b60006151c1826151c8565b9050919050565b60006151d382615325565b9050919050565b60006151e582615088565b91506151f083615088565b925082615200576151ff61523a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f476976656177617920657863656564732063757272656e74206261746368212160008201527f2100000000000000000000000000000000000000000000000000000000000000602082015250565b7f496e76616c6964206d696e74207175616e746974792121000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e2100000000000000000000000000000000602082015250565b7f43616c6c6572206973206e6f74206964206f776e657221000000000000000000600082015250565b7f496e73756666696369656e74206574682073656e7420666f72206d696e742121600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f4d696e74206578636565647320436f6c6c656374696f6e2073697a6521210000600082015250565b7f4e6f206d6f72652072657365727665642072656d61696e696e67212100000000600082015250565b7f4e6f742077686974656c69737465640000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f496e76616c696420546f6b656e20696421000000000000000000000000000000600082015250565b7f54726169742053776170206e6f74204163746976652100000000000000000000600082015250565b7f496e73756666696369656e742062616c616e636520746f20757064617465207460008201527f7261697421210000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f4d696e74696e67206e6f74206163746976652121000000000000000000000000600082015250565b6156fe81615014565b811461570957600080fd5b50565b61571581615026565b811461572057600080fd5b50565b61572c81615032565b811461573757600080fd5b50565b6157438161503c565b811461574e57600080fd5b50565b61575a81615088565b811461576557600080fd5b5056fea264697066735822122055df91ad35a44004265348603859c246f3877e95afee93e1e0164f38eb9ee30964736f6c6343000807003368747470733a2f2f6261666b726569633669736c333463616678687336347879326f7778756a623561636e666d797436756374646c376f617177616a3637716b6e71652e697066732e6e667473746f726167652e6c696e6b
Deployed Bytecode
0x60806040526004361061031a5760003560e01c80636c16611e116101ab578063b88d4fde116100f7578063cd3293de11610095578063e985e9c51161006f578063e985e9c514610bca578063eac989f814610c07578063ec42b66814610c32578063f2fde38b14610c5b5761031a565b8063cd3293de14610b37578063d6f67b2514610b62578063dc33e68114610b8d5761031a565b8063bf625cce116100d1578063bf625cce14610a78578063c7c9cda714610aa1578063c87b56dd14610abd578063cd30d63c14610afa5761031a565b8063b88d4fde146109e9578063bba7723e14610a12578063bc53a8d014610a4f5761031a565b806395d89b4111610164578063a0712d681161013e578063a0712d6814610950578063a22cb4651461096c578063a475b5dd14610995578063b0127814146109c05761031a565b806395d89b41146108d15780639da295dc146108fc578063a035b1fe146109255761031a565b80636c16611e146107d35780636fed2493146107fc57806370a0823114610827578063715018a61461086457806371b3056c1461087b5780638da5cb5b146108a65761031a565b806329818d401161026a57806341f434341161022357806345c0f533116101fd57806345c0f533146107035780634f6ccce71461072e5780636352211e1461076b5780636c0360eb146107a85761031a565b806341f43434146106865780634256dbe3146106b157806342842e0e146106da5761031a565b806329818d40146105785780632a3f300c146105a15780632f745c59146105ca5780633311d20714610607578063370e86d0146106325780633d2a6bd41461065d5761031a565b8063081812fc116102d757806318779fc9116102b157806318779fc9146104d0578063200d2ed2146104fb57806323b872dd1461052657806328bf794d1461054f5761031a565b8063081812fc1461043f578063095ea7b31461047c57806318160ddd146104a55761031a565b806301ffc9a71461031f57806302377e1f1461035c57806302fe530514610385578063050225ea146103ae57806305c58df2146103d757806306fdde0314610414575b600080fd5b34801561032b57600080fd5b506103466004803603810190610341919061441d565b610c84565b6040516103539190614b4e565b60405180910390f35b34801561036857600080fd5b50610383600480360381019061037e919061451c565b610d66565b005b34801561039157600080fd5b506103ac60048036038101906103a79190614477565b610dec565b005b3480156103ba57600080fd5b506103d560048036038101906103d09190614356565b610e82565b005b3480156103e357600080fd5b506103fe60048036038101906103f9919061451c565b610fc1565b60405161040b9190614de1565b60405180910390f35b34801561042057600080fd5b50610429610fd9565b6040516104369190614b9f565b60405180910390f35b34801561044b57600080fd5b506104666004803603810190610461919061451c565b61106b565b6040516104739190614a65565b60405180910390f35b34801561048857600080fd5b506104a3600480360381019061049e9190614356565b6110e7565b005b3480156104b157600080fd5b506104ba611100565b6040516104c79190614de1565b60405180910390f35b3480156104dc57600080fd5b506104e561110a565b6040516104f29190614b4e565b60405180910390f35b34801561050757600080fd5b5061051061111d565b60405161051d9190614de1565b60405180910390f35b34801561053257600080fd5b5061054d60048036038101906105489190614240565b611123565b005b34801561055b57600080fd5b506105766004803603810190610571919061451c565b611172565b005b34801561058457600080fd5b5061059f600480360381019061059a91906141d3565b6111f8565b005b3480156105ad57600080fd5b506105c860048036038101906105c39190614396565b6112b8565b005b3480156105d657600080fd5b506105f160048036038101906105ec9190614356565b611351565b6040516105fe9190614de1565b60405180910390f35b34801561061357600080fd5b5061061c61156a565b6040516106299190614a65565b60405180910390f35b34801561063e57600080fd5b50610647611590565b6040516106549190614b69565b60405180910390f35b34801561066957600080fd5b50610684600480360381019061067f91906141d3565b611596565b005b34801561069257600080fd5b5061069b611656565b6040516106a89190614b84565b60405180910390f35b3480156106bd57600080fd5b506106d860048036038101906106d3919061451c565b611668565b005b3480156106e657600080fd5b5061070160048036038101906106fc9190614240565b6116ee565b005b34801561070f57600080fd5b5061071861173d565b6040516107259190614de1565b60405180910390f35b34801561073a57600080fd5b506107556004803603810190610750919061451c565b611743565b6040516107629190614de1565b60405180910390f35b34801561077757600080fd5b50610792600480360381019061078d919061451c565b611796565b60405161079f9190614a65565b60405180910390f35b3480156107b457600080fd5b506107bd6117ac565b6040516107ca9190614b9f565b60405180910390f35b3480156107df57600080fd5b506107fa60048036038101906107f591906143f0565b61183e565b005b34801561080857600080fd5b506108116118c4565b60405161081e9190614a65565b60405180910390f35b34801561083357600080fd5b5061084e600480360381019061084991906141d3565b6118ea565b60405161085b9190614de1565b60405180910390f35b34801561087057600080fd5b506108796119ba565b005b34801561088757600080fd5b50610890611a42565b60405161089d9190614de1565b60405180910390f35b3480156108b257600080fd5b506108bb611a48565b6040516108c89190614a65565b60405180910390f35b3480156108dd57600080fd5b506108e6611a71565b6040516108f39190614b9f565b60405180910390f35b34801561090857600080fd5b50610923600480360381019061091e91906144c0565b611b03565b005b34801561093157600080fd5b5061093a611ba6565b6040516109479190614de1565b60405180910390f35b61096a6004803603810190610965919061451c565b611bac565b005b34801561097857600080fd5b50610993600480360381019061098e9190614316565b611d2b565b005b3480156109a157600080fd5b506109aa611d44565b6040516109b79190614b4e565b60405180910390f35b3480156109cc57600080fd5b506109e760048036038101906109e2919061451c565b611d57565b005b3480156109f557600080fd5b50610a106004803603810190610a0b9190614293565b611ddd565b005b348015610a1e57600080fd5b50610a396004803603810190610a3491906141d3565b611e2e565b604051610a469190614b2c565b60405180910390f35b348015610a5b57600080fd5b50610a766004803603810190610a7191906145d6565b611edc565b005b348015610a8457600080fd5b50610a9f6004803603810190610a9a9190614396565b612221565b005b610abb6004803603810190610ab69190614576565b6122ba565b005b348015610ac957600080fd5b50610ae46004803603810190610adf919061451c565b612559565b604051610af19190614b9f565b60405180910390f35b348015610b0657600080fd5b50610b216004803603810190610b1c9190614477565b61264c565b604051610b2e9190614de1565b60405180910390f35b348015610b4357600080fd5b50610b4c61267a565b604051610b599190614de1565b60405180910390f35b348015610b6e57600080fd5b50610b77612680565b604051610b849190614b69565b60405180910390f35b348015610b9957600080fd5b50610bb46004803603810190610baf91906141d3565b612686565b604051610bc19190614de1565b60405180910390f35b348015610bd657600080fd5b50610bf16004803603810190610bec9190614200565b612698565b604051610bfe9190614b4e565b60405180910390f35b348015610c1357600080fd5b50610c1c61272c565b604051610c299190614b9f565b60405180910390f35b348015610c3e57600080fd5b50610c596004803603810190610c5491906143f0565b6127ba565b005b348015610c6757600080fd5b50610c826004803603810190610c7d91906141d3565b612840565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610d4f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610d5f5750610d5e82612938565b5b9050919050565b610d6e6129a2565b73ffffffffffffffffffffffffffffffffffffffff16610d8c611a48565b73ffffffffffffffffffffffffffffffffffffffff1614610de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd990614d21565b60405180910390fd5b8060138190555050565b610df46129a2565b73ffffffffffffffffffffffffffffffffffffffff16610e12611a48565b73ffffffffffffffffffffffffffffffffffffffff1614610e68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5f90614d21565b60405180910390fd5b80600c9080519060200190610e7e929190613f0f565b5050565b610e8a6129a2565b73ffffffffffffffffffffffffffffffffffffffff16610ea8611a48565b73ffffffffffffffffffffffffffffffffffffffff1614610efe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef590614d21565b60405180910390fd5b600a5481610f0a611100565b610f149190614eff565b1115610f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4c90614c01565b60405180910390fd5b601754811115610f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9190614ce1565b60405180910390fd5b610fa482826129aa565b8060176000828254610fb69190614fe0565b925050819055505050565b600b6020528060005260406000206000915090505481565b606060038054610fe89061510a565b80601f01602080910402602001604051908101604052809291908181526020018280546110149061510a565b80156110615780601f1061103657610100808354040283529160200191611061565b820191906000526020600020905b81548152906001019060200180831161104457829003601f168201915b5050505050905090565b6000611076826129c8565b6110ac576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b816110f181612a16565b6110fb8383612b22565b505050565b6000600154905090565b601260009054906101000a900460ff1681565b60115481565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146111615761116033612a16565b5b61116c848484612c2d565b50505050565b61117a6129a2565b73ffffffffffffffffffffffffffffffffffffffff16611198611a48565b73ffffffffffffffffffffffffffffffffffffffff16146111ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e590614d21565b60405180910390fd5b8060148190555050565b6112006129a2565b73ffffffffffffffffffffffffffffffffffffffff1661121e611a48565b73ffffffffffffffffffffffffffffffffffffffff1614611274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126b90614d21565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6112c06129a2565b73ffffffffffffffffffffffffffffffffffffffff166112de611a48565b73ffffffffffffffffffffffffffffffffffffffff1614611334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132b90614d21565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b600061135c836118ea565b821061139d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139490614bc1565b60405180910390fd5b60006113a7611100565b905060008060005b83811015611528576000600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146114bc57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156115145786841415611505578195505050505050611564565b83806115109061516d565b9450505b5080806115209061516d565b9150506113af565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155b90614da1565b60405180910390fd5b92915050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b61159e6129a2565b73ffffffffffffffffffffffffffffffffffffffff166115bc611a48565b73ffffffffffffffffffffffffffffffffffffffff1614611612576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160990614d21565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6daaeb6d7670e522a718067333cd4e81565b6116706129a2565b73ffffffffffffffffffffffffffffffffffffffff1661168e611a48565b73ffffffffffffffffffffffffffffffffffffffff16146116e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116db90614d21565b60405180910390fd5b8060178190555050565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461172c5761172b33612a16565b5b611737848484612c3d565b50505050565b600a5481565b600061174d611100565b821061178e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178590614ca1565b60405180910390fd5b819050919050565b60006117a182612c5d565b600001519050919050565b6060600c80546117bb9061510a565b80601f01602080910402602001604051908101604052809291908181526020018280546117e79061510a565b80156118345780601f1061180957610100808354040283529160200191611834565b820191906000526020600020905b81548152906001019060200180831161181757829003601f168201915b5050505050905090565b6118466129a2565b73ffffffffffffffffffffffffffffffffffffffff16611864611a48565b73ffffffffffffffffffffffffffffffffffffffff16146118ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b190614d21565b60405180910390fd5b8060158190555050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611952576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6119c26129a2565b73ffffffffffffffffffffffffffffffffffffffff166119e0611a48565b73ffffffffffffffffffffffffffffffffffffffff1614611a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2d90614d21565b60405180910390fd5b611a406000612eec565b565b60135481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611a809061510a565b80601f0160208091040260200160405190810160405280929190818152602001828054611aac9061510a565b8015611af95780601f10611ace57610100808354040283529160200191611af9565b820191906000526020600020905b815481529060010190602001808311611adc57829003601f168201915b5050505050905090565b611b0b6129a2565b73ffffffffffffffffffffffffffffffffffffffff16611b29611a48565b73ffffffffffffffffffffffffffffffffffffffff1614611b7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7690614d21565b60405180910390fd5b80600f83604051611b909190614a2a565b9081526020016040518091039020819055505050565b60145481565b600360115414611bf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be890614dc1565b60405180910390fd5b601354611c0f82611c0133612686565b612fb090919063ffffffff16565b11158015611c1d5750600081115b611c5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5390614c21565b60405180910390fd5b611c7160145482612fc690919063ffffffff16565b341015611cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611caa90614c81565b60405180910390fd5b600a54601754611cd383611cc5611100565b612fb090919063ffffffff16565b611cdd9190614eff565b1115611d1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1590614cc1565b60405180910390fd5b611d2833826129aa565b50565b81611d3581612a16565b611d3f8383612fdc565b505050565b601060009054906101000a900460ff1681565b611d5f6129a2565b73ffffffffffffffffffffffffffffffffffffffff16611d7d611a48565b73ffffffffffffffffffffffffffffffffffffffff1614611dd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dca90614d21565b60405180910390fd5b8060118190555050565b833373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611e1b57611e1a33612a16565b5b611e2785858585613154565b5050505050565b60606000611e3b836118ea565b905060008167ffffffffffffffff811115611e5957611e586152c7565b5b604051908082528060200260200182016040528015611e875781602001602082028036833780820191505090505b50905060005b82811015611ed157611e9f8582611351565b828281518110611eb257611eb1615298565b5b6020026020010181815250508080611ec99061516d565b915050611e8d565b508092505050919050565b601260009054906101000a900460ff16611f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2290614d61565b60405180910390fd5b611f34826129c8565b611f73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6a90614d41565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16611f9383611796565b73ffffffffffffffffffffffffffffffffffffffff1614611fe9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe090614c61565b60405180910390fd5b600f81604051611ff99190614a2a565b908152602001604051809103902054600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016120639190614a65565b60206040518083038186803b15801561207b57600080fd5b505afa15801561208f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b39190614549565b10156120f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120eb90614d81565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600f856040516121669190614a2a565b9081526020016040518091039020546040518463ffffffff1660e01b815260040161219393929190614aa9565b602060405180830381600087803b1580156121ad57600080fd5b505af11580156121c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e591906143c3565b506001600b6000848152602001908152602001600020546122069190614eff565b600b6000848152602001908152602001600020819055505050565b6122296129a2565b73ffffffffffffffffffffffffffffffffffffffff16612247611a48565b73ffffffffffffffffffffffffffffffffffffffff161461229d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229490614d21565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b6000336040516020016122cd9190614a0f565b604051602081830303815290604052805190602001209050600160115414156123825761233e838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050601554836131d0565b61237d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237490614d01565b60405180910390fd5b61241c565b6002601154141561241b576123db838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050601654836131d0565b61241a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241190614d01565b60405180910390fd5b5b5b60135461243a8561242c33612686565b612fb090919063ffffffff16565b111580156124485750600084115b612487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247e90614c21565b60405180910390fd5b61249c60145485612fc690919063ffffffff16565b3410156124de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d590614c81565b60405180910390fd5b600a546017546124fe866124f0611100565b612fb090919063ffffffff16565b6125089190614eff565b1115612549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254090614cc1565b60405180910390fd5b61255333856129aa565b50505050565b6060612564826129c8565b6125a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259a90614c41565b60405180910390fd5b601060009054906101000a900460ff16156126165760006125c26117ac565b51116125dd576040518060200160405280600081525061260f565b6125e56117ac565b6125ee836131e7565b6040516020016125ff929190614a41565b6040516020818303038152906040525b9050612647565b60006126206117ac565b511161263b5760405180602001604052806000815250612644565b6126436117ac565b5b90505b919050565b600f818051602081018201805184825260208301602085012081835280955050505050506000915090505481565b60175481565b60155481565b600061269182613348565b9050919050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600c80546127399061510a565b80601f01602080910402602001604051908101604052809291908181526020018280546127659061510a565b80156127b25780601f10612787576101008083540402835291602001916127b2565b820191906000526020600020905b81548152906001019060200180831161279557829003601f168201915b505050505081565b6127c26129a2565b73ffffffffffffffffffffffffffffffffffffffff166127e0611a48565b73ffffffffffffffffffffffffffffffffffffffff1614612836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282d90614d21565b60405180910390fd5b8060168190555050565b6128486129a2565b73ffffffffffffffffffffffffffffffffffffffff16612866611a48565b73ffffffffffffffffffffffffffffffffffffffff16146128bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b390614d21565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561292c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292390614be1565b60405180910390fd5b61293581612eec565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6129c48282604051806020016040528060008152506133b2565b5050565b6000816129d36133c4565b111580156129e2575060015482105b8015612a0f575060056000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115612b1f576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b8152600401612a8d929190614a80565b60206040518083038186803b158015612aa557600080fd5b505afa158015612ab9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612add91906143c3565b612b1e57806040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401612b159190614a65565b60405180910390fd5b5b50565b6000612b2d82611796565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b95576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16612bb46129a2565b73ffffffffffffffffffffffffffffffffffffffff1614158015612be65750612be481612bdf6129a2565b612698565b155b15612c1d576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c288383836133cd565b505050565b612c3883838361347f565b505050565b612c5883838360405180602001604052806000815250611ddd565b505050565b612c65613f95565b600082905080612c736133c4565b11158015612c82575060015481105b15612eb5576000600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151612eb357600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612d97578092505050612ee7565b5b600115612eb257818060019003925050600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612ead578092505050612ee7565b612d98565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183612fbe9190614eff565b905092915050565b60008183612fd49190614f86565b905092915050565b612fe46129a2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613049576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600860006130566129a2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166131036129a2565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516131489190614b4e565b60405180910390a35050565b61315f84848461347f565b61317e8373ffffffffffffffffffffffffffffffffffffffff16613935565b8015613193575061319184848484613948565b155b156131ca576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6000826131dd8584613aa8565b1490509392505050565b6060600082141561322f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613343565b600082905060005b6000821461326157808061324a9061516d565b915050600a8261325a9190614f55565b9150613237565b60008167ffffffffffffffff81111561327d5761327c6152c7565b5b6040519080825280601f01601f1916602001820160405280156132af5781602001600182028036833780820191505090505b5090505b6000851461333c576001826132c89190614fe0565b9150600a856132d791906151da565b60306132e39190614eff565b60f81b8183815181106132f9576132f8615298565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856133359190614f55565b94506132b3565b8093505050505b919050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6133bf8383836001613b1d565b505050565b60006001905090565b826007600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061348a82612c5d565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146134f5576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166135166129a2565b73ffffffffffffffffffffffffffffffffffffffff16148061354557506135448561353f6129a2565b612698565b5b8061358a57506135536129a2565b73ffffffffffffffffffffffffffffffffffffffff166135728461106b565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806135c3576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561362a576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6136378585856001613eec565b613643600084876133cd565b6001600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600560008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600560008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156138c35760015482146138c257878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461392e8585856001613ef2565b5050505050565b600080823b905060008111915050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261396e6129a2565b8786866040518563ffffffff1660e01b81526004016139909493929190614ae0565b602060405180830381600087803b1580156139aa57600080fd5b505af19250505080156139db57506040513d601f19601f820116820180604052508101906139d8919061444a565b60015b613a55573d8060008114613a0b576040519150601f19603f3d011682016040523d82523d6000602084013e613a10565b606091505b50600081511415613a4d576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60008082905060005b8451811015613b12576000858281518110613acf57613ace615298565b5b60200260200101519050808311613af157613aea8382613ef8565b9250613afe565b613afb8184613ef8565b92505b508080613b0a9061516d565b915050613ab1565b508091505092915050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415613b8b576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415613bc6576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613bd36000868387613eec565b83600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846005600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426005600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008582019050838015613d9d5750613d9c8773ffffffffffffffffffffffffffffffffffffffff16613935565b5b15613e63575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613e126000888480600101955088613948565b613e48576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821415613da3578260015414613e5e57600080fd5b613ecf565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415613e64575b816001819055505050613ee56000868387613ef2565b5050505050565b50505050565b50505050565b600082600052816020526040600020905092915050565b828054613f1b9061510a565b90600052602060002090601f016020900481019282613f3d5760008555613f84565b82601f10613f5657805160ff1916838001178555613f84565b82800160010185558215613f84579182015b82811115613f83578251825591602001919060010190613f68565b5b509050613f919190613fd8565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115613ff1576000816000905550600101613fd9565b5090565b600061400861400384614e21565b614dfc565b90508281526020810184848401111561402457614023615305565b5b61402f8482856150c8565b509392505050565b600061404a61404584614e52565b614dfc565b90508281526020810184848401111561406657614065615305565b5b6140718482856150c8565b509392505050565b600081359050614088816156f5565b92915050565b60008083601f8401126140a4576140a36152fb565b5b8235905067ffffffffffffffff8111156140c1576140c06152f6565b5b6020830191508360208202830111156140dd576140dc615300565b5b9250929050565b6000813590506140f38161570c565b92915050565b6000815190506141088161570c565b92915050565b60008135905061411d81615723565b92915050565b6000813590506141328161573a565b92915050565b6000815190506141478161573a565b92915050565b600082601f830112614162576141616152fb565b5b8135614172848260208601613ff5565b91505092915050565b600082601f8301126141905761418f6152fb565b5b81356141a0848260208601614037565b91505092915050565b6000813590506141b881615751565b92915050565b6000815190506141cd81615751565b92915050565b6000602082840312156141e9576141e861530f565b5b60006141f784828501614079565b91505092915050565b600080604083850312156142175761421661530f565b5b600061422585828601614079565b925050602061423685828601614079565b9150509250929050565b6000806000606084860312156142595761425861530f565b5b600061426786828701614079565b935050602061427886828701614079565b9250506040614289868287016141a9565b9150509250925092565b600080600080608085870312156142ad576142ac61530f565b5b60006142bb87828801614079565b94505060206142cc87828801614079565b93505060406142dd878288016141a9565b925050606085013567ffffffffffffffff8111156142fe576142fd61530a565b5b61430a8782880161414d565b91505092959194509250565b6000806040838503121561432d5761432c61530f565b5b600061433b85828601614079565b925050602061434c858286016140e4565b9150509250929050565b6000806040838503121561436d5761436c61530f565b5b600061437b85828601614079565b925050602061438c858286016141a9565b9150509250929050565b6000602082840312156143ac576143ab61530f565b5b60006143ba848285016140e4565b91505092915050565b6000602082840312156143d9576143d861530f565b5b60006143e7848285016140f9565b91505092915050565b6000602082840312156144065761440561530f565b5b60006144148482850161410e565b91505092915050565b6000602082840312156144335761443261530f565b5b600061444184828501614123565b91505092915050565b6000602082840312156144605761445f61530f565b5b600061446e84828501614138565b91505092915050565b60006020828403121561448d5761448c61530f565b5b600082013567ffffffffffffffff8111156144ab576144aa61530a565b5b6144b78482850161417b565b91505092915050565b600080604083850312156144d7576144d661530f565b5b600083013567ffffffffffffffff8111156144f5576144f461530a565b5b6145018582860161417b565b9250506020614512858286016141a9565b9150509250929050565b6000602082840312156145325761453161530f565b5b6000614540848285016141a9565b91505092915050565b60006020828403121561455f5761455e61530f565b5b600061456d848285016141be565b91505092915050565b60008060006040848603121561458f5761458e61530f565b5b600061459d868287016141a9565b935050602084013567ffffffffffffffff8111156145be576145bd61530a565b5b6145ca8682870161408e565b92509250509250925092565b600080604083850312156145ed576145ec61530f565b5b60006145fb858286016141a9565b925050602083013567ffffffffffffffff81111561461c5761461b61530a565b5b6146288582860161417b565b9150509250929050565b600061463e83836149f1565b60208301905092915050565b61465381615014565b82525050565b61466a61466582615014565b6151b6565b82525050565b600061467b82614e93565b6146858185614ec1565b935061469083614e83565b8060005b838110156146c15781516146a88882614632565b97506146b383614eb4565b925050600181019050614694565b5085935050505092915050565b6146d781615026565b82525050565b6146e681615032565b82525050565b60006146f782614e9e565b6147018185614ed2565b93506147118185602086016150d7565b61471a81615314565b840191505092915050565b61472e81615092565b82525050565b600061473f82614ea9565b6147498185614ee3565b93506147598185602086016150d7565b61476281615314565b840191505092915050565b600061477882614ea9565b6147828185614ef4565b93506147928185602086016150d7565b80840191505092915050565b60006147ab602283614ee3565b91506147b682615332565b604082019050919050565b60006147ce602683614ee3565b91506147d982615381565b604082019050919050565b60006147f1602183614ee3565b91506147fc826153d0565b604082019050919050565b6000614814601783614ee3565b915061481f8261541f565b602082019050919050565b6000614837603083614ee3565b915061484282615448565b604082019050919050565b600061485a601783614ee3565b915061486582615497565b602082019050919050565b600061487d602083614ee3565b9150614888826154c0565b602082019050919050565b60006148a0602383614ee3565b91506148ab826154e9565b604082019050919050565b60006148c3601e83614ee3565b91506148ce82615538565b602082019050919050565b60006148e6601c83614ee3565b91506148f182615561565b602082019050919050565b6000614909600f83614ee3565b91506149148261558a565b602082019050919050565b600061492c602083614ee3565b9150614937826155b3565b602082019050919050565b600061494f601183614ee3565b915061495a826155dc565b602082019050919050565b6000614972601683614ee3565b915061497d82615605565b602082019050919050565b6000614995602683614ee3565b91506149a08261562e565b604082019050919050565b60006149b8602e83614ee3565b91506149c38261567d565b604082019050919050565b60006149db601483614ee3565b91506149e6826156cc565b602082019050919050565b6149fa81615088565b82525050565b614a0981615088565b82525050565b6000614a1b8284614659565b60148201915081905092915050565b6000614a36828461476d565b915081905092915050565b6000614a4d828561476d565b9150614a59828461476d565b91508190509392505050565b6000602082019050614a7a600083018461464a565b92915050565b6000604082019050614a95600083018561464a565b614aa2602083018461464a565b9392505050565b6000606082019050614abe600083018661464a565b614acb602083018561464a565b614ad86040830184614a00565b949350505050565b6000608082019050614af5600083018761464a565b614b02602083018661464a565b614b0f6040830185614a00565b8181036060830152614b2181846146ec565b905095945050505050565b60006020820190508181036000830152614b468184614670565b905092915050565b6000602082019050614b6360008301846146ce565b92915050565b6000602082019050614b7e60008301846146dd565b92915050565b6000602082019050614b996000830184614725565b92915050565b60006020820190508181036000830152614bb98184614734565b905092915050565b60006020820190508181036000830152614bda8161479e565b9050919050565b60006020820190508181036000830152614bfa816147c1565b9050919050565b60006020820190508181036000830152614c1a816147e4565b9050919050565b60006020820190508181036000830152614c3a81614807565b9050919050565b60006020820190508181036000830152614c5a8161482a565b9050919050565b60006020820190508181036000830152614c7a8161484d565b9050919050565b60006020820190508181036000830152614c9a81614870565b9050919050565b60006020820190508181036000830152614cba81614893565b9050919050565b60006020820190508181036000830152614cda816148b6565b9050919050565b60006020820190508181036000830152614cfa816148d9565b9050919050565b60006020820190508181036000830152614d1a816148fc565b9050919050565b60006020820190508181036000830152614d3a8161491f565b9050919050565b60006020820190508181036000830152614d5a81614942565b9050919050565b60006020820190508181036000830152614d7a81614965565b9050919050565b60006020820190508181036000830152614d9a81614988565b9050919050565b60006020820190508181036000830152614dba816149ab565b9050919050565b60006020820190508181036000830152614dda816149ce565b9050919050565b6000602082019050614df66000830184614a00565b92915050565b6000614e06614e17565b9050614e12828261513c565b919050565b6000604051905090565b600067ffffffffffffffff821115614e3c57614e3b6152c7565b5b614e4582615314565b9050602081019050919050565b600067ffffffffffffffff821115614e6d57614e6c6152c7565b5b614e7682615314565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614f0a82615088565b9150614f1583615088565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614f4a57614f4961520b565b5b828201905092915050565b6000614f6082615088565b9150614f6b83615088565b925082614f7b57614f7a61523a565b5b828204905092915050565b6000614f9182615088565b9150614f9c83615088565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614fd557614fd461520b565b5b828202905092915050565b6000614feb82615088565b9150614ff683615088565b9250828210156150095761500861520b565b5b828203905092915050565b600061501f82615068565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061509d826150a4565b9050919050565b60006150af826150b6565b9050919050565b60006150c182615068565b9050919050565b82818337600083830152505050565b60005b838110156150f55780820151818401526020810190506150da565b83811115615104576000848401525b50505050565b6000600282049050600182168061512257607f821691505b6020821081141561513657615135615269565b5b50919050565b61514582615314565b810181811067ffffffffffffffff82111715615164576151636152c7565b5b80604052505050565b600061517882615088565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151ab576151aa61520b565b5b600182019050919050565b60006151c1826151c8565b9050919050565b60006151d382615325565b9050919050565b60006151e582615088565b91506151f083615088565b925082615200576151ff61523a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f476976656177617920657863656564732063757272656e74206261746368212160008201527f2100000000000000000000000000000000000000000000000000000000000000602082015250565b7f496e76616c6964206d696e74207175616e746974792121000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e2100000000000000000000000000000000602082015250565b7f43616c6c6572206973206e6f74206964206f776e657221000000000000000000600082015250565b7f496e73756666696369656e74206574682073656e7420666f72206d696e742121600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f4d696e74206578636565647320436f6c6c656374696f6e2073697a6521210000600082015250565b7f4e6f206d6f72652072657365727665642072656d61696e696e67212100000000600082015250565b7f4e6f742077686974656c69737465640000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f496e76616c696420546f6b656e20696421000000000000000000000000000000600082015250565b7f54726169742053776170206e6f74204163746976652100000000000000000000600082015250565b7f496e73756666696369656e742062616c616e636520746f20757064617465207460008201527f7261697421210000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f4d696e74696e67206e6f74206163746976652121000000000000000000000000600082015250565b6156fe81615014565b811461570957600080fd5b50565b61571581615026565b811461572057600080fd5b50565b61572c81615032565b811461573757600080fd5b50565b6157438161503c565b811461574e57600080fd5b50565b61575a81615088565b811461576557600080fd5b5056fea264697066735822122055df91ad35a44004265348603859c246f3877e95afee93e1e0164f38eb9ee30964736f6c63430008070033
Deployed Bytecode Sourcemap
59926:6887:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39532:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;61283:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60291:75;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;62750:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60131:34;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42645:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44156:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;66073:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37961:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;61084:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60932:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;66238:163;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;61423:82;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60412:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60848:76;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38263:820;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60378:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;61712:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60544:84;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22431:143;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;61951:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;66409:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60088:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38069:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42453:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;65455:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;61617:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60511:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39901:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28217:103;;;;;;;;;;;;;:::i;:::-;;61249:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27994:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42814:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60683:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;61385:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;63852:475;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;65889:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60815:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60989:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;66588:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;65648:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;64335:502;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;61128:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;63081:763;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;65049:398;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60636:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;61917:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;61513:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;64928:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44790:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60174:110;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;61816:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28329:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39532:305;39634:4;39686:25;39671:40;;;:11;:40;;;;:105;;;;39743:33;39728:48;;;:11;:48;;;;39671:105;:158;;;;39793:36;39817:11;39793:23;:36::i;:::-;39671:158;39651:178;;39532:305;;;:::o;61283:90::-;28139:12;:10;:12::i;:::-;28128:23;;:7;:5;:7::i;:::-;:23;;;28120:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;61361:4:::1;61347:11;:18;;;;61283:90:::0;:::o;60291:75::-;28139:12;:10;:12::i;:::-;28128:23;;:7;:5;:7::i;:::-;:23;;;28120:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;60357:1:::1;60351:3;:7;;;;;;;;;;;;:::i;:::-;;60291:75:::0;:::o;62750:323::-;28139:12;:10;:12::i;:::-;28128:23;;:7;:5;:7::i;:::-;:23;;;28120:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;62869:14:::1;;62857:8;62841:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:42;;62833:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;62952:7;;62940:8;:19;;62932:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;63005:30;63015:9;63026:8;63005:9;:30::i;:::-;63057:8;63046:7;;:19;;;;;;;:::i;:::-;;;;;;;;62750:323:::0;;:::o;60131:34::-;;;;;;;;;;;;;;;;;:::o;42645:100::-;42699:13;42732:5;42725:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42645:100;:::o;44156:204::-;44224:7;44249:16;44257:7;44249;:16::i;:::-;44244:64;;44274:34;;;;;;;;;;;;;;44244:64;44328:15;:24;44344:7;44328:24;;;;;;;;;;;;;;;;;;;;;44321:31;;44156:204;;;:::o;66073:157::-;66169:8;23952:30;23973:8;23952:20;:30::i;:::-;66190:32:::1;66204:8;66214:7;66190:13;:32::i;:::-;66073:157:::0;;;:::o;37961:101::-;38014:7;38041:13;;38034:20;;37961:101;:::o;61084:37::-;;;;;;;;;;;;;:::o;60932:22::-;;;;:::o;66238:163::-;66339:4;23780:10;23772:18;;:4;:18;;;23768:83;;23807:32;23828:10;23807:20;:32::i;:::-;23768:83;66356:37:::1;66375:4;66381:2;66385:7;66356:18;:37::i;:::-;66238:163:::0;;;;:::o;61423:82::-;28139:12;:10;:12::i;:::-;28128:23;;:7;:5;:7::i;:::-;:23;;;28120:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;61491:6:::1;61483:5;:14;;;;61423:82:::0;:::o;60412:87::-;28139:12;:10;:12::i;:::-;28128:23;;:7;:5;:7::i;:::-;:23;;;28120:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;60490:1:::1;60475:12;;:16;;;;;;;;;;;;;;;;;;60412:87:::0;:::o;60848:76::-;28139:12;:10;:12::i;:::-;28128:23;;:7;:5;:7::i;:::-;:23;;;28120:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;60913:3:::1;60904:6;;:12;;;;;;;;;;;;;;;;;;60848:76:::0;:::o;38263:820::-;38388:7;38429:16;38439:5;38429:9;:16::i;:::-;38421:5;:24;38413:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;38495:22;38520:13;:11;:13::i;:::-;38495:38;;38544:19;38578:25;38632:9;38627:382;38651:14;38647:1;:18;38627:382;;;38683:31;38717:11;:14;38729:1;38717:14;;;;;;;;;;;38683:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38772:1;38746:28;;:9;:14;;;:28;;;38742:95;;38811:9;:14;;;38791:34;;38742:95;38872:5;38851:26;;:17;:26;;;38847:151;;;38913:5;38898:11;:20;38894:65;;;38942:1;38935:8;;;;;;;;;38894:65;38973:13;;;;;:::i;:::-;;;;38847:151;38672:337;38667:3;;;;;:::i;:::-;;;;38627:382;;;;39019:56;;;;;;;;;;:::i;:::-;;;;;;;;38263:820;;;;;:::o;60378:27::-;;;;;;;;;;;;;:::o;61712:97::-;;;;:::o;60544:84::-;28139:12;:10;:12::i;:::-;28128:23;;:7;:5;:7::i;:::-;:23;;;28120:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;60619:1:::1;60605:11;;:15;;;;;;;;;;;;;;;;;;60544:84:::0;:::o;22431:143::-;22531:42;22431:143;:::o;61951:88::-;28139:12;:10;:12::i;:::-;28128:23;;:7;:5;:7::i;:::-;:23;;;28120:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;62025:6:::1;62015:7;:16;;;;61951:88:::0;:::o;66409:171::-;66514:4;23780:10;23772:18;;:4;:18;;;23768:83;;23807:32;23828:10;23807:20;:32::i;:::-;23768:83;66531:41:::1;66554:4;66560:2;66564:7;66531:22;:41::i;:::-;66409:171:::0;;;;:::o;60088:36::-;;;;:::o;38069:187::-;38136:7;38172:13;:11;:13::i;:::-;38164:5;:21;38156:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;38243:5;38236:12;;38069:187;;;:::o;42453:125::-;42517:7;42544:21;42557:7;42544:12;:21::i;:::-;:26;;;42537:33;;42453:125;;;:::o;65455:84::-;65495:13;65528:3;65521:10;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;65455:84;:::o;61617:89::-;28139:12;:10;:12::i;:::-;28128:23;;:7;:5;:7::i;:::-;:23;;;28120:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;61697:1:::1;61681:13;:17;;;;61617:89:::0;:::o;60511:26::-;;;;;;;;;;;;;:::o;39901:206::-;39965:7;40006:1;39989:19;;:5;:19;;;39985:60;;;40017:28;;;;;;;;;;;;;;39985:60;40071:12;:19;40084:5;40071:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;40063:36;;40056:43;;39901:206;;;:::o;28217:103::-;28139:12;:10;:12::i;:::-;28128:23;;:7;:5;:7::i;:::-;:23;;;28120:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28282:30:::1;28309:1;28282:18;:30::i;:::-;28217:103::o:0;61249:27::-;;;;:::o;27994:87::-;28040:7;28067:6;;;;;;;;;;;28060:13;;27994:87;:::o;42814:104::-;42870:13;42903:7;42896:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42814:104;:::o;60683:124::-;28139:12;:10;:12::i;:::-;28128:23;;:7;:5;:7::i;:::-;:23;;;28120:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;60793:6:::1;60771:9;60781:8;60771:19;;;;;;:::i;:::-;;;;;;;;;;;;;:28;;;;60683:124:::0;;:::o;61385:31::-;;;;:::o;63852:475::-;63928:1;63918:6;;:11;63910:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;64015:11;;63973:38;64002:8;63973:24;63986:10;63973:12;:24::i;:::-;:28;;:38;;;;:::i;:::-;:53;;:69;;;;;64041:1;64030:8;:12;63973:69;63965:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;64102:19;64115:5;;64102:8;:12;;:19;;;;:::i;:::-;64089:9;:32;;64081:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;64218:14;;64207:7;;64177:27;64195:8;64177:13;:11;:13::i;:::-;:17;;:27;;;;:::i;:::-;:37;;;;:::i;:::-;:55;;64169:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;64288:31;64298:10;64310:8;64288:9;:31::i;:::-;63852:475;:::o;65889:176::-;65993:8;23952:30;23973:8;23952:20;:30::i;:::-;66014:43:::1;66038:8;66048;66014:23;:43::i;:::-;65889:176:::0;;;:::o;60815:26::-;;;;;;;;;;;;;:::o;60989:87::-;28139:12;:10;:12::i;:::-;28128:23;;:7;:5;:7::i;:::-;:23;;;28120:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;61062:6:::1;61053;:15;;;;60989:87:::0;:::o;66588:222::-;66739:4;23780:10;23772:18;;:4;:18;;;23768:83;;23807:32;23828:10;23807:20;:32::i;:::-;23768:83;66755:47:::1;66778:4;66784:2;66788:7;66797:4;66755:22;:47::i;:::-;66588:222:::0;;;;;:::o;65648:233::-;65701:13;65726:6;65735:12;65745:1;65735:9;:12::i;:::-;65726:21;;65758:15;65786:1;65775:13;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;65758:30;;65803:6;65799:55;65815:1;65813;:3;65799:55;;;65830:24;65850:1;65852;65830:19;:24::i;:::-;65823:1;65825;65823:4;;;;;;;;:::i;:::-;;;;;;;:31;;;;;65818:3;;;;;:::i;:::-;;;;65799:55;;;;65872:1;65865:8;;;;65648:233;;;:::o;64335:502::-;64411:17;;;;;;;;;;;64403:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;64472:11;64480:2;64472:7;:11::i;:::-;64464:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;64536:10;64521:25;;:11;64529:2;64521:7;:11::i;:::-;:25;;;64513:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;64637:9;64647:8;64637:19;;;;;;:::i;:::-;;;;;;;;;;;;;;64598:12;;;;;;;;;;;64591:30;;;64622:10;64591:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:65;;64583:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;64723:12;;;;;;;;;;;64716:33;;;64750:10;64762:11;;;;;;;;;;;64775:9;64785:8;64775:19;;;;;;:::i;:::-;;;;;;;;;;;;;;64716:79;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;64828:1;64816:5;:9;64822:2;64816:9;;;;;;;;;;;;:13;;;;:::i;:::-;64804:5;:9;64810:2;64804:9;;;;;;;;;;;:25;;;;64335:502;;:::o;61128:109::-;28139:12;:10;:12::i;:::-;28128:23;;:7;:5;:7::i;:::-;:23;;;28120:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;61223:6:::1;61203:17;;:26;;;;;;;;;;;;;;;;;;61128:109:::0;:::o;63081:763::-;63176:12;63218:10;63201:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;63191:39;;;;;;63176:54;;63256:1;63246:6;;:11;63243:226;;;63276:53;63296:11;;63276:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;63309:13;;63324:4;63276:18;:53::i;:::-;63268:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;63243:226;;;63377:1;63367:6;;:11;63364:105;;;63397:53;63417:11;;63397:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;63430:13;;63445:4;63397:18;:53::i;:::-;63389:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;63364:105;63243:226;63532:11;;63490:38;63519:8;63490:24;63503:10;63490:12;:24::i;:::-;:28;;:38;;;;:::i;:::-;:53;;:69;;;;;63558:1;63547:8;:12;63490:69;63482:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;63619:19;63632:5;;63619:8;:12;;:19;;;;:::i;:::-;63606:9;:32;;63598:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;63735:14;;63724:7;;63694:27;63712:8;63694:13;:11;:13::i;:::-;:17;;:27;;;;:::i;:::-;:37;;;;:::i;:::-;:55;;63686:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;63805:31;63815:10;63827:8;63805:9;:31::i;:::-;63165:679;63081:763;;;:::o;65049:398::-;65122:13;65156:16;65164:7;65156;:16::i;:::-;65148:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;65240:6;;;;;;;;;;;65237:202;;;65294:1;65274:9;:7;:9::i;:::-;65268:23;:27;:90;;;;;;;;;;;;;;;;;65322:9;:7;:9::i;:::-;65333:18;:7;:16;:18::i;:::-;65305:47;;;;;;;;;:::i;:::-;;;;;;;;;;;;;65268:90;65261:97;;;;65237:202;65421:1;65401:9;:7;:9::i;:::-;65395:23;:27;:44;;;;;;;;;;;;;;;;;65425:9;:7;:9::i;:::-;65395:44;65388:51;;65049:398;;;;:::o;60636:40::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;61917:27::-;;;;:::o;61513:97::-;;;;:::o;64928:113::-;64986:7;65013:20;65027:5;65013:13;:20::i;:::-;65006:27;;64928:113;;;:::o;44790:164::-;44887:4;44911:18;:25;44930:5;44911:25;;;;;;;;;;;;;;;:35;44937:8;44911:35;;;;;;;;;;;;;;;;;;;;;;;;;44904:42;;44790:164;;;;:::o;60174:110::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;61816:89::-;28139:12;:10;:12::i;:::-;28128:23;;:7;:5;:7::i;:::-;:23;;;28120:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;61896:1:::1;61880:13;:17;;;;61816:89:::0;:::o;28329:201::-;28139:12;:10;:12::i;:::-;28128:23;;:7;:5;:7::i;:::-;:23;;;28120:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28438:1:::1;28418:22;;:8;:22;;;;28410:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28494:28;28513:8;28494:18;:28::i;:::-;28329:201:::0;:::o;32647:157::-;32732:4;32771:25;32756:40;;;:11;:40;;;;32749:47;;32647:157;;;:::o;27537:98::-;27590:7;27617:10;27610:17;;27537:98;:::o;46324:104::-;46393:27;46403:2;46407:8;46393:27;;;;;;;;;;;;:9;:27::i;:::-;46324:104;;:::o;46142:174::-;46199:4;46242:7;46223:15;:13;:15::i;:::-;:26;;:53;;;;;46263:13;;46253:7;:23;46223:53;:85;;;;;46281:11;:20;46293:7;46281:20;;;;;;;;;;;:27;;;;;;;;;;;;46280:28;46223:85;46216:92;;46142:174;;;:::o;24014:419::-;24253:1;22531:42;24205:45;;;:49;24201:225;;;22531:42;24276;;;24327:4;24334:8;24276:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24271:144;;24390:8;24371:28;;;;;;;;;;;:::i;:::-;;;;;;;;24271:144;24201:225;24014:419;:::o;43711:379::-;43792:13;43808:24;43824:7;43808:15;:24::i;:::-;43792:40;;43853:5;43847:11;;:2;:11;;;43843:48;;;43867:24;;;;;;;;;;;;;;43843:48;43924:5;43908:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;43934:37;43951:5;43958:12;:10;:12::i;:::-;43934:16;:37::i;:::-;43933:38;43908:63;43904:138;;;43995:35;;;;;;;;;;;;;;43904:138;44054:28;44063:2;44067:7;44076:5;44054:8;:28::i;:::-;43781:309;43711:379;;:::o;45021:170::-;45155:28;45165:4;45171:2;45175:7;45155:9;:28::i;:::-;45021:170;;;:::o;45262:185::-;45400:39;45417:4;45423:2;45427:7;45400:39;;;;;;;;;;;;:16;:39::i;:::-;45262:185;;;:::o;41282:1109::-;41344:21;;:::i;:::-;41378:12;41393:7;41378:22;;41461:4;41442:15;:13;:15::i;:::-;:23;;:47;;;;;41476:13;;41469:4;:20;41442:47;41438:886;;;41510:31;41544:11;:17;41556:4;41544:17;;;;;;;;;;;41510:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41585:9;:16;;;41580:729;;41656:1;41630:28;;:9;:14;;;:28;;;41626:101;;41694:9;41687:16;;;;;;41626:101;42029:261;42036:4;42029:261;;;42069:6;;;;;;;;42114:11;:17;42126:4;42114:17;;;;;;;;;;;42102:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42188:1;42162:28;;:9;:14;;;:28;;;42158:109;;42230:9;42223:16;;;;;;42158:109;42029:261;;;41580:729;41491:833;41438:886;42352:31;;;;;;;;;;;;;;41282:1109;;;;:::o;28539:191::-;28613:16;28632:6;;;;;;;;;;;28613:25;;28658:8;28649:6;;:17;;;;;;;;;;;;;;;;;;28713:8;28682:40;;28703:8;28682:40;;;;;;;;;;;;28602:128;28539:191;:::o;16061:98::-;16119:7;16150:1;16146;:5;;;;:::i;:::-;16139:12;;16061:98;;;;:::o;16799:::-;16857:7;16888:1;16884;:5;;;;:::i;:::-;16877:12;;16799:98;;;;:::o;44432:287::-;44543:12;:10;:12::i;:::-;44531:24;;:8;:24;;;44527:54;;;44564:17;;;;;;;;;;;;;;44527:54;44639:8;44594:18;:32;44613:12;:10;:12::i;:::-;44594:32;;;;;;;;;;;;;;;:42;44627:8;44594:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;44692:8;44663:48;;44678:12;:10;:12::i;:::-;44663:48;;;44702:8;44663:48;;;;;;:::i;:::-;;;;;;;;44432:287;;:::o;45518:369::-;45685:28;45695:4;45701:2;45705:7;45685:9;:28::i;:::-;45728:15;:2;:13;;;:15::i;:::-;:76;;;;;45748:56;45779:4;45785:2;45789:7;45798:5;45748:30;:56::i;:::-;45747:57;45728:76;45724:156;;;45828:40;;;;;;;;;;;;;;45724:156;45518:369;;;;:::o;24701:190::-;24826:4;24879;24850:25;24863:5;24870:4;24850:12;:25::i;:::-;:33;24843:40;;24701:190;;;;;:::o;26154:533::-;26210:13;26250:1;26241:5;:10;26237:53;;;26268:10;;;;;;;;;;;;;;;;;;;;;26237:53;26300:12;26315:5;26300:20;;26331:14;26356:78;26371:1;26363:4;:9;26356:78;;26389:8;;;;;:::i;:::-;;;;26420:2;26412:10;;;;;:::i;:::-;;;26356:78;;;26444:19;26476:6;26466:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26444:39;;26494:154;26510:1;26501:5;:10;26494:154;;26538:1;26528:11;;;;;:::i;:::-;;;26605:2;26597:5;:10;;;;:::i;:::-;26584:2;:24;;;;:::i;:::-;26571:39;;26554:6;26561;26554:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;26634:2;26625:11;;;;;:::i;:::-;;;26494:154;;;26672:6;26658:21;;;;;26154:533;;;;:::o;40189:137::-;40250:7;40285:12;:19;40298:5;40285:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;40277:41;;40270:48;;40189:137;;;:::o;46791:163::-;46914:32;46920:2;46924:8;46934:5;46941:4;46914:5;:32::i;:::-;46791:163;;;:::o;65547:93::-;65604:7;65631:1;65624:8;;65547:93;:::o;54299:196::-;54441:2;54414:15;:24;54430:7;54414:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;54479:7;54475:2;54459:28;;54468:5;54459:28;;;;;;;;;;;;54299:196;;;:::o;49242:2130::-;49357:35;49395:21;49408:7;49395:12;:21::i;:::-;49357:59;;49455:4;49433:26;;:13;:18;;;:26;;;49429:67;;49468:28;;;;;;;;;;;;;;49429:67;49509:22;49551:4;49535:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;49572:36;49589:4;49595:12;:10;:12::i;:::-;49572:16;:36::i;:::-;49535:73;:126;;;;49649:12;:10;:12::i;:::-;49625:36;;:20;49637:7;49625:11;:20::i;:::-;:36;;;49535:126;49509:153;;49680:17;49675:66;;49706:35;;;;;;;;;;;;;;49675:66;49770:1;49756:16;;:2;:16;;;49752:52;;;49781:23;;;;;;;;;;;;;;49752:52;49817:43;49839:4;49845:2;49849:7;49858:1;49817:21;:43::i;:::-;49925:35;49942:1;49946:7;49955:4;49925:8;:35::i;:::-;50286:1;50256:12;:18;50269:4;50256:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50330:1;50302:12;:16;50315:2;50302:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50348:31;50382:11;:20;50394:7;50382:20;;;;;;;;;;;50348:54;;50433:2;50417:8;:13;;;:18;;;;;;;;;;;;;;;;;;50483:15;50450:8;:23;;;:49;;;;;;;;;;;;;;;;;;50751:19;50783:1;50773:7;:11;50751:33;;50799:31;50833:11;:24;50845:11;50833:24;;;;;;;;;;;50799:58;;50901:1;50876:27;;:8;:13;;;;;;;;;;;;:27;;;50872:384;;;51086:13;;51071:11;:28;51067:174;;51140:4;51124:8;:13;;;:20;;;;;;;;;;;;;;;;;;51193:13;:28;;;51167:8;:23;;;:54;;;;;;;;;;;;;;;;;;51067:174;50872:384;50231:1036;;;51303:7;51299:2;51284:27;;51293:4;51284:27;;;;;;;;;;;;51322:42;51343:4;51349:2;51353:7;51362:1;51322:20;:42::i;:::-;49346:2026;;49242:2130;;;:::o;28762:197::-;28822:4;28840:12;28907:7;28895:20;28887:28;;28950:1;28943:4;:8;28936:15;;;28762:197;;;:::o;54987:667::-;55150:4;55187:2;55171:36;;;55208:12;:10;:12::i;:::-;55222:4;55228:7;55237:5;55171:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;55167:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55422:1;55405:6;:13;:18;55401:235;;;55451:40;;;;;;;;;;;;;;55401:235;55594:6;55588:13;55579:6;55575:2;55571:15;55564:38;55167:480;55300:45;;;55290:55;;;:6;:55;;;;55283:62;;;54987:667;;;;;;:::o;24896:517::-;24979:7;24999:20;25022:4;24999:27;;25042:9;25037:339;25061:5;:12;25057:1;:16;25037:339;;;25095:20;25118:5;25124:1;25118:8;;;;;;;;:::i;:::-;;;;;;;;25095:31;;25161:12;25145;:28;25141:224;;25209:42;25224:12;25238;25209:14;:42::i;:::-;25194:57;;25141:224;;;25307:42;25322:12;25336;25307:14;:42::i;:::-;25292:57;;25141:224;25080:296;25075:3;;;;;:::i;:::-;;;;25037:339;;;;25393:12;25386:19;;;24896:517;;;;:::o;47213:1775::-;47352:20;47375:13;;47352:36;;47417:1;47403:16;;:2;:16;;;47399:48;;;47428:19;;;;;;;;;;;;;;47399:48;47474:1;47462:8;:13;47458:44;;;47484:18;;;;;;;;;;;;;;47458:44;47515:61;47545:1;47549:2;47553:12;47567:8;47515:21;:61::i;:::-;47888:8;47853:12;:16;47866:2;47853:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47952:8;47912:12;:16;47925:2;47912:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48011:2;47978:11;:25;47990:12;47978:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;48078:15;48028:11;:25;48040:12;48028:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;48111:20;48134:12;48111:35;;48161:11;48190:8;48175:12;:23;48161:37;;48219:4;:23;;;;;48227:15;:2;:13;;;:15::i;:::-;48219:23;48215:641;;;48263:314;48319:12;48315:2;48294:38;;48311:1;48294:38;;;;;;;;;;;;48360:69;48399:1;48403:2;48407:14;;;;;;48423:5;48360:30;:69::i;:::-;48355:174;;48465:40;;;;;;;;;;;;;;48355:174;48572:3;48556:12;:19;;48263:314;;48658:12;48641:13;;:29;48637:43;;48672:8;;;48637:43;48215:641;;;48721:120;48777:14;;;;;;48773:2;48752:40;;48769:1;48752:40;;;;;;;;;;;;48836:3;48820:12;:19;;48721:120;;48215:641;48886:12;48870:13;:28;;;;47828:1082;;48920:60;48949:1;48953:2;48957:12;48971:8;48920:20;:60::i;:::-;47341:1647;47213:1775;;;;:::o;56302:159::-;;;;;:::o;57120:158::-;;;;;:::o;25421:224::-;25489:13;25552:1;25546:4;25539:15;25581:1;25575:4;25568:15;25622:4;25616;25606:21;25597:30;;25421:224;;;;:::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;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:137::-;1770:5;1801:6;1795:13;1786:22;;1817:30;1841:5;1817:30;:::i;:::-;1716:137;;;;:::o;1859:139::-;1905:5;1943:6;1930:20;1921:29;;1959:33;1986:5;1959:33;:::i;:::-;1859:139;;;;:::o;2004:137::-;2049:5;2087:6;2074:20;2065:29;;2103:32;2129:5;2103:32;:::i;:::-;2004:137;;;;:::o;2147:141::-;2203:5;2234:6;2228:13;2219:22;;2250:32;2276:5;2250:32;:::i;:::-;2147:141;;;;:::o;2307:338::-;2362:5;2411:3;2404:4;2396:6;2392:17;2388:27;2378:122;;2419:79;;:::i;:::-;2378:122;2536:6;2523:20;2561:78;2635:3;2627:6;2620:4;2612:6;2608:17;2561:78;:::i;:::-;2552:87;;2368:277;2307:338;;;;:::o;2665:340::-;2721:5;2770:3;2763:4;2755:6;2751:17;2747:27;2737:122;;2778:79;;:::i;:::-;2737:122;2895:6;2882:20;2920:79;2995:3;2987:6;2980:4;2972:6;2968:17;2920:79;:::i;:::-;2911:88;;2727:278;2665:340;;;;:::o;3011:139::-;3057:5;3095:6;3082:20;3073:29;;3111:33;3138:5;3111:33;:::i;:::-;3011:139;;;;:::o;3156:143::-;3213:5;3244:6;3238:13;3229:22;;3260:33;3287:5;3260:33;:::i;:::-;3156:143;;;;:::o;3305:329::-;3364:6;3413:2;3401:9;3392:7;3388:23;3384:32;3381:119;;;3419:79;;:::i;:::-;3381:119;3539:1;3564:53;3609:7;3600:6;3589:9;3585:22;3564:53;:::i;:::-;3554:63;;3510:117;3305:329;;;;:::o;3640:474::-;3708:6;3716;3765:2;3753:9;3744:7;3740:23;3736:32;3733:119;;;3771:79;;:::i;:::-;3733:119;3891:1;3916:53;3961:7;3952:6;3941:9;3937:22;3916:53;:::i;:::-;3906:63;;3862:117;4018:2;4044:53;4089:7;4080:6;4069:9;4065:22;4044:53;:::i;:::-;4034:63;;3989:118;3640:474;;;;;:::o;4120:619::-;4197:6;4205;4213;4262:2;4250:9;4241:7;4237:23;4233:32;4230:119;;;4268:79;;:::i;:::-;4230:119;4388:1;4413:53;4458:7;4449:6;4438:9;4434:22;4413:53;:::i;:::-;4403:63;;4359:117;4515:2;4541:53;4586:7;4577:6;4566:9;4562:22;4541:53;:::i;:::-;4531:63;;4486:118;4643:2;4669:53;4714:7;4705:6;4694:9;4690:22;4669:53;:::i;:::-;4659:63;;4614:118;4120:619;;;;;:::o;4745:943::-;4840:6;4848;4856;4864;4913:3;4901:9;4892:7;4888:23;4884:33;4881:120;;;4920:79;;:::i;:::-;4881:120;5040:1;5065:53;5110:7;5101:6;5090:9;5086:22;5065:53;:::i;:::-;5055:63;;5011:117;5167:2;5193:53;5238:7;5229:6;5218:9;5214:22;5193:53;:::i;:::-;5183:63;;5138:118;5295:2;5321:53;5366:7;5357:6;5346:9;5342:22;5321:53;:::i;:::-;5311:63;;5266:118;5451:2;5440:9;5436:18;5423:32;5482:18;5474:6;5471:30;5468:117;;;5504:79;;:::i;:::-;5468:117;5609:62;5663:7;5654:6;5643:9;5639:22;5609:62;:::i;:::-;5599:72;;5394:287;4745:943;;;;;;;:::o;5694:468::-;5759:6;5767;5816:2;5804:9;5795:7;5791:23;5787:32;5784:119;;;5822:79;;:::i;:::-;5784:119;5942:1;5967:53;6012:7;6003:6;5992:9;5988:22;5967:53;:::i;:::-;5957:63;;5913:117;6069:2;6095:50;6137:7;6128:6;6117:9;6113:22;6095:50;:::i;:::-;6085:60;;6040:115;5694:468;;;;;:::o;6168:474::-;6236:6;6244;6293:2;6281:9;6272:7;6268:23;6264:32;6261:119;;;6299:79;;:::i;:::-;6261:119;6419:1;6444:53;6489:7;6480:6;6469:9;6465:22;6444:53;:::i;:::-;6434:63;;6390:117;6546:2;6572:53;6617:7;6608:6;6597:9;6593:22;6572:53;:::i;:::-;6562:63;;6517:118;6168:474;;;;;:::o;6648:323::-;6704:6;6753:2;6741:9;6732:7;6728:23;6724:32;6721:119;;;6759:79;;:::i;:::-;6721:119;6879:1;6904:50;6946:7;6937:6;6926:9;6922:22;6904:50;:::i;:::-;6894:60;;6850:114;6648:323;;;;:::o;6977:345::-;7044:6;7093:2;7081:9;7072:7;7068:23;7064:32;7061:119;;;7099:79;;:::i;:::-;7061:119;7219:1;7244:61;7297:7;7288:6;7277:9;7273:22;7244:61;:::i;:::-;7234:71;;7190:125;6977:345;;;;:::o;7328:329::-;7387:6;7436:2;7424:9;7415:7;7411:23;7407:32;7404:119;;;7442:79;;:::i;:::-;7404:119;7562:1;7587:53;7632:7;7623:6;7612:9;7608:22;7587:53;:::i;:::-;7577:63;;7533:117;7328:329;;;;:::o;7663:327::-;7721:6;7770:2;7758:9;7749:7;7745:23;7741:32;7738:119;;;7776:79;;:::i;:::-;7738:119;7896:1;7921:52;7965:7;7956:6;7945:9;7941:22;7921:52;:::i;:::-;7911:62;;7867:116;7663:327;;;;:::o;7996:349::-;8065:6;8114:2;8102:9;8093:7;8089:23;8085:32;8082:119;;;8120:79;;:::i;:::-;8082:119;8240:1;8265:63;8320:7;8311:6;8300:9;8296:22;8265:63;:::i;:::-;8255:73;;8211:127;7996:349;;;;:::o;8351:509::-;8420:6;8469:2;8457:9;8448:7;8444:23;8440:32;8437:119;;;8475:79;;:::i;:::-;8437:119;8623:1;8612:9;8608:17;8595:31;8653:18;8645:6;8642:30;8639:117;;;8675:79;;:::i;:::-;8639:117;8780:63;8835:7;8826:6;8815:9;8811:22;8780:63;:::i;:::-;8770:73;;8566:287;8351:509;;;;:::o;8866:654::-;8944:6;8952;9001:2;8989:9;8980:7;8976:23;8972:32;8969:119;;;9007:79;;:::i;:::-;8969:119;9155:1;9144:9;9140:17;9127:31;9185:18;9177:6;9174:30;9171:117;;;9207:79;;:::i;:::-;9171:117;9312:63;9367:7;9358:6;9347:9;9343:22;9312:63;:::i;:::-;9302:73;;9098:287;9424:2;9450:53;9495:7;9486:6;9475:9;9471:22;9450:53;:::i;:::-;9440:63;;9395:118;8866:654;;;;;:::o;9526:329::-;9585:6;9634:2;9622:9;9613:7;9609:23;9605:32;9602:119;;;9640:79;;:::i;:::-;9602:119;9760:1;9785:53;9830:7;9821:6;9810:9;9806:22;9785:53;:::i;:::-;9775:63;;9731:117;9526:329;;;;:::o;9861:351::-;9931:6;9980:2;9968:9;9959:7;9955:23;9951:32;9948:119;;;9986:79;;:::i;:::-;9948:119;10106:1;10131:64;10187:7;10178:6;10167:9;10163:22;10131:64;:::i;:::-;10121:74;;10077:128;9861:351;;;;:::o;10218:704::-;10313:6;10321;10329;10378:2;10366:9;10357:7;10353:23;10349:32;10346:119;;;10384:79;;:::i;:::-;10346:119;10504:1;10529:53;10574:7;10565:6;10554:9;10550:22;10529:53;:::i;:::-;10519:63;;10475:117;10659:2;10648:9;10644:18;10631:32;10690:18;10682:6;10679:30;10676:117;;;10712:79;;:::i;:::-;10676:117;10825:80;10897:7;10888:6;10877:9;10873:22;10825:80;:::i;:::-;10807:98;;;;10602:313;10218:704;;;;;:::o;10928:654::-;11006:6;11014;11063:2;11051:9;11042:7;11038:23;11034:32;11031:119;;;11069:79;;:::i;:::-;11031:119;11189:1;11214:53;11259:7;11250:6;11239:9;11235:22;11214:53;:::i;:::-;11204:63;;11160:117;11344:2;11333:9;11329:18;11316:32;11375:18;11367:6;11364:30;11361:117;;;11397:79;;:::i;:::-;11361:117;11502:63;11557:7;11548:6;11537:9;11533:22;11502:63;:::i;:::-;11492:73;;11287:288;10928:654;;;;;:::o;11588:179::-;11657:10;11678:46;11720:3;11712:6;11678:46;:::i;:::-;11756:4;11751:3;11747:14;11733:28;;11588:179;;;;:::o;11773:118::-;11860:24;11878:5;11860:24;:::i;:::-;11855:3;11848:37;11773:118;;:::o;11897:157::-;12002:45;12022:24;12040:5;12022:24;:::i;:::-;12002:45;:::i;:::-;11997:3;11990:58;11897:157;;:::o;12090:732::-;12209:3;12238:54;12286:5;12238:54;:::i;:::-;12308:86;12387:6;12382:3;12308:86;:::i;:::-;12301:93;;12418:56;12468:5;12418:56;:::i;:::-;12497:7;12528:1;12513:284;12538:6;12535:1;12532:13;12513:284;;;12614:6;12608:13;12641:63;12700:3;12685:13;12641:63;:::i;:::-;12634:70;;12727:60;12780:6;12727:60;:::i;:::-;12717:70;;12573:224;12560:1;12557;12553:9;12548:14;;12513:284;;;12517:14;12813:3;12806:10;;12214:608;;;12090:732;;;;:::o;12828:109::-;12909:21;12924:5;12909:21;:::i;:::-;12904:3;12897:34;12828:109;;:::o;12943:118::-;13030:24;13048:5;13030:24;:::i;:::-;13025:3;13018:37;12943:118;;:::o;13067:360::-;13153:3;13181:38;13213:5;13181:38;:::i;:::-;13235:70;13298:6;13293:3;13235:70;:::i;:::-;13228:77;;13314:52;13359:6;13354:3;13347:4;13340:5;13336:16;13314:52;:::i;:::-;13391:29;13413:6;13391:29;:::i;:::-;13386:3;13382:39;13375:46;;13157:270;13067:360;;;;:::o;13433:193::-;13551:68;13613:5;13551:68;:::i;:::-;13546:3;13539:81;13433:193;;:::o;13632:364::-;13720:3;13748:39;13781:5;13748:39;:::i;:::-;13803:71;13867:6;13862:3;13803:71;:::i;:::-;13796:78;;13883:52;13928:6;13923:3;13916:4;13909:5;13905:16;13883:52;:::i;:::-;13960:29;13982:6;13960:29;:::i;:::-;13955:3;13951:39;13944:46;;13724:272;13632:364;;;;:::o;14002:377::-;14108:3;14136:39;14169:5;14136:39;:::i;:::-;14191:89;14273:6;14268:3;14191:89;:::i;:::-;14184:96;;14289:52;14334:6;14329:3;14322:4;14315:5;14311:16;14289:52;:::i;:::-;14366:6;14361:3;14357:16;14350:23;;14112:267;14002:377;;;;:::o;14385:366::-;14527:3;14548:67;14612:2;14607:3;14548:67;:::i;:::-;14541:74;;14624:93;14713:3;14624:93;:::i;:::-;14742:2;14737:3;14733:12;14726:19;;14385:366;;;:::o;14757:::-;14899:3;14920:67;14984:2;14979:3;14920:67;:::i;:::-;14913:74;;14996:93;15085:3;14996:93;:::i;:::-;15114:2;15109:3;15105:12;15098:19;;14757:366;;;:::o;15129:::-;15271:3;15292:67;15356:2;15351:3;15292:67;:::i;:::-;15285:74;;15368:93;15457:3;15368:93;:::i;:::-;15486:2;15481:3;15477:12;15470:19;;15129:366;;;:::o;15501:::-;15643:3;15664:67;15728:2;15723:3;15664:67;:::i;:::-;15657:74;;15740:93;15829:3;15740:93;:::i;:::-;15858:2;15853:3;15849:12;15842:19;;15501:366;;;:::o;15873:::-;16015:3;16036:67;16100:2;16095:3;16036:67;:::i;:::-;16029:74;;16112:93;16201:3;16112:93;:::i;:::-;16230:2;16225:3;16221:12;16214:19;;15873:366;;;:::o;16245:::-;16387:3;16408:67;16472:2;16467:3;16408:67;:::i;:::-;16401:74;;16484:93;16573:3;16484:93;:::i;:::-;16602:2;16597:3;16593:12;16586:19;;16245:366;;;:::o;16617:::-;16759:3;16780:67;16844:2;16839:3;16780:67;:::i;:::-;16773:74;;16856:93;16945:3;16856:93;:::i;:::-;16974:2;16969:3;16965:12;16958:19;;16617:366;;;:::o;16989:::-;17131:3;17152:67;17216:2;17211:3;17152:67;:::i;:::-;17145:74;;17228:93;17317:3;17228:93;:::i;:::-;17346:2;17341:3;17337:12;17330:19;;16989:366;;;:::o;17361:::-;17503:3;17524:67;17588:2;17583:3;17524:67;:::i;:::-;17517:74;;17600:93;17689:3;17600:93;:::i;:::-;17718:2;17713:3;17709:12;17702:19;;17361:366;;;:::o;17733:::-;17875:3;17896:67;17960:2;17955:3;17896:67;:::i;:::-;17889:74;;17972:93;18061:3;17972:93;:::i;:::-;18090:2;18085:3;18081:12;18074:19;;17733:366;;;:::o;18105:::-;18247:3;18268:67;18332:2;18327:3;18268:67;:::i;:::-;18261:74;;18344:93;18433:3;18344:93;:::i;:::-;18462:2;18457:3;18453:12;18446:19;;18105:366;;;:::o;18477:::-;18619:3;18640:67;18704:2;18699:3;18640:67;:::i;:::-;18633:74;;18716:93;18805:3;18716:93;:::i;:::-;18834:2;18829:3;18825:12;18818:19;;18477:366;;;:::o;18849:::-;18991:3;19012:67;19076:2;19071:3;19012:67;:::i;:::-;19005:74;;19088:93;19177:3;19088:93;:::i;:::-;19206:2;19201:3;19197:12;19190:19;;18849:366;;;:::o;19221:::-;19363:3;19384:67;19448:2;19443:3;19384:67;:::i;:::-;19377:74;;19460:93;19549:3;19460:93;:::i;:::-;19578:2;19573:3;19569:12;19562:19;;19221:366;;;:::o;19593:::-;19735:3;19756:67;19820:2;19815:3;19756:67;:::i;:::-;19749:74;;19832:93;19921:3;19832:93;:::i;:::-;19950:2;19945:3;19941:12;19934:19;;19593:366;;;:::o;19965:::-;20107:3;20128:67;20192:2;20187:3;20128:67;:::i;:::-;20121:74;;20204:93;20293:3;20204:93;:::i;:::-;20322:2;20317:3;20313:12;20306:19;;19965:366;;;:::o;20337:::-;20479:3;20500:67;20564:2;20559:3;20500:67;:::i;:::-;20493:74;;20576:93;20665:3;20576:93;:::i;:::-;20694:2;20689:3;20685:12;20678:19;;20337:366;;;:::o;20709:108::-;20786:24;20804:5;20786:24;:::i;:::-;20781:3;20774:37;20709:108;;:::o;20823:118::-;20910:24;20928:5;20910:24;:::i;:::-;20905:3;20898:37;20823:118;;:::o;20947:256::-;21059:3;21074:75;21145:3;21136:6;21074:75;:::i;:::-;21174:2;21169:3;21165:12;21158:19;;21194:3;21187:10;;20947:256;;;;:::o;21209:275::-;21341:3;21363:95;21454:3;21445:6;21363:95;:::i;:::-;21356:102;;21475:3;21468:10;;21209:275;;;;:::o;21490:435::-;21670:3;21692:95;21783:3;21774:6;21692:95;:::i;:::-;21685:102;;21804:95;21895:3;21886:6;21804:95;:::i;:::-;21797:102;;21916:3;21909:10;;21490:435;;;;;:::o;21931:222::-;22024:4;22062:2;22051:9;22047:18;22039:26;;22075:71;22143:1;22132:9;22128:17;22119:6;22075:71;:::i;:::-;21931:222;;;;:::o;22159:332::-;22280:4;22318:2;22307:9;22303:18;22295:26;;22331:71;22399:1;22388:9;22384:17;22375:6;22331:71;:::i;:::-;22412:72;22480:2;22469:9;22465:18;22456:6;22412:72;:::i;:::-;22159:332;;;;;:::o;22497:442::-;22646:4;22684:2;22673:9;22669:18;22661:26;;22697:71;22765:1;22754:9;22750:17;22741:6;22697:71;:::i;:::-;22778:72;22846:2;22835:9;22831:18;22822:6;22778:72;:::i;:::-;22860;22928:2;22917:9;22913:18;22904:6;22860:72;:::i;:::-;22497:442;;;;;;:::o;22945:640::-;23140:4;23178:3;23167:9;23163:19;23155:27;;23192:71;23260:1;23249:9;23245:17;23236:6;23192:71;:::i;:::-;23273:72;23341:2;23330:9;23326:18;23317:6;23273:72;:::i;:::-;23355;23423:2;23412:9;23408:18;23399:6;23355:72;:::i;:::-;23474:9;23468:4;23464:20;23459:2;23448:9;23444:18;23437:48;23502:76;23573:4;23564:6;23502:76;:::i;:::-;23494:84;;22945:640;;;;;;;:::o;23591:373::-;23734:4;23772:2;23761:9;23757:18;23749:26;;23821:9;23815:4;23811:20;23807:1;23796:9;23792:17;23785:47;23849:108;23952:4;23943:6;23849:108;:::i;:::-;23841:116;;23591:373;;;;:::o;23970:210::-;24057:4;24095:2;24084:9;24080:18;24072:26;;24108:65;24170:1;24159:9;24155:17;24146:6;24108:65;:::i;:::-;23970:210;;;;:::o;24186:222::-;24279:4;24317:2;24306:9;24302:18;24294:26;;24330:71;24398:1;24387:9;24383:17;24374:6;24330:71;:::i;:::-;24186:222;;;;:::o;24414:284::-;24538:4;24576:2;24565:9;24561:18;24553:26;;24589:102;24688:1;24677:9;24673:17;24664:6;24589:102;:::i;:::-;24414:284;;;;:::o;24704:313::-;24817:4;24855:2;24844:9;24840:18;24832:26;;24904:9;24898:4;24894:20;24890:1;24879:9;24875:17;24868:47;24932:78;25005:4;24996:6;24932:78;:::i;:::-;24924:86;;24704:313;;;;:::o;25023:419::-;25189:4;25227:2;25216:9;25212:18;25204:26;;25276:9;25270:4;25266:20;25262:1;25251:9;25247:17;25240:47;25304:131;25430:4;25304:131;:::i;:::-;25296:139;;25023:419;;;:::o;25448:::-;25614:4;25652:2;25641:9;25637:18;25629:26;;25701:9;25695:4;25691:20;25687:1;25676:9;25672:17;25665:47;25729:131;25855:4;25729:131;:::i;:::-;25721:139;;25448:419;;;:::o;25873:::-;26039:4;26077:2;26066:9;26062:18;26054:26;;26126:9;26120:4;26116:20;26112:1;26101:9;26097:17;26090:47;26154:131;26280:4;26154:131;:::i;:::-;26146:139;;25873:419;;;:::o;26298:::-;26464:4;26502:2;26491:9;26487:18;26479:26;;26551:9;26545:4;26541:20;26537:1;26526:9;26522:17;26515:47;26579:131;26705:4;26579:131;:::i;:::-;26571:139;;26298:419;;;:::o;26723:::-;26889:4;26927:2;26916:9;26912:18;26904:26;;26976:9;26970:4;26966:20;26962:1;26951:9;26947:17;26940:47;27004:131;27130:4;27004:131;:::i;:::-;26996:139;;26723:419;;;:::o;27148:::-;27314:4;27352:2;27341:9;27337:18;27329:26;;27401:9;27395:4;27391:20;27387:1;27376:9;27372:17;27365:47;27429:131;27555:4;27429:131;:::i;:::-;27421:139;;27148:419;;;:::o;27573:::-;27739:4;27777:2;27766:9;27762:18;27754:26;;27826:9;27820:4;27816:20;27812:1;27801:9;27797:17;27790:47;27854:131;27980:4;27854:131;:::i;:::-;27846:139;;27573:419;;;:::o;27998:::-;28164:4;28202:2;28191:9;28187:18;28179:26;;28251:9;28245:4;28241:20;28237:1;28226:9;28222:17;28215:47;28279:131;28405:4;28279:131;:::i;:::-;28271:139;;27998:419;;;:::o;28423:::-;28589:4;28627:2;28616:9;28612:18;28604:26;;28676:9;28670:4;28666:20;28662:1;28651:9;28647:17;28640:47;28704:131;28830:4;28704:131;:::i;:::-;28696:139;;28423:419;;;:::o;28848:::-;29014:4;29052:2;29041:9;29037:18;29029:26;;29101:9;29095:4;29091:20;29087:1;29076:9;29072:17;29065:47;29129:131;29255:4;29129:131;:::i;:::-;29121:139;;28848:419;;;:::o;29273:::-;29439:4;29477:2;29466:9;29462:18;29454:26;;29526:9;29520:4;29516:20;29512:1;29501:9;29497:17;29490:47;29554:131;29680:4;29554:131;:::i;:::-;29546:139;;29273:419;;;:::o;29698:::-;29864:4;29902:2;29891:9;29887:18;29879:26;;29951:9;29945:4;29941:20;29937:1;29926:9;29922:17;29915:47;29979:131;30105:4;29979:131;:::i;:::-;29971:139;;29698:419;;;:::o;30123:::-;30289:4;30327:2;30316:9;30312:18;30304:26;;30376:9;30370:4;30366:20;30362:1;30351:9;30347:17;30340:47;30404:131;30530:4;30404:131;:::i;:::-;30396:139;;30123:419;;;:::o;30548:::-;30714:4;30752:2;30741:9;30737:18;30729:26;;30801:9;30795:4;30791:20;30787:1;30776:9;30772:17;30765:47;30829:131;30955:4;30829:131;:::i;:::-;30821:139;;30548:419;;;:::o;30973:::-;31139:4;31177:2;31166:9;31162:18;31154:26;;31226:9;31220:4;31216:20;31212:1;31201:9;31197:17;31190:47;31254:131;31380:4;31254:131;:::i;:::-;31246:139;;30973:419;;;:::o;31398:::-;31564:4;31602:2;31591:9;31587:18;31579:26;;31651:9;31645:4;31641:20;31637:1;31626:9;31622:17;31615:47;31679:131;31805:4;31679:131;:::i;:::-;31671:139;;31398:419;;;:::o;31823:::-;31989:4;32027:2;32016:9;32012:18;32004:26;;32076:9;32070:4;32066:20;32062:1;32051:9;32047:17;32040:47;32104:131;32230:4;32104:131;:::i;:::-;32096:139;;31823:419;;;:::o;32248:222::-;32341:4;32379:2;32368:9;32364:18;32356:26;;32392:71;32460:1;32449:9;32445:17;32436:6;32392:71;:::i;:::-;32248:222;;;;:::o;32476:129::-;32510:6;32537:20;;:::i;:::-;32527:30;;32566:33;32594:4;32586:6;32566:33;:::i;:::-;32476:129;;;:::o;32611:75::-;32644:6;32677:2;32671:9;32661:19;;32611:75;:::o;32692:307::-;32753:4;32843:18;32835:6;32832:30;32829:56;;;32865:18;;:::i;:::-;32829:56;32903:29;32925:6;32903:29;:::i;:::-;32895:37;;32987:4;32981;32977:15;32969:23;;32692:307;;;:::o;33005:308::-;33067:4;33157:18;33149:6;33146:30;33143:56;;;33179:18;;:::i;:::-;33143:56;33217:29;33239:6;33217:29;:::i;:::-;33209:37;;33301:4;33295;33291:15;33283:23;;33005:308;;;:::o;33319:132::-;33386:4;33409:3;33401:11;;33439:4;33434:3;33430:14;33422:22;;33319:132;;;:::o;33457:114::-;33524:6;33558:5;33552:12;33542:22;;33457:114;;;:::o;33577:98::-;33628:6;33662:5;33656:12;33646:22;;33577:98;;;:::o;33681:99::-;33733:6;33767:5;33761:12;33751:22;;33681:99;;;:::o;33786:113::-;33856:4;33888;33883:3;33879:14;33871:22;;33786:113;;;:::o;33905:184::-;34004:11;34038:6;34033:3;34026:19;34078:4;34073:3;34069:14;34054:29;;33905:184;;;;:::o;34095:168::-;34178:11;34212:6;34207:3;34200:19;34252:4;34247:3;34243:14;34228:29;;34095:168;;;;:::o;34269:169::-;34353:11;34387:6;34382:3;34375:19;34427:4;34422:3;34418:14;34403:29;;34269:169;;;;:::o;34444:148::-;34546:11;34583:3;34568:18;;34444:148;;;;:::o;34598:305::-;34638:3;34657:20;34675:1;34657:20;:::i;:::-;34652:25;;34691:20;34709:1;34691:20;:::i;:::-;34686:25;;34845:1;34777:66;34773:74;34770:1;34767:81;34764:107;;;34851:18;;:::i;:::-;34764:107;34895:1;34892;34888:9;34881:16;;34598:305;;;;:::o;34909:185::-;34949:1;34966:20;34984:1;34966:20;:::i;:::-;34961:25;;35000:20;35018:1;35000:20;:::i;:::-;34995:25;;35039:1;35029:35;;35044:18;;:::i;:::-;35029:35;35086:1;35083;35079:9;35074:14;;34909:185;;;;:::o;35100:348::-;35140:7;35163:20;35181:1;35163:20;:::i;:::-;35158:25;;35197:20;35215:1;35197:20;:::i;:::-;35192:25;;35385:1;35317:66;35313:74;35310:1;35307:81;35302:1;35295:9;35288:17;35284:105;35281:131;;;35392:18;;:::i;:::-;35281:131;35440:1;35437;35433:9;35422:20;;35100:348;;;;:::o;35454:191::-;35494:4;35514:20;35532:1;35514:20;:::i;:::-;35509:25;;35548:20;35566:1;35548:20;:::i;:::-;35543:25;;35587:1;35584;35581:8;35578:34;;;35592:18;;:::i;:::-;35578:34;35637:1;35634;35630:9;35622:17;;35454:191;;;;:::o;35651:96::-;35688:7;35717:24;35735:5;35717:24;:::i;:::-;35706:35;;35651:96;;;:::o;35753:90::-;35787:7;35830:5;35823:13;35816:21;35805:32;;35753:90;;;:::o;35849:77::-;35886:7;35915:5;35904:16;;35849:77;;;:::o;35932:149::-;35968:7;36008:66;36001:5;35997:78;35986:89;;35932:149;;;:::o;36087:126::-;36124:7;36164:42;36157:5;36153:54;36142:65;;36087:126;;;:::o;36219:77::-;36256:7;36285:5;36274:16;;36219:77;;;:::o;36302:157::-;36383:9;36416:37;36447:5;36416:37;:::i;:::-;36403:50;;36302:157;;;:::o;36465:126::-;36515:9;36548:37;36579:5;36548:37;:::i;:::-;36535:50;;36465:126;;;:::o;36597:113::-;36647:9;36680:24;36698:5;36680:24;:::i;:::-;36667:37;;36597:113;;;:::o;36716:154::-;36800:6;36795:3;36790;36777:30;36862:1;36853:6;36848:3;36844:16;36837:27;36716:154;;;:::o;36876:307::-;36944:1;36954:113;36968:6;36965:1;36962:13;36954:113;;;37053:1;37048:3;37044:11;37038:18;37034:1;37029:3;37025:11;37018:39;36990:2;36987:1;36983:10;36978:15;;36954:113;;;37085:6;37082:1;37079:13;37076:101;;;37165:1;37156:6;37151:3;37147:16;37140:27;37076:101;36925:258;36876:307;;;:::o;37189:320::-;37233:6;37270:1;37264:4;37260:12;37250:22;;37317:1;37311:4;37307:12;37338:18;37328:81;;37394:4;37386:6;37382:17;37372:27;;37328:81;37456:2;37448:6;37445:14;37425:18;37422:38;37419:84;;;37475:18;;:::i;:::-;37419:84;37240:269;37189:320;;;:::o;37515:281::-;37598:27;37620:4;37598:27;:::i;:::-;37590:6;37586:40;37728:6;37716:10;37713:22;37692:18;37680:10;37677:34;37674:62;37671:88;;;37739:18;;:::i;:::-;37671:88;37779:10;37775:2;37768:22;37558:238;37515:281;;:::o;37802:233::-;37841:3;37864:24;37882:5;37864:24;:::i;:::-;37855:33;;37910:66;37903:5;37900:77;37897:103;;;37980:18;;:::i;:::-;37897:103;38027:1;38020:5;38016:13;38009:20;;37802:233;;;:::o;38041:100::-;38080:7;38109:26;38129:5;38109:26;:::i;:::-;38098:37;;38041:100;;;:::o;38147:94::-;38186:7;38215:20;38229:5;38215:20;:::i;:::-;38204:31;;38147:94;;;:::o;38247:176::-;38279:1;38296:20;38314:1;38296:20;:::i;:::-;38291:25;;38330:20;38348:1;38330:20;:::i;:::-;38325:25;;38369:1;38359:35;;38374:18;;:::i;:::-;38359:35;38415:1;38412;38408:9;38403:14;;38247:176;;;;:::o;38429:180::-;38477:77;38474:1;38467:88;38574:4;38571:1;38564:15;38598:4;38595:1;38588:15;38615:180;38663:77;38660:1;38653:88;38760:4;38757:1;38750:15;38784:4;38781:1;38774:15;38801:180;38849:77;38846:1;38839:88;38946:4;38943:1;38936:15;38970:4;38967:1;38960:15;38987:180;39035:77;39032:1;39025:88;39132:4;39129:1;39122:15;39156:4;39153:1;39146:15;39173:180;39221:77;39218:1;39211:88;39318:4;39315:1;39308:15;39342:4;39339:1;39332:15;39359:117;39468:1;39465;39458:12;39482:117;39591:1;39588;39581:12;39605:117;39714:1;39711;39704:12;39728:117;39837:1;39834;39827:12;39851:117;39960:1;39957;39950:12;39974:117;40083:1;40080;40073:12;40097:102;40138:6;40189:2;40185:7;40180:2;40173:5;40169:14;40165:28;40155:38;;40097:102;;;:::o;40205:94::-;40238:8;40286:5;40282:2;40278:14;40257:35;;40205:94;;;:::o;40305:221::-;40445:34;40441:1;40433:6;40429:14;40422:58;40514:4;40509:2;40501:6;40497:15;40490:29;40305:221;:::o;40532:225::-;40672:34;40668:1;40660:6;40656:14;40649:58;40741:8;40736:2;40728:6;40724:15;40717:33;40532:225;:::o;40763:220::-;40903:34;40899:1;40891:6;40887:14;40880:58;40972:3;40967:2;40959:6;40955:15;40948:28;40763:220;:::o;40989:173::-;41129:25;41125:1;41117:6;41113:14;41106:49;40989:173;:::o;41168:235::-;41308:34;41304:1;41296:6;41292:14;41285:58;41377:18;41372:2;41364:6;41360:15;41353:43;41168:235;:::o;41409:173::-;41549:25;41545:1;41537:6;41533:14;41526:49;41409:173;:::o;41588:182::-;41728:34;41724:1;41716:6;41712:14;41705:58;41588:182;:::o;41776:222::-;41916:34;41912:1;41904:6;41900:14;41893:58;41985:5;41980:2;41972:6;41968:15;41961:30;41776:222;:::o;42004:180::-;42144:32;42140:1;42132:6;42128:14;42121:56;42004:180;:::o;42190:178::-;42330:30;42326:1;42318:6;42314:14;42307:54;42190:178;:::o;42374:165::-;42514:17;42510:1;42502:6;42498:14;42491:41;42374:165;:::o;42545:182::-;42685:34;42681:1;42673:6;42669:14;42662:58;42545:182;:::o;42733:167::-;42873:19;42869:1;42861:6;42857:14;42850:43;42733:167;:::o;42906:172::-;43046:24;43042:1;43034:6;43030:14;43023:48;42906:172;:::o;43084:225::-;43224:34;43220:1;43212:6;43208:14;43201:58;43293:8;43288:2;43280:6;43276:15;43269:33;43084:225;:::o;43315:233::-;43455:34;43451:1;43443:6;43439:14;43432:58;43524:16;43519:2;43511:6;43507:15;43500:41;43315:233;:::o;43554:170::-;43694:22;43690:1;43682:6;43678:14;43671:46;43554:170;:::o;43730:122::-;43803:24;43821:5;43803:24;:::i;:::-;43796:5;43793:35;43783:63;;43842:1;43839;43832:12;43783:63;43730:122;:::o;43858:116::-;43928:21;43943:5;43928:21;:::i;:::-;43921:5;43918:32;43908:60;;43964:1;43961;43954:12;43908:60;43858:116;:::o;43980:122::-;44053:24;44071:5;44053:24;:::i;:::-;44046:5;44043:35;44033:63;;44092:1;44089;44082:12;44033:63;43980:122;:::o;44108:120::-;44180:23;44197:5;44180:23;:::i;:::-;44173:5;44170:34;44160:62;;44218:1;44215;44208:12;44160:62;44108:120;:::o;44234:122::-;44307:24;44325:5;44307:24;:::i;:::-;44300:5;44297:35;44287:63;;44346:1;44343;44336:12;44287:63;44234:122;:::o
Swarm Source
ipfs://55df91ad35a44004265348603859c246f3877e95afee93e1e0164f38eb9ee309
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.