POA Network merged with the Gnosis Chain. More information about the merger.

Contract Address Details

0x7a751b4784140b1957DF21F7Fb9d0D0E42021838

Contract Name
ArianeeIdentity
Creator
0x860847–43debe at 0xce7f84–b34017
Balance
0 POA ( )
Tokens
Fetching tokens...
Transactions
212 Transactions
Transfers
0 Transfers
Gas Used
22,721,233
Last Balance Update
30929958
Contract name:
ArianeeIdentity




Optimization enabled
true
Compiler version
v0.5.6+commit.b259423e




Verified at
2019-06-25T08:08:20.663280Z

Constructor Arguments

b5fa77bd6bc3d862c73fa2474bfb96a0f76d38b622c54ff2a0188be82fb9651100000000000000000000000086084777828cd820f41dc1f4fdb599d2cc43debe00000000000000000000000086084777828cd820f41dc1f4fdb599d2cc43debe

Arg [0] (address) : 0x4bfb96a0f76d38b622c54ff2a0188be82fb96511
Arg [1] (address) : 0x86084777828cd820f41dc1f4fdb599d2cc43debe

              

Contract source code

Sol2uml
new
// File: @0xcert/ethereum-utils-contracts/src/contracts/permission/ownable.sol

pragma solidity 0.5.6;

/**
 * @dev The contract has an owner address, and provides basic authorization control whitch
 * simplifies the implementation of user permissions. This contract is based on the source code at:
 * https://github.com/OpenZeppelin/openzeppelin-solidity/blob/master/contracts/ownership/Ownable.sol
 */
