// SPDX-License-Identifier: MIT pragma solidity ^0.8.13; contract CapabilityRegistry { address[256] private _addrs; uint256[256] private _masks; uint256 private _count; mapping(address => uint256) private _index; function register(uint256 mask) external { uint256 idx = _index[msg.sender]; if (idx != 0) { _masks[idx - 1] = mask; } else { require(_count < 256); unchecked { uint256 i = _count++; _addrs[i] = msg.sender; _masks[i] = mask; _index[msg.sender] = i + 1; } } } function unregister() external { uint256 idx = _index[msg.sender]; require(idx != 0); unchecked { uint256 i = idx - 1; uint256 last = _count - 1; if (i != last) { address moved = _addrs[last]; _addrs[i] = moved; _masks[i] = _masks[last]; _index[moved] = i + 1; } delete _index[msg.sender]; _count = last; } } function findAgents(uint256 mask) external view returns (address[] memory result) { uint256 len = _count; result = new address[](len); uint256 count; unchecked { for (uint256 i; i < len; ++i) { if ((_masks[i] & mask) == mask) { result[count++] = _addrs[i]; } } } assembly ("memory-safe") { mstore(result, count) } } }