Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 10 from a total of 10 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Safe Transfer Fr... | 22138083 | 312 days ago | IN | 0 ETH | 0.00005998 | ||||
| Safe Transfer Fr... | 22038137 | 326 days ago | IN | 0 ETH | 0.00005834 | ||||
| Safe Transfer Fr... | 22038134 | 326 days ago | IN | 0 ETH | 0.00005677 | ||||
| Safe Transfer Fr... | 22038128 | 326 days ago | IN | 0 ETH | 0.00005753 | ||||
| Set Approval For... | 22034678 | 326 days ago | IN | 0 ETH | 0.00002815 | ||||
| Set Approval For... | 22034668 | 326 days ago | IN | 0 ETH | 0.00002537 | ||||
| Set Approval For... | 20921751 | 482 days ago | IN | 0 ETH | 0.00131341 | ||||
| Set Approval For... | 16896266 | 1046 days ago | IN | 0 ETH | 0.00074319 | ||||
| Safe Transfer Fr... | 11670333 | 1842 days ago | IN | 0 ETH | 0.00232843 | ||||
| Update Access Co... | 11641064 | 1847 days ago | IN | 0 ETH | 0.00225105 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
DigitalaxMaterials
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2020-11-24
*/
// File: @openzeppelin/contracts/introspection/IERC165.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.12;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
// File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol
/**
* @dev Required interface of an ERC1155 compliant contract, as defined in the
* https://eips.ethereum.org/EIPS/eip-1155[EIP].
*
* _Available since v3.1._
*/
interface IERC1155 is IERC165 {
/**
* @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
*/
event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);
/**
* @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
* transfers.
*/
event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);
/**
* @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
* `approved`.
*/
event ApprovalForAll(address indexed account, address indexed operator, bool approved);
/**
* @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
*
* If an {URI} event was emitted for `id`, the standard
* https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
* returned by {IERC1155MetadataURI-uri}.
*/
event URI(string value, uint256 indexed id);
/**
* @dev Returns the amount of tokens of token type `id` owned by `account`.
*
* Requirements:
*
* - `account` cannot be the zero address.
*/
function balanceOf(address account, uint256 id) external view returns (uint256);
/**
* @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
*
* Requirements:
*
* - `accounts` and `ids` must have the same length.
*/
function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);
/**
* @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
*
* Emits an {ApprovalForAll} event.
*
* Requirements:
*
* - `operator` cannot be the caller.
*/
function setApprovalForAll(address operator, bool approved) external;
/**
* @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
*
* See {setApprovalForAll}.
*/
function isApprovedForAll(address account, address operator) external view returns (bool);
/**
* @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
*
* Emits a {TransferSingle} event.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
* - `from` must have a balance of tokens of type `id` of at least `amount`.
* - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
* acceptance magic value.
*/
function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;
/**
* @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
*
* Emits a {TransferBatch} event.
*
* Requirements:
*
* - `ids` and `amounts` must have the same length.
* - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
* acceptance magic value.
*/
function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;
}
// File: @openzeppelin/contracts/token/ERC1155/IERC1155MetadataURI.sol
/**
* @dev Interface of the optional ERC1155MetadataExtension interface, as defined
* in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
*
* _Available since v3.1._
*/
interface IERC1155MetadataURI is IERC1155 {
/**
* @dev Returns the URI for token type `id`.
*
* If the `\{id\}` substring is present in the URI, it must be replaced by
* clients with the actual token type ID.
*/
function uri(uint256 id) external view returns (string memory);
}
// File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol
/**
* _Available since v3.1._
*/
interface IERC1155Receiver is IERC165 {
/**
@dev Handles the receipt of a single ERC1155 token type. This function is
called at the end of a `safeTransferFrom` after the balance has been updated.
To accept the transfer, this must return
`bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
(i.e. 0xf23a6e61, or its own function selector).
@param operator The address which initiated the transfer (i.e. msg.sender)
@param from The address which previously owned the token
@param id The ID of the token being transferred
@param value The amount of tokens being transferred
@param data Additional data with no specified format
@return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
*/
function onERC1155Received(
address operator,
address from,
uint256 id,
uint256 value,
bytes calldata data
)
external
returns(bytes4);
/**
@dev Handles the receipt of a multiple ERC1155 token types. This function
is called at the end of a `safeBatchTransferFrom` after the balances have
been updated. To accept the transfer(s), this must return
`bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
(i.e. 0xbc197c81, or its own function selector).
@param operator The address which initiated the batch transfer (i.e. msg.sender)
@param from The address which previously owned the token
@param ids An array containing ids of each token being transferred (order and length must match values array)
@param values An array containing amounts of each token being transferred (order and length must match ids array)
@param data Additional data with no specified format
@return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
*/
function onERC1155BatchReceived(
address operator,
address from,
uint256[] calldata ids,
uint256[] calldata values,
bytes calldata data
)
external
returns(bytes4);
}
// File: @openzeppelin/contracts/GSN/Context.sol
/*
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with 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/introspection/ERC165.sol
/**
* @dev Implementation of the {IERC165} interface.
*
* Contracts may inherit from this and call {_registerInterface} to declare
* their support of an interface.
*/
contract ERC165 is IERC165 {
/*
* bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7
*/
bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;
/**
* @dev Mapping of interface ids to whether or not it's supported.
*/
mapping(bytes4 => bool) private _supportedInterfaces;
constructor () internal {
// Derived contracts need only register support for their own interfaces,
// we register support for ERC165 itself here
_registerInterface(_INTERFACE_ID_ERC165);
}
/**
* @dev See {IERC165-supportsInterface}.
*
* Time complexity O(1), guaranteed to always use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) public view override returns (bool) {
return _supportedInterfaces[interfaceId];
}
/**
* @dev Registers the contract as an implementer of the interface defined by
* `interfaceId`. Support of the actual ERC165 interface is automatic and
* registering its interface id is not required.
*
* See {IERC165-supportsInterface}.
*
* Requirements:
*
* - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).
*/
function _registerInterface(bytes4 interfaceId) internal virtual {
require(interfaceId != 0xffffffff, "ERC165: invalid interface id");
_supportedInterfaces[interfaceId] = true;
}
}
// File: @openzeppelin/contracts/math/SafeMath.sol
/**
* @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
/**
* @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: contracts/ERC1155/ERC1155.sol
// Contract based from the following:
// https://github.com/OpenZeppelin/openzeppelin-contracts/blob/aaa5ef81cf75454d1c337dc3de03d12480849ad1/contracts/token/ERC1155/ERC1155.sol
pragma solidity 0.6.12;
/**
*
* @dev Implementation of the basic standard multi-token.
* See https://eips.ethereum.org/EIPS/eip-1155
* Originally based on code by Enjin: https://github.com/enjin/erc-1155
*
* _Available since v3.1._
*
* @notice Modifications to uri logic made by BlockRocket.tech
*/
contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
using SafeMath for uint256;
using Address for address;
// Mapping from token ID to account balances
mapping (uint256 => mapping(address => uint256)) private _balances;
// Mapping from account to operator approvals
mapping (address => mapping(address => bool)) private _operatorApprovals;
// Token ID to its URI
mapping (uint256 => string) internal tokenUris;
// Token ID to its total supply
mapping(uint256 => uint256) public tokenTotalSupply;
/*
* bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e
* bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4
* bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465
* bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5
* bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a
* bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6
*
* => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^
* 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26
*/
bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;
/*
* bytes4(keccak256('uri(uint256)')) == 0x0e89341c
*/
bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;
constructor () public {
// register the supported interfaces to conform to ERC1155 via ERC165
_registerInterface(_INTERFACE_ID_ERC1155);
// register the supported interfaces to conform to ERC1155MetadataURI via ERC165
_registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);
}
/**
* @dev See {IERC1155MetadataURI-uri}.
*/
function uri(uint256 tokenId) external view override returns (string memory) {
return tokenUris[tokenId];
}
/**
* @dev See {IERC1155-balanceOf}.
*
* Requirements:
*
* - `account` cannot be the zero address.
*/
function balanceOf(address account, uint256 id) public view override returns (uint256) {
require(account != address(0), "ERC1155: balance query for the zero address");
return _balances[id][account];
}
/**
* @dev See {IERC1155-balanceOfBatch}.
*
* Requirements:
*
* - `accounts` and `ids` must have the same length.
*/
function balanceOfBatch(
address[] memory accounts,
uint256[] memory ids
)
public
view
override
returns (uint256[] memory)
{
require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");
uint256[] memory batchBalances = new uint256[](accounts.length);
for (uint256 i = 0; i < accounts.length; ++i) {
require(accounts[i] != address(0), "ERC1155: batch balance query for the zero address");
batchBalances[i] = _balances[ids[i]][accounts[i]];
}
return batchBalances;
}
/**
* @dev See {IERC1155-setApprovalForAll}.
*/
function setApprovalForAll(address operator, bool approved) external virtual override {
require(_msgSender() != operator, "ERC1155: setting approval status for self");
_operatorApprovals[_msgSender()][operator] = approved;
emit ApprovalForAll(_msgSender(), operator, approved);
}
/**
* @dev See {IERC1155-isApprovedForAll}.
*/
function isApprovedForAll(address account, address operator) public view override returns (bool) {
return _operatorApprovals[account][operator];
}
/**
* @dev See {IERC1155-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 id,
uint256 amount,
bytes memory data
)
external
virtual
override
{
require(to != address(0), "ERC1155: transfer to the zero address");
require(
from == _msgSender() || isApprovedForAll(from, _msgSender()),
"ERC1155: caller is not owner nor approved"
);
address operator = _msgSender();
_beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);
_balances[id][from] = _balances[id][from].sub(amount, "ERC1155: insufficient balance for transfer");
_balances[id][to] = _balances[id][to].add(amount);
emit TransferSingle(operator, from, to, id, amount);
_doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
}
/**
* @dev See {IERC1155-safeBatchTransferFrom}.
*/
function safeBatchTransferFrom(
address from,
address to,
uint256[] memory ids,
uint256[] memory amounts,
bytes memory data
)
external
virtual
override
{
require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
require(to != address(0), "ERC1155: transfer to the zero address");
require(
from == _msgSender() || isApprovedForAll(from, _msgSender()),
"ERC1155: transfer caller is not owner nor approved"
);
address operator = _msgSender();
_beforeTokenTransfer(operator, from, to, ids, amounts, data);
for (uint256 i = 0; i < ids.length; ++i) {
uint256 id = ids[i];
uint256 amount = amounts[i];
_balances[id][from] = _balances[id][from].sub(
amount,
"ERC1155: insufficient balance for transfer"
);
_balances[id][to] = _balances[id][to].add(amount);
}
emit TransferBatch(operator, from, to, ids, amounts);
_doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);
}
/**
* @dev Sets a new URI for a given token ID
*/
function _setURI(uint256 tokenId, string memory newuri) internal virtual {
tokenUris[tokenId] = newuri;
emit URI(newuri, tokenId);
}
/**
* @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.
*
* Emits a {TransferSingle} event.
*
* Requirements:
*
* - `account` cannot be the zero address.
* - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
* acceptance magic value.
*/
function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {
require(account != address(0), "ERC1155: mint to the zero address");
address operator = _msgSender();
_beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);
_balances[id][account] = _balances[id][account].add(amount);
tokenTotalSupply[id] = tokenTotalSupply[id].add(amount);
emit TransferSingle(operator, address(0), account, id, amount);
_doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);
}
/**
* @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
*
* Requirements:
*
* - `ids` and `amounts` must have the same length.
* - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
* acceptance magic value.
*/
function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {
require(to != address(0), "ERC1155: mint to the zero address");
require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
address operator = _msgSender();
_beforeTokenTransfer(operator, address(0), to, ids, amounts, data);
for (uint i = 0; i < ids.length; i++) {
uint256 id = ids[i];
uint256 amount = amounts[i];
_balances[id][to] = amount.add(_balances[id][to]);
tokenTotalSupply[id] = tokenTotalSupply[id].add(amount);
}
emit TransferBatch(operator, address(0), to, ids, amounts);
_doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);
}
/**
* @dev Destroys `amount` tokens of token type `id` from `account`
*
* Requirements:
*
* - `account` cannot be the zero address.
* - `account` must have at least `amount` tokens of token type `id`.
*/
function _burn(address account, uint256 id, uint256 amount) internal virtual {
require(account != address(0), "ERC1155: burn from the zero address");
address operator = _msgSender();
_beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), "");
_balances[id][account] = _balances[id][account].sub(
amount,
"ERC1155: burn amount exceeds balance"
);
tokenTotalSupply[id] = tokenTotalSupply[id].sub(amount);
emit TransferSingle(operator, account, address(0), id, amount);
}
/**
* @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
*
* Requirements:
*
* - `ids` and `amounts` must have the same length.
*/
function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {
require(account != address(0), "ERC1155: burn from the zero address");
require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
address operator = _msgSender();
_beforeTokenTransfer(operator, account, address(0), ids, amounts, "");
for (uint i = 0; i < ids.length; i++) {
uint256 id = ids[i];
uint256 amount = amounts[i];
_balances[id][account] = _balances[id][account].sub(
amount,
"ERC1155: burn amount exceeds balance"
);
tokenTotalSupply[id] = tokenTotalSupply[id].sub(amount);
}
emit TransferBatch(operator, account, address(0), ids, amounts);
}
/**
* @dev Hook that is called before any token transfer. This includes minting
* and burning, as well as batched variants.
*
* The same hook is called on both single and batched variants. For single
* transfers, the length of the `id` and `amount` arrays will be 1.
*
* Calling conditions (for each `id` and `amount` pair):
*
* - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* of token type `id` will be transferred to `to`.
* - When `from` is zero, `amount` tokens of token type `id` will be minted
* for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
* will be burned.
* - `from` and `to` are never both zero.
* - `ids` and `amounts` have the same, non-zero length.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address operator,
address from,
address to,
uint256[] memory ids,
uint256[] memory amounts,
bytes memory data
)
internal virtual
{ }
function _doSafeTransferAcceptanceCheck(
address operator,
address from,
address to,
uint256 id,
uint256 amount,
bytes memory data
)
private
{
if (to.isContract()) {
try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
if (response != IERC1155Receiver(to).onERC1155Received.selector) {
revert("ERC1155: ERC1155Receiver rejected tokens");
}
} catch Error(string memory reason) {
revert(reason);
} catch {
revert("ERC1155: transfer to non ERC1155Receiver implementer");
}
}
}
function _doSafeBatchTransferAcceptanceCheck(
address operator,
address from,
address to,
uint256[] memory ids,
uint256[] memory amounts,
bytes memory data
)
private
{
if (to.isContract()) {
try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {
if (response != IERC1155Receiver(to).onERC1155BatchReceived.selector) {
revert("ERC1155: ERC1155Receiver rejected tokens");
}
} catch Error(string memory reason) {
revert(reason);
} catch {
revert("ERC1155: transfer to non ERC1155Receiver implementer");
}
}
}
function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
uint256[] memory array = new uint256[](1);
array[0] = element;
return array;
}
}
// File: contracts/ERC1155/ERC1155Burnable.sol
//imported from: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/aaa5ef81cf75454d1c337dc3de03d12480849ad1/contracts/token/ERC1155/ERC1155Burnable.sol
pragma solidity 0.6.12;
/**
* @dev Extension of {ERC1155} that allows token holders to destroy both their
* own tokens and those that they have been approved to use.
*
* _Available since v3.1._
*/
abstract contract ERC1155Burnable is ERC1155 {
function burn(address account, uint256 id, uint256 amount) public virtual {
require(
account == _msgSender() || isApprovedForAll(account, _msgSender()),
"ERC1155: caller is not owner nor approved"
);
_burn(account, id, amount);
}
function burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) public virtual {
require(
account == _msgSender() || isApprovedForAll(account, _msgSender()),
"ERC1155: caller is not owner nor approved"
);
_burnBatch(account, ids, amounts);
}
}
// File: @openzeppelin/contracts/utils/EnumerableSet.sol
/**
* @dev Library for managing
* https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive
* types.
*
* Sets have the following properties:
*
* - Elements are added, removed, and checked for existence in constant time
* (O(1)).
* - Elements are enumerated in O(n). No guarantees are made on the ordering.
*
* ```
* contract Example {
* // Add the library methods
* using EnumerableSet for EnumerableSet.AddressSet;
*
* // Declare a set state variable
* EnumerableSet.AddressSet private mySet;
* }
* ```
*
* As of v3.0.0, only sets of type `address` (`AddressSet`) and `uint256`
* (`UintSet`) are supported.
*/
library EnumerableSet {
// To implement this library for multiple types with as little code
// repetition as possible, we write it in terms of a generic Set type with
// bytes32 values.
// The Set implementation uses private functions, and user-facing
// implementations (such as AddressSet) are just wrappers around the
// underlying Set.
// This means that we can only create new EnumerableSets for types that fit
// in bytes32.
struct Set {
// Storage of set values
bytes32[] _values;
// Position of the value in the `values` array, plus 1 because index 0
// means a value is not in the set.
mapping (bytes32 => uint256) _indexes;
}
/**
* @dev Add a value to a set. O(1).
*
* Returns true if the value was added to the set, that is if it was not
* already present.
*/
function _add(Set storage set, bytes32 value) private returns (bool) {
if (!_contains(set, value)) {
set._values.push(value);
// The value is stored at length-1, but we add 1 to all indexes
// and use 0 as a sentinel value
set._indexes[value] = set._values.length;
return true;
} else {
return false;
}
}
/**
* @dev Removes a value from a set. O(1).
*
* Returns true if the value was removed from the set, that is if it was
* present.
*/
function _remove(Set storage set, bytes32 value) private returns (bool) {
// We read and store the value's index to prevent multiple reads from the same storage slot
uint256 valueIndex = set._indexes[value];
if (valueIndex != 0) { // Equivalent to contains(set, value)
// To delete an element from the _values array in O(1), we swap the element to delete with the last one in
// the array, and then remove the last element (sometimes called as 'swap and pop').
// This modifies the order of the array, as noted in {at}.
uint256 toDeleteIndex = valueIndex - 1;
uint256 lastIndex = set._values.length - 1;
// When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs
// so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement.
bytes32 lastvalue = set._values[lastIndex];
// Move the last value to the index where the value to delete is
set._values[toDeleteIndex] = lastvalue;
// Update the index for the moved value
set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based
// Delete the slot where the moved value was stored
set._values.pop();
// Delete the index for the deleted slot
delete set._indexes[value];
return true;
} else {
return false;
}
}
/**
* @dev Returns true if the value is in the set. O(1).
*/
function _contains(Set storage set, bytes32 value) private view returns (bool) {
return set._indexes[value] != 0;
}
/**
* @dev Returns the number of values on the set. O(1).
*/
function _length(Set storage set) private view returns (uint256) {
return set._values.length;
}
/**
* @dev Returns the value stored at position `index` in the set. O(1).
*
* Note that there are no guarantees on the ordering of values inside the
* array, and it may change when more values are added or removed.
*
* Requirements:
*
* - `index` must be strictly less than {length}.
*/
function _at(Set storage set, uint256 index) private view returns (bytes32) {
require(set._values.length > index, "EnumerableSet: index out of bounds");
return set._values[index];
}
// AddressSet
struct AddressSet {
Set _inner;
}
/**
* @dev Add a value to a set. O(1).
*
* Returns true if the value was added to the set, that is if it was not
* already present.
*/
function add(AddressSet storage set, address value) internal returns (bool) {
return _add(set._inner, bytes32(uint256(value)));
}
/**
* @dev Removes a value from a set. O(1).
*
* Returns true if the value was removed from the set, that is if it was
* present.
*/
function remove(AddressSet storage set, address value) internal returns (bool) {
return _remove(set._inner, bytes32(uint256(value)));
}
/**
* @dev Returns true if the value is in the set. O(1).
*/
function contains(AddressSet storage set, address value) internal view returns (bool) {
return _contains(set._inner, bytes32(uint256(value)));
}
/**
* @dev Returns the number of values in the set. O(1).
*/
function length(AddressSet storage set) internal view returns (uint256) {
return _length(set._inner);
}
/**
* @dev Returns the value stored at position `index` in the set. O(1).
*
* Note that there are no guarantees on the ordering of values inside the
* array, and it may change when more values are added or removed.
*
* Requirements:
*
* - `index` must be strictly less than {length}.
*/
function at(AddressSet storage set, uint256 index) internal view returns (address) {
return address(uint256(_at(set._inner, index)));
}
// UintSet
struct UintSet {
Set _inner;
}
/**
* @dev Add a value to a set. O(1).
*
* Returns true if the value was added to the set, that is if it was not
* already present.
*/
function add(UintSet storage set, uint256 value) internal returns (bool) {
return _add(set._inner, bytes32(value));
}
/**
* @dev Removes a value from a set. O(1).
*
* Returns true if the value was removed from the set, that is if it was
* present.
*/
function remove(UintSet storage set, uint256 value) internal returns (bool) {
return _remove(set._inner, bytes32(value));
}
/**
* @dev Returns true if the value is in the set. O(1).
*/
function contains(UintSet storage set, uint256 value) internal view returns (bool) {
return _contains(set._inner, bytes32(value));
}
/**
* @dev Returns the number of values on the set. O(1).
*/
function length(UintSet storage set) internal view returns (uint256) {
return _length(set._inner);
}
/**
* @dev Returns the value stored at position `index` in the set. O(1).
*
* Note that there are no guarantees on the ordering of values inside the
* array, and it may change when more values are added or removed.
*
* Requirements:
*
* - `index` must be strictly less than {length}.
*/
function at(UintSet storage set, uint256 index) internal view returns (uint256) {
return uint256(_at(set._inner, index));
}
}
// File: @openzeppelin/contracts/access/AccessControl.sol
/**
* @dev Contract module that allows children to implement role-based access
* control mechanisms.
*
* Roles are referred to by their `bytes32` identifier. These should be exposed
* in the external API and be unique. The best way to achieve this is by
* using `public constant` hash digests:
*
* ```
* bytes32 public constant MY_ROLE = keccak256("MY_ROLE");
* ```
*
* Roles can be used to represent a set of permissions. To restrict access to a
* function call, use {hasRole}:
*
* ```
* function foo() public {
* require(hasRole(MY_ROLE, msg.sender));
* ...
* }
* ```
*
* Roles can be granted and revoked dynamically via the {grantRole} and
* {revokeRole} functions. Each role has an associated admin role, and only
* accounts that have a role's admin role can call {grantRole} and {revokeRole}.
*
* By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means
* that only accounts with this role will be able to grant or revoke other
* roles. More complex role relationships can be created by using
* {_setRoleAdmin}.
*
* WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to
* grant and revoke this role. Extra precautions should be taken to secure
* accounts that have been granted it.
*/
abstract contract AccessControl is Context {
using EnumerableSet for EnumerableSet.AddressSet;
using Address for address;
struct RoleData {
EnumerableSet.AddressSet members;
bytes32 adminRole;
}
mapping (bytes32 => RoleData) private _roles;
bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;
/**
* @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`
*
* `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite
* {RoleAdminChanged} not being emitted signaling this.
*
* _Available since v3.1._
*/
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);
/**
* @dev Emitted when `account` is granted `role`.
*
* `sender` is the account that originated the contract call, an admin role
* bearer except when using {_setupRole}.
*/
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);
/**
* @dev Emitted when `account` is revoked `role`.
*
* `sender` is the account that originated the contract call:
* - if using `revokeRole`, it is the admin role bearer
* - if using `renounceRole`, it is the role bearer (i.e. `account`)
*/
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);
/**
* @dev Returns `true` if `account` has been granted `role`.
*/
function hasRole(bytes32 role, address account) public view returns (bool) {
return _roles[role].members.contains(account);
}
/**
* @dev Returns the number of accounts that have `role`. Can be used
* together with {getRoleMember} to enumerate all bearers of a role.
*/
function getRoleMemberCount(bytes32 role) public view returns (uint256) {
return _roles[role].members.length();
}
/**
* @dev Returns one of the accounts that have `role`. `index` must be a
* value between 0 and {getRoleMemberCount}, non-inclusive.
*
* Role bearers are not sorted in any particular way, and their ordering may
* change at any point.
*
* WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure
* you perform all queries on the same block. See the following
* https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post]
* for more information.
*/
function getRoleMember(bytes32 role, uint256 index) public view returns (address) {
return _roles[role].members.at(index);
}
/**
* @dev Returns the admin role that controls `role`. See {grantRole} and
* {revokeRole}.
*
* To change a role's admin, use {_setRoleAdmin}.
*/
function getRoleAdmin(bytes32 role) public view returns (bytes32) {
return _roles[role].adminRole;
}
/**
* @dev Grants `role` to `account`.
*
* If `account` had not been already granted `role`, emits a {RoleGranted}
* event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*/
function grantRole(bytes32 role, address account) public virtual {
require(hasRole(_roles[role].adminRole, _msgSender()), "AccessControl: sender must be an admin to grant");
_grantRole(role, account);
}
/**
* @dev Revokes `role` from `account`.
*
* If `account` had been granted `role`, emits a {RoleRevoked} event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*/
function revokeRole(bytes32 role, address account) public virtual {
require(hasRole(_roles[role].adminRole, _msgSender()), "AccessControl: sender must be an admin to revoke");
_revokeRole(role, account);
}
/**
* @dev Revokes `role` from the calling account.
*
* Roles are often managed via {grantRole} and {revokeRole}: this function's
* purpose is to provide a mechanism for accounts to lose their privileges
* if they are compromised (such as when a trusted device is misplaced).
*
* If the calling account had been granted `role`, emits a {RoleRevoked}
* event.
*
* Requirements:
*
* - the caller must be `account`.
*/
function renounceRole(bytes32 role, address account) public virtual {
require(account == _msgSender(), "AccessControl: can only renounce roles for self");
_revokeRole(role, account);
}
/**
* @dev Grants `role` to `account`.
*
* If `account` had not been already granted `role`, emits a {RoleGranted}
* event. Note that unlike {grantRole}, this function doesn't perform any
* checks on the calling account.
*
* [WARNING]
* ====
* This function should only be called from the constructor when setting
* up the initial roles for the system.
*
* Using this function in any other way is effectively circumventing the admin
* system imposed by {AccessControl}.
* ====
*/
function _setupRole(bytes32 role, address account) internal virtual {
_grantRole(role, account);
}
/**
* @dev Sets `adminRole` as ``role``'s admin role.
*
* Emits a {RoleAdminChanged} event.
*/
function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
emit RoleAdminChanged(role, _roles[role].adminRole, adminRole);
_roles[role].adminRole = adminRole;
}
function _grantRole(bytes32 role, address account) private {
if (_roles[role].members.add(account)) {
emit RoleGranted(role, account, _msgSender());
}
}
function _revokeRole(bytes32 role, address account) private {
if (_roles[role].members.remove(account)) {
emit RoleRevoked(role, account, _msgSender());
}
}
}
// File: contracts/DigitalaxAccessControls.sol
pragma solidity 0.6.12;
/**
* @notice Access Controls contract for the Digitalax Platform
* @author BlockRocket.tech
*/
contract DigitalaxAccessControls is AccessControl {
/// @notice Role definitions
bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");
bytes32 public constant SMART_CONTRACT_ROLE = keccak256("SMART_CONTRACT_ROLE");
/// @notice Events for adding and removing various roles
event AdminRoleGranted(
address indexed beneficiary,
address indexed caller
);
event AdminRoleRemoved(
address indexed beneficiary,
address indexed caller
);
event MinterRoleGranted(
address indexed beneficiary,
address indexed caller
);
event MinterRoleRemoved(
address indexed beneficiary,
address indexed caller
);
event SmartContractRoleGranted(
address indexed beneficiary,
address indexed caller
);
event SmartContractRoleRemoved(
address indexed beneficiary,
address indexed caller
);
/**
* @notice The deployer is automatically given the admin role which will allow them to then grant roles to other addresses
*/
constructor() public {
_setupRole(DEFAULT_ADMIN_ROLE, _msgSender());
}
/////////////
// Lookups //
/////////////
/**
* @notice Used to check whether an address has the admin role
* @param _address EOA or contract being checked
* @return bool True if the account has the role or false if it does not
*/
function hasAdminRole(address _address) external view returns (bool) {
return hasRole(DEFAULT_ADMIN_ROLE, _address);
}
/**
* @notice Used to check whether an address has the minter role
* @param _address EOA or contract being checked
* @return bool True if the account has the role or false if it does not
*/
function hasMinterRole(address _address) external view returns (bool) {
return hasRole(MINTER_ROLE, _address);
}
/**
* @notice Used to check whether an address has the smart contract role
* @param _address EOA or contract being checked
* @return bool True if the account has the role or false if it does not
*/
function hasSmartContractRole(address _address) external view returns (bool) {
return hasRole(SMART_CONTRACT_ROLE, _address);
}
///////////////
// Modifiers //
///////////////
/**
* @notice Grants the admin role to an address
* @dev The sender must have the admin role
* @param _address EOA or contract receiving the new role
*/
function addAdminRole(address _address) external {
grantRole(DEFAULT_ADMIN_ROLE, _address);
emit AdminRoleGranted(_address, _msgSender());
}
/**
* @notice Removes the admin role from an address
* @dev The sender must have the admin role
* @param _address EOA or contract affected
*/
function removeAdminRole(address _address) external {
revokeRole(DEFAULT_ADMIN_ROLE, _address);
emit AdminRoleRemoved(_address, _msgSender());
}
/**
* @notice Grants the minter role to an address
* @dev The sender must have the admin role
* @param _address EOA or contract receiving the new role
*/
function addMinterRole(address _address) external {
grantRole(MINTER_ROLE, _address);
emit MinterRoleGranted(_address, _msgSender());
}
/**
* @notice Removes the minter role from an address
* @dev The sender must have the admin role
* @param _address EOA or contract affected
*/
function removeMinterRole(address _address) external {
revokeRole(MINTER_ROLE, _address);
emit MinterRoleRemoved(_address, _msgSender());
}
/**
* @notice Grants the smart contract role to an address
* @dev The sender must have the admin role
* @param _address EOA or contract receiving the new role
*/
function addSmartContractRole(address _address) external {
grantRole(SMART_CONTRACT_ROLE, _address);
emit SmartContractRoleGranted(_address, _msgSender());
}
/**
* @notice Removes the smart contract role from an address
* @dev The sender must have the admin role
* @param _address EOA or contract affected
*/
function removeSmartContractRole(address _address) external {
revokeRole(SMART_CONTRACT_ROLE, _address);
emit SmartContractRoleRemoved(_address, _msgSender());
}
}
// File: contracts/garment/DigitalaxMaterials.sol
pragma solidity 0.6.12;
pragma experimental ABIEncoderV2;
/**
* @title Digitalax Materials NFT a.k.a. child NFTs
* @dev Issues ERC-1155 tokens which can be held by the parent ERC-721 contract
*/
contract DigitalaxMaterials is ERC1155Burnable {
// @notice event emitted on contract creation
event DigitalaxMaterialsDeployed();
// @notice a single child has been created
event ChildCreated(
uint256 indexed childId
);
// @notice a batch of children have been created
event ChildrenCreated(
uint256[] childIds
);
string public name;
string public symbol;
// @notice current token ID pointer
uint256 public tokenIdPointer;
// @notice enforcing access controls
DigitalaxAccessControls public accessControls;
constructor(
string memory _name,
string memory _symbol,
DigitalaxAccessControls _accessControls
) public {
name = _name;
symbol = _symbol;
accessControls = _accessControls;
emit DigitalaxMaterialsDeployed();
}
///////////////////////////
// Creating new children //
///////////////////////////
/**
@notice Creates a single child ERC1155 token
@dev Only callable with smart contact role
@return id the generated child Token ID
*/
function createChild(string calldata _uri) external returns (uint256 id) {
require(
accessControls.hasSmartContractRole(_msgSender()),
"DigitalaxMaterials.createChild: Sender must be smart contract"
);
require(bytes(_uri).length > 0, "DigitalaxMaterials.createChild: URI is a blank string");
tokenIdPointer = tokenIdPointer.add(1);
id = tokenIdPointer;
_setURI(id, _uri);
emit ChildCreated(id);
}
/**
@notice Creates a batch of child ERC1155 tokens
@dev Only callable with smart contact role
@return tokenIds the generated child Token IDs
*/
function batchCreateChildren(string[] calldata _uris) external returns (uint256[] memory tokenIds) {
require(
accessControls.hasSmartContractRole(_msgSender()),
"DigitalaxMaterials.batchCreateChildren: Sender must be smart contract"
);
require(_uris.length > 0, "DigitalaxMaterials.batchCreateChildren: No data supplied in array");
uint256 urisLength = _uris.length;
tokenIds = new uint256[](urisLength);
for (uint256 i = 0; i < urisLength; i++) {
string memory uri = _uris[i];
require(bytes(uri).length > 0, "DigitalaxMaterials.batchCreateChildren: URI is a blank string");
tokenIdPointer = tokenIdPointer.add(1);
_setURI(tokenIdPointer, uri);
tokenIds[i] = tokenIdPointer;
}
// Batched event for GAS savings
emit ChildrenCreated(tokenIds);
}
//////////////////////////////////
// Minting of existing children //
//////////////////////////////////
/**
@notice Mints a single child ERC1155 tokens, increasing its supply by the _amount specified. msg.data along with the
parent contract as the recipient can be used to map the created children to a given parent token
@dev Only callable with smart contact role
*/
function mintChild(uint256 _childTokenId, uint256 _amount, address _beneficiary, bytes calldata _data) external {
require(
accessControls.hasSmartContractRole(_msgSender()),
"DigitalaxMaterials.mintChild: Sender must be smart contract"
);
require(bytes(tokenUris[_childTokenId]).length > 0, "DigitalaxMaterials.mintChild: Strand does not exist");
require(_amount > 0, "DigitalaxMaterials.mintChild: No amount specified");
_mint(_beneficiary, _childTokenId, _amount, _data);
}
/**
@notice Mints a batch of child ERC1155 tokens, increasing its supply by the _amounts specified. msg.data along with the
parent contract as the recipient can be used to map the created children to a given parent token
@dev Only callable with smart contact role
*/
function batchMintChildren(
uint256[] calldata _childTokenIds,
uint256[] calldata _amounts,
address _beneficiary,
bytes calldata _data
) external {
require(
accessControls.hasSmartContractRole(_msgSender()),
"DigitalaxMaterials.batchMintChildren: Sender must be smart contract"
);
require(_childTokenIds.length == _amounts.length, "DigitalaxMaterials.batchMintChildren: Array lengths are invalid");
require(_childTokenIds.length > 0, "DigitalaxMaterials.batchMintChildren: No data supplied in arrays");
// Check the strands exist and no zero amounts
for (uint256 i = 0; i < _childTokenIds.length; i++) {
uint256 strandId = _childTokenIds[i];
require(bytes(tokenUris[strandId]).length > 0, "DigitalaxMaterials.batchMintChildren: Strand does not exist");
uint256 amount = _amounts[i];
require(amount > 0, "DigitalaxMaterials.batchMintChildren: Invalid amount");
}
_mintBatch(_beneficiary, _childTokenIds, _amounts, _data);
}
function updateAccessControls(DigitalaxAccessControls _accessControls) external {
require(
accessControls.hasAdminRole(_msgSender()),
"DigitalaxMaterials.updateAccessControls: Sender must be admin"
);
require(
address(_accessControls) != address(0),
"DigitalaxMaterials.updateAccessControls: New access controls cannot be ZERO address"
);
accessControls = _accessControls;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"contract DigitalaxAccessControls","name":"_accessControls","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"childId","type":"uint256"}],"name":"ChildCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[]","name":"childIds","type":"uint256[]"}],"name":"ChildrenCreated","type":"event"},{"anonymous":false,"inputs":[],"name":"DigitalaxMaterialsDeployed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[],"name":"accessControls","outputs":[{"internalType":"contract DigitalaxAccessControls","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string[]","name":"_uris","type":"string[]"}],"name":"batchCreateChildren","outputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_childTokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"},{"internalType":"address","name":"_beneficiary","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"batchMintChildren","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"createChild","outputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_childTokenId","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_beneficiary","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"mintChild","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenIdPointer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract DigitalaxAccessControls","name":"_accessControls","type":"address"}],"name":"updateAccessControls","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]Contract Creation Code
60806040523480156200001157600080fd5b50604051620032d9380380620032d9833981016040819052620000349162000281565b620000466301ffc9a760e01b620000e3565b62000058636cdb3d1360e11b620000e3565b6200006a6303a24d0760e21b620000e3565b82516200007f9060059060208601906200013e565b508151620000959060069060208501906200013e565b50600880546001600160a01b0319166001600160a01b0383161790556040517fcc43afa9b2ceb241f40e3278c67b70fe77e23b19c9c996dfa3d1703f9e40e85590600090a150505062000341565b6001600160e01b03198082161415620001195760405162461bcd60e51b815260040162000110906200030a565b60405180910390fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200018157805160ff1916838001178555620001b1565b82800160010185558215620001b1579182015b82811115620001b157825182559160200191906001019062000194565b50620001bf929150620001c3565b5090565b5b80821115620001bf5760008155600101620001c4565b600082601f830112620001eb578081fd5b81516001600160401b038082111562000202578283fd5b6040516020601f8401601f191682018101838111838210171562000224578586fd5b806040525081945083825286818588010111156200024157600080fd5b600092505b8383101562000265578583018101518284018201529182019162000246565b83831115620002775760008185840101525b5050505092915050565b60008060006060848603121562000296578283fd5b83516001600160401b0380821115620002ad578485fd5b620002bb87838801620001da565b94506020860151915080821115620002d1578384fd5b50620002e086828701620001da565b604086015190935090506001600160a01b0381168114620002ff578182fd5b809150509250925092565b6020808252601c908201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604082015260600190565b612f8880620003516000396000f3fe608060405234801561001057600080fd5b506004361061012b5760003560e01c80636ef3da94116100ad578063afb05b3911610071578063afb05b391461026d578063e3b619b814610280578063e985e9c514610293578063f242432a146102a6578063f5298aca146102b95761012b565b80636ef3da9414610217578063748365ef1461022a5780639344ef881461023f57806395d89b4114610252578063a22cb4651461025a5761012b565b8063310e2de0116100f4578063310e2de0146101b65780633b3a1a7a146101c95780634e1273f4146101d15780636468e317146101f15780636b20c454146102045761012b565b8062fdd58e1461013057806301ffc9a71461015957806306fdde03146101795780630e89341c1461018e5780632eb2c2d6146101a1575b600080fd5b61014361013e366004611fb7565b6102cc565b6040516101509190612d5e565b60405180910390f35b61016c6101673660046121dd565b610325565b6040516101509190612460565b610181610344565b604051610150919061246b565b61018161019c366004612264565b6103d2565b6101b46101af366004611e09565b610473565b005b6101b46101c4366004612117565b61068d565b6101436108c0565b6101e46101df366004612016565b6108c6565b604051610150919061241f565b6101436101ff366004612264565b610a05565b6101b4610212366004611f18565b610a17565b6101b4610225366004612215565b610a71565b610232610b5a565b6040516101509190612368565b6101e461024d3660046120d8565b610b69565b610181610d6d565b6101b4610268366004611f8a565b610dc8565b61014361027b366004612231565b610e96565b6101b461028e36600461227c565b610fe1565b61016c6102a1366004611dd1565b611129565b6101b46102b4366004611eb2565b611157565b6101b46102c7366004611fe2565b6112eb565b60006001600160a01b0383166102fd5760405162461bcd60e51b81526004016102f4906125de565b60405180910390fd5b5060009081526001602090815260408083206001600160a01b03949094168352929052205490565b6001600160e01b03191660009081526020819052604090205460ff1690565b6005805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103ca5780601f1061039f576101008083540402835291602001916103ca565b820191906000526020600020905b8154815290600101906020018083116103ad57829003601f168201915b505050505081565b60008181526003602090815260409182902080548351601f60026000196101006001861615020190931692909204918201849004840281018401909452808452606093928301828280156104675780601f1061043c57610100808354040283529160200191610467565b820191906000526020600020905b81548152906001019060200180831161044a57829003601f168201915b50505050509050919050565b81518351146104945760405162461bcd60e51b81526004016102f490612cd5565b6001600160a01b0384166104ba5760405162461bcd60e51b81526004016102f490612799565b6104c2611340565b6001600160a01b0316856001600160a01b031614806104e857506104e8856102a1611340565b6105045760405162461bcd60e51b81526004016102f4906127de565b600061050e611340565b905061051e818787878787610685565b60005b845181101561061f57600085828151811061053857fe5b60200260200101519050600085838151811061055057fe5b602002602001015190506105bd816040518060600160405280602a8152602001612f09602a91396001600086815260200190815260200160002060008d6001600160a01b03166001600160a01b03168152602001908152602001600020546113459092919063ffffffff16565b60008381526001602090815260408083206001600160a01b038e811685529252808320939093558a16815220546105f49082611371565b60009283526001602081815260408086206001600160a01b038d168752909152909320555001610521565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161066f929190612432565b60405180910390a461068581878787878761139d565b505050505050565b6008546001600160a01b031663113b0ab26106a6611340565b6040518263ffffffff1660e01b81526004016106c29190612368565b60206040518083038186803b1580156106da57600080fd5b505afa1580156106ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071291906121c1565b61072e5760405162461bcd60e51b81526004016102f490612a1c565b85841461074d5760405162461bcd60e51b81526004016102f490612923565b8561076a5760405162461bcd60e51b81526004016102f490612c2c565b60005b8681101561081457600088888381811061078357fe5b905060200201359050600060036000838152602001908152602001600020805460018160011615610100020316600290049050116107d35760405162461bcd60e51b81526004016102f490612593565b60008787848181106107e157fe5b9050602002013590506000811161080a5760405162461bcd60e51b81526004016102f4906126b1565b505060010161076d565b506108b78388888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808c0282810182019093528b82529093508b92508a91829185019084908082843760009201919091525050604080516020601f8a0181900481028201810190925288815292508891508790819084018382808284376000920191909152506114ab92505050565b50505050505050565b60075481565b606081518351146108e95760405162461bcd60e51b81526004016102f490612be3565b606083516001600160401b038111801561090257600080fd5b5060405190808252806020026020018201604052801561092c578160200160208202803683370190505b50905060005b84518110156109fd5760006001600160a01b031685828151811061095257fe5b60200260200101516001600160a01b031614156109815760405162461bcd60e51b81526004016102f490612629565b6001600085838151811061099157fe5b6020026020010151815260200190815260200160002060008683815181106109b557fe5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020548282815181106109ea57fe5b6020908102919091010152600101610932565b509392505050565b60046020526000908152604090205481565b610a1f611340565b6001600160a01b0316836001600160a01b03161480610a455750610a45836102a1611340565b610a615760405162461bcd60e51b81526004016102f4906126f3565b610a6c838383611638565b505050565b6008546001600160a01b031663c395fcb3610a8a611340565b6040518263ffffffff1660e01b8152600401610aa69190612368565b60206040518083038186803b158015610abe57600080fd5b505afa158015610ad2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af691906121c1565b610b125760405162461bcd60e51b81526004016102f490612830565b6001600160a01b038116610b385760405162461bcd60e51b81526004016102f4906124d2565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6008546001600160a01b031681565b6008546060906001600160a01b031663113b0ab2610b85611340565b6040518263ffffffff1660e01b8152600401610ba19190612368565b60206040518083038186803b158015610bb957600080fd5b505afa158015610bcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf191906121c1565b610c0d5760405162461bcd60e51b81526004016102f490612ada565b81610c2a5760405162461bcd60e51b81526004016102f490612a73565b81806001600160401b0381118015610c4157600080fd5b50604051908082528060200260200182016040528015610c6b578160200160208202803683370190505b50915060005b81811015610d2e576060858583818110610c8757fe5b9050602002810190610c999190612d75565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505082519293505050610cee5760405162461bcd60e51b81526004016102f49061296e565b600754610cfc906001611371565b6007819055610d0b90826117e0565b600754848381518110610d1a57fe5b602090810291909101015250600101610c71565b507faad999d58beff0d6c87a9d1fafc57f66aba220298f12b2ed8acded84d0747d2b82604051610d5e919061241f565b60405180910390a15092915050565b6006805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103ca5780601f1061039f576101008083540402835291602001916103ca565b816001600160a01b0316610dda611340565b6001600160a01b03161415610e015760405162461bcd60e51b81526004016102f490612b9a565b8060026000610e0e611340565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155610e52611340565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610e8a9190612460565b60405180910390a35050565b6008546000906001600160a01b031663113b0ab2610eb2611340565b6040518263ffffffff1660e01b8152600401610ece9190612368565b60206040518083038186803b158015610ee657600080fd5b505afa158015610efa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1e91906121c1565b610f3a5760405162461bcd60e51b81526004016102f49061273c565b81610f575760405162461bcd60e51b81526004016102f490612b45565b600754610f65906001611371565b6007819055506007549050610fb08184848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506117e092505050565b60405181907f4a481cf1ce03d2f2700fc83197f32f7c5abac90db8e69cf7f1e1b6ca563c141790600090a292915050565b6008546001600160a01b031663113b0ab2610ffa611340565b6040518263ffffffff1660e01b81526004016110169190612368565b60206040518083038186803b15801561102e57600080fd5b505afa158015611042573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106691906121c1565b6110825760405162461bcd60e51b81526004016102f490612c78565b600085815260036020526040902054600260001961010060018416150201909116046110c05760405162461bcd60e51b81526004016102f49061288d565b600084116110e05760405162461bcd60e51b81526004016102f4906129cb565b61112283868685858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061183c92505050565b5050505050565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205460ff1690565b6001600160a01b03841661117d5760405162461bcd60e51b81526004016102f490612799565b611185611340565b6001600160a01b0316856001600160a01b031614806111ab57506111ab856102a1611340565b6111c75760405162461bcd60e51b81526004016102f4906126f3565b60006111d1611340565b90506111f18187876111e288611950565b6111eb88611950565b87610685565b611238836040518060600160405280602a8152602001612f09602a913960008781526001602090815260408083206001600160a01b038d1684529091529020549190611345565b60008581526001602090815260408083206001600160a01b038b8116855292528083209390935587168152205461126f9084611371565b60008581526001602090815260408083206001600160a01b03808b168086529190935292819020939093559151909188811691908416907fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62906112d59089908990612d67565b60405180910390a4610685818787878787611994565b6112f3611340565b6001600160a01b0316836001600160a01b031614806113195750611319836102a1611340565b6113355760405162461bcd60e51b81526004016102f4906126f3565b610a6c838383611a65565b335b90565b600081848411156113695760405162461bcd60e51b81526004016102f4919061246b565b505050900390565b6000828201838110156113965760405162461bcd60e51b81526004016102f49061267a565b9392505050565b6113af846001600160a01b0316611b99565b156106855760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906113e8908990899088908890889060040161237c565b602060405180830381600087803b15801561140257600080fd5b505af1925050508015611432575060408051601f3d908101601f1916820190925261142f918101906121f9565b60015b61147b5761143e612e04565b806114495750611463565b8060405162461bcd60e51b81526004016102f4919061246b565b60405162461bcd60e51b81526004016102f49061247e565b6001600160e01b0319811663bc197c8160e01b146108b75760405162461bcd60e51b81526004016102f49061254b565b6001600160a01b0384166114d15760405162461bcd60e51b81526004016102f490612d1d565b81518351146114f25760405162461bcd60e51b81526004016102f490612cd5565b60006114fc611340565b905061150d81600087878787610685565b60005b84518110156115d057600085828151811061152757fe5b60200260200101519050600085838151811061153f57fe5b60209081029190910181015160008481526001835260408082206001600160a01b038d168352909352919091205490915061157b908290611371565b60008381526001602090815260408083206001600160a01b038d1684528252808320939093558482526004905220546115b49082611371565b6000928352600460205260409092209190915550600101611510565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611621929190612432565b60405180910390a46111228160008787878761139d565b6001600160a01b03831661165e5760405162461bcd60e51b81526004016102f4906128e0565b805182511461167f5760405162461bcd60e51b81526004016102f490612cd5565b6000611689611340565b90506116a981856000868660405180602001604052806000815250610685565b60005b83518110156117815760008482815181106116c357fe5b6020026020010151905060008483815181106116db57fe5b6020026020010151905061172c81604051806060016040528060248152602001612ee56024913960008581526001602090815260408083206001600160a01b038e1684529091529020549190611345565b60008381526001602090815260408083206001600160a01b038c1684528252808320939093558482526004905220546117659082611b9f565b60009283526004602052604090922091909155506001016116ac565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516117d2929190612432565b60405180910390a450505050565b600082815260036020908152604090912082516117ff92840190611be1565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b82604051611830919061246b565b60405180910390a25050565b6001600160a01b0384166118625760405162461bcd60e51b81526004016102f490612d1d565b600061186c611340565b905061187e816000876111e288611950565b60008481526001602090815260408083206001600160a01b03891684529091529020546118ab9084611371565b60008581526001602090815260408083206001600160a01b038a1684528252808320939093558682526004905220546118e49084611371565b6000858152600460205260408082209290925590516001600160a01b038088169291908416907fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62906119399089908990612d67565b60405180910390a461112281600087878787611994565b60408051600180825281830190925260609182919060208083019080368337019050509050828160008151811061198357fe5b602090810291909101015292915050565b6119a6846001600160a01b0316611b99565b156106855760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906119df90899089908890889088906004016123da565b602060405180830381600087803b1580156119f957600080fd5b505af1925050508015611a29575060408051601f3d908101601f19168201909252611a26918101906121f9565b60015b611a355761143e612e04565b6001600160e01b0319811663f23a6e6160e01b146108b75760405162461bcd60e51b81526004016102f49061254b565b6001600160a01b038316611a8b5760405162461bcd60e51b81526004016102f4906128e0565b6000611a95611340565b9050611ac581856000611aa787611950565b611ab087611950565b60405180602001604052806000815250610685565b611b0c82604051806060016040528060248152602001612ee56024913960008681526001602090815260408083206001600160a01b038b1684529091529020549190611345565b60008481526001602090815260408083206001600160a01b0389168452825280832093909355858252600490522054611b459083611b9f565b6000848152600460205260408082209290925590516001600160a01b0386811691908416907fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62906117d29088908890612d67565b3b151590565b600061139683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611345565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611c2257805160ff1916838001178555611c4f565b82800160010185558215611c4f579182015b82811115611c4f578251825591602001919060010190611c34565b50611c5b929150611c5f565b5090565b5b80821115611c5b5760008155600101611c60565b60008083601f840112611c85578081fd5b5081356001600160401b03811115611c9b578182fd5b6020830191508360208083028501011115611cb557600080fd5b9250929050565b600082601f830112611ccc578081fd5b8135611cdf611cda82612ddf565b612db9565b818152915060208083019084810181840286018201871015611d0057600080fd5b60005b84811015611d1f57813584529282019290820190600101611d03565b505050505092915050565b60008083601f840112611d3b578182fd5b5081356001600160401b03811115611d51578182fd5b602083019150836020828501011115611cb557600080fd5b600082601f830112611d79578081fd5b81356001600160401b03811115611d8e578182fd5b611da1601f8201601f1916602001612db9565b9150808252836020828501011115611db857600080fd5b8060208401602084013760009082016020015292915050565b60008060408385031215611de3578182fd5b8235611dee81612ea8565b91506020830135611dfe81612ea8565b809150509250929050565b600080600080600060a08688031215611e20578081fd5b8535611e2b81612ea8565b94506020860135611e3b81612ea8565b935060408601356001600160401b0380821115611e56578283fd5b611e6289838a01611cbc565b94506060880135915080821115611e77578283fd5b611e8389838a01611cbc565b93506080880135915080821115611e98578283fd5b50611ea588828901611d69565b9150509295509295909350565b600080600080600060a08688031215611ec9578081fd5b8535611ed481612ea8565b94506020860135611ee481612ea8565b9350604086013592506060860135915060808601356001600160401b03811115611f0c578182fd5b611ea588828901611d69565b600080600060608486031215611f2c578283fd5b8335611f3781612ea8565b925060208401356001600160401b0380821115611f52578384fd5b611f5e87838801611cbc565b93506040860135915080821115611f73578283fd5b50611f8086828701611cbc565b9150509250925092565b60008060408385031215611f9c578182fd5b8235611fa781612ea8565b91506020830135611dfe81612ec0565b60008060408385031215611fc9578182fd5b8235611fd481612ea8565b946020939093013593505050565b600080600060608486031215611ff6578283fd5b833561200181612ea8565b95602085013595506040909401359392505050565b60008060408385031215612028578182fd5b82356001600160401b038082111561203e578384fd5b818501915085601f830112612051578384fd5b813561205f611cda82612ddf565b80828252602080830192508086018a82838702890101111561207f578889fd5b8896505b848710156120aa57803561209681612ea8565b845260019690960195928101928101612083565b5090965087013593505050808211156120c1578283fd5b506120ce85828601611cbc565b9150509250929050565b600080602083850312156120ea578182fd5b82356001600160401b038111156120ff578283fd5b61210b85828601611c74565b90969095509350505050565b60008060008060008060006080888a031215612131578485fd5b87356001600160401b0380821115612147578687fd5b6121538b838c01611c74565b909950975060208a013591508082111561216b578687fd5b6121778b838c01611c74565b909750955060408a0135915061218c82612ea8565b909350606089013590808211156121a1578384fd5b506121ae8a828b01611d2a565b989b979a50959850939692959293505050565b6000602082840312156121d2578081fd5b815161139681612ec0565b6000602082840312156121ee578081fd5b813561139681612ece565b60006020828403121561220a578081fd5b815161139681612ece565b600060208284031215612226578081fd5b813561139681612ea8565b60008060208385031215612243578182fd5b82356001600160401b03811115612258578283fd5b61210b85828601611d2a565b600060208284031215612275578081fd5b5035919050565b600080600080600060808688031215612293578283fd5b853594506020860135935060408601356122ac81612ea8565b925060608601356001600160401b038111156122c6578182fd5b6122d288828901611d2a565b969995985093965092949392505050565b6000815180845260208085019450808401835b83811015612312578151875295820195908201906001016122f6565b509495945050505050565b60008151808452815b8181101561234257602081850181015186830182015201612326565b818111156123535782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0386811682528516602082015260a0604082018190526000906123a8908301866122e3565b82810360608401526123ba81866122e3565b905082810360808401526123ce818561231d565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906124149083018461231d565b979650505050505050565b60006020825261139660208301846122e3565b60006040825261244560408301856122e3565b828103602084015261245781856122e3565b95945050505050565b901515815260200190565b600060208252611396602083018461231d565b60208082526034908201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356040820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606082015260800190565b60208082526053908201527f4469676974616c61784d6174657269616c732e7570646174654163636573734360408201527f6f6e74726f6c733a204e65772061636365737320636f6e74726f6c732063616e6060820152726e6f74206265205a45524f206164647265737360681b608082015260a00190565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6020808252603b90820152600080516020612f3383398151915260408201527f6472656e3a20537472616e6420646f6573206e6f742065786973740000000000606082015260800190565b6020808252602b908201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60408201526a65726f206164647265737360a81b606082015260800190565b60208082526031908201527f455243313135353a2062617463682062616c616e636520717565727920666f7260408201527020746865207a65726f206164647265737360781b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252603490820152600080516020612f33833981519152604082015273191c995b8e88125b9d985b1a5908185b5bdd5b9d60621b606082015260800190565b60208082526029908201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260408201526808185c1c1c9bdd995960ba1b606082015260800190565b6020808252603d908201527f4469676974616c61784d6174657269616c732e6372656174654368696c643a2060408201527f53656e646572206d75737420626520736d61727420636f6e7472616374000000606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526032908201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206040820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606082015260800190565b6020808252603d908201527f4469676974616c61784d6174657269616c732e7570646174654163636573734360408201527f6f6e74726f6c733a2053656e646572206d7573742062652061646d696e000000606082015260800190565b60208082526033908201527f4469676974616c61784d6174657269616c732e6d696e744368696c643a2053746040820152721c985b9908191bd95cc81b9bdd08195e1a5cdd606a1b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252603f90820152600080516020612f3383398151915260408201527f6472656e3a204172726179206c656e677468732061726520696e76616c696400606082015260800190565b6020808252603d908201527f4469676974616c61784d6174657269616c732e6261746368437265617465436860408201527f696c6472656e3a20555249206973206120626c616e6b20737472696e67000000606082015260800190565b60208082526031908201527f4469676974616c61784d6174657269616c732e6d696e744368696c643a204e6f60408201527008185b5bdd5b9d081cdc1958da599a5959607a1b606082015260800190565b6020808252604390820152600080516020612f3383398151915260408201527f6472656e3a2053656e646572206d75737420626520736d61727420636f6e74726060820152621858dd60ea1b608082015260a00190565b60208082526041908201527f4469676974616c61784d6174657269616c732e6261746368437265617465436860408201527f696c6472656e3a204e6f206461746120737570706c69656420696e20617272616060820152607960f81b608082015260a00190565b60208082526045908201527f4469676974616c61784d6174657269616c732e6261746368437265617465436860408201527f696c6472656e3a2053656e646572206d75737420626520736d61727420636f6e6060820152641d1c9858dd60da1b608082015260a00190565b60208082526035908201527f4469676974616c61784d6174657269616c732e6372656174654368696c643a20604082015274555249206973206120626c616e6b20737472696e6760581b606082015260800190565b60208082526029908201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604082015268103337b91039b2b63360b91b606082015260800190565b60208082526029908201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604082015268040dad2e6dac2e8c6d60bb1b606082015260800190565b60208082526040908201819052600080516020612f33833981519152908201527f6472656e3a204e6f206461746120737570706c69656420696e20617272617973606082015260800190565b6020808252603b908201527f4469676974616c61784d6174657269616c732e6d696e744368696c643a20536560408201527f6e646572206d75737420626520736d61727420636f6e74726163740000000000606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b90815260200190565b918252602082015260400190565b6000808335601e19843603018112612d8b578283fd5b8301803591506001600160401b03821115612da4578283fd5b602001915036819003821315611cb557600080fd5b6040518181016001600160401b0381118282101715612dd757600080fd5b604052919050565b60006001600160401b03821115612df4578081fd5b5060209081020190565b60e01c90565b600060443d1015612e1457611342565b600481823e6308c379a0612e288251612dfe565b14612e3257611342565b6040513d600319016004823e80513d6001600160401b038160248401118184111715612e615750505050611342565b82840192508251915080821115612e7b5750505050611342565b503d83016020828401011115612e9357505050611342565b601f01601f1916810160200160405291505090565b6001600160a01b0381168114612ebd57600080fd5b50565b8015158114612ebd57600080fd5b6001600160e01b031981168114612ebd57600080fdfe455243313135353a206275726e20616d6f756e7420657863656564732062616c616e6365455243313135353a20696e73756666696369656e742062616c616e636520666f72207472616e736665724469676974616c61784d6174657269616c732e62617463684d696e744368696ca2646970667358221220fd08730c783f9c40d1b6ae8680a00785a97612b77d374e11d172af85783c9c8f64736f6c634300060c0033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000165eec91620b7bb96d02890d8a3f8cb79a29195c00000000000000000000000000000000000000000000000000000000000000124469676974616c61784d6174657269616c730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000344584d0000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061012b5760003560e01c80636ef3da94116100ad578063afb05b3911610071578063afb05b391461026d578063e3b619b814610280578063e985e9c514610293578063f242432a146102a6578063f5298aca146102b95761012b565b80636ef3da9414610217578063748365ef1461022a5780639344ef881461023f57806395d89b4114610252578063a22cb4651461025a5761012b565b8063310e2de0116100f4578063310e2de0146101b65780633b3a1a7a146101c95780634e1273f4146101d15780636468e317146101f15780636b20c454146102045761012b565b8062fdd58e1461013057806301ffc9a71461015957806306fdde03146101795780630e89341c1461018e5780632eb2c2d6146101a1575b600080fd5b61014361013e366004611fb7565b6102cc565b6040516101509190612d5e565b60405180910390f35b61016c6101673660046121dd565b610325565b6040516101509190612460565b610181610344565b604051610150919061246b565b61018161019c366004612264565b6103d2565b6101b46101af366004611e09565b610473565b005b6101b46101c4366004612117565b61068d565b6101436108c0565b6101e46101df366004612016565b6108c6565b604051610150919061241f565b6101436101ff366004612264565b610a05565b6101b4610212366004611f18565b610a17565b6101b4610225366004612215565b610a71565b610232610b5a565b6040516101509190612368565b6101e461024d3660046120d8565b610b69565b610181610d6d565b6101b4610268366004611f8a565b610dc8565b61014361027b366004612231565b610e96565b6101b461028e36600461227c565b610fe1565b61016c6102a1366004611dd1565b611129565b6101b46102b4366004611eb2565b611157565b6101b46102c7366004611fe2565b6112eb565b60006001600160a01b0383166102fd5760405162461bcd60e51b81526004016102f4906125de565b60405180910390fd5b5060009081526001602090815260408083206001600160a01b03949094168352929052205490565b6001600160e01b03191660009081526020819052604090205460ff1690565b6005805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103ca5780601f1061039f576101008083540402835291602001916103ca565b820191906000526020600020905b8154815290600101906020018083116103ad57829003601f168201915b505050505081565b60008181526003602090815260409182902080548351601f60026000196101006001861615020190931692909204918201849004840281018401909452808452606093928301828280156104675780601f1061043c57610100808354040283529160200191610467565b820191906000526020600020905b81548152906001019060200180831161044a57829003601f168201915b50505050509050919050565b81518351146104945760405162461bcd60e51b81526004016102f490612cd5565b6001600160a01b0384166104ba5760405162461bcd60e51b81526004016102f490612799565b6104c2611340565b6001600160a01b0316856001600160a01b031614806104e857506104e8856102a1611340565b6105045760405162461bcd60e51b81526004016102f4906127de565b600061050e611340565b905061051e818787878787610685565b60005b845181101561061f57600085828151811061053857fe5b60200260200101519050600085838151811061055057fe5b602002602001015190506105bd816040518060600160405280602a8152602001612f09602a91396001600086815260200190815260200160002060008d6001600160a01b03166001600160a01b03168152602001908152602001600020546113459092919063ffffffff16565b60008381526001602090815260408083206001600160a01b038e811685529252808320939093558a16815220546105f49082611371565b60009283526001602081815260408086206001600160a01b038d168752909152909320555001610521565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161066f929190612432565b60405180910390a461068581878787878761139d565b505050505050565b6008546001600160a01b031663113b0ab26106a6611340565b6040518263ffffffff1660e01b81526004016106c29190612368565b60206040518083038186803b1580156106da57600080fd5b505afa1580156106ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071291906121c1565b61072e5760405162461bcd60e51b81526004016102f490612a1c565b85841461074d5760405162461bcd60e51b81526004016102f490612923565b8561076a5760405162461bcd60e51b81526004016102f490612c2c565b60005b8681101561081457600088888381811061078357fe5b905060200201359050600060036000838152602001908152602001600020805460018160011615610100020316600290049050116107d35760405162461bcd60e51b81526004016102f490612593565b60008787848181106107e157fe5b9050602002013590506000811161080a5760405162461bcd60e51b81526004016102f4906126b1565b505060010161076d565b506108b78388888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808c0282810182019093528b82529093508b92508a91829185019084908082843760009201919091525050604080516020601f8a0181900481028201810190925288815292508891508790819084018382808284376000920191909152506114ab92505050565b50505050505050565b60075481565b606081518351146108e95760405162461bcd60e51b81526004016102f490612be3565b606083516001600160401b038111801561090257600080fd5b5060405190808252806020026020018201604052801561092c578160200160208202803683370190505b50905060005b84518110156109fd5760006001600160a01b031685828151811061095257fe5b60200260200101516001600160a01b031614156109815760405162461bcd60e51b81526004016102f490612629565b6001600085838151811061099157fe5b6020026020010151815260200190815260200160002060008683815181106109b557fe5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020548282815181106109ea57fe5b6020908102919091010152600101610932565b509392505050565b60046020526000908152604090205481565b610a1f611340565b6001600160a01b0316836001600160a01b03161480610a455750610a45836102a1611340565b610a615760405162461bcd60e51b81526004016102f4906126f3565b610a6c838383611638565b505050565b6008546001600160a01b031663c395fcb3610a8a611340565b6040518263ffffffff1660e01b8152600401610aa69190612368565b60206040518083038186803b158015610abe57600080fd5b505afa158015610ad2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af691906121c1565b610b125760405162461bcd60e51b81526004016102f490612830565b6001600160a01b038116610b385760405162461bcd60e51b81526004016102f4906124d2565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6008546001600160a01b031681565b6008546060906001600160a01b031663113b0ab2610b85611340565b6040518263ffffffff1660e01b8152600401610ba19190612368565b60206040518083038186803b158015610bb957600080fd5b505afa158015610bcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf191906121c1565b610c0d5760405162461bcd60e51b81526004016102f490612ada565b81610c2a5760405162461bcd60e51b81526004016102f490612a73565b81806001600160401b0381118015610c4157600080fd5b50604051908082528060200260200182016040528015610c6b578160200160208202803683370190505b50915060005b81811015610d2e576060858583818110610c8757fe5b9050602002810190610c999190612d75565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505082519293505050610cee5760405162461bcd60e51b81526004016102f49061296e565b600754610cfc906001611371565b6007819055610d0b90826117e0565b600754848381518110610d1a57fe5b602090810291909101015250600101610c71565b507faad999d58beff0d6c87a9d1fafc57f66aba220298f12b2ed8acded84d0747d2b82604051610d5e919061241f565b60405180910390a15092915050565b6006805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103ca5780601f1061039f576101008083540402835291602001916103ca565b816001600160a01b0316610dda611340565b6001600160a01b03161415610e015760405162461bcd60e51b81526004016102f490612b9a565b8060026000610e0e611340565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155610e52611340565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610e8a9190612460565b60405180910390a35050565b6008546000906001600160a01b031663113b0ab2610eb2611340565b6040518263ffffffff1660e01b8152600401610ece9190612368565b60206040518083038186803b158015610ee657600080fd5b505afa158015610efa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1e91906121c1565b610f3a5760405162461bcd60e51b81526004016102f49061273c565b81610f575760405162461bcd60e51b81526004016102f490612b45565b600754610f65906001611371565b6007819055506007549050610fb08184848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506117e092505050565b60405181907f4a481cf1ce03d2f2700fc83197f32f7c5abac90db8e69cf7f1e1b6ca563c141790600090a292915050565b6008546001600160a01b031663113b0ab2610ffa611340565b6040518263ffffffff1660e01b81526004016110169190612368565b60206040518083038186803b15801561102e57600080fd5b505afa158015611042573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106691906121c1565b6110825760405162461bcd60e51b81526004016102f490612c78565b600085815260036020526040902054600260001961010060018416150201909116046110c05760405162461bcd60e51b81526004016102f49061288d565b600084116110e05760405162461bcd60e51b81526004016102f4906129cb565b61112283868685858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061183c92505050565b5050505050565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205460ff1690565b6001600160a01b03841661117d5760405162461bcd60e51b81526004016102f490612799565b611185611340565b6001600160a01b0316856001600160a01b031614806111ab57506111ab856102a1611340565b6111c75760405162461bcd60e51b81526004016102f4906126f3565b60006111d1611340565b90506111f18187876111e288611950565b6111eb88611950565b87610685565b611238836040518060600160405280602a8152602001612f09602a913960008781526001602090815260408083206001600160a01b038d1684529091529020549190611345565b60008581526001602090815260408083206001600160a01b038b8116855292528083209390935587168152205461126f9084611371565b60008581526001602090815260408083206001600160a01b03808b168086529190935292819020939093559151909188811691908416907fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62906112d59089908990612d67565b60405180910390a4610685818787878787611994565b6112f3611340565b6001600160a01b0316836001600160a01b031614806113195750611319836102a1611340565b6113355760405162461bcd60e51b81526004016102f4906126f3565b610a6c838383611a65565b335b90565b600081848411156113695760405162461bcd60e51b81526004016102f4919061246b565b505050900390565b6000828201838110156113965760405162461bcd60e51b81526004016102f49061267a565b9392505050565b6113af846001600160a01b0316611b99565b156106855760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906113e8908990899088908890889060040161237c565b602060405180830381600087803b15801561140257600080fd5b505af1925050508015611432575060408051601f3d908101601f1916820190925261142f918101906121f9565b60015b61147b5761143e612e04565b806114495750611463565b8060405162461bcd60e51b81526004016102f4919061246b565b60405162461bcd60e51b81526004016102f49061247e565b6001600160e01b0319811663bc197c8160e01b146108b75760405162461bcd60e51b81526004016102f49061254b565b6001600160a01b0384166114d15760405162461bcd60e51b81526004016102f490612d1d565b81518351146114f25760405162461bcd60e51b81526004016102f490612cd5565b60006114fc611340565b905061150d81600087878787610685565b60005b84518110156115d057600085828151811061152757fe5b60200260200101519050600085838151811061153f57fe5b60209081029190910181015160008481526001835260408082206001600160a01b038d168352909352919091205490915061157b908290611371565b60008381526001602090815260408083206001600160a01b038d1684528252808320939093558482526004905220546115b49082611371565b6000928352600460205260409092209190915550600101611510565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611621929190612432565b60405180910390a46111228160008787878761139d565b6001600160a01b03831661165e5760405162461bcd60e51b81526004016102f4906128e0565b805182511461167f5760405162461bcd60e51b81526004016102f490612cd5565b6000611689611340565b90506116a981856000868660405180602001604052806000815250610685565b60005b83518110156117815760008482815181106116c357fe5b6020026020010151905060008483815181106116db57fe5b6020026020010151905061172c81604051806060016040528060248152602001612ee56024913960008581526001602090815260408083206001600160a01b038e1684529091529020549190611345565b60008381526001602090815260408083206001600160a01b038c1684528252808320939093558482526004905220546117659082611b9f565b60009283526004602052604090922091909155506001016116ac565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516117d2929190612432565b60405180910390a450505050565b600082815260036020908152604090912082516117ff92840190611be1565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b82604051611830919061246b565b60405180910390a25050565b6001600160a01b0384166118625760405162461bcd60e51b81526004016102f490612d1d565b600061186c611340565b905061187e816000876111e288611950565b60008481526001602090815260408083206001600160a01b03891684529091529020546118ab9084611371565b60008581526001602090815260408083206001600160a01b038a1684528252808320939093558682526004905220546118e49084611371565b6000858152600460205260408082209290925590516001600160a01b038088169291908416907fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62906119399089908990612d67565b60405180910390a461112281600087878787611994565b60408051600180825281830190925260609182919060208083019080368337019050509050828160008151811061198357fe5b602090810291909101015292915050565b6119a6846001600160a01b0316611b99565b156106855760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906119df90899089908890889088906004016123da565b602060405180830381600087803b1580156119f957600080fd5b505af1925050508015611a29575060408051601f3d908101601f19168201909252611a26918101906121f9565b60015b611a355761143e612e04565b6001600160e01b0319811663f23a6e6160e01b146108b75760405162461bcd60e51b81526004016102f49061254b565b6001600160a01b038316611a8b5760405162461bcd60e51b81526004016102f4906128e0565b6000611a95611340565b9050611ac581856000611aa787611950565b611ab087611950565b60405180602001604052806000815250610685565b611b0c82604051806060016040528060248152602001612ee56024913960008681526001602090815260408083206001600160a01b038b1684529091529020549190611345565b60008481526001602090815260408083206001600160a01b0389168452825280832093909355858252600490522054611b459083611b9f565b6000848152600460205260408082209290925590516001600160a01b0386811691908416907fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62906117d29088908890612d67565b3b151590565b600061139683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611345565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611c2257805160ff1916838001178555611c4f565b82800160010185558215611c4f579182015b82811115611c4f578251825591602001919060010190611c34565b50611c5b929150611c5f565b5090565b5b80821115611c5b5760008155600101611c60565b60008083601f840112611c85578081fd5b5081356001600160401b03811115611c9b578182fd5b6020830191508360208083028501011115611cb557600080fd5b9250929050565b600082601f830112611ccc578081fd5b8135611cdf611cda82612ddf565b612db9565b818152915060208083019084810181840286018201871015611d0057600080fd5b60005b84811015611d1f57813584529282019290820190600101611d03565b505050505092915050565b60008083601f840112611d3b578182fd5b5081356001600160401b03811115611d51578182fd5b602083019150836020828501011115611cb557600080fd5b600082601f830112611d79578081fd5b81356001600160401b03811115611d8e578182fd5b611da1601f8201601f1916602001612db9565b9150808252836020828501011115611db857600080fd5b8060208401602084013760009082016020015292915050565b60008060408385031215611de3578182fd5b8235611dee81612ea8565b91506020830135611dfe81612ea8565b809150509250929050565b600080600080600060a08688031215611e20578081fd5b8535611e2b81612ea8565b94506020860135611e3b81612ea8565b935060408601356001600160401b0380821115611e56578283fd5b611e6289838a01611cbc565b94506060880135915080821115611e77578283fd5b611e8389838a01611cbc565b93506080880135915080821115611e98578283fd5b50611ea588828901611d69565b9150509295509295909350565b600080600080600060a08688031215611ec9578081fd5b8535611ed481612ea8565b94506020860135611ee481612ea8565b9350604086013592506060860135915060808601356001600160401b03811115611f0c578182fd5b611ea588828901611d69565b600080600060608486031215611f2c578283fd5b8335611f3781612ea8565b925060208401356001600160401b0380821115611f52578384fd5b611f5e87838801611cbc565b93506040860135915080821115611f73578283fd5b50611f8086828701611cbc565b9150509250925092565b60008060408385031215611f9c578182fd5b8235611fa781612ea8565b91506020830135611dfe81612ec0565b60008060408385031215611fc9578182fd5b8235611fd481612ea8565b946020939093013593505050565b600080600060608486031215611ff6578283fd5b833561200181612ea8565b95602085013595506040909401359392505050565b60008060408385031215612028578182fd5b82356001600160401b038082111561203e578384fd5b818501915085601f830112612051578384fd5b813561205f611cda82612ddf565b80828252602080830192508086018a82838702890101111561207f578889fd5b8896505b848710156120aa57803561209681612ea8565b845260019690960195928101928101612083565b5090965087013593505050808211156120c1578283fd5b506120ce85828601611cbc565b9150509250929050565b600080602083850312156120ea578182fd5b82356001600160401b038111156120ff578283fd5b61210b85828601611c74565b90969095509350505050565b60008060008060008060006080888a031215612131578485fd5b87356001600160401b0380821115612147578687fd5b6121538b838c01611c74565b909950975060208a013591508082111561216b578687fd5b6121778b838c01611c74565b909750955060408a0135915061218c82612ea8565b909350606089013590808211156121a1578384fd5b506121ae8a828b01611d2a565b989b979a50959850939692959293505050565b6000602082840312156121d2578081fd5b815161139681612ec0565b6000602082840312156121ee578081fd5b813561139681612ece565b60006020828403121561220a578081fd5b815161139681612ece565b600060208284031215612226578081fd5b813561139681612ea8565b60008060208385031215612243578182fd5b82356001600160401b03811115612258578283fd5b61210b85828601611d2a565b600060208284031215612275578081fd5b5035919050565b600080600080600060808688031215612293578283fd5b853594506020860135935060408601356122ac81612ea8565b925060608601356001600160401b038111156122c6578182fd5b6122d288828901611d2a565b969995985093965092949392505050565b6000815180845260208085019450808401835b83811015612312578151875295820195908201906001016122f6565b509495945050505050565b60008151808452815b8181101561234257602081850181015186830182015201612326565b818111156123535782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0386811682528516602082015260a0604082018190526000906123a8908301866122e3565b82810360608401526123ba81866122e3565b905082810360808401526123ce818561231d565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906124149083018461231d565b979650505050505050565b60006020825261139660208301846122e3565b60006040825261244560408301856122e3565b828103602084015261245781856122e3565b95945050505050565b901515815260200190565b600060208252611396602083018461231d565b60208082526034908201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356040820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606082015260800190565b60208082526053908201527f4469676974616c61784d6174657269616c732e7570646174654163636573734360408201527f6f6e74726f6c733a204e65772061636365737320636f6e74726f6c732063616e6060820152726e6f74206265205a45524f206164647265737360681b608082015260a00190565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6020808252603b90820152600080516020612f3383398151915260408201527f6472656e3a20537472616e6420646f6573206e6f742065786973740000000000606082015260800190565b6020808252602b908201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60408201526a65726f206164647265737360a81b606082015260800190565b60208082526031908201527f455243313135353a2062617463682062616c616e636520717565727920666f7260408201527020746865207a65726f206164647265737360781b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252603490820152600080516020612f33833981519152604082015273191c995b8e88125b9d985b1a5908185b5bdd5b9d60621b606082015260800190565b60208082526029908201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260408201526808185c1c1c9bdd995960ba1b606082015260800190565b6020808252603d908201527f4469676974616c61784d6174657269616c732e6372656174654368696c643a2060408201527f53656e646572206d75737420626520736d61727420636f6e7472616374000000606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526032908201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206040820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606082015260800190565b6020808252603d908201527f4469676974616c61784d6174657269616c732e7570646174654163636573734360408201527f6f6e74726f6c733a2053656e646572206d7573742062652061646d696e000000606082015260800190565b60208082526033908201527f4469676974616c61784d6174657269616c732e6d696e744368696c643a2053746040820152721c985b9908191bd95cc81b9bdd08195e1a5cdd606a1b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252603f90820152600080516020612f3383398151915260408201527f6472656e3a204172726179206c656e677468732061726520696e76616c696400606082015260800190565b6020808252603d908201527f4469676974616c61784d6174657269616c732e6261746368437265617465436860408201527f696c6472656e3a20555249206973206120626c616e6b20737472696e67000000606082015260800190565b60208082526031908201527f4469676974616c61784d6174657269616c732e6d696e744368696c643a204e6f60408201527008185b5bdd5b9d081cdc1958da599a5959607a1b606082015260800190565b6020808252604390820152600080516020612f3383398151915260408201527f6472656e3a2053656e646572206d75737420626520736d61727420636f6e74726060820152621858dd60ea1b608082015260a00190565b60208082526041908201527f4469676974616c61784d6174657269616c732e6261746368437265617465436860408201527f696c6472656e3a204e6f206461746120737570706c69656420696e20617272616060820152607960f81b608082015260a00190565b60208082526045908201527f4469676974616c61784d6174657269616c732e6261746368437265617465436860408201527f696c6472656e3a2053656e646572206d75737420626520736d61727420636f6e6060820152641d1c9858dd60da1b608082015260a00190565b60208082526035908201527f4469676974616c61784d6174657269616c732e6372656174654368696c643a20604082015274555249206973206120626c616e6b20737472696e6760581b606082015260800190565b60208082526029908201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604082015268103337b91039b2b63360b91b606082015260800190565b60208082526029908201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604082015268040dad2e6dac2e8c6d60bb1b606082015260800190565b60208082526040908201819052600080516020612f33833981519152908201527f6472656e3a204e6f206461746120737570706c69656420696e20617272617973606082015260800190565b6020808252603b908201527f4469676974616c61784d6174657269616c732e6d696e744368696c643a20536560408201527f6e646572206d75737420626520736d61727420636f6e74726163740000000000606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b90815260200190565b918252602082015260400190565b6000808335601e19843603018112612d8b578283fd5b8301803591506001600160401b03821115612da4578283fd5b602001915036819003821315611cb557600080fd5b6040518181016001600160401b0381118282101715612dd757600080fd5b604052919050565b60006001600160401b03821115612df4578081fd5b5060209081020190565b60e01c90565b600060443d1015612e1457611342565b600481823e6308c379a0612e288251612dfe565b14612e3257611342565b6040513d600319016004823e80513d6001600160401b038160248401118184111715612e615750505050611342565b82840192508251915080821115612e7b5750505050611342565b503d83016020828401011115612e9357505050611342565b601f01601f1916810160200160405291505090565b6001600160a01b0381168114612ebd57600080fd5b50565b8015158114612ebd57600080fd5b6001600160e01b031981168114612ebd57600080fdfe455243313135353a206275726e20616d6f756e7420657863656564732062616c616e6365455243313135353a20696e73756666696369656e742062616c616e636520666f72207472616e736665724469676974616c61784d6174657269616c732e62617463684d696e744368696ca2646970667358221220fd08730c783f9c40d1b6ae8680a00785a97612b77d374e11d172af85783c9c8f64736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000165eec91620b7bb96d02890d8a3f8cb79a29195c00000000000000000000000000000000000000000000000000000000000000124469676974616c61784d6174657269616c730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000344584d0000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): DigitalaxMaterials
Arg [1] : _symbol (string): DXM
Arg [2] : _accessControls (address): 0x165Eec91620b7Bb96d02890d8a3F8Cb79a29195c
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 000000000000000000000000165eec91620b7bb96d02890d8a3f8cb79a29195c
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [4] : 4469676974616c61784d6174657269616c730000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [6] : 44584d0000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
57574:5684:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24592:223;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9749:142;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;57960:18::-;;;:::i;:::-;;;;;;;:::i;24320:121::-;;;;;;:::i;:::-;;:::i;27280:1210::-;;;;;;:::i;:::-;;:::i;:::-;;61641:1126;;;;;;:::i;:::-;;:::i;58055:29::-;;;:::i;24981:618::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;22971:51::-;;;;;;:::i;:::-;;:::i;36659:321::-;;;;;;:::i;:::-;;:::i;62775:480::-;;;;;;:::i;:::-;;:::i;58135:45::-;;;:::i;:::-;;;;;;;:::i;59425:928::-;;;;;;:::i;:::-;;:::i;57985:20::-;;;:::i;25672:313::-;;;;;;:::i;:::-;;:::i;58745:498::-;;;;;;:::i;:::-;;:::i;60779:555::-;;;;;;:::i;:::-;;:::i;26057:160::-;;;;;;:::i;:::-;;:::i;26289:914::-;;;;;;:::i;:::-;;:::i;36362:289::-;;;;;;:::i;:::-;;:::i;24592:223::-;24670:7;-1:-1:-1;;;;;24698:21:0;;24690:77;;;;-1:-1:-1;;;24690:77:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;24785:13:0;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;24785:22:0;;;;;;;;;;;;24592:223::o;9749:142::-;-1:-1:-1;;;;;;9850:33:0;9826:4;9850:33;;;;;;;;;;;;;;9749:142::o;57960:18::-;;;;;;;;;;;;;;;-1:-1:-1;;57960:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24320:121::-;24415:18;;;;:9;:18;;;;;;;;;24408:25;;;;;;-1:-1:-1;;24408:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24382:13;;24408:25;;;24415:18;24408:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24320:121;;;:::o;27280:1210::-;27535:7;:14;27521:3;:10;:28;27513:81;;;;-1:-1:-1;;;27513:81:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27613:16:0;;27605:66;;;;-1:-1:-1;;;27605:66:0;;;;;;;:::i;:::-;27712:12;:10;:12::i;:::-;-1:-1:-1;;;;;27704:20:0;:4;-1:-1:-1;;;;;27704:20:0;;:60;;;;27728:36;27745:4;27751:12;:10;:12::i;27728:36::-;27682:160;;;;-1:-1:-1;;;27682:160:0;;;;;;;:::i;:::-;27855:16;27874:12;:10;:12::i;:::-;27855:31;;27899:60;27920:8;27930:4;27936:2;27940:3;27945:7;27954:4;27899:20;:60::i;:::-;27977:9;27972:358;27996:3;:10;27992:1;:14;27972:358;;;28028:10;28041:3;28045:1;28041:6;;;;;;;;;;;;;;28028:19;;28062:14;28079:7;28087:1;28079:10;;;;;;;;;;;;;;28062:27;;28128:126;28170:6;28128:126;;;;;;;;;;;;;;;;;:9;:13;28138:2;28128:13;;;;;;;;;;;:19;28142:4;-1:-1:-1;;;;;28128:19:0;-1:-1:-1;;;;;28128:19:0;;;;;;;;;;;;;:23;;:126;;;;;:::i;:::-;28106:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;28106:19:0;;;;;;;;;;:148;;;;28289:17;;;;;;:29;;28311:6;28289:21;:29::i;:::-;28269:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;28269:17:0;;;;;;;;;;:49;-1:-1:-1;28008:3:0;27972:358;;;;28377:2;-1:-1:-1;;;;;28347:47:0;28371:4;-1:-1:-1;;;;;28347:47:0;28361:8;-1:-1:-1;;;;;28347:47:0;;28381:3;28386:7;28347:47;;;;;;;:::i;:::-;;;;;;;;28407:75;28443:8;28453:4;28459:2;28463:3;28468:7;28477:4;28407:35;:75::i;:::-;27280:1210;;;;;;:::o;61641:1126::-;61861:14;;-1:-1:-1;;;;;61861:14:0;:35;61897:12;:10;:12::i;:::-;61861:49;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;61839:166;;;;-1:-1:-1;;;61839:166:0;;;;;;;:::i;:::-;62026:40;;;62018:116;;;;-1:-1:-1;;;62018:116:0;;;;;;;:::i;:::-;62153:25;62145:102;;;;-1:-1:-1;;;62145:102:0;;;;;;;:::i;:::-;62321:9;62316:374;62336:25;;;62316:374;;;62383:16;62402:14;;62417:1;62402:17;;;;;;;;;;;;;62383:36;;62478:1;62448:9;:19;62458:8;62448:19;;;;;;;;;;;62442:33;;;;;;;;;;;;;;;;:37;62434:109;;;;-1:-1:-1;;;62434:109:0;;;;;;;:::i;:::-;62560:14;62577:8;;62586:1;62577:11;;;;;;;;;;;;;62560:28;;62620:1;62611:6;:10;62603:75;;;;-1:-1:-1;;;62603:75:0;;;;;;;:::i;:::-;-1:-1:-1;;62363:3:0;;62316:374;;;;62702:57;62713:12;62727:14;;62702:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;62702:57:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;62743:8:0;;-1:-1:-1;62743:8:0;;;;62702:57;;;62743:8;;62702:57;62743:8;62702:57;;;;;;;;;-1:-1:-1;;62702:57:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;62753:5:0;;-1:-1:-1;62753:5:0;;;;62702:57;;62753:5;;;;62702:57;;;;;;;;;-1:-1:-1;62702:10:0;;-1:-1:-1;;;62702:57:0:i;:::-;61641:1126;;;;;;;:::o;58055:29::-;;;;:::o;24981:618::-;25129:16;25190:3;:10;25171:8;:15;:29;25163:83;;;;-1:-1:-1;;;25163:83:0;;;;;;;:::i;:::-;25259:30;25306:8;:15;-1:-1:-1;;;;;25292:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25292:30:0;;25259:63;;25340:9;25335:224;25359:8;:15;25355:1;:19;25335:224;;;25427:1;-1:-1:-1;;;;;25404:25:0;:8;25413:1;25404:11;;;;;;;;;;;;;;-1:-1:-1;;;;;25404:25:0;;;25396:87;;;;-1:-1:-1;;;25396:87:0;;;;;;;:::i;:::-;25517:9;:17;25527:3;25531:1;25527:6;;;;;;;;;;;;;;25517:17;;;;;;;;;;;:30;25535:8;25544:1;25535:11;;;;;;;;;;;;;;-1:-1:-1;;;;;25517:30:0;-1:-1:-1;;;;;25517:30:0;;;;;;;;;;;;;25498:13;25512:1;25498:16;;;;;;;;;;;;;;;;;:49;25376:3;;25335:224;;;-1:-1:-1;25578:13:0;24981:618;-1:-1:-1;;;24981:618:0:o;22971:51::-;;;;;;;;;;;;;:::o;36659:321::-;36802:12;:10;:12::i;:::-;-1:-1:-1;;;;;36791:23:0;:7;-1:-1:-1;;;;;36791:23:0;;:66;;;;36818:39;36835:7;36844:12;:10;:12::i;36818:39::-;36769:157;;;;-1:-1:-1;;;36769:157:0;;;;;;;:::i;:::-;36939:33;36950:7;36959:3;36964:7;36939:10;:33::i;:::-;36659:321;;;:::o;62775:480::-;62888:14;;-1:-1:-1;;;;;62888:14:0;:27;62916:12;:10;:12::i;:::-;62888:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;62866:152;;;;-1:-1:-1;;;62866:152:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;63053:38:0;;63031:171;;;;-1:-1:-1;;;63031:171:0;;;;;;;:::i;:::-;63215:14;:32;;-1:-1:-1;;;;;;63215:32:0;-1:-1:-1;;;;;63215:32:0;;;;;;;;;;62775:480::o;58135:45::-;;;-1:-1:-1;;;;;58135:45:0;;:::o;59425:928::-;59557:14;;59497:25;;-1:-1:-1;;;;;59557:14:0;:35;59593:12;:10;:12::i;:::-;59557:49;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;59535:168;;;;-1:-1:-1;;;59535:168:0;;;;;;;:::i;:::-;59724:16;59716:94;;;;-1:-1:-1;;;59716:94:0;;;;;;;:::i;:::-;59844:5;;-1:-1:-1;;;;;59878:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;59878:25:0;;59867:36;;59919:9;59914:347;59938:10;59934:1;:14;59914:347;;;59970:17;59990:5;;59996:1;59990:8;;;;;;;;;;;;;;;;;;:::i;:::-;59970:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;60021:17:0;;59970:28;;-1:-1:-1;;;60013:95:0;;;;-1:-1:-1;;;60013:95:0;;;;;;;:::i;:::-;60140:14;;:21;;60159:1;60140:18;:21::i;:::-;60123:14;:38;;;60178:28;;60202:3;60178:7;:28::i;:::-;60235:14;;60221:8;60230:1;60221:11;;;;;;;;;;;;;;;;;:28;-1:-1:-1;59950:3:0;;59914:347;;;;60320:25;60336:8;60320:25;;;;;;:::i;:::-;;;;;;;;59425:928;;;;;:::o;57985:20::-;;;;;;;;;;;;;;;-1:-1:-1;;57985:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25672:313;25793:8;-1:-1:-1;;;;;25777:24:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;25777:24:0;;;25769:78;;;;-1:-1:-1;;;25769:78:0;;;;;;;:::i;:::-;25905:8;25860:18;:32;25879:12;:10;:12::i;:::-;-1:-1:-1;;;;;25860:32:0;;;;;;;;;;;;;;;;;-1:-1:-1;25860:32:0;;;:42;;;;;;;;;;;;:53;;-1:-1:-1;;25860:53:0;;;;;;;;;;;25944:12;:10;:12::i;:::-;-1:-1:-1;;;;;25929:48:0;;25968:8;25929:48;;;;;;:::i;:::-;;;;;;;;25672:313;;:::o;58745:498::-;58851:14;;58806:10;;-1:-1:-1;;;;;58851:14:0;:35;58887:12;:10;:12::i;:::-;58851:49;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;58829:160;;;;-1:-1:-1;;;58829:160:0;;;;;;;:::i;:::-;59010:22;59002:88;;;;-1:-1:-1;;;59002:88:0;;;;;;;:::i;:::-;59120:14;;:21;;59139:1;59120:18;:21::i;:::-;59103:14;:38;;;;59159:14;;59154:19;;59184:17;59192:2;59196:4;;59184:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;59184:7:0;;-1:-1:-1;;;59184:17:0:i;:::-;59219:16;;59232:2;;59219:16;;;;;58745:498;;;;:::o;60779:555::-;60924:14;;-1:-1:-1;;;;;60924:14:0;:35;60960:12;:10;:12::i;:::-;60924:49;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;60902:158;;;;-1:-1:-1;;;60902:158:0;;;;;;;:::i;:::-;61122:1;61087:24;;;:9;:24;;;;;61081:38;;-1:-1:-1;;61081:38:0;;;;;;;;;;;61073:106;;;;-1:-1:-1;;;61073:106:0;;;;;;;:::i;:::-;61208:1;61198:7;:11;61190:73;;;;-1:-1:-1;;;61190:73:0;;;;;;;:::i;:::-;61276:50;61282:12;61296:13;61311:7;61320:5;;61276:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;61276:5:0;;-1:-1:-1;;;61276:50:0:i;:::-;60779:555;;;;;:::o;26057:160::-;-1:-1:-1;;;;;26172:27:0;;;26148:4;26172:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;26057:160::o;26289:914::-;-1:-1:-1;;;;;26505:16:0;;26497:66;;;;-1:-1:-1;;;26497:66:0;;;;;;;:::i;:::-;26604:12;:10;:12::i;:::-;-1:-1:-1;;;;;26596:20:0;:4;-1:-1:-1;;;;;26596:20:0;;:60;;;;26620:36;26637:4;26643:12;:10;:12::i;26620:36::-;26574:151;;;;-1:-1:-1;;;26574:151:0;;;;;;;:::i;:::-;26738:16;26757:12;:10;:12::i;:::-;26738:31;;26782:96;26803:8;26813:4;26819:2;26823:21;26841:2;26823:17;:21::i;:::-;26846:25;26864:6;26846:17;:25::i;:::-;26873:4;26782:20;:96::i;:::-;26913:77;26937:6;26913:77;;;;;;;;;;;;;;;;;:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;26913:19:0;;;;;;;;;;;:77;:23;:77::i;:::-;26891:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;26891:19:0;;;;;;;;;;:99;;;;27021:17;;;;;;:29;;27043:6;27021:21;:29::i;:::-;27001:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;27001:17:0;;;;;;;;;;;;;;:49;;;;27068:46;;27001:17;;27068:46;;;;;;;;;;;;27011:2;;27107:6;;27068:46;:::i;:::-;;;;;;;;27127:68;27158:8;27168:4;27174:2;27178;27182:6;27190:4;27127:30;:68::i;36362:289::-;36480:12;:10;:12::i;:::-;-1:-1:-1;;;;;36469:23:0;:7;-1:-1:-1;;;;;36469:23:0;;:66;;;;36496:39;36513:7;36522:12;:10;:12::i;36496:39::-;36447:157;;;;-1:-1:-1;;;36447:157:0;;;;;;;:::i;:::-;36617:26;36623:7;36632:2;36636:6;36617:5;:26::i;8431:106::-;8519:10;8431:106;;:::o;12311:192::-;12397:7;12433:12;12425:6;;;;12417:29;;;;-1:-1:-1;;;12417:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;12469:5:0;;;12311:192::o;11408:181::-;11466:7;11498:5;;;11522:6;;;;11514:46;;;;-1:-1:-1;;;11514:46:0;;;;;;;:::i;:::-;11580:1;11408:181;-1:-1:-1;;;11408:181:0:o;34870:795::-;35120:15;:2;-1:-1:-1;;;;;35120:13:0;;:15::i;:::-;35116:542;;;35156:79;;-1:-1:-1;;;35156:79:0;;-1:-1:-1;;;;;35156:43:0;;;;;:79;;35200:8;;35210:4;;35216:3;;35221:7;;35230:4;;35156:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35156:79:0;;;;;;;;-1:-1:-1;;35156:79:0;;;;;;;;;;;;:::i;:::-;;;35152:495;;;;:::i;:::-;;;;;;;;35520:6;35513:14;;-1:-1:-1;;;35513:14:0;;;;;;;;:::i;35152:495::-;35569:62;;-1:-1:-1;;;35569:62:0;;;;;;;:::i;35152:495::-;-1:-1:-1;;;;;;35285:64:0;;-1:-1:-1;;;35285:64:0;35281:163;;35374:50;;-1:-1:-1;;;35374:50:0;;;;;;;:::i;30121:849::-;-1:-1:-1;;;;;30256:16:0;;30248:62;;;;-1:-1:-1;;;30248:62:0;;;;;;;:::i;:::-;30343:7;:14;30329:3;:10;:28;30321:81;;;;-1:-1:-1;;;30321:81:0;;;;;;;:::i;:::-;30415:16;30434:12;:10;:12::i;:::-;30415:31;;30459:66;30480:8;30498:1;30502:2;30506:3;30511:7;30520:4;30459:20;:66::i;:::-;30543:6;30538:260;30559:3;:10;30555:1;:14;30538:260;;;30591:10;30604:3;30608:1;30604:6;;;;;;;;;;;;;;30591:19;;30625:14;30642:7;30650:1;30642:10;;;;;;;;;;;;;;;;;;;30698:13;;;;:9;:13;;;;;;-1:-1:-1;;;;;30698:17:0;;;;;;;;;;;;30642:10;;-1:-1:-1;30687:29:0;;30642:10;;30687;:29::i;:::-;30667:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;30667:17:0;;;;;;;;;:49;;;;30754:20;;;:16;:20;;;;:32;;30779:6;30754:24;:32::i;:::-;30731:20;;;;:16;:20;;;;;;:55;;;;-1:-1:-1;30571:3:0;;30538:260;;;;30851:2;-1:-1:-1;;;;;30815:53:0;30847:1;-1:-1:-1;;;;;30815:53:0;30829:8;-1:-1:-1;;;;;30815:53:0;;30855:3;30860:7;30815:53;;;;;;;:::i;:::-;;;;;;;;30881:81;30917:8;30935:1;30939:2;30943:3;30948:7;30957:4;30881:35;:81::i;32051:857::-;-1:-1:-1;;;;;32172:21:0;;32164:69;;;;-1:-1:-1;;;32164:69:0;;;;;;;:::i;:::-;32266:7;:14;32252:3;:10;:28;32244:81;;;;-1:-1:-1;;;32244:81:0;;;;;;;:::i;:::-;32338:16;32357:12;:10;:12::i;:::-;32338:31;;32382:69;32403:8;32413:7;32430:1;32434:3;32439:7;32382:69;;;;;;;;;;;;:20;:69::i;:::-;32469:6;32464:361;32485:3;:10;32481:1;:14;32464:361;;;32517:10;32530:3;32534:1;32530:6;;;;;;;;;;;;;;32517:19;;32551:14;32568:7;32576:1;32568:10;;;;;;;;;;;;;;32551:27;;32618:123;32663:6;32618:123;;;;;;;;;;;;;;;;;:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;32618:22:0;;;;;;;;;;;:123;:26;:123::i;:::-;32593:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;32593:22:0;;;;;;;;;:148;;;;32781:20;;;:16;:20;;;;:32;;32806:6;32781:24;:32::i;:::-;32758:20;;;;:16;:20;;;;;;:55;;;;-1:-1:-1;32497:3:0;;32464:361;;;;32883:1;-1:-1:-1;;;;;32842:58:0;32866:7;-1:-1:-1;;;;;32842:58:0;32856:8;-1:-1:-1;;;;;32842:58:0;;32887:3;32892:7;32842:58;;;;;;;:::i;:::-;;;;;;;;32051:857;;;;:::o;28565:155::-;28649:18;;;;:9;:18;;;;;;;;:27;;;;;;;;:::i;:::-;;28704:7;28692:20;28696:6;28692:20;;;;;;:::i;:::-;;;;;;;;28565:155;;:::o;29116:649::-;-1:-1:-1;;;;;29231:21:0;;29223:67;;;;-1:-1:-1;;;29223:67:0;;;;;;;:::i;:::-;29303:16;29322:12;:10;:12::i;:::-;29303:31;;29347:107;29368:8;29386:1;29390:7;29399:21;29417:2;29399:17;:21::i;29347:107::-;29492:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;29492:22:0;;;;;;;;;;:34;;29519:6;29492:26;:34::i;:::-;29467:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;29467:22:0;;;;;;;;;:59;;;;29560:20;;;:16;:20;;;;:32;;29585:6;29560:24;:32::i;:::-;29537:20;;;;:16;:20;;;;;;:55;;;;29608:57;;-1:-1:-1;;;;;29608:57:0;;;;29537:20;29608:57;;;;;;;;29554:2;;29658:6;;29608:57;:::i;:::-;;;;;;;;29678:79;29709:8;29727:1;29731:7;29740:2;29744:6;29752:4;29678:30;:79::i;35673:198::-;35793:16;;;35807:1;35793:16;;;;;;;;;35739;;;;35793;;;;;;;;;;;;-1:-1:-1;35793:16:0;35768:41;;35831:7;35820:5;35826:1;35820:8;;;;;;;;;;;;;;;;;:18;35858:5;35673:198;-1:-1:-1;;35673:198:0:o;34104:758::-;34329:15;:2;-1:-1:-1;;;;;34329:13:0;;:15::i;:::-;34325:530;;;34365:72;;-1:-1:-1;;;34365:72:0;;-1:-1:-1;;;;;34365:38:0;;;;;:72;;34404:8;;34414:4;;34420:2;;34424:6;;34432:4;;34365:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34365:72:0;;;;;;;;-1:-1:-1;;34365:72:0;;;;;;;;;;;;:::i;:::-;;;34361:483;;;;:::i;:::-;-1:-1:-1;;;;;;34487:59:0;;-1:-1:-1;;;34487:59:0;34483:158;;34571:50;;-1:-1:-1;;;34571:50:0;;;;;;;:::i;31229:619::-;-1:-1:-1;;;;;31325:21:0;;31317:69;;;;-1:-1:-1;;;31317:69:0;;;;;;;:::i;:::-;31399:16;31418:12;:10;:12::i;:::-;31399:31;;31443:105;31464:8;31474:7;31491:1;31495:21;31513:2;31495:17;:21::i;:::-;31518:25;31536:6;31518:17;:25::i;:::-;31443:105;;;;;;;;;;;;:20;:105::i;:::-;31586:111;31627:6;31586:111;;;;;;;;;;;;;;;;;:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;31586:22:0;;;;;;;;;;;:111;:26;:111::i;:::-;31561:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;31561:22:0;;;;;;;;;:136;;;;31733:20;;;:16;:20;;;;:32;;31758:6;31733:24;:32::i;:::-;31710:20;;;;:16;:20;;;;;;:55;;;;31783:57;;-1:-1:-1;;;;;31783:57:0;;;;;;;;;;;;31727:2;;31833:6;;31783:57;:::i;16611:422::-;16978:20;17017:8;;;16611:422::o;11872:136::-;11930:7;11957:43;11961:1;11964;11957:43;;;;;;;;;;;;;;;;;:3;:43::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;892:364;;;1034:3;1027:4;1019:6;1015:17;1011:27;1001:2;;-1:-1;;1042:12;1001:2;-1:-1;1072:20;;-1:-1;;;;;1101:30;;1098:2;;;-1:-1;;1134:12;1098:2;1178:4;1170:6;1166:17;1154:29;;1229:3;1178:4;;1213:6;1209:17;1170:6;1195:32;;1192:41;1189:2;;;1246:1;;1236:12;1189:2;994:262;;;;;:::o;1660:707::-;;1777:3;1770:4;1762:6;1758:17;1754:27;1744:2;;-1:-1;;1785:12;1744:2;1832:6;1819:20;1854:80;1869:64;1926:6;1869:64;:::i;:::-;1854:80;:::i;:::-;1962:21;;;1845:89;-1:-1;2006:4;2019:14;;;;1994:17;;;2108;;;2099:27;;;;2096:36;-1:-1;2093:2;;;2145:1;;2135:12;2093:2;2170:1;2155:206;2180:6;2177:1;2174:13;2155:206;;;4350:20;;2248:50;;2312:14;;;;2340;;;;2202:1;2195:9;2155:206;;;2159:14;;;;;1737:630;;;;:::o;2929:336::-;;;3043:3;3036:4;3028:6;3024:17;3020:27;3010:2;;-1:-1;;3051:12;3010:2;-1:-1;3081:20;;-1:-1;;;;;3110:30;;3107:2;;;-1:-1;;3143:12;3107:2;3187:4;3179:6;3175:17;3163:29;;3238:3;3187:4;3218:17;3179:6;3204:32;;3201:41;3198:2;;;3255:1;;3245:12;3274:440;;3375:3;3368:4;3360:6;3356:17;3352:27;3342:2;;-1:-1;;3383:12;3342:2;3430:6;3417:20;-1:-1;;;;;44887:6;44884:30;44881:2;;;-1:-1;;44917:12;44881:2;3452:64;44990:9;44971:17;;-1:-1;;44967:33;45058:4;45048:15;3452:64;:::i;:::-;3443:73;;3536:6;3529:5;3522:21;3640:3;45058:4;3631:6;3564;3622:16;;3619:25;3616:2;;;3657:1;;3647:12;3616:2;47762:6;45058:4;3564:6;3560:17;45058:4;3598:5;3594:16;47739:30;47818:1;47800:16;;;45058:4;47800:16;47793:27;3598:5;3335:379;-1:-1;;3335:379::o;4420:366::-;;;4541:2;4529:9;4520:7;4516:23;4512:32;4509:2;;;-1:-1;;4547:12;4509:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;4599:63;-1:-1;4699:2;4738:22;;72:20;97:33;72:20;97:33;:::i;:::-;4707:63;;;;4503:283;;;;;:::o;4793:1119::-;;;;;;5024:3;5012:9;5003:7;4999:23;4995:33;4992:2;;;-1:-1;;5031:12;4992:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;5083:63;-1:-1;5183:2;5222:22;;72:20;97:33;72:20;97:33;:::i;:::-;5191:63;-1:-1;5319:2;5304:18;;5291:32;-1:-1;;;;;5332:30;;;5329:2;;;-1:-1;;5365:12;5329:2;5395:78;5465:7;5456:6;5445:9;5441:22;5395:78;:::i;:::-;5385:88;;5538:2;5527:9;5523:18;5510:32;5496:46;;5343:18;5554:6;5551:30;5548:2;;;-1:-1;;5584:12;5548:2;5614:78;5684:7;5675:6;5664:9;5660:22;5614:78;:::i;:::-;5604:88;;5757:3;5746:9;5742:19;5729:33;5715:47;;5343:18;5774:6;5771:30;5768:2;;;-1:-1;;5804:12;5768:2;;5834:62;5888:7;5879:6;5868:9;5864:22;5834:62;:::i;:::-;5824:72;;;4986:926;;;;;;;;:::o;5919:847::-;;;;;;6100:3;6088:9;6079:7;6075:23;6071:33;6068:2;;;-1:-1;;6107:12;6068:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;6159:63;-1:-1;6259:2;6298:22;;72:20;97:33;72:20;97:33;:::i;:::-;6267:63;-1:-1;6367:2;6406:22;;4350:20;;-1:-1;6475:2;6514:22;;4350:20;;-1:-1;6611:3;6596:19;;6583:33;-1:-1;;;;;6625:30;;6622:2;;;-1:-1;;6658:12;6622:2;6688:62;6742:7;6733:6;6722:9;6718:22;6688:62;:::i;6773:763::-;;;;6961:2;6949:9;6940:7;6936:23;6932:32;6929:2;;;-1:-1;;6967:12;6929:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;7019:63;-1:-1;7147:2;7132:18;;7119:32;-1:-1;;;;;7160:30;;;7157:2;;;-1:-1;;7193:12;7157:2;7223:78;7293:7;7284:6;7273:9;7269:22;7223:78;:::i;:::-;7213:88;;7366:2;7355:9;7351:18;7338:32;7324:46;;7171:18;7382:6;7379:30;7376:2;;;-1:-1;;7412:12;7376:2;;7442:78;7512:7;7503:6;7492:9;7488:22;7442:78;:::i;:::-;7432:88;;;6923:613;;;;;:::o;7543:360::-;;;7661:2;7649:9;7640:7;7636:23;7632:32;7629:2;;;-1:-1;;7667:12;7629:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;7719:63;-1:-1;7819:2;7855:22;;2439:20;2464:30;2439:20;2464:30;:::i;7910:366::-;;;8031:2;8019:9;8010:7;8006:23;8002:32;7999:2;;;-1:-1;;8037:12;7999:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;8089:63;8189:2;8228:22;;;;4350:20;;-1:-1;;;7993:283::o;8283:491::-;;;;8421:2;8409:9;8400:7;8396:23;8392:32;8389:2;;;-1:-1;;8427:12;8389:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;8479:63;8579:2;8618:22;;4350:20;;-1:-1;8687:2;8726:22;;;4350:20;;8383:391;-1:-1;;;8383:391::o;8781:638::-;;;8952:2;8940:9;8931:7;8927:23;8923:32;8920:2;;;-1:-1;;8958:12;8920:2;9016:17;9003:31;-1:-1;;;;;9054:18;9046:6;9043:30;9040:2;;;-1:-1;;9076:12;9040:2;9167:6;9156:9;9152:22;;;277:3;270:4;262:6;258:17;254:27;244:2;;-1:-1;;285:12;244:2;332:6;319:20;354:80;369:64;426:6;369:64;:::i;354:80::-;440:16;476:6;469:5;462:21;506:4;;523:3;519:14;512:21;;506:4;498:6;494:17;628:3;506:4;;612:6;608:17;498:6;599:27;;596:36;593:2;;;-1:-1;;635:12;593:2;-1:-1;661:10;;655:206;680:6;677:1;674:13;655:206;;;85:6;72:20;97:33;124:5;97:33;:::i;:::-;748:50;;702:1;695:9;;;;;812:14;;;;840;;655:206;;;-1:-1;9096:88;;-1:-1;9234:18;;9221:32;;-1:-1;;;9262:30;;;9259:2;;;-1:-1;;9295:12;9259:2;;9325:78;9395:7;9386:6;9375:9;9371:22;9325:78;:::i;:::-;9315:88;;;8914:505;;;;;:::o;9426:421::-;;;9577:2;9565:9;9556:7;9552:23;9548:32;9545:2;;;-1:-1;;9583:12;9545:2;9641:17;9628:31;-1:-1;;;;;9671:6;9668:30;9665:2;;;-1:-1;;9701:12;9665:2;9739:92;9823:7;9814:6;9803:9;9799:22;9739:92;:::i;:::-;9721:110;;;;-1:-1;9539:308;-1:-1;;;;9539:308::o;9854:1053::-;;;;;;;;10098:3;10086:9;10077:7;10073:23;10069:33;10066:2;;;-1:-1;;10105:12;10066:2;10163:17;10150:31;-1:-1;;;;;10201:18;10193:6;10190:30;10187:2;;;-1:-1;;10223:12;10187:2;10261:80;10333:7;10324:6;10313:9;10309:22;10261:80;:::i;:::-;10243:98;;-1:-1;10243:98;-1:-1;10406:2;10391:18;;10378:32;;-1:-1;10419:30;;;10416:2;;;-1:-1;;10452:12;10416:2;10490:80;10562:7;10553:6;10542:9;10538:22;10490:80;:::i;:::-;10472:98;;-1:-1;10472:98;-1:-1;10607:2;10646:22;;72:20;;-1:-1;97:33;72:20;97:33;:::i;:::-;10615:63;;-1:-1;10743:2;10728:18;;10715:32;;10756:30;;;10753:2;;;-1:-1;;10789:12;10753:2;;10827:64;10883:7;10874:6;10863:9;10859:22;10827:64;:::i;:::-;10060:847;;;;-1:-1;10060:847;;-1:-1;10060:847;;;;10809:82;;-1:-1;;;10060:847::o;10914:257::-;;11026:2;11014:9;11005:7;11001:23;10997:32;10994:2;;;-1:-1;;11032:12;10994:2;2587:6;2581:13;2599:30;2623:5;2599:30;:::i;11178:239::-;;11281:2;11269:9;11260:7;11256:23;11252:32;11249:2;;;-1:-1;;11287:12;11249:2;2720:6;2707:20;2732:32;2758:5;2732:32;:::i;11424:261::-;;11538:2;11526:9;11517:7;11513:23;11509:32;11506:2;;;-1:-1;;11544:12;11506:2;2859:6;2853:13;2871:32;2897:5;2871:32;:::i;11692:305::-;;11828:2;11816:9;11807:7;11803:23;11799:32;11796:2;;;-1:-1;;11834:12;11796:2;3834:6;3821:20;3846:65;3905:5;3846:65;:::i;12004:367::-;;;12128:2;12116:9;12107:7;12103:23;12099:32;12096:2;;;-1:-1;;12134:12;12096:2;12192:17;12179:31;-1:-1;;;;;12222:6;12219:30;12216:2;;;-1:-1;;12252:12;12216:2;12290:65;12347:7;12338:6;12327:9;12323:22;12290:65;:::i;12378:241::-;;12482:2;12470:9;12461:7;12457:23;12453:32;12450:2;;;-1:-1;;12488:12;12450:2;-1:-1;4350:20;;12444:175;-1:-1;12444:175::o;12626:741::-;;;;;;12800:3;12788:9;12779:7;12775:23;12771:33;12768:2;;;-1:-1;;12807:12;12768:2;12890:22;4350:20;12859:63;;12959:2;13002:9;12998:22;4350:20;12967:63;;13067:2;13110:9;13106:22;72:20;97:33;124:5;97:33;:::i;:::-;13075:63;-1:-1;13203:2;13188:18;;13175:32;-1:-1;;;;;13216:30;;13213:2;;;-1:-1;;13249:12;13213:2;13287:64;13343:7;13334:6;13323:9;13319:22;13287:64;:::i;:::-;12762:605;;;;-1:-1;12762:605;;-1:-1;13269:82;;;12762:605;-1:-1;;;12762:605::o;13856:690::-;;14049:5;45341:12;45885:6;45880:3;45873:19;45922:4;;45917:3;45913:14;14061:93;;45922:4;14225:5;45195:14;-1:-1;14264:260;14289:6;14286:1;14283:13;14264:260;;;14350:13;;26872:37;;13528:14;;;;45728;;;;14311:1;14304:9;14264:260;;;-1:-1;14530:10;;13980:566;-1:-1;;;;;13980:566::o;14665:343::-;;14807:5;45341:12;45885:6;45880:3;45873:19;-1:-1;47907:101;47921:6;47918:1;47915:13;47907:101;;;45922:4;47988:11;;;;;47982:18;47969:11;;;;;47962:39;47936:10;47907:101;;;48023:6;48020:1;48017:13;48014:2;;;-1:-1;45922:4;48079:6;45917:3;48070:16;;48063:27;48014:2;-1:-1;44990:9;48179:14;-1:-1;;48175:28;14964:39;;;;45922:4;14964:39;;14755:253;-1:-1;;14755:253::o;27041:238::-;-1:-1;;;;;46817:54;;;;13635:58;;27176:2;27161:18;;27147:132::o;27286:1048::-;-1:-1;;;;;46817:54;;;13776:37;;46817:54;;27808:2;27793:18;;13776:37;46828:42;27845:2;27830:18;;27823:48;;;27286:1048;;27885:108;;27628:19;;27979:6;27885:108;:::i;:::-;28041:9;28035:4;28031:20;28026:2;28015:9;28011:18;28004:48;28066:108;28169:4;28160:6;28066:108;:::i;:::-;28058:116;;28223:9;28217:4;28213:20;28207:3;28196:9;28192:19;28185:49;28248:76;28319:4;28310:6;28248:76;:::i;:::-;28240:84;27614:720;-1:-1;;;;;;;;27614:720::o;28341:752::-;-1:-1;;;;;46817:54;;;13776:37;;46817:54;;28763:2;28748:18;;13776:37;28846:2;28831:18;;26872:37;;;28929:2;28914:18;;26872:37;;;46828:42;28966:3;28951:19;;28944:49;;;28341:752;;29007:76;;28583:19;;29069:6;29007:76;:::i;:::-;28999:84;28569:524;-1:-1;;;;;;;28569:524::o;29100:370::-;;29277:2;29298:17;29291:47;29352:108;29277:2;29266:9;29262:18;29446:6;29352:108;:::i;29477:629::-;;29732:2;29753:17;29746:47;29807:108;29732:2;29721:9;29717:18;29901:6;29807:108;:::i;:::-;29963:9;29957:4;29953:20;29948:2;29937:9;29933:18;29926:48;29988:108;30091:4;30082:6;29988:108;:::i;:::-;29980:116;29703:403;-1:-1;;;;;29703:403::o;30113:210::-;46448:13;;46441:21;14619:34;;30234:2;30219:18;;30205:118::o;30623:310::-;;30770:2;30791:17;30784:47;30845:78;30770:2;30759:9;30755:18;30909:6;30845:78;:::i;30940:416::-;31140:2;31154:47;;;15791:2;31125:18;;;45873:19;15827:34;45913:14;;;15807:55;-1:-1;;;15882:12;;;15875:44;15938:12;;;31111:245::o;31363:416::-;31563:2;31577:47;;;16189:2;31548:18;;;45873:19;16225:34;45913:14;;;16205:55;16294:34;16280:12;;;16273:56;-1:-1;;;16349:12;;;16342:43;16404:12;;;31534:245::o;31786:416::-;31986:2;32000:47;;;16655:2;31971:18;;;45873:19;16691:34;45913:14;;;16671:55;-1:-1;;;16746:12;;;16739:32;16790:12;;;31957:245::o;32209:416::-;32409:2;32423:47;;;17041:2;32394:18;;;45873:19;-1:-1;;;;;;;;;;;45913:14;;;17057:55;17146:29;17132:12;;;17125:51;17195:12;;;32380:245::o;32632:416::-;32832:2;32846:47;;;17446:2;32817:18;;;45873:19;17482:34;45913:14;;;17462:55;-1:-1;;;17537:12;;;17530:35;17584:12;;;32803:245::o;33055:416::-;33255:2;33269:47;;;17835:2;33240:18;;;45873:19;17871:34;45913:14;;;17851:55;-1:-1;;;17926:12;;;17919:41;17979:12;;;33226:245::o;33478:416::-;33678:2;33692:47;;;18230:2;33663:18;;;45873:19;18266:29;45913:14;;;18246:50;18315:12;;;33649:245::o;33901:416::-;34101:2;34115:47;;;18566:2;34086:18;;;45873:19;-1:-1;;;;;;;;;;;45913:14;;;18582:55;-1:-1;;;18657:12;;;18650:44;18713:12;;;34072:245::o;34324:416::-;34524:2;34538:47;;;18964:2;34509:18;;;45873:19;19000:34;45913:14;;;18980:55;-1:-1;;;19055:12;;;19048:33;19100:12;;;34495:245::o;34747:416::-;34947:2;34961:47;;;19351:2;34932:18;;;45873:19;19387:34;45913:14;;;19367:55;19456:31;19442:12;;;19435:53;19507:12;;;34918:245::o;35170:416::-;35370:2;35384:47;;;19758:2;35355:18;;;45873:19;19794:34;45913:14;;;19774:55;-1:-1;;;19849:12;;;19842:29;19890:12;;;35341:245::o;35593:416::-;35793:2;35807:47;;;20141:2;35778:18;;;45873:19;20177:34;45913:14;;;20157:55;-1:-1;;;20232:12;;;20225:42;20286:12;;;35764:245::o;36016:416::-;36216:2;36230:47;;;20537:2;36201:18;;;45873:19;20573:34;45913:14;;;20553:55;20642:31;20628:12;;;20621:53;20693:12;;;36187:245::o;36439:416::-;36639:2;36653:47;;;20944:2;36624:18;;;45873:19;20980:34;45913:14;;;20960:55;-1:-1;;;21035:12;;;21028:43;21090:12;;;36610:245::o;36862:416::-;37062:2;37076:47;;;21341:2;37047:18;;;45873:19;21377:34;45913:14;;;21357:55;-1:-1;;;21432:12;;;21425:27;21471:12;;;37033:245::o;37285:416::-;37485:2;37499:47;;;21722:2;37470:18;;;45873:19;-1:-1;;;;;;;;;;;45913:14;;;21738:55;21827:33;21813:12;;;21806:55;21880:12;;;37456:245::o;37708:416::-;37908:2;37922:47;;;22131:2;37893:18;;;45873:19;22167:34;45913:14;;;22147:55;22236:31;22222:12;;;22215:53;22287:12;;;37879:245::o;38131:416::-;38331:2;38345:47;;;22538:2;38316:18;;;45873:19;22574:34;45913:14;;;22554:55;-1:-1;;;22629:12;;;22622:41;22682:12;;;38302:245::o;38554:416::-;38754:2;38768:47;;;22933:2;38739:18;;;45873:19;-1:-1;;;;;;;;;;;45913:14;;;22949:55;23038:34;23024:12;;;23017:56;-1:-1;;;23093:12;;;23086:27;23132:12;;;38725:245::o;38977:416::-;39177:2;39191:47;;;23383:2;39162:18;;;45873:19;23419:34;45913:14;;;23399:55;23488:34;23474:12;;;23467:56;-1:-1;;;23543:12;;;23536:25;23580:12;;;39148:245::o;39400:416::-;39600:2;39614:47;;;23831:2;39585:18;;;45873:19;23867:34;45913:14;;;23847:55;23936:34;23922:12;;;23915:56;-1:-1;;;23991:12;;;23984:29;24032:12;;;39571:245::o;39823:416::-;40023:2;40037:47;;;24283:2;40008:18;;;45873:19;24319:34;45913:14;;;24299:55;-1:-1;;;24374:12;;;24367:45;24431:12;;;39994:245::o;40246:416::-;40446:2;40460:47;;;24682:2;40431:18;;;45873:19;24718:34;45913:14;;;24698:55;-1:-1;;;24773:12;;;24766:33;24818:12;;;40417:245::o;40669:416::-;40869:2;40883:47;;;25069:2;40854:18;;;45873:19;25105:34;45913:14;;;25085:55;-1:-1;;;25160:12;;;25153:33;25205:12;;;40840:245::o;41092:416::-;41292:2;41306:47;;;25456:2;41277:18;;;45873:19;;;-1:-1;;;;;;;;;;;45913:14;;;25472:55;25561:34;25547:12;;;25540:56;25615:12;;;41263:245::o;41515:416::-;41715:2;41729:47;;;25866:2;41700:18;;;45873:19;25902:34;45913:14;;;25882:55;25971:29;25957:12;;;25950:51;26020:12;;;41686:245::o;41938:416::-;42138:2;42152:47;;;26271:2;42123:18;;;45873:19;26307:34;45913:14;;;26287:55;-1:-1;;;26362:12;;;26355:32;26406:12;;;42109:245::o;42361:416::-;42561:2;42575:47;;;26657:2;42546:18;;;45873:19;26693:34;45913:14;;;26673:55;-1:-1;;;26748:12;;;26741:25;26785:12;;;42532:245::o;42784:222::-;26872:37;;;42911:2;42896:18;;42882:124::o;43013:333::-;26872:37;;;43332:2;43317:18;;26872:37;43168:2;43153:18;;43139:207::o;43353:507::-;;;43489:11;43476:25;43540:48;;43564:8;43548:14;43544:29;43540:48;43520:18;43516:73;43506:2;;-1:-1;;43593:12;43506:2;43620:33;;43674:18;;;-1:-1;;;;;;43701:30;;43698:2;;;-1:-1;;43734:12;43698:2;43579:4;43762:13;;-1:-1;43548:14;43794:38;;;43784:49;;43781:2;;;43846:1;;43836:12;43867:256;43929:2;43923:9;43955:17;;;-1:-1;;;;;44015:34;;44051:22;;;44012:62;44009:2;;;44087:1;;44077:12;44009:2;43929;44096:22;43907:216;;-1:-1;43907:216::o;44130:304::-;;-1:-1;;;;;44281:6;44278:30;44275:2;;;-1:-1;;44311:12;44275:2;-1:-1;44356:4;44344:17;;;44409:15;;44212:222::o;48216:106::-;48301:3;48297:15;;48269:53::o;48330:739::-;;48403:4;48385:16;48382:26;48379:2;;;48411:5;;48379:2;48445:1;-1:-1;;48424:23;48520:10;48463:34;-1:-1;48488:8;48463:34;:::i;:::-;48512:19;48502:2;;48535:5;;48502:2;48566;48560:9;48602:16;-1:-1;;48598:24;48445:1;48560:9;48574:49;48649:4;48643:11;48730:16;-1:-1;;;;;48730:16;48723:4;48715:6;48711:17;48708:39;48682:18;48674:6;48671:30;48662:91;48659:2;;;48761:5;;;;;;48659:2;48799:6;48793:4;48789:17;48778:28;;48831:3;48825:10;48811:24;;48682:18;48846:6;48843:30;48840:2;;;48876:5;;;;;;48840:2;;48953:16;48947:4;48943:27;48913:4;48920:6;48908:3;48900:27;;48935:36;48932:2;;;48974:5;;;;;48932:2;44990:9;48179:14;-1:-1;;48175:28;48998:50;;48913:4;48998:50;48566:2;48987:62;49006:3;-1:-1;;48373:696;:::o;49076:117::-;-1:-1;;;;;46817:54;;49135:35;;49125:2;;49184:1;;49174:12;49125:2;49119:74;:::o;49200:111::-;49281:5;46448:13;46441:21;49259:5;49256:32;49246:2;;49302:1;;49292:12;49318:115;-1:-1;;;;;;46535:78;;49376:34;;49366:2;;49424:1;;49414:12
Swarm Source
ipfs://fd08730c783f9c40d1b6ae8680a00785a97612b77d374e11d172af85783c9c8f
Loading...
Loading
Loading...
Loading
OVERVIEW
The DIGITALAX Materials are the modular ERC-1155 building blocks of the master ERC-721 garments. Every ERC-721 master garment NFT on the DIGITALAX platform is linked and attached to relevant ERC-1155 assets. DIGITALAX is the first dedicated Digital-Only Fashion Auction Exc...Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
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.