#!/usr/bin/perl

use strict;
use warnings;
use Fcntl qw(SEEK_SET O_RDONLY);
use Net::IP;
use File::Basename;
use Text::CSV; 
use GDBM_File;
     
# local whois replacement (no network calls) using a number of different whois db dumps, geoip dbs, and Regional Internet Registry Delegation files.

#my $resources_dir = '/home/superkuh/.config/connmap/resources/RIR-lists';
my $resources_dir = 'resources';

#### Required whois database dumps, put extract and put them in $resources_dir
# RIPE NCC https://ftp.ripe.net/ripe/dbase/split/ripe.db.aut-num.gz    (unrelated note for superkuh: ftp://ftp.ripe.net/ripe/asnames/asn.txt)
# ARIN https://ftp.arin.net/pub/rr/arin.db.gz
# APNIC https://ftp.apnic.net/apnic/whois/apnic.db.aut-num.gz
# LACNIC https://ftp.lacnic.net/lacnic/dbase/lacnic.db.gz
# AFRINIC https://ftp.afrinic.net/dbase/afrinic.db.gz

## RIR Delegation files
# https://www-public.telecom-sudparis.eu/~maigron/rir-stats/
# https://ftp.afrinic.net/pub/stats/afrinic/delegated-afrinic-extended-latest
# https://ftp.apnic.net/stats/apnic/delegated-apnic-extended-latest
# https://ftp.arin.net/pub/stats/arin/delegated-arin-extended-latest
# https://ftp.lacnic.net/pub/stats/lacnic/delegated-lacnic-extended-latest
# https://ftp.ripe.net/pub/stats/ripencc/delegated-ripencc-extended-latest
#
# Download these to $resources_dir. Then run the script: http://superkuh.com/sort_rir_ipv4.pl
# perl sort_rir_ipv4.pl /home/superkuh/.config/connmap/resources/RIR-lists/delegated-*-extended-latest
# 
# This makes a bunch of sorted files which have to be comined with,
# cat sorted_delegated-* sorted_all-rir-delegations.txt
#
# Then just download http://superkuh.com/all-rir-delegations.txt.zip and put it in $resources_dir.
# Wow, this is getting stupidly tedious. I should script it all in this file itself.

#### REQUIRED .db .csv and .txt database files. #### 
## Download URLs provided for each.

# Get it at caida or an old one from me: http://superkuh.com/CAIDA-ASN-to-ORG_20250701.as-org2info.txt.gz
# or sign up for free and access latest from: https://catalog.caida.org/dataset/as_organizations/access
my $raw_caida_file = "$resources_dir/20250701.as-org2info.txt";

# http://superkuh.com/caida-to-asn-orgname-db.pl
# via cat CAIDA-ASN-to-ORG_20250701.as-org2info.txt | perl caida-to-asn-orgname-db.pl -> caida_asn_to_name.dbm
# or just download the one I made: http://superkuh.com/caida_asn_to_name.dbm
my $db_file = "$resources_dir/caida_asn_to_name.dbm";

# Get it at geolite or an old one from me: http://superkuh.com/GeoLite2-ASN-CSV_20250722_csvformat.zip
# or sign up for free and get it from: https://dev.maxmind.com/geoip/docs/databases/asn/
my $geolite_file = "$resources_dir/GeoLite2-ASN-Blocks-IPv4.csv";

# get it from https://github.com/h2337/connmap/blob/master/connmap/resources/ipv4.csv.zip
my $ipv4_db_path = "$resources_dir/ipv4.csv";

#### END REQUIRED #### 



