contract OwnerSigneture
{
  address[] public owners;
  mapping (address => bytes32) public signetures;

  function OwnerSigneture(address[] _owners) public
  {
    owners = _owners;
    initSignetures();
  }

  function initSignetures() private
  {
    for (uint i = 0; i < owners.length; i++) {
      signetures[owners[i]] = bytes32(i + 1);
    }
  }

  /**
   * @dev Add owners to the list
   * @param _address Address of owner to add
   */
  function addOwner(address _address) signed public {
    owners.push(_address);
  }

  /**
   * @dev Remove owners from the list
   * @param _address Address of owner to remove
   */
  function removeOwner(address _address) signed public returns (bool) {

    uint NOT_FOUND = 1e10;
    uint index = NOT_FOUND;
    for (uint i = 0; i < owners.length; i++) {
      if (owners[i] == _address) {
        index = i;
        break;
      }
    }

    if (index == NOT_FOUND) {
      return false;
    }

    for (uint j = index; j < owners.length - 1; j++){
      owners[j] = owners[j + 1];
    }
    delete owners[owners.length - 1];
    owners.length--;

    return true;
  }

  modifier signed()
  {
    require(signetures[msg.sender] != 0x0);
    bytes32 signeture = sha256(msg.data);
    signetures[msg.sender] = signeture;

    bool success = true;
    for (uint i = 0; i < owners.length; i++) {
      if (signeture != signetures[owners[i]]) {
        success = false;
      }
    }

    if (success) {
      initSignetures();
      _;
      
    }
  }
}
/**
 * @title OwnerSigneture
 * @dev The OwnerSigneture contract has multiple owner addresses
 *      and does not execute if there is no signature of all owners.
 */
function removeOwner(address _address) signed public returns (bool) {

  uint NOT_FOUND = 1e10;
  uint index = NOT_FOUND;
  for (uint i = 0; i < owners.length; i++) {
    if (owners[i] == _address) {
      index = i;
      break;
    }
  }

  if (index == NOT_FOUND) {
    return false;
  }

  for (uint j = index; j < owners.length - 1; j++){
    owners[j] = owners[j + 1];
  }
  delete owners[owners.length - 1];
  owners.length--;

  return true;
}

/**
 * @dev Remove owners from the list
 * @param _address Address of owner to remove
 */