January 17, 2016 at 2:49 am
Hi Jeff,
as always appreciate your responses & tips. I was being a bit short-sighted in that the app we use doesn't need the functionality to pick a specific part of the IP. And "dressing up" the bigint as a readable IP is done in the UI itself. So for us the bigint worked well
Cheers
Thierry
January 17, 2016 at 9:27 am
thierry.vandurme (1/17/2016)
Hi Jeff,as always appreciate your responses & tips. I was being a bit short-sighted in that the app we use doesn't need the functionality to pick a specific part of the IP. And "dressing up" the bigint as a readable IP is done in the UI itself. So for us the bigint worked well
Cheers
Thierry
I'm always curious as to why people do things the way they do so thank you very much for taking the time to explain. I appreciate it.
--Jeff Moden
Change is inevitable... Change for the better is not.
January 17, 2016 at 12:19 pm
thierry.vandurme (1/15/2016)
Nice article. May come in use one day so glad you shared that.Btw, I use bigint to store IP4 addresses (less space and able to use ORDER BY)
Using a bigint is a waste of 4 bytes and unfortunately it doesn't make much sense ordering by the number as the byte order is reversed (small endian).
😎
Edit: the quote bug.
January 17, 2016 at 12:26 pm
Eirikur Eiriksson (1/17/2016)
thierry.vandurme (1/15/2016)
Nice article. May come in use one day so glad you shared that.Btw, I use bigint to store IP4 addresses (less space and able to use ORDER BY)
Using a bigint is a waste of 4 bytes and unfortunately it doesn't make much sense ordering by the number as the byte order is reversed (small endian).
😎
Edit: the quote bug.
Heh... good stuff. A whole lot of people don't know about "Small Endian" storage. To your point, though, the sort order bytes should not reversed if you sort by value rather than by byte.
--Jeff Moden
Change is inevitable... Change for the better is not.
January 17, 2016 at 12:33 pm
Jeff Moden (1/15/2016)
thierry.vandurme (1/15/2016)
Nice article. May come in use one day so glad you shared that.Btw, I use bigint to store IP4 addresses (less space and able to use ORDER BY)
It'll be interesting how you pick parts of the address out during a search.
If you really want to save some space, separate each octet out into a separate TINYINT column. That takes only 4 bytes total, is sortable, and is searchable without having to jump through hoops.
I often store IPv4 addresses as INT, especially for logging where the cardinality can become extremely high and with a simple bit-bashing searching is not much of a problem. Another great plus is that leading zeros in the addresses are no problem, quite handy.
😎
A mockup from an old test bench:
DECLARE @STRIP VARCHAR(15) = '013.065.072.059';
SELECT
IA.IP_ID
,IA.IP_NUM
,IA.IP_STR
FROM dbo.TBL_IP_ADDRESS IA
CROSS APPLY
(SELECT
CONVERT(INT,
CONVERT(BINARY(1),CONVERT(TINYINT,PARSENAME(@STRIP,1),0),0)
+ CONVERT(BINARY(1),CONVERT(TINYINT,PARSENAME(@STRIP,2),0),0)
+ CONVERT(BINARY(1),CONVERT(TINYINT,PARSENAME(@STRIP,3),0),0)
+ CONVERT(BINARY(1),CONVERT(TINYINT,PARSENAME(@STRIP,4),0),0)
,0) AS IP_NUM
) AS X
WHERE IA.IP_NUM = X.IP_NUM;
January 17, 2016 at 12:42 pm
Jeff Moden (1/17/2016)
Eirikur Eiriksson (1/17/2016)
thierry.vandurme (1/15/2016)
Nice article. May come in use one day so glad you shared that.Btw, I use bigint to store IP4 addresses (less space and able to use ORDER BY)
Using a bigint is a waste of 4 bytes and unfortunately it doesn't make much sense ordering by the number as the byte order is reversed (small endian).
😎
Edit: the quote bug.
Heh... good stuff. A whole lot of people don't know about "Small Endian" storage. To your point, though, the sort order bytes should not reversed if you sort by value rather than by byte.
Sorting IPs stored as INT by the value gives a slightly funny sort order as it flips the sort order by the sign bit of the first byte which is the D Class Octet;-)
😎
January 17, 2016 at 1:38 pm
Eirikur Eiriksson (1/17/2016)
Jeff Moden (1/17/2016)
Eirikur Eiriksson (1/17/2016)
thierry.vandurme (1/15/2016)
Nice article. May come in use one day so glad you shared that.Btw, I use bigint to store IP4 addresses (less space and able to use ORDER BY)
Using a bigint is a waste of 4 bytes and unfortunately it doesn't make much sense ordering by the number as the byte order is reversed (small endian).
😎
Edit: the quote bug.
Heh... good stuff. A whole lot of people don't know about "Small Endian" storage. To your point, though, the sort order bytes should not reversed if you sort by value rather than by byte.
Sorting IPs stored as INT by the value gives a slightly funny sort order as it flips the sort order by the sign bit of the first byte which is the D Class Octet;-)
😎
If you're sorting a BIGINT, I don't believe the sign bit will come into play at all for IP4 addresses.
--Jeff Moden
Change is inevitable... Change for the better is not.
January 17, 2016 at 2:25 pm
Jeff Moden (1/17/2016)
If you're sorting a BIGINT, I don't believe the sign bit will come into play at all for IP4 addresses.
True but still one is sorting on [D][C][A] which doesn't make too much sense.
😎
The idea of storing each octet as a tinyint is quite neat, easily implemented as a persisted calculated column, here is a quick example with the usual data set generator.
USE tempdb;
GO
SET NOCOUNT ON;
--/*
IF OBJECT_ID(N'dbo.TBL_IP_ADDRESS') IS NOT NULL DROP TABLE dbo.TBL_IP_ADDRESS;
CREATE TABLE dbo.TBL_IP_ADDRESS
(
IP_ID INT IDENTITY(1,1) NOT NULL CONSTRAINT PK_DBO_TBL_IP_ADDRESS_IP_ID PRIMARY KEY CLUSTERED
,IP_NUM INT NOT NULL
,ACLS AS (CONVERT(TINYINT,(IP_NUM ) & 0xFF,0)) PERSISTED
,BCLS AS (CONVERT(TINYINT,(IP_NUM / 256) & 0xFF,0)) PERSISTED
,CCLS AS (CONVERT(TINYINT,(IP_NUM / 65536) & 0xFF,0)) PERSISTED
,DCLS AS (CONVERT(TINYINT,(IP_NUM / 16777216) & 0xFF,0)) PERSISTED
);
DECLARE @SAMPLE_SIZE INT = 5000000;
;WITH T(N) AS (SELECT N FROM ( VALUES (0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) AS X(N))
, NUMS(N) AS (SELECT TOP(@SAMPLE_SIZE) 0 AS N FROM T T1,T T2,T T3,T T4,T T5,T T6,T T7,T T8,T T9)
,SAMPLE_DATA(FAKE_IP) AS
(
SELECT
(CHECKSUM(NEWID())) AS FAKE_IP
FROM NUMS NM
)
,SPLIT_TO_OCTETS(IP_NUM) AS
(
SELECT
IA.FAKE_IP AS IP_NUM
FROM SAMPLE_DATA IA
)
INSERT INTO dbo.TBL_IP_ADDRESS(IP_NUM)
SELECT
SO.IP_NUM
FROM SPLIT_TO_OCTETS SO
WHERE ((SO.IP_NUM ) & 0xFF) > 0
AND ((SO.IP_NUM / 256 ) & 0xFF) > 0;
CREATE NONCLUSTERED INDEX NCLIDX_DBO_TBL_IP_ADDRESS_IP_NUM_INCL_IP_ID ON dbo.TBL_IP_ADDRESS(IP_NUM ASC) INCLUDE(IP_ID);
CREATE NONCLUSTERED INDEX NCLIDX_DBO_TBL_ACLS_BCLS_CCLS_DCLS ON dbo.TBL_IP_ADDRESS(ACLS ASC, BCLS ASC, CCLS ASC, DCLS ASC) INCLUDE (IP_ID, IP_NUM);
--*/
Obviously we can search by a single IP on the numerical value
DECLARE @STRIP VARCHAR(15) = '013.065.072.059';
SELECT
IA.IP_ID
,IA.IP_NUM
FROM dbo.TBL_IP_ADDRESS IA
CROSS APPLY
(SELECT
CONVERT(INT,
CONVERT(BINARY(1),CONVERT(TINYINT,PARSENAME(@STRIP,1),0),0)
+ CONVERT(BINARY(1),CONVERT(TINYINT,PARSENAME(@STRIP,2),0),0)
+ CONVERT(BINARY(1),CONVERT(TINYINT,PARSENAME(@STRIP,3),0),0)
+ CONVERT(BINARY(1),CONVERT(TINYINT,PARSENAME(@STRIP,4),0),0)
,0) AS IP_NUM
) AS X
WHERE IA.IP_NUM = X.IP_NUM;
Now for a slightly more complex operation such as matching addresses to MS Azure data centres
-- https://www.microsoft.com/en-us/download/confirmation.aspx?id=41653
DECLARE @IPXML XML = '<AzurePublicIpAddresses xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Region Name="europewest">
<IpRange Subnet="40.112.124.0/24" />
<IpRange Subnet="65.52.128.0/19" />
<IpRange Subnet="94.245.97.0/24" />
<IpRange Subnet="104.47.169.0/24" />
<IpRange Subnet="104.214.240.0/24" />
<IpRange Subnet="137.116.192.0/19" />
<IpRange Subnet="157.55.8.96/27" />
<IpRange Subnet="157.55.8.128/27" />
<IpRange Subnet="157.55.8.160/28" />
<IpRange Subnet="168.63.0.0/19" />
<IpRange Subnet="168.63.96.0/20" />
<IpRange Subnet="168.63.112.16/28" />
<IpRange Subnet="168.63.112.64/26" />
<IpRange Subnet="168.63.112.128/25" />
<IpRange Subnet="168.63.113.0/24" />
<IpRange Subnet="168.63.114.0/23" />
<IpRange Subnet="168.63.116.0/22" />
<IpRange Subnet="168.63.120.0/21" />
<IpRange Subnet="193.149.80.0/22" />
<IpRange Subnet="213.199.128.0/21" />
<IpRange Subnet="213.199.136.0/22" />
<IpRange Subnet="213.199.180.32/28" />
<IpRange Subnet="213.199.180.112/28" />
<IpRange Subnet="213.199.183.0/24" />
<IpRange Subnet="23.97.128.0/17" />
<IpRange Subnet="23.98.46.0/24" />
<IpRange Subnet="23.100.0.0/20" />
<IpRange Subnet="23.101.64.0/20" />
<IpRange Subnet="40.114.128.0/24" />
<IpRange Subnet="40.114.136.0/21" />
<IpRange Subnet="40.114.144.0/21" />
<IpRange Subnet="40.114.152.0/26" />
<IpRange Subnet="104.40.128.0/17" />
<IpRange Subnet="104.45.0.0/18" />
<IpRange Subnet="104.45.64.0/20" />
<IpRange Subnet="104.46.32.0/19" />
<IpRange Subnet="137.117.128.0/17" />
<IpRange Subnet="168.61.56.0/21" />
<IpRange Subnet="191.233.64.0/18" />
<IpRange Subnet="191.237.232.0/22" />
<IpRange Subnet="191.239.200.0/23" />
<IpRange Subnet="191.239.202.0/24" />
<IpRange Subnet="191.239.203.0/27" />
<IpRange Subnet="191.239.203.64/27" />
<IpRange Subnet="193.149.84.0/22" />
<IpRange Subnet="40.74.0.0/20" />
<IpRange Subnet="40.74.16.0/20" />
<IpRange Subnet="40.74.32.0/20" />
<IpRange Subnet="40.74.48.0/20" />
<IpRange Subnet="40.114.129.0/24" />
<IpRange Subnet="40.114.130.0/23" />
<IpRange Subnet="40.114.132.0/22" />
<IpRange Subnet="40.114.152.64/26" />
<IpRange Subnet="40.114.152.128/25" />
<IpRange Subnet="40.114.153.0/24" />
<IpRange Subnet="40.114.154.0/23" />
<IpRange Subnet="40.114.156.0/22" />
<IpRange Subnet="40.114.160.0/19" />
<IpRange Subnet="13.69.40.48/28" />
<IpRange Subnet="13.69.40.64/26" />
<IpRange Subnet="13.69.40.128/25" />
<IpRange Subnet="13.69.42.0/23" />
<IpRange Subnet="13.69.44.0/22" />
<IpRange Subnet="13.69.64.0/19" />
<IpRange Subnet="13.73.128.16/28" />
<IpRange Subnet="13.73.128.32/27" />
<IpRange Subnet="13.73.128.64/26" />
<IpRange Subnet="13.73.128.128/25" />
<IpRange Subnet="13.73.130.0/23" />
<IpRange Subnet="13.73.132.0/22" />
<IpRange Subnet="13.73.168.112/28" />
<IpRange Subnet="13.73.168.128/25" />
<IpRange Subnet="13.73.170.0/23" />
<IpRange Subnet="13.73.172.0/22" />
<IpRange Subnet="13.80.32.16/28" />
<IpRange Subnet="13.80.32.32/27" />
<IpRange Subnet="13.80.32.64/26" />
<IpRange Subnet="13.80.32.128/25" />
<IpRange Subnet="13.80.34.0/23" />
<IpRange Subnet="13.80.36.0/22" />
<IpRange Subnet="13.80.89.16/28" />
<IpRange Subnet="13.80.89.32/27" />
<IpRange Subnet="13.80.89.64/26" />
<IpRange Subnet="13.80.89.128/25" />
<IpRange Subnet="13.80.91.16/28" />
<IpRange Subnet="13.80.91.32/27" />
<IpRange Subnet="13.80.91.64/26" />
<IpRange Subnet="13.80.91.128/25" />
<IpRange Subnet="13.80.92.0/22" />
<IpRange Subnet="13.80.160.16/28" />
<IpRange Subnet="13.80.160.64/26" />
<IpRange Subnet="13.80.160.128/25" />
<IpRange Subnet="13.80.161.0/24" />
<IpRange Subnet="13.80.162.0/23" />
<IpRange Subnet="13.80.164.0/22" />
<IpRange Subnet="13.80.184.16/28" />
<IpRange Subnet="13.80.184.32/27" />
<IpRange Subnet="13.80.184.64/26" />
<IpRange Subnet="13.80.184.128/25" />
<IpRange Subnet="13.80.186.0/23" />
<IpRange Subnet="13.80.188.0/22" />
<IpRange Subnet="13.80.192.0/19" />
<IpRange Subnet="13.80.224.0/21" />
<IpRange Subnet="13.80.233.16/28" />
<IpRange Subnet="13.80.233.32/27" />
<IpRange Subnet="13.80.233.64/26" />
<IpRange Subnet="13.80.233.128/25" />
<IpRange Subnet="13.80.234.0/23" />
<IpRange Subnet="13.80.236.0/22" />
<IpRange Subnet="13.81.16.16/28" />
<IpRange Subnet="13.81.16.32/27" />
<IpRange Subnet="13.81.16.64/26" />
<IpRange Subnet="13.81.16.128/25" />
<IpRange Subnet="13.81.18.0/23" />
<IpRange Subnet="13.81.20.0/22" />
<IpRange Subnet="13.81.72.32/27" />
<IpRange Subnet="13.81.72.64/26" />
<IpRange Subnet="13.81.72.128/25" />
<IpRange Subnet="13.81.75.0/24" />
<IpRange Subnet="13.81.76.0/22" />
<IpRange Subnet="13.81.128.0/19" />
<IpRange Subnet="13.81.160.16/28" />
<IpRange Subnet="13.81.160.32/27" />
<IpRange Subnet="13.81.160.64/26" />
<IpRange Subnet="13.81.160.128/25" />
<IpRange Subnet="13.81.162.0/23" />
<IpRange Subnet="13.81.164.0/22" />
<IpRange Subnet="13.81.232.16/28" />
<IpRange Subnet="13.81.232.32/27" />
<IpRange Subnet="13.81.232.64/26" />
<IpRange Subnet="13.81.232.128/25" />
<IpRange Subnet="13.81.234.0/23" />
<IpRange Subnet="13.81.236.0/22" />
<IpRange Subnet="40.80.0.0/18" />
<IpRange Subnet="40.82.0.0/16" />
<IpRange Subnet="40.112.36.128/26" />
<IpRange Subnet="40.112.96.0/20" />
<IpRange Subnet="40.112.112.0/21" />
<IpRange Subnet="40.112.120.0/22" />
<IpRange Subnet="40.112.125.0/24" />
<IpRange Subnet="40.112.126.0/23" />
<IpRange Subnet="40.113.96.0/19" />
<IpRange Subnet="40.113.128.0/18" />
<IpRange Subnet="40.114.192.0/18" />
<IpRange Subnet="40.115.0.0/18" />
<IpRange Subnet="40.118.0.0/17" />
<IpRange Subnet="104.46.16.0/21" />
<IpRange Subnet="104.47.128.0/19" />
<IpRange Subnet="104.47.160.0/21" />
<IpRange Subnet="104.47.168.0/24" />
<IpRange Subnet="104.47.170.0/23" />
<IpRange Subnet="104.47.172.0/22" />
<IpRange Subnet="104.47.176.0/20" />
<IpRange Subnet="104.214.192.0/19" />
<IpRange Subnet="104.214.224.0/20" />
<IpRange Subnet="104.214.241.0/24" />
<IpRange Subnet="104.214.242.0/23" />
<IpRange Subnet="104.214.244.0/22" />
<IpRange Subnet="104.214.248.0/21" />
<IpRange Subnet="13.73.128.16/28" />
<IpRange Subnet="13.73.128.32/27" />
<IpRange Subnet="13.73.128.64/26" />
<IpRange Subnet="13.73.128.128/25" />
<IpRange Subnet="13.73.130.0/23" />
<IpRange Subnet="13.73.132.0/22" />
<IpRange Subnet="13.80.89.16/28" />
<IpRange Subnet="13.80.89.32/27" />
<IpRange Subnet="13.80.89.64/26" />
<IpRange Subnet="13.80.89.128/25" />
<IpRange Subnet="13.80.92.0/22" />
<IpRange Subnet="13.73.168.128/25" />
<IpRange Subnet="13.73.170.0/23" />
<IpRange Subnet="13.73.172.0/22" />
<IpRange Subnet="13.80.160.16/28" />
<IpRange Subnet="13.80.160.64/26" />
<IpRange Subnet="13.80.160.128/25" />
<IpRange Subnet="13.80.161.0/24" />
<IpRange Subnet="13.80.162.0/23" />
<IpRange Subnet="13.80.164.0/22" />
<IpRange Subnet="13.80.91.16/28" />
<IpRange Subnet="13.80.91.32/27" />
<IpRange Subnet="13.80.91.64/26" />
<IpRange Subnet="13.80.91.128/25" />
<IpRange Subnet="13.80.192.0/19" />
<IpRange Subnet="13.80.224.0/21" />
<IpRange Subnet="13.80.233.16/28" />
<IpRange Subnet="13.80.233.32/27" />
<IpRange Subnet="13.80.233.64/26" />
<IpRange Subnet="13.80.233.128/25" />
<IpRange Subnet="13.80.234.0/23" />
<IpRange Subnet="13.80.236.0/22" />
<IpRange Subnet="13.81.16.16/28" />
<IpRange Subnet="13.81.16.32/27" />
<IpRange Subnet="13.81.16.64/26" />
<IpRange Subnet="13.81.16.128/25" />
<IpRange Subnet="13.81.18.0/23" />
<IpRange Subnet="13.81.20.0/22" />
<IpRange Subnet="13.81.80.0/20" />
<IpRange Subnet="13.81.96.0/19" />
<IpRange Subnet="13.69.40.64/26" />
<IpRange Subnet="13.69.40.128/25" />
<IpRange Subnet="13.69.42.0/23" />
<IpRange Subnet="13.69.44.0/22" />
<IpRange Subnet="13.69.40.48/28" />
<IpRange Subnet="13.80.184.16/28" />
<IpRange Subnet="13.80.184.32/27" />
<IpRange Subnet="13.80.184.64/26" />
<IpRange Subnet="13.80.184.128/25" />
<IpRange Subnet="13.80.186.0/23" />
<IpRange Subnet="13.80.188.0/22" />
<IpRange Subnet="13.80.184.16/28" />
<IpRange Subnet="13.80.184.32/27" />
<IpRange Subnet="13.80.184.64/26" />
<IpRange Subnet="13.80.184.128/25" />
<IpRange Subnet="13.80.186.0/23" />
<IpRange Subnet="13.80.188.0/22" />
<IpRange Subnet="13.81.232.16/28" />
<IpRange Subnet="13.81.232.32/27" />
<IpRange Subnet="13.81.232.64/26" />
<IpRange Subnet="13.81.232.128/25" />
<IpRange Subnet="13.81.234.0/23" />
<IpRange Subnet="13.81.236.0/22" />
<IpRange Subnet="13.81.232.16/28" />
<IpRange Subnet="13.81.232.32/27" />
<IpRange Subnet="13.81.232.64/26" />
<IpRange Subnet="13.81.232.128/25" />
<IpRange Subnet="13.81.234.0/23" />
<IpRange Subnet="13.81.236.0/22" />
<IpRange Subnet="13.69.64.0/19" />
<IpRange Subnet="13.81.72.0/28" />
<IpRange Subnet="13.81.72.32/27" />
<IpRange Subnet="13.81.72.64/26" />
<IpRange Subnet="13.81.72.128/25" />
<IpRange Subnet="13.81.73.0/24" />
<IpRange Subnet="13.81.75.0/24" />
<IpRange Subnet="13.81.76.0/22" />
<IpRange Subnet="13.81.128.0/19" />
<IpRange Subnet="13.81.160.16/28" />
<IpRange Subnet="13.81.160.32/27" />
<IpRange Subnet="13.81.160.64/26" />
<IpRange Subnet="13.81.160.128/25" />
<IpRange Subnet="13.81.162.0/23" />
<IpRange Subnet="13.81.164.0/22" />
<IpRange Subnet="13.81.128.0/19" />
<IpRange Subnet="13.81.160.16/28" />
<IpRange Subnet="13.81.160.32/27" />
<IpRange Subnet="13.81.160.64/26" />
<IpRange Subnet="13.81.160.128/25" />
<IpRange Subnet="13.81.162.0/23" />
<IpRange Subnet="13.81.164.0/22" />
<IpRange Subnet="13.69.0.0/19" />
<IpRange Subnet="13.69.32.0/21" />
<IpRange Subnet="13.69.40.0/27" />
<IpRange Subnet="13.69.40.32/28" />
<IpRange Subnet="13.69.41.0/24" />
<IpRange Subnet="13.69.48.0/20" />
<IpRange Subnet="13.69.96.0/19" />
<IpRange Subnet="13.73.128.0/28" />
<IpRange Subnet="13.73.129.0/24" />
<IpRange Subnet="13.73.136.0/21" />
<IpRange Subnet="13.73.144.0/20" />
<IpRange Subnet="13.73.160.0/21" />
<IpRange Subnet="13.73.168.0/26" />
<IpRange Subnet="13.73.168.64/27" />
<IpRange Subnet="13.73.168.96/28" />
<IpRange Subnet="13.73.169.0/24" />
<IpRange Subnet="13.73.176.0/20" />
<IpRange Subnet="13.73.224.0/21" />
<IpRange Subnet="13.80.0.0/19" />
<IpRange Subnet="13.80.32.0/28" />
<IpRange Subnet="13.80.33.0/24" />
<IpRange Subnet="13.80.40.0/21" />
<IpRange Subnet="13.80.48.0/20" />
<IpRange Subnet="13.80.64.0/20" />
<IpRange Subnet="13.80.80.0/21" />
<IpRange Subnet="13.80.88.0/24" />
<IpRange Subnet="13.80.89.0/28" />
<IpRange Subnet="13.80.90.0/24" />
<IpRange Subnet="13.80.91.0/28" />
<IpRange Subnet="13.80.96.0/19" />
<IpRange Subnet="13.80.128.0/19" />
<IpRange Subnet="13.80.160.0/28" />
<IpRange Subnet="13.80.160.32/27" />
<IpRange Subnet="13.80.168.0/21" />
<IpRange Subnet="13.80.176.0/21" />
<IpRange Subnet="13.80.184.0/28" />
<IpRange Subnet="13.80.185.0/24" />
<IpRange Subnet="13.80.232.0/24" />
<IpRange Subnet="13.80.233.0/28" />
<IpRange Subnet="13.80.240.0/20" />
<IpRange Subnet="13.81.0.0/20" />
<IpRange Subnet="13.81.24.0/21" />
<IpRange Subnet="13.81.32.0/19" />
<IpRange Subnet="13.81.64.0/21" />
<IpRange Subnet="13.81.160.0/28" />
<IpRange Subnet="13.81.161.0/24" />
<IpRange Subnet="13.81.168.0/21" />
<IpRange Subnet="13.81.176.0/20" />
<IpRange Subnet="13.81.192.0/19" />
<IpRange Subnet="13.81.224.0/21" />
<IpRange Subnet="13.81.232.0/28" />
<IpRange Subnet="13.81.233.0/24" />
<IpRange Subnet="13.81.240.0/20" />
<IpRange Subnet="13.88.200.0/21" />
<IpRange Subnet="13.93.0.0/20" />
<IpRange Subnet="13.93.16.0/24" />
<IpRange Subnet="13.93.17.0/28" />
<IpRange Subnet="13.93.24.0/21" />
<IpRange Subnet="13.93.32.0/20" />
<IpRange Subnet="13.93.48.0/21" />
<IpRange Subnet="13.93.56.0/24" />
<IpRange Subnet="13.93.57.0/28" />
<IpRange Subnet="13.93.64.0/19" />
<IpRange Subnet="13.93.96.0/27" />
<IpRange Subnet="13.93.97.0/24" />
<IpRange Subnet="13.93.98.0/24" />
<IpRange Subnet="13.93.104.0/21" />
<IpRange Subnet="13.93.112.0/20" />
<IpRange Subnet="13.94.128.0/19" />
<IpRange Subnet="13.94.216.0/28" />
<IpRange Subnet="13.94.217.0/24" />
<IpRange Subnet="13.94.224.0/19" />
<IpRange Subnet="13.95.0.0/19" />
<IpRange Subnet="40.68.48.0/28" />
<IpRange Subnet="40.68.49.0/24" />
<IpRange Subnet="40.68.56.0/21" />
<IpRange Subnet="40.68.64.0/19" />
<IpRange Subnet="40.68.96.0/21" />
<IpRange Subnet="40.68.104.0/28" />
<IpRange Subnet="40.68.105.0/24" />
<IpRange Subnet="40.68.112.0/20" />
</Region>
<Region Name="useast">
<IpRange Subnet="23.96.0.0/18" />
<IpRange Subnet="23.96.64.0/28" />
<IpRange Subnet="23.96.64.64/26" />
<IpRange Subnet="23.96.64.128/27" />
<IpRange Subnet="23.96.64.160/28" />
<IpRange Subnet="23.96.80.0/20" />
<IpRange Subnet="23.96.96.0/19" />
<IpRange Subnet="23.100.16.0/20" />
<IpRange Subnet="23.101.128.0/20" />
<IpRange Subnet="104.45.128.0/18" />
<IpRange Subnet="104.45.192.0/20" />
<IpRange Subnet="137.116.112.0/20" />
<IpRange Subnet="137.117.32.0/19" />
<IpRange Subnet="137.117.64.0/18" />
<IpRange Subnet="137.135.64.0/18" />
<IpRange Subnet="157.56.176.0/21" />
<IpRange Subnet="168.61.32.0/20" />
<IpRange Subnet="168.61.48.0/21" />
<IpRange Subnet="168.62.32.0/21" />
<IpRange Subnet="168.62.40.0/22" />
<IpRange Subnet="168.62.44.0/23" />
<IpRange Subnet="168.62.46.0/24" />
<IpRange Subnet="168.62.47.0/27" />
<IpRange Subnet="168.62.47.32/28" />
<IpRange Subnet="168.62.47.96/27" />
<IpRange Subnet="168.62.47.128/25" />
<IpRange Subnet="168.62.48.0/20" />
<IpRange Subnet="168.62.160.0/19" />
<IpRange Subnet="23.98.45.0/24" />
<IpRange Subnet="104.41.128.0/19" />
<IpRange Subnet="138.91.96.0/25" />
<IpRange Subnet="138.91.96.128/26" />
<IpRange Subnet="138.91.96.192/28" />
<IpRange Subnet="138.91.112.0/20" />
<IpRange Subnet="191.234.32.0/19" />
<IpRange Subnet="191.236.0.0/18" />
<IpRange Subnet="191.238.0.0/22" />
<IpRange Subnet="191.238.4.0/24" />
<IpRange Subnet="191.238.6.0/26" />
<IpRange Subnet="191.238.6.64/28" />
<IpRange Subnet="191.238.7.0/24" />
<IpRange Subnet="191.238.8.0/21" />
<IpRange Subnet="191.238.16.0/20" />
<IpRange Subnet="191.238.32.0/19" />
<IpRange Subnet="40.76.0.0/20" />
<IpRange Subnet="40.76.16.0/20" />
<IpRange Subnet="40.76.32.0/20" />
<IpRange Subnet="40.76.48.0/20" />
<IpRange Subnet="13.68.163.64/26" />
<IpRange Subnet="13.68.163.128/25" />
<IpRange Subnet="40.76.64.0/18" />
<IpRange Subnet="40.76.128.0/17" />
<IpRange Subnet="40.114.0.0/17" />
<IpRange Subnet="40.117.128.0/17" />
<IpRange Subnet="40.121.0.0/16" />
<IpRange Subnet="104.211.0.0/18" />
<IpRange Subnet="191.237.0.0/19" />
<IpRange Subnet="191.237.32.0/22" />
<IpRange Subnet="191.237.36.0/23" />
<IpRange Subnet="191.237.38.0/27" />
<IpRange Subnet="191.237.39.0/24" />
<IpRange Subnet="191.237.40.0/21" />
<IpRange Subnet="191.237.48.0/20" />
<IpRange Subnet="191.237.64.0/18" />
<IpRange Subnet="13.72.88.64/26" />
<IpRange Subnet="13.72.88.128/25" />
<IpRange Subnet="13.72.92.0/22" />
<IpRange Subnet="13.68.161.16/28" />
<IpRange Subnet="13.68.161.32/27" />
<IpRange Subnet="13.68.161.64/26" />
<IpRange Subnet="13.68.161.128/25" />
<IpRange Subnet="13.72.104.0/21" />
<IpRange Subnet="13.72.120.16/28" />
<IpRange Subnet="13.72.120.32/27" />
<IpRange Subnet="13.72.120.64/26" />
<IpRange Subnet="13.72.120.128/25" />
<IpRange Subnet="13.72.122.0/23" />
<IpRange Subnet="13.72.124.0/22" />
<IpRange Subnet="13.72.91.0/24" />
<IpRange Subnet="13.68.163.48/28" />
<IpRange Subnet="13.68.128.0/19" />
<IpRange Subnet="13.68.160.0/24" />
<IpRange Subnet="13.68.161.0/28" />
<IpRange Subnet="13.68.162.0/24" />
<IpRange Subnet="13.68.163.0/27" />
<IpRange Subnet="13.68.163.32/28" />
<IpRange Subnet="13.68.165.0/25" />
<IpRange Subnet="13.68.166.0/24" />
<IpRange Subnet="13.68.167.0/25" />
<IpRange Subnet="13.68.167.128/26" />
<IpRange Subnet="13.68.167.192/27" />
<IpRange Subnet="13.68.168.0/21" />
<IpRange Subnet="13.68.176.0/20" />
<IpRange Subnet="13.68.192.0/18" />
<IpRange Subnet="13.72.64.0/20" />
<IpRange Subnet="13.72.80.0/21" />
<IpRange Subnet="13.72.88.0/26" />
<IpRange Subnet="13.72.89.0/24" />
<IpRange Subnet="13.72.90.0/24" />
<IpRange Subnet="13.72.96.0/21" />
<IpRange Subnet="13.72.112.0/21" />
<IpRange Subnet="13.72.120.0/28" />
<IpRange Subnet="13.72.121.0/24" />
<IpRange Subnet="13.82.0.0/16" />
<IpRange Subnet="13.90.0.0/19" />
<IpRange Subnet="13.90.32.0/20" />
<IpRange Subnet="13.90.48.0/28" />
<IpRange Subnet="13.90.49.0/24" />
<IpRange Subnet="13.90.56.0/21" />
<IpRange Subnet="13.90.64.0/19" />
<IpRange Subnet="13.90.96.0/21" />
<IpRange Subnet="13.90.104.0/28" />
<IpRange Subnet="13.90.105.0/24" />
<IpRange Subnet="13.90.112.0/20" />
<IpRange Subnet="13.90.128.0/19" />
<IpRange Subnet="13.92.0.0/19" />
<IpRange Subnet="13.92.32.0/20" />
<IpRange Subnet="13.92.200.16/28" />
<IpRange Subnet="13.92.202.0/24" />
<IpRange Subnet="40.80.144.0/21" />
<IpRange Subnet="40.85.160.0/19" />
<IpRange Subnet="40.87.0.0/17" />
<IpRange Subnet="40.112.48.0/20" />
<IpRange Subnet="40.117.32.0/19" />
<IpRange Subnet="40.117.64.0/18" />
</Region>
<Region Name="useast2">
<IpRange Subnet="23.100.64.0/21" />
<IpRange Subnet="23.101.144.0/20" />
<IpRange Subnet="23.101.32.0/21" />
<IpRange Subnet="137.116.0.0/18" />
<IpRange Subnet="137.116.64.0/19" />
<IpRange Subnet="137.116.96.0/22" />
<IpRange Subnet="191.239.224.0/25" />
<IpRange Subnet="193.149.64.0/21" />
<IpRange Subnet="104.46.192.0/20" />
<IpRange Subnet="23.102.204.0/22" />
<IpRange Subnet="40.75.0.0/17" />
<IpRange Subnet="40.84.0.0/17" />
<IpRange Subnet="104.46.0.0/21" />
<IpRange Subnet="104.46.96.0/19" />
<IpRange Subnet="104.47.200.0/21" />
<IpRange Subnet="104.209.128.0/17" />
<IpRange Subnet="104.210.0.0/20" />
<IpRange Subnet="191.236.192.0/18" />
<IpRange Subnet="191.237.128.0/19" />
<IpRange Subnet="191.237.160.0/22" />
<IpRange Subnet="191.237.164.0/23" />
<IpRange Subnet="191.237.168.0/21" />
<IpRange Subnet="191.237.176.0/20" />
<IpRange Subnet="23.102.206.144/28" />
<IpRange Subnet="23.102.206.160/27" />
<IpRange Subnet="23.102.206.192/26" />
<IpRange Subnet="104.47.201.16/28" />
<IpRange Subnet="104.47.201.32/27" />
<IpRange Subnet="104.47.201.64/26" />
<IpRange Subnet="104.47.201.128/25" />
<IpRange Subnet="104.47.202.0/23" />
<IpRange Subnet="104.47.204.0/22" />
<IpRange Subnet="104.209.225.16/28" />
<IpRange Subnet="104.209.225.32/27" />
<IpRange Subnet="104.209.225.64/26" />
<IpRange Subnet="104.209.225.128/25" />
<IpRange Subnet="104.209.226.0/23" />
<IpRange Subnet="104.209.228.0/22" />
<IpRange Subnet="40.84.8.48/28" />
<IpRange Subnet="40.84.8.64/26" />
<IpRange Subnet="40.84.8.128/25" />
<IpRange Subnet="40.84.10.0/23" />
<IpRange Subnet="40.84.12.0/22" />
<IpRange Subnet="40.84.32.0/19" />
<IpRange Subnet="40.84.64.0/18" />
<IpRange Subnet="25.66.8.0/21" />
<IpRange Subnet="13.68.0.0/17" />
<IpRange Subnet="13.77.64.0/18" />
<IpRange Subnet="40.79.0.0/21" />
<IpRange Subnet="40.79.8.0/27" />
<IpRange Subnet="40.79.8.32/28" />
<IpRange Subnet="40.79.8.64/27" />
<IpRange Subnet="40.79.8.96/28" />
<IpRange Subnet="40.79.9.0/24" />
<IpRange Subnet="40.79.16.0/20" />
<IpRange Subnet="40.79.32.0/20" />
<IpRange Subnet="40.79.48.0/27" />
<IpRange Subnet="40.79.48.32/28" />
<IpRange Subnet="40.79.49.0/24" />
<IpRange Subnet="40.79.56.0/21" />
<IpRange Subnet="40.79.64.0/20" />
<IpRange Subnet="40.79.80.0/21" />
<IpRange Subnet="40.79.88.32/28" />
<IpRange Subnet="40.79.89.0/24" />
<IpRange Subnet="40.79.90.0/24" />
<IpRange Subnet="40.79.91.0/28" />
<IpRange Subnet="40.79.92.0/24" />
<IpRange Subnet="40.79.93.0/28" />
<IpRange Subnet="40.81.0.0/17" />
<IpRange Subnet="40.123.16.0/27" />
<IpRange Subnet="40.123.16.32/28" />
<IpRange Subnet="40.123.17.0/24" />
<IpRange Subnet="40.123.24.0/21" />
<IpRange Subnet="40.123.32.0/20" />
<IpRange Subnet="40.123.48.0/21" />
<IpRange Subnet="40.123.120.0/21" />
<IpRange Subnet="104.208.128.0/27" />
<IpRange Subnet="104.208.128.32/28" />
<IpRange Subnet="104.208.129.0/24" />
<IpRange Subnet="104.208.136.0/21" />
<IpRange Subnet="104.208.144.0/20" />
<IpRange Subnet="104.208.160.0/21" />
<IpRange Subnet="104.208.192.0/20" />
<IpRange Subnet="104.208.208.0/24" />
<IpRange Subnet="104.208.209.0/28" />
<IpRange Subnet="104.208.216.0/21" />
<IpRange Subnet="104.208.224.0/20" />
<IpRange Subnet="104.208.240.0/21" />
<IpRange Subnet="104.208.248.0/27" />
</Region>
<Region Name="uswest">
<IpRange Subnet="23.100.32.0/20" />
<IpRange Subnet="23.101.192.0/20" />
<IpRange Subnet="104.45.208.0/20" />
<IpRange Subnet="104.45.224.0/19" />
<IpRange Subnet="137.116.184.0/21" />
<IpRange Subnet="137.117.0.0/19" />
<IpRange Subnet="137.135.0.0/18" />
<IpRange Subnet="138.91.64.0/19" />
<IpRange Subnet="157.56.160.0/21" />
<IpRange Subnet="168.61.0.0/19" />
<IpRange Subnet="168.61.64.0/20" />
<IpRange Subnet="168.62.0.0/21" />
<IpRange Subnet="168.62.8.0/22" />
<IpRange Subnet="168.62.12.0/23" />
<IpRange Subnet="168.62.14.0/24" />
<IpRange Subnet="168.62.15.0/27" />
<IpRange Subnet="168.62.15.32/28" />
<IpRange Subnet="168.62.15.96/27" />
<IpRange Subnet="168.62.15.128/25" />
<IpRange Subnet="168.62.16.0/20" />
<IpRange Subnet="168.62.192.0/19" />
<IpRange Subnet="168.63.88.0/24" />
<IpRange Subnet="23.99.64.0/19" />
<IpRange Subnet="138.91.128.0/24" />
<IpRange Subnet="138.91.129.0/26" />
<IpRange Subnet="138.91.129.64/28" />
<IpRange Subnet="138.91.136.0/21" />
<IpRange Subnet="138.91.144.0/20" />
<IpRange Subnet="138.91.160.0/19" />
<IpRange Subnet="138.91.192.0/21" />
<IpRange Subnet="138.91.224.0/19" />
<IpRange Subnet="191.238.70.0/23" />
<IpRange Subnet="13.83.32.0/24" />
<IpRange Subnet="13.83.33.0/28" />
<IpRange Subnet="13.83.40.0/21" />
<IpRange Subnet="13.83.48.0/20" />
<IpRange Subnet="13.83.64.0/21" />
<IpRange Subnet="13.83.72.0/27" />
<IpRange Subnet="23.99.0.0/19" />
<IpRange Subnet="23.99.32.0/25" />
<IpRange Subnet="23.99.32.128/28" />
<IpRange Subnet="23.99.33.0/28" />
<IpRange Subnet="23.99.34.0/23" />
<IpRange Subnet="23.99.36.0/24" />
<IpRange Subnet="23.99.37.0/26" />
<IpRange Subnet="23.99.37.80/28" />
<IpRange Subnet="23.99.37.96/27" />
<IpRange Subnet="23.99.37.128/27" />
<IpRange Subnet="23.99.37.176/28" />
<IpRange Subnet="23.99.37.192/26" />
<IpRange Subnet="23.99.38.0/24" />
<IpRange Subnet="23.99.40.0/23" />
<IpRange Subnet="23.99.42.0/24" />
<IpRange Subnet="23.99.44.0/23" />
<IpRange Subnet="23.99.46.0/24" />
<IpRange Subnet="23.99.47.0/26" />
<IpRange Subnet="23.99.47.64/28" />
<IpRange Subnet="23.99.48.0/20" />
<IpRange Subnet="40.75.128.0/17" />
<IpRange Subnet="40.83.152.0/24" />
<IpRange Subnet="40.83.153.0/28" />
<IpRange Subnet="40.83.160.0/19" />
<IpRange Subnet="40.83.227.0/27" />
<IpRange Subnet="40.112.224.0/26" />
<IpRange Subnet="65.52.112.0/20" />
<IpRange Subnet="104.40.0.0/18" />
<IpRange Subnet="104.40.64.0/19" />
<IpRange Subnet="104.42.0.0/18" />
<IpRange Subnet="104.42.64.0/20" />
<IpRange Subnet="104.42.96.0/19" />
<IpRange Subnet="104.209.16.0/23" />
<IpRange Subnet="104.209.32.0/19" />
<IpRange Subnet="104.210.32.0/19" />
<IpRange Subnet="168.63.89.0/25" />
<IpRange Subnet="168.63.89.128/26" />
<IpRange Subnet="191.236.64.0/18" />
<IpRange Subnet="191.239.0.0/18" />
<IpRange Subnet="13.64.0.0/16" />
<IpRange Subnet="13.73.32.0/19" />
<IpRange Subnet="13.83.0.0/19" />
<IpRange Subnet="13.83.33.16/28" />
<IpRange Subnet="13.83.33.32/27" />
<IpRange Subnet="13.83.33.64/26" />
<IpRange Subnet="13.83.33.128/25" />
<IpRange Subnet="13.83.34.0/23" />
<IpRange Subnet="13.83.36.0/22" />
<IpRange Subnet="13.83.72.32/27" />
<IpRange Subnet="13.83.72.64/26" />
<IpRange Subnet="13.83.72.128/25" />
<IpRange Subnet="13.83.73.0/24" />
<IpRange Subnet="13.83.74.0/23" />
<IpRange Subnet="13.83.76.0/22" />
<IpRange Subnet="13.83.80.0/20" />
<IpRange Subnet="13.83.96.0/19" />
<IpRange Subnet="13.83.128.0/17" />
<IpRange Subnet="13.86.128.0/20" />
<IpRange Subnet="13.86.144.0/28" />
<IpRange Subnet="13.86.145.0/24" />
<IpRange Subnet="13.86.152.0/21" />
<IpRange Subnet="13.86.160.0/19" />
<IpRange Subnet="13.86.192.0/21" />
<IpRange Subnet="13.86.200.0/27" />
<IpRange Subnet="13.86.201.0/24" />
<IpRange Subnet="13.86.202.0/24" />
<IpRange Subnet="13.86.208.0/20" />
<IpRange Subnet="13.86.224.0/19" />
<IpRange Subnet="13.87.128.0/19" />
<IpRange Subnet="13.87.160.0/20" />
<IpRange Subnet="13.87.176.0/28" />
<IpRange Subnet="13.87.177.0/24" />
<IpRange Subnet="13.87.184.0/21" />
<IpRange Subnet="13.87.192.0/19" />
<IpRange Subnet="13.87.224.0/21" />
<IpRange Subnet="13.87.232.0/28" />
<IpRange Subnet="13.87.233.0/24" />
<IpRange Subnet="13.87.240.0/20" />
<IpRange Subnet="13.88.0.0/19" />
<IpRange Subnet="13.88.32.0/28" />
<IpRange Subnet="13.88.33.0/24" />
<IpRange Subnet="13.88.40.0/21" />
<IpRange Subnet="13.88.48.0/20" />
<IpRange Subnet="13.88.64.0/20" />
<IpRange Subnet="13.88.80.0/21" />
<IpRange Subnet="13.88.88.0/28" />
<IpRange Subnet="13.88.89.0/24" />
<IpRange Subnet="13.88.96.0/19" />
<IpRange Subnet="13.88.128.0/20" />
<IpRange Subnet="13.88.144.0/25" />
<IpRange Subnet="13.88.144.128/26" />
<IpRange Subnet="13.88.144.192/27" />
<IpRange Subnet="13.88.145.0/25" />
<IpRange Subnet="13.88.145.128/27" />
<IpRange Subnet="13.88.146.0/24" />
<IpRange Subnet="13.88.152.0/21" />
<IpRange Subnet="13.88.160.0/19" />
<IpRange Subnet="13.91.0.0/21" />
<IpRange Subnet="13.91.8.0/28" />
<IpRange Subnet="13.91.9.0/24" />
<IpRange Subnet="13.91.16.0/20" />
<IpRange Subnet="13.91.32.0/19" />
<IpRange Subnet="13.91.152.0/28" />
<IpRange Subnet="13.91.153.0/24" />
<IpRange Subnet="13.91.160.0/19" />
<IpRange Subnet="13.91.192.0/20" />
<IpRange Subnet="40.78.0.0/17" />
<IpRange Subnet="40.81.128.0/17" />
<IpRange Subnet="40.112.128.0/18" />
<IpRange Subnet="40.112.192.0/19" />
<IpRange Subnet="40.112.224.64/26" />
<IpRange Subnet="40.112.225.0/24" />
<IpRange Subnet="40.112.232.0/21" />
<IpRange Subnet="40.112.240.0/20" />
<IpRange Subnet="40.118.128.0/17" />
<IpRange Subnet="40.80.152.0/21" />
<IpRange Subnet="40.83.128.0/20" />
<IpRange Subnet="40.83.144.0/21" />
<IpRange Subnet="40.83.153.16/28" />
<IpRange Subnet="40.83.153.32/27" />
<IpRange Subnet="40.83.153.64/26" />
<IpRange Subnet="40.83.153.128/25" />
<IpRange Subnet="40.83.154.0/23" />
<IpRange Subnet="40.83.156.0/22" />
<IpRange Subnet="40.85.144.0/20" />
<IpRange Subnet="40.86.160.0/19" />
<IpRange Subnet="40.112.224.128/25" />
<IpRange Subnet="40.112.226.0/23" />
<IpRange Subnet="40.112.228.0/22" />
<IpRange Subnet="13.64.0.0/16" />
<IpRange Subnet="13.73.32.0/19" />
<IpRange Subnet="104.42.128.0/17" />
</Region>
<Region Name="usnorth">
<IpRange Subnet="23.98.54.0/24" />
<IpRange Subnet="23.100.72.0/21" />
<IpRange Subnet="23.100.224.0/20" />
<IpRange Subnet="40.116.0.0/28" />
<IpRange Subnet="40.116.0.32/27" />
<IpRange Subnet="40.116.1.0/24" />
<IpRange Subnet="40.116.24.0/21" />
<IpRange Subnet="40.116.32.0/21" />
<IpRange Subnet="40.116.40.0/28" />
<IpRange Subnet="40.116.40.32/27" />
<IpRange Subnet="40.116.41.0/24" />
<IpRange Subnet="40.116.64.0/20" />
<IpRange Subnet="40.116.120.0/27" />
<IpRange Subnet="40.116.120.32/28" />
<IpRange Subnet="40.116.120.64/27" />
<IpRange Subnet="40.116.120.96/28" />
<IpRange Subnet="40.116.120.128/27" />
<IpRange Subnet="65.52.0.0/19" />
<IpRange Subnet="65.52.48.0/20" />
<IpRange Subnet="65.52.106.16/28" />
<IpRange Subnet="65.52.106.128/27" />
<IpRange Subnet="65.52.106.240/28" />
<IpRange Subnet="65.52.192.0/19" />
<IpRange Subnet="65.52.232.0/21" />
<IpRange Subnet="65.52.240.0/21" />
<IpRange Subnet="157.55.24.0/21" />
<IpRange Subnet="157.55.60.224/27" />
<IpRange Subnet="157.55.73.32/28" />
<IpRange Subnet="157.55.136.0/21" />
<IpRange Subnet="157.55.160.0/20" />
<IpRange Subnet="157.55.208.0/21" />
<IpRange Subnet="157.55.252.0/22" />
<IpRange Subnet="157.56.8.0/21" />
<IpRange Subnet="157.56.24.160/27" />
<IpRange Subnet="157.56.24.192/28" />
<IpRange Subnet="157.56.28.0/22" />
<IpRange Subnet="168.62.96.0/19" />
<IpRange Subnet="168.62.224.0/20" />
<IpRange Subnet="168.62.240.0/21" />
<IpRange Subnet="168.62.248.0/22" />
<IpRange Subnet="191.233.144.0/24" />
<IpRange Subnet="207.46.192.0/24" />
<IpRange Subnet="207.46.193.0/25" />
<IpRange Subnet="207.46.193.144/28" />
<IpRange Subnet="207.46.193.160/27" />
<IpRange Subnet="207.46.193.192/26" />
<IpRange Subnet="207.46.194.0/23" />
<IpRange Subnet="207.46.196.0/23" />
<IpRange Subnet="207.46.198.0/24" />
<IpRange Subnet="207.46.199.0/26" />
<IpRange Subnet="207.46.199.64/27" />
<IpRange Subnet="207.46.199.128/25" />
<IpRange Subnet="207.46.200.0/26" />
<IpRange Subnet="207.46.200.64/28" />
<IpRange Subnet="207.46.200.96/27" />
<IpRange Subnet="207.46.200.128/25" />
<IpRange Subnet="207.46.201.0/24" />
<IpRange Subnet="207.46.202.0/24" />
<IpRange Subnet="207.46.203.0/26" />
<IpRange Subnet="207.46.203.128/26" />
<IpRange Subnet="207.46.203.192/27" />
<IpRange Subnet="207.46.204.0/22" />
<IpRange Subnet="209.240.220.0/23" />
<IpRange Subnet="23.96.176.0/20" />
<IpRange Subnet="23.96.192.0/18" />
<IpRange Subnet="23.98.48.0/27" />
<IpRange Subnet="23.98.48.80/28" />
<IpRange Subnet="23.98.48.96/27" />
<IpRange Subnet="23.98.48.128/27" />
<IpRange Subnet="23.98.48.160/28" />
<IpRange Subnet="23.98.48.192/26" />
<IpRange Subnet="23.98.49.0/24" />
<IpRange Subnet="23.98.50.0/23" />
<IpRange Subnet="23.98.52.0/23" />
<IpRange Subnet="23.98.55.0/25" />
<IpRange Subnet="23.98.55.128/27" />
<IpRange Subnet="23.101.160.0/20" />
<IpRange Subnet="191.233.168.0/21" />
<IpRange Subnet="191.233.176.0/21" />
<IpRange Subnet="191.236.128.0/18" />
<IpRange Subnet="23.98.55.160/27" />
<IpRange Subnet="23.98.55.192/26" />
<IpRange Subnet="13.71.192.0/18" />
</Region>
<Region Name="europenorth">
<IpRange Subnet="13.70.209.0/24" />
<IpRange Subnet="40.113.24.0/24" />
<IpRange Subnet="65.52.64.0/20" />
<IpRange Subnet="65.52.224.0/21" />
<IpRange Subnet="94.245.88.0/21" />
<IpRange Subnet="94.245.104.0/21" />
<IpRange Subnet="94.245.112.0/23" />
<IpRange Subnet="94.245.114.64/26" />
<IpRange Subnet="94.245.114.128/25" />
<IpRange Subnet="94.245.115.0/24" />
<IpRange Subnet="94.245.116.0/24" />
<IpRange Subnet="94.245.117.0/26" />
<IpRange Subnet="94.245.117.96/27" />
<IpRange Subnet="94.245.117.128/25" />
<IpRange Subnet="94.245.118.0/27" />
<IpRange Subnet="94.245.120.0/25" />
<IpRange Subnet="94.245.120.128/28" />
<IpRange Subnet="94.245.120.160/27" />
<IpRange Subnet="94.245.120.192/26" />
<IpRange Subnet="94.245.121.0/24" />
<IpRange Subnet="94.245.122.0/24" />
<IpRange Subnet="94.245.123.0/25" />
<IpRange Subnet="94.245.123.128/27" />
<IpRange Subnet="94.245.123.176/28" />
<IpRange Subnet="94.245.123.192/26" />
<IpRange Subnet="94.245.124.0/22" />
<IpRange Subnet="104.41.233.0/24" />
<IpRange Subnet="137.116.224.0/19" />
<IpRange Subnet="168.61.80.0/20" />
<IpRange Subnet="168.61.96.0/19" />
<IpRange Subnet="168.63.32.0/19" />
<IpRange Subnet="168.63.64.0/20" />
<IpRange Subnet="168.63.80.0/21" />
<IpRange Subnet="168.63.92.0/22" />
<IpRange Subnet="193.149.88.0/21" />
<IpRange Subnet="23.100.48.0/20" />
<IpRange Subnet="23.101.48.0/20" />
<IpRange Subnet="23.102.0.0/18" />
<IpRange Subnet="104.45.80.0/20" />
<IpRange Subnet="104.45.96.0/19" />
<IpRange Subnet="137.135.128.0/20" />
<IpRange Subnet="137.135.160.0/19" />
<IpRange Subnet="137.135.192.0/25" />
<IpRange Subnet="137.135.192.128/28" />
<IpRange Subnet="137.135.192.160/27" />
<IpRange Subnet="137.135.192.192/26" />
<IpRange Subnet="137.135.193.0/24" />
<IpRange Subnet="137.135.194.0/23" />
<IpRange Subnet="137.135.196.0/22" />
<IpRange Subnet="137.135.200.0/21" />
<IpRange Subnet="137.135.208.0/20" />
<IpRange Subnet="137.135.224.0/19" />
<IpRange Subnet="138.91.48.0/20" />
<IpRange Subnet="191.235.128.0/18" />
<IpRange Subnet="191.235.192.0/24" />
<IpRange Subnet="191.235.193.0/26" />
<IpRange Subnet="191.235.193.64/27" />
<IpRange Subnet="191.235.193.96/28" />
<IpRange Subnet="191.235.193.128/25" />
<IpRange Subnet="191.235.194.0/23" />
<IpRange Subnet="191.235.208.0/20" />
<IpRange Subnet="191.235.255.0/26" />
<IpRange Subnet="191.235.255.64/27" />
<IpRange Subnet="191.235.255.128/25" />
<IpRange Subnet="191.237.192.0/23" />
<IpRange Subnet="191.237.194.0/24" />
<IpRange Subnet="191.237.196.0/28" />
<IpRange Subnet="191.237.208.0/20" />
<IpRange Subnet="191.238.96.0/19" />
<IpRange Subnet="191.239.208.0/20" />
<IpRange Subnet="40.127.128.0/19" />
<IpRange Subnet="40.127.160.0/19" />
<IpRange Subnet="13.69.128.0/17" />
<IpRange Subnet="13.70.192.0/20" />
<IpRange Subnet="13.70.208.0/25" />
<IpRange Subnet="13.70.208.128/27" />
<IpRange Subnet="13.70.208.176/28" />
<IpRange Subnet="13.70.208.192/26" />
<IpRange Subnet="13.70.210.0/23" />
<IpRange Subnet="13.70.212.0/22" />
<IpRange Subnet="13.70.232.0/21" />
<IpRange Subnet="13.70.240.0/20" />
<IpRange Subnet="13.74.0.16/28" />
<IpRange Subnet="13.74.0.32/27" />
<IpRange Subnet="13.74.0.64/26" />
<IpRange Subnet="13.74.0.128/25" />
<IpRange Subnet="13.74.3.0/24" />
<IpRange Subnet="13.74.4.0/22" />
<IpRange Subnet="13.74.72.160/27" />
<IpRange Subnet="13.74.72.192/26" />
<IpRange Subnet="13.74.75.64/26" />
<IpRange Subnet="13.74.75.128/25" />
<IpRange Subnet="13.74.76.0/24" />
<IpRange Subnet="13.74.77.16/28" />
<IpRange Subnet="13.74.77.32/27" />
<IpRange Subnet="13.74.77.64/26" />
<IpRange Subnet="13.74.77.128/25" />
<IpRange Subnet="13.74.79.16/28" />
<IpRange Subnet="13.74.79.32/27" />
<IpRange Subnet="13.74.79.64/26" />
<IpRange Subnet="13.74.79.128/25" />
<IpRange Subnet="13.74.144.0/20" />
<IpRange Subnet="13.74.192.0/18" />
<IpRange Subnet="13.79.0.0/17" />
<IpRange Subnet="13.79.176.96/27" />
<IpRange Subnet="13.79.176.128/25" />
<IpRange Subnet="13.79.177.0/24" />
<IpRange Subnet="13.79.178.0/23" />
<IpRange Subnet="13.79.180.0/22" />
<IpRange Subnet="13.79.184.0/21" />
<IpRange Subnet="13.79.249.32/27" />
<IpRange Subnet="13.79.249.64/26" />
<IpRange Subnet="13.79.249.128/25" />
<IpRange Subnet="13.79.251.0/24" />
<IpRange Subnet="13.79.252.0/22" />
<IpRange Subnet="40.74.144.0/20" />
<IpRange Subnet="40.79.128.0/17" />
<IpRange Subnet="40.85.0.0/17" />
<IpRange Subnet="40.85.128.0/20" />
<IpRange Subnet="40.87.128.0/19" />
<IpRange Subnet="40.112.36.0/26" />
<IpRange Subnet="40.112.64.0/19" />
<IpRange Subnet="40.113.0.0/20" />
<IpRange Subnet="40.113.16.0/21" />
<IpRange Subnet="40.113.25.0/24" />
<IpRange Subnet="40.113.26.0/23" />
<IpRange Subnet="40.113.28.0/22" />
<IpRange Subnet="40.113.32.0/19" />
<IpRange Subnet="40.113.64.0/19" />
<IpRange Subnet="40.115.96.0/19" />
<IpRange Subnet="40.127.96.0/20" />
<IpRange Subnet="40.127.192.0/18" />
<IpRange Subnet="104.41.192.0/19" />
<IpRange Subnet="104.41.224.0/21" />
<IpRange Subnet="104.41.232.0/24" />
<IpRange Subnet="104.41.234.0/23" />
<IpRange Subnet="104.41.236.0/22" />
<IpRange Subnet="104.41.240.0/20" />
<IpRange Subnet="104.46.8.0/21" />
<IpRange Subnet="104.46.64.0/19" />
<IpRange Subnet="13.74.0.0/28" />
<IpRange Subnet="13.74.1.0/24" />
<IpRange Subnet="13.74.2.0/24" />
<IpRange Subnet="13.74.8.0/21" />
<IpRange Subnet="13.74.16.0/20" />
<IpRange Subnet="13.74.32.0/19" />
<IpRange Subnet="13.74.64.0/21" />
<IpRange Subnet="13.74.72.0/25" />
<IpRange Subnet="13.74.72.128/27" />
<IpRange Subnet="13.74.73.0/24" />
<IpRange Subnet="13.74.75.16/28" />
<IpRange Subnet="13.74.75.32/27" />
<IpRange Subnet="13.74.79.0/28" />
<IpRange Subnet="13.74.80.0/20" />
<IpRange Subnet="13.74.96.0/19" />
<IpRange Subnet="13.74.128.0/20" />
<IpRange Subnet="13.79.192.0/19" />
<IpRange Subnet="13.79.224.0/20" />
<IpRange Subnet="13.79.240.0/21" />
<IpRange Subnet="40.69.0.0/19" />
<IpRange Subnet="40.69.32.0/20" />
<IpRange Subnet="40.69.48.0/28" />
<IpRange Subnet="40.69.49.0/24" />
<IpRange Subnet="40.69.56.0/21" />
</Region>
<Region Name="uscentral">
<IpRange Subnet="23.100.80.0/21" />
<IpRange Subnet="23.101.112.0/20" />
<IpRange Subnet="168.61.128.0/17" />
<IpRange Subnet="193.149.72.0/21" />
<IpRange Subnet="23.100.240.0/20" />
<IpRange Subnet="23.99.128.0/19" />
<IpRange Subnet="23.99.160.0/22" />
<IpRange Subnet="23.99.164.0/23" />
<IpRange Subnet="23.99.166.0/24" />
<IpRange Subnet="23.99.167.0/27" />
<IpRange Subnet="23.99.168.0/23" />
<IpRange Subnet="23.99.176.0/20" />
<IpRange Subnet="23.99.192.0/18" />
<IpRange Subnet="40.78.128.0/19" />
<IpRange Subnet="40.113.192.0/20" />
<IpRange Subnet="40.113.208.0/24" />
<IpRange Subnet="40.113.209.0/28" />
<IpRange Subnet="40.113.216.0/21" />
<IpRange Subnet="40.113.224.0/20" />
<IpRange Subnet="40.113.240.0/21" />
<IpRange Subnet="40.113.248.0/24" />
<IpRange Subnet="40.113.249.0/28" />
<IpRange Subnet="104.43.128.0/17" />
<IpRange Subnet="23.99.167.32/27" />
<IpRange Subnet="23.99.167.64/26" />
<IpRange Subnet="23.99.167.128/25" />
<IpRange Subnet="23.99.170.0/23" />
<IpRange Subnet="23.99.172.0/22" />
<IpRange Subnet="40.78.160.0/19" />
<IpRange Subnet="40.113.209.16/28" />
<IpRange Subnet="40.113.209.32/27" />
<IpRange Subnet="40.113.209.64/26" />
<IpRange Subnet="40.113.209.128/25" />
<IpRange Subnet="40.113.210.0/23" />
<IpRange Subnet="40.113.212.0/22" />
<IpRange Subnet="40.113.249.16/28" />
<IpRange Subnet="40.113.249.32/27" />
<IpRange Subnet="40.113.249.64/26" />
<IpRange Subnet="40.113.249.128/25" />
<IpRange Subnet="40.113.250.0/23" />
<IpRange Subnet="40.113.252.0/22" />
<IpRange Subnet="13.67.128.0/17" />
<IpRange Subnet="13.86.0.0/17" />
<IpRange Subnet="13.89.0.0/18" />
<IpRange Subnet="13.89.64.0/28" />
<IpRange Subnet="13.89.65.0/24" />
<IpRange Subnet="13.89.72.0/21" />
<IpRange Subnet="13.89.80.0/20" />
<IpRange Subnet="13.89.96.0/19" />
<IpRange Subnet="40.77.0.0/17" />
<IpRange Subnet="40.83.0.0/18" />
<IpRange Subnet="40.86.0.0/17" />
<IpRange Subnet="40.122.0.0/16" />
<IpRange Subnet="104.208.0.0/18" />
</Region>
<Region Name="asiaeast">
<IpRange Subnet="23.98.32.0/21" />
<IpRange Subnet="23.98.40.0/22" />
<IpRange Subnet="23.100.88.0/21" />
<IpRange Subnet="23.101.0.0/20" />
<IpRange Subnet="65.52.160.0/19" />
<IpRange Subnet="104.46.24.0/24" />
<IpRange Subnet="104.46.26.0/24" />
<IpRange Subnet="104.46.160.0/19" />
<IpRange Subnet="111.221.64.0/22" />
<IpRange Subnet="111.221.69.0/25" />
<IpRange Subnet="134.170.192.0/21" />
<IpRange Subnet="137.116.160.0/20" />
<IpRange Subnet="168.63.128.0/19" />
<IpRange Subnet="168.63.192.0/19" />
<IpRange Subnet="207.46.87.0/24" />
<IpRange Subnet="207.46.89.16/28" />
<IpRange Subnet="207.46.95.48/28" />
<IpRange Subnet="207.46.128.0/19" />
<IpRange Subnet="13.70.0.0/18" />
<IpRange Subnet="13.72.192.0/19" />
<IpRange Subnet="13.75.0.0/17" />
<IpRange Subnet="13.88.208.0/20" />
<IpRange Subnet="23.97.64.0/20" />
<IpRange Subnet="23.97.80.0/28" />
<IpRange Subnet="23.98.44.0/24" />
<IpRange Subnet="23.99.96.0/19" />
<IpRange Subnet="23.102.224.0/19" />
<IpRange Subnet="40.83.64.0/18" />
<IpRange Subnet="104.46.25.0/24" />
<IpRange Subnet="104.46.27.0/24" />
<IpRange Subnet="104.208.80.0/20" />
<IpRange Subnet="104.208.96.0/19" />
<IpRange Subnet="191.234.2.16/28" />
<IpRange Subnet="191.234.2.32/27" />
<IpRange Subnet="191.234.2.64/26" />
<IpRange Subnet="191.234.2.128/26" />
<IpRange Subnet="191.234.3.0/24" />
<IpRange Subnet="191.234.16.0/20" />
<IpRange Subnet="191.237.238.0/28" />
<IpRange Subnet="191.237.238.32/27" />
<IpRange Subnet="191.237.238.64/27" />
<IpRange Subnet="191.237.238.112/28" />
</Region>
<Region Name="asiasoutheast">
<IpRange Subnet="23.97.48.0/20" />
<IpRange Subnet="23.100.112.0/21" />
<IpRange Subnet="23.101.16.0/20" />
<IpRange Subnet="104.43.41.0/24" />
<IpRange Subnet="104.46.128.0/19" />
<IpRange Subnet="104.215.201.0/24" />
<IpRange Subnet="111.221.80.0/20" />
<IpRange Subnet="111.221.96.0/20" />
<IpRange Subnet="137.116.128.0/19" />
<IpRange Subnet="138.91.32.0/20" />
<IpRange Subnet="168.63.160.0/25" />
<IpRange Subnet="168.63.160.128/27" />
<IpRange Subnet="168.63.160.192/26" />
<IpRange Subnet="168.63.161.0/24" />
<IpRange Subnet="168.63.162.0/25" />
<IpRange Subnet="168.63.162.128/27" />
<IpRange Subnet="168.63.162.176/28" />
<IpRange Subnet="168.63.162.192/26" />
<IpRange Subnet="168.63.163.0/24" />
<IpRange Subnet="168.63.164.0/22" />
<IpRange Subnet="168.63.168.0/21" />
<IpRange Subnet="168.63.176.0/20" />
<IpRange Subnet="168.63.224.0/19" />
<IpRange Subnet="207.46.48.0/21" />
<IpRange Subnet="207.46.56.0/24" />
<IpRange Subnet="207.46.58.0/24" />
<IpRange Subnet="207.46.59.0/26" />
<IpRange Subnet="207.46.59.128/25" />
<IpRange Subnet="207.46.60.0/23" />
<IpRange Subnet="207.46.62.0/24" />
<IpRange Subnet="207.46.63.0/26" />
<IpRange Subnet="207.46.63.80/28" />
<IpRange Subnet="207.46.63.96/27" />
<IpRange Subnet="207.46.63.128/25" />
<IpRange Subnet="23.98.64.0/20" />
<IpRange Subnet="168.63.90.0/27" />
<IpRange Subnet="168.63.90.32/28" />
<IpRange Subnet="168.63.90.64/27" />
<IpRange Subnet="191.238.64.0/24" />
<IpRange Subnet="207.46.224.0/20" />
<IpRange Subnet="13.67.0.0/17" />
<IpRange Subnet="13.76.0.0/16" />
<IpRange Subnet="104.43.0.0/28" />
<IpRange Subnet="104.43.1.0/24" />
<IpRange Subnet="104.43.8.0/21" />
<IpRange Subnet="104.43.16.0/20" />
<IpRange Subnet="104.43.32.0/21" />
<IpRange Subnet="104.43.64.0/20" />
<IpRange Subnet="104.43.80.0/27" />
<IpRange Subnet="104.43.120.0/28" />
<IpRange Subnet="104.43.121.0/24" />
<IpRange Subnet="104.215.128.0/19" />
<IpRange Subnet="104.215.160.0/28" />
<IpRange Subnet="104.215.161.0/24" />
<IpRange Subnet="104.215.168.0/21" />
<IpRange Subnet="104.215.176.0/20" />
<IpRange Subnet="104.215.192.0/21" />
<IpRange Subnet="104.215.224.0/20" />
<IpRange Subnet="104.215.240.0/25" />
<IpRange Subnet="104.215.240.128/27" />
<IpRange Subnet="104.215.240.160/28" />
<IpRange Subnet="104.215.240.192/27" />
<IpRange Subnet="104.215.248.0/21" />
</Region>
<Region Name="ussouth">
<IpRange Subnet="23.98.174.0/24" />
<IpRange Subnet="23.98.208.0/23" />
<IpRange Subnet="40.84.240.0/24" />
<IpRange Subnet="65.52.32.0/21" />
<IpRange Subnet="65.54.48.0/22" />
<IpRange Subnet="65.54.52.0/26" />
<IpRange Subnet="65.54.52.64/27" />
<IpRange Subnet="65.54.52.128/25" />
<IpRange Subnet="65.54.53.0/24" />
<IpRange Subnet="65.55.80.0/21" />
<IpRange Subnet="65.55.88.0/22" />
<IpRange Subnet="65.55.92.0/23" />
<IpRange Subnet="65.55.94.0/24" />
<IpRange Subnet="65.55.95.0/26" />
<IpRange Subnet="65.55.95.64/27" />
<IpRange Subnet="65.55.95.128/25" />
<IpRange Subnet="70.37.48.0/20" />
<IpRange Subnet="70.37.64.0/19" />
<IpRange Subnet="70.37.96.0/20" />
<IpRange Subnet="70.37.112.0/22" />
<IpRange Subnet="70.37.116.0/23" />
<IpRange Subnet="70.37.118.0/24" />
<IpRange Subnet="70.37.119.128/26" />
<IpRange Subnet="70.37.119.224/27" />
<IpRange Subnet="70.37.120.0/22" />
<IpRange Subnet="70.37.124.0/23" />
<IpRange Subnet="70.37.126.0/26" />
<IpRange Subnet="70.37.126.64/27" />
<IpRange Subnet="70.37.126.128/27" />
<IpRange Subnet="70.37.126.192/26" />
<IpRange Subnet="70.37.127.0/26" />
<IpRange Subnet="70.37.127.240/28" />
<IpRange Subnet="70.37.160.0/21" />
<IpRange Subnet="104.47.208.0/23" />
<IpRange Subnet="157.55.80.0/21" />
<IpRange Subnet="157.55.103.32/27" />
<IpRange Subnet="157.55.153.224/28" />
<IpRange Subnet="157.55.176.0/20" />
<IpRange Subnet="157.55.192.0/21" />
<IpRange Subnet="157.55.200.0/22" />
<IpRange Subnet="168.62.128.0/19" />
<IpRange Subnet="13.65.0.0/16" />
<IpRange Subnet="13.66.32.0/19" />
<IpRange Subnet="13.66.64.0/18" />
<IpRange Subnet="23.98.128.0/19" />
<IpRange Subnet="23.98.160.0/25" />
<IpRange Subnet="23.98.160.128/27" />
<IpRange Subnet="23.98.160.160/28" />
<IpRange Subnet="23.98.160.208/28" />
<IpRange Subnet="23.98.160.224/27" />
<IpRange Subnet="23.98.161.0/24" />
<IpRange Subnet="23.98.162.0/28" />
<IpRange Subnet="23.98.162.32/28" />
<IpRange Subnet="23.98.162.64/26" />
<IpRange Subnet="23.98.162.128/27" />
<IpRange Subnet="23.98.162.176/28" />
<IpRange Subnet="23.98.162.192/26" />
<IpRange Subnet="23.98.164.0/23" />
<IpRange Subnet="23.98.167.0/24" />
<IpRange Subnet="23.98.169.0/24" />
<IpRange Subnet="23.98.170.0/28" />
<IpRange Subnet="23.98.170.32/27" />
<IpRange Subnet="23.98.170.64/26" />
<IpRange Subnet="23.98.170.128/25" />
<IpRange Subnet="23.98.171.0/24" />
<IpRange Subnet="23.98.173.0/24" />
<IpRange Subnet="23.98.175.0/24" />
<IpRange Subnet="23.98.176.0/20" />
<IpRange Subnet="23.98.192.0/25" />
<IpRange Subnet="23.98.210.0/23" />
<IpRange Subnet="23.98.212.0/22" />
<IpRange Subnet="23.98.216.0/21" />
<IpRange Subnet="23.98.255.0/27" />
<IpRange Subnet="23.98.255.32/28" />
<IpRange Subnet="23.98.255.64/26" />
<IpRange Subnet="23.100.120.0/21" />
<IpRange Subnet="23.100.192.0/19" />
<IpRange Subnet="23.101.176.0/20" />
<IpRange Subnet="23.102.128.0/18" />
<IpRange Subnet="40.74.160.0/20" />
<IpRange Subnet="40.74.192.0/18" />
<IpRange Subnet="104.44.128.0/19" />
<IpRange Subnet="104.210.128.0/19" />
<IpRange Subnet="104.210.184.0/21" />
<IpRange Subnet="104.210.192.0/19" />
<IpRange Subnet="104.214.0.0/17" />
<IpRange Subnet="191.238.136.0/21" />
<IpRange Subnet="191.238.144.0/20" />
<IpRange Subnet="191.238.160.0/19" />
<IpRange Subnet="191.238.224.0/19" />
<IpRange Subnet="13.66.0.0/19" />
<IpRange Subnet="40.74.176.0/20" />
<IpRange Subnet="40.80.160.0/19" />
<IpRange Subnet="40.80.192.0/18" />
<IpRange Subnet="40.84.128.0/18" />
<IpRange Subnet="40.84.192.0/19" />
<IpRange Subnet="40.84.224.0/20" />
<IpRange Subnet="40.84.241.16/28" />
<IpRange Subnet="40.84.241.32/27" />
<IpRange Subnet="40.84.241.64/26" />
<IpRange Subnet="40.84.241.128/25" />
<IpRange Subnet="40.84.242.0/23" />
<IpRange Subnet="40.84.244.0/22" />
<IpRange Subnet="40.86.136.0/21" />
<IpRange Subnet="40.86.144.0/20" />
<IpRange Subnet="40.124.0.0/18" />
<IpRange Subnet="104.215.64.0/18" />
<IpRange Subnet="13.84.0.16/28" />
<IpRange Subnet="13.84.0.32/27" />
<IpRange Subnet="13.84.0.64/26" />
<IpRange Subnet="13.84.0.128/25" />
<IpRange Subnet="13.84.2.0/23" />
<IpRange Subnet="13.84.4.0/22" />
<IpRange Subnet="13.84.56.0/21" />
<IpRange Subnet="13.84.64.0/18" />
<IpRange Subnet="13.84.128.0/17" />
<IpRange Subnet="13.85.0.0/16" />
</Region>
<Region Name="japanwest">
<IpRange Subnet="23.98.56.0/26" />
<IpRange Subnet="23.98.56.64/27" />
<IpRange Subnet="23.98.56.96/28" />
<IpRange Subnet="23.98.56.128/26" />
<IpRange Subnet="23.100.104.0/21" />
<IpRange Subnet="138.91.16.0/20" />
<IpRange Subnet="191.233.32.0/19" />
<IpRange Subnet="191.237.236.0/24" />
<IpRange Subnet="191.238.80.0/20" />
<IpRange Subnet="104.46.224.0/20" />
<IpRange Subnet="40.74.64.0/20" />
<IpRange Subnet="40.74.80.0/20" />
<IpRange Subnet="40.74.96.0/19" />
<IpRange Subnet="40.74.128.0/20" />
<IpRange Subnet="40.80.64.0/18" />
<IpRange Subnet="40.80.128.0/20" />
<IpRange Subnet="104.214.128.0/19" />
<IpRange Subnet="104.215.0.0/18" />
<IpRange Subnet="191.238.68.0/26" />
<IpRange Subnet="191.238.69.0/24" />
<IpRange Subnet="191.239.96.0/19" />
</Region>
<Region Name="japaneast">
<IpRange Subnet="23.98.57.0/25" />
<IpRange Subnet="23.98.57.128/27" />
<IpRange Subnet="23.100.96.0/21" />
<IpRange Subnet="138.91.0.0/20" />
<IpRange Subnet="191.234.138.0/24" />
<IpRange Subnet="104.46.208.0/20" />
<IpRange Subnet="13.71.128.0/18" />
<IpRange Subnet="13.73.0.0/19" />
<IpRange Subnet="13.78.0.0/17" />
<IpRange Subnet="23.102.64.0/20" />
<IpRange Subnet="23.102.80.0/24" />
<IpRange Subnet="40.115.128.0/17" />
<IpRange Subnet="104.41.160.0/19" />
<IpRange Subnet="191.237.240.0/26" />
<IpRange Subnet="191.237.240.64/28" />
<IpRange Subnet="191.237.241.0/24" />
</Region>
<Region Name="brazilsouth">
<IpRange Subnet="23.97.96.0/20" />
<IpRange Subnet="23.97.112.0/25" />
<IpRange Subnet="23.97.112.128/28" />
<IpRange Subnet="104.41.0.0/20" />
<IpRange Subnet="104.41.16.0/26" />
<IpRange Subnet="104.41.16.64/27" />
<IpRange Subnet="104.41.17.0/24" />
<IpRange Subnet="104.41.18.0/23" />
<IpRange Subnet="104.41.24.0/21" />
<IpRange Subnet="104.41.32.0/19" />
<IpRange Subnet="191.232.32.0/21" />
<IpRange Subnet="191.237.248.0/21" />
<IpRange Subnet="191.239.240.0/20" />
<IpRange Subnet="104.41.16.96/27" />
<IpRange Subnet="104.41.16.128/25" />
<IpRange Subnet="104.41.20.0/22" />
<IpRange Subnet="191.232.40.0/21" />
<IpRange Subnet="191.232.48.0/20" />
</Region>
<Region Name="australiaeast">
<IpRange Subnet="13.70.64.0/18" />
<IpRange Subnet="13.72.224.0/19" />
<IpRange Subnet="13.73.192.0/20" />
<IpRange Subnet="13.75.128.0/17" />
<IpRange Subnet="23.101.208.0/20" />
<IpRange Subnet="40.78.192.0/19" />
<IpRange Subnet="40.126.224.0/19" />
<IpRange Subnet="104.46.29.0/24" />
<IpRange Subnet="104.46.30.0/23" />
<IpRange Subnet="104.46.240.0/20" />
<IpRange Subnet="104.209.80.0/20" />
<IpRange Subnet="104.210.64.0/18" />
<IpRange Subnet="191.238.66.0/25" />
<IpRange Subnet="191.238.66.128/27" />
<IpRange Subnet="191.238.66.160/28" />
<IpRange Subnet="191.238.67.0/24" />
<IpRange Subnet="191.239.64.0/19" />
</Region>
<Region Name="australiasoutheast">
<IpRange Subnet="13.70.128.0/18" />
<IpRange Subnet="13.73.96.0/19" />
<IpRange Subnet="13.77.0.0/18" />
<IpRange Subnet="23.101.224.0/19" />
<IpRange Subnet="40.78.224.0/19" />
<IpRange Subnet="40.115.64.0/19" />
<IpRange Subnet="40.127.64.0/19" />
<IpRange Subnet="104.46.28.0/24" />
<IpRange Subnet="104.209.64.0/20" />
<IpRange Subnet="191.239.160.0/19" />
<IpRange Subnet="191.239.192.0/25" />
<IpRange Subnet="191.239.192.128/27" />
<IpRange Subnet="191.239.192.160/28" />
<IpRange Subnet="191.239.192.192/27" />
<IpRange Subnet="191.239.193.0/24" />
<IpRange Subnet="191.239.194.0/24" />
<IpRange Subnet="191.239.195.0/28" />
</Region>
<Region Name="indiacentral">
<IpRange Subnet="104.211.64.0/28" />
<IpRange Subnet="104.211.65.0/24" />
<IpRange Subnet="104.211.72.0/21" />
<IpRange Subnet="104.211.80.0/20" />
<IpRange Subnet="104.211.96.0/21" />
<IpRange Subnet="104.211.104.0/26" />
<IpRange Subnet="104.211.104.64/27" />
<IpRange Subnet="104.211.104.96/28" />
<IpRange Subnet="104.211.64.16/28" />
<IpRange Subnet="104.211.64.32/27" />
<IpRange Subnet="104.211.64.64/26" />
<IpRange Subnet="104.211.64.128/25" />
<IpRange Subnet="104.211.66.0/23" />
<IpRange Subnet="104.211.68.0/22" />
<IpRange Subnet="104.211.104.112/28" />
<IpRange Subnet="104.211.104.128/25" />
<IpRange Subnet="104.211.105.0/24" />
<IpRange Subnet="104.211.106.0/23" />
<IpRange Subnet="104.211.108.0/22" />
<IpRange Subnet="104.211.112.0/20" />
<IpRange Subnet="104.47.210.0/23" />
<IpRange Subnet="13.71.0.0/18" />
</Region>
<Region Name="indiawest">
<IpRange Subnet="104.211.128.0/28" />
<IpRange Subnet="104.211.129.0/24" />
<IpRange Subnet="104.211.136.0/21" />
<IpRange Subnet="104.211.144.0/20" />
<IpRange Subnet="104.211.160.0/21" />
<IpRange Subnet="104.211.168.0/27" />
<IpRange Subnet="104.211.168.32/28" />
<IpRange Subnet="104.211.168.64/27" />
<IpRange Subnet="104.211.128.16/28" />
<IpRange Subnet="104.211.128.32/27" />
<IpRange Subnet="104.211.128.64/26" />
<IpRange Subnet="104.211.128.128/25" />
<IpRange Subnet="104.211.130.0/23" />
<IpRange Subnet="104.211.132.0/22" />
<IpRange Subnet="104.211.168.48/28" />
<IpRange Subnet="104.211.168.96/27" />
<IpRange Subnet="104.211.168.128/25" />
<IpRange Subnet="104.211.169.0/24" />
<IpRange Subnet="104.211.170.0/23" />
<IpRange Subnet="104.211.172.0/22" />
<IpRange Subnet="104.211.176.0/20" />
<IpRange Subnet="104.47.212.0/23" />
</Region>
<Region Name="indiasouth">
<IpRange Subnet="104.211.192.0/28" />
<IpRange Subnet="104.211.193.0/24" />
<IpRange Subnet="104.211.200.0/21" />
<IpRange Subnet="104.211.208.0/20" />
<IpRange Subnet="104.211.224.0/21" />
<IpRange Subnet="104.211.232.0/26" />
<IpRange Subnet="104.211.232.64/27" />
<IpRange Subnet="104.211.232.96/28" />
<IpRange Subnet="104.211.232.128/27" />
<IpRange Subnet="104.211.192.16/28" />
<IpRange Subnet="104.211.192.32/27" />
<IpRange Subnet="104.211.192.64/26" />
<IpRange Subnet="104.211.192.128/25" />
<IpRange Subnet="104.211.194.0/23" />
<IpRange Subnet="104.211.196.0/22" />
<IpRange Subnet="104.211.232.112/28" />
<IpRange Subnet="104.211.232.160/27" />
<IpRange Subnet="104.211.232.192/26" />
<IpRange Subnet="104.211.233.0/24" />
<IpRange Subnet="104.211.234.0/23" />
<IpRange Subnet="104.211.236.0/22" />
<IpRange Subnet="104.211.240.0/20" />
<IpRange Subnet="104.47.214.0/23" />
<IpRange Subnet="13.71.64.0/18" />
</Region>
</AzurePublicIpAddresses>';
DECLARE @timer TABLE (T_TEXT VARCHAR(100) NOT NULL, T_TS DATETIME2(7) NOT NULL DEFAULT (SYSDATETIME()));
DECLARE @INT_BUCKET INT = 0;
INSERT INTO @timer(T_TEXT) VALUES('IP RANGE MATCH');
;WITH BASE_DATA AS
(
SELECT
REGION.DATA.value('@Name','VARCHAR(100)') AS REGION
,IPRANGE.DATA.value('@Subnet','VARCHAR(20)') AS IP_RANGE
FROM @IPXML.nodes('AzurePublicIpAddresses/Region') AS REGION (DATA)
CROSS APPLY REGION.DATA.nodes('IpRange') AS IPRANGE(DATA)
)
,IP_RANGE_DETAIL AS
(
SELECT
BD.REGION
,BD.IP_RANGE
,SUBSTRING(BD.IP_RANGE,1,CHARINDEX(CHAR(47),BD.IP_RANGE,1)-1) AS RANGE_START
,POWER(2,32 - CONVERT(INT,SUBSTRING(BD.IP_RANGE,CHARINDEX(CHAR(47),BD.IP_RANGE,1)+ 1,2))) AS NUM_HOSTS
FROM BASE_DATA BD
)
,RANGE_IP_PARSED AS
(
SELECT
IRD.REGION
,IRD.IP_RANGE
,IRD.RANGE_START
,PARSENAME(IRD.RANGE_START,4) AS ACLS
,PARSENAME(IRD.RANGE_START,3) AS BCLS
,PARSENAME(IRD.RANGE_START,2) AS CCLS
,PARSENAME(IRD.RANGE_START,1) AS DCLS
,IRD.NUM_HOSTS
,IRD.NUM_HOSTS / POWER(256,2) AS BRANGE
,IRD.NUM_HOSTS / 256 AS CRANGE
,IRD.NUM_HOSTS % 256 AS DRANGE
FROM IP_RANGE_DETAIL IRD
)
SELECT
@INT_BUCKET = IA.IP_NUM
FROM dbo.TBL_IP_ADDRESS IA
INNER JOIN RANGE_IP_PARSED RIP
ON IA.ACLS = RIP.ACLS
AND IA.BCLS = RIP.BCLS
AND IA.CCLS BETWEEN RIP.CCLS AND RIP.CCLS + RIP.CRANGE
AND IA.DCLS BETWEEN CASE
WHEN RIP.DRANGE > 0 THEN RIP.DCLS
ELSE 0
END
AND CASE
WHEN RIP.DRANGE > 0 THEN RIP.DCLS + RIP.DRANGE
ELSE 255
END
;
INSERT INTO @timer(T_TEXT) VALUES('IP RANGE MATCH');
SELECT
T.T_TEXT
,DATEDIFF(MICROSECOND,MIN(T.T_TS),MAX(T.T_TS)) AS DURATION
FROM @timer T
GROUP BY T.T_TEXT
ORDER BY DURATION;
On my old 2nd gen i5 laptop matching 5,000,000 IPv4 addresses to MS Azure Data Centres IP ranges takes less than two seconds
T_TEXT DURATION
----------------- -----------
IP RANGE MATCH 1346077
Edit: Typo
January 17, 2016 at 4:12 pm
Must be getting tired, just realized that the XML shredding was heavily affecting the timing, adding a table for the ip ranges brings the matching of the 5 million down to 0.6 sec, interested to see any text based IP address matching to IP ranges performing like this, Jeff do you hold any aces up your sleeve?
😎
T_TEXT DURATION
------------------- -----------
IP RANGE MATCH 581033
January 18, 2016 at 1:26 am
Indeed, we've been using the custom application for years now (and it was tested thoroughly before it went into production) and never had issues with ordering (nor performance).
Btw, I know about little and big endian... well that's to say I read about it loooong time ago (possibly when I was still programming C, I cannot even remember :)). Anyway, I'm not shy to admit you guys are out of my league so given your great tips I'm sure we'll use those when the need for a new version arises. Thanks!
Thierry
January 18, 2016 at 5:26 am
It sounds like your BIGINT idea was a great success and it doesn't sound like you ran into any form of endian problems because of it. Thanks again for the feedback, Thierry.
Just for my learning, can you explain what the front end is doing to setup the BIGINT IPs up for display? It may help me help others in the future.
--Jeff Moden
Change is inevitable... Change for the better is not.
January 18, 2016 at 6:35 am
Sure, at the risk of getting shot because of bad coding 😉
We have two helper functions converting from/to long/ip.
We subscribe to the datagrid's CellFormatting event and change the long to an IP for display.
The underlying value in the datagrid is still of type long and so default sorting just works.
I think these helper functions are now deprecated and you need to add a directive to the code to ignore the warnings about that.
As I said, this code was written long time ago, but for us it still does the job today.
Btw, check the remarks section for https://msdn.microsoft.com/en-us/library/tdx10bbd(v=vs.110).aspx
It talks about endian stuff 🙂
Here's the code (I hope this displays somewhat readable):
public static long IPAddressToLong(string ipAddress)
{
return (long)(uint)System.Net.IPAddress.NetworkToHostOrder((int)System.Net.IPAddress.Parse(ipAddress).Address);
}
public static string LongToIPAddress(long ipAddress)
{
return new System.Net.IPAddress((uint)System.Net.IPAddress.HostToNetworkOrder((int)ipAddress)).ToString();
}
void ipDataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (ipDataGridView.Columns[e.ColumnIndex] == ipaddressColumn)
{
e.Value = Helper.Convert.LongToIPAddress((long)e.Value);
}
}
Regards,
Thierry
January 18, 2016 at 6:49 am
thierry.vandurme (1/18/2016)
Sure, at the risk of getting shot because of bad coding 😉We have two helper functions converting from/to long/ip.
We subscribe to the datagrid's CellFormatting event and change the long to an IP for display.
The underlying value in the datagrid is still of type long and so default sorting just works.
I think these helper functions are now deprecated and you need to add a directive to the code to ignore the warnings about that.
As I said, this code was written long time ago, but for us it still does the job today.
Btw, check the remarks section for https://msdn.microsoft.com/en-us/library/tdx10bbd(v=vs.110).aspx
It talks about endian stuff 🙂
Regards,
Thierry
Network endian-ness is predominantly big-endian and the method NetworkToHostOrder will swap the byte order to small-endian. This tells me that you are storing the IPs as big-endian bigint with the first four bytes set to zero which makes sense as otherwise they could not be sorted.
😎
January 18, 2016 at 7:10 am
thierry.vandurme (1/18/2016)
I think these helper functions are now deprecated and you need to add a directive to the code to ignore the warnings about that.
Thanks, Thierry.
Heh... deprecation. It's amazing to me that so many useful things have been deprecated for something "better". There used to be a thing called "sp_MakeWebtask" you would simply pass the text of a query to and it would make beautiful pages. It could even use templates. That was deprecated and finally removed from SQL Server in favor of the "much better" SSRS which, as you know, requires a whole 'nuther language to use and is comparatively extremely slow... slow enough where a lot of people actually stand up a separate box for it and then have to copy data to it so that the "money maker" database isn't slowed down by reporting requests.
Any idea what they want you to use instead of what sounds like a wonderful helper function?
--Jeff Moden
Change is inevitable... Change for the better is not.
January 18, 2016 at 7:15 am
Eirikur Eiriksson (1/18/2016)
Network endian-ness is predominantly big-endian and the method NetworkToHostOrder will swap the byte order to small-endian. This tells me that you are storing the IPs as big-endian bigint with the first four bytes set to zero which makes sense as otherwise they could not be sorted.😎
I guess I'm missing something here, Eirikur. If you remove the dots from a properly formed IP address (each octet containing 3 display digits) and convert that string to an Integer value, you still end up with a 12 digit Integer value. A 4 digit Integer is only capable of a 10 digit value and, of course, the leading digit will not exceed "1". What conversion are you using where the first 4 bytes of a big endian integer would all be zeroed out for a 12 digit IP address that's been converted to an Integer value?
--Jeff Moden
Change is inevitable... Change for the better is not.
Viewing 15 posts - 16 through 30 (of 36 total)
You must be logged in to reply to this topic. Login to reply