contract Ownable
{

  /**
   * @dev Error constants.
   */
  string constant NOT_OWNER = "018001";
  string constant ZERO_ADDRESS = "018002";

  /**
   * @dev Address of the owner.
   */
  address public owner;

  /**
   * @dev An event which is triggered when the owner is changed.
   * @param previousOwner The address of the previous owner.
   * @param newOwner The address of the new owner.
   */
  event OwnershipTransferred(
    address indexed previousOwner,
    address indexed newOwner
  );

  /**
   * @dev The 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, NOT_OWNER);
    _;
  }

  /**
   * @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
  {
    require(_newOwner != address(0), ZERO_ADDRESS);
    emit OwnershipTransferred(owner, _newOwner);
    owner = _newOwner;
  }

}

// File: contracts/ArianeeIdentity.sol

pragma solidity 0.5.6;


contract ArianeeIdentity is
Ownable
{

  /**
   * @dev A descriptive name.
   */
  string internal name;

  /**
   * @dev An abbreviated name.
   */
  string internal symbol;

  /**
   * @dev Mapping from address to approvedList boolean
   */
  mapping(address => bool) internal approvedList;

  /**
   * @dev Mapping from address to URI.
   */
  mapping(address => string) internal addressToUri;

  /**
   * @dev Mapping from address to imprint.
   */
  mapping(address => bytes32) internal addressToImprint;

  /**
   * @dev Mapping from address to URI.
   */
  mapping(address => string) internal addressToWaitingUri;

  /**
   * @dev Mapping from address to imprint.
   */
  mapping(address => bytes32) internal addressToWaitingImprint;

  /**
   * @dev Mapping from address to compromise date.
   */
  mapping(address => uint256) internal compromiseDate;

  /**
   * @dev Mapping from addressId to address.
   */
  mapping(bytes3=>address) internal addressListing;

  address public bouncerAddress;
  address public validatorAddress;

  /**
   * @dev This emits when a new address is approved.
   */
  event AddressApprovedAdded(address _newIdentity, bytes3 _addressId);

  /**
   * @dev This emits when an address is removed from approvedList.
   */
  event AddressApprovedRemoved(address _newIdentity);

  /**
   * @dev This emits when a new address is approved.
   */
  event URIUpdated(address _identity, string _uri, bytes32 _imprint);

  /**
   * @dev This emits when an identity change its URI and Imprint.
   */
  event URIValidate(address _identity, string _uri, bytes32 _imprint);

  /**
   * @dev This emits when an identity change is validated by the contract owner.
   */
  event IdentityCompromised(address _identity, uint256 _compromiseDate);

  /**
   * @dev This emits when a new address is set.
   */
  event SetAddress(string _addressType, address _newAddress);

  /**
    * @dev Initialize this contract. Acts as a constructor
    * @param _newBouncerAddress Address of the bouncer.
    * @param _newValidatorAddress Address of the validator.
    */
  constructor(address _newBouncerAddress, address _newValidatorAddress) public {
    name = "Arianee Identity";
    symbol = "AriaID";
    updateBouncerAddress(_newBouncerAddress);
    updateValidatorAddress(_newValidatorAddress);
  }

  /**
   * @dev Add a new address to approvedList
   * @notice allow an address to create/update his URI and Imprint.
   * @notice Can only be called by the bouncer.
   * @param _newIdentity Address to authorize.
   * @return Id for address in bytes3.
   */
  function addAddressToApprovedList(address _newIdentity) external returns (bytes3) {
    require(msg.sender == bouncerAddress);
    approvedList[_newIdentity] = true;

    bytes memory _bytesAddress = abi.encodePacked(_newIdentity);
    bytes3 _addressId = _convertBytesToBytes3(_bytesAddress);

    addressListing[_addressId] = _newIdentity;

    emit AddressApprovedAdded(_newIdentity, _addressId);

    return _addressId;
  }

  /**
   * @dev Remove an address from approvedList.
   * @notice Can only be called by the bouncer.
   * @param _identity to delete from the approvedList.
   */
  function removeAddressFromApprovedList(address _identity) external {
    require(msg.sender == bouncerAddress);
    approvedList[_identity] = false;
    emit AddressApprovedRemoved(_identity);
  }

  /**
   * @dev Update URI and Imprint of an address.
   * @param _uri URI to update.
   * @param _imprint Imprint to update
   */
  function updateInformations(string calldata _uri, bytes32 _imprint) external isApproved(msg.sender) {
    addressToWaitingUri[msg.sender] = _uri;
    addressToWaitingImprint[msg.sender] = _imprint;

    emit URIUpdated(msg.sender, _uri, _imprint);
  }


  /**
   * @dev Validate waiting informations provided by the identity.
   * @notice Can only be called by the validator.
   * @param _uriToValidate uri to be validated.
   * @param _identity address to be validated.
   */
  function validateInformation(address _identity, string calldata _uriToValidate, bytes32 _imprintToValidate) external {
    require(msg.sender == validatorAddress);
    require(addressToWaitingImprint[_identity] == _imprintToValidate);
    require(keccak256(abi.encodePacked(addressToWaitingUri[_identity])) == keccak256(abi.encodePacked(_uriToValidate)));

    addressToUri[_identity] = addressToWaitingUri[_identity];
    addressToImprint[_identity] =  addressToWaitingImprint[_identity];

    emit URIValidate(_identity, addressToWaitingUri[_identity], addressToWaitingImprint[_identity]);

    delete addressToWaitingUri[_identity];
    delete addressToWaitingImprint[_identity];
  }

  /**
   * @notice Add a compromise date to an identity.
   * @dev Can only be called by the bouncer.
   * @param _identity address compromise
   * @param _compromiseDate compromise date
   */
  function updateCompromiseDate(address _identity, uint256 _compromiseDate) external {
    require(msg.sender == bouncerAddress);
    compromiseDate[_identity] = _compromiseDate;
    emit IdentityCompromised(_identity, _compromiseDate);
  }

  /**
   * @notice Check if an address is approved.
   * @param _identity address of the identity.
   * @return true if approved.
   */
  function addressIsApproved(address _identity) external view returns (bool _isApproved) {
      _isApproved = approvedList[_identity];
  }

  /**
   * @notice The uri of a given identity.
   * @param _identity address of the identity.
   * @return the uri.
   */
  function addressURI(address _identity) external view returns (string memory _uri) {
      _uri = addressToUri[_identity];
  }

  /**
   * @notice The imprint for a given identity.
   * @param _identity address of the identity.
   * @return true if approved.
   */
  function addressImprint(address _identity) external view returns (bytes32 _imprint) {
      _imprint = addressToImprint[_identity];
  }

  /**
   * @notice The waiting uri for a given identity.
   * @param _identity address of the identity.
   * @return the waiting Uri.
   */
  function waitingURI(address _identity) external view returns(string memory _waitingUri) {
      _waitingUri = addressToWaitingUri[_identity];
  }

  /**
   * @notice The waiting imprint for a given identity.
   * @param _identity address of the identity.
   * @return the waiting imprint.
   */
  function waitingImprint(address _identity) external view returns(bytes32 _waitingImprint) {
      _waitingImprint = addressToWaitingImprint[_identity];
  }

  /**
   * @notice The compromise date for a given identity.
   * @param _identity address of the identity.
   * @return the waiting Uri.
   */
  function compromiseIdentityDate(address _identity) external view returns(uint256 _compromiseDate) {
      _compromiseDate = compromiseDate[_identity];
  }

  /**
   * @notice The address for a given short id.
   * @param _id short id of the identity
   * @return the address of the identity.
   */
  function addressFromId(bytes3 _id) external view returns(address _identity) {
      _identity = addressListing[_id];
  }

  /**
   * @dev Change address of the bouncer.
   * @param _newBouncerAddress new address of the bouncer.
   */
  function updateBouncerAddress(address _newBouncerAddress) public onlyOwner() {
    bouncerAddress = _newBouncerAddress;
    emit SetAddress("bouncerAddress", _newBouncerAddress);
  }

  /**
   * @dev Change address of the validator.
   * @param _newValidatorAddress new address of the validator.
   */
  function updateValidatorAddress(address _newValidatorAddress) public onlyOwner() {
    validatorAddress = _newValidatorAddress;
    emit SetAddress("validatorAddress", _newValidatorAddress);
  }

  /**
   * @dev Check if an address is approved.
   * @param _identity The address to check.
   */
  modifier isApproved(address _identity) {
    require(approvedList[_identity]);
    _;
  }

   /**
    * @dev Convert a bytes in bytes3.
    * @param _inBytes input bytes.
    * @return output bytes3.
    */
  function _convertBytesToBytes3(bytes memory _inBytes) internal pure returns (bytes3 outBytes3) {
    if (_inBytes.length == 0) {
        return 0x0;
    }

    assembly {
        outBytes3 := mload(add(_inBytes, 32))
    }
  }

}
        

