Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 558 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Add Customer To ... | 6847639 | 2270 days ago | IN | 0 ETH | 0.01684328 | ||||
Add Customer To ... | 6800346 | 2278 days ago | IN | 0 ETH | 0.01738661 | ||||
Add Customer To ... | 6800152 | 2278 days ago | IN | 0 ETH | 0.02643148 | ||||
Add Customer To ... | 6800149 | 2278 days ago | IN | 0 ETH | 0.02643148 | ||||
Add Customer To ... | 6800144 | 2278 days ago | IN | 0 ETH | 0.02643148 | ||||
Add Customer To ... | 6800088 | 2278 days ago | IN | 0 ETH | 0.02163738 | ||||
Add Customer To ... | 6800061 | 2278 days ago | IN | 0 ETH | 0.0225962 | ||||
Add Customer To ... | 6800052 | 2278 days ago | IN | 0 ETH | 0.02352159 | ||||
Add Customer To ... | 6800035 | 2278 days ago | IN | 0 ETH | 0.0225962 | ||||
Add Customer To ... | 6800009 | 2278 days ago | IN | 0 ETH | 0.02352306 | ||||
Add Customer To ... | 6800001 | 2278 days ago | IN | 0 ETH | 0.02466699 | ||||
Add Customer To ... | 6799997 | 2278 days ago | IN | 0 ETH | 0.02547266 | ||||
Add Customer To ... | 6799992 | 2278 days ago | IN | 0 ETH | 0.02556855 | ||||
Add Customer To ... | 6799989 | 2278 days ago | IN | 0 ETH | 0.02556855 | ||||
Add Customer To ... | 6799978 | 2278 days ago | IN | 0 ETH | 0.02556855 | ||||
Add Customer To ... | 6799973 | 2278 days ago | IN | 0 ETH | 0.02577309 | ||||
Add Customer To ... | 6799968 | 2278 days ago | IN | 0 ETH | 0.02587537 | ||||
Add Customer To ... | 6799961 | 2278 days ago | IN | 0 ETH | 0.02659129 | ||||
Add Customer To ... | 6799959 | 2278 days ago | IN | 0 ETH | 0.02659129 | ||||
Add Customer To ... | 6799954 | 2278 days ago | IN | 0 ETH | 0.02659129 | ||||
Add Customer To ... | 6799946 | 2278 days ago | IN | 0 ETH | 0.02658962 | ||||
Add Customer To ... | 6799930 | 2278 days ago | IN | 0 ETH | 0.02761403 | ||||
Add Customer To ... | 6799886 | 2278 days ago | IN | 0 ETH | 0.03057998 | ||||
Add Customer To ... | 6799881 | 2278 days ago | IN | 0 ETH | 0.03068226 | ||||
Add Customer To ... | 6799878 | 2278 days ago | IN | 0 ETH | 0.03068226 |
Latest 25 internal transactions (View All)
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
McwCustomerRegistry
Compiler Version
v0.4.24+commit.e67f0147
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-08-13 */ pragma solidity ^0.4.24; // File: zeppelin-solidity/contracts/ownership/Ownable.sol /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to relinquish control of the contract. * @notice Renouncing to ownership will leave the contract without an owner. * It will not be possible to call the functions with the `onlyOwner` * modifier anymore. */ function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } /** * @dev Transfers control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } // File: contracts/TxRegistry.sol /** * @title Transaction Registry for Customer * @dev Registry of customer's payments for MCW and payments for KWh. */ contract TxRegistry is Ownable { address public customer; // @dev Structure for TX data struct TxData { bytes32 txOrigMcwTransfer; uint256 amountMCW; uint256 amountKWh; uint256 timestampPaymentMCW; bytes32 txPaymentKWh; uint256 timestampPaymentKWh; } // @dev Customer's Tx of payment for MCW registry mapping (bytes32 => TxData) private txRegistry; // @dev Customer's list of Tx bytes32[] private txIndex; /** * @dev Constructor * @param _customer the address of a customer for whom the TxRegistry contract is creating */ constructor(address _customer) public { customer = _customer; } /** * @dev Owner can add a new Tx of payment for MCW to the customer's TxRegistry * @param _txPaymentForMCW the Tx of payment for MCW which will be added * @param _txOrigMcwTransfer the Tx of original MCW transfer in Ethereum network which acts as source for this Tx of payment for MCW * @param _amountMCW the amount of MCW tokens which will be recorded to the new Tx * @param _amountKWh the amount of KWh which will be recorded to the new Tx * @param _timestamp the timestamp of payment for MCW which will be recorded to the new Tx */ function addTxToRegistry( bytes32 _txPaymentForMCW, bytes32 _txOrigMcwTransfer, uint256 _amountMCW, uint256 _amountKWh, uint256 _timestamp ) public onlyOwner returns(bool) { require( _txPaymentForMCW != 0 && _txOrigMcwTransfer != 0 && _amountMCW != 0 && _amountKWh != 0 && _timestamp != 0, "All parameters must be not empty." ); require( txRegistry[_txPaymentForMCW].timestampPaymentMCW == 0, "Tx with such hash is already exist." ); txRegistry[_txPaymentForMCW].txOrigMcwTransfer = _txOrigMcwTransfer; txRegistry[_txPaymentForMCW].amountMCW = _amountMCW; txRegistry[_txPaymentForMCW].amountKWh = _amountKWh; txRegistry[_txPaymentForMCW].timestampPaymentMCW = _timestamp; txIndex.push(_txPaymentForMCW); return true; } /** * @dev Owner can mark a customer's Tx of payment for MCW as spent * @param _txPaymentForMCW the Tx of payment for MCW which will be marked as spent * @param _txPaymentForKWh the additional Tx of payment for KWh which will be recorded to the original Tx as proof of spend * @param _timestamp the timestamp of payment for KWh which will be recorded to the Tx */ function setTxAsSpent(bytes32 _txPaymentForMCW, bytes32 _txPaymentForKWh, uint256 _timestamp) public onlyOwner returns(bool) { require( _txPaymentForMCW != 0 && _txPaymentForKWh != 0 && _timestamp != 0, "All parameters must be not empty." ); require( txRegistry[_txPaymentForMCW].timestampPaymentMCW != 0, "Tx with such hash doesn't exist." ); require( txRegistry[_txPaymentForMCW].timestampPaymentKWh == 0, "Tx with such hash is already spent." ); txRegistry[_txPaymentForMCW].txPaymentKWh = _txPaymentForKWh; txRegistry[_txPaymentForMCW].timestampPaymentKWh = _timestamp; return true; } /** * @dev Get the customer's Tx of payment for MCW amount */ function getTxCount() public view returns(uint256) { return txIndex.length; } /** * @dev Get the customer's Tx of payment for MCW from customer's Tx list by index * @param _index the index of a customer's Tx of payment for MCW in the customer's Tx list */ function getTxAtIndex(uint256 _index) public view returns(bytes32) { return txIndex[_index]; } /** * @dev Get the customer's Tx of payment for MCW data - Tx of original MCW transfer in Ethereum network which is recorded in the Tx * @param _txPaymentForMCW the Tx of payment for MCW for which to get data */ function getTxOrigMcwTransfer(bytes32 _txPaymentForMCW) public view returns(bytes32) { return txRegistry[_txPaymentForMCW].txOrigMcwTransfer; } /** * @dev Get the customer's Tx of payment for MCW data - amount of MCW tokens which is recorded in the Tx * @param _txPaymentForMCW the Tx of payment for MCW for which to get data */ function getTxAmountMCW(bytes32 _txPaymentForMCW) public view returns(uint256) { return txRegistry[_txPaymentForMCW].amountMCW; } /** * @dev Get the customer's Tx of payment for MCW data - amount of KWh which is recorded in the Tx * @param _txPaymentForMCW the Tx of payment for MCW for which to get data */ function getTxAmountKWh(bytes32 _txPaymentForMCW) public view returns(uint256) { return txRegistry[_txPaymentForMCW].amountKWh; } /** * @dev Get the customer's Tx of payment for MCW data - timestamp of payment for MCW which is recorded in the Tx * @param _txPaymentForMCW the Tx of payment for MCW for which to get data */ function getTxTimestampPaymentMCW(bytes32 _txPaymentForMCW) public view returns(uint256) { return txRegistry[_txPaymentForMCW].timestampPaymentMCW; } /** * @dev Get the customer's Tx of payment for MCW data - Tx of payment for KWh which is recorded in the Tx * @param _txPaymentForMCW the Tx of payment for MCW for which to get data */ function getTxPaymentKWh(bytes32 _txPaymentForMCW) public view returns(bytes32) { return txRegistry[_txPaymentForMCW].txPaymentKWh; } /** * @dev Get the customer's Tx of payment for MCW data - timestamp of payment for KWh which is recorded in the Tx * @param _txPaymentForMCW the Tx of payment for MCW for which to get data */ function getTxTimestampPaymentKWh(bytes32 _txPaymentForMCW) public view returns(uint256) { return txRegistry[_txPaymentForMCW].timestampPaymentKWh; } /** * @dev Check the customer's Tx of payment for MCW * @param _txPaymentForMCW the Tx of payment for MCW which need to be checked */ function isValidTxPaymentForMCW(bytes32 _txPaymentForMCW) public view returns(bool) { bool isValid = false; if (txRegistry[_txPaymentForMCW].timestampPaymentMCW != 0) { isValid = true; } return isValid; } /** * @dev Check if the customer's Tx of payment for MCW is spent * @param _txPaymentForMCW the Tx of payment for MCW which need to be checked */ function isSpentTxPaymentForMCW(bytes32 _txPaymentForMCW) public view returns(bool) { bool isSpent = false; if (txRegistry[_txPaymentForMCW].timestampPaymentKWh != 0) { isSpent = true; } return isSpent; } /** * @dev Check the customer's Tx of payment for KWh * @param _txPaymentForKWh the Tx of payment for KWh which need to be checked */ function isValidTxPaymentForKWh(bytes32 _txPaymentForKWh) public view returns(bool) { bool isValid = false; for (uint256 i = 0; i < getTxCount(); i++) { if (txRegistry[getTxAtIndex(i)].txPaymentKWh == _txPaymentForKWh) { isValid = true; break; } } return isValid; } /** * @dev Get the customer's Tx of payment for MCW by Tx payment for KWh * @param _txPaymentForKWh the Tx of payment for KWh */ function getTxPaymentMCW(bytes32 _txPaymentForKWh) public view returns(bytes32) { bytes32 txMCW = 0; for (uint256 i = 0; i < getTxCount(); i++) { if (txRegistry[getTxAtIndex(i)].txPaymentKWh == _txPaymentForKWh) { txMCW = getTxAtIndex(i); break; } } return txMCW; } } // File: contracts/McwCustomerRegistry.sol /** * @title Customers Registry * @dev Registry of all customers */ contract McwCustomerRegistry is Ownable { // @dev Key: address of customer wallet, Value: address of customer TxRegistry contract mapping (address => address) private registry; // @dev Customers list address[] private customerIndex; // @dev Events for dashboard event NewCustomer(address indexed customer, address indexed txRegistry); event NewCustomerTx( address indexed customer, bytes32 txPaymentForMCW, bytes32 txOrigMcwTransfer, uint256 amountMCW, uint256 amountKWh, uint256 timestamp ); event SpendCustomerTx(address indexed customer, bytes32 txPaymentForMCW, bytes32 txPaymentForKWh, uint256 timestamp); // @dev Constructor constructor() public {} /** * @dev Owner can add a new customer to registry * @dev Creates a related TxRegistry contract for the new customer * @dev Related event will be generated * @param _customer the address of a new customer to add */ function addCustomerToRegistry(address _customer) public onlyOwner returns(bool) { require( _customer != address(0), "Parameter must be not empty." ); require( registry[_customer] == address(0), "Customer is already in the registry." ); address txRegistry = new TxRegistry(_customer); registry[_customer] = txRegistry; customerIndex.push(_customer); emit NewCustomer(_customer, txRegistry); return true; } /** * @dev Owner can add a new Tx of payment for MCW to the customer's TxRegistry * @dev Generates the Tx of payment for MCW (hash as proof of payment) and writes the Tx data to the customer's TxRegistry * @dev Related event will be generated * @param _customer the address of a customer to whom to add a new Tx * @param _txOrigMcwTransfer the Tx of original MCW transfer in Ethereum network which acts as source for a new Tx of payment for MCW * @param _amountMCW the amount of MCW tokens which will be recorded to the new Tx * @param _amountKWh the amount of KWh which will be recorded to the new Tx */ function addTxToCustomerRegistry( address _customer, bytes32 _txOrigMcwTransfer, uint256 _amountMCW, uint256 _amountKWh ) public onlyOwner returns(bool) { require( isValidCustomer(_customer), "Customer is not in the registry." ); require( _txOrigMcwTransfer != 0 && _amountMCW != 0 && _amountKWh != 0, "All parameters must be not empty." ); uint256 timestamp = now; bytes32 txPaymentForMCW = keccak256( abi.encodePacked( _customer, _amountMCW, _amountKWh, timestamp) ); TxRegistry txRegistry = TxRegistry(registry[_customer]); require( txRegistry.getTxTimestampPaymentMCW(txPaymentForMCW) == 0, "Tx with such hash is already exist." ); if (!txRegistry.addTxToRegistry( txPaymentForMCW, _txOrigMcwTransfer, _amountMCW, _amountKWh, timestamp)) revert ("Something went wrong."); emit NewCustomerTx( _customer, txPaymentForMCW, _txOrigMcwTransfer, _amountMCW, _amountKWh, timestamp); return true; } /** * @dev Owner can mark a customer's Tx of payment for MCW as spent * @dev Generates an additional Tx of paymant for KWh (hash as proof of spend), which connected to the original Tx. * @dev Related event will be generated * @param _customer the address of a customer to whom to spend a Tx * @param _txPaymentForMCW the Tx of payment for MCW which will be marked as spent */ function setCustomerTxAsSpent(address _customer, bytes32 _txPaymentForMCW) public onlyOwner returns(bool) { require( isValidCustomer(_customer), "Customer is not in the registry." ); TxRegistry txRegistry = TxRegistry(registry[_customer]); require( txRegistry.getTxTimestampPaymentMCW(_txPaymentForMCW) != 0, "Tx with such hash doesn't exist." ); require( txRegistry.getTxTimestampPaymentKWh(_txPaymentForMCW) == 0, "Tx with such hash is already spent." ); uint256 timestamp = now; bytes32 txPaymentForKWh = keccak256( abi.encodePacked( _txPaymentForMCW, timestamp) ); if (!txRegistry.setTxAsSpent(_txPaymentForMCW, txPaymentForKWh, timestamp)) revert ("Something went wrong."); emit SpendCustomerTx( _customer, _txPaymentForMCW, txPaymentForKWh, timestamp); return true; } /** * @dev Get the current amount of customers */ function getCustomerCount() public view returns(uint256) { return customerIndex.length; } /** * @dev Get the customer's address from customers list by index * @param _index the index of a customer in the customers list */ function getCustomerAtIndex(uint256 _index) public view returns(address) { return customerIndex[_index]; } /** * @dev Get the customer's TxRegistry contract * @param _customer the address of a customer for whom to get TxRegistry contract */ function getCustomerTxRegistry(address _customer) public view returns(address) { return registry[_customer]; } /** * @dev Check the customer's address * @param _customer the address of a customer which need to be checked */ function isValidCustomer(address _customer) public view returns(bool) { require( _customer != address(0), "Parameter must be not empty." ); bool isValid = false; address txRegistry = registry[_customer]; if (txRegistry != address(0)) { isValid = true; } return isValid; } // wrappers on TxRegistry contract /** * @dev Get the customer's Tx of payment for MCW amount * @param _customer the address of a customer for whom to get */ function getCustomerTxCount(address _customer) public view returns(uint256) { require( isValidCustomer(_customer), "Customer is not in the registry." ); TxRegistry txRegistry = TxRegistry(registry[_customer]); uint256 txCount = txRegistry.getTxCount(); return txCount; } /** * @dev Get the customer's Tx of payment for MCW from customer's Tx list by index * @param _customer the address of a customer for whom to get * @param _index the index of a customer's Tx of payment for MCW in the customer's Tx list */ function getCustomerTxAtIndex(address _customer, uint256 _index) public view returns(bytes32) { require( isValidCustomer(_customer), "Customer is not in the registry." ); TxRegistry txRegistry = TxRegistry(registry[_customer]); bytes32 txIndex = txRegistry.getTxAtIndex(_index); return txIndex; } /** * @dev Get the customer's Tx of payment for MCW data - Tx of original MCW transfer in Ethereum network which is recorded in the Tx * @param _customer the address of a customer for whom to get * @param _txPaymentForMCW the Tx of payment for MCW for which to get data */ function getCustomerTxOrigMcwTransfer(address _customer, bytes32 _txPaymentForMCW) public view returns(bytes32) { require( isValidCustomer(_customer), "Customer is not in the registry." ); require( _txPaymentForMCW != bytes32(0), "Parameter must be not empty." ); TxRegistry txRegistry = TxRegistry(registry[_customer]); bytes32 txOrigMcwTransfer = txRegistry.getTxOrigMcwTransfer(_txPaymentForMCW); return txOrigMcwTransfer; } /** * @dev Get the customer's Tx of payment for MCW data - amount of MCW tokens which is recorded in the Tx * @param _customer the address of a customer for whom to get * @param _txPaymentForMCW the Tx of payment for MCW for which to get data */ function getCustomerTxAmountMCW(address _customer, bytes32 _txPaymentForMCW) public view returns(uint256) { require( isValidCustomer(_customer), "Customer is not in the registry." ); require( _txPaymentForMCW != bytes32(0), "Parameter must be not empty." ); TxRegistry txRegistry = TxRegistry(registry[_customer]); uint256 amountMCW = txRegistry.getTxAmountMCW(_txPaymentForMCW); return amountMCW; } /** * @dev Get the customer's Tx of payment for MCW data - amount of KWh which is recorded in the Tx * @param _customer the address of a customer for whom to get * @param _txPaymentForMCW the Tx of payment for MCW for which to get data */ function getCustomerTxAmountKWh(address _customer, bytes32 _txPaymentForMCW) public view returns(uint256) { require( isValidCustomer(_customer), "Customer is not in the registry." ); require( _txPaymentForMCW != bytes32(0), "Parameter must be not empty." ); TxRegistry txRegistry = TxRegistry(registry[_customer]); uint256 amountKWh = txRegistry.getTxAmountKWh(_txPaymentForMCW); return amountKWh; } /** * @dev Get the customer's Tx of payment for MCW data - timestamp of payment for MCW which is recorded in the Tx * @param _customer the address of a customer for whom to get * @param _txPaymentForMCW the Tx of payment for MCW for which to get data */ function getCustomerTxTimestampPaymentMCW(address _customer, bytes32 _txPaymentForMCW) public view returns(uint256) { require( isValidCustomer(_customer), "Customer is not in the registry." ); require( _txPaymentForMCW != bytes32(0), "Parameter must be not empty." ); TxRegistry txRegistry = TxRegistry(registry[_customer]); uint256 timestampPaymentMCW = txRegistry.getTxTimestampPaymentMCW(_txPaymentForMCW); return timestampPaymentMCW; } /** * @dev Get the customer's Tx of payment for MCW data - Tx of payment for KWh which is recorded in the Tx * @param _customer the address of a customer for whom to get * @param _txPaymentForMCW the Tx of payment for MCW for which to get data */ function getCustomerTxPaymentKWh(address _customer, bytes32 _txPaymentForMCW) public view returns(bytes32) { require( isValidCustomer(_customer), "Customer is not in the registry." ); require( _txPaymentForMCW != bytes32(0), "Parameter must be not empty." ); TxRegistry txRegistry = TxRegistry(registry[_customer]); bytes32 txPaymentKWh = txRegistry.getTxPaymentKWh(_txPaymentForMCW); return txPaymentKWh; } /** * @dev Get the customer's Tx of payment for MCW data - timestamp of payment for KWh which is recorded in the Tx * @param _customer the address of a customer for whom to get * @param _txPaymentForMCW the Tx of payment for MCW for which to get data */ function getCustomerTxTimestampPaymentKWh(address _customer, bytes32 _txPaymentForMCW) public view returns(uint256) { require( isValidCustomer(_customer), "Customer is not in the registry." ); require( _txPaymentForMCW != bytes32(0), "Parameter must be not empty." ); TxRegistry txRegistry = TxRegistry(registry[_customer]); uint256 timestampPaymentKWh = txRegistry.getTxTimestampPaymentKWh(_txPaymentForMCW); return timestampPaymentKWh; } /** * @dev Check the customer's Tx of payment for MCW * @param _customer the address of a customer for whom to check * @param _txPaymentForMCW the Tx of payment for MCW which need to be checked */ function isValidCustomerTxPaymentForMCW(address _customer, bytes32 _txPaymentForMCW) public view returns(bool) { require( isValidCustomer(_customer), "Customer is not in the registry." ); require( _txPaymentForMCW != bytes32(0), "Parameter must be not empty." ); TxRegistry txRegistry = TxRegistry(registry[_customer]); bool isValid = txRegistry.isValidTxPaymentForMCW(_txPaymentForMCW); return isValid; } /** * @dev Check if the customer's Tx of payment for MCW is spent * @param _customer the address of a customer for whom to check * @param _txPaymentForMCW the Tx of payment for MCW which need to be checked */ function isSpentCustomerTxPaymentForMCW(address _customer, bytes32 _txPaymentForMCW) public view returns(bool) { require( isValidCustomer(_customer), "Customer is not in the registry." ); require( _txPaymentForMCW != bytes32(0), "Parameter must be not empty." ); TxRegistry txRegistry = TxRegistry(registry[_customer]); bool isSpent = txRegistry.isSpentTxPaymentForMCW(_txPaymentForMCW); return isSpent; } /** * @dev Check the customer's Tx of payment for KWh * @param _customer the address of a customer for whom to check * @param _txPaymentForKWh the Tx of payment for KWh which need to be checked */ function isValidCustomerTxPaymentForKWh(address _customer, bytes32 _txPaymentForKWh) public view returns(bool) { require( isValidCustomer(_customer), "Customer is not in the registry." ); require( _txPaymentForKWh != bytes32(0), "Parameter must be not empty." ); TxRegistry txRegistry = TxRegistry(registry[_customer]); bool isValid = txRegistry.isValidTxPaymentForKWh(_txPaymentForKWh); return isValid; } /** * @dev Get the customer's Tx of payment for MCW by Tx payment for KWh * @param _customer the address of a customer for whom to get * @param _txPaymentForKWh the Tx of payment for KWh */ function getCustomerTxPaymentMCW(address _customer, bytes32 _txPaymentForKWh) public view returns(bytes32) { require( isValidCustomer(_customer), "Customer is not in the registry." ); require( _txPaymentForKWh != bytes32(0), "Parameter must be not empty." ); TxRegistry txRegistry = TxRegistry(registry[_customer]); bytes32 txMCW = txRegistry.getTxPaymentMCW(_txPaymentForKWh); return txMCW; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"getCustomerCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_customer","type":"address"},{"name":"_txPaymentForMCW","type":"bytes32"}],"name":"getCustomerTxTimestampPaymentMCW","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_customer","type":"address"},{"name":"_txPaymentForMCW","type":"bytes32"}],"name":"getCustomerTxAmountMCW","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_customer","type":"address"},{"name":"_txPaymentForMCW","type":"bytes32"}],"name":"isSpentCustomerTxPaymentForMCW","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_customer","type":"address"},{"name":"_txPaymentForMCW","type":"bytes32"}],"name":"setCustomerTxAsSpent","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_customer","type":"address"},{"name":"_txPaymentForMCW","type":"bytes32"}],"name":"getCustomerTxAmountKWh","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_customer","type":"address"},{"name":"_txPaymentForMCW","type":"bytes32"}],"name":"getCustomerTxOrigMcwTransfer","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_customer","type":"address"},{"name":"_index","type":"uint256"}],"name":"getCustomerTxAtIndex","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_customer","type":"address"},{"name":"_txPaymentForKWh","type":"bytes32"}],"name":"isValidCustomerTxPaymentForKWh","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_customer","type":"address"}],"name":"addCustomerToRegistry","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_customer","type":"address"}],"name":"isValidCustomer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_index","type":"uint256"}],"name":"getCustomerAtIndex","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_customer","type":"address"}],"name":"getCustomerTxRegistry","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_customer","type":"address"},{"name":"_txPaymentForKWh","type":"bytes32"}],"name":"getCustomerTxPaymentMCW","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_customer","type":"address"}],"name":"getCustomerTxCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_customer","type":"address"},{"name":"_txPaymentForMCW","type":"bytes32"}],"name":"getCustomerTxTimestampPaymentKWh","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_customer","type":"address"},{"name":"_txPaymentForMCW","type":"bytes32"}],"name":"isValidCustomerTxPaymentForMCW","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_customer","type":"address"},{"name":"_txOrigMcwTransfer","type":"bytes32"},{"name":"_amountMCW","type":"uint256"},{"name":"_amountKWh","type":"uint256"}],"name":"addTxToCustomerRegistry","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_customer","type":"address"},{"name":"_txPaymentForMCW","type":"bytes32"}],"name":"getCustomerTxPaymentKWh","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customer","type":"address"},{"indexed":true,"name":"txRegistry","type":"address"}],"name":"NewCustomer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customer","type":"address"},{"indexed":false,"name":"txPaymentForMCW","type":"bytes32"},{"indexed":false,"name":"txOrigMcwTransfer","type":"bytes32"},{"indexed":false,"name":"amountMCW","type":"uint256"},{"indexed":false,"name":"amountKWh","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"}],"name":"NewCustomerTx","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customer","type":"address"},{"indexed":false,"name":"txPaymentForMCW","type":"bytes32"},{"indexed":false,"name":"txPaymentForKWh","type":"bytes32"},{"indexed":false,"name":"timestamp","type":"uint256"}],"name":"SpendCustomerTx","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]
Contract Creation Code
608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506148af806100606000396000f300608060405260043610610128576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680632027d7461461012d57806323a90e5e1461015857806324453ed6146101bd57806326d3ed0a146102225780632e97f1bb1461028b5780634569db8a146102f45780635d385031146103595780636001b23e146103c6578063712aa1911461042f578063715018a6146104985780637666ee8f146104af578063781660971461050a5780638da5cb5b1461056557806397fb2cea146105bc5780639830a8fd14610629578063a0e6a44b146106ac578063a14977d514610719578063c3c6f0c914610770578063cac952ae146107d5578063f2fde38b1461083e578063f394275314610881578063faadb14a146108fe575b600080fd5b34801561013957600080fd5b5061014261096b565b6040518082815260200191505060405180910390f35b34801561016457600080fd5b506101a7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035600019169060200190929190505050610978565b6040518082815260200191505060405180910390f35b3480156101c957600080fd5b5061020c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035600019169060200190929190505050610b9f565b6040518082815260200191505060405180910390f35b34801561022e57600080fd5b50610271600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035600019169060200190929190505050610dc6565b604051808215151515815260200191505060405180910390f35b34801561029757600080fd5b506102da600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035600019169060200190929190505050610fed565b604051808215151515815260200191505060405180910390f35b34801561030057600080fd5b50610343600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080356000191690602001909291905050506115f6565b6040518082815260200191505060405180910390f35b34801561036557600080fd5b506103a8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560001916906020019092919050505061181d565b60405180826000191660001916815260200191505060405180910390f35b3480156103d257600080fd5b50610411600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611a44565b60405180826000191660001916815260200191505060405180910390f35b34801561043b57600080fd5b5061047e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035600019169060200190929190505050611bdf565b604051808215151515815260200191505060405180910390f35b3480156104a457600080fd5b506104ad611e06565b005b3480156104bb57600080fd5b506104f0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f08565b604051808215151515815260200191505060405180910390f35b34801561051657600080fd5b5061054b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506122da565b604051808215151515815260200191505060405180910390f35b34801561057157600080fd5b5061057a61242e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105c857600080fd5b506105e760048036038101908080359060200190929190505050612453565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561063557600080fd5b5061066a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612496565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106b857600080fd5b506106fb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080356000191690602001909291905050506124ff565b60405180826000191660001916815260200191505060405180910390f35b34801561072557600080fd5b5061075a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612726565b6040518082815260200191505060405180910390f35b34801561077c57600080fd5b506107bf600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080356000191690602001909291905050506128b5565b6040518082815260200191505060405180910390f35b3480156107e157600080fd5b50610824600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035600019169060200190929190505050612adc565b604051808215151515815260200191505060405180910390f35b34801561084a57600080fd5b5061087f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d03565b005b34801561088d57600080fd5b506108e4600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080356000191690602001909291908035906020019092919080359060200190929190505050612d6a565b604051808215151515815260200191505060405180910390f35b34801561090a57600080fd5b5061094d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560001916906020019092919050505061336e565b60405180826000191660001916815260200191505060405180910390f35b6000600280549050905090565b6000806000610986856122da565b15156109fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f437573746f6d6572206973206e6f7420696e207468652072656769737472792e81525060200191505060405180910390fd5b600060010260001916846000191614151515610a7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f506172616d65746572206d757374206265206e6f7420656d7074792e0000000081525060200191505060405180910390fd5b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508173ffffffffffffffffffffffffffffffffffffffff1663675c3048856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015610b5757600080fd5b505af1158015610b6b573d6000803e3d6000fd5b505050506040513d6020811015610b8157600080fd5b81019080805190602001909291905050509050809250505092915050565b6000806000610bad856122da565b1515610c21576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f437573746f6d6572206973206e6f7420696e207468652072656769737472792e81525060200191505060405180910390fd5b600060010260001916846000191614151515610ca5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f506172616d65746572206d757374206265206e6f7420656d7074792e0000000081525060200191505060405180910390fd5b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508173ffffffffffffffffffffffffffffffffffffffff1663dc1bba17856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015610d7e57600080fd5b505af1158015610d92573d6000803e3d6000fd5b505050506040513d6020811015610da857600080fd5b81019080805190602001909291905050509050809250505092915050565b6000806000610dd4856122da565b1515610e48576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f437573746f6d6572206973206e6f7420696e207468652072656769737472792e81525060200191505060405180910390fd5b600060010260001916846000191614151515610ecc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f506172616d65746572206d757374206265206e6f7420656d7074792e0000000081525060200191505060405180910390fd5b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508173ffffffffffffffffffffffffffffffffffffffff1663f79a97fc856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015610fa557600080fd5b505af1158015610fb9573d6000803e3d6000fd5b505050506040513d6020811015610fcf57600080fd5b81019080805190602001909291905050509050809250505092915050565b6000806000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561104e57600080fd5b611057866122da565b15156110cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f437573746f6d6572206973206e6f7420696e207468652072656769737472792e81525060200191505060405180910390fd5b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16925060008373ffffffffffffffffffffffffffffffffffffffff1663675c3048876040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b1580156111a657600080fd5b505af11580156111ba573d6000803e3d6000fd5b505050506040513d60208110156111d057600080fd5b810190808051906020019092919050505014151515611257576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f547820776974682073756368206861736820646f65736e27742065786973742e81525060200191505060405180910390fd5b60008373ffffffffffffffffffffffffffffffffffffffff1663517e62ab876040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b1580156112d057600080fd5b505af11580156112e4573d6000803e3d6000fd5b505050506040513d60208110156112fa57600080fd5b81019080805190602001909291905050501415156113a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f547820776974682073756368206861736820697320616c72656164792073706581526020017f6e742e000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b4291508482604051602001808360001916600019168152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310151561140e57805182526020820191506020810190506020830392506113e9565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902090508273ffffffffffffffffffffffffffffffffffffffff1663da79a9fc8683856040518463ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180846000191660001916815260200183600019166000191681526020018281526020019350505050602060405180830381600087803b1580156114cc57600080fd5b505af11580156114e0573d6000803e3d6000fd5b505050506040513d60208110156114f657600080fd5b8101908080519060200190929190505050151561157b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f536f6d657468696e672077656e742077726f6e672e000000000000000000000081525060200191505060405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff167f896fb7bbb6019770fafd33405c94158d718a22bfaf47272c44dfa5fb0b2e02658683856040518084600019166000191681526020018360001916600019168152602001828152602001935050505060405180910390a26001935050505092915050565b6000806000611604856122da565b1515611678576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f437573746f6d6572206973206e6f7420696e207468652072656769737472792e81525060200191505060405180910390fd5b6000600102600019168460001916141515156116fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f506172616d65746572206d757374206265206e6f7420656d7074792e0000000081525060200191505060405180910390fd5b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508173ffffffffffffffffffffffffffffffffffffffff16639d11f09f856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b1580156117d557600080fd5b505af11580156117e9573d6000803e3d6000fd5b505050506040513d60208110156117ff57600080fd5b81019080805190602001909291905050509050809250505092915050565b600080600061182b856122da565b151561189f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f437573746f6d6572206973206e6f7420696e207468652072656769737472792e81525060200191505060405180910390fd5b600060010260001916846000191614151515611923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f506172616d65746572206d757374206265206e6f7420656d7074792e0000000081525060200191505060405180910390fd5b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508173ffffffffffffffffffffffffffffffffffffffff1663772b7a73856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b1580156119fc57600080fd5b505af1158015611a10573d6000803e3d6000fd5b505050506040513d6020811015611a2657600080fd5b81019080805190602001909291905050509050809250505092915050565b6000806000611a52856122da565b1515611ac6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f437573746f6d6572206973206e6f7420696e207468652072656769737472792e81525060200191505060405180910390fd5b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508173ffffffffffffffffffffffffffffffffffffffff1663b167c34e856040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b158015611b9757600080fd5b505af1158015611bab573d6000803e3d6000fd5b505050506040513d6020811015611bc157600080fd5b81019080805190602001909291905050509050809250505092915050565b6000806000611bed856122da565b1515611c61576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f437573746f6d6572206973206e6f7420696e207468652072656769737472792e81525060200191505060405180910390fd5b600060010260001916846000191614151515611ce5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f506172616d65746572206d757374206265206e6f7420656d7074792e0000000081525060200191505060405180910390fd5b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508173ffffffffffffffffffffffffffffffffffffffff1663dd02e30d856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015611dbe57600080fd5b505af1158015611dd2573d6000803e3d6000fd5b505050506040513d6020811015611de857600080fd5b81019080805190602001909291905050509050809250505092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611e6157600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482060405160405180910390a260008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611f6657600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561200b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f506172616d65746572206d757374206265206e6f7420656d7074792e0000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515612134576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f437573746f6d657220697320616c726561647920696e2074686520726567697381526020017f7472792e0000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8261213d61368f565b808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050604051809103906000f08015801561218f573d6000803e3d6000fd5b50905080600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060028390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb9a729146003b2590bfdbb9eb4b38762acf6ff00de0202bb350d30a152fcce9860405160405180910390a36001915050919050565b60008060008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515612383576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f506172616d65746572206d757374206265206e6f7420656d7074792e0000000081525060200191505060405180910390fd5b60009150600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151561242457600191505b8192505050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060028281548110151561246457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600080600061250d856122da565b1515612581576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f437573746f6d6572206973206e6f7420696e207468652072656769737472792e81525060200191505060405180910390fd5b600060010260001916846000191614151515612605576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f506172616d65746572206d757374206265206e6f7420656d7074792e0000000081525060200191505060405180910390fd5b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508173ffffffffffffffffffffffffffffffffffffffff16635af9f68f856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b1580156126de57600080fd5b505af11580156126f2573d6000803e3d6000fd5b505050506040513d602081101561270857600080fd5b81019080805190602001909291905050509050809250505092915050565b6000806000612734846122da565b15156127a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f437573746f6d6572206973206e6f7420696e207468652072656769737472792e81525060200191505060405180910390fd5b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508173ffffffffffffffffffffffffffffffffffffffff16631dd46c1e6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561286e57600080fd5b505af1158015612882573d6000803e3d6000fd5b505050506040513d602081101561289857600080fd5b810190808051906020019092919050505090508092505050919050565b60008060006128c3856122da565b1515612937576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f437573746f6d6572206973206e6f7420696e207468652072656769737472792e81525060200191505060405180910390fd5b6000600102600019168460001916141515156129bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f506172616d65746572206d757374206265206e6f7420656d7074792e0000000081525060200191505060405180910390fd5b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508173ffffffffffffffffffffffffffffffffffffffff1663517e62ab856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015612a9457600080fd5b505af1158015612aa8573d6000803e3d6000fd5b505050506040513d6020811015612abe57600080fd5b81019080805190602001909291905050509050809250505092915050565b6000806000612aea856122da565b1515612b5e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f437573746f6d6572206973206e6f7420696e207468652072656769737472792e81525060200191505060405180910390fd5b600060010260001916846000191614151515612be2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f506172616d65746572206d757374206265206e6f7420656d7074792e0000000081525060200191505060405180910390fd5b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508173ffffffffffffffffffffffffffffffffffffffff1663f22c0f7d856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015612cbb57600080fd5b505af1158015612ccf573d6000803e3d6000fd5b505050506040513d6020811015612ce557600080fd5b81019080805190602001909291905050509050809250505092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612d5e57600080fd5b612d6781613595565b50565b6000806000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612dcb57600080fd5b612dd4886122da565b1515612e48576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f437573746f6d6572206973206e6f7420696e207468652072656769737472792e81525060200191505060405180910390fd5b6000600102876000191614158015612e61575060008614155b8015612e6e575060008514155b1515612f08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f416c6c20706172616d6574657273206d757374206265206e6f7420656d70747981526020017f2e0000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b42925087868685604051602001808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018481526020018381526020018281526020019450505050506040516020818303038152906040526040518082805190602001908083835b602083101515612fb35780518252602082019150602081019050602083039250612f8e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209150600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff1663675c3048846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b1580156130bd57600080fd5b505af11580156130d1573d6000803e3d6000fd5b505050506040513d60208110156130e757600080fd5b8101908080519060200190929190505050141515613193576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f547820776974682073756368206861736820697320616c72656164792065786981526020017f73742e000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16632729f44e83898989886040518663ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808660001916600019168152602001856000191660001916815260200184815260200183815260200182815260200195505050505050602060405180830381600087803b15801561323257600080fd5b505af1158015613246573d6000803e3d6000fd5b505050506040513d602081101561325c57600080fd5b810190808051906020019092919050505015156132e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f536f6d657468696e672077656e742077726f6e672e000000000000000000000081525060200191505060405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff167f8df8d17e46812b16c4b504454beba4429f4c097d49e2a7f34b5b1da2358c7d59838989898860405180866000191660001916815260200185600019166000191681526020018481526020018381526020018281526020019550505050505060405180910390a260019350505050949350505050565b600080600061337c856122da565b15156133f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f437573746f6d6572206973206e6f7420696e207468652072656769737472792e81525060200191505060405180910390fd5b600060010260001916846000191614151515613474576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f506172616d65746572206d757374206265206e6f7420656d7074792e0000000081525060200191505060405180910390fd5b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508173ffffffffffffffffffffffffffffffffffffffff1663ff56b65a856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15801561354d57600080fd5b505af1158015613561573d6000803e3d6000fd5b505050506040513d602081101561357757600080fd5b81019080805190602001909291905050509050809250505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156135d157600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6040516111e4806136a0833901905600608060405234801561001057600080fd5b506040516020806111e483398101806040528101908080519060200190929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050611120806100c46000396000f3006080604052600436106100fc576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680631dd46c1e146101015780632729f44e1461012c5780632804b2c0146101a1578063517e62ab146101f85780635af9f68f1461023d578063675c30481461028a578063715018a6146102cf578063772b7a73146102e65780638da5cb5b146103335780639d11f09f1461038a578063b167c34e146103cf578063da79a9fc14610418578063dc1bba1714610479578063dd02e30d146104be578063f22c0f7d14610507578063f2fde38b14610550578063f79a97fc14610593578063ff56b65a146105dc575b600080fd5b34801561010d57600080fd5b50610116610629565b6040518082815260200191505060405180910390f35b34801561013857600080fd5b5061018760048036038101908080356000191690602001909291908035600019169060200190929190803590602001909291908035906020019092919080359060200190929190505050610636565b604051808215151515815260200191505060405180910390f35b3480156101ad57600080fd5b506101b66108ff565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561020457600080fd5b506102276004803603810190808035600019169060200190929190505050610925565b6040518082815260200191505060405180910390f35b34801561024957600080fd5b5061026c600480360381019080803560001916906020019092919050505061094d565b60405180826000191660001916815260200191505060405180910390f35b34801561029657600080fd5b506102b960048036038101908080356000191690602001909291905050506109c9565b6040518082815260200191505060405180910390f35b3480156102db57600080fd5b506102e46109f1565b005b3480156102f257600080fd5b506103156004803603810190808035600019169060200190929190505050610af3565b60405180826000191660001916815260200191505060405180910390f35b34801561033f57600080fd5b50610348610b1b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561039657600080fd5b506103b96004803603810190808035600019169060200190929190505050610b40565b6040518082815260200191505060405180910390f35b3480156103db57600080fd5b506103fa60048036038101908080359060200190929190505050610b68565b60405180826000191660001916815260200191505060405180910390f35b34801561042457600080fd5b5061045f6004803603810190808035600019169060200190929190803560001916906020019092919080359060200190929190505050610b8b565b604051808215151515815260200191505060405180910390f35b34801561048557600080fd5b506104a86004803603810190808035600019169060200190929190505050610e57565b6040518082815260200191505060405180910390f35b3480156104ca57600080fd5b506104ed6004803603810190808035600019169060200190929190505050610e7f565b604051808215151515815260200191505060405180910390f35b34801561051357600080fd5b506105366004803603810190808035600019169060200190929190505050610ef1565b604051808215151515815260200191505060405180910390f35b34801561055c57600080fd5b50610591600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f2e565b005b34801561059f57600080fd5b506105c26004803603810190808035600019169060200190929190505050610f95565b604051808215151515815260200191505060405180910390f35b3480156105e857600080fd5b5061060b6004803603810190808035600019169060200190929190505050610fd2565b60405180826000191660001916815260200191505060405180910390f35b6000600380549050905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561069357600080fd5b60006001028660001916141580156106b357506000600102856000191614155b80156106c0575060008414155b80156106cd575060008314155b80156106da575060008214155b1515610774576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f416c6c20706172616d6574657273206d757374206265206e6f7420656d70747981526020017f2e0000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600060026000886000191660001916815260200190815260200160002060030154141515610830576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f547820776974682073756368206861736820697320616c72656164792065786981526020017f73742e000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b84600260008860001916600019168152602001908152602001600020600001816000191690555083600260008860001916600019168152602001908152602001600020600101819055508260026000886000191660001916815260200190815260200160002060020181905550816002600088600019166000191681526020019081526020016000206003018190555060038690806001815401808255809150509060018203906000526020600020016000909192909190915090600019169055506001905095945050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008360001916600019168152602001908152602001600020600501549050919050565b6000806000806001029150600090505b610965610629565b8110156109bf5783600019166002600061097e84610b68565b60001916600019168152602001908152602001600020600401546000191614156109b2576109ab81610b68565b91506109bf565b808060010191505061095d565b8192505050919050565b6000600260008360001916600019168152602001908152602001600020600301549050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610a4c57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482060405160405180910390a260008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600260008360001916600019168152602001908152602001600020600001549050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008360001916600019168152602001908152602001600020600201549050919050565b6000600382815481101515610b7957fe5b90600052602060002001549050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610be857600080fd5b6000600102846000191614158015610c0857506000600102836000191614155b8015610c15575060008214155b1515610caf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f416c6c20706172616d6574657273206d757374206265206e6f7420656d70747981526020017f2e0000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60006002600086600019166000191681526020019081526020016000206003015414151515610d46576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f547820776974682073756368206861736820646f65736e27742065786973742e81525060200191505060405180910390fd5b600060026000866000191660001916815260200190815260200160002060050154141515610e02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f547820776974682073756368206861736820697320616c72656164792073706581526020017f6e742e000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8260026000866000191660001916815260200190815260200160002060040181600019169055508160026000866000191660001916815260200190815260200160002060050181905550600190509392505050565b6000600260008360001916600019168152602001908152602001600020600101549050919050565b6000806000809150600090505b610e94610629565b811015610ee757836000191660026000610ead84610b68565b6000191660001916815260200190815260200160002060040154600019161415610eda5760019150610ee7565b8080600101915050610e8c565b8192505050919050565b60008060009050600060026000856000191660001916815260200190815260200160002060030154141515610f2557600190505b80915050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610f8957600080fd5b610f9281610ffa565b50565b60008060009050600060026000856000191660001916815260200190815260200160002060050154141515610fc957600190505b80915050919050565b6000600260008360001916600019168152602001908152602001600020600401549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561103657600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505600a165627a7a72305820cdbe33d24a2932853454ffefe3848b127f45247ec74e03077f16e8845776a5570029a165627a7a723058206da21458082fbe4e2d63f3ae0f67cea3faf3f5f7ae7c0434037c5543c6252ea50029
Deployed Bytecode
0x608060405260043610610128576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680632027d7461461012d57806323a90e5e1461015857806324453ed6146101bd57806326d3ed0a146102225780632e97f1bb1461028b5780634569db8a146102f45780635d385031146103595780636001b23e146103c6578063712aa1911461042f578063715018a6146104985780637666ee8f146104af578063781660971461050a5780638da5cb5b1461056557806397fb2cea146105bc5780639830a8fd14610629578063a0e6a44b146106ac578063a14977d514610719578063c3c6f0c914610770578063cac952ae146107d5578063f2fde38b1461083e578063f394275314610881578063faadb14a146108fe575b600080fd5b34801561013957600080fd5b5061014261096b565b6040518082815260200191505060405180910390f35b34801561016457600080fd5b506101a7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035600019169060200190929190505050610978565b6040518082815260200191505060405180910390f35b3480156101c957600080fd5b5061020c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035600019169060200190929190505050610b9f565b6040518082815260200191505060405180910390f35b34801561022e57600080fd5b50610271600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035600019169060200190929190505050610dc6565b604051808215151515815260200191505060405180910390f35b34801561029757600080fd5b506102da600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035600019169060200190929190505050610fed565b604051808215151515815260200191505060405180910390f35b34801561030057600080fd5b50610343600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080356000191690602001909291905050506115f6565b6040518082815260200191505060405180910390f35b34801561036557600080fd5b506103a8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560001916906020019092919050505061181d565b60405180826000191660001916815260200191505060405180910390f35b3480156103d257600080fd5b50610411600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611a44565b60405180826000191660001916815260200191505060405180910390f35b34801561043b57600080fd5b5061047e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035600019169060200190929190505050611bdf565b604051808215151515815260200191505060405180910390f35b3480156104a457600080fd5b506104ad611e06565b005b3480156104bb57600080fd5b506104f0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f08565b604051808215151515815260200191505060405180910390f35b34801561051657600080fd5b5061054b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506122da565b604051808215151515815260200191505060405180910390f35b34801561057157600080fd5b5061057a61242e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105c857600080fd5b506105e760048036038101908080359060200190929190505050612453565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561063557600080fd5b5061066a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612496565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106b857600080fd5b506106fb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080356000191690602001909291905050506124ff565b60405180826000191660001916815260200191505060405180910390f35b34801561072557600080fd5b5061075a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612726565b6040518082815260200191505060405180910390f35b34801561077c57600080fd5b506107bf600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080356000191690602001909291905050506128b5565b6040518082815260200191505060405180910390f35b3480156107e157600080fd5b50610824600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035600019169060200190929190505050612adc565b604051808215151515815260200191505060405180910390f35b34801561084a57600080fd5b5061087f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d03565b005b34801561088d57600080fd5b506108e4600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080356000191690602001909291908035906020019092919080359060200190929190505050612d6a565b604051808215151515815260200191505060405180910390f35b34801561090a57600080fd5b5061094d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560001916906020019092919050505061336e565b60405180826000191660001916815260200191505060405180910390f35b6000600280549050905090565b6000806000610986856122da565b15156109fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f437573746f6d6572206973206e6f7420696e207468652072656769737472792e81525060200191505060405180910390fd5b600060010260001916846000191614151515610a7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f506172616d65746572206d757374206265206e6f7420656d7074792e0000000081525060200191505060405180910390fd5b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508173ffffffffffffffffffffffffffffffffffffffff1663675c3048856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015610b5757600080fd5b505af1158015610b6b573d6000803e3d6000fd5b505050506040513d6020811015610b8157600080fd5b81019080805190602001909291905050509050809250505092915050565b6000806000610bad856122da565b1515610c21576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f437573746f6d6572206973206e6f7420696e207468652072656769737472792e81525060200191505060405180910390fd5b600060010260001916846000191614151515610ca5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f506172616d65746572206d757374206265206e6f7420656d7074792e0000000081525060200191505060405180910390fd5b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508173ffffffffffffffffffffffffffffffffffffffff1663dc1bba17856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015610d7e57600080fd5b505af1158015610d92573d6000803e3d6000fd5b505050506040513d6020811015610da857600080fd5b81019080805190602001909291905050509050809250505092915050565b6000806000610dd4856122da565b1515610e48576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f437573746f6d6572206973206e6f7420696e207468652072656769737472792e81525060200191505060405180910390fd5b600060010260001916846000191614151515610ecc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f506172616d65746572206d757374206265206e6f7420656d7074792e0000000081525060200191505060405180910390fd5b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508173ffffffffffffffffffffffffffffffffffffffff1663f79a97fc856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015610fa557600080fd5b505af1158015610fb9573d6000803e3d6000fd5b505050506040513d6020811015610fcf57600080fd5b81019080805190602001909291905050509050809250505092915050565b6000806000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561104e57600080fd5b611057866122da565b15156110cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f437573746f6d6572206973206e6f7420696e207468652072656769737472792e81525060200191505060405180910390fd5b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16925060008373ffffffffffffffffffffffffffffffffffffffff1663675c3048876040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b1580156111a657600080fd5b505af11580156111ba573d6000803e3d6000fd5b505050506040513d60208110156111d057600080fd5b810190808051906020019092919050505014151515611257576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f547820776974682073756368206861736820646f65736e27742065786973742e81525060200191505060405180910390fd5b60008373ffffffffffffffffffffffffffffffffffffffff1663517e62ab876040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b1580156112d057600080fd5b505af11580156112e4573d6000803e3d6000fd5b505050506040513d60208110156112fa57600080fd5b81019080805190602001909291905050501415156113a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f547820776974682073756368206861736820697320616c72656164792073706581526020017f6e742e000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b4291508482604051602001808360001916600019168152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310151561140e57805182526020820191506020810190506020830392506113e9565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902090508273ffffffffffffffffffffffffffffffffffffffff1663da79a9fc8683856040518463ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180846000191660001916815260200183600019166000191681526020018281526020019350505050602060405180830381600087803b1580156114cc57600080fd5b505af11580156114e0573d6000803e3d6000fd5b505050506040513d60208110156114f657600080fd5b8101908080519060200190929190505050151561157b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f536f6d657468696e672077656e742077726f6e672e000000000000000000000081525060200191505060405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff167f896fb7bbb6019770fafd33405c94158d718a22bfaf47272c44dfa5fb0b2e02658683856040518084600019166000191681526020018360001916600019168152602001828152602001935050505060405180910390a26001935050505092915050565b6000806000611604856122da565b1515611678576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f437573746f6d6572206973206e6f7420696e207468652072656769737472792e81525060200191505060405180910390fd5b6000600102600019168460001916141515156116fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f506172616d65746572206d757374206265206e6f7420656d7074792e0000000081525060200191505060405180910390fd5b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508173ffffffffffffffffffffffffffffffffffffffff16639d11f09f856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b1580156117d557600080fd5b505af11580156117e9573d6000803e3d6000fd5b505050506040513d60208110156117ff57600080fd5b81019080805190602001909291905050509050809250505092915050565b600080600061182b856122da565b151561189f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f437573746f6d6572206973206e6f7420696e207468652072656769737472792e81525060200191505060405180910390fd5b600060010260001916846000191614151515611923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f506172616d65746572206d757374206265206e6f7420656d7074792e0000000081525060200191505060405180910390fd5b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508173ffffffffffffffffffffffffffffffffffffffff1663772b7a73856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b1580156119fc57600080fd5b505af1158015611a10573d6000803e3d6000fd5b505050506040513d6020811015611a2657600080fd5b81019080805190602001909291905050509050809250505092915050565b6000806000611a52856122da565b1515611ac6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f437573746f6d6572206973206e6f7420696e207468652072656769737472792e81525060200191505060405180910390fd5b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508173ffffffffffffffffffffffffffffffffffffffff1663b167c34e856040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b158015611b9757600080fd5b505af1158015611bab573d6000803e3d6000fd5b505050506040513d6020811015611bc157600080fd5b81019080805190602001909291905050509050809250505092915050565b6000806000611bed856122da565b1515611c61576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f437573746f6d6572206973206e6f7420696e207468652072656769737472792e81525060200191505060405180910390fd5b600060010260001916846000191614151515611ce5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f506172616d65746572206d757374206265206e6f7420656d7074792e0000000081525060200191505060405180910390fd5b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508173ffffffffffffffffffffffffffffffffffffffff1663dd02e30d856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015611dbe57600080fd5b505af1158015611dd2573d6000803e3d6000fd5b505050506040513d6020811015611de857600080fd5b81019080805190602001909291905050509050809250505092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611e6157600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482060405160405180910390a260008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611f6657600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561200b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f506172616d65746572206d757374206265206e6f7420656d7074792e0000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515612134576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f437573746f6d657220697320616c726561647920696e2074686520726567697381526020017f7472792e0000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8261213d61368f565b808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050604051809103906000f08015801561218f573d6000803e3d6000fd5b50905080600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060028390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb9a729146003b2590bfdbb9eb4b38762acf6ff00de0202bb350d30a152fcce9860405160405180910390a36001915050919050565b60008060008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515612383576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f506172616d65746572206d757374206265206e6f7420656d7074792e0000000081525060200191505060405180910390fd5b60009150600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151561242457600191505b8192505050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060028281548110151561246457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600080600061250d856122da565b1515612581576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f437573746f6d6572206973206e6f7420696e207468652072656769737472792e81525060200191505060405180910390fd5b600060010260001916846000191614151515612605576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f506172616d65746572206d757374206265206e6f7420656d7074792e0000000081525060200191505060405180910390fd5b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508173ffffffffffffffffffffffffffffffffffffffff16635af9f68f856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b1580156126de57600080fd5b505af11580156126f2573d6000803e3d6000fd5b505050506040513d602081101561270857600080fd5b81019080805190602001909291905050509050809250505092915050565b6000806000612734846122da565b15156127a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f437573746f6d6572206973206e6f7420696e207468652072656769737472792e81525060200191505060405180910390fd5b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508173ffffffffffffffffffffffffffffffffffffffff16631dd46c1e6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561286e57600080fd5b505af1158015612882573d6000803e3d6000fd5b505050506040513d602081101561289857600080fd5b810190808051906020019092919050505090508092505050919050565b60008060006128c3856122da565b1515612937576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f437573746f6d6572206973206e6f7420696e207468652072656769737472792e81525060200191505060405180910390fd5b6000600102600019168460001916141515156129bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f506172616d65746572206d757374206265206e6f7420656d7074792e0000000081525060200191505060405180910390fd5b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508173ffffffffffffffffffffffffffffffffffffffff1663517e62ab856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015612a9457600080fd5b505af1158015612aa8573d6000803e3d6000fd5b505050506040513d6020811015612abe57600080fd5b81019080805190602001909291905050509050809250505092915050565b6000806000612aea856122da565b1515612b5e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f437573746f6d6572206973206e6f7420696e207468652072656769737472792e81525060200191505060405180910390fd5b600060010260001916846000191614151515612be2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f506172616d65746572206d757374206265206e6f7420656d7074792e0000000081525060200191505060405180910390fd5b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508173ffffffffffffffffffffffffffffffffffffffff1663f22c0f7d856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015612cbb57600080fd5b505af1158015612ccf573d6000803e3d6000fd5b505050506040513d6020811015612ce557600080fd5b81019080805190602001909291905050509050809250505092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612d5e57600080fd5b612d6781613595565b50565b6000806000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612dcb57600080fd5b612dd4886122da565b1515612e48576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f437573746f6d6572206973206e6f7420696e207468652072656769737472792e81525060200191505060405180910390fd5b6000600102876000191614158015612e61575060008614155b8015612e6e575060008514155b1515612f08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f416c6c20706172616d6574657273206d757374206265206e6f7420656d70747981526020017f2e0000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b42925087868685604051602001808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018481526020018381526020018281526020019450505050506040516020818303038152906040526040518082805190602001908083835b602083101515612fb35780518252602082019150602081019050602083039250612f8e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209150600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff1663675c3048846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b1580156130bd57600080fd5b505af11580156130d1573d6000803e3d6000fd5b505050506040513d60208110156130e757600080fd5b8101908080519060200190929190505050141515613193576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f547820776974682073756368206861736820697320616c72656164792065786981526020017f73742e000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16632729f44e83898989886040518663ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808660001916600019168152602001856000191660001916815260200184815260200183815260200182815260200195505050505050602060405180830381600087803b15801561323257600080fd5b505af1158015613246573d6000803e3d6000fd5b505050506040513d602081101561325c57600080fd5b810190808051906020019092919050505015156132e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f536f6d657468696e672077656e742077726f6e672e000000000000000000000081525060200191505060405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff167f8df8d17e46812b16c4b504454beba4429f4c097d49e2a7f34b5b1da2358c7d59838989898860405180866000191660001916815260200185600019166000191681526020018481526020018381526020018281526020019550505050505060405180910390a260019350505050949350505050565b600080600061337c856122da565b15156133f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f437573746f6d6572206973206e6f7420696e207468652072656769737472792e81525060200191505060405180910390fd5b600060010260001916846000191614151515613474576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f506172616d65746572206d757374206265206e6f7420656d7074792e0000000081525060200191505060405180910390fd5b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508173ffffffffffffffffffffffffffffffffffffffff1663ff56b65a856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15801561354d57600080fd5b505af1158015613561573d6000803e3d6000fd5b505050506040513d602081101561357757600080fd5b81019080805190602001909291905050509050809250505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156135d157600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6040516111e4806136a0833901905600608060405234801561001057600080fd5b506040516020806111e483398101806040528101908080519060200190929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050611120806100c46000396000f3006080604052600436106100fc576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680631dd46c1e146101015780632729f44e1461012c5780632804b2c0146101a1578063517e62ab146101f85780635af9f68f1461023d578063675c30481461028a578063715018a6146102cf578063772b7a73146102e65780638da5cb5b146103335780639d11f09f1461038a578063b167c34e146103cf578063da79a9fc14610418578063dc1bba1714610479578063dd02e30d146104be578063f22c0f7d14610507578063f2fde38b14610550578063f79a97fc14610593578063ff56b65a146105dc575b600080fd5b34801561010d57600080fd5b50610116610629565b6040518082815260200191505060405180910390f35b34801561013857600080fd5b5061018760048036038101908080356000191690602001909291908035600019169060200190929190803590602001909291908035906020019092919080359060200190929190505050610636565b604051808215151515815260200191505060405180910390f35b3480156101ad57600080fd5b506101b66108ff565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561020457600080fd5b506102276004803603810190808035600019169060200190929190505050610925565b6040518082815260200191505060405180910390f35b34801561024957600080fd5b5061026c600480360381019080803560001916906020019092919050505061094d565b60405180826000191660001916815260200191505060405180910390f35b34801561029657600080fd5b506102b960048036038101908080356000191690602001909291905050506109c9565b6040518082815260200191505060405180910390f35b3480156102db57600080fd5b506102e46109f1565b005b3480156102f257600080fd5b506103156004803603810190808035600019169060200190929190505050610af3565b60405180826000191660001916815260200191505060405180910390f35b34801561033f57600080fd5b50610348610b1b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561039657600080fd5b506103b96004803603810190808035600019169060200190929190505050610b40565b6040518082815260200191505060405180910390f35b3480156103db57600080fd5b506103fa60048036038101908080359060200190929190505050610b68565b60405180826000191660001916815260200191505060405180910390f35b34801561042457600080fd5b5061045f6004803603810190808035600019169060200190929190803560001916906020019092919080359060200190929190505050610b8b565b604051808215151515815260200191505060405180910390f35b34801561048557600080fd5b506104a86004803603810190808035600019169060200190929190505050610e57565b6040518082815260200191505060405180910390f35b3480156104ca57600080fd5b506104ed6004803603810190808035600019169060200190929190505050610e7f565b604051808215151515815260200191505060405180910390f35b34801561051357600080fd5b506105366004803603810190808035600019169060200190929190505050610ef1565b604051808215151515815260200191505060405180910390f35b34801561055c57600080fd5b50610591600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f2e565b005b34801561059f57600080fd5b506105c26004803603810190808035600019169060200190929190505050610f95565b604051808215151515815260200191505060405180910390f35b3480156105e857600080fd5b5061060b6004803603810190808035600019169060200190929190505050610fd2565b60405180826000191660001916815260200191505060405180910390f35b6000600380549050905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561069357600080fd5b60006001028660001916141580156106b357506000600102856000191614155b80156106c0575060008414155b80156106cd575060008314155b80156106da575060008214155b1515610774576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f416c6c20706172616d6574657273206d757374206265206e6f7420656d70747981526020017f2e0000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600060026000886000191660001916815260200190815260200160002060030154141515610830576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f547820776974682073756368206861736820697320616c72656164792065786981526020017f73742e000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b84600260008860001916600019168152602001908152602001600020600001816000191690555083600260008860001916600019168152602001908152602001600020600101819055508260026000886000191660001916815260200190815260200160002060020181905550816002600088600019166000191681526020019081526020016000206003018190555060038690806001815401808255809150509060018203906000526020600020016000909192909190915090600019169055506001905095945050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008360001916600019168152602001908152602001600020600501549050919050565b6000806000806001029150600090505b610965610629565b8110156109bf5783600019166002600061097e84610b68565b60001916600019168152602001908152602001600020600401546000191614156109b2576109ab81610b68565b91506109bf565b808060010191505061095d565b8192505050919050565b6000600260008360001916600019168152602001908152602001600020600301549050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610a4c57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482060405160405180910390a260008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600260008360001916600019168152602001908152602001600020600001549050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008360001916600019168152602001908152602001600020600201549050919050565b6000600382815481101515610b7957fe5b90600052602060002001549050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610be857600080fd5b6000600102846000191614158015610c0857506000600102836000191614155b8015610c15575060008214155b1515610caf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f416c6c20706172616d6574657273206d757374206265206e6f7420656d70747981526020017f2e0000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60006002600086600019166000191681526020019081526020016000206003015414151515610d46576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f547820776974682073756368206861736820646f65736e27742065786973742e81525060200191505060405180910390fd5b600060026000866000191660001916815260200190815260200160002060050154141515610e02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f547820776974682073756368206861736820697320616c72656164792073706581526020017f6e742e000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8260026000866000191660001916815260200190815260200160002060040181600019169055508160026000866000191660001916815260200190815260200160002060050181905550600190509392505050565b6000600260008360001916600019168152602001908152602001600020600101549050919050565b6000806000809150600090505b610e94610629565b811015610ee757836000191660026000610ead84610b68565b6000191660001916815260200190815260200160002060040154600019161415610eda5760019150610ee7565b8080600101915050610e8c565b8192505050919050565b60008060009050600060026000856000191660001916815260200190815260200160002060030154141515610f2557600190505b80915050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610f8957600080fd5b610f9281610ffa565b50565b60008060009050600060026000856000191660001916815260200190815260200160002060050154141515610fc957600190505b80915050919050565b6000600260008360001916600019168152602001908152602001600020600401549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561103657600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505600a165627a7a72305820cdbe33d24a2932853454ffefe3848b127f45247ec74e03077f16e8845776a5570029a165627a7a723058206da21458082fbe4e2d63f3ae0f67cea3faf3f5f7ae7c0434037c5543c6252ea50029
Swarm Source
bzzr://6da21458082fbe4e2d63f3ae0f67cea3faf3f5f7ae7c0434037c5543c6252ea5
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.