Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Multichain Info
Latest 25 from a total of 124 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Verify Kyc Enabl... | 19492116 | 209 days ago | IN | 0 ETH | 0.0034163 | ||||
User Kyc Verifie... | 19492107 | 209 days ago | IN | 0 ETH | 0.00219412 | ||||
Register New Use... | 19492097 | 209 days ago | IN | 0 ETH | 0.00517934 | ||||
Register New Use... | 17118475 | 542 days ago | IN | 0 ETH | 0.01271044 | ||||
Register New Use... | 17118437 | 542 days ago | IN | 0 ETH | 0.01539151 | ||||
Verify Kyc Enabl... | 16006139 | 698 days ago | IN | 0 ETH | 0.00187233 | ||||
Register New Use... | 16006137 | 698 days ago | IN | 0 ETH | 0.00032028 | ||||
Register New Use... | 16006137 | 698 days ago | IN | 0 ETH | 0.00037432 | ||||
Register New Use... | 16006137 | 698 days ago | IN | 0 ETH | 0.00287119 | ||||
Verify Kyc Enabl... | 15961720 | 705 days ago | IN | 0 ETH | 0.00251868 | ||||
Register New Use... | 15961719 | 705 days ago | IN | 0 ETH | 0.00405122 | ||||
Verify Kyc Enabl... | 15949232 | 706 days ago | IN | 0 ETH | 0.00334345 | ||||
Register New Use... | 15949230 | 706 days ago | IN | 0 ETH | 0.00533308 | ||||
Verify Kyc Enabl... | 15848677 | 720 days ago | IN | 0 ETH | 0.00268145 | ||||
Register New Use... | 15848675 | 720 days ago | IN | 0 ETH | 0.00427664 | ||||
Verify Kyc Enabl... | 15848584 | 720 days ago | IN | 0 ETH | 0.0008138 | ||||
Verify Kyc Enabl... | 15848584 | 720 days ago | IN | 0 ETH | 0.00265784 | ||||
Register New Use... | 15848559 | 720 days ago | IN | 0 ETH | 0.00436557 | ||||
Verify Kyc Enabl... | 15726465 | 737 days ago | IN | 0 ETH | 0.00412479 | ||||
Register New Use... | 15726461 | 737 days ago | IN | 0 ETH | 0.00671006 | ||||
Register New Use... | 15695883 | 742 days ago | IN | 0 ETH | 0.00155283 | ||||
Verify Kyc Enabl... | 15673548 | 745 days ago | IN | 0 ETH | 0.00126533 | ||||
Register New Use... | 15673542 | 745 days ago | IN | 0 ETH | 0.00192634 | ||||
Verify Kyc Enabl... | 15639375 | 750 days ago | IN | 0 ETH | 0.00249812 | ||||
Register New Use... | 15639373 | 750 days ago | IN | 0 ETH | 0.00405091 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
UserRegistry
Compiler Version
v0.6.10+commit.00c0fcaf
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-06-01 */ // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: @openzeppelin/contracts/math/SafeMath.sol pragma solidity ^0.6.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @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) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @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 sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @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) { // 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 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts 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) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts 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) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts 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 mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.6.2; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ 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"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ 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"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC20/SafeERC20.sol pragma solidity ^0.6.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File: @openzeppelin/contracts/GSN/Context.sol pragma solidity ^0.6.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.6.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: contracts/Claimer.sol pragma solidity 0.6.10; /** * @title Reclaimer * @author Protofire * @dev Allows owner to claim ERC20 tokens ot ETH sent to this contract. */ abstract contract Claimer is Ownable { using SafeERC20 for IERC20; /** * @dev send all token balance of an arbitrary erc20 token * in the contract to another address * @param token token to reclaim * @param _to address to send eth balance to */ function claimToken(IERC20 token, address _to) external onlyOwner { uint256 balance = token.balanceOf(address(this)); token.safeTransfer(_to, balance); } /** * @dev send all eth balance in the contract to another address * @param _to address to send eth balance to */ function claimEther(address payable _to) external onlyOwner { (bool sent, ) = _to.call{value: address(this).balance}(""); require(sent, "Failed to send Ether"); } } // File: contracts/Registry.sol pragma solidity 0.6.10; pragma experimental ABIEncoderV2; abstract contract Registry is Claimer { struct AttributeData { uint256 value; address updatedBy; uint256 timestamp; } mapping(address => mapping(bytes32 => AttributeData)) public attributes; event SetAttribute( address indexed who, bytes32 attribute, uint256 value, address indexed updatedBy ); function setAttribute( address _who, bytes32 _attribute, uint256 _value ) public onlyOwner { attributes[_who][_attribute] = AttributeData( _value, msg.sender, block.timestamp ); emit SetAttribute(_who, _attribute, _value, msg.sender); } function hasAttribute(address _who, bytes32 _attribute) public view returns (bool) { return attributes[_who][_attribute].value != 0; } function getAttribute(address _who, bytes32 _attribute) public view returns (AttributeData memory data) { data = attributes[_who][_attribute]; } function getAttributeValue(address _who, bytes32 _attribute) public view returns (uint256) { return attributes[_who][_attribute].value; } } // File: contracts/interfaces/IUserRegistry.sol pragma solidity 0.6.10; /** * @dev Interface of the Registry contract. */ interface IUserRegistry { function canTransfer(address _from, address _to) external view; function canTransferFrom( address _spender, address _from, address _to ) external view; function canMint(address _to) external view; function canBurn(address _from, uint256 _amount) external view; function canWipe(address _account) external view; function isRedeem(address _sender, address _recipient) external view returns (bool); function isRedeemFrom( address _caller, address _sender, address _recipient ) external view returns (bool); } // File: contracts/UserRegistry.sol pragma solidity 0.6.10; contract UserRegistry is Registry, IUserRegistry { uint256 public constant REDEMPTION_ADDRESS_COUNT = 0x100000; bytes32 public constant IS_BLOCKLISTED = "IS_BLOCKLISTED"; bytes32 public constant KYC_AML_VERIFIED = "KYC_AML_VERIFIED"; bytes32 public constant CAN_BURN = "CAN_BURN"; bytes32 public constant USER_REDEEM_ADDRESS = "USER_REDEEM_ADDRESS"; bytes32 public constant REDEEM_ADDRESS_USER = "REDEEM_ADDRESS_USER"; address public token; mapping(address => string) private usersId; mapping(string => address) private usersById; uint256 private redemptionAddressCount; uint256 public minBurnBound; uint256 public maxBurnBound; struct User { address account; string id; address redeemAddress; bool blocked; bool KYC; // solhint-disable-line var-name-mixedcase bool canBurn; } event RegisterNewUser( address indexed account, address indexed redeemAddress ); event UserKycVerified(address indexed account); event UserKycUnverified(address indexed account); event EnableRedeemAddress(address indexed account); event DisableRedeemAddress(address indexed account); event BlockAccount(address indexed account); event UnblockAccount(address indexed account); event MinBurnBound(uint256 minBurn); event MaxBurnBound(uint256 minBurn); constructor( address _token, uint256 _minBurnBound, uint256 _maxBurnBound ) public { require(_minBurnBound <= _maxBurnBound, "min bigger than max"); token = _token; minBurnBound = _minBurnBound; maxBurnBound = _maxBurnBound; } function setToken(address _token) public onlyOwner { token = _token; } function setMinBurnBound(uint256 _minBurnBound) public onlyOwner { require(_minBurnBound <= maxBurnBound, "min bigger than max"); minBurnBound = _minBurnBound; emit MinBurnBound(_minBurnBound); } function setMaxBurnBound(uint256 _maxBurnBound) public onlyOwner { require(minBurnBound <= _maxBurnBound, "min bigger than max"); maxBurnBound = _maxBurnBound; emit MaxBurnBound(_maxBurnBound); } /** * @dev Adds a new user in the registry. * Sets {REDEEM_ADDRESS_USER} attribute for redeemAddress as `_account`. * Sets {USER_REDEEM_ADDRESS} attribute for `_account` as redeemAddress. * * Emits a {RegisterNewUser} event. * * Requirements: * * - `_account` should not be a registered as user. * - number of redeem address should not be greater than max availables. */ function registerNewUser(address _account, string calldata _id) public onlyOwner { require(!_isUser(_account), "user exist"); require(usersById[_id] == address(0), "id already taken"); redemptionAddressCount++; require( REDEMPTION_ADDRESS_COUNT > redemptionAddressCount, "max allowed users" ); setAttribute( address(redemptionAddressCount), REDEEM_ADDRESS_USER, uint256(_account) ); setAttribute(_account, USER_REDEEM_ADDRESS, redemptionAddressCount); usersId[_account] = _id; usersById[_id] = _account; emit RegisterNewUser(_account, address(redemptionAddressCount)); } /** * @dev Gets user's data. * * Requirements: * * - the caller should be the owner. */ function getUser(address _account) public view onlyOwner returns (User memory user) { user.account = _account; user.id = usersId[_account]; user.redeemAddress = getRedeemAddress(_account); user.blocked = _isBlocked(_account); user.KYC = _isKyced(_account); user.canBurn = getAttributeValue(getRedeemAddress(_account), CAN_BURN) == 1; } /** * @dev Gets user by its id. * * Requirements: * * - the caller should be the owner. */ function getUserById(string calldata _id) public view onlyOwner returns (User memory user) { return getUser(usersById[_id]); } /** * @dev Sets user id. * * Requirements: * * - the caller should be the owner. * - `_account` should be a registered as user. * - `_id` should not be taken. */ function setUserId(address _account, string calldata _id) public onlyOwner { require(_isUser(_account), "not a user"); require(usersById[_id] == address(0), "id already taken"); string memory prevId = usersId[_account]; usersId[_account] = _id; usersById[_id] = _account; delete usersById[prevId]; } /** * @dev Sets user as KYC verified. * * Emits a {UserKycVerified} event. * * Requirements: * * - `_account` should be a registered as user. */ function userKycVerified(address _account) public onlyOwner { require(_isUser(_account), "not a user"); setAttribute(_account, KYC_AML_VERIFIED, 1); emit UserKycVerified(_account); } /** * @dev Sets user as KYC un-verified. * * Emits a {UserKycVerified} event. * * Requirements: * * - `_account` should be a registered as user. */ function userKycUnverified(address _account) public onlyOwner { require(_isUser(_account), "not a user"); setAttribute(_account, KYC_AML_VERIFIED, 0); emit UserKycUnverified(_account); } /** * @dev Enables `_account` redeem address to burn. * * Emits a {EnableUserRedeemAddress} event. * * Requirements: * * - `_account` should be a registered as user. * - `_account` should be KYC verified. */ function enableRedeemAddress(address _account) public onlyOwner { require(_isUser(_account), "not a user"); require(_isKyced(_account), "user has not KYC"); setAttribute(getRedeemAddress(_account), CAN_BURN, 1); emit EnableRedeemAddress(_account); } /** * @dev Disables `_account` redeem address to burn. * * Emits a {DisableRedeemAddress} event. * * Requirements: * * - `_account` should be a registered as user. */ function disableRedeemAddress(address _account) public onlyOwner { require(_isUser(_account), "not a user"); setAttribute(getRedeemAddress(_account), CAN_BURN, 0); emit DisableRedeemAddress(_account); } /** * @dev Sets user as KYC verified. * Enables `_account` redeem address to burn. * * Emits a {UserKycVerified} event. * Emits a {EnableUserRedeemAddress} event. * * Requirements: * * - `_account` should be a registered as user. */ function verifyKycEnableRedeem(address _account) public onlyOwner { require(_isUser(_account), "not a user"); setAttribute(_account, KYC_AML_VERIFIED, 1); setAttribute(getRedeemAddress(_account), CAN_BURN, 1); emit UserKycVerified(_account); emit EnableRedeemAddress(getRedeemAddress(_account)); } /** * @dev Sets user as KYC un-verified. * Disables `_account` redeem address to burn. * * Emits a {UserKycVerified} event. * Emits a {v} event. * * Requirements: * * - `_account` should be a registered as user. */ function unverifyKycDisableRedeem(address _account) public onlyOwner { require(_isUser(_account), "not a user"); setAttribute(_account, KYC_AML_VERIFIED, 0); setAttribute(getRedeemAddress(_account), CAN_BURN, 0); emit UserKycUnverified(_account); emit DisableRedeemAddress(getRedeemAddress(_account)); } /** * @dev Registers `_account` as blocked. * * Emits a {BlockAccount} event. * * Requirements: * * - `_account` should not be already blocked. */ function blockAccount(address _account) public onlyOwner { require(!_isBlocked(_account), "user already blocked"); setAttribute(_account, IS_BLOCKLISTED, 1); emit BlockAccount(_account); } /** * @dev Registers `_account` as un-blocked. * * Emits a {UnblockAccount} event. * * Requirements: * * - `_account` should be blocked. */ function unblockAccount(address _account) public onlyOwner { require(_isBlocked(_account), "user not blocked"); setAttribute(_account, IS_BLOCKLISTED, 0); emit UnblockAccount(_account); } /** * @dev Gets user's account associated to a given `_redeemAddress`. */ function getUserByRedeemAddress(address _redeemAddress) public view returns (address) { return address(getAttributeValue(_redeemAddress, REDEEM_ADDRESS_USER)); } /** * @dev Gets redeem address associated to a given `_account` */ function getRedeemAddress(address _account) public view returns (address) { return address(getAttributeValue(_account, USER_REDEEM_ADDRESS)); } /** * @dev Checks if the given `_account` is a registered user. */ function _isUser(address _account) internal view returns (bool) { return getAttributeValue(_account, USER_REDEEM_ADDRESS) != 0; } /** * @dev Checks if the given `_account` is blocked. */ function _isBlocked(address _account) internal view returns (bool) { return getAttributeValue(_account, IS_BLOCKLISTED) == 1; } /** * @dev Checks if the given `_account` is KYC verified. */ function _isKyced(address _account) internal view returns (bool) { return getAttributeValue(_account, KYC_AML_VERIFIED) != 0; } /** * @dev Checks if the given `_account` is a redeeming address. */ function _isRedemptionAddress(address _account) internal pure returns (bool) { return uint256(_account) < REDEMPTION_ADDRESS_COUNT; } /** * @dev Determines if it is redeeming. */ function isRedeem(address, address _recipient) external view override onlyToken returns (bool) { return _isRedemptionAddress(_recipient); } /** * @dev Determines if it is redeeming from. */ function isRedeemFrom( address, address, address _recipient ) external view override onlyToken returns (bool) { return _isRedemptionAddress(_recipient); } /** * @dev Throws if any of `_from` or `_to` is blocklisted. */ function canTransfer(address _from, address _to) external view override onlyToken { require(!_isBlocked(_from), "blocklisted"); require(!_isBlocked(_to), "blocklisted"); } /** * @dev Throws if any of `_spender`, `_from` or `_to` is blocklisted. */ function canTransferFrom( address _spender, address _from, address _to ) external view override onlyToken { require(!_isBlocked(_spender), "blocklisted"); require(!_isBlocked(_from), "blocklisted"); require(!_isBlocked(_to), "blocklisted"); } /** * @dev Throws if any of `_to` is not KYC verified or blocklisted. */ function canMint(address _to) external view override onlyToken { require(_isKyced(_to), "user has not KYC"); require(!_isBlocked(_to), "blocklisted"); } /** * @dev Throws if any of `_from` is not enabled to burn or `_amount` lower than minBurnBound. */ function canBurn(address _from, uint256 _amount) external view override onlyToken { require(getAttributeValue(_from, CAN_BURN) != 0, "can not burn"); require(_amount >= minBurnBound, "below min bound"); require(_amount <= maxBurnBound, "above max bound"); } /** * @dev Throws if any of `_account` is not blocked. */ function canWipe(address _account) external view override onlyToken { require(_isBlocked(_account), "can not wipe"); } /** * @dev Throws if called by any address other than the token. */ modifier onlyToken() { require(msg.sender == token, "only Token"); _; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_minBurnBound","type":"uint256"},{"internalType":"uint256","name":"_maxBurnBound","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"BlockAccount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"DisableRedeemAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"EnableRedeemAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minBurn","type":"uint256"}],"name":"MaxBurnBound","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minBurn","type":"uint256"}],"name":"MinBurnBound","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":"account","type":"address"},{"indexed":true,"internalType":"address","name":"redeemAddress","type":"address"}],"name":"RegisterNewUser","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"who","type":"address"},{"indexed":false,"internalType":"bytes32","name":"attribute","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"address","name":"updatedBy","type":"address"}],"name":"SetAttribute","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"UnblockAccount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"UserKycUnverified","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"UserKycVerified","type":"event"},{"inputs":[],"name":"CAN_BURN","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"IS_BLOCKLISTED","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"KYC_AML_VERIFIED","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REDEEM_ADDRESS_USER","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REDEMPTION_ADDRESS_COUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USER_REDEEM_ADDRESS","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"attributes","outputs":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"address","name":"updatedBy","type":"address"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"blockAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"canBurn","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"canMint","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"canTransfer","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"canTransferFrom","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"canWipe","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"_to","type":"address"}],"name":"claimEther","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"claimToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"disableRedeemAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"enableRedeemAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_who","type":"address"},{"internalType":"bytes32","name":"_attribute","type":"bytes32"}],"name":"getAttribute","outputs":[{"components":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"address","name":"updatedBy","type":"address"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"internalType":"struct Registry.AttributeData","name":"data","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_who","type":"address"},{"internalType":"bytes32","name":"_attribute","type":"bytes32"}],"name":"getAttributeValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getRedeemAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getUser","outputs":[{"components":[{"internalType":"address","name":"account","type":"address"},{"internalType":"string","name":"id","type":"string"},{"internalType":"address","name":"redeemAddress","type":"address"},{"internalType":"bool","name":"blocked","type":"bool"},{"internalType":"bool","name":"KYC","type":"bool"},{"internalType":"bool","name":"canBurn","type":"bool"}],"internalType":"struct UserRegistry.User","name":"user","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_id","type":"string"}],"name":"getUserById","outputs":[{"components":[{"internalType":"address","name":"account","type":"address"},{"internalType":"string","name":"id","type":"string"},{"internalType":"address","name":"redeemAddress","type":"address"},{"internalType":"bool","name":"blocked","type":"bool"},{"internalType":"bool","name":"KYC","type":"bool"},{"internalType":"bool","name":"canBurn","type":"bool"}],"internalType":"struct UserRegistry.User","name":"user","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_redeemAddress","type":"address"}],"name":"getUserByRedeemAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_who","type":"address"},{"internalType":"bytes32","name":"_attribute","type":"bytes32"}],"name":"hasAttribute","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"_recipient","type":"address"}],"name":"isRedeem","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"_recipient","type":"address"}],"name":"isRedeemFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBurnBound","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minBurnBound","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":"address","name":"_account","type":"address"},{"internalType":"string","name":"_id","type":"string"}],"name":"registerNewUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_who","type":"address"},{"internalType":"bytes32","name":"_attribute","type":"bytes32"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setAttribute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxBurnBound","type":"uint256"}],"name":"setMaxBurnBound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minBurnBound","type":"uint256"}],"name":"setMinBurnBound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"setToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"string","name":"_id","type":"string"}],"name":"setUserId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"unblockAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"unverifyKycDisableRedeem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"userKycUnverified","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"userKycVerified","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"verifyKycEnableRedeem","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162004c1f38038062004c1f8339818101604052810190620000379190620001bb565b6000620000496200018560201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350808211156200012d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001249062000253565b60405180910390fd5b82600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160068190555080600781905550505050620002f8565b600033905090565b6000815190506200019e81620002c4565b92915050565b600081519050620001b581620002de565b92915050565b600080600060608486031215620001d157600080fd5b6000620001e1868287016200018d565b9350506020620001f486828701620001a4565b92505060406200020786828701620001a4565b9150509250925092565b60006200022060138362000275565b91507f6d696e20626967676572207468616e206d6178000000000000000000000000006000830152602082019050919050565b600060208201905081810360008301526200026e8162000211565b9050919050565b600082825260208201905092915050565b600062000293826200029a565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b620002cf8162000286565b8114620002db57600080fd5b50565b620002e981620002ba565b8114620002f557600080fd5b50565b61491780620003086000396000f3fe608060405234801561001057600080fd5b50600436106102695760003560e01c80637c0a893d11610151578063cef701f2116100c3578063e87c81fd11610087578063e87c81fd1461072e578063e8913e3a1461074a578063f2fde38b14610766578063f48009cc14610782578063f73f5c0e146107b2578063fc0c546a146107d057610269565b8063cef701f214610666578063da5c2cec14610682578063decf3f9f146106b2578063e23c5063146106ce578063e6c65bb8146106fe57610269565b80639ba36e2d116101155780639ba36e2d146105ba578063a3d553ea146105d8578063af3105e5146105f6578063b761dc0714610612578063c2ba47441461062e578063ca31879d1461064a57610269565b80637c0a893d146105285780637cb41d36146105445780637e443414146105605780638da5cb5b1461057e57806394e577ec1461059c57610269565b80633de98319116101ea5780636c85cf67116101ae5780636c85cf67146104525780636f77926b1461046e578063710d29de1461049e578063715018a6146104bc578063719d0d30146104c65780637338c25c146104f857610269565b80633de98319146103b25780634645b6dc146103ce5780634d78fdc6146103ea5780635c9fbd95146104065780635cb02dd81461043657610269565b8063271313291161023157806327131329146103105780632b550c491461032c5780632ba0de15146103485780632d04899f14610364578063379f8fc21461038257610269565b8063121d8fdd1461026e578063144fa6d71461028c578063163f6691146102a85780631d8c2502146102d85780632685e4c1146102f4575b600080fd5b6102766107ee565b60405161028391906143eb565b60405180910390f35b6102a660048036038101906102a191906138e5565b610812565b005b6102c260048036038101906102bd91906139c2565b6108ec565b6040516102cf91906146b1565b60405180910390f35b6102f260048036038101906102ed91906138e5565b6109c1565b005b61030e600480360381019061030991906138e5565b610b19565b005b61032a600480360381019061032591906138e5565b610c69565b005b610346600480360381019061034191906138e5565b610e38565b005b610362600480360381019061035d9190613b8b565b611007565b005b61036c611123565b60405161037991906146ee565b60405180910390f35b61039c60048036038101906103979190613b46565b61112a565b6040516103a991906146cc565b60405180910390f35b6103cc60048036038101906103c79190613b8b565b611219565b005b6103e860048036038101906103e39190613aa5565b611335565b005b61040460048036038101906103ff91906138e5565b6114c0565b005b610420600480360381019061041b91906138e5565b611610565b60405161042d919061438c565b60405180910390f35b610450600480360381019061044b919061390e565b611643565b005b61046c60048036038101906104679190613937565b611789565b005b610488600480360381019061048391906138e5565b6118af565b60405161049591906146cc565b60405180910390f35b6104a6611b1e565b6040516104b391906143eb565b60405180910390f35b6104c4611b42565b005b6104e060048036038101906104db91906139c2565b611c97565b6040516104ef93929190614709565b60405180910390f35b610512600480360381019061050d91906139c2565b611cee565b60405161051f91906143d0565b60405180910390f35b610542600480360381019061053d91906138e5565b611d4f565b005b61055e60048036038101906105599190613a4d565b611ea0565b005b610568612206565b60405161057591906143eb565b60405180910390f35b61058661222a565b604051610593919061438c565b60405180910390f35b6105a4612253565b6040516105b191906143eb565b60405180910390f35b6105c2612277565b6040516105cf91906146ee565b60405180910390f35b6105e061227d565b6040516105ed91906146ee565b60405180910390f35b610610600480360381019061060b91906139fe565b612283565b005b61062c600480360381019061062791906138e5565b612464565b005b610648600480360381019061064391906138e5565b6125b4565b005b610664600480360381019061065f9190613b0a565b6126d8565b005b610680600480360381019061067b9190613973565b61282b565b005b61069c60048036038101906106979190613937565b61299b565b6040516106a991906143d0565b60405180910390f35b6106cc60048036038101906106c791906138e5565b612a3e565b005b6106e860048036038101906106e391906139c2565b612bde565b6040516106f591906146ee565b60405180910390f35b610718600480360381019061071391906138e5565b612c3c565b604051610725919061438c565b60405180910390f35b610748600480360381019061074391906138e5565b612c6f565b005b610764600480360381019061075f9190613a4d565b612d4a565b005b610780600480360381019061077b91906138e5565b6130a8565b005b61079c60048036038101906107979190613973565b61326c565b6040516107a991906143d0565b60405180910390f35b6107ba613310565b6040516107c791906143eb565b60405180910390f35b6107d8613334565b6040516107e5919061438c565b60405180910390f35b7f43414e5f4255524e00000000000000000000000000000000000000000000000081565b61081a61335a565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146108a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089f90614551565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6108f46136c4565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020604051806060016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481525050905092915050565b6109c961335a565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4e90614551565b60405180910390fd5b610a6081613362565b610a9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a96906145f1565b60405180910390fd5b610ad3610aab82611610565b7f43414e5f4255524e0000000000000000000000000000000000000000000000006000612283565b8073ffffffffffffffffffffffffffffffffffffffff167ffd9027ffd4896af21b70f1dc6e0fbd869797268e9b3de5a5b19fa69d7f0da82e60405160405180910390a250565b610b2161335a565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610baf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba690614551565b60405180910390fd5b610bb881613362565b610bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bee906145f1565b60405180910390fd5b610c23817f4b59435f414d4c5f5645524946494544000000000000000000000000000000006001612283565b8073ffffffffffffffffffffffffffffffffffffffff167f520780af5c8a69895fcdcdc0f0c157cdf2d47725fe797f3304b0cf7a7b1588f960405160405180910390a250565b610c7161335a565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf690614551565b60405180910390fd5b610d0881613362565b610d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3e906145f1565b60405180910390fd5b610d73817f4b59435f414d4c5f5645524946494544000000000000000000000000000000006001612283565b610da7610d7f82611610565b7f43414e5f4255524e0000000000000000000000000000000000000000000000006001612283565b8073ffffffffffffffffffffffffffffffffffffffff167f520780af5c8a69895fcdcdc0f0c157cdf2d47725fe797f3304b0cf7a7b1588f960405160405180910390a2610df381611610565b73ffffffffffffffffffffffffffffffffffffffff167fd420aa79ad2143dd8965d0807da177f7fdc7443b216353845ded4b39e3b1a63560405160405180910390a250565b610e4061335a565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ece576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec590614551565b60405180910390fd5b610ed781613362565b610f16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0d906145f1565b60405180910390fd5b610f42817f4b59435f414d4c5f5645524946494544000000000000000000000000000000006000612283565b610f76610f4e82611610565b7f43414e5f4255524e0000000000000000000000000000000000000000000000006000612283565b8073ffffffffffffffffffffffffffffffffffffffff167fc9275786273ecbff55d3e517a7f4db5e7ff2c61d348bd3481c18724294b17ecf60405160405180910390a2610fc281611610565b73ffffffffffffffffffffffffffffffffffffffff167ffd9027ffd4896af21b70f1dc6e0fbd869797268e9b3de5a5b19fa69d7f0da82e60405160405180910390a250565b61100f61335a565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461109d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109490614551565b60405180910390fd5b6007548111156110e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d990614691565b60405180910390fd5b806006819055507fa287eb4ef1c4733956e020a33db5094281af463deec6afed00b0fb688544e4618160405161111891906146ee565b60405180910390a150565b6210000081565b6111326136fb565b61113a61335a565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bf90614551565b60405180910390fd5b611211600484846040516111dd929190614347565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166118af565b905092915050565b61122161335a565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a690614551565b60405180910390fd5b8060065411156112f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112eb90614691565b60405180910390fd5b806007819055507f1306d6fd6388a556e2143ed67b6c616d89be1d0d9a30f0ef8abb9a3ec211ef008160405161132a91906146ee565b60405180910390a150565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bc90614651565b60405180910390fd5b60006113f1837f43414e5f4255524e000000000000000000000000000000000000000000000000612bde565b1415611432576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142990614511565b60405180910390fd5b600654811015611477576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146e90614591565b60405180910390fd5b6007548111156114bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b3906145b1565b60405180910390fd5b5050565b6114c861335a565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154d90614551565b60405180910390fd5b61155f81613398565b61159e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159590614571565b60405180910390fd5b6115ca817f49535f424c4f434b4c49535445440000000000000000000000000000000000006000612283565b8073ffffffffffffffffffffffffffffffffffffffff167ff089583afd1eb27f1422606229fc6fa8a842303d1a09fbbeb24459589a3a2caa60405160405180910390a250565b600061163c827f555345525f52454445454d5f4144445245535300000000000000000000000000612bde565b9050919050565b61164b61335a565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d090614551565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff16476040516116ff90614377565b60006040518083038185875af1925050503d806000811461173c576040519150601f19603f3d011682016040523d82523d6000602084013e611741565b606091505b5050905080611785576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177c906144d1565b60405180910390fd5b5050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181090614651565b60405180910390fd5b61182282613398565b15611862576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185990614491565b60405180910390fd5b61186b81613398565b156118ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a290614491565b60405180910390fd5b5050565b6118b76136fb565b6118bf61335a565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461194d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194490614551565b60405180910390fd5b81816000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a585780601f10611a2d57610100808354040283529160200191611a58565b820191906000526020600020905b815481529060010190602001808311611a3b57829003601f168201915b50505050508160200181905250611a6e82611610565b816040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611aae82613398565b816060019015159081151581525050611ac6826133ce565b8160800190151590811515815250506001611b09611ae384611610565b7f43414e5f4255524e000000000000000000000000000000000000000000000000612bde565b148160a0019015159081151581525050919050565b7f555345525f52454445454d5f414444524553530000000000000000000000000081565b611b4a61335a565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcf90614551565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6001602052816000526040600020602052806000526040600020600091509150508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154905083565b600080600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020600001541415905092915050565b611d5761335a565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611de5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddc90614551565b60405180910390fd5b611dee81613398565b15611e2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2590614611565b60405180910390fd5b611e5a817f49535f424c4f434b4c49535445440000000000000000000000000000000000006001612283565b8073ffffffffffffffffffffffffffffffffffffffff167f97a5d41a04181a30f4f25bf09bde80dfc43c7dc33265b1660b7aadc8e4bbb28860405160405180910390a250565b611ea861335a565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2d90614551565b60405180910390fd5b611f3f83613362565b15611f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7690614451565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660048383604051611fa9929190614347565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461202e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612025906144f1565b60405180910390fd5b6005600081548092919060010191905055506005546210000011612087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207e90614531565b60405180910390fd5b6120ca6005547f52454445454d5f414444524553535f55534552000000000000000000000000008573ffffffffffffffffffffffffffffffffffffffff16612283565b6120f7837f555345525f52454445454d5f4144445245535300000000000000000000000000600554612283565b8181600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209190612145929190613763565b508260048383604051612159929190614347565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060055473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f4f0153fa13d714b9b8b36d41bd77776f3514ca58a227232d11eb8e3b1736509560405160405180910390a3505050565b7f52454445454d5f414444524553535f555345520000000000000000000000000081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f49535f424c4f434b4c495354454400000000000000000000000000000000000081565b60075481565b60065481565b61228b61335a565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231090614551565b60405180910390fd5b60405180606001604052808281526020013373ffffffffffffffffffffffffffffffffffffffff16815260200142815250600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008481526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604082015181600201559050503373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f1513071108ab63e9d17b31f5c506085810b41da99b3df843679551bda24092978484604051612457929190614406565b60405180910390a3505050565b61246c61335a565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f190614551565b60405180910390fd5b61250381613362565b612542576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612539906145f1565b60405180910390fd5b61256e817f4b59435f414d4c5f5645524946494544000000000000000000000000000000006000612283565b8073ffffffffffffffffffffffffffffffffffffffff167fc9275786273ecbff55d3e517a7f4db5e7ff2c61d348bd3481c18724294b17ecf60405160405180910390a250565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612644576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263b90614651565b60405180910390fd5b61264d816133ce565b61268c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612683906145d1565b60405180910390fd5b61269581613398565b156126d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126cc90614491565b60405180910390fd5b50565b6126e061335a565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461276e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276590614551565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016127a9919061438c565b60206040518083038186803b1580156127c157600080fd5b505afa1580156127d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127f99190613bb4565b905061282682828573ffffffffffffffffffffffffffffffffffffffff166134049092919063ffffffff16565b505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146128bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b290614651565b60405180910390fd5b6128c483613398565b15612904576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128fb90614491565b60405180910390fd5b61290d82613398565b1561294d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294490614491565b60405180910390fd5b61295681613398565b15612996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298d90614491565b60405180910390fd5b505050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612a2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2490614651565b60405180910390fd5b612a368261348a565b905092915050565b612a4661335a565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ad4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612acb90614551565b60405180910390fd5b612add81613362565b612b1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b13906145f1565b60405180910390fd5b612b25816133ce565b612b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5b906145d1565b60405180910390fd5b612b98612b7082611610565b7f43414e5f4255524e0000000000000000000000000000000000000000000000006001612283565b8073ffffffffffffffffffffffffffffffffffffffff167fd420aa79ad2143dd8965d0807da177f7fdc7443b216353845ded4b39e3b1a63560405160405180910390a250565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060000154905092915050565b6000612c68827f52454445454d5f414444524553535f5553455200000000000000000000000000612bde565b9050919050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612cff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf690614651565b60405180910390fd5b612d0881613398565b612d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3e906144b1565b60405180910390fd5b50565b612d5261335a565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612de0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd790614551565b60405180910390fd5b612de983613362565b612e28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1f906145f1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660048383604051612e52929190614347565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ece906144f1565b60405180910390fd5b6060600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612fac5780601f10612f8157610100808354040283529160200191612fac565b820191906000526020600020905b815481529060010190602001808311612f8f57829003601f168201915b505050505090508282600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209190613001929190613763565b508360048484604051613015929190614347565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506004816040516130719190614360565b908152602001604051809103902060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550505050565b6130b061335a565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461313e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313590614551565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156131ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a590614471565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132f590614651565b60405180910390fd5b6133078261348a565b90509392505050565b7f4b59435f414d4c5f56455249464945440000000000000000000000000000000081565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b60008061338f837f555345525f52454445454d5f4144445245535300000000000000000000000000612bde565b14159050919050565b600060016133c6837f49535f424c4f434b4c4953544544000000000000000000000000000000000000612bde565b149050919050565b6000806133fb837f4b59435f414d4c5f564552494649454400000000000000000000000000000000612bde565b14159050919050565b6134858363a9059cbb60e01b84846040516024016134239291906143a7565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506134af565b505050565b6000621000008273ffffffffffffffffffffffffffffffffffffffff16109050919050565b6060613511826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166135769092919063ffffffff16565b905060008151111561357157808060200190518101906135319190613ae1565b613570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356790614671565b60405180910390fd5b5b505050565b6060613585848460008561358e565b90509392505050565b6060613599856136b1565b6135d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135cf90614631565b60405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040516136029190614330565b60006040518083038185875af1925050503d806000811461363f576040519150601f19603f3d011682016040523d82523d6000602084013e613644565b606091505b509150915081156136595780925050506136a9565b60008151111561366c5780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136a0919061442f565b60405180910390fd5b949350505050565b600080823b905060008111915050919050565b604051806060016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081525090565b6040518060c00160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160608152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000151581526020016000151581526020016000151581525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106137a457803560ff19168380011785556137d2565b828001600101855582156137d2579182015b828111156137d15782358255916020019190600101906137b6565b5b5090506137df91906137e3565b5090565b61380591905b808211156138015760008160009055506001016137e9565b5090565b90565b60008135905061381781614857565b92915050565b60008135905061382c8161486e565b92915050565b60008151905061384181614885565b92915050565b6000813590506138568161489c565b92915050565b60008135905061386b816148b3565b92915050565b60008083601f84011261388357600080fd5b8235905067ffffffffffffffff81111561389c57600080fd5b6020830191508360018202830111156138b457600080fd5b9250929050565b6000813590506138ca816148ca565b92915050565b6000815190506138df816148ca565b92915050565b6000602082840312156138f757600080fd5b600061390584828501613808565b91505092915050565b60006020828403121561392057600080fd5b600061392e8482850161381d565b91505092915050565b6000806040838503121561394a57600080fd5b600061395885828601613808565b925050602061396985828601613808565b9150509250929050565b60008060006060848603121561398857600080fd5b600061399686828701613808565b93505060206139a786828701613808565b92505060406139b886828701613808565b9150509250925092565b600080604083850312156139d557600080fd5b60006139e385828601613808565b92505060206139f485828601613847565b9150509250929050565b600080600060608486031215613a1357600080fd5b6000613a2186828701613808565b9350506020613a3286828701613847565b9250506040613a43868287016138bb565b9150509250925092565b600080600060408486031215613a6257600080fd5b6000613a7086828701613808565b935050602084013567ffffffffffffffff811115613a8d57600080fd5b613a9986828701613871565b92509250509250925092565b60008060408385031215613ab857600080fd5b6000613ac685828601613808565b9250506020613ad7858286016138bb565b9150509250929050565b600060208284031215613af357600080fd5b6000613b0184828501613832565b91505092915050565b60008060408385031215613b1d57600080fd5b6000613b2b8582860161385c565b9250506020613b3c85828601613808565b9150509250929050565b60008060208385031215613b5957600080fd5b600083013567ffffffffffffffff811115613b7357600080fd5b613b7f85828601613871565b92509250509250929050565b600060208284031215613b9d57600080fd5b6000613bab848285016138bb565b91505092915050565b600060208284031215613bc657600080fd5b6000613bd4848285016138d0565b91505092915050565b613be68161478e565b82525050565b613bf58161478e565b82525050565b613c04816147b2565b82525050565b613c13816147b2565b82525050565b613c22816147be565b82525050565b6000613c3382614740565b613c3d8185614756565b9350613c4d818560208601614813565b80840191505092915050565b6000613c658385614783565b9350613c72838584614804565b82840190509392505050565b6000613c898261474b565b613c938185614761565b9350613ca3818560208601614813565b613cac81614846565b840191505092915050565b6000613cc28261474b565b613ccc8185614772565b9350613cdc818560208601614813565b613ce581614846565b840191505092915050565b6000613cfb8261474b565b613d058185614783565b9350613d15818560208601614813565b80840191505092915050565b6000613d2e600a83614772565b91507f75736572206578697374000000000000000000000000000000000000000000006000830152602082019050919050565b6000613d6e602683614772565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613dd4600b83614772565b91507f626c6f636b6c69737465640000000000000000000000000000000000000000006000830152602082019050919050565b6000613e14600c83614772565b91507f63616e206e6f74207769706500000000000000000000000000000000000000006000830152602082019050919050565b6000613e54601483614772565b91507f4661696c656420746f2073656e642045746865720000000000000000000000006000830152602082019050919050565b6000613e94601083614772565b91507f696420616c72656164792074616b656e000000000000000000000000000000006000830152602082019050919050565b6000613ed4600c83614772565b91507f63616e206e6f74206275726e00000000000000000000000000000000000000006000830152602082019050919050565b6000613f14601183614772565b91507f6d617820616c6c6f7765642075736572730000000000000000000000000000006000830152602082019050919050565b6000613f54602083614772565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613f94601083614772565b91507f75736572206e6f7420626c6f636b6564000000000000000000000000000000006000830152602082019050919050565b6000613fd4600f83614772565b91507f62656c6f77206d696e20626f756e6400000000000000000000000000000000006000830152602082019050919050565b6000614014600f83614772565b91507f61626f7665206d617820626f756e6400000000000000000000000000000000006000830152602082019050919050565b6000614054601083614772565b91507f7573657220686173206e6f74204b5943000000000000000000000000000000006000830152602082019050919050565b6000614094600a83614772565b91507f6e6f7420612075736572000000000000000000000000000000000000000000006000830152602082019050919050565b60006140d4600083614756565b9150600082019050919050565b60006140ee601483614772565b91507f7573657220616c726561647920626c6f636b65640000000000000000000000006000830152602082019050919050565b600061412e601d83614772565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b600061416e600a83614772565b91507f6f6e6c7920546f6b656e000000000000000000000000000000000000000000006000830152602082019050919050565b60006141ae602a83614772565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b6000614214601383614772565b91507f6d696e20626967676572207468616e206d6178000000000000000000000000006000830152602082019050919050565b60608201600082015161425d6000850182614312565b5060208201516142706020850182613bdd565b5060408201516142836040850182614312565b50505050565b600060c0830160008301516142a16000860182613bdd565b50602083015184820360208601526142b98282613c7e565b91505060408301516142ce6040860182613bdd565b5060608301516142e16060860182613bfb565b5060808301516142f46080860182613bfb565b5060a083015161430760a0860182613bfb565b508091505092915050565b61431b816147fa565b82525050565b61432a816147fa565b82525050565b600061433c8284613c28565b915081905092915050565b6000614354828486613c59565b91508190509392505050565b600061436c8284613cf0565b915081905092915050565b6000614382826140c7565b9150819050919050565b60006020820190506143a16000830184613bec565b92915050565b60006040820190506143bc6000830185613bec565b6143c96020830184614321565b9392505050565b60006020820190506143e56000830184613c0a565b92915050565b60006020820190506144006000830184613c19565b92915050565b600060408201905061441b6000830185613c19565b6144286020830184614321565b9392505050565b600060208201905081810360008301526144498184613cb7565b905092915050565b6000602082019050818103600083015261446a81613d21565b9050919050565b6000602082019050818103600083015261448a81613d61565b9050919050565b600060208201905081810360008301526144aa81613dc7565b9050919050565b600060208201905081810360008301526144ca81613e07565b9050919050565b600060208201905081810360008301526144ea81613e47565b9050919050565b6000602082019050818103600083015261450a81613e87565b9050919050565b6000602082019050818103600083015261452a81613ec7565b9050919050565b6000602082019050818103600083015261454a81613f07565b9050919050565b6000602082019050818103600083015261456a81613f47565b9050919050565b6000602082019050818103600083015261458a81613f87565b9050919050565b600060208201905081810360008301526145aa81613fc7565b9050919050565b600060208201905081810360008301526145ca81614007565b9050919050565b600060208201905081810360008301526145ea81614047565b9050919050565b6000602082019050818103600083015261460a81614087565b9050919050565b6000602082019050818103600083015261462a816140e1565b9050919050565b6000602082019050818103600083015261464a81614121565b9050919050565b6000602082019050818103600083015261466a81614161565b9050919050565b6000602082019050818103600083015261468a816141a1565b9050919050565b600060208201905081810360008301526146aa81614207565b9050919050565b60006060820190506146c66000830184614247565b92915050565b600060208201905081810360008301526146e68184614289565b905092915050565b60006020820190506147036000830184614321565b92915050565b600060608201905061471e6000830186614321565b61472b6020830185613bec565b6147386040830184614321565b949350505050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614799826147da565b9050919050565b60006147ab826147da565b9050919050565b60008115159050919050565b6000819050919050565b60006147d38261478e565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614831578082015181840152602081019050614816565b83811115614840576000848401525b50505050565b6000601f19601f8301169050919050565b6148608161478e565b811461486b57600080fd5b50565b614877816147a0565b811461488257600080fd5b50565b61488e816147b2565b811461489957600080fd5b50565b6148a5816147be565b81146148b057600080fd5b50565b6148bc816147c8565b81146148c757600080fd5b50565b6148d3816147fa565b81146148de57600080fd5b5056fea26469706673582212204691880bc73a3a5b5299ccfb8b2ad51049b4b3890c3bd5de4ea19f3f4cbb123764736f6c634300060a003300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102695760003560e01c80637c0a893d11610151578063cef701f2116100c3578063e87c81fd11610087578063e87c81fd1461072e578063e8913e3a1461074a578063f2fde38b14610766578063f48009cc14610782578063f73f5c0e146107b2578063fc0c546a146107d057610269565b8063cef701f214610666578063da5c2cec14610682578063decf3f9f146106b2578063e23c5063146106ce578063e6c65bb8146106fe57610269565b80639ba36e2d116101155780639ba36e2d146105ba578063a3d553ea146105d8578063af3105e5146105f6578063b761dc0714610612578063c2ba47441461062e578063ca31879d1461064a57610269565b80637c0a893d146105285780637cb41d36146105445780637e443414146105605780638da5cb5b1461057e57806394e577ec1461059c57610269565b80633de98319116101ea5780636c85cf67116101ae5780636c85cf67146104525780636f77926b1461046e578063710d29de1461049e578063715018a6146104bc578063719d0d30146104c65780637338c25c146104f857610269565b80633de98319146103b25780634645b6dc146103ce5780634d78fdc6146103ea5780635c9fbd95146104065780635cb02dd81461043657610269565b8063271313291161023157806327131329146103105780632b550c491461032c5780632ba0de15146103485780632d04899f14610364578063379f8fc21461038257610269565b8063121d8fdd1461026e578063144fa6d71461028c578063163f6691146102a85780631d8c2502146102d85780632685e4c1146102f4575b600080fd5b6102766107ee565b60405161028391906143eb565b60405180910390f35b6102a660048036038101906102a191906138e5565b610812565b005b6102c260048036038101906102bd91906139c2565b6108ec565b6040516102cf91906146b1565b60405180910390f35b6102f260048036038101906102ed91906138e5565b6109c1565b005b61030e600480360381019061030991906138e5565b610b19565b005b61032a600480360381019061032591906138e5565b610c69565b005b610346600480360381019061034191906138e5565b610e38565b005b610362600480360381019061035d9190613b8b565b611007565b005b61036c611123565b60405161037991906146ee565b60405180910390f35b61039c60048036038101906103979190613b46565b61112a565b6040516103a991906146cc565b60405180910390f35b6103cc60048036038101906103c79190613b8b565b611219565b005b6103e860048036038101906103e39190613aa5565b611335565b005b61040460048036038101906103ff91906138e5565b6114c0565b005b610420600480360381019061041b91906138e5565b611610565b60405161042d919061438c565b60405180910390f35b610450600480360381019061044b919061390e565b611643565b005b61046c60048036038101906104679190613937565b611789565b005b610488600480360381019061048391906138e5565b6118af565b60405161049591906146cc565b60405180910390f35b6104a6611b1e565b6040516104b391906143eb565b60405180910390f35b6104c4611b42565b005b6104e060048036038101906104db91906139c2565b611c97565b6040516104ef93929190614709565b60405180910390f35b610512600480360381019061050d91906139c2565b611cee565b60405161051f91906143d0565b60405180910390f35b610542600480360381019061053d91906138e5565b611d4f565b005b61055e60048036038101906105599190613a4d565b611ea0565b005b610568612206565b60405161057591906143eb565b60405180910390f35b61058661222a565b604051610593919061438c565b60405180910390f35b6105a4612253565b6040516105b191906143eb565b60405180910390f35b6105c2612277565b6040516105cf91906146ee565b60405180910390f35b6105e061227d565b6040516105ed91906146ee565b60405180910390f35b610610600480360381019061060b91906139fe565b612283565b005b61062c600480360381019061062791906138e5565b612464565b005b610648600480360381019061064391906138e5565b6125b4565b005b610664600480360381019061065f9190613b0a565b6126d8565b005b610680600480360381019061067b9190613973565b61282b565b005b61069c60048036038101906106979190613937565b61299b565b6040516106a991906143d0565b60405180910390f35b6106cc60048036038101906106c791906138e5565b612a3e565b005b6106e860048036038101906106e391906139c2565b612bde565b6040516106f591906146ee565b60405180910390f35b610718600480360381019061071391906138e5565b612c3c565b604051610725919061438c565b60405180910390f35b610748600480360381019061074391906138e5565b612c6f565b005b610764600480360381019061075f9190613a4d565b612d4a565b005b610780600480360381019061077b91906138e5565b6130a8565b005b61079c60048036038101906107979190613973565b61326c565b6040516107a991906143d0565b60405180910390f35b6107ba613310565b6040516107c791906143eb565b60405180910390f35b6107d8613334565b6040516107e5919061438c565b60405180910390f35b7f43414e5f4255524e00000000000000000000000000000000000000000000000081565b61081a61335a565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146108a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089f90614551565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6108f46136c4565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020604051806060016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481525050905092915050565b6109c961335a565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4e90614551565b60405180910390fd5b610a6081613362565b610a9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a96906145f1565b60405180910390fd5b610ad3610aab82611610565b7f43414e5f4255524e0000000000000000000000000000000000000000000000006000612283565b8073ffffffffffffffffffffffffffffffffffffffff167ffd9027ffd4896af21b70f1dc6e0fbd869797268e9b3de5a5b19fa69d7f0da82e60405160405180910390a250565b610b2161335a565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610baf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba690614551565b60405180910390fd5b610bb881613362565b610bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bee906145f1565b60405180910390fd5b610c23817f4b59435f414d4c5f5645524946494544000000000000000000000000000000006001612283565b8073ffffffffffffffffffffffffffffffffffffffff167f520780af5c8a69895fcdcdc0f0c157cdf2d47725fe797f3304b0cf7a7b1588f960405160405180910390a250565b610c7161335a565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf690614551565b60405180910390fd5b610d0881613362565b610d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3e906145f1565b60405180910390fd5b610d73817f4b59435f414d4c5f5645524946494544000000000000000000000000000000006001612283565b610da7610d7f82611610565b7f43414e5f4255524e0000000000000000000000000000000000000000000000006001612283565b8073ffffffffffffffffffffffffffffffffffffffff167f520780af5c8a69895fcdcdc0f0c157cdf2d47725fe797f3304b0cf7a7b1588f960405160405180910390a2610df381611610565b73ffffffffffffffffffffffffffffffffffffffff167fd420aa79ad2143dd8965d0807da177f7fdc7443b216353845ded4b39e3b1a63560405160405180910390a250565b610e4061335a565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ece576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec590614551565b60405180910390fd5b610ed781613362565b610f16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0d906145f1565b60405180910390fd5b610f42817f4b59435f414d4c5f5645524946494544000000000000000000000000000000006000612283565b610f76610f4e82611610565b7f43414e5f4255524e0000000000000000000000000000000000000000000000006000612283565b8073ffffffffffffffffffffffffffffffffffffffff167fc9275786273ecbff55d3e517a7f4db5e7ff2c61d348bd3481c18724294b17ecf60405160405180910390a2610fc281611610565b73ffffffffffffffffffffffffffffffffffffffff167ffd9027ffd4896af21b70f1dc6e0fbd869797268e9b3de5a5b19fa69d7f0da82e60405160405180910390a250565b61100f61335a565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461109d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109490614551565b60405180910390fd5b6007548111156110e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d990614691565b60405180910390fd5b806006819055507fa287eb4ef1c4733956e020a33db5094281af463deec6afed00b0fb688544e4618160405161111891906146ee565b60405180910390a150565b6210000081565b6111326136fb565b61113a61335a565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bf90614551565b60405180910390fd5b611211600484846040516111dd929190614347565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166118af565b905092915050565b61122161335a565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a690614551565b60405180910390fd5b8060065411156112f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112eb90614691565b60405180910390fd5b806007819055507f1306d6fd6388a556e2143ed67b6c616d89be1d0d9a30f0ef8abb9a3ec211ef008160405161132a91906146ee565b60405180910390a150565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bc90614651565b60405180910390fd5b60006113f1837f43414e5f4255524e000000000000000000000000000000000000000000000000612bde565b1415611432576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142990614511565b60405180910390fd5b600654811015611477576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146e90614591565b60405180910390fd5b6007548111156114bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b3906145b1565b60405180910390fd5b5050565b6114c861335a565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154d90614551565b60405180910390fd5b61155f81613398565b61159e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159590614571565b60405180910390fd5b6115ca817f49535f424c4f434b4c49535445440000000000000000000000000000000000006000612283565b8073ffffffffffffffffffffffffffffffffffffffff167ff089583afd1eb27f1422606229fc6fa8a842303d1a09fbbeb24459589a3a2caa60405160405180910390a250565b600061163c827f555345525f52454445454d5f4144445245535300000000000000000000000000612bde565b9050919050565b61164b61335a565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d090614551565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff16476040516116ff90614377565b60006040518083038185875af1925050503d806000811461173c576040519150601f19603f3d011682016040523d82523d6000602084013e611741565b606091505b5050905080611785576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177c906144d1565b60405180910390fd5b5050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181090614651565b60405180910390fd5b61182282613398565b15611862576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185990614491565b60405180910390fd5b61186b81613398565b156118ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a290614491565b60405180910390fd5b5050565b6118b76136fb565b6118bf61335a565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461194d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194490614551565b60405180910390fd5b81816000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a585780601f10611a2d57610100808354040283529160200191611a58565b820191906000526020600020905b815481529060010190602001808311611a3b57829003601f168201915b50505050508160200181905250611a6e82611610565b816040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611aae82613398565b816060019015159081151581525050611ac6826133ce565b8160800190151590811515815250506001611b09611ae384611610565b7f43414e5f4255524e000000000000000000000000000000000000000000000000612bde565b148160a0019015159081151581525050919050565b7f555345525f52454445454d5f414444524553530000000000000000000000000081565b611b4a61335a565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcf90614551565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6001602052816000526040600020602052806000526040600020600091509150508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154905083565b600080600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020600001541415905092915050565b611d5761335a565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611de5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddc90614551565b60405180910390fd5b611dee81613398565b15611e2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2590614611565b60405180910390fd5b611e5a817f49535f424c4f434b4c49535445440000000000000000000000000000000000006001612283565b8073ffffffffffffffffffffffffffffffffffffffff167f97a5d41a04181a30f4f25bf09bde80dfc43c7dc33265b1660b7aadc8e4bbb28860405160405180910390a250565b611ea861335a565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2d90614551565b60405180910390fd5b611f3f83613362565b15611f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7690614451565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660048383604051611fa9929190614347565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461202e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612025906144f1565b60405180910390fd5b6005600081548092919060010191905055506005546210000011612087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207e90614531565b60405180910390fd5b6120ca6005547f52454445454d5f414444524553535f55534552000000000000000000000000008573ffffffffffffffffffffffffffffffffffffffff16612283565b6120f7837f555345525f52454445454d5f4144445245535300000000000000000000000000600554612283565b8181600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209190612145929190613763565b508260048383604051612159929190614347565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060055473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f4f0153fa13d714b9b8b36d41bd77776f3514ca58a227232d11eb8e3b1736509560405160405180910390a3505050565b7f52454445454d5f414444524553535f555345520000000000000000000000000081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f49535f424c4f434b4c495354454400000000000000000000000000000000000081565b60075481565b60065481565b61228b61335a565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231090614551565b60405180910390fd5b60405180606001604052808281526020013373ffffffffffffffffffffffffffffffffffffffff16815260200142815250600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008481526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604082015181600201559050503373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f1513071108ab63e9d17b31f5c506085810b41da99b3df843679551bda24092978484604051612457929190614406565b60405180910390a3505050565b61246c61335a565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f190614551565b60405180910390fd5b61250381613362565b612542576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612539906145f1565b60405180910390fd5b61256e817f4b59435f414d4c5f5645524946494544000000000000000000000000000000006000612283565b8073ffffffffffffffffffffffffffffffffffffffff167fc9275786273ecbff55d3e517a7f4db5e7ff2c61d348bd3481c18724294b17ecf60405160405180910390a250565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612644576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263b90614651565b60405180910390fd5b61264d816133ce565b61268c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612683906145d1565b60405180910390fd5b61269581613398565b156126d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126cc90614491565b60405180910390fd5b50565b6126e061335a565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461276e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276590614551565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016127a9919061438c565b60206040518083038186803b1580156127c157600080fd5b505afa1580156127d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127f99190613bb4565b905061282682828573ffffffffffffffffffffffffffffffffffffffff166134049092919063ffffffff16565b505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146128bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b290614651565b60405180910390fd5b6128c483613398565b15612904576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128fb90614491565b60405180910390fd5b61290d82613398565b1561294d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294490614491565b60405180910390fd5b61295681613398565b15612996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298d90614491565b60405180910390fd5b505050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612a2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2490614651565b60405180910390fd5b612a368261348a565b905092915050565b612a4661335a565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ad4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612acb90614551565b60405180910390fd5b612add81613362565b612b1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b13906145f1565b60405180910390fd5b612b25816133ce565b612b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5b906145d1565b60405180910390fd5b612b98612b7082611610565b7f43414e5f4255524e0000000000000000000000000000000000000000000000006001612283565b8073ffffffffffffffffffffffffffffffffffffffff167fd420aa79ad2143dd8965d0807da177f7fdc7443b216353845ded4b39e3b1a63560405160405180910390a250565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060000154905092915050565b6000612c68827f52454445454d5f414444524553535f5553455200000000000000000000000000612bde565b9050919050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612cff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf690614651565b60405180910390fd5b612d0881613398565b612d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3e906144b1565b60405180910390fd5b50565b612d5261335a565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612de0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd790614551565b60405180910390fd5b612de983613362565b612e28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1f906145f1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660048383604051612e52929190614347565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ece906144f1565b60405180910390fd5b6060600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612fac5780601f10612f8157610100808354040283529160200191612fac565b820191906000526020600020905b815481529060010190602001808311612f8f57829003601f168201915b505050505090508282600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209190613001929190613763565b508360048484604051613015929190614347565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506004816040516130719190614360565b908152602001604051809103902060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550505050565b6130b061335a565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461313e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313590614551565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156131ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a590614471565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132f590614651565b60405180910390fd5b6133078261348a565b90509392505050565b7f4b59435f414d4c5f56455249464945440000000000000000000000000000000081565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b60008061338f837f555345525f52454445454d5f4144445245535300000000000000000000000000612bde565b14159050919050565b600060016133c6837f49535f424c4f434b4c4953544544000000000000000000000000000000000000612bde565b149050919050565b6000806133fb837f4b59435f414d4c5f564552494649454400000000000000000000000000000000612bde565b14159050919050565b6134858363a9059cbb60e01b84846040516024016134239291906143a7565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506134af565b505050565b6000621000008273ffffffffffffffffffffffffffffffffffffffff16109050919050565b6060613511826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166135769092919063ffffffff16565b905060008151111561357157808060200190518101906135319190613ae1565b613570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356790614671565b60405180910390fd5b5b505050565b6060613585848460008561358e565b90509392505050565b6060613599856136b1565b6135d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135cf90614631565b60405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040516136029190614330565b60006040518083038185875af1925050503d806000811461363f576040519150601f19603f3d011682016040523d82523d6000602084013e613644565b606091505b509150915081156136595780925050506136a9565b60008151111561366c5780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136a0919061442f565b60405180910390fd5b949350505050565b600080823b905060008111915050919050565b604051806060016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081525090565b6040518060c00160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160608152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000151581526020016000151581526020016000151581525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106137a457803560ff19168380011785556137d2565b828001600101855582156137d2579182015b828111156137d15782358255916020019190600101906137b6565b5b5090506137df91906137e3565b5090565b61380591905b808211156138015760008160009055506001016137e9565b5090565b90565b60008135905061381781614857565b92915050565b60008135905061382c8161486e565b92915050565b60008151905061384181614885565b92915050565b6000813590506138568161489c565b92915050565b60008135905061386b816148b3565b92915050565b60008083601f84011261388357600080fd5b8235905067ffffffffffffffff81111561389c57600080fd5b6020830191508360018202830111156138b457600080fd5b9250929050565b6000813590506138ca816148ca565b92915050565b6000815190506138df816148ca565b92915050565b6000602082840312156138f757600080fd5b600061390584828501613808565b91505092915050565b60006020828403121561392057600080fd5b600061392e8482850161381d565b91505092915050565b6000806040838503121561394a57600080fd5b600061395885828601613808565b925050602061396985828601613808565b9150509250929050565b60008060006060848603121561398857600080fd5b600061399686828701613808565b93505060206139a786828701613808565b92505060406139b886828701613808565b9150509250925092565b600080604083850312156139d557600080fd5b60006139e385828601613808565b92505060206139f485828601613847565b9150509250929050565b600080600060608486031215613a1357600080fd5b6000613a2186828701613808565b9350506020613a3286828701613847565b9250506040613a43868287016138bb565b9150509250925092565b600080600060408486031215613a6257600080fd5b6000613a7086828701613808565b935050602084013567ffffffffffffffff811115613a8d57600080fd5b613a9986828701613871565b92509250509250925092565b60008060408385031215613ab857600080fd5b6000613ac685828601613808565b9250506020613ad7858286016138bb565b9150509250929050565b600060208284031215613af357600080fd5b6000613b0184828501613832565b91505092915050565b60008060408385031215613b1d57600080fd5b6000613b2b8582860161385c565b9250506020613b3c85828601613808565b9150509250929050565b60008060208385031215613b5957600080fd5b600083013567ffffffffffffffff811115613b7357600080fd5b613b7f85828601613871565b92509250509250929050565b600060208284031215613b9d57600080fd5b6000613bab848285016138bb565b91505092915050565b600060208284031215613bc657600080fd5b6000613bd4848285016138d0565b91505092915050565b613be68161478e565b82525050565b613bf58161478e565b82525050565b613c04816147b2565b82525050565b613c13816147b2565b82525050565b613c22816147be565b82525050565b6000613c3382614740565b613c3d8185614756565b9350613c4d818560208601614813565b80840191505092915050565b6000613c658385614783565b9350613c72838584614804565b82840190509392505050565b6000613c898261474b565b613c938185614761565b9350613ca3818560208601614813565b613cac81614846565b840191505092915050565b6000613cc28261474b565b613ccc8185614772565b9350613cdc818560208601614813565b613ce581614846565b840191505092915050565b6000613cfb8261474b565b613d058185614783565b9350613d15818560208601614813565b80840191505092915050565b6000613d2e600a83614772565b91507f75736572206578697374000000000000000000000000000000000000000000006000830152602082019050919050565b6000613d6e602683614772565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613dd4600b83614772565b91507f626c6f636b6c69737465640000000000000000000000000000000000000000006000830152602082019050919050565b6000613e14600c83614772565b91507f63616e206e6f74207769706500000000000000000000000000000000000000006000830152602082019050919050565b6000613e54601483614772565b91507f4661696c656420746f2073656e642045746865720000000000000000000000006000830152602082019050919050565b6000613e94601083614772565b91507f696420616c72656164792074616b656e000000000000000000000000000000006000830152602082019050919050565b6000613ed4600c83614772565b91507f63616e206e6f74206275726e00000000000000000000000000000000000000006000830152602082019050919050565b6000613f14601183614772565b91507f6d617820616c6c6f7765642075736572730000000000000000000000000000006000830152602082019050919050565b6000613f54602083614772565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613f94601083614772565b91507f75736572206e6f7420626c6f636b6564000000000000000000000000000000006000830152602082019050919050565b6000613fd4600f83614772565b91507f62656c6f77206d696e20626f756e6400000000000000000000000000000000006000830152602082019050919050565b6000614014600f83614772565b91507f61626f7665206d617820626f756e6400000000000000000000000000000000006000830152602082019050919050565b6000614054601083614772565b91507f7573657220686173206e6f74204b5943000000000000000000000000000000006000830152602082019050919050565b6000614094600a83614772565b91507f6e6f7420612075736572000000000000000000000000000000000000000000006000830152602082019050919050565b60006140d4600083614756565b9150600082019050919050565b60006140ee601483614772565b91507f7573657220616c726561647920626c6f636b65640000000000000000000000006000830152602082019050919050565b600061412e601d83614772565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b600061416e600a83614772565b91507f6f6e6c7920546f6b656e000000000000000000000000000000000000000000006000830152602082019050919050565b60006141ae602a83614772565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b6000614214601383614772565b91507f6d696e20626967676572207468616e206d6178000000000000000000000000006000830152602082019050919050565b60608201600082015161425d6000850182614312565b5060208201516142706020850182613bdd565b5060408201516142836040850182614312565b50505050565b600060c0830160008301516142a16000860182613bdd565b50602083015184820360208601526142b98282613c7e565b91505060408301516142ce6040860182613bdd565b5060608301516142e16060860182613bfb565b5060808301516142f46080860182613bfb565b5060a083015161430760a0860182613bfb565b508091505092915050565b61431b816147fa565b82525050565b61432a816147fa565b82525050565b600061433c8284613c28565b915081905092915050565b6000614354828486613c59565b91508190509392505050565b600061436c8284613cf0565b915081905092915050565b6000614382826140c7565b9150819050919050565b60006020820190506143a16000830184613bec565b92915050565b60006040820190506143bc6000830185613bec565b6143c96020830184614321565b9392505050565b60006020820190506143e56000830184613c0a565b92915050565b60006020820190506144006000830184613c19565b92915050565b600060408201905061441b6000830185613c19565b6144286020830184614321565b9392505050565b600060208201905081810360008301526144498184613cb7565b905092915050565b6000602082019050818103600083015261446a81613d21565b9050919050565b6000602082019050818103600083015261448a81613d61565b9050919050565b600060208201905081810360008301526144aa81613dc7565b9050919050565b600060208201905081810360008301526144ca81613e07565b9050919050565b600060208201905081810360008301526144ea81613e47565b9050919050565b6000602082019050818103600083015261450a81613e87565b9050919050565b6000602082019050818103600083015261452a81613ec7565b9050919050565b6000602082019050818103600083015261454a81613f07565b9050919050565b6000602082019050818103600083015261456a81613f47565b9050919050565b6000602082019050818103600083015261458a81613f87565b9050919050565b600060208201905081810360008301526145aa81613fc7565b9050919050565b600060208201905081810360008301526145ca81614007565b9050919050565b600060208201905081810360008301526145ea81614047565b9050919050565b6000602082019050818103600083015261460a81614087565b9050919050565b6000602082019050818103600083015261462a816140e1565b9050919050565b6000602082019050818103600083015261464a81614121565b9050919050565b6000602082019050818103600083015261466a81614161565b9050919050565b6000602082019050818103600083015261468a816141a1565b9050919050565b600060208201905081810360008301526146aa81614207565b9050919050565b60006060820190506146c66000830184614247565b92915050565b600060208201905081810360008301526146e68184614289565b905092915050565b60006020820190506147036000830184614321565b92915050565b600060608201905061471e6000830186614321565b61472b6020830185613bec565b6147386040830184614321565b949350505050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614799826147da565b9050919050565b60006147ab826147da565b9050919050565b60008115159050919050565b6000819050919050565b60006147d38261478e565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614831578082015181840152602081019050614816565b83811115614840576000848401525b50505050565b6000601f19601f8301169050919050565b6148608161478e565b811461486b57600080fd5b50565b614877816147a0565b811461488257600080fd5b50565b61488e816147b2565b811461489957600080fd5b50565b6148a5816147be565b81146148b057600080fd5b50565b6148bc816147c8565b81146148c757600080fd5b50565b6148d3816147fa565b81146148de57600080fd5b5056fea26469706673582212204691880bc73a3a5b5299ccfb8b2ad51049b4b3890c3bd5de4ea19f3f4cbb123764736f6c634300060a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-----Decoded View---------------
Arg [0] : _token (address): 0x0000000000000000000000000000000000000000
Arg [1] : _minBurnBound (uint256): 0
Arg [2] : _maxBurnBound (uint256): 115792089237316195423570985008687907853269984665640564039457584007913129639935
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [2] : ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
Deployed Bytecode Sourcemap
24553:13018:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24807:45;;;:::i;:::-;;;;;;;;;;;;;;;;26314:84;;;;;;;;;;;;;;;;:::i;:::-;;23284:190;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;31243:238;;;;;;;;;;;;;;;;:::i;:::-;;29797:218;;;;;;;;;;;;;;;;:::i;:::-;;31792:351;;;;;;;;;;;;;;;;:::i;:::-;;32436:357;;;;;;;;;;;;;;;;:::i;:::-;;26406:229;;;;;;;;;;;;;;;;:::i;:::-;;24609:59;;;:::i;:::-;;;;;;;;;;;;;;;;28829:181;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;26643:229;;;;;;;;;;;;;;;;:::i;:::-;;36836:330;;;;;;;;;;;;;;;;:::i;:::-;;33424:221;;;;;;;;;;;;;;;;:::i;:::-;;34043:157;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;22064:185;;;;;;;;;;;;;;;;:::i;:::-;;35796:235;;;;;;;;;;;;;;;;:::i;:::-;;28241:448;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;24859:67;;;:::i;:::-;;;;;;;;;;;;;;;;20703:148;;;:::i;:::-;;22517:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;23096:180;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;33001:222;;;;;;;;;;;;;;;;:::i;:::-;;27332:772;;;;;;;;;;;;;;;;:::i;:::-;;24933:67;;;:::i;:::-;;;;;;;;;;;;;;;;20061:79;;;:::i;:::-;;;;;;;;;;;;;;;;24675:57;;;:::i;:::-;;;;;;;;;;;;;;;;25221:27;;;:::i;:::-;;;;;;;;;;;;;;;;25187;;;:::i;:::-;;;;;;;;;;;;;;;;22749:339;;;;;;;;;;;;;;;;:::i;:::-;;30224:222;;;;;;;;;;;;;;;;:::i;:::-;;36536:175;;;;;;;;;;;;;;;;:::i;:::-;;21743:176;;;;;;;;;;;;;;;;:::i;:::-;;36132:306;;;;;;;;;;;;;;;;:::i;:::-;;35229:203;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;30721:294;;;;;;;;;;;;;;;;:::i;:::-;;23482:183;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;33744:207;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;37249:132;;;;;;;;;;;;;;;;:::i;:::-;;29233:358;;;;;;;;;;;;;;;;:::i;:::-;;21006:244;;;;;;;;;;;;;;;;:::i;:::-;;35507:200;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;24739:61;;;:::i;:::-;;;;;;;;;;;;;;;;25009:20;;;:::i;:::-;;;;;;;;;;;;;;;;24807:45;;;:::o;26314:84::-;20283:12;:10;:12::i;:::-;20273:22;;:6;;;;;;;;;;;:22;;;20265:67;;;;;;;;;;;;;;;;;;;;;;26384:6:::1;26376:5;;:14;;;;;;;;;;;;;;;;;;26314:84:::0;:::o;23284:190::-;23388:25;;:::i;:::-;23438:10;:16;23449:4;23438:16;;;;;;;;;;;;;;;:28;23455:10;23438:28;;;;;;;;;;;23431:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23284:190;;;;:::o;31243:238::-;20283:12;:10;:12::i;:::-;20273:22;;:6;;;;;;;;;;;:22;;;20265:67;;;;;;;;;;;;;;;;;;;;;;31327:17:::1;31335:8;31327:7;:17::i;:::-;31319:40;;;;;;;;;;;;;;;;;;;;;;31372:53;31385:26;31402:8;31385:16;:26::i;:::-;31413:8;31423:1;31372:12;:53::i;:::-;31464:8;31443:30;;;;;;;;;;;;31243:238:::0;:::o;29797:218::-;20283:12;:10;:12::i;:::-;20273:22;;:6;;;;;;;;;;;:22;;;20265:67;;;;;;;;;;;;;;;;;;;;;;29876:17:::1;29884:8;29876:7;:17::i;:::-;29868:40;;;;;;;;;;;;;;;;;;;;;;29921:43;29934:8;29944:16;29962:1;29921:12;:43::i;:::-;29998:8;29982:25;;;;;;;;;;;;29797:218:::0;:::o;31792:351::-;20283:12;:10;:12::i;:::-;20273:22;;:6;;;;;;;;;;;:22;;;20265:67;;;;;;;;;;;;;;;;;;;;;;31877:17:::1;31885:8;31877:7;:17::i;:::-;31869:40;;;;;;;;;;;;;;;;;;;;;;31922:43;31935:8;31945:16;31963:1;31922:12;:43::i;:::-;31976:53;31989:26;32006:8;31989:16;:26::i;:::-;32017:8;32027:1;31976:12;:53::i;:::-;32063:8;32047:25;;;;;;;;;;;;32108:26;32125:8;32108:16;:26::i;:::-;32088:47;;;;;;;;;;;;31792:351:::0;:::o;32436:357::-;20283:12;:10;:12::i;:::-;20273:22;;:6;;;;;;;;;;;:22;;;20265:67;;;;;;;;;;;;;;;;;;;;;;32524:17:::1;32532:8;32524:7;:17::i;:::-;32516:40;;;;;;;;;;;;;;;;;;;;;;32569:43;32582:8;32592:16;32610:1;32569:12;:43::i;:::-;32623:53;32636:26;32653:8;32636:16;:26::i;:::-;32664:8;32674:1;32623:12;:53::i;:::-;32712:8;32694:27;;;;;;;;;;;;32758:26;32775:8;32758:16;:26::i;:::-;32737:48;;;;;;;;;;;;32436:357:::0;:::o;26406:229::-;20283:12;:10;:12::i;:::-;20273:22;;:6;;;;;;;;;;;:22;;;20265:67;;;;;;;;;;;;;;;;;;;;;;26507:12:::1;;26490:13;:29;;26482:61;;;;;;;;;;;;;;;;;;;;;;26569:13;26554:12;:28;;;;26600:27;26613:13;26600:27;;;;;;;;;;;;;;;26406:229:::0;:::o;24609:59::-;24660:8;24609:59;:::o;28829:181::-;28938:16;;:::i;:::-;20283:12;:10;:12::i;:::-;20273:22;;:6;;;;;;;;;;;:22;;;20265:67;;;;;;;;;;;;;;;;;;;;;;28979:23:::1;28987:9;28997:3;;28987:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28979:7;:23::i;:::-;28972:30;;28829:181:::0;;;;:::o;26643:229::-;20283:12;:10;:12::i;:::-;20273:22;;:6;;;;;;;;;;;:22;;;20265:67;;;;;;;;;;;;;;;;;;;;;;26743:13:::1;26727:12;;:29;;26719:61;;;;;;;;;;;;;;;;;;;;;;26806:13;26791:12;:28;;;;26837:27;26850:13;26837:27;;;;;;;;;;;;;;;26643:229:::0;:::o;36836:330::-;37528:5;;;;;;;;;;;37514:19;;:10;:19;;;37506:42;;;;;;;;;;;;;;;;;;;;;;37016:1:::1;36978:34;36996:5;37003:8;36978:17;:34::i;:::-;:39;;36970:64;;;;;;;;;;;;;;;;;;;;;;37064:12;;37053:7;:23;;37045:51;;;;;;;;;;;;;;;;;;;;;;37126:12;;37115:7;:23;;37107:51;;;;;;;;;;;;;;;;;;;;;;36836:330:::0;;:::o;33424:221::-;20283:12;:10;:12::i;:::-;20273:22;;:6;;;;;;;;;;;:22;;;20265:67;;;;;;;;;;;;;;;;;;;;;;33502:20:::1;33513:8;33502:10;:20::i;:::-;33494:49;;;;;;;;;;;;;;;;;;;;;;33554:41;33567:8;33577:14;33593:1;33554:12;:41::i;:::-;33628:8;33613:24;;;;;;;;;;;;33424:221:::0;:::o;34043:157::-;34108:7;34143:48;34161:8;34171:19;34143:17;:48::i;:::-;34128:64;;34043:157;;;:::o;22064:185::-;20283:12;:10;:12::i;:::-;20273:22;;:6;;;;;;;;;;;:22;;;20265:67;;;;;;;;;;;;;;;;;;;;;;22136:9:::1;22151:3;:8;;22167:21;22151:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22135:58;;;22212:4;22204:37;;;;;;;;;;;;;;;;;;;;;;20343:1;22064:185:::0;:::o;35796:235::-;37528:5;;;;;;;;;;;37514:19;;:10;:19;;;37506:42;;;;;;;;;;;;;;;;;;;;;;35939:17:::1;35950:5;35939:10;:17::i;:::-;35938:18;35930:42;;;;;;;;;;;;;;;;;;;;;;35992:15;36003:3;35992:10;:15::i;:::-;35991:16;35983:40;;;;;;;;;;;;;;;;;;;;;;35796:235:::0;;:::o;28241:448::-;28343:16;;:::i;:::-;20283:12;:10;:12::i;:::-;20273:22;;:6;;;;;;;;;;;:22;;;20265:67;;;;;;;;;;;;;;;;;;;;;;28392:8:::1;28377:4;:12;;:23;;;;;;;;;::::0;::::1;28421:7;:17;28429:8;28421:17;;;;;;;;;;;;;;;28411:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:4;:7;;:27;;;;28470:26;28487:8;28470:16;:26::i;:::-;28449:4;:18;;:47;;;;;;;;;::::0;::::1;28522:20;28533:8;28522:10;:20::i;:::-;28507:4;:12;;:35;;;;;;;;;::::0;::::1;28564:18;28573:8;28564;:18::i;:::-;28553:4;:8;;:29;;;;;;;;;::::0;::::1;28680:1;28621:55;28639:26;28656:8;28639:16;:26::i;:::-;28667:8;28621:17;:55::i;:::-;:60;28593:4;:12;;:88;;;;;;;;;::::0;::::1;28241:448:::0;;;:::o;24859:67::-;;;:::o;20703:148::-;20283:12;:10;:12::i;:::-;20273:22;;:6;;;;;;;;;;;:22;;;20265:67;;;;;;;;;;;;;;;;;;;;;;20810:1:::1;20773:40;;20794:6;::::0;::::1;;;;;;;;;20773:40;;;;;;;;;;;;20841:1;20824:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;20703:148::o:0;22517:71::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23096:180::-;23200:4;23267:1;23229:10;:16;23240:4;23229:16;;;;;;;;;;;;;;;:28;23246:10;23229:28;;;;;;;;;;;:34;;;:39;;23222:46;;23096:180;;;;:::o;33001:222::-;20283:12;:10;:12::i;:::-;20273:22;;:6;;;;;;;;;;;:22;;;20265:67;;;;;;;;;;;;;;;;;;;;;;33078:20:::1;33089:8;33078:10;:20::i;:::-;33077:21;33069:54;;;;;;;;;;;;;;;;;;;;;;33134:41;33147:8;33157:14;33173:1;33134:12;:41::i;:::-;33206:8;33193:22;;;;;;;;;;;;33001:222:::0;:::o;27332:772::-;20283:12;:10;:12::i;:::-;20273:22;;:6;;;;;;;;;;;:22;;;20265:67;;;;;;;;;;;;;;;;;;;;;;27456:17:::1;27464:8;27456:7;:17::i;:::-;27455:18;27447:41;;;;;;;;;;;;;;;;;;;;;;27533:1;27507:28;;:9;27517:3;;27507:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:28;;;27499:57;;;;;;;;;;;;;;;;;;;;;;27569:22;;:24;;;;;;;;;;;;;27653:22;;24660:8;27626:49;27604:116;;;;;;;;;;;;;;;;;;;;;;27733:135;27768:22;;27806:19;27848:8;27840:17;;27733:12;:135::i;:::-;27881:67;27894:8;27904:19;27925:22;;27881:12;:67::i;:::-;27981:3;;27961:7;:17;27969:8;27961:17;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;28012:8;27995:9;28005:3;;27995:14;;;;;;;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;28072:22;;28038:58;;28054:8;28038:58;;;;;;;;;;;;27332:772:::0;;;:::o;24933:67::-;;;:::o;20061:79::-;20099:7;20126:6;;;;;;;;;;;20119:13;;20061:79;:::o;24675:57::-;;;:::o;25221:27::-;;;;:::o;25187:::-;;;;:::o;22749:339::-;20283:12;:10;:12::i;:::-;20273:22;;:6;;;;;;;;;;;:22;;;20265:67;;;;;;;;;;;;;;;;;;;;;;22914:100:::1;;;;;;;;22942:6;22914:100;;;;22963:10;22914:100;;;;;;22988:15;22914:100;;::::0;22883:10:::1;:16;22894:4;22883:16;;;;;;;;;;;;;;;:28;22900:10;22883:28;;;;;;;;;;;:131;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23069:10;23030:50;;23043:4;23030:50;;;23049:10;23061:6;23030:50;;;;;;;;;;;;;;;;22749:339:::0;;;:::o;30224:222::-;20283:12;:10;:12::i;:::-;20273:22;;:6;;;;;;;;;;;:22;;;20265:67;;;;;;;;;;;;;;;;;;;;;;30305:17:::1;30313:8;30305:7;:17::i;:::-;30297:40;;;;;;;;;;;;;;;;;;;;;;30350:43;30363:8;30373:16;30391:1;30350:12;:43::i;:::-;30429:8;30411:27;;;;;;;;;;;;30224:222:::0;:::o;36536:175::-;37528:5;;;;;;;;;;;37514:19;;:10;:19;;;37506:42;;;;;;;;;;;;;;;;;;;;;;36618:13:::1;36627:3;36618:8;:13::i;:::-;36610:42;;;;;;;;;;;;;;;;;;;;;;36672:15;36683:3;36672:10;:15::i;:::-;36671:16;36663:40;;;;;;;;;;;;;;;;;;;;;;36536:175:::0;:::o;21743:176::-;20283:12;:10;:12::i;:::-;20273:22;;:6;;;;;;;;;;;:22;;;20265:67;;;;;;;;;;;;;;;;;;;;;;21820:15:::1;21838:5;:15;;;21862:4;21838:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21820:48;;21879:32;21898:3;21903:7;21879:5;:18;;;;:32;;;;;:::i;:::-;20343:1;21743:176:::0;;:::o;36132:306::-;37528:5;;;;;;;;;;;37514:19;;:10;:19;;;37506:42;;;;;;;;;;;;;;;;;;;;;;36290:20:::1;36301:8;36290:10;:20::i;:::-;36289:21;36281:45;;;;;;;;;;;;;;;;;;;;;;36346:17;36357:5;36346:10;:17::i;:::-;36345:18;36337:42;;;;;;;;;;;;;;;;;;;;;;36399:15;36410:3;36399:10;:15::i;:::-;36398:16;36390:40;;;;;;;;;;;;;;;;;;;;;;36132:306:::0;;;:::o;35229:203::-;35363:4;37528:5;;;;;;;;;;;37514:19;;:10;:19;;;37506:42;;;;;;;;;;;;;;;;;;;;;;35392:32:::1;35413:10;35392:20;:32::i;:::-;35385:39;;35229:203:::0;;;;:::o;30721:294::-;20283:12;:10;:12::i;:::-;20273:22;;:6;;;;;;;;;;;:22;;;20265:67;;;;;;;;;;;;;;;;;;;;;;30804:17:::1;30812:8;30804:7;:17::i;:::-;30796:40;;;;;;;;;;;;;;;;;;;;;;30855:18;30864:8;30855;:18::i;:::-;30847:47;;;;;;;;;;;;;;;;;;;;;;30907:53;30920:26;30937:8;30920:16;:26::i;:::-;30948:8;30958:1;30907:12;:53::i;:::-;30998:8;30978:29;;;;;;;;;;;;30721:294:::0;:::o;23482:183::-;23591:7;23623:10;:16;23634:4;23623:16;;;;;;;;;;;;;;;:28;23640:10;23623:28;;;;;;;;;;;:34;;;23616:41;;23482:183;;;;:::o;33744:207::-;33848:7;33888:54;33906:14;33922:19;33888:17;:54::i;:::-;33873:70;;33744:207;;;:::o;37249:132::-;37528:5;;;;;;;;;;;37514:19;;:10;:19;;;37506:42;;;;;;;;;;;;;;;;;;;;;;37336:20:::1;37347:8;37336:10;:20::i;:::-;37328:45;;;;;;;;;;;;;;;;;;;;;;37249:132:::0;:::o;29233:358::-;20283:12;:10;:12::i;:::-;20273:22;;:6;;;;;;;;;;;:22;;;20265:67;;;;;;;;;;;;;;;;;;;;;;29327:17:::1;29335:8;29327:7;:17::i;:::-;29319:40;;;;;;;;;;;;;;;;;;;;;;29404:1;29378:28;;:9;29388:3;;29378:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:28;;;29370:57;;;;;;;;;;;;;;;;;;;;;;29438:20;29461:7;:17;29469:8;29461:17;;;;;;;;;;;;;;;29438:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29509:3;;29489:7;:17;29497:8;29489:17;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;29540:8;29523:9;29533:3;;29523:14;;;;;;;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;29566:9;29576:6;29566:17;;;;;;;;;;;;;;;;;;;;;29559:24;;;;;;;;;;;20343:1;29233:358:::0;;;:::o;21006:244::-;20283:12;:10;:12::i;:::-;20273:22;;:6;;;;;;;;;;;:22;;;20265:67;;;;;;;;;;;;;;;;;;;;;;21115:1:::1;21095:22;;:8;:22;;;;21087:73;;;;;;;;;;;;;;;;;;;;;;21205:8;21176:38;;21197:6;::::0;::::1;;;;;;;;;21176:38;;;;;;;;;;;;21234:8;21225:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;21006:244:::0;:::o;35507:200::-;35643:4;37528:5;;;;;;;;;;;37514:19;;:10;:19;;;37506:42;;;;;;;;;;;;;;;;;;;;;;35667:32:::1;35688:10;35667:20;:32::i;:::-;35660:39;;35507:200:::0;;;;;:::o;24739:61::-;;;:::o;25009:20::-;;;;;;;;;;;;;:::o;18615:106::-;18668:15;18703:10;18696:17;;18615:106;:::o;34292:143::-;34350:4;34426:1;34374:48;34392:8;34402:19;34374:17;:48::i;:::-;:53;;34367:60;;34292:143;;;:::o;34517:141::-;34578:4;34649:1;34602:43;34620:8;34630:14;34602:17;:43::i;:::-;:48;34595:55;;34517:141;;;:::o;34745:::-;34804:4;34877:1;34828:45;34846:8;34856:16;34828:17;:45::i;:::-;:50;;34821:57;;34745:141;;;:::o;14918:177::-;15001:86;15021:5;15051:23;;;15076:2;15080:5;15028:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15001:19;:86::i;:::-;14918:177;;;:::o;34980:179::-;35078:4;24660:8;35115;35107:17;;:44;35100:51;;34980:179;;;:::o;17223:761::-;17647:23;17673:69;17701:4;17673:69;;;;;;;;;;;;;;;;;17681:5;17673:27;;;;:69;;;;;:::i;:::-;17647:95;;17777:1;17757:10;:17;:21;17753:224;;;17899:10;17888:30;;;;;;;;;;;;;;17880:85;;;;;;;;;;;;;;;;;;;;;;17753:224;17223:761;;;:::o;11899:196::-;12002:12;12034:53;12057:6;12065:4;12071:1;12074:12;12034:22;:53::i;:::-;12027:60;;11899:196;;;;;:::o;13276:979::-;13406:12;13439:18;13450:6;13439:10;:18::i;:::-;13431:60;;;;;;;;;;;;;;;;;;;;;;13565:12;13579:23;13606:6;:11;;13626:8;13637:4;13606:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13564:78;;;;13657:7;13653:595;;;13688:10;13681:17;;;;;;13653:595;13822:1;13802:10;:17;:21;13798:439;;;14065:10;14059:17;14126:15;14113:10;14109:2;14105:19;14098:44;14013:148;14208:12;14201:20;;;;;;;;;;;;;;;;;;;;13276:979;;;;;;;:::o;8981:422::-;9041:4;9249:12;9360:7;9348:20;9340:28;;9394:1;9387:4;:8;9380:15;;;8981:422;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5:130::-;;85:6;72:20;63:29;;97:33;124:5;97:33;;;57:78;;;;;142:146;;230:6;217:20;208:29;;242:41;277:5;242:41;;;202:86;;;;;295:128;;376:6;370:13;361:22;;388:30;412:5;388:30;;;355:68;;;;;430:130;;510:6;497:20;488:29;;522:33;549:5;522:33;;;482:78;;;;;567:156;;660:6;647:20;638:29;;672:46;712:5;672:46;;;632:91;;;;;745:337;;;860:3;853:4;845:6;841:17;837:27;827:2;;878:1;875;868:12;827:2;911:6;898:20;888:30;;938:18;930:6;927:30;924:2;;;970:1;967;960:12;924:2;1004:4;996:6;992:17;980:29;;1055:3;1047:4;1039:6;1035:17;1025:8;1021:32;1018:41;1015:2;;;1072:1;1069;1062:12;1015:2;820:262;;;;;;1090:130;;1170:6;1157:20;1148:29;;1182:33;1209:5;1182:33;;;1142:78;;;;;1227:134;;1311:6;1305:13;1296:22;;1323:33;1350:5;1323:33;;;1290:71;;;;;1368:241;;1472:2;1460:9;1451:7;1447:23;1443:32;1440:2;;;1488:1;1485;1478:12;1440:2;1523:1;1540:53;1585:7;1576:6;1565:9;1561:22;1540:53;;;1530:63;;1502:97;1434:175;;;;;1616:257;;1728:2;1716:9;1707:7;1703:23;1699:32;1696:2;;;1744:1;1741;1734:12;1696:2;1779:1;1796:61;1849:7;1840:6;1829:9;1825:22;1796:61;;;1786:71;;1758:105;1690:183;;;;;1880:366;;;2001:2;1989:9;1980:7;1976:23;1972:32;1969:2;;;2017:1;2014;2007:12;1969:2;2052:1;2069:53;2114:7;2105:6;2094:9;2090:22;2069:53;;;2059:63;;2031:97;2159:2;2177:53;2222:7;2213:6;2202:9;2198:22;2177:53;;;2167:63;;2138:98;1963:283;;;;;;2253:491;;;;2391:2;2379:9;2370:7;2366:23;2362:32;2359:2;;;2407:1;2404;2397:12;2359:2;2442:1;2459:53;2504:7;2495:6;2484:9;2480:22;2459:53;;;2449:63;;2421:97;2549:2;2567:53;2612:7;2603:6;2592:9;2588:22;2567:53;;;2557:63;;2528:98;2657:2;2675:53;2720:7;2711:6;2700:9;2696:22;2675:53;;;2665:63;;2636:98;2353:391;;;;;;2751:366;;;2872:2;2860:9;2851:7;2847:23;2843:32;2840:2;;;2888:1;2885;2878:12;2840:2;2923:1;2940:53;2985:7;2976:6;2965:9;2961:22;2940:53;;;2930:63;;2902:97;3030:2;3048:53;3093:7;3084:6;3073:9;3069:22;3048:53;;;3038:63;;3009:98;2834:283;;;;;;3124:491;;;;3262:2;3250:9;3241:7;3237:23;3233:32;3230:2;;;3278:1;3275;3268:12;3230:2;3313:1;3330:53;3375:7;3366:6;3355:9;3351:22;3330:53;;;3320:63;;3292:97;3420:2;3438:53;3483:7;3474:6;3463:9;3459:22;3438:53;;;3428:63;;3399:98;3528:2;3546:53;3591:7;3582:6;3571:9;3567:22;3546:53;;;3536:63;;3507:98;3224:391;;;;;;3622:492;;;;3763:2;3751:9;3742:7;3738:23;3734:32;3731:2;;;3779:1;3776;3769:12;3731:2;3814:1;3831:53;3876:7;3867:6;3856:9;3852:22;3831:53;;;3821:63;;3793:97;3949:2;3938:9;3934:18;3921:32;3973:18;3965:6;3962:30;3959:2;;;4005:1;4002;3995:12;3959:2;4033:65;4090:7;4081:6;4070:9;4066:22;4033:65;;;4023:75;;;;3900:204;3725:389;;;;;;4121:366;;;4242:2;4230:9;4221:7;4217:23;4213:32;4210:2;;;4258:1;4255;4248:12;4210:2;4293:1;4310:53;4355:7;4346:6;4335:9;4331:22;4310:53;;;4300:63;;4272:97;4400:2;4418:53;4463:7;4454:6;4443:9;4439:22;4418:53;;;4408:63;;4379:98;4204:283;;;;;;4494:257;;4606:2;4594:9;4585:7;4581:23;4577:32;4574:2;;;4622:1;4619;4612:12;4574:2;4657:1;4674:61;4727:7;4718:6;4707:9;4703:22;4674:61;;;4664:71;;4636:105;4568:183;;;;;4758:392;;;4892:2;4880:9;4871:7;4867:23;4863:32;4860:2;;;4908:1;4905;4898:12;4860:2;4943:1;4960:66;5018:7;5009:6;4998:9;4994:22;4960:66;;;4950:76;;4922:110;5063:2;5081:53;5126:7;5117:6;5106:9;5102:22;5081:53;;;5071:63;;5042:98;4854:296;;;;;;5157:367;;;5281:2;5269:9;5260:7;5256:23;5252:32;5249:2;;;5297:1;5294;5287:12;5249:2;5360:1;5349:9;5345:17;5332:31;5383:18;5375:6;5372:30;5369:2;;;5415:1;5412;5405:12;5369:2;5443:65;5500:7;5491:6;5480:9;5476:22;5443:65;;;5433:75;;;;5311:203;5243:281;;;;;;5531:241;;5635:2;5623:9;5614:7;5610:23;5606:32;5603:2;;;5651:1;5648;5641:12;5603:2;5686:1;5703:53;5748:7;5739:6;5728:9;5724:22;5703:53;;;5693:63;;5665:97;5597:175;;;;;5779:263;;5894:2;5882:9;5873:7;5869:23;5865:32;5862:2;;;5910:1;5907;5900:12;5862:2;5945:1;5962:64;6018:7;6009:6;5998:9;5994:22;5962:64;;;5952:74;;5924:108;5856:186;;;;;6049:103;6122:24;6140:5;6122:24;;;6117:3;6110:37;6104:48;;;6159:113;6242:24;6260:5;6242:24;;;6237:3;6230:37;6224:48;;;6279:94;6346:21;6361:5;6346:21;;;6341:3;6334:34;6328:45;;;6380:104;6457:21;6472:5;6457:21;;;6452:3;6445:34;6439:45;;;6491:113;6574:24;6592:5;6574:24;;;6569:3;6562:37;6556:48;;;6611:356;;6739:38;6771:5;6739:38;;;6789:88;6870:6;6865:3;6789:88;;;6782:95;;6882:52;6927:6;6922:3;6915:4;6908:5;6904:16;6882:52;;;6955:6;6950:3;6946:16;6939:23;;6719:248;;;;;;6999:313;;7133:89;7215:6;7210:3;7133:89;;;7126:96;;7234:43;7270:6;7265:3;7258:5;7234:43;;;7299:6;7294:3;7290:16;7283:23;;7119:193;;;;;;7320:327;;7422:39;7455:5;7422:39;;;7473:61;7527:6;7522:3;7473:61;;;7466:68;;7539:52;7584:6;7579:3;7572:4;7565:5;7561:16;7539:52;;;7612:29;7634:6;7612:29;;;7607:3;7603:39;7596:46;;7402:245;;;;;;7654:347;;7766:39;7799:5;7766:39;;;7817:71;7881:6;7876:3;7817:71;;;7810:78;;7893:52;7938:6;7933:3;7926:4;7919:5;7915:16;7893:52;;;7966:29;7988:6;7966:29;;;7961:3;7957:39;7950:46;;7746:255;;;;;;8008:360;;8138:39;8171:5;8138:39;;;8189:89;8271:6;8266:3;8189:89;;;8182:96;;8283:52;8328:6;8323:3;8316:4;8309:5;8305:16;8283:52;;;8356:6;8351:3;8347:16;8340:23;;8118:250;;;;;;8376:310;;8536:67;8600:2;8595:3;8536:67;;;8529:74;;8636:12;8632:1;8627:3;8623:11;8616:33;8677:2;8672:3;8668:12;8661:19;;8522:164;;;;8695:375;;8855:67;8919:2;8914:3;8855:67;;;8848:74;;8955:34;8951:1;8946:3;8942:11;8935:55;9024:8;9019:2;9014:3;9010:12;9003:30;9061:2;9056:3;9052:12;9045:19;;8841:229;;;;9079:311;;9239:67;9303:2;9298:3;9239:67;;;9232:74;;9339:13;9335:1;9330:3;9326:11;9319:34;9381:2;9376:3;9372:12;9365:19;;9225:165;;;;9399:312;;9559:67;9623:2;9618:3;9559:67;;;9552:74;;9659:14;9655:1;9650:3;9646:11;9639:35;9702:2;9697:3;9693:12;9686:19;;9545:166;;;;9720:320;;9880:67;9944:2;9939:3;9880:67;;;9873:74;;9980:22;9976:1;9971:3;9967:11;9960:43;10031:2;10026:3;10022:12;10015:19;;9866:174;;;;10049:316;;10209:67;10273:2;10268:3;10209:67;;;10202:74;;10309:18;10305:1;10300:3;10296:11;10289:39;10356:2;10351:3;10347:12;10340:19;;10195:170;;;;10374:312;;10534:67;10598:2;10593:3;10534:67;;;10527:74;;10634:14;10630:1;10625:3;10621:11;10614:35;10677:2;10672:3;10668:12;10661:19;;10520:166;;;;10695:317;;10855:67;10919:2;10914:3;10855:67;;;10848:74;;10955:19;10951:1;10946:3;10942:11;10935:40;11003:2;10998:3;10994:12;10987:19;;10841:171;;;;11021:332;;11181:67;11245:2;11240:3;11181:67;;;11174:74;;11281:34;11277:1;11272:3;11268:11;11261:55;11344:2;11339:3;11335:12;11328:19;;11167:186;;;;11362:316;;11522:67;11586:2;11581:3;11522:67;;;11515:74;;11622:18;11618:1;11613:3;11609:11;11602:39;11669:2;11664:3;11660:12;11653:19;;11508:170;;;;11687:315;;11847:67;11911:2;11906:3;11847:67;;;11840:74;;11947:17;11943:1;11938:3;11934:11;11927:38;11993:2;11988:3;11984:12;11977:19;;11833:169;;;;12011:315;;12171:67;12235:2;12230:3;12171:67;;;12164:74;;12271:17;12267:1;12262:3;12258:11;12251:38;12317:2;12312:3;12308:12;12301:19;;12157:169;;;;12335:316;;12495:67;12559:2;12554:3;12495:67;;;12488:74;;12595:18;12591:1;12586:3;12582:11;12575:39;12642:2;12637:3;12633:12;12626:19;;12481:170;;;;12660:310;;12820:67;12884:2;12879:3;12820:67;;;12813:74;;12920:12;12916:1;12911:3;12907:11;12900:33;12961:2;12956:3;12952:12;12945:19;;12806:164;;;;12979:296;;13156:83;13237:1;13232:3;13156:83;;;13149:90;;13267:1;13262:3;13258:11;13251:18;;13142:133;;;;13284:320;;13444:67;13508:2;13503:3;13444:67;;;13437:74;;13544:22;13540:1;13535:3;13531:11;13524:43;13595:2;13590:3;13586:12;13579:19;;13430:174;;;;13613:329;;13773:67;13837:2;13832:3;13773:67;;;13766:74;;13873:31;13869:1;13864:3;13860:11;13853:52;13933:2;13928:3;13924:12;13917:19;;13759:183;;;;13951:310;;14111:67;14175:2;14170:3;14111:67;;;14104:74;;14211:12;14207:1;14202:3;14198:11;14191:33;14252:2;14247:3;14243:12;14236:19;;14097:164;;;;14270:379;;14430:67;14494:2;14489:3;14430:67;;;14423:74;;14530:34;14526:1;14521:3;14517:11;14510:55;14599:12;14594:2;14589:3;14585:12;14578:34;14640:2;14635:3;14631:12;14624:19;;14416:233;;;;14658:319;;14818:67;14882:2;14877:3;14818:67;;;14811:74;;14918:21;14914:1;14909:3;14905:11;14898:42;14968:2;14963:3;14959:12;14952:19;;14804:173;;;;15054:651;15207:4;15202:3;15198:14;15291:4;15284:5;15280:16;15274:23;15303:63;15360:4;15355:3;15351:14;15337:12;15303:63;;;15227:145;15450:4;15443:5;15439:16;15433:23;15462:63;15519:4;15514:3;15510:14;15496:12;15462:63;;;15382:149;15609:4;15602:5;15598:16;15592:23;15621:63;15678:4;15673:3;15669:14;15655:12;15621:63;;;15541:149;15180:525;;;;15771:1178;;15916:4;15911:3;15907:14;16002:4;15995:5;15991:16;15985:23;16014:63;16071:4;16066:3;16062:14;16048:12;16014:63;;;15936:147;16154:4;16147:5;16143:16;16137:23;16206:3;16200:4;16196:14;16189:4;16184:3;16180:14;16173:38;16226:73;16294:4;16280:12;16226:73;;;16218:81;;16093:218;16393:4;16386:5;16382:16;16376:23;16405:63;16462:4;16457:3;16453:14;16439:12;16405:63;;;16321:153;16550:4;16543:5;16539:16;16533:23;16562:57;16613:4;16608:3;16604:14;16590:12;16562:57;;;16484:141;16697:4;16690:5;16686:16;16680:23;16709:57;16760:4;16755:3;16751:14;16737:12;16709:57;;;16635:137;16848:4;16841:5;16837:16;16831:23;16860:57;16911:4;16906:3;16902:14;16888:12;16860:57;;;16782:141;16940:4;16933:11;;15889:1060;;;;;;16956:103;17029:24;17047:5;17029:24;;;17024:3;17017:37;17011:48;;;17066:113;17149:24;17167:5;17149:24;;;17144:3;17137:37;17131:48;;;17186:271;;17339:93;17428:3;17419:6;17339:93;;;17332:100;;17449:3;17442:10;;17320:137;;;;;17464:295;;17629:105;17730:3;17721:6;17713;17629:105;;;17622:112;;17751:3;17744:10;;17610:149;;;;;;17766:275;;17921:95;18012:3;18003:6;17921:95;;;17914:102;;18033:3;18026:10;;17902:139;;;;;18048:379;;18255:147;18398:3;18255:147;;;18248:154;;18419:3;18412:10;;18236:191;;;;18434:222;;18561:2;18550:9;18546:18;18538:26;;18575:71;18643:1;18632:9;18628:17;18619:6;18575:71;;;18532:124;;;;;18663:333;;18818:2;18807:9;18803:18;18795:26;;18832:71;18900:1;18889:9;18885:17;18876:6;18832:71;;;18914:72;18982:2;18971:9;18967:18;18958:6;18914:72;;;18789:207;;;;;;19003:210;;19124:2;19113:9;19109:18;19101:26;;19138:65;19200:1;19189:9;19185:17;19176:6;19138:65;;;19095:118;;;;;19220:222;;19347:2;19336:9;19332:18;19324:26;;19361:71;19429:1;19418:9;19414:17;19405:6;19361:71;;;19318:124;;;;;19449:333;;19604:2;19593:9;19589:18;19581:26;;19618:71;19686:1;19675:9;19671:17;19662:6;19618:71;;;19700:72;19768:2;19757:9;19753:18;19744:6;19700:72;;;19575:207;;;;;;19789:310;;19936:2;19925:9;19921:18;19913:26;;19986:9;19980:4;19976:20;19972:1;19961:9;19957:17;19950:47;20011:78;20084:4;20075:6;20011:78;;;20003:86;;19907:192;;;;;20106:416;;20306:2;20295:9;20291:18;20283:26;;20356:9;20350:4;20346:20;20342:1;20331:9;20327:17;20320:47;20381:131;20507:4;20381:131;;;20373:139;;20277:245;;;;20529:416;;20729:2;20718:9;20714:18;20706:26;;20779:9;20773:4;20769:20;20765:1;20754:9;20750:17;20743:47;20804:131;20930:4;20804:131;;;20796:139;;20700:245;;;;20952:416;;21152:2;21141:9;21137:18;21129:26;;21202:9;21196:4;21192:20;21188:1;21177:9;21173:17;21166:47;21227:131;21353:4;21227:131;;;21219:139;;21123:245;;;;21375:416;;21575:2;21564:9;21560:18;21552:26;;21625:9;21619:4;21615:20;21611:1;21600:9;21596:17;21589:47;21650:131;21776:4;21650:131;;;21642:139;;21546:245;;;;21798:416;;21998:2;21987:9;21983:18;21975:26;;22048:9;22042:4;22038:20;22034:1;22023:9;22019:17;22012:47;22073:131;22199:4;22073:131;;;22065:139;;21969:245;;;;22221:416;;22421:2;22410:9;22406:18;22398:26;;22471:9;22465:4;22461:20;22457:1;22446:9;22442:17;22435:47;22496:131;22622:4;22496:131;;;22488:139;;22392:245;;;;22644:416;;22844:2;22833:9;22829:18;22821:26;;22894:9;22888:4;22884:20;22880:1;22869:9;22865:17;22858:47;22919:131;23045:4;22919:131;;;22911:139;;22815:245;;;;23067:416;;23267:2;23256:9;23252:18;23244:26;;23317:9;23311:4;23307:20;23303:1;23292:9;23288:17;23281:47;23342:131;23468:4;23342:131;;;23334:139;;23238:245;;;;23490:416;;23690:2;23679:9;23675:18;23667:26;;23740:9;23734:4;23730:20;23726:1;23715:9;23711:17;23704:47;23765:131;23891:4;23765:131;;;23757:139;;23661:245;;;;23913:416;;24113:2;24102:9;24098:18;24090:26;;24163:9;24157:4;24153:20;24149:1;24138:9;24134:17;24127:47;24188:131;24314:4;24188:131;;;24180:139;;24084:245;;;;24336:416;;24536:2;24525:9;24521:18;24513:26;;24586:9;24580:4;24576:20;24572:1;24561:9;24557:17;24550:47;24611:131;24737:4;24611:131;;;24603:139;;24507:245;;;;24759:416;;24959:2;24948:9;24944:18;24936:26;;25009:9;25003:4;24999:20;24995:1;24984:9;24980:17;24973:47;25034:131;25160:4;25034:131;;;25026:139;;24930:245;;;;25182:416;;25382:2;25371:9;25367:18;25359:26;;25432:9;25426:4;25422:20;25418:1;25407:9;25403:17;25396:47;25457:131;25583:4;25457:131;;;25449:139;;25353:245;;;;25605:416;;25805:2;25794:9;25790:18;25782:26;;25855:9;25849:4;25845:20;25841:1;25830:9;25826:17;25819:47;25880:131;26006:4;25880:131;;;25872:139;;25776:245;;;;26028:416;;26228:2;26217:9;26213:18;26205:26;;26278:9;26272:4;26268:20;26264:1;26253:9;26249:17;26242:47;26303:131;26429:4;26303:131;;;26295:139;;26199:245;;;;26451:416;;26651:2;26640:9;26636:18;26628:26;;26701:9;26695:4;26691:20;26687:1;26676:9;26672:17;26665:47;26726:131;26852:4;26726:131;;;26718:139;;26622:245;;;;26874:416;;27074:2;27063:9;27059:18;27051:26;;27124:9;27118:4;27114:20;27110:1;27099:9;27095:17;27088:47;27149:131;27275:4;27149:131;;;27141:139;;27045:245;;;;27297:416;;27497:2;27486:9;27482:18;27474:26;;27547:9;27541:4;27537:20;27533:1;27522:9;27518:17;27511:47;27572:131;27698:4;27572:131;;;27564:139;;27468:245;;;;27720:416;;27920:2;27909:9;27905:18;27897:26;;27970:9;27964:4;27960:20;27956:1;27945:9;27941:17;27934:47;27995:131;28121:4;27995:131;;;27987:139;;27891:245;;;;28143:342;;28330:2;28319:9;28315:18;28307:26;;28344:131;28472:1;28461:9;28457:17;28448:6;28344:131;;;28301:184;;;;;28492:358;;28663:2;28652:9;28648:18;28640:26;;28713:9;28707:4;28703:20;28699:1;28688:9;28684:17;28677:47;28738:102;28835:4;28826:6;28738:102;;;28730:110;;28634:216;;;;;28857:222;;28984:2;28973:9;28969:18;28961:26;;28998:71;29066:1;29055:9;29051:17;29042:6;28998:71;;;28955:124;;;;;29086:444;;29269:2;29258:9;29254:18;29246:26;;29283:71;29351:1;29340:9;29336:17;29327:6;29283:71;;;29365:72;29433:2;29422:9;29418:18;29409:6;29365:72;;;29448;29516:2;29505:9;29501:18;29492:6;29448:72;;;29240:290;;;;;;;29537:121;;29630:5;29624:12;29614:22;;29595:63;;;;29665:122;;29759:5;29753:12;29743:22;;29724:63;;;;29795:144;;29930:3;29915:18;;29908:31;;;;;29948:153;;30053:6;30048:3;30041:19;30090:4;30085:3;30081:14;30066:29;;30034:67;;;;;30110:163;;30225:6;30220:3;30213:19;30262:4;30257:3;30253:14;30238:29;;30206:67;;;;;30282:145;;30418:3;30403:18;;30396:31;;;;;30435:91;;30497:24;30515:5;30497:24;;;30486:35;;30480:46;;;;30533:99;;30603:24;30621:5;30603:24;;;30592:35;;30586:46;;;;30639:85;;30712:5;30705:13;30698:21;30687:32;;30681:43;;;;30731:72;;30793:5;30782:16;;30776:27;;;;30810:104;;30885:24;30903:5;30885:24;;;30874:35;;30868:46;;;;30921:121;;30994:42;30987:5;30983:54;30972:65;;30966:76;;;;31049:72;;31111:5;31100:16;;31094:27;;;;31129:145;31210:6;31205:3;31200;31187:30;31266:1;31257:6;31252:3;31248:16;31241:27;31180:94;;;;31283:268;31348:1;31355:101;31369:6;31366:1;31363:13;31355:101;;;31445:1;31440:3;31436:11;31430:18;31426:1;31421:3;31417:11;31410:39;31391:2;31388:1;31384:10;31379:15;;31355:101;;;31471:6;31468:1;31465:13;31462:2;;;31536:1;31527:6;31522:3;31518:16;31511:27;31462:2;31332:219;;;;;31559:97;;31647:2;31643:7;31638:2;31631:5;31627:14;31623:28;31613:38;;31607:49;;;;31664:117;31733:24;31751:5;31733:24;;;31726:5;31723:35;31713:2;;31772:1;31769;31762:12;31713:2;31707:74;;31788:133;31865:32;31891:5;31865:32;;;31858:5;31855:43;31845:2;;31912:1;31909;31902:12;31845:2;31839:82;;31928:111;31994:21;32009:5;31994:21;;;31987:5;31984:32;31974:2;;32030:1;32027;32020:12;31974:2;31968:71;;32046:117;32115:24;32133:5;32115:24;;;32108:5;32105:35;32095:2;;32154:1;32151;32144:12;32095:2;32089:74;;32170:143;32252:37;32283:5;32252:37;;;32245:5;32242:48;32232:2;;32304:1;32301;32294:12;32232:2;32226:87;;32320:117;32389:24;32407:5;32389:24;;;32382:5;32379:35;32369:2;;32428:1;32425;32418:12;32369:2;32363:74;
Swarm Source
ipfs://4691880bc73a3a5b5299ccfb8b2ad51049b4b3890c3bd5de4ea19f3f4cbb1237
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.