#
# Main function to find IPv4 info and all associated ASN records.
#
# It works by first doing a fast binary search on a pre-sorted IPv4-only file,
# then doing a linear scan on the original full RIR file to find matching ASNs.
#
# @param $ip_to_check (string)      - The IPv4 address to look up.
# @return (hashref|undef) - A hash reference with the IP info and an array of associated ASN records,
#                           or undef if the IP is not found.
#
sub find_ipv4_info_with_asn {
    my ($sorted_ipv4_file, $ip_to_check) = @_;

    # --- Part 1: Binary search for the IPv4 record in the sorted file ---

    my $input_ip = Net::IP->new($ip_to_check);
    unless ($input_ip && $input_ip->version() == 4) {
        warn "Invalid IPv4 address: $ip_to_check\n";
        return;
    }
    my $input_ip_num = $input_ip->intip();

    my $fh_sorted;
    unless (open($fh_sorted, '<', $sorted_ipv4_file)) {
        warn "Could not open sorted IPv4 file '$sorted_ipv4_file': $!\n";
        return;
    }

    my $file_size = -s $sorted_ipv4_file;
    my ($low, $high) = (0, $file_size);
    my $found_ipv4_line;

    while ($low <= $high) {
        my $mid = int(($low + $high) / 2);
        seek($fh_sorted, $mid, SEEK_SET);
        <$fh_sorted> if $mid > 0; # Discard partial line

        my $line = <$fh_sorted>;
        next unless defined $line && $line =~ /\S/;

        my @fields = split /\|/, $line;
        next unless (@fields > 4 && $fields[2] eq 'ipv4');

        my $start_ip = Net::IP->new($fields[3]);
        next unless ($start_ip && $start_ip->version() == 4);
        
        my $start_ip_num = $start_ip->intip();
        my $end_ip_num   = $start_ip_num + $fields[4] - 1;

        if ($input_ip_num >= $start_ip_num && $input_ip_num <= $end_ip_num) {
            $found_ipv4_line = $line;
            last; # Found our line, exit the loop
        } elsif ($input_ip_num < $start_ip_num) {
            $high = $mid - 1;
        } else {
            $low = $mid + 1;
        }
    }
    close $fh_sorted;

    # If no IPv4 record was found after the search, we can't proceed.
    return unless defined $found_ipv4_line;

    # --- Part 2: Parse the IPv4 line and prepare for ASN lookup ---

    my @ipv4_fields = split /\|/, $found_ipv4_line;
    chomp(my $opaque_id_to_find = $ipv4_fields[7]);

    my $result = {
        registry  => $ipv4_fields[0],
        cc        => $ipv4_fields[1],
        type      => $ipv4_fields[2],
        start_ip  => $ipv4_fields[3],
        value     => $ipv4_fields[4],
        date      => $ipv4_fields[5],
        status    => $ipv4_fields[6],
        opaque_id => $opaque_id_to_find,
        as_numbers => [], # Initialize to an empty array reference
    };

    # --- Part 3: Linear scan of the original file for matching ASNs ---

    # Convention: Derive the original filename by removing the "sorted_" prefix.
    my ($sorted_filename, $dirs) = fileparse($sorted_ipv4_file);
    unless ($sorted_filename =~ s/^sorted_//) {
        warn "Warning: Could not derive original filename from '$sorted_ipv4_file'. Expected 'sorted_' prefix. ASN lookup will be skipped.\n";
        return $result; # Return IPv4 data without ASNs
    }
    my $original_rir_file = $dirs . $sorted_filename;

    unless (-f $original_rir_file) {
        warn "Warning: Original RIR file '$original_rir_file' not found. ASN lookup will be skipped.\n";
        return $result;
    }


    my $fh_orig;
	print "this: $original_rir_file\n";
    unless (open($fh_orig, '<', $original_rir_file)) {
        warn "Warning: Could not open original RIR file '$original_rir_file': $!. ASN lookup will be skipped.\n";
        return $result;
    }

    while (my $line = <$fh_orig>) {
        next if $line =~ /^\s*(#|$)/;
        my @fields = split /\|/, $line;

        # Look for 'asn' records with a matching opaque-id
        if (defined $fields[7] && $fields[2] eq 'asn') {
            chomp(my $current_opaque_id = $fields[7]);
            if ($current_opaque_id eq $opaque_id_to_find) {
                # Found a matching ASN record. Parse it and add it to our results.
                my $asn_info = {
                    registry  => $fields[0],
                    cc        => $fields[1],
                    type      => $fields[2],
                    asn       => $fields[3], # For 'asn' type, 'start' is the ASN
                    count     => $fields[4], # and 'value' is the count
                    date      => $fields[5],
                    status    => $fields[6],
                };
                push @{$result->{as_numbers}}, $asn_info;
            }
        }
    }
    close $fh_orig;

    return $result;
}


# 43349de4-7c3b-42f2-8513-96a65ff5d441
# 15cb3426-edd0-2278-905d-64cfbb4d7fb2

sub get_rir_for_ipv4 {
    my ($ipv4_address, $data_ref) = @_;

    # Use a regular expression to extract the first octet (the first number).
    # This also serves as a basic validation of the IP format.
    unless ($ipv4_address =~ /^(\d{1,3})\.\d{1,3}\.\d{1,3}\.\d{1,3}$/) {
        warn "Warning: Invalid IPv4 address format for '$ipv4_address'.";
        return; # Return undef for invalid format
    }
    
    my $first_octet = $1;

    # Final validation: the first octet must be between 0 and 255.
    if ($first_octet > 255) {
        warn "Warning: Invalid octet '$first_octet' in IP address.";
        return; # Return undef for invalid octet
    }

    # Look up the first octet in our data hash.
    # The keys in the hash are the integer values of the first octet.
    if (exists $data_ref->{$first_octet}) {
        return $data_ref->{$first_octet};
    }

    return; # Return undef if not found
}
sub load_rir_data {
    my %data;
    
    # Use Text::CSV for safe and correct parsing, handling potential quoted fields.
    my $csv = Text::CSV->new({ auto_diag => 1, binary => 1 })
        or die "Cannot create Text::CSV object: " . Text::CSV->error_diag();
   
    # Read the header line from the DATA handle to skip it.
    my $header = $csv->getline(\*DATA);

    while (my $row = $csv->getline(\*DATA)) {
        my $prefix      = $row->[0]; # e.g., "003/8"
        my $designation = $row->[1]; # e.g., "Administered by ARIN"

        # Extract the number from the "XXX/8" prefix format.
        my ($octet) = ($prefix =~ /^(\d+)\/8$/);
        
        # Skip any lines that don't match our expected prefix format.
        next unless defined $octet;

        # --- Clean up the designation string for consistency ---
        # If the designation contains a major RIR name, extract just that name.
        if ($designation =~ /(ARIN|APNIC|RIPE NCC|LACNIC|AFRINIC)/) {
            $designation = $1;
        }

        # Store the cleaned-up data in our hash, using the integer value as the key.
        $data{int($octet)} = $designation;
    }
    # Return a reference to the completed hash.
    return \%data;
}

sub asn_to_orgname {
	my $asn_to_lookup = shift;

	# Basic validation to ensure the argument is a number
	if ($asn_to_lookup !~ /^\d+$/) {
	    die "Error: ASN must be a positive integer. You provided '$asn_to_lookup'.\n";
	}

	# Check if the database file exists and is readable before we try to open it.
	unless (-f $db_file && -r $db_file) {
	    die "Error: Database file '$db_file' not found or is not readable.\n"
	      . "Please run the parser script first to create it.\n"
	 	. "cat CAIDA-ASN-to-ORG_20250701.as-org2info.txt | perl caida-to-asn-orgname-db.pl -> caida_asn_to_name.dbm\n";
	}

	# This hash will be tied to the on-disk DBM file.
	my %asn_db;

	# Tie the hash to the GDBM file in read-only mode.
	# The 'or die' part provides a helpful error message if the tie fails.
	tie(%asn_db, 'GDBM_File', $db_file, O_RDONLY, 0)
	    or die "Error: Could not open DBM file '$db_file': $!\n";

	# --- Perform Lookup and Print Result ---

	# Check if the key (the ASN) exists in the database.
	if (exists $asn_db{$asn_to_lookup}) {
	    # If it exists, retrieve the value (the organization name).
	    my $org_name = $asn_db{$asn_to_lookup};
	    #print "ASN:  $asn_to_lookup\n";
	    #print "Name: $org_name\n";
	   #print "$org_name";
	    return $org_name;
	}
	else {
	    # If it doesn't exist, don't inform the user.
	    #print "ASN $asn_to_lookup not found in the database.\n";
	    return;
	}

	# Untie the hash to close the database file and release any locks.
	untie %asn_db;
}

sub find_ip_in_geolite_asn {
    my ($geolite_csv_file, $ip_to_check) = @_;
    my $input_ip = Net::IP->new($ip_to_check);
    unless ($input_ip && $input_ip->version() == 4) {
        warn "Invalid IPv4 address provided: $ip_to_check\n";
        return;
    }
    my $input_ip_num = $input_ip->intip();
    my $fh;
    unless (open($fh, '<', $geolite_csv_file)) {
        warn "Could not open GeoLite2 ASN file '$geolite_csv_file': $!\n";
        return;
    }
    my $file_size = -s $geolite_csv_file;
    my ($low, $high) = (0, $file_size);
    my $found_line;
    my $header = <$fh>;
    $low = tell($fh);

    while ($low <= $high) {
        my $mid = int(($low + $high) / 2);
        seek($fh, $mid, SEEK_SET);
        <$fh> if $mid > 0;
        my $line = <$fh>;
        next unless defined $line && $line =~ /\S/;
        my ($network_cidr) = split /,/, $line, 2;
        my $network_ip = Net::IP->new($network_cidr);
        unless ($network_ip) {
            warn "Warning: Could not parse CIDR '$network_cidr' on line: $line";
            $high = $mid - 1;
            next;
        }
        my $start_ip_num = $network_ip->intip();
        my $end_ip_num   = $start_ip_num + ($network_ip->size() - 1);
        if ($input_ip_num >= $start_ip_num && $input_ip_num <= $end_ip_num) {
            $found_line = $line;
            last;
        } elsif ($input_ip_num < $start_ip_num) {
            $high = $mid - 1;
        } else {
            $low = $mid + 1;
        }
    }
    close $fh;
    return unless defined $found_line;
    my @fields = split /,/, $found_line;
    chomp @fields;
    return {
        network         => $fields[0],
        asn             => $fields[1],
        organization    => $fields[2] || "N/A",
    };
}

sub find_location_on_disk {
    my ($fh, $ip_decimal, $file_size) = @_;
    my $low_pos = 0;
    my $high_pos = $file_size;
    for (my $i = 0; $i < 30; $i++) {
        last if ($high_pos - $low_pos) < 2;
        my $mid_pos = int($low_pos + ($high_pos - $low_pos) / 2);
        seek($fh, $mid_pos, 0);
        <$fh>;
        my $line = <$fh>;
        return undef unless defined $line;
        chomp $line;
        my ($start, $end, $lat, $lon) = split ',', $line;
        next unless defined $start and defined $end;
        if ($ip_decimal >= $start && $ip_decimal <= $end) {
            return { lat => $lat, lon => $lon };
        }
        if ($ip_decimal < $start) {
            $high_pos = $mid_pos;
        } else {
            $low_pos = $mid_pos;
        }
    }
    return undef;
}

sub ip_to_decimal {
    my ($ip_str) = @_;
    my @parts = split /\./, $ip_str;
    return 0 unless @parts == 4;
    return ($parts[0] << 24) + ($parts[1] << 16) + ($parts[2] << 8) + $parts[3];
}

### Example Usage

# --- Start of Example ---




#if (@ARGV == 2) {
#	#die "Usage: $0 /path/to/sorted_rir_file.txt <IPv4_ADDRESS_TO_LOOKUP>\n";
#	$sorted_file = $ARGV[0];
#	$ip_to_lookup = $ARGV[1];
#} else {
#	$sorted_file = '/home/superkuh/.config/connmap/resources/RIR-lists/sorted_delegated-arin-extended-latest';
#	$ip_to_lookup = '66.41.189.199'; # An example IP address
#}


my $sorted_file;

# 1. Load the RIR allocation data from the __DATA__ block at the end of the script.
my $ip_to_lookup = $ARGV[0];
my $rir_data = load_rir_data();
my $rir_name = get_rir_for_ipv4($ip_to_lookup, $rir_data);

# ARIN|APNIC|RIPE NCC|LACNIC|AFRINIC
#if ($rir_name eq "ARIN") {
#	print "ARIN\n";
#	$sorted_file = '/home/superkuh/.config/connmap/resources/RIR-lists/sorted_delegated-arin-extended-latest';
#} elsif ($rir_name eq "APNIC") {
#	print "APNIC\n";
#	$sorted_file = '/home/superkuh/.config/connmap/resources/RIR-lists/sorted_delegated-apnic-extended-latest';
#} elsif ($rir_name eq "RIPE NCC") {
#	print "RIPE NCC\n";
#	$sorted_file = '/home/superkuh/.config/connmap/resources/RIR-lists/sorted_delegated-ripencc-extended-latest';
#} elsif ($rir_name eq "LACNIC") {
#	print "LACNIC\n";
#	$sorted_file = '/home/superkuh/.config/connmap/resources/RIR-lists/sorted_delegated-lacnic-extended-latest';
#} elsif ($rir_name eq "AFRINIC") {
#	print "AFRINIC\n";
#	$sorted_file = '/home/superkuh/.config/connmap/resources/RIR-lists/sorted_delegated-afrinic-extended-latest';
#} else {
#	print "Unknown: defaulting to ARIN\n";
#	$sorted_file = '/home/superkuh/.config/connmap/resources/RIR-lists/sorted_delegated-arin-extended-latest';
#}

$sorted_file = "$resources_dir/sorted_all-rir-delegations.txt";


unless (-e $sorted_file) {
    die "Error: The specified sorted file does not exist at '$sorted_file'\n";
}

my $details = find_ipv4_info_with_asn($sorted_file, $ip_to_lookup);

if ($details) {
    print "--- Found IP Information for: $ip_to_lookup ---\n";
    printf "Registry:     %s\n", $details->{registry};
    printf "Country Code: %s\n", $details->{cc};
    printf "Start IP:     %s\n", $details->{start_ip};
    printf "Range Size:   %s\n", $details->{value};
    printf "Status:       %s\n", $details->{status};
    printf "Opaque ID:    %s\n", $details->{opaque_id};
    print "\n";

    if (@{$details->{as_numbers}}) {
        print "--- Associated ASN Records ---\n";
        my $first_asn_record = $details->{as_numbers}->[0];
	# Fast lookup for old ASN before the IANA -> 5 RIR split, try it first.
        my $orgnameinfo = asn_to_orgname($first_asn_record->{asn});
	my $grepped_as_org2info_line;
	if ($orgnameinfo) {
		print "$orgnameinfo\n";
	} else {
		# slower/hacky lookup using raw caida as-org2info files and grep for @aut-# designation associated with the ASN
		#my $grepstring = "\@aut-" . $first_asn_record->{asn};
   		my $grep_pattern = "'^\@aut-" . $first_asn_record->{asn} . "'";
		$grepped_as_org2info_line = `grep $grep_pattern $raw_caida_file`;
       		if ($grepped_as_org2info_line =~ /^(?:[^|]+\|){2}(.*)/) {
            		$grepped_as_org2info_line = $1; # Assign the captured part back to the variable.
			print "$grepped_as_org2info_line\n";
        	} else {
			#print "Failed weird apnic lookup try.\n";
		}
	}

	# slower/hacky lookup using raw caida as-org2info files and grep for @aut-# designation associated with the ASN
	# but handle when the asn isn't the 'named' one and needs a second asn looked up for org info
	unless ($grepped_as_org2info_line) {
		my $asnstring = $first_asn_record->{asn};
   		my $grep_pattern = "^$asnstring|";
		$grepped_as_org2info_line = `grep \"$grep_pattern\" $raw_caida_file`;
		#print "$grepped_as_org2info_line";

		if ($grepped_as_org2info_line =~ /(\@aut-.+?)\|/) {
			$grepped_as_org2info_line = $1; 
			#print "2 info: $grepped_as_org2info_line\n";
			$grepped_as_org2info_line = `grep \"$grepped_as_org2info_line\" $raw_caida_file`;
       			if ($grepped_as_org2info_line =~ /^(?:[^|]+\|){2}(.*)/) {
            			$grepped_as_org2info_line = $1; # Assign the captured part back to the variable.
				print "$grepped_as_org2info_line\n";
        		}
		}
	}


        foreach my $asn (@{$details->{as_numbers}}) {
            printf "ASN: %s, Count: %s, Status: %s, Date: %s\n",
                   $asn->{asn}, $asn->{count}, $asn->{status}, $asn->{date};
	   # my $orgnameinfo = asn_to_orgname($asn->{asn});
	   # print "$orgnameinfo\n" if $orgnameinfo;
        }
	print "$orgnameinfo\n" if $orgnameinfo;
    } else {
        print "--- No associated ASN records found for this Opaque ID ---\n";
    }

} else {
    print "No information found for IP: $ip_to_lookup in '$sorted_file'\n";
}

# do it this way too.
open my $db_fh, '<', $ipv4_db_path or do {
	warn "Could not open IP database '$ipv4_db_path': $!";
	return;
};
my $db_size = -s $db_fh;
my $ip_decimal = ip_to_decimal($ip_to_lookup);
my $location = find_location_on_disk($db_fh, $ip_decimal, $db_size);
print $location->{lat} . " , " . $location->{lon};
close $db_fh;
my $asn_hash = find_ip_in_geolite_asn($geolite_file, $ip_to_lookup);
if ($asn_hash) {
	print "$asn_hash->{asn} - $asn_hash->{organization}\n";
}

# get every paragraph that has the asn number from the RIR db dumps and spam it.
#`awk 'BEGIN{RS=""} /46652/' /home/superkuh/.config/connmap/resources/RIR-lists/*.db.aut-num`;
my $whoisdbdumpfilepath = "$resources_dir/" . $details->{registry} . ".db.aut-num";
$whoisdbdumpfilepath =~ s/ripencc/ripe/g;
#print "$whoisdbdumpfilepath";
my $first_asn_record = $details->{as_numbers}->[0];
my $asntowhoisdumplook = $first_asn_record->{asn};
#print "$asntowhoisdumplook";
#my $whoisdump = `awk 'BEGIN{RS=""} /AS$asntowhoisdumplook/' $whoisdbdumpfilepath`;
#awk 'BEGIN{RS=""} /AS31251/' /home/superkuh/.config/connmap/resources/RIR-lists/ripe.db.aut-num
#my $whoisdump = `awk 'BEGIN{RS=""} /AS$asntowhoisdumplook/ && !/export: +to AS$asntowhoisdumplook/' $whoisdbdumpfilepath`;
# awk 'BEGIN{RS=""} /AS31251/ && !/export: +to AS31251/' /home/superkuh/.config/connmap/resources/RIR-lists/ripe.db.aut-num
# awk 'BEGIN{RS=""} /264968/ && !/export: +to AS264968/' /home/superkuh/.config/connmap/resources/RIR-lists/lacnic.db.aut-num
#my $whoisdump = `awk 'BEGIN{RS=""} (/AS$asntowhoisdumplook/ || /$asntowhoisdumplook/) && !/export: +to AS$asntowhoisdumplook/' $whoisdbdumpfilepath`;
my $whoisdump = `awk 'BEGIN{RS=""} (/AS$asntowhoisdumplook/ || /$asntowhoisdumplook/) && !/\b(mp-)?export:.*to AS$asntowhoisdumplook/' $whoisdbdumpfilepath` if $asntowhoisdumplook;
print "\n$whoisdump" if $asntowhoisdumplook;

# --- End of Example ---

# edit, apparently this file is years out of data and not actually reflecting ipv4 space anymore. I wish they would've said that on the page.
# UPDATE the __DATA__ block at the bottom by copying a new set from https://www.iana.org/assignments/ipv4-address-space/ipv4-address-space.csv
# The __DATA__ section contains the embedded CSV file from 2025-07-23
# The script can read this directly via the special 'DATA' filehandle.
__DATA__
Prefix,Designation,Date,WHOIS,RDAP,Status [1],Note
000/8,IANA - Local Identification,1981-09,,,RESERVED,[2][3]
001/8,APNIC,2010-01,whois.apnic.net,https://rdap.apnic.net/,ALLOCATED,
002/8,RIPE NCC,2009-09,whois.ripe.net,https://rdap.db.ripe.net/,ALLOCATED,
003/8,Administered by ARIN,1994-05,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
004/8,Administered by ARIN,1992-12,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
005/8,RIPE NCC,2010-11,whois.ripe.net,https://rdap.db.ripe.net/,ALLOCATED,
006/8,Army Information Systems Center,1994-02,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
007/8,Administered by ARIN,1995-04,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
008/8,Administered by ARIN,1992-12,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
009/8,Administered by ARIN,1992-08,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
010/8,IANA - Private Use,1995-06,,,RESERVED,[4]
011/8,DoD Intel Information Systems,1993-05,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
012/8,AT&T Bell Laboratories,1995-06,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
013/8,Administered by ARIN,1991-09,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
014/8,APNIC,2010-04,whois.apnic.net,https://rdap.apnic.net/,ALLOCATED,[5]
015/8,Administered by ARIN,1994-07,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
016/8,Administered by ARIN,1994-11,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
017/8,Apple Computer Inc.,1992-07,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
018/8,Administered by ARIN,1994-01,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
019/8,Ford Motor Company,1995-05,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
020/8,Administered by ARIN,1994-10,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
021/8,DDN-RVN,1991-07,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
022/8,Defense Information Systems Agency,1993-05,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
023/8,ARIN,2010-11,whois.arin.net,https://rdap.arin.net/registry,ALLOCATED,
024/8,ARIN,2001-05,whois.arin.net,https://rdap.arin.net/registry,ALLOCATED,
025/8,Administered by RIPE NCC,1995-01,whois.ripe.net,https://rdap.db.ripe.net/,LEGACY,
026/8,Defense Information Systems Agency,1995-05,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
027/8,APNIC,2010-01,whois.apnic.net,https://rdap.apnic.net/,ALLOCATED,
028/8,DSI-North,1992-07,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
029/8,Defense Information Systems Agency,1991-07,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
030/8,Defense Information Systems Agency,1991-07,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
031/8,RIPE NCC,2010-05,whois.ripe.net,https://rdap.db.ripe.net/,ALLOCATED,
032/8,Administered by ARIN,1994-06,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
033/8,DLA Systems Automation Center,1991-01,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
034/8,Administered by ARIN,1993-03,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
035/8,Administered by ARIN,1994-04,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
036/8,APNIC,2010-10,whois.apnic.net,https://rdap.apnic.net/,ALLOCATED,
037/8,RIPE NCC,2010-11,whois.ripe.net,https://rdap.db.ripe.net/,ALLOCATED,
038/8,"PSINet, Inc.",1994-09,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
039/8,APNIC,2011-01,whois.apnic.net,https://rdap.apnic.net/,ALLOCATED,
040/8,Administered by ARIN,1994-06,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
041/8,AFRINIC,2005-04,whois.afrinic.net,https://rdap.afrinic.net/rdap/,ALLOCATED,
042/8,APNIC,2010-10,whois.apnic.net,https://rdap.apnic.net/,ALLOCATED,
043/8,Administered by APNIC,1991-01,whois.apnic.net,https://rdap.apnic.net/,LEGACY,
044/8,Administered by ARIN,1992-07,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
045/8,Administered by ARIN,1995-01,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
046/8,RIPE NCC,2009-09,whois.ripe.net,https://rdap.db.ripe.net/,ALLOCATED,
047/8,Administered by ARIN,1991-01,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
048/8,Administered by ARIN,1995-05,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
049/8,APNIC,2010-08,whois.apnic.net,https://rdap.apnic.net/,ALLOCATED,
050/8,ARIN,2010-02,whois.arin.net,https://rdap.arin.net/registry,ALLOCATED,
051/8,Administered by RIPE NCC,1994-08,whois.ripe.net,https://rdap.db.ripe.net/,LEGACY,
052/8,Administered by ARIN,1991-12,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
053/8,Daimler AG,1993-10,whois.ripe.net,https://rdap.db.ripe.net/,LEGACY,
054/8,Administered by ARIN,1992-03,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
055/8,DoD Network Information Center,1995-04,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
056/8,Administered by ARIN,1994-06,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
057/8,Administered by RIPE NCC,1995-05,whois.ripe.net,https://rdap.db.ripe.net/,LEGACY,
058/8,APNIC,2004-04,whois.apnic.net,https://rdap.apnic.net/,ALLOCATED,
059/8,APNIC,2004-04,whois.apnic.net,https://rdap.apnic.net/,ALLOCATED,
060/8,APNIC,2003-04,whois.apnic.net,https://rdap.apnic.net/,ALLOCATED,
061/8,APNIC,1997-04,whois.apnic.net,https://rdap.apnic.net/,ALLOCATED,
062/8,RIPE NCC,1997-04,whois.ripe.net,https://rdap.db.ripe.net/,ALLOCATED,
063/8,ARIN,1997-04,whois.arin.net,https://rdap.arin.net/registry,ALLOCATED,
064/8,ARIN,1999-07,whois.arin.net,https://rdap.arin.net/registry,ALLOCATED,
065/8,ARIN,2000-07,whois.arin.net,https://rdap.arin.net/registry,ALLOCATED,
066/8,ARIN,2000-07,whois.arin.net,https://rdap.arin.net/registry,ALLOCATED,
067/8,ARIN,2001-05,whois.arin.net,https://rdap.arin.net/registry,ALLOCATED,
068/8,ARIN,2001-06,whois.arin.net,https://rdap.arin.net/registry,ALLOCATED,
069/8,ARIN,2002-08,whois.arin.net,https://rdap.arin.net/registry,ALLOCATED,
070/8,ARIN,2004-01,whois.arin.net,https://rdap.arin.net/registry,ALLOCATED,
071/8,ARIN,2004-08,whois.arin.net,https://rdap.arin.net/registry,ALLOCATED,
072/8,ARIN,2004-08,whois.arin.net,https://rdap.arin.net/registry,ALLOCATED,
073/8,ARIN,2005-03,whois.arin.net,https://rdap.arin.net/registry,ALLOCATED,
074/8,ARIN,2005-06,whois.arin.net,https://rdap.arin.net/registry,ALLOCATED,
075/8,ARIN,2005-06,whois.arin.net,https://rdap.arin.net/registry,ALLOCATED,
076/8,ARIN,2005-06,whois.arin.net,https://rdap.arin.net/registry,ALLOCATED,
077/8,RIPE NCC,2006-08,whois.ripe.net,https://rdap.db.ripe.net/,ALLOCATED,
078/8,RIPE NCC,2006-08,whois.ripe.net,https://rdap.db.ripe.net/,ALLOCATED,
079/8,RIPE NCC,2006-08,whois.ripe.net,https://rdap.db.ripe.net/,ALLOCATED,
080/8,RIPE NCC,2001-04,whois.ripe.net,https://rdap.db.ripe.net/,ALLOCATED,
081/8,RIPE NCC,2001-04,whois.ripe.net,https://rdap.db.ripe.net/,ALLOCATED,
082/8,RIPE NCC,2002-11,whois.ripe.net,https://rdap.db.ripe.net/,ALLOCATED,
083/8,RIPE NCC,2003-11,whois.ripe.net,https://rdap.db.ripe.net/,ALLOCATED,
084/8,RIPE NCC,2003-11,whois.ripe.net,https://rdap.db.ripe.net/,ALLOCATED,
085/8,RIPE NCC,2004-04,whois.ripe.net,https://rdap.db.ripe.net/,ALLOCATED,
086/8,RIPE NCC,2004-04,whois.ripe.net,https://rdap.db.ripe.net/,ALLOCATED,
087/8,RIPE NCC,2004-04,whois.ripe.net,https://rdap.db.ripe.net/,ALLOCATED,
088/8,RIPE NCC,2004-04,whois.ripe.net,https://rdap.db.ripe.net/,ALLOCATED,
089/8,RIPE NCC,2005-06,whois.ripe.net,https://rdap.db.ripe.net/,ALLOCATED,
090/8,RIPE NCC,2005-06,whois.ripe.net,https://rdap.db.ripe.net/,ALLOCATED,
091/8,RIPE NCC,2005-06,whois.ripe.net,https://rdap.db.ripe.net/,ALLOCATED,
092/8,RIPE NCC,2007-03,whois.ripe.net,https://rdap.db.ripe.net/,ALLOCATED,
093/8,RIPE NCC,2007-03,whois.ripe.net,https://rdap.db.ripe.net/,ALLOCATED,
094/8,RIPE NCC,2007-07,whois.ripe.net,https://rdap.db.ripe.net/,ALLOCATED,
095/8,RIPE NCC,2007-07,whois.ripe.net,https://rdap.db.ripe.net/,ALLOCATED,
096/8,ARIN,2006-10,whois.arin.net,https://rdap.arin.net/registry,ALLOCATED,
097/8,ARIN,2006-10,whois.arin.net,https://rdap.arin.net/registry,ALLOCATED,
098/8,ARIN,2006-10,whois.arin.net,https://rdap.arin.net/registry,ALLOCATED,
099/8,ARIN,2006-10,whois.arin.net,https://rdap.arin.net/registry,ALLOCATED,
100/8,ARIN,2010-11,whois.arin.net,https://rdap.arin.net/registry,ALLOCATED,[6]
101/8,APNIC,2010-08,whois.apnic.net,https://rdap.apnic.net/,ALLOCATED,
102/8,AFRINIC,2011-02,whois.afrinic.net,https://rdap.afrinic.net/rdap/,ALLOCATED,
103/8,APNIC,2011-02,whois.apnic.net,https://rdap.apnic.net/,ALLOCATED,
104/8,ARIN,2011-02,whois.arin.net,https://rdap.arin.net/registry,ALLOCATED,
105/8,AFRINIC,2010-11,whois.afrinic.net,https://rdap.afrinic.net/rdap/,ALLOCATED,
106/8,APNIC,2011-01,whois.apnic.net,https://rdap.apnic.net/,ALLOCATED,
107/8,ARIN,2010-02,whois.arin.net,https://rdap.arin.net/registry,ALLOCATED,
108/8,ARIN,2008-12,whois.arin.net,https://rdap.arin.net/registry,ALLOCATED,
109/8,RIPE NCC,2009-01,whois.ripe.net,https://rdap.db.ripe.net/,ALLOCATED,
110/8,APNIC,2008-11,whois.apnic.net,https://rdap.apnic.net/,ALLOCATED,
111/8,APNIC,2008-11,whois.apnic.net,https://rdap.apnic.net/,ALLOCATED,
112/8,APNIC,2008-05,whois.apnic.net,https://rdap.apnic.net/,ALLOCATED,
113/8,APNIC,2008-05,whois.apnic.net,https://rdap.apnic.net/,ALLOCATED,
114/8,APNIC,2007-10,whois.apnic.net,https://rdap.apnic.net/,ALLOCATED,
115/8,APNIC,2007-10,whois.apnic.net,https://rdap.apnic.net/,ALLOCATED,
116/8,APNIC,2007-01,whois.apnic.net,https://rdap.apnic.net/,ALLOCATED,
117/8,APNIC,2007-01,whois.apnic.net,https://rdap.apnic.net/,ALLOCATED,
118/8,APNIC,2007-01,whois.apnic.net,https://rdap.apnic.net/,ALLOCATED,
119/8,APNIC,2007-01,whois.apnic.net,https://rdap.apnic.net/,ALLOCATED,
120/8,APNIC,2007-01,whois.apnic.net,https://rdap.apnic.net/,ALLOCATED,
121/8,APNIC,2006-01,whois.apnic.net,https://rdap.apnic.net/,ALLOCATED,
122/8,APNIC,2006-01,whois.apnic.net,https://rdap.apnic.net/,ALLOCATED,
123/8,APNIC,2006-01,whois.apnic.net,https://rdap.apnic.net/,ALLOCATED,
124/8,APNIC,2005-01,whois.apnic.net,https://rdap.apnic.net/,ALLOCATED,
125/8,APNIC,2005-01,whois.apnic.net,https://rdap.apnic.net/,ALLOCATED,
126/8,APNIC,2005-01,whois.apnic.net,https://rdap.apnic.net/,ALLOCATED,
127/8,IANA - Loopback,1981-09,,,RESERVED,[7]
128/8,Administered by ARIN,1993-05,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
129/8,Administered by ARIN,1993-05,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
130/8,Administered by ARIN,1993-05,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
131/8,Administered by ARIN,1993-05,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
132/8,Administered by ARIN,1993-05,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
133/8,Administered by APNIC,1997-03,whois.apnic.net,https://rdap.apnic.net/,LEGACY,
134/8,Administered by ARIN,1993-05,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
135/8,Administered by ARIN,1993-05,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
136/8,Administered by ARIN,1993-05,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
137/8,Administered by ARIN,1993-05,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
138/8,Administered by ARIN,1993-05,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
139/8,Administered by ARIN,1993-05,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
140/8,Administered by ARIN,1993-05,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
141/8,Administered by RIPE NCC,1993-05,whois.ripe.net,https://rdap.db.ripe.net/,LEGACY,
142/8,Administered by ARIN,1993-05,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
143/8,Administered by ARIN,1993-05,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
144/8,Administered by ARIN,1993-05,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
145/8,Administered by RIPE NCC,1993-05,whois.ripe.net,https://rdap.db.ripe.net/,LEGACY,
146/8,Administered by ARIN,1993-05,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
147/8,Administered by ARIN,1993-05,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
148/8,Administered by ARIN,1993-05,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
149/8,Administered by ARIN,1993-05,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
150/8,Administered by APNIC,1993-05,whois.apnic.net,https://rdap.apnic.net/,LEGACY,
151/8,Administered by RIPE NCC,1993-05,whois.ripe.net,https://rdap.db.ripe.net/,LEGACY,
152/8,Administered by ARIN,1993-05,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
153/8,Administered by APNIC,1993-05,whois.apnic.net,https://rdap.apnic.net/,LEGACY,
154/8,Administered by AFRINIC,1993-05,whois.afrinic.net,https://rdap.afrinic.net/rdap/,LEGACY,
155/8,Administered by ARIN,1993-05,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
156/8,Administered by ARIN,1993-05,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
157/8,Administered by ARIN,1993-05,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
158/8,Administered by ARIN,1993-05,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
159/8,Administered by ARIN,1993-05,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
160/8,Administered by ARIN,1993-05,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
161/8,Administered by ARIN,1993-05,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
162/8,Administered by ARIN,1993-05,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
163/8,Administered by APNIC,1993-05,whois.apnic.net,https://rdap.apnic.net/,LEGACY,
164/8,Administered by ARIN,1993-05,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
165/8,Administered by ARIN,1993-05,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
166/8,Administered by ARIN,1993-05,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
167/8,Administered by ARIN,1993-05,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
168/8,Administered by ARIN,1993-05,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
169/8,Administered by ARIN,1993-05,whois.arin.net,https://rdap.arin.net/registry,LEGACY,[8]
170/8,Administered by ARIN,1993-05,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
171/8,Administered by APNIC,1993-05,whois.apnic.net,https://rdap.apnic.net/,LEGACY,
172/8,Administered by ARIN,1993-05,whois.arin.net,https://rdap.arin.net/registry,LEGACY,[9]
173/8,ARIN,2008-02,whois.arin.net,https://rdap.arin.net/registry,ALLOCATED,
174/8,ARIN,2008-02,whois.arin.net,https://rdap.arin.net/registry,ALLOCATED,
175/8,APNIC,2009-08,whois.apnic.net,https://rdap.apnic.net/,ALLOCATED,
176/8,RIPE NCC,2010-05,whois.ripe.net,https://rdap.db.ripe.net/,ALLOCATED,
177/8,LACNIC,2010-06,whois.lacnic.net,https://rdap.lacnic.net/rdap/,ALLOCATED,
178/8,RIPE NCC,2009-01,whois.ripe.net,https://rdap.db.ripe.net/,ALLOCATED,
179/8,LACNIC,2011-02,whois.lacnic.net,https://rdap.lacnic.net/rdap/,ALLOCATED,
180/8,APNIC,2009-04,whois.apnic.net,https://rdap.apnic.net/,ALLOCATED,
181/8,LACNIC,2010-06,whois.lacnic.net,https://rdap.lacnic.net/rdap/,ALLOCATED,
182/8,APNIC,2009-08,whois.apnic.net,https://rdap.apnic.net/,ALLOCATED,
183/8,APNIC,2009-04,whois.apnic.net,https://rdap.apnic.net/,ALLOCATED,
184/8,ARIN,2008-12,whois.arin.net,https://rdap.arin.net/registry,ALLOCATED,
185/8,RIPE NCC,2011-02,whois.ripe.net,https://rdap.db.ripe.net/,ALLOCATED,
186/8,LACNIC,2007-09,whois.lacnic.net,https://rdap.lacnic.net/rdap/,ALLOCATED,
187/8,LACNIC,2007-09,whois.lacnic.net,https://rdap.lacnic.net/rdap/,ALLOCATED,
188/8,Administered by RIPE NCC,1993-05,whois.ripe.net,https://rdap.db.ripe.net/,LEGACY,
189/8,LACNIC,1995-06,whois.lacnic.net,https://rdap.lacnic.net/rdap/,ALLOCATED,
190/8,LACNIC,1995-06,whois.lacnic.net,https://rdap.lacnic.net/rdap/,ALLOCATED,
191/8,Administered by LACNIC,1993-05,whois.lacnic.net,https://rdap.lacnic.net/rdap/,LEGACY,
192/8,Administered by ARIN,1993-05,whois.arin.net,https://rdap.arin.net/registry,LEGACY,[10][11]
193/8,RIPE NCC,1993-05,whois.ripe.net,https://rdap.db.ripe.net/,ALLOCATED,
194/8,RIPE NCC,1993-05,whois.ripe.net,https://rdap.db.ripe.net/,ALLOCATED,
195/8,RIPE NCC,1993-05,whois.ripe.net,https://rdap.db.ripe.net/,ALLOCATED,
196/8,Administered by AFRINIC,1993-05,whois.afrinic.net,https://rdap.afrinic.net/rdap/,LEGACY,
197/8,AFRINIC,2008-10,whois.afrinic.net,https://rdap.afrinic.net/rdap/,ALLOCATED,
198/8,Administered by ARIN,1993-05,whois.arin.net,https://rdap.arin.net/registry,LEGACY,[12]
199/8,ARIN,1993-05,whois.arin.net,https://rdap.arin.net/registry,ALLOCATED,
200/8,LACNIC,2002-11,whois.lacnic.net,https://rdap.lacnic.net/rdap/,ALLOCATED,
201/8,LACNIC,2003-04,whois.lacnic.net,https://rdap.lacnic.net/rdap/,ALLOCATED,
202/8,APNIC,1993-05,whois.apnic.net,https://rdap.apnic.net/,ALLOCATED,
203/8,APNIC,1993-05,whois.apnic.net,https://rdap.apnic.net/,ALLOCATED,[13]
204/8,ARIN,1994-03,whois.arin.net,https://rdap.arin.net/registry,ALLOCATED,
205/8,ARIN,1994-03,whois.arin.net,https://rdap.arin.net/registry,ALLOCATED,
206/8,ARIN,1995-04,whois.arin.net,https://rdap.arin.net/registry,ALLOCATED,
207/8,ARIN,1995-11,whois.arin.net,https://rdap.arin.net/registry,ALLOCATED,
208/8,ARIN,1996-04,whois.arin.net,https://rdap.arin.net/registry,ALLOCATED,
209/8,ARIN,1996-06,whois.arin.net,https://rdap.arin.net/registry,ALLOCATED,
210/8,APNIC,1996-06,whois.apnic.net,https://rdap.apnic.net/,ALLOCATED,
211/8,APNIC,1996-06,whois.apnic.net,https://rdap.apnic.net/,ALLOCATED,
212/8,RIPE NCC,1997-10,whois.ripe.net,https://rdap.db.ripe.net/,ALLOCATED,
213/8,RIPE NCC,1993-10,whois.ripe.net,https://rdap.db.ripe.net/,ALLOCATED,
214/8,US-DOD,1998-03,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
215/8,US-DOD,1998-03,whois.arin.net,https://rdap.arin.net/registry,LEGACY,
216/8,ARIN,1998-04,whois.arin.net,https://rdap.arin.net/registry,ALLOCATED,
217/8,RIPE NCC,2000-06,whois.ripe.net,https://rdap.db.ripe.net/,ALLOCATED,
218/8,APNIC,2000-12,whois.apnic.net,https://rdap.apnic.net/,ALLOCATED,
219/8,APNIC,2001-09,whois.apnic.net,https://rdap.apnic.net/,ALLOCATED,
220/8,APNIC,2001-12,whois.apnic.net,https://rdap.apnic.net/,ALLOCATED,
221/8,APNIC,2002-07,whois.apnic.net,https://rdap.apnic.net/,ALLOCATED,
222/8,APNIC,2003-02,whois.apnic.net,https://rdap.apnic.net/,ALLOCATED,
223/8,APNIC,2010-04,whois.apnic.net,https://rdap.apnic.net/,ALLOCATED,
224/8,Multicast,1981-09,,,RESERVED,[14]
225/8,Multicast,1981-09,,,RESERVED,[14]
226/8,Multicast,1981-09,,,RESERVED,[14]
227/8,Multicast,1981-09,,,RESERVED,[14]
228/8,Multicast,1981-09,,,RESERVED,[14]
229/8,Multicast,1981-09,,,RESERVED,[14]
230/8,Multicast,1981-09,,,RESERVED,[14]
231/8,Multicast,1981-09,,,RESERVED,[14]
232/8,Multicast,1981-09,,,RESERVED,[14]
233/8,Multicast,1981-09,,,RESERVED,[14]
234/8,Multicast,1981-09,,,RESERVED,[14][15]
235/8,Multicast,1981-09,,,RESERVED,[14]
236/8,Multicast,1981-09,,,RESERVED,[14]
237/8,Multicast,1981-09,,,RESERVED,[14]
238/8,Multicast,1981-09,,,RESERVED,[14]
239/8,Multicast,1981-09,,,RESERVED,[14][16]
240/8,Future use,1981-09,,,RESERVED,[17]
241/8,Future use,1981-09,,,RESERVED,[17]
242/8,Future use,1981-09,,,RESERVED,[17]
243/8,Future use,1981-09,,,RESERVED,[17]
244/8,Future use,1981-09,,,RESERVED,[17]
245/8,Future use,1981-09,,,RESERVED,[17]
246/8,Future use,1981-09,,,RESERVED,[17]
247/8,Future use,1981-09,,,RESERVED,[17]
248/8,Future use,1981-09,,,RESERVED,[17]
249/8,Future use,1981-09,,,RESERVED,[17]
250/8,Future use,1981-09,,,RESERVED,[17]
251/8,Future use,1981-09,,,RESERVED,[17]
252/8,Future use,1981-09,,,RESERVED,[17]
253/8,Future use,1981-09,,,RESERVED,[17]
254/8,Future use,1981-09,,,RESERVED,[17]
255/8,Future use,1981-09,,,RESERVED,[17][18]