Contract ABI

[{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"string","name":"_waitingUri"}],"name":"waitingURI","inputs":[{"type":"address","name":"_identity"}],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"updateValidatorAddress","inputs":[{"type":"address","name":"_newValidatorAddress"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"_compromiseDate"}],"name":"compromiseIdentityDate","inputs":[{"type":"address","name":"_identity"}],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"updateBouncerAddress","inputs":[{"type":"address","name":"_newBouncerAddress"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bytes32","name":"_waitingImprint"}],"name":"waitingImprint","inputs":[{"type":"address","name":"_identity"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"validatorAddress","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"removeAddressFromApprovedList","inputs":[{"type":"address","name":"_identity"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"validateInformation","inputs":[{"type":"address","name":"_identity"},{"type":"string","name":"_uriToValidate"},{"type":"bytes32","name":"_imprintToValidate"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":"_identity"}],"name":"addressFromId","inputs":[{"type":"bytes3","name":"_id"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"string","name":"_uri"}],"name":"addressURI","inputs":[{"type":"address","name":"_identity"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bytes32","name":"_imprint"}],"name":"addressImprint","inputs":[{"type":"address","name":"_identity"}],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"updateCompromiseDate","inputs":[{"type":"address","name":"_identity"},{"type":"uint256","name":"_compromiseDate"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"owner","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"bouncerAddress","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"updateInformations","inputs":[{"type":"string","name":"_uri"},{"type":"bytes32","name":"_imprint"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bytes3","name":""}],"name":"addAddressToApprovedList","inputs":[{"type":"address","name":"_newIdentity"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bool","name":"_isApproved"}],"name":"addressIsApproved","inputs":[{"type":"address","name":"_identity"}],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"_newOwner"}],"constant":false},{"type":"constructor","stateMutability":"nonpayable","payable":false,"inputs":[{"type":"address","name":"_newBouncerAddress"},{"type":"address","name":"_newValidatorAddress"}]},{"type":"event","name":"AddressApprovedAdded","inputs":[{"type":"address","name":"_newIdentity","indexed":false},{"type":"bytes3","name":"_addressId","indexed":false}],"anonymous":false},{"type":"event","name":"AddressApprovedRemoved","inputs":[{"type":"address","name":"_newIdentity","indexed":false}],"anonymous":false},{"type":"event","name":"URIUpdated","inputs":[{"type":"address","name":"_identity","indexed":false},{"type":"string","name":"_uri","indexed":false},{"type":"bytes32","name":"_imprint","indexed":false}],"anonymous":false},{"type":"event","name":"URIValidate","inputs":[{"type":"address","name":"_identity","indexed":false},{"type":"string","name":"_uri","indexed":false},{"type":"bytes32","name":"_imprint","indexed":false}],"anonymous":false},{"type":"event","name":"IdentityCompromised","inputs":[{"type":"address","name":"_identity","indexed":false},{"type":"uint256","name":"_compromiseDate","indexed":false}],"anonymous":false},{"type":"event","name":"SetAddress","inputs":[{"type":"string","name":"_addressType","indexed":false},{"type":"address","name":"_newAddress","indexed":false}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","indexed":true},{"type":"address","name":"newOwner","indexed":true}],"anonymous":false}]
              

Contract Creation Code

0x60806040523480156200001157600080fd5b506040516040806200152c833981018060405260408110156200003357600080fd5b50805160209182015160008054600160a060020a031916331790556040805180820190915260108082527f417269616e6565204964656e7469747900000000000000000000000000000000919094019081529192909162000098916001919062000394565b506040805180820190915260068082527f41726961494400000000000000000000000000000000000000000000000000006020909201918252620000df9160029162000394565b50620000f48264010000000062000110810204565b620001088164010000000062000271810204565b505062000439565b60005460408051808201909152600681527f3031383030310000000000000000000000000000000000000000000000000000602082015290600160a060020a03163314620001f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620001bd578181015183820152602001620001a3565b50505050905090810190601f168015620001eb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600a8054600160a060020a038316600160a060020a03199091168117909155604080516020810192909252808252600e828201527f626f756e636572416464726573730000000000000000000000000000000000006060830152516000805160206200150c8339815191529181900360800190a150565b60005460408051808201909152600681527f3031383030310000000000000000000000000000000000000000000000000000602082015290600160a060020a031633146200031c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201818152835160248401528351909283926044909101919085019080838360008315620001bd578181015183820152602001620001a3565b50600b8054600160a060020a038316600160a060020a031990911681179091556040805160208101929092528082526010828201527f76616c696461746f7241646472657373000000000000000000000000000000006060830152516000805160206200150c8339815191529181900360800190a150565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620003d757805160ff191683800117855562000407565b8280016001018555821562000407579182015b8281111562000407578251825591602001919060010190620003ea565b506200041592915062000419565b5090565b6200043691905b8082111562000415576000815560010162000420565b90565b6110c380620004496000396000f3fe608060405234801561001057600080fd5b50600436106100e95760e060020a6000350463132ec4a181146100ee5780631a199a161461018957806327f51a72146101b15780632cd77b36146101e9578063374b87fd1461020f5780633fe4676e14610235578063561aec781461025957806357d4248f1461027f5780635b0d4711146102fd5780635c5ad9671461032457806367d9162b1461034a5780637458bbc1146103705780638da5cb5b1461039c5780638e6f1511146103a457806397a4d7b3146103ac57806398e14d1f1461041a578063b66ffbe71461045d578063f2fde38b14610497575b600080fd5b6101146004803603602081101561010457600080fd5b5035600160a060020a03166104bd565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561014e578181015183820152602001610136565b50505050905090810190601f16801561017b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101af6004803603602081101561019f57600080fd5b5035600160a060020a0316610568565b005b6101d7600480360360208110156101c757600080fd5b5035600160a060020a031661068f565b60408051918252519081900360200190f35b6101af600480360360208110156101ff57600080fd5b5035600160a060020a03166106aa565b6101d76004803603602081101561022557600080fd5b5035600160a060020a0316610792565b61023d6107ad565b60408051600160a060020a039092168252519081900360200190f35b6101af6004803603602081101561026f57600080fd5b5035600160a060020a03166107bc565b6101af6004803603606081101561029557600080fd5b600160a060020a038235169190810190604081016020820135602060020a8111156102bf57600080fd5b8201836020820111156102d157600080fd5b803590602001918460018302840111602060020a831117156102f257600080fd5b91935091503561082b565b61023d6004803603602081101561031357600080fd5b5035600160e860020a031916610aa9565b6101146004803603602081101561033a57600080fd5b5035600160a060020a0316610ace565b6101d76004803603602081101561036057600080fd5b5035600160a060020a0316610b42565b6101af6004803603604081101561038657600080fd5b50600160a060020a038135169060200135610b5d565b61023d610bcd565b61023d610bdc565b6101af600480360360408110156103c257600080fd5b810190602081018135602060020a8111156103dc57600080fd5b8201836020820111156103ee57600080fd5b803590602001918460018302840111602060020a8311171561040f57600080fd5b919350915035610beb565b6104406004803603602081101561043057600080fd5b5035600160a060020a0316610cad565b60408051600160e860020a03199092168252519081900360200190f35b6104836004803603602081101561047357600080fd5b5035600160a060020a0316610d94565b604080519115158252519081900360200190f35b6101af600480360360208110156104ad57600080fd5b5035600160a060020a0316610db2565b600160a060020a03811660009081526006602090815260409182902080548351601f600260001961010060018616150201909316929092049182018490048402810184019094528084526060939283018282801561055c5780601f106105315761010080835404028352916020019161055c565b820191906000526020600020905b81548152906001019060200180831161053f57829003601f168201915b50505050509050919050565b600054604080518082019091526006815260d060020a6530313830303102602082015290600160a060020a031633146106225760405160e560020a62461bcd0281526004018080602001828103825283818151815260200191508051906020019080838360005b838110156105e75781810151838201526020016105cf565b50505050905090810190601f1680156106145780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600b8054600160a060020a038316600160a060020a03199091168117909155604080516020810192909252808252601082820152608060020a6f76616c696461746f7241646472657373026060830152516000805160206110788339815191529181900360800190a150565b600160a060020a031660009081526008602052604090205490565b600054604080518082019091526006815260d060020a6530313830303102602082015290600160a060020a031633146107275760405160e560020a62461bcd0281526020600482018181528351602484015283519092839260449091019190850190808383600083156105e75781810151838201526020016105cf565b50600a8054600160a060020a038316600160a060020a03199091168117909155604080516020810192909252808252600e82820152609060020a6d626f756e63657241646472657373026060830152516000805160206110788339815191529181900360800190a150565b600160a060020a031660009081526007602052604090205490565b600b54600160a060020a031681565b600a54600160a060020a031633146107d357600080fd5b600160a060020a038116600081815260036020908152604091829020805460ff19169055815192835290517fd12e8945e9a5e91167be7fc9d4e953a018d48cba09b3838e57a7e0aff116c6989281900390910190a150565b600b54600160a060020a0316331461084257600080fd5b600160a060020a038416600090815260076020526040902054811461086657600080fd5b8282604051602001808383808284378083019250505092505050604051602081830303815290604052805190602001206006600086600160a060020a0316600160a060020a0316815260200190815260200160002060405160200180828054600181600116156101000203166002900480156109195780601f106108f7576101008083540402835291820191610919565b820191906000526020600020905b815481529060010190602001808311610905575b5050915050604051602081830303815290604052805190602001201461093e57600080fd5b600160a060020a038416600090815260066020908152604080832060049092529091208154610980929060026000196101006001841615020190911604610f20565b50600160a060020a0384166000818152600760208181526040808420546005835281852081905560068352938190209282528051948552840183905260609084018181528254600260001961010060018416150201909116049185018290527fdfa2a30946e62abf37186dc9ff5268cef32b4abf868fd965c5a55b29141f634194899492909190608083019085908015610a5b5780601f10610a3057610100808354040283529160200191610a5b565b820191906000526020600020905b815481529060010190602001808311610a3e57829003601f168201915b505094505050505060405180910390a1600160a060020a0384166000908152600660205260408120610a8c91610fa5565b505050600160a060020a0316600090815260076020526040812055565b600160e860020a031916600090815260096020526040902054600160a060020a031690565b600160a060020a03811660009081526004602090815260409182902080548351601f600260001961010060018616150201909316929092049182018490048402810184019094528084526060939283018282801561055c5780601f106105315761010080835404028352916020019161055c565b600160a060020a031660009081526005602052604090205490565b600a54600160a060020a03163314610b7457600080fd5b600160a060020a0382166000818152600860209081526040918290208490558151928352820183905280517f2e6aa017648c8f32add4cfb0bd3bfd3408c9d7013d328e084656fb1db353dbb19281900390910190a15050565b600054600160a060020a031681565b600a54600160a060020a031681565b3360008181526003602052604090205460ff16610c0757600080fd5b336000908152600660205260409020610c21908585610fec565b5033600081815260076020908152604091829020859055815183815291820185905260609082018181529082018690527f2d64b04fdb9bb57739881c5fd027d989ffd253cdc643f097258d3ed21631e132929187918791879160808201858580828437600083820152604051601f909101601f191690920182900397509095505050505050a150505050565b600a54600090600160a060020a03163314610cc757600080fd5b600160a060020a0382166000818152600360209081526040808320805460ff191660011790558051606060020a909402918401919091528051808403601401815260349093019052610d1882610f04565b600160e860020a031981166000818152600960209081526040918290208054600160a060020a031916600160a060020a038a1690811790915582519081529081019290925280519293507fa31fdf99b4c3d07705b47b3201ab3a16914403acbeac6edc05896e76449e9ee292918290030190a19150505b919050565b600160a060020a031660009081526003602052604090205460ff1690565b600054604080518082019091526006815260d060020a6530313830303102602082015290600160a060020a03163314610e2f5760405160e560020a62461bcd0281526020600482018181528351602484015283519092839260449091019190850190808383600083156105e75781810151838201526020016105cf565b50604080518082019091526006815260d160020a6518189c181819026020820152600160a060020a038216610ea85760405160e560020a62461bcd0281526020600482018181528351602484015283519092839260449091019190850190808383600083156105e75781810151838201526020016105cf565b5060008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360008054600160a060020a031916600160a060020a0392909216919091179055565b6000815160001415610f1857506000610d8f565b506020015190565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610f595780548555610f95565b82800160010185558215610f9557600052602060002091601f016020900482015b82811115610f95578254825591600101919060010190610f7a565b50610fa192915061105a565b5090565b50805460018160011615610100020316600290046000825580601f10610fcb5750610fe9565b601f016020900490600052602060002090810190610fe9919061105a565b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061102d5782800160ff19823516178555610f95565b82800160010185558215610f95579182015b82811115610f9557823582559160200191906001019061103f565b61107491905b80821115610fa15760008155600101611060565b9056feb5fa77bd6bc3d862c73fa2474bfb96a0f76d38b622c54ff2a0188be82fb96511a165627a7a72305820257fb22bfa18ed9d310b44e873c84b89c746a4c01ec201bdbd9508c8c6b00c870029b5fa77bd6bc3d862c73fa2474bfb96a0f76d38b622c54ff2a0188be82fb9651100000000000000000000000086084777828cd820f41dc1f4fdb599d2cc43debe00000000000000000000000086084777828cd820f41dc1f4fdb599d2cc43debe

Deployed ByteCode

0x608060405234801561001057600080fd5b50600436106100e95760e060020a6000350463132ec4a181146100ee5780631a199a161461018957806327f51a72146101b15780632cd77b36146101e9578063374b87fd1461020f5780633fe4676e14610235578063561aec781461025957806357d4248f1461027f5780635b0d4711146102fd5780635c5ad9671461032457806367d9162b1461034a5780637458bbc1146103705780638da5cb5b1461039c5780638e6f1511146103a457806397a4d7b3146103ac57806398e14d1f1461041a578063b66ffbe71461045d578063f2fde38b14610497575b600080fd5b6101146004803603602081101561010457600080fd5b5035600160a060020a03166104bd565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561014e578181015183820152602001610136565b50505050905090810190601f16801561017b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101af6004803603602081101561019f57600080fd5b5035600160a060020a0316610568565b005b6101d7600480360360208110156101c757600080fd5b5035600160a060020a031661068f565b60408051918252519081900360200190f35b6101af600480360360208110156101ff57600080fd5b5035600160a060020a03166106aa565b6101d76004803603602081101561022557600080fd5b5035600160a060020a0316610792565b61023d6107ad565b60408051600160a060020a039092168252519081900360200190f35b6101af6004803603602081101561026f57600080fd5b5035600160a060020a03166107bc565b6101af6004803603606081101561029557600080fd5b600160a060020a038235169190810190604081016020820135602060020a8111156102bf57600080fd5b8201836020820111156102d157600080fd5b803590602001918460018302840111602060020a831117156102f257600080fd5b91935091503561082b565b61023d6004803603602081101561031357600080fd5b5035600160e860020a031916610aa9565b6101146004803603602081101561033a57600080fd5b5035600160a060020a0316610ace565b6101d76004803603602081101561036057600080fd5b5035600160a060020a0316610b42565b6101af6004803603604081101561038657600080fd5b50600160a060020a038135169060200135610b5d565b61023d610bcd565b61023d610bdc565b6101af600480360360408110156103c257600080fd5b810190602081018135602060020a8111156103dc57600080fd5b8201836020820111156103ee57600080fd5b803590602001918460018302840111602060020a8311171561040f57600080fd5b919350915035610beb565b6104406004803603602081101561043057600080fd5b5035600160a060020a0316610cad565b60408051600160e860020a03199092168252519081900360200190f35b6104836004803603602081101561047357600080fd5b5035600160a060020a0316610d94565b604080519115158252519081900360200190f35b6101af600480360360208110156104ad57600080fd5b5035600160a060020a0316610db2565b600160a060020a03811660009081526006602090815260409182902080548351601f600260001961010060018616150201909316929092049182018490048402810184019094528084526060939283018282801561055c5780601f106105315761010080835404028352916020019161055c565b820191906000526020600020905b81548152906001019060200180831161053f57829003601f168201915b50505050509050919050565b600054604080518082019091526006815260d060020a6530313830303102602082015290600160a060020a031633146106225760405160e560020a62461bcd0281526004018080602001828103825283818151815260200191508051906020019080838360005b838110156105e75781810151838201526020016105cf565b50505050905090810190601f1680156106145780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600b8054600160a060020a038316600160a060020a03199091168117909155604080516020810192909252808252601082820152608060020a6f76616c696461746f7241646472657373026060830152516000805160206110788339815191529181900360800190a150565b600160a060020a031660009081526008602052604090205490565b600054604080518082019091526006815260d060020a6530313830303102602082015290600160a060020a031633146107275760405160e560020a62461bcd0281526020600482018181528351602484015283519092839260449091019190850190808383600083156105e75781810151838201526020016105cf565b50600a8054600160a060020a038316600160a060020a03199091168117909155604080516020810192909252808252600e82820152609060020a6d626f756e63657241646472657373026060830152516000805160206110788339815191529181900360800190a150565b600160a060020a031660009081526007602052604090205490565b600b54600160a060020a031681565b600a54600160a060020a031633146107d357600080fd5b600160a060020a038116600081815260036020908152604091829020805460ff19169055815192835290517fd12e8945e9a5e91167be7fc9d4e953a018d48cba09b3838e57a7e0aff116c6989281900390910190a150565b600b54600160a060020a0316331461084257600080fd5b600160a060020a038416600090815260076020526040902054811461086657600080fd5b8282604051602001808383808284378083019250505092505050604051602081830303815290604052805190602001206006600086600160a060020a0316600160a060020a0316815260200190815260200160002060405160200180828054600181600116156101000203166002900480156109195780601f106108f7576101008083540402835291820191610919565b820191906000526020600020905b815481529060010190602001808311610905575b5050915050604051602081830303815290604052805190602001201461093e57600080fd5b600160a060020a038416600090815260066020908152604080832060049092529091208154610980929060026000196101006001841615020190911604610f20565b50600160a060020a0384166000818152600760208181526040808420546005835281852081905560068352938190209282528051948552840183905260609084018181528254600260001961010060018416150201909116049185018290527fdfa2a30946e62abf37186dc9ff5268cef32b4abf868fd965c5a55b29141f634194899492909190608083019085908015610a5b5780601f10610a3057610100808354040283529160200191610a5b565b820191906000526020600020905b815481529060010190602001808311610a3e57829003601f168201915b505094505050505060405180910390a1600160a060020a0384166000908152600660205260408120610a8c91610fa5565b505050600160a060020a0316600090815260076020526040812055565b600160e860020a031916600090815260096020526040902054600160a060020a031690565b600160a060020a03811660009081526004602090815260409182902080548351601f600260001961010060018616150201909316929092049182018490048402810184019094528084526060939283018282801561055c5780601f106105315761010080835404028352916020019161055c565b600160a060020a031660009081526005602052604090205490565b600a54600160a060020a03163314610b7457600080fd5b600160a060020a0382166000818152600860209081526040918290208490558151928352820183905280517f2e6aa017648c8f32add4cfb0bd3bfd3408c9d7013d328e084656fb1db353dbb19281900390910190a15050565b600054600160a060020a031681565b600a54600160a060020a031681565b3360008181526003602052604090205460ff16610c0757600080fd5b336000908152600660205260409020610c21908585610fec565b5033600081815260076020908152604091829020859055815183815291820185905260609082018181529082018690527f2d64b04fdb9bb57739881c5fd027d989ffd253cdc643f097258d3ed21631e132929187918791879160808201858580828437600083820152604051601f909101601f191690920182900397509095505050505050a150505050565b600a54600090600160a060020a03163314610cc757600080fd5b600160a060020a0382166000818152600360209081526040808320805460ff191660011790558051606060020a909402918401919091528051808403601401815260349093019052610d1882610f04565b600160e860020a031981166000818152600960209081526040918290208054600160a060020a031916600160a060020a038a1690811790915582519081529081019290925280519293507fa31fdf99b4c3d07705b47b3201ab3a16914403acbeac6edc05896e76449e9ee292918290030190a19150505b919050565b600160a060020a031660009081526003602052604090205460ff1690565b600054604080518082019091526006815260d060020a6530313830303102602082015290600160a060020a03163314610e2f5760405160e560020a62461bcd0281526020600482018181528351602484015283519092839260449091019190850190808383600083156105e75781810151838201526020016105cf565b50604080518082019091526006815260d160020a6518189c181819026020820152600160a060020a038216610ea85760405160e560020a62461bcd0281526020600482018181528351602484015283519092839260449091019190850190808383600083156105e75781810151838201526020016105cf565b5060008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360008054600160a060020a031916600160a060020a0392909216919091179055565b6000815160001415610f1857506000610d8f565b506020015190565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610f595780548555610f95565b82800160010185558215610f9557600052602060002091601f016020900482015b82811115610f95578254825591600101919060010190610f7a565b50610fa192915061105a565b5090565b50805460018160011615610100020316600290046000825580601f10610fcb5750610fe9565b601f016020900490600052602060002090810190610fe9919061105a565b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061102d5782800160ff19823516178555610f95565b82800160010185558215610f95579182015b82811115610f9557823582559160200191906001019061103f565b61107491905b80821115610fa15760008155600101611060565b9056feb5fa77bd6bc3d862c73fa2474bfb96a0f76d38b622c54ff2a0188be82fb96511a165627a7a72305820257fb22bfa18ed9d310b44e873c84b89c746a4c01ec201bdbd9508c8c6b00c870029