# File lib/tree.rb, line 398
    def find_space(options)
        known_args = [:Subnet, :IPCount, :Version]
        version = nil
        if (options.kind_of? Integer)
            bits4 = options
            bits6 = options
        elsif (options.kind_of? Hash) 
            NetAddr.validate_args(options.keys,known_args)
            if (options.has_key?(:Version))
                version = options[:Version]
                raise "IP version should be 4 or 6, but was #{version}." if (version != 4 && version !=6)
            end

            if (options.has_key?(:Subnet))
                bits4 = options[:Subnet]
                bits6 = options[:Subnet]
            elsif(options.has_key?(:IPCount))
                bits4 = NetAddr.minimum_size(options[:IPCount], :Version => 4)
                bits6 = NetAddr.minimum_size(options[:IPCount], :Version => 6)
            else
                raise "Missing arguments: :Subnet/:IPCount"
            end
        else
            raise "Integer or Hash expected, but #{options.class} provided."
        end

        list = []
        if (!version || version == 4)
            dump_children(@v4_root).each do |entry|
                cidr = entry[:CIDR]
                if ( (cidr.tag[:Subnets].length == 0) && (cidr.bits <= bits4) )
                    list.push(cidr)
                end
            end
        end

        if (!version || version == 6)
            dump_children(@v6_root).each do |entry|
                cidr = entry[:CIDR]
                if ( (cidr.tag[:Subnets].length == 0) && (cidr.bits <= bits6) )
                    list.push(cidr)
                end
            end
        end

        new_list = []
        list.each {|x| new_list.push( NetAddr.cidr_build(x.version, x.to_i(:network), x.to_i(:netmask)) )}

        return(new_list)
    end